diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml index 509ed06814a77..047e7083943f9 100644 --- a/.github/workflows/ci_suite.yml +++ b/.github/workflows/ci_suite.yml @@ -14,12 +14,12 @@ jobs: steps: - uses: actions/checkout@v3 - name: Restore SpacemanDMM cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: $HOME/SpacemanDMM key: ${{ runner.os }}-spacemandmm - name: Restore Yarn cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: tgui/.yarn/cache key: ${{ runner.os }}-yarn-${{ secrets.CACHE_PURGE_KEY }} @@ -54,7 +54,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Restore BYOND cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: $HOME/BYOND key: ${{ runner.os }}-byond @@ -79,7 +79,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Setup cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: $HOME/BYOND key: ${{ runner.os }}-byond diff --git a/.gitignore b/.gitignore index 93727d71e9945..daf69010c2bf9 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ Thumbs.db data/ cfg/ tmp/ +/cache/**/* tools/Runtime Condenser/Input.txt tools/Runtime Condenser/Output.txt tools/MapDaemon/logs/*.txt diff --git a/.vscode/settings.json b/.vscode/settings.json index c717d6120092f..b3833ae735159 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,12 +1,15 @@ { "eslint.nodePath": "./tgui/.yarn/sdks", "eslint.workingDirectories": ["./tgui"], - "prettier.prettierPath": "./tgui/.yarn/sdks/prettier/index.js", + "prettier.prettierPath": "./tgui/.yarn/sdks/prettier/index.cjs", "typescript.tsdk": "./tgui/.yarn/sdks/typescript/lib", "typescript.enablePromptUseWorkspaceTsdk": true, "search.exclude": { - "**/.yarn": true, - "**/.pnp.*": true + "**/.yarn": true, + "**/.pnp.*": true + }, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit" }, "files.eol": "\n", "gitlens.advanced.blame.customArguments": ["-w"], diff --git a/_maps/_basemap.dm b/_maps/_basemap.dm index a3edece9e9147..74cf0c866b42a 100644 --- a/_maps/_basemap.dm +++ b/_maps/_basemap.dm @@ -23,6 +23,7 @@ #include "map_files\desparity\desparity.dmm" #include "map_files\Lawanka_Outpost\LawankaOutpost.dmm" #include "map_files\slumbridge\slumbridge.dmm" + #include "map_files\DaedalusPrison\DaedalusPrison.dmm" #ifdef CIBUILDING #include "templates.dm" #endif diff --git a/_maps/bigred_v2.json b/_maps/bigred_v2.json index 3c34c0a978523..d0d3f90b5b04b 100644 --- a/_maps/bigred_v2.json +++ b/_maps/bigred_v2.json @@ -5,7 +5,7 @@ "disk_sets": { "basic": 1 }, - "quickbuilds": 1800, + "quickbuilds": 2300, "announce_text": "A second generation colony has had a beacon transmitting the same signal, nonstop. Attempts to hail the colony over comms have proved futile. Because the ship was at a nearby drydock, it has been dispatched to figure out what's wrong. TGMC, prepare to deploy!", "traits":[{ "weather_sandstorm": true diff --git a/_maps/daedalusprison.json b/_maps/daedalusprison.json new file mode 100644 index 0000000000000..cd9a91a0ee883 --- /dev/null +++ b/_maps/daedalusprison.json @@ -0,0 +1,20 @@ +{ + "map_name": "Daedalus Prison", + "map_path": "map_files/DaedalusPrison", + "map_file": "DaedalusPrison.dmm", + "environment_traits": { + "COLD": true + }, + "disk_sets": { + "set1": 1, + "set2": 1, + "set3": 1, + "set4": 1 + }, + "armor": "prison", + "quickbuilds": 2300, + "announce_text": "Coming from an icy planet within our jump drive range, a penal colony has sent out an emergency frequency that our comms array received. TGMC, prepare to deploy!", + "traits":[{ + "weather_snowstorm": true + }] +} diff --git a/_maps/gelida_iv.json b/_maps/gelida_iv.json index 8d026a7086017..558ffb821de5e 100644 --- a/_maps/gelida_iv.json +++ b/_maps/gelida_iv.json @@ -6,7 +6,10 @@ "COLD": true }, "disk_sets": { - "basic": 1 + "set1": 2, + "set2": 1, + "set3": 1, + "set4": 2 }, "armor": "ice", "quickbuilds": 1600, diff --git a/_maps/ice_colony_v2.json b/_maps/ice_colony_v2.json index 110cac8134c47..dbede31817a84 100644 --- a/_maps/ice_colony_v2.json +++ b/_maps/ice_colony_v2.json @@ -9,7 +9,7 @@ "basic": 1 }, "armor": "ice", - "quickbuilds": 1600, + "quickbuilds": 2100, "announce_text": "A garbled, unintelligible communications message was broadcasted over a general frequency, and picked up by our comms relay. The message appears to have come from a second generation settlement, located on an ice cold planet. The ship is moving into the sector with thrusters at max throttle. TGMC, get briefed and then move out!", "traits":[{ "weather_snowstorm": true diff --git a/_maps/interiors/tank.dmm b/_maps/interiors/tank.dmm new file mode 100644 index 0000000000000..e0dc236f1208c --- /dev/null +++ b/_maps/interiors/tank.dmm @@ -0,0 +1,157 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/open/space/basic, +/area/interior/tank) +"b" = ( +/turf/closed/interior/tank/door, +/area/interior/tank) +"d" = ( +/obj/structure/bed/chair/vehicle_driver_seat{ + pixel_x = 11; + pixel_y = -6 + }, +/turf/open/interior/tank/twentytwo, +/area/interior/tank) +"f" = ( +/obj/machinery/telecomms/relay/preset/telecomms/onboard/nondense, +/turf/closed/interior/tank/twentyone, +/area/interior/tank) +"h" = ( +/turf/closed/interior/tank/five, +/area/interior/tank) +"j" = ( +/turf/closed/interior/tank/one, +/area/interior/tank) +"k" = ( +/turf/closed/interior/tank/twenty, +/area/interior/tank) +"l" = ( +/turf/open/interior/tank/nine, +/area/interior/tank) +"n" = ( +/turf/closed/interior/tank/eighteen, +/area/interior/tank) +"r" = ( +/turf/closed/interior/tank/twentythree, +/area/interior/tank) +"s" = ( +/turf/open/interior/tank/sixteen, +/area/interior/tank) +"t" = ( +/turf/closed/interior/tank/twentyfour, +/area/interior/tank) +"u" = ( +/obj/structure/gun_breech{ + pixel_x = -13; + pixel_y = -4 + }, +/turf/closed/interior/tank/seventeen, +/area/interior/tank) +"v" = ( +/obj/structure/bed/chair/loader_seat{ + pixel_y = -5 + }, +/obj/structure/periscope, +/turf/open/interior/tank/fifteen, +/area/interior/tank) +"w" = ( +/turf/closed/interior/tank/twentyseven, +/area/interior/tank) +"x" = ( +/turf/open/interior/tank/eight, +/area/interior/tank) +"z" = ( +/turf/closed/interior/tank/nineteen, +/area/interior/tank) +"A" = ( +/obj/structure/ammo_rack/primary{ + pixel_x = 1; + pixel_y = -10 + }, +/turf/closed/interior/tank/four, +/area/interior/tank) +"D" = ( +/turf/closed/interior/tank/twentyeight, +/area/interior/tank) +"E" = ( +/turf/closed/interior/tank/twelve, +/area/interior/tank) +"H" = ( +/turf/closed/interior/tank/twentyfive, +/area/interior/tank) +"I" = ( +/turf/closed/interior/tank/thirteen, +/area/interior/tank) +"M" = ( +/turf/closed/interior/tank/twentysix, +/area/interior/tank) +"N" = ( +/turf/open/interior/tank/ten, +/area/interior/tank) +"S" = ( +/obj/structure/bed/chair/vehicle_gunner_seat{ + pixel_x = -3; + pixel_y = -5 + }, +/turf/open/interior/tank/eleven, +/area/interior/tank) +"V" = ( +/obj/structure/ammo_rack/secondary{ + pixel_x = 11; + pixel_y = -18 + }, +/turf/closed/interior/tank/two, +/area/interior/tank) +"X" = ( +/turf/closed/interior/tank/six, +/area/interior/tank) +"Y" = ( +/obj/structure/gun_breech/secondary, +/turf/open/interior/tank/fourteen, +/area/interior/tank) +"Z" = ( +/turf/closed/interior/tank/three, +/area/interior/tank) + +(1,1,1) = {" +j +b +I +z +a +"} +(2,1,1) = {" +V +x +Y +k +a +"} +(3,1,1) = {" +Z +l +v +f +H +"} +(4,1,1) = {" +A +N +s +d +M +"} +(5,1,1) = {" +h +S +u +r +w +"} +(6,1,1) = {" +X +E +n +t +D +"} diff --git a/_maps/magmoor_digsite_iv.json b/_maps/magmoor_digsite_iv.json index 0a531926dbd71..96e58c0df9fc3 100644 --- a/_maps/magmoor_digsite_iv.json +++ b/_maps/magmoor_digsite_iv.json @@ -3,7 +3,9 @@ "map_path": "map_files/Magmoor_Digsite_IV", "map_file": "Magmoor_Digsite_IV.dmm", "disk_sets": { - "basic": 1 + "set1": 1, + "set2": 1, + "set3": 1 }, "quickbuilds": 1800, "announce_text": "A faint distress signal has been picked up by our scanners, which have tracked the source to a mining and archaeological site, known as Magmoor Digsite IV. Through use of bluespace drive tech, the ship has jumped within range of the colony. TGMC, gear up and get ready to respond!" diff --git a/_maps/map_files/Arachne/TGS_Arachne.dmm b/_maps/map_files/Arachne/TGS_Arachne.dmm index 1ebe4152ea9ec..bde4bbd2ebbdf 100644 --- a/_maps/map_files/Arachne/TGS_Arachne.dmm +++ b/_maps/map_files/Arachne/TGS_Arachne.dmm @@ -70,7 +70,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/structure/disposalpipe/segment, @@ -90,11 +90,8 @@ }, /turf/open/floor/mainship/red, /area/mainship/shipboard/firing_range) -"ahj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/mainship/orange/corner{ +"agU" = ( +/turf/open/floor/mainship/black/corner{ dir = 8 }, /area/mainship/living/pilotbunks) @@ -114,7 +111,7 @@ /area/mainship/medical/upper_medical) "ahX" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -128,7 +125,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/effect/ai_node, @@ -168,9 +165,17 @@ }, /turf/open/floor/mainship/research, /area/mainship/medical/upper_medical) +"ajx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, +/turf/open/floor/mainship/black{ + dir = 1 + }, +/area/mainship/living/pilotbunks) "ajW" = ( /obj/effect/spawner/random/misc/plant, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -288,13 +293,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/mainship/floor, /area/mainship/engineering/upper_engine_monitoring) -"aoX" = ( -/obj/machinery/vending/nanomed{ - dir = 1 - }, -/obj/effect/ai_node, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "apm" = ( /obj/structure/prop/mainship/ship_memorial, /turf/open/floor/grass, @@ -323,16 +321,11 @@ /area/mainship/squads/general) "apO" = ( /obj/structure/bed/chair/wood/wings, -/obj/structure/cable, /turf/open/floor/wood, /area/mainship/living/cafeteria_officer) "aqt" = ( /turf/open/floor/wood, /area/mainship/command/corporateliaison) -"aro" = ( -/obj/effect/ai_node, -/turf/open/floor/plating, -/area/mainship/living/tankerbunks) "arw" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /obj/machinery/firealarm, @@ -415,7 +408,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/landinglight/cas{ @@ -595,10 +588,12 @@ /turf/closed/wall/mainship, /area/mainship/living/commandbunks) "aDL" = ( -/obj/machinery/cryopod/right, /obj/machinery/light/mainship{ dir = 1 }, +/obj/machinery/cryopod/right{ + dir = 1 + }, /turf/open/floor/mainship/black/full, /area/mainship/living/cryo_cells) "aDR" = ( @@ -660,6 +655,12 @@ /obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/starboard_hull) +"aHP" = ( +/obj/effect/ai_node, +/turf/open/floor/mainship/black{ + dir = 8 + }, +/area/mainship/living/pilotbunks) "aHQ" = ( /obj/structure/bed/stool{ pixel_y = 8 @@ -702,6 +703,12 @@ /obj/machinery/firealarm, /turf/open/floor/wood, /area/mainship/hallways/starboard_hallway) +"aJv" = ( +/obj/machinery/cryopod/right{ + dir = 1 + }, +/turf/open/floor/mainship/black/full, +/area/mainship/living/cryo_cells) "aJy" = ( /obj/item/autopsy_scanner, /obj/item/tool/surgery/retractor, @@ -787,7 +794,7 @@ /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar/droppod) "aMZ" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -823,6 +830,14 @@ dir = 4 }, /area/mainship/living/grunt_rnr) +"aPk" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/mainship/medical/lower_medical) "aQd" = ( /obj/machinery/light/mainship{ dir = 1 @@ -893,12 +908,6 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/command/corporateliaison) -"aSe" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 4 - }, -/turf/open/floor/wood, -/area/mainship/hallways/port_hallway) "aTl" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ dir = 1; @@ -964,7 +973,7 @@ }, /area/mainship/squads/general) "aYg" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -1029,6 +1038,15 @@ /obj/machinery/door/firedoor/mainship, /turf/open/floor/mainship/research, /area/mainship/medical/upper_medical) +"bcP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/living/pilotbunks) "bdd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -1084,15 +1102,6 @@ /obj/machinery/holopad, /turf/open/floor/mainship/floor, /area/mainship/engineering/engineering_workshop) -"beP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/hangar) "beT" = ( /obj/machinery/shower{ dir = 4; @@ -1131,11 +1140,6 @@ dir = 4 }, /area/mainship/living/grunt_rnr) -"bfZ" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/camera/autoname/mainship, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "bgn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -1154,6 +1158,10 @@ dir = 8 }, /obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/mainship/ai/exterior{ + dir = 4; + id = "AiCoreShutter" + }, /turf/open/floor/plating, /area/mainship/engineering/starboard_atmos) "bhv" = ( @@ -1253,14 +1261,6 @@ "bmT" = ( /turf/open/floor/wood, /area/mainship/hallways/starboard_hallway) -"bnf" = ( -/obj/machinery/vending/cargo_supply, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/turf/open/floor/mainship/green{ - dir = 2 - }, -/area/mainship/squads/req) "bnh" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -1327,7 +1327,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /turf/open/floor/wood, @@ -1357,10 +1357,6 @@ dir = 4 }, /area/mainship/engineering/engineering_workshop) -"bpv" = ( -/obj/structure/table/mainship/nometal, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "bpK" = ( /obj/effect/turf_decal/warning_stripes/thin, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -1428,6 +1424,16 @@ dir = 1 }, /area/mainship/living/pilotbunks) +"bsw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 10 + }, +/obj/effect/ai_node, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/medical_science) "bsz" = ( /turf/open/floor/mainship/red{ dir = 1 @@ -1471,12 +1477,13 @@ /obj/effect/turf_decal/warning_stripes/thin{ dir = 9 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/mainship/red/corner{ dir = 1 }, @@ -1523,6 +1530,15 @@ /obj/structure/table/mainship/nometal, /turf/open/floor/mainship/floor, /area/mainship/living/grunt_rnr) +"bzc" = ( +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer1, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/medical_science) "bze" = ( /obj/structure/closet/secure_closet/staff_officer, /turf/open/floor/mainship/black, @@ -1700,11 +1716,6 @@ /turf/open/floor/mainship/silver/full, /area/mainship/medical/lower_medical) "bEA" = ( -/obj/machinery/door_control/mainship/req{ - dir = 8; - id = "requisitions"; - name = "Requisitions Shutters" - }, /turf/open/floor/mainship/green{ dir = 4 }, @@ -1718,20 +1729,6 @@ }, /turf/open/floor/mainship/floor, /area/mainship/squads/req) -"bFa" = ( -/obj/effect/decal/cleanable/blood/oil{ - name = "grease"; - pixel_x = -5; - pixel_y = -6 - }, -/turf/open/floor/plating, -/area/mainship/living/tankerbunks) -"bFc" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/holopad, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/squads/general) "bFu" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -1758,12 +1755,6 @@ }, /turf/open/floor/mainship/research, /area/mainship/medical/upper_medical) -"bGJ" = ( -/obj/structure/dropship_equipment/shuttle/flare_launcher, -/turf/open/floor/mainship/orange{ - dir = 4 - }, -/area/mainship/hallways/hangar) "bHp" = ( /turf/open/floor/wood, /area/mainship/living/commandbunks) @@ -1811,14 +1802,6 @@ }, /turf/open/floor/mainship/floor, /area/mainship/living/numbertwobunks) -"bIO" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/structure/disposalpipe/junction/yjunc{ - dir = 8 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/squads/general) "bJh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -1854,15 +1837,6 @@ /obj/effect/ai_node, /turf/open/floor/wood, /area/mainship/command/corporateliaison) -"bKM" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/obj/machinery/light/mainship{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "bLH" = ( /obj/structure/window/reinforced{ dir = 4 @@ -1881,14 +1855,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /turf/open/floor/mainship/black, /area/mainship/hallways/port_hallway) -"bMa" = ( -/obj/structure/window/framed/mainship/requisitions, -/obj/machinery/door/firedoor/mainship{ - dir = 8 - }, -/obj/docking_port/stationary/marine_dropship/crash_target, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar/flight_control) "bMC" = ( /obj/machinery/vending/uniform_supply, /obj/machinery/camera/autoname/mainship{ @@ -1955,7 +1921,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/structure/disposalpipe/junction{ @@ -2013,10 +1979,6 @@ /obj/machinery/holopad, /turf/open/floor/wood, /area/mainship/command/corporateliaison) -"bSA" = ( -/obj/structure/cable, -/turf/open/floor/mainship/mono, -/area/mainship/squads/req) "bUi" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -2036,6 +1998,19 @@ /obj/machinery/disposal, /turf/open/floor/mainship/silver/full, /area/mainship/living/evacuation) +"bUD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/door/airlock/mainship/maint{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hull/starboard_hull) "bVb" = ( /obj/structure/disposalpipe/junction/flipped{ dir = 1 @@ -2071,6 +2046,19 @@ dir = 4 }, /area/mainship/squads/general) +"bXD" = ( +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/structure/window/framed/mainship, +/turf/open/floor/mainship/floor, +/area/mainship/living/pilotbunks) "bYa" = ( /obj/structure/cable, /turf/open/floor/mainship/floor, @@ -2170,7 +2158,7 @@ /area/mainship/living/numbertwobunks) "cec" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -2179,17 +2167,6 @@ /obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) -"cef" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/holopad, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "cek" = ( /obj/effect/turf_decal/warning_stripes/box/small, /obj/effect/turf_decal/warning_stripes/box/small{ @@ -2265,15 +2242,6 @@ }, /turf/open/floor/wood, /area/mainship/living/grunt_rnr) -"chN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/structure/disposalpipe/junction/flipped{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/starboard_hallway) "cih" = ( /obj/machinery/camera/autoname/mainship, /obj/effect/ai_node, @@ -2324,21 +2292,19 @@ }, /turf/open/floor/plating, /area/mainship/hull/port_hull) +"ckd" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/living/pilotbunks) "ckB" = ( /obj/machinery/camera/autoname/mainship{ dir = 4 }, /turf/open/floor/mainship/floor, /area/mainship/engineering/starboard_atmos) -"ckG" = ( -/obj/machinery/door/airlock/mainship/generic/pilot/quarters{ - dir = 1 - }, -/obj/machinery/door/firedoor{ - dir = 1 - }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "ckM" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -2367,7 +2333,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/structure/disposalpipe/segment/corner{ @@ -2405,6 +2371,16 @@ dir = 1 }, /area/mainship/hallways/starboard_hallway) +"cnm" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/effect/ai_node, +/obj/structure/cable, +/turf/open/floor/mainship/floor, +/area/mainship/living/pilotbunks) "cnp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -2425,6 +2401,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/door/poddoor/shutters/mainship/open/hangar{ + dir = 8 + }, /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar) "cnI" = ( @@ -2532,7 +2511,7 @@ /turf/open/floor/mainship/floor, /area/mainship/living/cryo_cells) "crL" = ( -/obj/structure/closet/secure_closet/engineering_welding, +/obj/structure/closet/firecloset/full, /turf/open/floor/mainship/green{ dir = 9 }, @@ -2559,7 +2538,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/holopad, @@ -2593,15 +2572,6 @@ }, /turf/open/floor/mainship/floor, /area/mainship/living/numbertwobunks) -"cuU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/camera/autoname/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/sterile/dark, -/area/mainship/medical/medical_science) "cvG" = ( /obj/machinery/door/airlock/mainship/maint{ dir = 8 @@ -2702,18 +2672,6 @@ dir = 10 }, /area/mainship/living/commandbunks) -"cza" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/effect/ai_node, -/turf/open/floor/mainship/orange{ - dir = 8 - }, -/area/mainship/living/pilotbunks) "czi" = ( /obj/effect/turf_decal/warning_stripes/thick/corner, /turf/open/floor/plating, @@ -2730,6 +2688,10 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/poddoor/mainship/ai/exterior{ + dir = 2; + id = "AiCoreShutter" + }, /turf/open/floor/plating/plating_catwalk, /area/mainship/command/airoom) "czU" = ( @@ -2760,12 +2722,6 @@ /obj/effect/ai_node, /turf/open/floor/mainship/floor, /area/mainship/hallways/port_ert) -"cAR" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/effect/ai_node, -/turf/open/floor/mainship/floor, -/area/mainship/living/evacuation) "cBp" = ( /obj/structure/bed/chair/sofa{ dir = 8 @@ -2835,6 +2791,12 @@ dir = 5 }, /area/mainship/hallways/hangar/droppod) +"cDb" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/structure/cable, +/obj/machinery/power/apc/mainship, +/turf/open/floor/mainship/orange, +/area/mainship/living/tankerbunks) "cDr" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -2888,17 +2850,17 @@ }, /turf/open/floor/mainship/floor, /area/mainship/shipboard/chief_mp_office) -"cHG" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/computer/security/marinemainship_network, +"cGQ" = ( +/obj/machinery/door/airlock/mainship/generic/pilot/quarters, +/obj/machinery/door/firedoor, /turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) +/area/mainship/living/tankerbunks) "cIX" = ( /obj/structure/flora/ausbushes/ywflowers, /turf/open/floor/grass, /area/mainship/living/starboard_garden) "cJc" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -2919,16 +2881,6 @@ "cJw" = ( /turf/open/floor/mainship/silver, /area/mainship/hallways/port_ert) -"cKm" = ( -/obj/machinery/door/airlock/mainship/generic/pilot/quarters{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/door/firedoor{ - dir = 1 - }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "cKw" = ( /obj/structure/mirror, /obj/structure/sink, @@ -2954,27 +2906,6 @@ }, /turf/open/floor/mainship/sterile/side, /area/mainship/medical/morgue) -"cMv" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 6 - }, -/obj/machinery/firealarm{ - dir = 8 - }, -/turf/open/floor/mainship/black{ - dir = 4 - }, -/area/mainship/hallways/port_hallway) -"cML" = ( -/obj/structure/table/mainship/nometal, -/obj/item/reagent_containers/food/drinks/shaker, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/head/chefhat, -/obj/item/clothing/suit/chef/classic, -/obj/item/tool/kitchen/rollingpin, -/obj/item/book/manual/chef_recipes, -/turf/open/floor/mainship/mono, -/area/mainship/living/grunt_rnr) "cNE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -3070,11 +3001,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/plating/plating_catwalk, /area/mainship/medical/upper_medical) -"cPM" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/light/mainship, -/turf/open/floor/mainship/black, -/area/mainship/hallways/hangar) "cPU" = ( /obj/effect/spawner/random/misc/plant, /obj/structure/cable, @@ -3148,9 +3074,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ - dir = 2 - }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -3257,7 +3181,7 @@ /area/mainship/squads/general) "cVu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -3325,20 +3249,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /turf/open/floor/mainship/orange, /area/mainship/engineering/engineering_workshop) -"cWw" = ( -/obj/machinery/firealarm{ - dir = 8 - }, -/turf/open/floor/mainship/black{ - dir = 4 - }, -/area/mainship/hallways/hangar) -"cWK" = ( -/obj/structure/cable, -/turf/open/floor/mainship/orange{ - dir = 4 - }, -/area/mainship/living/pilotbunks) "cWN" = ( /obj/machinery/door/window/secure/bridge{ dir = 8 @@ -3396,6 +3306,17 @@ /obj/machinery/door/firedoor/multi_tile, /turf/open/floor/mainship/floor, /area/mainship/squads/general) +"daG" = ( +/obj/machinery/door/airlock/mainship/research{ + dir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/firedoor{ + dir = 1 + }, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/medical_science) "daT" = ( /obj/machinery/firealarm{ dir = 8 @@ -3436,7 +3357,7 @@ /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/medical_science) "dbW" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -3459,18 +3380,6 @@ /obj/structure/window/framed/mainship/requisitions, /turf/open/floor/mainship/floor, /area/mainship/engineering/upper_engine_monitoring) -"ddc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/turf/open/floor/mainship/orange{ - dir = 6 - }, -/area/mainship/hallways/hangar/flight_control) "ddi" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -3612,6 +3521,7 @@ "diB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/squads/req) "diE" = ( @@ -3656,19 +3566,36 @@ /obj/structure/window/reinforced/windowstake{ dir = 8 }, +/obj/machinery/vending/nanomed{ + dir = 8 + }, /turf/open/floor/mainship/floor, /area/mainship/shipboard/firing_range) "dkl" = ( /obj/structure/table/mainship/nometal, -/obj/item/clipboard, +/obj/item/clipboard{ + pixel_x = 6; + pixel_y = 2 + }, /obj/item/paper{ - pixel_x = 5 + pixel_x = 6; + pixel_y = 3 + }, +/obj/item/tool/pen{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/tool/stamp/qm{ + pixel_x = 6; + pixel_y = 2 }, -/obj/item/tool/pen, -/obj/item/tool/stamp/qm, /obj/machinery/door_control/old/req{ - pixel_x = -10; - pixel_y = 12 + pixel_y = -5; + pixel_x = -9 + }, +/obj/effect/spawner/random/misc/paperbin{ + pixel_x = -8; + pixel_y = 10 }, /turf/open/floor/mainship/green{ dir = 1 @@ -3741,7 +3668,7 @@ /turf/closed/wall/mainship/white, /area/mainship/medical/lounge) "dnY" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -3775,7 +3702,7 @@ /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) "dow" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, @@ -3882,7 +3809,7 @@ /turf/open/floor/mainship/research, /area/mainship/medical/upper_medical) "drL" = ( -/obj/structure/bed/chair/wheelchair{ +/obj/vehicle/ridden/wheelchair{ dir = 1 }, /turf/open/floor/mainship/sterile/dark, @@ -3924,6 +3851,10 @@ dir = 8 }, /obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/mainship/ai/exterior{ + dir = 4; + id = "AiCoreShutter" + }, /turf/open/floor/plating, /area/mainship/command/airoom) "duv" = ( @@ -3964,26 +3895,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar/droppod) -"dxr" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/door_control/old/cic/hangar_shutters{ - pixel_x = 8; - pixel_y = 10 - }, -/obj/machinery/door_control/old{ - id = "ammo1"; - name = "Dropship Armament Storage"; - pixel_x = 8; - pixel_y = 3 - }, -/obj/machinery/door_control/old{ - id = "ammo2"; - name = "Dropship Ammo Storage"; - pixel_x = 8; - pixel_y = -4 - }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "dxv" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -3999,18 +3910,6 @@ }, /turf/open/floor/mainship/black, /area/mainship/hallways/starboard_hallway) -"dyl" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 10 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "dyr" = ( /obj/structure/disposalpipe/segment/corner{ dir = 1 @@ -4019,7 +3918,7 @@ /area/mainship/engineering/starboard_atmos) "dzr" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -4046,9 +3945,6 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "dAc" = ( -/obj/structure/stairs{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 5 }, @@ -4104,6 +4000,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/structure/disposalpipe/segment/corner, +/obj/structure/cable, /turf/open/floor/mainship/red{ dir = 8 }, @@ -4141,19 +4038,6 @@ "dCA" = ( /turf/open/floor/mainship/black/corner, /area/mainship/hallways/starboard_hallway) -"dCN" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/mainship/floor, -/area/mainship/engineering/engineering_workshop) "dDc" = ( /turf/closed/wall/mainship, /area/mainship/command/corporateliaison) @@ -4177,10 +4061,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/living/pilotbunks) -"dEY" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/layer1, -/turf/open/floor/plating, -/area/mainship/living/tankerbunks) "dGb" = ( /turf/open/floor/plating, /area/mainship/medical/upper_medical) @@ -4196,7 +4076,7 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -4208,6 +4088,9 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) +"dGq" = ( +/turf/open/floor/mainship/black/corner, +/area/mainship/living/pilotbunks) "dGu" = ( /obj/structure/flora/ausbushes/ywflowers, /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ @@ -4238,19 +4121,6 @@ /obj/machinery/telecomms/server/presets/bravo, /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) -"dHB" = ( -/obj/machinery/disposal, -/turf/open/floor/wood, -/area/mainship/hallways/port_hallway) -"dHM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/structure/disposalpipe/junction/flipped{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/port_hallway) "dHS" = ( /obj/structure/table/reinforced, /obj/item/facepaint/green, @@ -4274,7 +4144,7 @@ "dID" = ( /obj/item/ammo_casing/cartridge, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -4332,6 +4202,21 @@ /obj/structure/cable, /turf/open/floor/mainship/silver/full, /area/mainship/medical/upper_medical) +"dKZ" = ( +/obj/structure/window/framed/mainship, +/obj/machinery/door/firedoor/mainship, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/mainship/floor, +/area/mainship/living/tankerbunks) "dLR" = ( /obj/structure/bed/chair/comfy/black{ dir = 8 @@ -4542,10 +4427,6 @@ /obj/machinery/mech_bay_recharge_port, /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar) -"dSZ" = ( -/obj/structure/cable, -/turf/open/floor/mainship/floor, -/area/mainship/shipboard/weapon_room) "dTG" = ( /obj/structure/cable, /obj/machinery/light/mainship/small{ @@ -4569,7 +4450,7 @@ /area/mainship/command/airoom) "dUQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -4583,6 +4464,19 @@ /obj/structure/cable, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/starboard_hull) +"dVG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment/corner{ + dir = 8 + }, +/turf/open/floor/mainship/floor, +/area/mainship/squads/req) "dWH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -4608,7 +4502,7 @@ /turf/open/floor/mainship/floor, /area/mainship/shipboard/brig) "dZu" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -4636,7 +4530,7 @@ /area/mainship/medical/lounge) "eaZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -4703,9 +4597,7 @@ "efg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ - dir = 2 - }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) "efm" = ( @@ -4728,7 +4620,6 @@ dir = 1; name = "\improper CMO Bunk Airlock" }, -/obj/effect/ai_node, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/cmo_office) "egu" = ( @@ -4830,6 +4721,15 @@ }, /turf/open/floor/tile/damaged/panel, /area/mainship/shipboard/brig_cells) +"ell" = ( +/obj/machinery/camera/autoname/mainship{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/mainship/black/corner{ + dir = 4 + }, +/area/mainship/living/pilotbunks) "elu" = ( /turf/open/floor/mainship/silver{ dir = 4 @@ -4960,10 +4860,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/mainship/floor, /area/mainship/hallways/port_ert) -"eqs" = ( -/obj/structure/window/framed/mainship/requisitions, -/turf/open/floor/mainship/floor, -/area/mainship/squads/req) "eqz" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor/mainship{ @@ -5030,14 +4926,6 @@ }, /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/starboard_hallway) -"esT" = ( -/obj/machinery/light/mainship{ - dir = 4 - }, -/turf/open/floor/mainship/orange{ - dir = 8 - }, -/area/mainship/living/pilotbunks) "esW" = ( /obj/structure/closet/crate/ammo, /turf/open/floor/plating, @@ -5204,7 +5092,7 @@ /area/mainship/medical/chemistry) "eBe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -5229,7 +5117,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/structure/disposalpipe/segment/corner{ @@ -5270,7 +5158,6 @@ /turf/open/floor/mainship/floor, /area/mainship/squads/req) "eDN" = ( -/obj/structure/cable, /obj/machinery/vending/nanomed{ dir = 8 }, @@ -5353,15 +5240,7 @@ /obj/structure/cable, /turf/open/floor/mainship/floor, /area/mainship/engineering/starboard_atmos) -"eHv" = ( -/obj/machinery/floodlight/landing, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 10 - }, -/turf/open/floor/plating, -/area/mainship/hallways/hangar) "eHK" = ( -/obj/structure/cable, /obj/machinery/firealarm{ dir = 8 }, @@ -5380,7 +5259,7 @@ }, /area/mainship/command/cic) "eIK" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -5410,6 +5289,12 @@ "eJg" = ( /turf/open/floor/plating, /area/mainship/squads/req) +"eJB" = ( +/obj/machinery/firealarm{ + dir = 8 + }, +/turf/open/floor/mainship/floor, +/area/mainship/squads/req) "eKc" = ( /turf/open/floor/mainship/blue, /area/mainship/living/bridgebunks) @@ -5430,16 +5315,6 @@ dir = 4 }, /area/mainship/medical/upper_medical) -"eLB" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold4w/supply/visible/layer1, -/turf/open/floor/mainship/red{ - dir = 8 - }, -/area/mainship/shipboard/weapon_room) "eLC" = ( /obj/effect/ai_node, /turf/open/floor/plating, @@ -5474,7 +5349,7 @@ /obj/structure/bed/chair/office/dark{ dir = 1 }, -/obj/effect/landmark/start/job/pilotofficer, +/obj/effect/landmark/start/job/transportofficer, /turf/open/floor/wood, /area/mainship/living/pilotbunks) "eMo" = ( @@ -5497,10 +5372,6 @@ dir = 1 }, /area/mainship/squads/req) -"eMA" = ( -/obj/machinery/vending/snack, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "eNb" = ( /obj/machinery/light/mainship, /turf/open/floor/mainship/sterile/side, @@ -5751,6 +5622,17 @@ dir = 1 }, /area/mainship/engineering/engineering_workshop) +"eVm" = ( +/obj/machinery/door/poddoor/mainship/mech, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor/mainship, +/turf/open/floor/mainship/floor, +/area/mainship/living/tankerbunks) "eVn" = ( /obj/structure/window/framed/mainship/white, /obj/structure/disposalpipe/segment{ @@ -5759,13 +5641,6 @@ /obj/structure/cable, /turf/open/floor/mainship/sterile/dark, /area/mainship/hallways/port_ert) -"eVP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/living/pilotbunks) "eWn" = ( /obj/machinery/door/airlock/mainship/generic{ name = "Kitchen" @@ -5813,6 +5688,16 @@ dir = 6 }, /area/mainship/squads/general) +"eXz" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/obj/effect/ai_node, +/turf/open/floor/plating, +/area/mainship/command/airoom) "eXB" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -5841,14 +5726,6 @@ "eYl" = ( /turf/open/floor/plating/plating_catwalk, /area/mainship/engineering/starboard_atmos) -"eYK" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/structure/disposalpipe/junction, -/turf/open/floor/mainship/orange{ - dir = 1 - }, -/area/mainship/living/pilotbunks) "eZl" = ( /obj/structure/closet/secure_closet/military_police, /turf/open/floor/mainship/red{ @@ -5985,7 +5862,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /turf/open/floor/plating/plating_catwalk, @@ -6037,6 +5914,20 @@ /obj/effect/landmark/start/job/medicalofficer, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/operating_room_one) +"fhn" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/ai_node, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "fhU" = ( /obj/machinery/light/mainship{ dir = 8 @@ -6063,15 +5954,6 @@ }, /turf/open/floor/mainship/floor, /area/mainship/squads/general) -"fjh" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/effect/ai_node, -/turf/open/floor/mainship/floor, -/area/mainship/living/pilotbunks) "fjj" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 1 @@ -6153,6 +6035,20 @@ }, /turf/open/floor/prison/kitchen, /area/mainship/living/grunt_rnr) +"flT" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/living/tankerbunks) "fmj" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -6188,23 +6084,6 @@ }, /turf/open/floor/mainship/research, /area/mainship/medical/upper_medical) -"for" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/structure/disposalpipe/segment, -/turf/open/floor/mainship/black{ - dir = 1 - }, -/area/mainship/hallways/starboard_hallway) -"foM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/structure/disposalpipe/junction/flipped{ - dir = 4 - }, -/turf/open/floor/mainship/sterile/dark, -/area/mainship/medical/chemistry) "foS" = ( /obj/structure/closet/secure_closet/medical2, /turf/open/floor/mainship/sterile/dark, @@ -6244,24 +6123,33 @@ /obj/structure/table/mainship/nometal, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/starboard_hull) +"frU" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/mainship/black{ + dir = 1 + }, +/area/mainship/living/pilotbunks) "fsN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, /turf/closed/wall/mainship, /area/mainship/hull/port_hull) -"ftu" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 +"fsO" = ( +/obj/machinery/power/port_gen/pacman, +/obj/item/stack/sheet/mineral/phoron{ + amount = 25 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 6 +/obj/item/stack/sheet/mineral/phoron{ + amount = 25 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 +/turf/open/floor/mainship/orange{ + dir = 5 }, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) +/area/mainship/hallways/hangar) "ftG" = ( /obj/machinery/cic_maptable/drawable/big{ pixel_x = -19 @@ -6290,6 +6178,7 @@ "fur" = ( /obj/structure/rack, /obj/item/uav_turret/droid, +/obj/item/uav_turret/droid, /turf/open/floor/mainship/cargo, /area/mainship/command/airoom) "fuI" = ( @@ -6314,7 +6203,7 @@ /area/mainship/hallways/hangar) "fuP" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -6347,6 +6236,17 @@ }, /turf/open/floor/mainship/floor, /area/mainship/squads/general) +"fwB" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/junction, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/living/pilotbunks) "fwY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -6413,7 +6313,7 @@ /area/mainship/hallways/hangar) "fzi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -6445,7 +6345,6 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/port_hull) "fzO" = ( -/obj/structure/cable, /obj/machinery/camera/autoname/mainship{ dir = 8 }, @@ -6466,18 +6365,6 @@ /obj/effect/spawner/random/food_or_drink/drink_alcohol_bottle, /turf/open/floor/wood, /area/mainship/living/cafeteria_officer) -"fBI" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/light/mainship{ - dir = 8 - }, -/turf/open/floor/mainship/orange{ - dir = 4 - }, -/area/mainship/living/pilotbunks) "fCj" = ( /obj/machinery/door/airlock/mainship/maint{ dir = 8 @@ -6492,6 +6379,14 @@ /obj/machinery/door/firedoor, /turf/open/floor/plating, /area/mainship/medical/cmo_office) +"fDq" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/turf/open/floor/mainship/orange{ + dir = 8 + }, +/area/mainship/living/tankerbunks) "fDt" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -6512,28 +6407,9 @@ }, /turf/open/floor/mainship/floor, /area/mainship/squads/req) -"fEy" = ( -/obj/structure/table/mainship/nometal, -/obj/item/reagent_containers/food/drinks/shaker, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/head/chefhat, -/obj/item/clothing/suit/chef/classic, -/obj/item/tool/kitchen/rollingpin, -/obj/item/book/manual/chef_recipes, -/obj/machinery/light/mainship, -/turf/open/floor/mainship/sterile/corner{ - dir = 4 - }, -/area/mainship/medical/lounge) -"fFA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold4w/supply/visible/layer1, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/squads/general) "fFS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -6579,7 +6455,7 @@ /area/mainship/medical/chemistry) "fHx" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -6590,12 +6466,6 @@ }, /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar) -"fHP" = ( -/obj/structure/cable, -/turf/open/floor/mainship/black{ - dir = 4 - }, -/area/mainship/hallways/hangar) "fIp" = ( /obj/structure/table/mainship/nometal, /obj/machinery/computer/camera, @@ -6608,13 +6478,26 @@ dir = 5 }, /area/mainship/squads/req) -"fIT" = ( +"fIz" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 10 + }, +/obj/structure/closet/secure_closet/engineering_welding, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 4 + }, +/obj/structure/disposalpipe/segment/corner, /obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/mainship/black{ - dir = 1 +/obj/machinery/light/mainship{ + dir = 4 }, -/area/mainship/hallways/starboard_hallway) +/turf/open/floor/mainship/orange/corner{ + dir = 8 + }, +/area/mainship/living/tankerbunks) "fJh" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -6637,6 +6520,7 @@ dir = 8; on = 1 }, +/obj/effect/ai_node, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/cmo_office) "fJv" = ( @@ -6667,7 +6551,7 @@ /area/mainship/medical/upper_medical) "fKj" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -6679,6 +6563,12 @@ }, /turf/open/floor/plating, /area/mainship/medical/cmo_office) +"fKq" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/lower_medical) "fKw" = ( /obj/structure/cable, /turf/open/floor/mainship/floor, @@ -6689,10 +6579,14 @@ dir = 8 }, /area/mainship/hallways/hangar) -"fKK" = ( +"fKA" = ( /obj/structure/cable, -/turf/open/floor/mainship/orange/corner, -/area/mainship/living/pilotbunks) +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/turf/open/floor/mainship/purple{ + dir = 4 + }, +/area/mainship/medical/upper_medical) "fLd" = ( /obj/effect/spawner/random/misc/paperbin{ pixel_x = 7; @@ -6876,6 +6770,7 @@ /obj/structure/disposalpipe/segment/corner{ dir = 8 }, +/obj/structure/stairs, /turf/open/floor/plating, /area/mainship/hallways/starboard_hallway) "fRR" = ( @@ -6988,13 +6883,6 @@ dir = 10 }, /area/mainship/hallways/hangar) -"fZg" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/computer/emails{ - pixel_y = 5 - }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "fZl" = ( /obj/effect/turf_decal/warning_stripes/thin, /turf/open/floor/mainship/floor, @@ -7008,8 +6896,24 @@ dir = 8 }, /area/mainship/medical/lounge) +"fZA" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/mainship/orange{ + dir = 4 + }, +/area/mainship/living/tankerbunks) "fZU" = ( /obj/machinery/light/mainship, +/obj/structure/ship_ammo/cas/bomb/fourhundred, /turf/open/floor/mainship/cargo/arrow{ dir = 1 }, @@ -7056,14 +6960,6 @@ dir = 4 }, /area/mainship/squads/general) -"gdx" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/mainship/orange{ - dir = 1 - }, -/area/mainship/hallways/hangar/flight_control) "gdD" = ( /obj/machinery/computer/security/marinemainship{ dir = 8; @@ -7074,15 +6970,6 @@ dir = 8 }, /area/mainship/command/cic) -"gdS" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/structure/disposalpipe/junction/flipped{ - dir = 4 - }, -/turf/open/floor/mainship/orange{ - dir = 1 - }, -/area/mainship/hallways/hangar/flight_control) "gdV" = ( /obj/machinery/atmospherics/pipe/simple, /obj/structure/cable, @@ -7096,7 +6983,7 @@ /area/mainship/hull/port_hull) "gep" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -7107,7 +6994,7 @@ "gey" = ( /obj/machinery/computer/body_scanconsole, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -7123,6 +7010,7 @@ /turf/open/floor/stairs/rampbottom, /area/mainship/hallways/hangar) "geW" = ( +/obj/structure/ship_ammo/cas/bomblet, /turf/open/floor/mainship/red{ dir = 1 }, @@ -7171,7 +7059,7 @@ /turf/open/floor/mainship/floor, /area/mainship/engineering/starboard_atmos) "gis" = ( -/obj/structure/dropship_equipment/cas/weapon/rocket_pod, +/obj/structure/dropship_equipment/cas/weapon/bomb_pod, /turf/open/floor/mainship/red{ dir = 4 }, @@ -7187,13 +7075,6 @@ "gjA" = ( /turf/closed/wall/mainship/research/containment/wall/purple, /area/mainship/medical/medical_science) -"gjQ" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/turf/open/floor/mainship/floor, -/area/mainship/command/cic) "gjT" = ( /obj/machinery/light/mainship{ dir = 8 @@ -7207,6 +7088,20 @@ /obj/effect/ai_node, /turf/open/floor/wood, /area/mainship/living/pilotbunks) +"glA" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment/corner{ + dir = 8 + }, +/turf/open/floor/mainship/floor, +/area/mainship/living/pilotbunks) "glX" = ( /obj/structure/rack, /obj/item/toy/plush/rouny, @@ -7311,27 +7206,22 @@ /obj/effect/ai_node, /turf/open/floor/mech_bay_recharge_floor, /area/mainship/command/airoom) -"gpD" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ - dir = 8; - on = 1 - }, -/obj/machinery/firealarm{ - dir = 8 - }, -/turf/open/floor/mainship/orange{ - dir = 8 - }, -/area/mainship/living/pilotbunks) "gpY" = ( /obj/effect/landmark/start/latejoin, /turf/open/floor/mainship/black{ dir = 4 }, /area/mainship/living/cryo_cells) +"gqj" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/structure/closet/emcloset, +/obj/machinery/light/mainship{ + dir = 1 + }, +/turf/open/floor/mainship/orange, +/area/mainship/living/tankerbunks) "gqm" = ( /obj/structure/disposalpipe/segment, -/obj/structure/cable, /turf/open/floor/mainship/green{ dir = 4 }, @@ -7446,6 +7336,12 @@ /obj/machinery/firealarm, /turf/open/floor/mainship/floor, /area/mainship/command/telecomms) +"gtJ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/turf/open/floor/mainship/floor, +/area/mainship/hallways/starboard_hallway) "gtX" = ( /obj/docking_port/stationary/supply, /turf/open/floor/mainship/empty, @@ -7486,11 +7382,6 @@ /obj/machinery/vending/dinnerware, /turf/open/floor/wood, /area/mainship/living/cafeteria_officer) -"gvu" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/layer1, -/obj/structure/disposalpipe/segment, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "gvF" = ( /turf/open/floor/mainship/black{ dir = 8 @@ -7501,6 +7392,9 @@ /obj/machinery/door/firedoor/mainship{ dir = 2 }, +/obj/machinery/door/poddoor/mainship/open/cic{ + dir = 2 + }, /turf/open/floor/mainship/floor, /area/mainship/shipboard/weapon_room) "gws" = ( @@ -7553,7 +7447,6 @@ /area/mainship/command/cic) "gyx" = ( /obj/effect/turf_decal/warning_stripes/thin, -/obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ dir = 8; on = 1 @@ -7575,6 +7468,12 @@ dir = 8 }, /area/mainship/squads/general) +"gzs" = ( +/obj/structure/dropship_equipment/shuttle/flare_launcher, +/turf/open/floor/mainship/orange{ + dir = 10 + }, +/area/mainship/hallways/hangar) "gzP" = ( /obj/machinery/door/airlock/mainship/maint{ dir = 8 @@ -7715,6 +7614,17 @@ }, /turf/open/floor/mainship/floor, /area/mainship/engineering/engineering_workshop) +"gGg" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/mainship/orange, +/area/mainship/living/tankerbunks) "gGr" = ( /obj/structure/rack/nometal, /obj/item/stack/sheet/cloth, @@ -7792,6 +7702,7 @@ /obj/machinery/light/mainship{ dir = 4 }, +/obj/item/stack/sandbags_empty/half, /turf/open/floor/plating/plating_catwalk, /area/mainship/engineering/engineering_workshop) "gJr" = ( @@ -7840,7 +7751,6 @@ /obj/machinery/camera/autoname/mainship{ dir = 8 }, -/obj/structure/cable, /turf/open/floor/mainship/green{ dir = 4 }, @@ -7849,16 +7759,14 @@ /obj/structure/table/mainship/nometal, /obj/machinery/recharger, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, /obj/effect/ai_node, -/obj/structure/disposalpipe/junction/flipped{ - dir = 8 - }, +/obj/structure/disposalpipe/junction/yjunc, /turf/open/floor/mainship/sterile, /area/mainship/medical/lower_medical) "gLH" = ( @@ -7875,13 +7783,22 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/starboard_hull) "gMi" = ( -/obj/structure/bed/chair/wheelchair{ +/obj/vehicle/ridden/wheelchair{ dir = 1 }, /obj/structure/disposalpipe/segment, /obj/effect/ai_node, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) +"gMB" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/structure/disposalpipe/segment/corner{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/starboard_hallway) "gMS" = ( /obj/machinery/optable, /obj/item/tank/anesthetic, @@ -7957,6 +7874,12 @@ /obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_hallway) +"gPQ" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/cable, +/turf/open/floor/mainship/floor, +/area/mainship/command/cic) "gQk" = ( /turf/closed/wall/mainship/research/containment/wall/north, /area/mainship/medical/medical_science) @@ -7979,10 +7902,10 @@ /turf/open/floor/wood, /area/mainship/living/cafeteria_officer) "gSa" = ( -/obj/structure/bed/chair/comfy{ +/obj/machinery/atmospherics/components/unary/vent_pump/layer1, +/obj/structure/bed/chair/office/dark{ dir = 1 }, -/obj/machinery/atmospherics/components/unary/vent_pump/layer1, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/medical_science) "gSf" = ( @@ -8093,9 +8016,7 @@ dir = 9 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ - dir = 2 - }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/effect/ai_node, /turf/open/floor/mainship/mono, @@ -8143,10 +8064,6 @@ }, /turf/open/floor/mainship/floor, /area/mainship/shipboard/brig) -"gXF" = ( -/obj/effect/ai_node, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "gYt" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -8275,14 +8192,6 @@ dir = 8 }, /area/mainship/living/grunt_rnr) -"heV" = ( -/obj/structure/window/framed/mainship, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor/mainship, -/turf/open/floor/mainship/floor, -/area/mainship/living/pilotbunks) "hfg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -8298,7 +8207,7 @@ }, /area/mainship/medical/lounge) "hfk" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -8332,15 +8241,9 @@ /turf/open/floor/mainship/floor, /area/mainship/living/pilotbunks) "hgk" = ( -/obj/structure/bed/chair/office/dark, +/obj/effect/turf_decal/warning_stripes/thin, /turf/open/floor/mainship/mono, /area/mainship/squads/req) -"hgl" = ( -/obj/structure/bed/chair/comfy{ - dir = 8 - }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "hgr" = ( /obj/structure/table/mainship/nometal, /obj/machinery/computer/squad_changer, @@ -8373,12 +8276,26 @@ /area/mainship/hallways/hangar) "hgK" = ( /obj/effect/turf_decal/warning_stripes/thin, -/obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, /turf/open/floor/mainship/floor, /area/mainship/squads/req) +"hiw" = ( +/obj/structure/rack, +/obj/item/tool/crowbar, +/obj/effect/spawner/random/engineering/toolbox, +/obj/item/stack/cable_coil, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, +/turf/open/floor/mainship/orange/corner{ + dir = 4 + }, +/area/mainship/living/tankerbunks) "hiM" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -8423,15 +8340,6 @@ }, /turf/open/floor/wood, /area/mainship/shipboard/brig) -"hlj" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/structure/disposalpipe/segment/corner{ - dir = 8 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/starboard_hallway) "hlC" = ( /obj/structure/window/framed/mainship/white, /obj/machinery/door/poddoor/shutters/mainship/open/medical{ @@ -8509,11 +8417,6 @@ /obj/structure/cable, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/port_hull) -"hnH" = ( -/turf/open/floor/mainship/orange/corner{ - dir = 1 - }, -/area/mainship/living/pilotbunks) "hnN" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -8619,6 +8522,12 @@ /obj/item/clothing/under/rank/prisoner, /turf/open/floor/mainship/floor, /area/mainship/shipboard/brig_cells) +"hsb" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 10 + }, +/turf/open/floor/mainship/mono, +/area/mainship/squads/req) "hsc" = ( /obj/machinery/atmospherics/components/unary/tank/carbon_dioxide, /turf/open/floor/mainship/tcomms, @@ -8722,7 +8631,7 @@ /obj/structure/bed/chair/wood/wings{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -8730,11 +8639,6 @@ }, /turf/open/floor/wood, /area/mainship/medical/lounge) -"hvD" = ( -/obj/machinery/cic_maptable, -/obj/structure/table/mainship/nometal, -/turf/open/floor/mainship/green, -/area/mainship/squads/req) "hvS" = ( /turf/open/floor/mainship/sterile/corner, /area/mainship/medical/upper_medical) @@ -8792,7 +8696,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /turf/open/floor/mainship/sterile/dark, @@ -8810,6 +8714,23 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/mainship/black, /area/mainship/squads/general) +"hzN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/door/airlock/mainship/maint{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hull/port_hull) +"hzX" = ( +/obj/machinery/quick_vendor/beginner, +/turf/open/floor/mainship/floor, +/area/mainship/squads/general) "hAo" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -8835,18 +8756,16 @@ /obj/machinery/door/firedoor, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/medical_science) -"hAQ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 +"hAZ" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/machinery/camera/autoname/mainship{ + dir = 1 }, -/obj/machinery/door/poddoor/mainship/mech, -/obj/machinery/door/firedoor/mainship{ - dir = 8 +/turf/open/floor/mainship/orange{ + dir = 1 }, -/turf/open/floor/mainship/mono, /area/mainship/living/tankerbunks) "hBd" = ( /obj/structure/prop/mainship/name_stencil/G, @@ -8892,14 +8811,9 @@ dir = 1 }, /area/mainship/hallways/port_ert) -"hCq" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/computer/shuttle/shuttle_control/dropship, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "hDj" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -8928,7 +8842,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/effect/ai_node, @@ -8963,12 +8877,6 @@ /obj/structure/sign/evac, /turf/open/floor/mainship/black, /area/mainship/hallways/port_hallway) -"hER" = ( -/obj/structure/dropship_equipment/shuttle/flare_launcher, -/turf/open/floor/mainship/orange{ - dir = 8 - }, -/area/mainship/hallways/hangar) "hEZ" = ( /obj/structure/table/mainship/nometal, /obj/machinery/light/mainship{ @@ -8995,6 +8903,15 @@ /obj/machinery/telecomms/receiver/preset_left, /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) +"hFJ" = ( +/obj/machinery/light/mainship{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/mainship/black{ + dir = 4 + }, +/area/mainship/living/pilotbunks) "hFS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -9056,12 +8973,6 @@ "hIO" = ( /turf/closed/wall/mainship, /area/mainship/hallways/hangar) -"hIQ" = ( -/obj/structure/table/mainship/nometal, -/obj/item/megaphone, -/obj/machinery/light/mainship, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "hJf" = ( /obj/machinery/door/airlock/mainship/generic/glass{ dir = 8 @@ -9081,7 +8992,7 @@ /area/mainship/medical/upper_medical) "hLz" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -9132,15 +9043,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) -"hNK" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 10 - }, -/turf/open/floor/mainship/sterile/dark, -/area/mainship/medical/medical_science) "hNU" = ( /obj/structure/window/framed/mainship/requisitions, /turf/open/floor/mainship/floor, @@ -9160,18 +9062,19 @@ }, /turf/open/floor/wood, /area/mainship/living/cafeteria_officer) +"hOX" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "hOZ" = ( /obj/structure/window/framed/mainship/white, /obj/machinery/door/firedoor/mainship, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/chemistry) -"hPC" = ( -/obj/machinery/floodlight/landing, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 6 - }, -/turf/open/floor/plating, -/area/mainship/hallways/hangar) "hQZ" = ( /turf/open/floor/mainship/black{ dir = 1 @@ -9191,7 +9094,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/structure/disposalpipe/junction, @@ -9199,7 +9102,7 @@ /area/mainship/hallways/port_hallway) "hRR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -9254,6 +9157,24 @@ }, /turf/open/floor/stairs/rampbottom, /area/mainship/hallways/hangar) +"hST" = ( +/obj/machinery/door/airlock/mainship/generic/pilot/quarters, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/mainship/floor, +/area/mainship/living/pilotbunks) "hTi" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -9352,13 +9273,18 @@ }, /turf/open/floor/mainship/floor, /area/mainship/living/numbertwobunks) -"hXk" = ( +"hYj" = ( /obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 + dir = 8 }, -/obj/structure/cable, -/turf/open/floor/mainship/floor, -/area/mainship/engineering/engineering_workshop) +/obj/effect/ai_node, +/obj/machinery/light/mainship{ + dir = 4 + }, +/turf/open/floor/mainship/orange{ + dir = 8 + }, +/area/mainship/living/tankerbunks) "hYA" = ( /obj/structure/table/mainship/nometal, /obj/machinery/light/mainship{ @@ -9386,6 +9312,14 @@ dir = 1 }, /area/mainship/living/evacuation) +"hZr" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 5 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/mainship/floor, +/area/mainship/engineering/engineering_workshop) "hZy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -9427,6 +9361,9 @@ dir = 8 }, /obj/machinery/camera/autoname/mainship, +/obj/machinery/firealarm{ + dir = 8 + }, /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar) "hZW" = ( @@ -9642,19 +9579,6 @@ }, /turf/open/floor/mainship/floor, /area/mainship/shipboard/chief_mp_office) -"ijA" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/structure/cable, -/obj/machinery/mech_bay_recharge_port{ - dir = 8 - }, -/turf/open/floor/mainship/cargo/arrow{ - dir = 8 - }, -/area/mainship/hallways/hangar) "ijE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -9744,14 +9668,6 @@ }, /turf/open/floor/mainship/floor, /area/mainship/engineering/upper_engine_monitoring) -"inL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/turf/open/floor/mainship/orange, -/area/mainship/hallways/hangar/flight_control) "inM" = ( /obj/machinery/door/airlock/multi_tile/mainship/comdoor{ dir = 8 @@ -9830,9 +9746,20 @@ /obj/machinery/holopad, /turf/open/floor/wood, /area/mainship/medical/lounge) -"iro" = ( -/turf/closed/wall/mainship, -/area/mainship/hallways/hangar/flight_control) +"irb" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/ai_node, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/squads/req) "irt" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -9891,20 +9818,6 @@ /obj/machinery/computer/telecomms/monitor/preset, /turf/open/floor/mainship/floor, /area/mainship/command/telecomms) -"iua" = ( -/obj/machinery/atmospherics/pipe/manifold4w/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light/mainship, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "iuE" = ( /obj/structure/closet/secure_closet/medical3, /obj/item/storage/surgical_tray, @@ -9918,12 +9831,6 @@ dir = 6 }, /area/mainship/shipboard/firing_range) -"iva" = ( -/obj/machinery/holopad, -/turf/open/floor/mainship/orange{ - dir = 10 - }, -/area/mainship/hallways/hangar/flight_control) "ivy" = ( /turf/open/floor/plating/plating_catwalk, /area/mainship/squads/general) @@ -9939,10 +9846,11 @@ /obj/effect/spawner/random/engineering/powercell, /obj/effect/spawner/random/engineering/powercell, /obj/structure/disposalpipe/segment, -/obj/machinery/firealarm{ +/obj/machinery/door_control/mainship/req{ + id = "requisitions"; + name = "Requisitions Shutters"; dir = 8 }, -/obj/structure/cable, /turf/open/floor/mainship/green{ dir = 4 }, @@ -10007,14 +9915,6 @@ /obj/structure/window/framed/mainship/hull, /turf/open/floor/mainship/floor, /area/mainship/shipboard/weapon_room) -"iyV" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/turf/open/floor/mainship/purple{ - dir = 4 - }, -/area/mainship/medical/upper_medical) "iyZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -10042,13 +9942,6 @@ /obj/structure/cable, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/cmo_office) -"izM" = ( -/obj/machinery/atmospherics/pipe/manifold4w/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/port_hallway) "izT" = ( /turf/open/floor/mainship/cargo, /area/mainship/hallways/hangar) @@ -10081,9 +9974,7 @@ /area/mainship/hallways/starboard_hallway) "iAW" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ - dir = 2 - }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/effect/ai_node, /turf/open/floor/mainship/floor, @@ -10100,15 +9991,13 @@ dir = 4 }, /area/mainship/medical/upper_medical) -"iCP" = ( +"iDc" = ( /obj/structure/cable, -/obj/machinery/camera/autoname/mainship{ - dir = 4 - }, -/turf/open/floor/mainship/orange{ - dir = 4 - }, -/area/mainship/living/pilotbunks) +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/effect/ai_node, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/medical_science) "iDC" = ( /obj/structure/flora/ausbushes/sparsegrass, /obj/machinery/holopad, @@ -10204,7 +10093,6 @@ /area/mainship/hull/starboard_hull) "iGf" = ( /obj/effect/turf_decal/warning_stripes/thin, -/obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 5 }, @@ -10236,14 +10124,6 @@ }, /turf/open/floor/wood, /area/mainship/command/corporateliaison) -"iGR" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/turf/open/floor/mainship/sterile/side{ - dir = 1 - }, -/area/mainship/medical/lower_medical) "iGV" = ( /obj/effect/ai_node, /turf/open/floor/mainship/mono, @@ -10262,9 +10142,6 @@ dir = 9 }, /area/mainship/hallways/port_ert) -"iHE" = ( -/turf/open/floor/mainship/orange, -/area/mainship/hallways/hangar/flight_control) "iIJ" = ( /turf/open/floor/mainship/orange{ dir = 8 @@ -10299,6 +10176,17 @@ /obj/machinery/light/mainship/small, /turf/open/floor/mainship/research/containment/floor2, /area/mainship/medical/medical_science) +"iKc" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/obj/machinery/vending/nanomed{ + dir = 1 + }, +/turf/open/floor/mainship/orange{ + dir = 1 + }, +/area/mainship/living/tankerbunks) "iKx" = ( /obj/structure/table/mainship/nometal, /obj/item/storage/firstaid/adv{ @@ -10318,6 +10206,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, /turf/open/floor/mainship/red{ dir = 8 }, @@ -10343,6 +10232,14 @@ dir = 1 }, /area/mainship/living/starboard_garden) +"iKH" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/mainship/floor, +/area/mainship/medical/upper_medical) "iMr" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -10374,16 +10271,27 @@ /obj/structure/ob_ammo/ob_fuel, /obj/structure/ob_ammo/ob_fuel, /obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, /turf/open/floor/mainship/red{ dir = 6 }, /area/mainship/shipboard/weapon_room) -"iNv" = ( +"iNp" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/effect/ai_node, +/turf/open/floor/mainship/orange{ + dir = 8 + }, +/area/mainship/living/tankerbunks) +"iNG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold4w/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, -/turf/open/floor/mainship/floor, -/area/mainship/engineering/engineering_workshop) +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plating, +/area/mainship/medical/medical_science) "iNL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -10522,12 +10430,6 @@ dir = 1 }, /area/mainship/medical/lower_medical) -"iRF" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/obj/structure/cable, -/obj/machinery/firealarm, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "iSa" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating/plating_catwalk, @@ -10752,7 +10654,7 @@ /turf/open/floor/mainship/research, /area/mainship/medical/upper_medical) "jba" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -10796,7 +10698,7 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -10804,10 +10706,38 @@ }, /turf/open/floor/mainship/floor, /area/mainship/squads/req) +"jcn" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/living/tankerbunks) "jcy" = ( /obj/effect/turf_decal/warning_stripes/thick, /turf/open/floor/plating, /area/mainship/hallways/hangar) +"jdq" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/mainship/orange, +/area/mainship/living/tankerbunks) "jeE" = ( /obj/machinery/conveyor{ id = "garbage" @@ -10898,13 +10828,14 @@ /obj/structure/morgue, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/morgue) -"jiF" = ( -/obj/machinery/door/firedoor/mainship{ - dir = 8 +"jix" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/light/mainship{ + dir = 1 }, -/obj/machinery/light/mainship, -/turf/open/floor/mainship/stripesquare, -/area/mainship/hallways/hangar) +/obj/structure/cable, +/turf/open/floor/mainship/orange, +/area/mainship/living/tankerbunks) "jiL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -10967,15 +10898,6 @@ /obj/machinery/holopad, /turf/open/floor/mainship/floor, /area/mainship/living/numbertwobunks) -"jlh" = ( -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold4w/supply/visible/layer1, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/holopad, -/turf/open/floor/mainship/sterile/dark, -/area/mainship/medical/medical_science) "jlj" = ( /obj/machinery/light/mainship{ dir = 1 @@ -11071,7 +10993,7 @@ /turf/open/floor/mainship/floor, /area/mainship/living/evacuation) "joy" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/camera/autoname/mainship{ @@ -11249,22 +11171,17 @@ dir = 1 }, /area/mainship/living/bridgebunks) -"juW" = ( +"juZ" = ( /obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 + dir = 1 }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 }, -/obj/structure/rack, -/obj/item/tool/screwdriver, -/obj/item/tool/wrench, -/obj/item/tool/crowbar, -/obj/machinery/light/mainship{ +/turf/open/floor/mainship/orange{ dir = 1 }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar) +/area/mainship/living/tankerbunks) "jve" = ( /obj/machinery/vending/weapon, /obj/machinery/light/mainship, @@ -11371,9 +11288,7 @@ /area/space) "jzJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ - dir = 2 - }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/structure/disposalpipe/segment/corner{ dir = 1 @@ -11381,6 +11296,13 @@ /obj/effect/ai_node, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) +"jAq" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/mainship/black{ + dir = 4 + }, +/area/mainship/living/pilotbunks) "jAr" = ( /obj/structure/bed/chair/comfy{ dir = 1 @@ -11420,12 +11342,17 @@ "jCa" = ( /turf/open/floor/mainship/red, /area/mainship/command/cic) -"jCj" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/junction/flipped, -/turf/open/floor/mainship/orange, -/area/mainship/living/pilotbunks) +"jDq" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/mainship/orange{ + dir = 1 + }, +/area/mainship/living/tankerbunks) "jDI" = ( /obj/structure/barricade/metal{ dir = 1 @@ -11460,6 +11387,16 @@ }, /turf/open/floor/mainship/silver/full, /area/mainship/medical/lower_medical) +"jGd" = ( +/obj/structure/window/framed/mainship, +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, +/obj/machinery/door/poddoor/shutters/mainship/open/hangar{ + dir = 2 + }, +/turf/open/floor/mainship/floor, +/area/mainship/living/starboard_garden) "jGj" = ( /turf/open/floor/mainship/cargo/arrow, /area/mainship/hallways/hangar) @@ -11479,7 +11416,7 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -11506,6 +11443,15 @@ /obj/structure/droppod, /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar/droppod) +"jIi" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/mainship/orange{ + dir = 4 + }, +/area/mainship/living/tankerbunks) "jIk" = ( /obj/structure/cable, /turf/open/shuttle/escapepod/five, @@ -11534,7 +11480,7 @@ /area/mainship/living/starboard_garden) "jIU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -11570,21 +11516,14 @@ }, /turf/open/floor/plating, /area/mainship/hallways/port_hallway) -"jKk" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 5 - }, +"jKl" = ( /obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 + dir = 10 }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 +/obj/structure/closet/firecloset, +/turf/open/floor/mainship/orange/corner{ + dir = 8 }, -/turf/open/floor/mainship/floor, /area/mainship/living/tankerbunks) "jKK" = ( /turf/open/floor/mainship/floor, @@ -11634,7 +11573,7 @@ /area/mainship/medical/upper_medical) "jMz" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -11655,7 +11594,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/structure/disposalpipe/segment{ @@ -11725,14 +11664,13 @@ /obj/structure/barricade/metal, /turf/open/floor/plating, /area/mainship/hull/starboard_hull) -"jQw" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +"jPR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer1, +/obj/structure/disposalpipe/segment, /turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/hangar) +/area/mainship/hallways/starboard_hallway) "jQG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 6 @@ -11754,6 +11692,12 @@ }, /turf/open/floor/wood, /area/mainship/living/evacuation) +"jRS" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/structure/cable, +/turf/open/floor/wood, +/area/mainship/living/cafeteria_officer) "jSx" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -11789,9 +11733,7 @@ "jSU" = ( /obj/machinery/disposal, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ - dir = 2 - }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -11833,7 +11775,7 @@ /turf/open/floor/mainship/floor, /area/mainship/engineering/engineering_workshop) "jVv" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -11878,7 +11820,7 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -11887,6 +11829,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) +"jYX" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/squads/req) "jZD" = ( /obj/machinery/status_display, /turf/closed/wall/mainship, @@ -11909,15 +11857,6 @@ /obj/structure/table/fancywoodentable, /turf/open/floor/wood, /area/mainship/command/corporateliaison) -"jZO" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/mainship/black{ - dir = 4 - }, -/area/mainship/living/pilotbunks) "jZW" = ( /obj/structure/drop_pod_launcher, /obj/structure/droppod, @@ -11927,7 +11866,7 @@ /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar/droppod) "kbn" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -11937,12 +11876,25 @@ dir = 1 }, /area/mainship/medical/lower_medical) +"kbS" = ( +/obj/structure/table/mainship/nometal, +/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/head/chefhat, +/obj/item/tool/kitchen/rollingpin, +/obj/item/clothing/suit/storage/chef/classic, +/obj/item/book/manual/chef_recipes, +/obj/machinery/light/mainship, +/turf/open/floor/mainship/sterile/corner{ + dir = 4 + }, +/area/mainship/medical/lounge) "kck" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/effect/ai_node, @@ -11978,6 +11930,12 @@ /obj/item/stack/sheet/cloth, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/cmo_office) +"kdg" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer1, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/squads/general) "kdi" = ( /obj/structure/table/mainship/nometal, /obj/effect/spawner/random/engineering/radio, @@ -12108,6 +12066,27 @@ dir = 4 }, /area/mainship/medical/lower_medical) +"kjW" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 5 + }, +/obj/machinery/light/mainship{ + dir = 4 + }, +/obj/structure/disposalpipe/segment/corner{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/mainship/orange{ + dir = 8 + }, +/area/mainship/living/tankerbunks) "kkz" = ( /obj/structure/bed/chair/office/dark{ dir = 1 @@ -12116,11 +12095,16 @@ /turf/open/floor/mainship/red, /area/mainship/command/self_destruct) "kkD" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 1 +/obj/structure/window/framed/mainship/requisitions, +/obj/machinery/door/poddoor/shutters/mainship/req{ + dir = 2; + id = "requisitions_main" }, -/turf/open/floor/wood, -/area/mainship/hallways/port_hallway) +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, +/turf/open/floor/mainship/floor, +/area/mainship/squads/req) "kkX" = ( /obj/machinery/light/mainship{ dir = 8 @@ -12129,25 +12113,28 @@ dir = 8 }, /area/mainship/hallways/hangar) -"kmn" = ( -/obj/structure/table/mainship/nometal, -/obj/item/phone, -/obj/machinery/power/apc/mainship, +"klv" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/structure/disposalpipe/segment/corner{ + dir = 1 + }, /obj/structure/cable, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) +/turf/open/floor/plating/plating_catwalk, +/area/mainship/living/tankerbunks) "kmZ" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plating/plating_catwalk, /area/mainship/engineering/starboard_atmos) "knU" = ( -/obj/machinery/door/poddoor/shutters/mainship/req{ - dir = 2; - id = "requisitions" - }, /obj/machinery/door/firedoor/mainship{ dir = 2 }, +/obj/machinery/door/poddoor/shutters/mainship/req{ + dir = 2; + id = "requisitions_main" + }, /turf/open/floor/mainship/floor, /area/mainship/squads/req) "knY" = ( @@ -12158,7 +12145,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/landinglight/cas{ @@ -12177,9 +12164,16 @@ "kox" = ( /turf/open/floor/mainship/research/containment/floor1, /area/mainship/medical/medical_science) +"koG" = ( +/obj/machinery/door/poddoor/mainship/mech{ + name = "Vehicle Bay Shutters"; + id = "vehicle_shutters" + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/tankerbunks) "koW" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -12219,6 +12213,17 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/medical_science) +"kpC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, +/obj/structure/cable, +/obj/structure/window/framed/mainship, +/turf/open/floor/mainship/floor, +/area/mainship/living/pilotbunks) "kpJ" = ( /obj/effect/turf_decal/warning_stripes/thin, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -12304,7 +12309,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /turf/open/floor/mainship/red{ @@ -12481,17 +12486,6 @@ dir = 4 }, /area/mainship/living/cryo_cells) -"kxH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/effect/ai_node, -/turf/open/floor/mainship/black/corner{ - dir = 1 - }, -/area/mainship/living/cryo_cells) "kxJ" = ( /turf/open/floor/mainship/red/corner{ dir = 8 @@ -12504,7 +12498,7 @@ /area/mainship/living/cafeteria_officer) "kyn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -12585,7 +12579,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/structure/disposalpipe/segment/corner, @@ -12638,7 +12632,7 @@ /area/mainship/shipboard/weapon_room) "kDB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -12661,16 +12655,6 @@ /obj/machinery/light/mainship, /turf/open/floor/mainship/black, /area/mainship/hallways/hangar) -"kER" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/structure/disposalpipe/junction{ - dir = 8 - }, -/obj/structure/cable, -/obj/effect/ai_node, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/squads/general) "kEW" = ( /obj/machinery/vending/coffee, /turf/open/floor/mainship/black{ @@ -12763,16 +12747,6 @@ /obj/structure/curtain/open/shower, /turf/open/floor/plating/plating_catwalk, /area/mainship/medical/medical_science) -"kHL" = ( -/obj/machinery/door/airlock/mainship/generic/pilot/quarters{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/door/firedoor{ - dir = 1 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/pilotbunks) "kIg" = ( /obj/machinery/marine_selector/gear/engi, /turf/open/floor/mainship/black{ @@ -12791,16 +12765,6 @@ /obj/machinery/holopad, /turf/open/floor/mainship/floor, /area/mainship/engineering/engineering_workshop) -"kIx" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/obj/structure/table/mainship/nometal, -/turf/open/floor/wood, -/area/mainship/hallways/port_hallway) "kII" = ( /obj/effect/ai_node, /turf/open/floor/mainship/black{ @@ -12815,19 +12779,6 @@ dir = 8 }, /area/mainship/medical/lower_medical) -"kJT" = ( -/obj/structure/cable, -/obj/structure/rack, -/obj/item/storage/toolbox/mechanical, -/obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) -"kKd" = ( -/obj/structure/cable, -/obj/effect/turf_decal/warning_stripes/thin, -/obj/machinery/power/apc/mainship, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "kKF" = ( /obj/structure/window/framed/mainship, /obj/machinery/door/poddoor/shutters/mainship/corporate, @@ -12950,7 +12901,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /turf/open/floor/mainship/sterile/side{ @@ -13005,17 +12956,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar) -"kPm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/mainship/orange{ - dir = 1 - }, -/area/mainship/hallways/hangar/flight_control) "kPp" = ( /obj/structure/bed/chair/office/light{ dir = 1 @@ -13162,6 +13102,7 @@ /obj/structure/ob_ammo/ob_fuel, /obj/structure/ob_ammo/ob_fuel, /obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, /turf/open/floor/mainship/red{ dir = 10 }, @@ -13189,7 +13130,7 @@ /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/operating_room_one) "kXH" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -13199,16 +13140,14 @@ /obj/structure/cable, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/chemistry) -"kXK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +"kXP" = ( /obj/effect/ai_node, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/port_hallway) +/obj/effect/decal/cleanable/blood/oil{ + name = "grease"; + pixel_x = -7 + }, +/turf/open/floor/plating, +/area/mainship/living/tankerbunks) "kYh" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -13238,6 +13177,14 @@ "lbd" = ( /turf/open/floor/mainship/black, /area/mainship/squads/general) +"lbf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hull/starboard_hull) "lbk" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -13409,7 +13356,7 @@ /area/mainship/command/corporateliaison) "lfY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -13420,6 +13367,15 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_hallway) +"lgX" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/living/tankerbunks) "lhw" = ( /obj/machinery/light/mainship, /turf/open/floor/mainship/black, @@ -13448,9 +13404,9 @@ /turf/open/floor/plating, /area/mainship/engineering/engineering_workshop) "liC" = ( -/obj/vehicle/unmanned/droid/scout, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/vehicle/unmanned/droid, /turf/open/floor/mech_bay_recharge_floor, /area/mainship/command/airoom) "liE" = ( @@ -13495,7 +13451,7 @@ /area/mainship/shipboard/weapon_room) "lkL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -13537,10 +13493,18 @@ }, /turf/open/floor/mainship/research, /area/mainship/medical/upper_medical) -"lmo" = ( -/obj/effect/soundplayer, -/turf/closed/wall/mainship, -/area/mainship/hallways/hangar/flight_control) +"lmK" = ( +/obj/structure/table/mainship/nometal, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/mainship/hallways/starboard_hallway) "lmX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -13559,6 +13523,22 @@ dir = 1 }, /area/mainship/engineering/engineering_workshop) +"loy" = ( +/obj/effect/ai_node, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/mainship/black{ + dir = 8 + }, +/area/mainship/living/pilotbunks) "lpX" = ( /obj/machinery/light/mainship/small, /turf/open/floor/plating, @@ -13576,7 +13556,7 @@ /turf/open/floor/mainship/floor, /area/mainship/squads/general) "lqi" = ( -/obj/structure/bed/chair/wheelchair{ +/obj/vehicle/ridden/wheelchair{ dir = 1 }, /obj/machinery/holopad, @@ -13590,7 +13570,7 @@ /area/mainship/living/grunt_rnr) "lqF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -13627,7 +13607,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/effect/ai_node, @@ -13644,7 +13624,6 @@ /turf/open/floor/wood, /area/mainship/living/evacuation) "lsn" = ( -/obj/structure/cable, /obj/machinery/firealarm{ dir = 8 }, @@ -13739,6 +13718,15 @@ /obj/structure/cable, /turf/open/floor/mainship/sterile/purple/corner, /area/mainship/medical/medical_science) +"luq" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 8 + }, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/medical_science) "luQ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -13776,7 +13764,6 @@ /turf/open/floor/wood, /area/mainship/hallways/port_hallway) "lvO" = ( -/obj/structure/cable, /turf/open/floor/mainship/red{ dir = 4 }, @@ -13833,6 +13820,12 @@ }, /turf/open/floor/wood, /area/mainship/living/cafeteria_officer) +"lwX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/mainship, +/area/mainship/living/tankerbunks) "lxw" = ( /obj/effect/turf_decal/warning_stripes/box/small{ dir = 1 @@ -13846,10 +13839,6 @@ dir = 1 }, /area/mainship/squads/general) -"lyb" = ( -/obj/structure/closet/firecloset/full, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "lym" = ( /obj/effect/ai_node, /turf/open/floor/wood, @@ -13952,23 +13941,6 @@ /obj/structure/cable, /turf/open/floor/mainship/floor, /area/mainship/command/telecomms) -"lCp" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 4 - }, -/turf/open/floor/mainship/black/corner{ - dir = 4 - }, -/area/mainship/living/pilotbunks) -"lCw" = ( -/obj/structure/table/mainship/nometal, -/obj/item/tool/taperoll/engineering, -/obj/item/clothing/gloves/insulated, -/obj/item/lightreplacer, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/turf/open/floor/mainship/floor, -/area/mainship/engineering/engineering_workshop) "lCI" = ( /obj/structure/table/mainship/nometal, /obj/machinery/reagentgrinder{ @@ -14146,14 +14118,32 @@ /turf/open/floor/mainship/floor, /area/mainship/command/airoom) "lKO" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ - dir = 2 - }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/mainship/silver{ dir = 5 }, /area/mainship/hallways/port_ert) +"lLa" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, +/turf/open/floor/mainship/orange{ + dir = 4 + }, +/area/mainship/living/tankerbunks) +"lLj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/disposalpipe/segment/corner{ + dir = 1 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "lLL" = ( /obj/effect/soundplayer, /turf/closed/wall/mainship, @@ -14162,6 +14152,12 @@ /obj/structure/flora/ausbushes/brflowers, /turf/open/floor/grass, /area/mainship/living/starboard_garden) +"lMq" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/holopad, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/squads/general) "lML" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -14183,23 +14179,6 @@ dir = 5 }, /area/mainship/hull/starboard_hull) -"lNB" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/structure/cable, -/turf/open/floor/mainship/floor, -/area/mainship/command/cic) -"lNL" = ( -/obj/machinery/door/airlock/mainship/generic/mech_pilot, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "lNQ" = ( /obj/effect/attach_point/weapon/dropship1, /turf/open/floor/plating, @@ -14295,7 +14274,6 @@ /turf/open/floor/wood, /area/mainship/living/evacuation) "lQM" = ( -/obj/structure/cable, /obj/machinery/light/mainship{ dir = 4 }, @@ -14438,6 +14416,11 @@ /obj/item/book/manual/marine_law, /turf/open/floor/wood, /area/mainship/living/commandbunks) +"lWS" = ( +/turf/open/floor/mainship/black/corner{ + dir = 1 + }, +/area/mainship/living/pilotbunks) "lWW" = ( /obj/machinery/power/apc/mainship{ dir = 8 @@ -14547,6 +14530,19 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/medical/upper_medical) +"mam" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 8 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 5 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "maE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -14727,11 +14723,6 @@ "miB" = ( /turf/closed/wall/mainship, /area/mainship/living/commandbunks) -"miU" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/turf/open/floor/mainship/floor, -/area/mainship/living/evacuation) "miV" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -14788,18 +14779,6 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) -"mkw" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/turf/open/floor/mainship/orange{ - dir = 4 - }, -/area/mainship/living/pilotbunks) "mkO" = ( /obj/structure/bed/chair/sofa{ dir = 1 @@ -14829,6 +14808,12 @@ dir = 8 }, /area/mainship/squads/req) +"mnH" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/cable, +/turf/open/floor/mainship/floor, +/area/mainship/hallways/hangar) "mnY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -14859,6 +14844,20 @@ }, /turf/open/floor/mainship/silver/full, /area/mainship/medical/lower_medical) +"mps" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/effect/ai_node, +/obj/machinery/light/mainship/small{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hull/starboard_hull) "mql" = ( /obj/machinery/telecomms/server/presets/charlie, /turf/open/floor/mainship/tcomms, @@ -14868,7 +14867,10 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/light/mainship/small{ dir = 4 }, /turf/open/floor/plating/plating_catwalk, @@ -14892,9 +14894,7 @@ "mrK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ - dir = 2 - }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -14968,6 +14968,12 @@ /obj/machinery/door/firedoor/multi_tile, /turf/open/floor/mainship/floor, /area/mainship/living/evacuation) +"mtB" = ( +/obj/structure/dropship_equipment/shuttle/weapon_holder/machinegun, +/turf/open/floor/mainship/orange{ + dir = 9 + }, +/area/mainship/hallways/hangar) "mtK" = ( /obj/effect/turf_decal/warning_stripes/thin, /turf/open/floor/plating/mainship, @@ -15001,6 +15007,18 @@ /obj/machinery/light/mainship/small, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/starboard_hull) +"mvP" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 6 + }, +/obj/machinery/door_control/mainship/mech{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/mainship/orange/corner{ + dir = 2 + }, +/area/mainship/living/tankerbunks) "mvW" = ( /turf/open/floor/mainship/silver{ dir = 5 @@ -15043,6 +15061,9 @@ /obj/machinery/door/firedoor/mainship{ dir = 8 }, +/obj/machinery/door/poddoor/shutters/mainship/open/medical{ + dir = 8 + }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/chemistry) "mxc" = ( @@ -15064,6 +15085,15 @@ }, /turf/open/floor/mainship/floor, /area/mainship/squads/general) +"mxD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/structure/disposalpipe/junction/flipped{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/port_hallway) "myz" = ( /turf/open/floor/prison/kitchen, /area/mainship/living/grunt_rnr) @@ -15208,7 +15238,6 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/port_hull) "mCT" = ( -/obj/structure/cable, /obj/machinery/camera/autoname/mainship{ dir = 8 }, @@ -15237,6 +15266,13 @@ }, /turf/open/floor/wood, /area/mainship/living/grunt_rnr) +"mDZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "mEe" = ( /obj/structure/rack, /obj/structure/ob_ammo/warhead/cluster, @@ -15259,9 +15295,7 @@ /area/mainship/hull/port_hull) "mFr" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ - dir = 2 - }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/machinery/light/mainship/small, /obj/effect/ai_node, @@ -15306,12 +15340,6 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/operating_room_one) -"mIN" = ( -/obj/machinery/light/mainship/small{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hull/starboard_hull) "mIU" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -15359,7 +15387,7 @@ /turf/open/floor/mainship/floor, /area/mainship/medical/upper_medical) "mKW" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -15446,14 +15474,14 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/floor, /area/mainship/squads/req) -"mNP" = ( -/obj/structure/cable, -/obj/machinery/door/poddoor/mainship/mech, +"mNE" = ( +/obj/machinery/door/poddoor/shutters/mainship/open/hangar, /obj/machinery/door/firedoor/mainship{ dir = 8 }, -/turf/open/floor/mainship/mono, -/area/mainship/living/tankerbunks) +/obj/structure/window/framed/mainship, +/turf/open/floor/mainship/floor, +/area/mainship/living/pilotbunks) "mOa" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -15495,14 +15523,6 @@ }, /turf/open/floor/mainship/cargo/arrow, /area/mainship/squads/req) -"mPC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/effect/ai_node, -/obj/docking_port/stationary/marine_dropship/crash_target, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/hangar) "mPK" = ( /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) @@ -15572,18 +15592,11 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /turf/open/floor/wood, /area/mainship/shipboard/brig) -"mUj" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "mUv" = ( /obj/structure/closet/emcloset, /turf/open/floor/mainship/floor, @@ -15595,12 +15608,7 @@ /turf/open/floor/plating/mainship, /area/mainship/shipboard/weapon_room) "mVg" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door_control/mainship/req{ - dir = 4; - id = "requisitions"; - name = "Requisitions Shutters" - }, +/obj/effect/turf_decal/warning_stripes/thin, /turf/open/floor/mainship/green{ dir = 8 }, @@ -15670,15 +15678,6 @@ /obj/structure/table/mainship/nometal, /turf/open/floor/mainship/silver/full, /area/mainship/living/evacuation) -"mZd" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 4 - }, -/obj/effect/ai_node, -/turf/open/floor/mainship/orange{ - dir = 8 - }, -/area/mainship/engineering/engineering_workshop) "mZk" = ( /obj/structure/table/mainship/nometal, /obj/item/storage/firstaid/o2{ @@ -15697,6 +15696,11 @@ /obj/machinery/firealarm, /turf/open/floor/mainship/research, /area/mainship/medical/upper_medical) +"naR" = ( +/obj/machinery/cic_maptable, +/obj/structure/table/mainship/nometal, +/turf/open/floor/plating, +/area/mainship/squads/req) "nbh" = ( /obj/machinery/door/airlock/mainship/generic/bathroom{ dir = 1 @@ -15843,9 +15847,6 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/chemistry) -"ngt" = ( -/turf/open/floor/mainship/red, -/area/mainship/hallways/hangar) "ngX" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ dir = 8; @@ -15866,19 +15867,6 @@ dir = 4 }, /area/mainship/command/self_destruct) -"nig" = ( -/obj/machinery/door/airlock/mainship/maint{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hull/port_hull) "niq" = ( /obj/structure/rack, /obj/item/defibrillator, @@ -15977,24 +15965,12 @@ }, /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar) -"nmt" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/turf/open/floor/mainship/sterile/side{ - dir = 9 - }, -/area/mainship/medical/lower_medical) "nmG" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, /turf/open/floor/plating, /area/mainship/hull/port_hull) -"nmW" = ( -/obj/machinery/vending/marineFood, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "nnc" = ( /obj/structure/disposalpipe/segment, /obj/effect/ai_node, @@ -16012,7 +15988,7 @@ }, /area/mainship/hallways/starboard_hallway) "nnQ" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -16117,7 +16093,7 @@ /area/mainship/command/corporateliaison) "nri" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -16255,27 +16231,6 @@ }, /turf/open/floor/mainship/floor, /area/mainship/shipboard/weapon_room) -"nyp" = ( -/obj/machinery/door/airlock/mainship/generic/pilot/quarters, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/mainship/floor, -/area/mainship/living/pilotbunks) -"nyG" = ( -/obj/structure/window/framed/mainship/requisitions, -/obj/machinery/door/firedoor/mainship{ - dir = 2 - }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "nyM" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -16299,7 +16254,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /turf/open/floor/mainship/floor, @@ -16386,22 +16341,12 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) -"nDU" = ( -/obj/structure/window/framed/mainship, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor/mainship{ - dir = 2 - }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "nEI" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -16526,21 +16471,11 @@ "nIZ" = ( /turf/open/floor/plating, /area/mainship/hallways/port_hallway) -"nJa" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ - dir = 8 - }, -/obj/effect/ai_node, -/turf/open/floor/mainship/sterile/dark, -/area/mainship/medical/medical_science) "nJH" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /turf/open/floor/mainship/floor, @@ -16554,6 +16489,17 @@ }, /turf/open/floor/wood, /area/mainship/medical/upper_medical) +"nKs" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/effect/ai_node, +/turf/open/floor/mainship/black/corner{ + dir = 1 + }, +/area/mainship/living/cryo_cells) "nKA" = ( /obj/machinery/door/airlock/mainship/marine/general/sl{ dir = 1 @@ -16609,14 +16555,6 @@ "nLW" = ( /turf/closed/wall/mainship/white, /area/mainship/medical/morgue) -"nLY" = ( -/obj/structure/window/framed/mainship/requisitions, -/obj/machinery/door/poddoor/shutters/mainship/open/hangar, -/obj/machinery/door/firedoor/mainship{ - dir = 8 - }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar/flight_control) "nME" = ( /obj/structure/cable, /obj/machinery/power/apc/mainship{ @@ -16754,6 +16692,15 @@ }, /turf/open/floor/mainship/floor, /area/mainship/squads/req) +"nRf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/camera/autoname/mainship{ + dir = 1 + }, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/medical_science) "nRj" = ( /obj/structure/table/mainship/nometal, /obj/machinery/light/mainship{ @@ -16785,25 +16732,9 @@ }, /turf/open/floor/wood, /area/mainship/living/grunt_rnr) -"nSL" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/power/monitor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/mainship/orange{ - dir = 5 - }, -/area/mainship/hallways/hangar/flight_control) "nSM" = ( /turf/open/floor/mainship/cargo, /area/mainship/engineering/engine_core) -"nSU" = ( -/obj/machinery/door/airlock/mainship/generic/mech_pilot, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "nTa" = ( /obj/structure/table/mainship/nometal, /obj/machinery/reagentgrinder, @@ -16848,21 +16779,6 @@ }, /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar) -"nTZ" = ( -/obj/machinery/door/airlock/mainship/generic/pilot/quarters{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/door/poddoor/shutters/mainship/open/hangar{ - dir = 2 - }, -/obj/machinery/door/firedoor{ - dir = 1 - }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "nUb" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/mainship/sterile/dark, @@ -16979,15 +16895,17 @@ }, /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar) -"nZf" = ( -/obj/machinery/door/firedoor/mainship{ - dir = 8 +"nYJ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 1 }, -/obj/machinery/light/mainship{ +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, -/turf/open/floor/mainship/stripesquare, -/area/mainship/hallways/starboard_hallway) +/obj/structure/disposalpipe/segment/corner, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "nZH" = ( /obj/structure/disposalpipe/segment{ dir = 1 @@ -17002,6 +16920,11 @@ }, /turf/open/floor/tile/damaged/four, /area/mainship/shipboard/chief_mp_office) +"oaL" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/mainship/floor, +/area/mainship/living/evacuation) "oaM" = ( /obj/effect/soundplayer, /turf/closed/wall/mainship, @@ -17083,6 +17006,14 @@ /obj/item/clothing/head/welding, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) +"oeO" = ( +/obj/machinery/door_control/mainship/req{ + dir = 4; + id = "requisitions"; + name = "Requisitions Shutters" + }, +/turf/open/floor/plating, +/area/mainship/squads/req) "ofa" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 @@ -17223,12 +17154,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/port_hull) -"olm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/turf/open/floor/mainship/sterile/dark, -/area/mainship/medical/lower_medical) "olq" = ( /obj/machinery/door/airlock/mainship/generic/glass{ dir = 1 @@ -17253,7 +17178,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/structure/disposalpipe/segment/corner, @@ -17291,14 +17216,6 @@ }, /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/starboard_hallway) -"ooo" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/turf/open/floor/mainship/black{ - dir = 1 - }, -/area/mainship/hallways/port_hallway) "ooy" = ( /obj/machinery/conveyor{ id = "garbage" @@ -17311,6 +17228,13 @@ }, /turf/open/floor/plating, /area/mainship/hallways/starboard_hallway) +"ooE" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/mainship/floor, +/area/mainship/command/cic) "ooG" = ( /obj/machinery/hydroponics, /turf/open/floor/plating, @@ -17348,6 +17272,20 @@ }, /turf/open/floor/wood, /area/mainship/shipboard/brig) +"ord" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 6 + }, +/obj/effect/ai_node, +/obj/machinery/light/mainship/small{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hull/port_hull) "ore" = ( /obj/vehicle/ridden/powerloader, /turf/open/floor/mainship/cargo, @@ -17379,15 +17317,6 @@ dir = 1 }, /area/mainship/hallways/hangar/droppod) -"osB" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/mainship/orange/corner{ - dir = 4 - }, -/area/mainship/living/pilotbunks) "osI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -17578,17 +17507,6 @@ dir = 4 }, /area/mainship/hallways/port_hallway) -"ozH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/ai_node, -/turf/open/floor/mainship/floor, -/area/mainship/engineering/engineering_workshop) "ozU" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -17601,10 +17519,6 @@ /obj/effect/decal/cleanable/blood/gibs, /turf/open/floor/tile/damaged/panel, /area/mainship/shipboard/brig) -"ozW" = ( -/obj/structure/dropship_equipment/shuttle/weapon_holder/machinegun, -/turf/open/floor/mainship/cargo, -/area/mainship/hallways/hangar) "oAs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 @@ -17643,7 +17557,7 @@ /area/mainship/hallways/port_hallway) "oBS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, @@ -17701,12 +17615,6 @@ /obj/structure/bed/chair/comfy, /turf/open/floor/mainship/floor, /area/mainship/command/cic) -"oCX" = ( -/obj/effect/decal/cleanable/blood/oil/streak{ - dir = 4 - }, -/turf/open/floor/plating, -/area/mainship/living/tankerbunks) "oDl" = ( /turf/open/floor/mainship/black{ dir = 10 @@ -17843,6 +17751,13 @@ /obj/machinery/faxmachine, /turf/open/floor/wood, /area/mainship/command/corporateliaison) +"oJx" = ( +/obj/structure/window/framed/mainship, +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/tankerbunks) "oJB" = ( /obj/structure/cable, /obj/effect/ai_node, @@ -17861,7 +17776,6 @@ "oKw" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, -/obj/structure/cable, /turf/open/floor/mainship/green{ dir = 4 }, @@ -18151,6 +18065,20 @@ /obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/port_hull) +"oYv" = ( +/obj/structure/window/framed/mainship/requisitions, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor/mainship, +/obj/machinery/door/poddoor/shutters/mainship/open/hangar{ + dir = 8 + }, +/turf/open/floor/mainship/floor, +/area/mainship/shipboard/brig) "oYF" = ( /obj/machinery/light/mainship, /obj/structure/ship_ammo/cas/minirocket/illumination, @@ -18161,12 +18089,6 @@ /obj/item/storage/firstaid/adv, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/operating_room_one) -"oZE" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/structure/cable, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar) "oZG" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 @@ -18223,6 +18145,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/mainship/ai/exterior{ + dir = 2; + id = "AiCoreShutter" + }, /turf/open/floor/mainship/floor, /area/mainship/command/airoom) "paT" = ( @@ -18255,6 +18181,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/firedoor/multi_tile, +/obj/structure/cable, /turf/open/floor/mainship/floor, /area/mainship/shipboard/weapon_room) "pcd" = ( @@ -18289,14 +18216,6 @@ dir = 8 }, /area/mainship/command/airoom) -"pdI" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/mainship/floor, -/area/mainship/command/cic) "pdS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -18319,7 +18238,7 @@ /turf/open/floor/mainship/floor, /area/mainship/engineering/engineering_workshop) "peM" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -18329,13 +18248,6 @@ dir = 4 }, /area/mainship/medical/upper_medical) -"pfr" = ( -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) -"pfx" = ( -/obj/effect/decal/cleanable/blood/gibs/robot, -/turf/open/floor/plating, -/area/mainship/living/tankerbunks) "pfy" = ( /obj/effect/ai_node, /turf/open/floor/wood, @@ -18375,21 +18287,9 @@ dir = 4 }, /area/mainship/hallways/starboard_hallway) -"phV" = ( -/obj/structure/cable, -/obj/structure/rack, -/obj/item/storage/toolbox/electrical{ - pixel_x = -5; - pixel_y = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 6 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "phY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -18418,6 +18318,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/mainship/green{ dir = 1 }, @@ -18445,6 +18346,21 @@ }, /turf/open/floor/mainship/floor, /area/mainship/engineering/engine_core) +"pjB" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera/autoname/mainship{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/mainship/orange{ + dir = 8 + }, +/area/mainship/living/tankerbunks) "pkv" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 6 @@ -18531,6 +18447,16 @@ }, /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/hangar) +"ppr" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ + dir = 4; + on = 1 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/living/tankerbunks) "ppJ" = ( /obj/machinery/camera/autoname/mainship{ dir = 4 @@ -18569,6 +18495,18 @@ }, /turf/open/floor/plating, /area/mainship/hallways/hangar) +"prS" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/mainship/orange{ + dir = 8 + }, +/area/mainship/living/tankerbunks) "psm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -18592,6 +18530,16 @@ dir = 4 }, /area/mainship/living/evacuation) +"psr" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/squads/general) "psG" = ( /turf/open/floor/mainship/black{ dir = 10 @@ -18614,30 +18562,6 @@ "ptm" = ( /turf/closed/wall/mainship, /area/mainship/hull/starboard_hull) -"ptK" = ( -/obj/structure/cable, -/obj/effect/turf_decal/warning_stripes/thin, -/obj/structure/closet/firecloset/full, -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) -"ptL" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "ptU" = ( /turf/open/floor/mainship/sterile/side, /area/mainship/medical/lower_medical) @@ -18650,18 +18574,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) -"put" = ( -/obj/structure/table/mainship/nometal, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/wood, -/area/mainship/hallways/starboard_hallway) "puG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -18682,7 +18594,7 @@ "pvj" = ( /obj/structure/table/mainship/nometal, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/structure/cable, @@ -18787,6 +18699,15 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood, /area/mainship/shipboard/brig) +"pAm" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/obj/machinery/light/mainship, +/turf/open/floor/mainship/orange{ + dir = 1 + }, +/area/mainship/living/tankerbunks) "pAn" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -18803,9 +18724,7 @@ /area/mainship/medical/lower_medical) "pAv" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ - dir = 2 - }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/effect/ai_node, /turf/open/floor/mainship/black, @@ -18896,27 +18815,11 @@ }, /turf/open/floor/plating, /area/mainship/medical/upper_medical) -"pEn" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/living/pilotbunks) "pES" = ( /obj/machinery/vending/armor_supply, /obj/machinery/light/mainship, /turf/open/floor/mainship/mono, /area/mainship/living/pilotbunks) -"pFg" = ( -/obj/structure/cable, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/machinery/door_control/mainship/mech{ - dir = 4 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "pGa" = ( /obj/structure/closet/secure_closet/guncabinet/mp_armory, /turf/open/floor/mainship/sterile/dark, @@ -18947,6 +18850,24 @@ "pHG" = ( /turf/open/floor/mainship/silver, /area/mainship/living/evacuation) +"pHO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/structure/disposalpipe/junction/flipped, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/living/pilotbunks) +"pHS" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, +/obj/machinery/floodlight/landing, +/turf/open/floor/plating, +/area/mainship/hallways/hangar) "pHW" = ( /turf/open/floor/mainship/red{ dir = 6 @@ -19063,17 +18984,6 @@ /obj/effect/turf_decal/warning_stripes/thin, /turf/open/floor/mainship/floor, /area/mainship/hallways/port_ert) -"pNb" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/machinery/vending/tool, -/obj/structure/cable, -/obj/machinery/camera/autoname/mainship{ - dir = 8 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "pNg" = ( /obj/machinery/holopad, /turf/open/floor/mainship/floor, @@ -19106,9 +19016,7 @@ /area/mainship/hallways/port_hallway) "pOs" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ - dir = 2 - }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/machinery/cic_maptable, /obj/structure/table/mainship/nometal, @@ -19192,6 +19100,25 @@ dir = 9 }, /area/mainship/squads/general) +"pTZ" = ( +/obj/machinery/door/firedoor/mainship{ + dir = 8 + }, +/obj/machinery/door/poddoor/mainship/mech{ + name = "Vehicle Bay Shutters"; + id = "vehicle_shutters" + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/tankerbunks) +"pUe" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/mainship/medical/lower_medical) "pUk" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -19206,7 +19133,7 @@ /turf/closed/wall/mainship/outer, /area/mainship/shipboard/brig) "pVl" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -19240,7 +19167,7 @@ }, /area/mainship/living/grunt_rnr) "pWm" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -19293,7 +19220,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /turf/open/floor/mainship/floor, @@ -19399,7 +19326,7 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -19493,7 +19420,7 @@ }, /area/mainship/hull/starboard_hull) "qeq" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -19506,14 +19433,6 @@ /obj/structure/sink, /turf/open/floor/mainship/research, /area/mainship/medical/upper_medical) -"qeB" = ( -/obj/structure/window/framed/mainship/requisitions, -/obj/machinery/door/poddoor/shutters/mainship/open/hangar, -/obj/machinery/door/firedoor/mainship{ - dir = 8 - }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "qfD" = ( /obj/structure/bed/chair/nometal, /obj/machinery/light/mainship{ @@ -19562,16 +19481,6 @@ }, /turf/open/floor/wood, /area/mainship/living/grunt_rnr) -"qjy" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/pilotbunks) "qjP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 5 @@ -19579,14 +19488,6 @@ /obj/machinery/holopad, /turf/open/floor/mainship/red, /area/mainship/shipboard/firing_range) -"qjY" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "qkF" = ( /obj/machinery/chem_master, /turf/open/floor/mainship/sterile/side{ @@ -19608,6 +19509,15 @@ dir = 6 }, /area/mainship/hallways/hangar) +"qle" = ( +/obj/structure/table/mainship/nometal, +/obj/item/tool/taperoll/engineering, +/obj/item/clothing/gloves/insulated, +/obj/item/lightreplacer, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/mainship/floor, +/area/mainship/engineering/engineering_workshop) "qli" = ( /obj/machinery/firealarm{ dir = 4 @@ -19673,6 +19583,9 @@ /obj/machinery/door/firedoor/mainship{ dir = 2 }, +/obj/machinery/door/poddoor/mainship/open/cic{ + dir = 2 + }, /turf/open/floor/mainship/floor, /area/mainship/command/cic) "qns" = ( @@ -19741,13 +19654,6 @@ /obj/item/tool/pen, /turf/open/floor/wood, /area/mainship/living/bridgebunks) -"qpQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/effect/ai_node, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hull/starboard_hull) "qpR" = ( /obj/effect/soundplayer, /turf/closed/wall/mainship/outer, @@ -19811,9 +19717,11 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "qsW" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/coffeeweighted, -/turf/open/floor/wood, -/area/mainship/hallways/port_hallway) +/obj/machinery/camera/autoname/mainship{ + dir = 1 + }, +/turf/open/floor/plating, +/area/mainship/squads/req) "qsY" = ( /obj/structure/table/mainship/nometal, /obj/machinery/photocopier, @@ -19845,11 +19753,6 @@ /obj/item/megaphone, /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar/droppod) -"qtV" = ( -/turf/open/floor/mainship/green/corner{ - dir = 8 - }, -/area/mainship/squads/req) "qvc" = ( /obj/machinery/mech_bay_recharge_port, /turf/open/floor/mainship/orange{ @@ -19910,12 +19813,6 @@ /obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk, /area/mainship/engineering/starboard_atmos) -"qyy" = ( -/obj/structure/cable, -/turf/open/floor/mainship/black{ - dir = 1 - }, -/area/mainship/hallways/starboard_hallway) "qyM" = ( /obj/machinery/griddle, /obj/structure/disposalpipe/segment{ @@ -20091,26 +19988,11 @@ /obj/effect/spawner/random/misc/structure/flavorvending/colaweighted, /turf/open/floor/wood, /area/mainship/hallways/starboard_ert) -"qIa" = ( -/obj/machinery/door/airlock/mainship/generic/pilot/quarters{ - dir = 1 - }, -/obj/machinery/door/poddoor/shutters/mainship/open/hangar{ - dir = 2 - }, -/obj/machinery/door/firedoor{ - dir = 1 - }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) -"qIr" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/computer/atmos_alert, -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) +"qIh" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/camera/autoname/mainship, +/turf/open/floor/mainship/orange, +/area/mainship/living/tankerbunks) "qIC" = ( /obj/structure/window/framed/mainship/hull, /turf/open/floor/mainship/floor, @@ -20189,7 +20071,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/effect/ai_node, @@ -20267,7 +20149,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /turf/open/floor/prison/kitchen, @@ -20317,20 +20199,9 @@ }, /area/mainship/living/grunt_rnr) "qRK" = ( -/obj/structure/rack, -/obj/item/stack/conveyor/thirty, -/obj/item/conveyor_switch_construct, -/turf/open/floor/mainship/green{ - dir = 2 - }, +/obj/structure/closet/secure_closet/engineering_welding, +/turf/open/floor/mainship/cargo, /area/mainship/squads/req) -"qRL" = ( -/obj/structure/bed/chair/office/dark{ - dir = 1 - }, -/obj/structure/disposalpipe/segment/corner, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "qRZ" = ( /obj/machinery/door/airlock/mainship/research/glass/wing{ dir = 2 @@ -20343,18 +20214,20 @@ }, /turf/open/floor/mainship/research, /area/mainship/medical/upper_medical) +"qSb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/mainship/black{ + dir = 1 + }, +/area/mainship/hallways/starboard_hallway) "qSo" = ( /turf/open/floor/mainship/sterile/side{ dir = 4 }, /area/mainship/medical/lower_medical) -"qSV" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/segment, -/obj/machinery/light/mainship, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "qTP" = ( /obj/machinery/door/airlock/mainship/maint{ dir = 2 @@ -20367,6 +20240,15 @@ }, /turf/open/floor/plating, /area/mainship/engineering/engineering_workshop) +"qTS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/structure/disposalpipe/junction/flipped{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/starboard_hallway) "qTV" = ( /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar/droppod) @@ -20375,7 +20257,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /turf/open/floor/mainship/floor, @@ -20416,7 +20298,7 @@ /turf/open/floor/mainship/sterile/purple/side, /area/mainship/medical/upper_medical) "qUJ" = ( -/obj/machinery/vending/uniform_supply, +/obj/machinery/quick_vendor/beginner, /turf/open/floor/mainship/black{ dir = 9 }, @@ -20445,13 +20327,6 @@ /obj/effect/spawner/random/misc/cigarettes, /turf/open/floor/mainship/floor, /area/mainship/engineering/engineering_workshop) -"qVG" = ( -/obj/structure/cable, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "qWn" = ( /turf/open/floor/grass, /area/mainship/living/starboard_garden) @@ -20472,23 +20347,6 @@ dir = 4 }, /area/mainship/medical/lower_medical) -"qXq" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/open/floor/mainship/green{ - dir = 10 - }, -/area/mainship/squads/req) -"qXu" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "qXD" = ( /obj/machinery/light/mainship{ dir = 8 @@ -20567,6 +20425,16 @@ }, /turf/open/floor/mainship/tcomms, /area/mainship/command/airoom) +"rbo" = ( +/obj/machinery/door_control/mainship/mech{ + dir = 8; + name = "Vehicle Bay Shutter"; + id = "vehicle_shutters" + }, +/turf/open/floor/mainship/black{ + dir = 4 + }, +/area/mainship/hallways/hangar) "rbz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -20601,12 +20469,6 @@ dir = 6 }, /area/mainship/hallways/hangar/droppod) -"rcX" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "rdC" = ( /obj/structure/table/mainship/nometal, /obj/machinery/computer/crew, @@ -20673,17 +20535,16 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/chemistry) -"rge" = ( -/obj/effect/turf_decal/warning_stripes/thin{ +"rgf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/obj/machinery/light/mainship{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 8 }, -/obj/effect/ai_node, -/obj/machinery/holopad, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "rgl" = ( /obj/structure/cable, /turf/open/floor/mainship/black{ @@ -20759,12 +20620,14 @@ }, /turf/open/floor/plating, /area/mainship/hallways/starboard_hallway) -"ria" = ( -/obj/structure/dropship_equipment/electronics/spotlights, +"rhO" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, /turf/open/floor/mainship/orange{ dir = 4 }, -/area/mainship/hallways/hangar) +/area/mainship/living/tankerbunks) "rif" = ( /obj/structure/filingcabinet/medical, /turf/open/floor/mainship/sterile/corner{ @@ -20791,10 +20654,17 @@ dir = 4 }, /obj/machinery/firealarm, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, /turf/open/floor/mainship/green{ dir = 1 }, /area/mainship/squads/req) +"riy" = ( +/turf/open/floor/mainship/black{ + dir = 4 + }, +/area/mainship/living/pilotbunks) "riR" = ( /obj/structure/table/mainship/nometal, /obj/item/reagent_containers/food/drinks/coffee, @@ -20809,13 +20679,6 @@ }, /turf/open/floor/plating, /area/mainship/hull/starboard_hull) -"rjM" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light/mainship, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "rjQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 9 @@ -20825,6 +20688,11 @@ }, /turf/open/floor/mainship/floor, /area/mainship/squads/general) +"rki" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/obj/machinery/floodlight/landing, +/turf/open/floor/plating, +/area/mainship/hallways/hangar) "rkn" = ( /obj/effect/soundplayer, /turf/closed/wall/mainship, @@ -20845,7 +20713,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /turf/open/floor/mainship/sterile/corner, @@ -20863,6 +20731,19 @@ }, /turf/open/floor/plating, /area/mainship/hull/starboard_hull) +"rmj" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/structure/cable, +/obj/machinery/mech_bay_recharge_port{ + dir = 8 + }, +/turf/open/floor/mainship/cargo/arrow{ + dir = 8 + }, +/area/mainship/hallways/hangar) "rmo" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -20924,6 +20805,14 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/starboard_hull) +"rpl" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 9 + }, +/turf/open/floor/mainship/orange/corner{ + dir = 1 + }, +/area/mainship/living/tankerbunks) "rpm" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -20986,6 +20875,10 @@ dir = 5 }, /area/mainship/shipboard/brig) +"rqS" = ( +/obj/effect/decal/cleanable/blood/oil, +/turf/open/floor/plating, +/area/mainship/living/tankerbunks) "rrI" = ( /turf/open/floor/mainship/cargo/arrow{ dir = 8 @@ -21037,7 +20930,7 @@ /area/mainship/living/grunt_rnr) "rto" = ( /obj/effect/ai_node, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -21087,7 +20980,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /turf/open/floor/wood, @@ -21129,7 +21022,7 @@ /area/mainship/hallways/port_hallway) "rwL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, @@ -21164,16 +21057,6 @@ dir = 5 }, /area/mainship/engineering/upper_engine_monitoring) -"rzu" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/living/pilotbunks) "rAj" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -21239,14 +21122,6 @@ /obj/effect/ai_node, /turf/open/floor/mainship/floor, /area/mainship/squads/general) -"rCt" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/red{ - dir = 8 - }, -/area/mainship/hallways/hangar) "rDe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -21436,6 +21311,14 @@ dir = 1 }, /area/mainship/medical/upper_medical) +"rKc" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/turf/open/floor/mainship/sterile/side{ + dir = 9 + }, +/area/mainship/medical/lower_medical) "rKQ" = ( /obj/machinery/marine_selector/gear/smartgun, /turf/open/floor/mainship/black{ @@ -21488,6 +21371,29 @@ /obj/structure/table/gamblingtable, /turf/open/floor/wood, /area/mainship/living/evacuation) +"rMD" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 1 + }, +/turf/open/floor/mainship/orange{ + dir = 1 + }, +/area/mainship/living/tankerbunks) +"rMY" = ( +/obj/machinery/camera/autoname/mainship{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/mainship/black, +/area/mainship/hallways/hangar) "rNu" = ( /obj/structure/cable, /turf/open/floor/mainship/red/corner{ @@ -21754,12 +21660,6 @@ dir = 4 }, /area/mainship/medical/upper_medical) -"rXs" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/living/pilotbunks) "rYd" = ( /obj/effect/spawner/random/misc/plant, /obj/structure/disposalpipe/segment{ @@ -21833,7 +21733,7 @@ /area/mainship/engineering/engine_core) "rZY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, @@ -21845,11 +21745,13 @@ }, /turf/open/floor/wood, /area/mainship/hallways/port_ert) -"sal" = ( -/obj/machinery/atmospherics/pipe/manifold4w/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, -/turf/open/floor/wood, -/area/mainship/living/cafeteria_officer) +"sai" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hull/starboard_hull) "san" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/layer1, @@ -21875,24 +21777,6 @@ /obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/starboard_hull) -"sbi" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/vending/nanomed{ - dir = 1 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "sbO" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -21926,9 +21810,7 @@ "scL" = ( /obj/effect/spawner/random/misc/plant, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ - dir = 2 - }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -21973,12 +21855,6 @@ "seT" = ( /turf/open/floor/plating, /area/mainship/command/airoom) -"sfd" = ( -/obj/structure/cable, -/turf/open/floor/mainship/black{ - dir = 4 - }, -/area/mainship/living/pilotbunks) "sfI" = ( /turf/open/floor/mainship/black{ dir = 5 @@ -22194,15 +22070,11 @@ }, /area/mainship/hallways/port_ert) "smB" = ( -/obj/structure/closet/firecloset/full, -/turf/open/floor/mainship/green{ - dir = 10 - }, +/obj/item/stack/conveyor/thirty, +/obj/item/conveyor_switch_construct, +/obj/structure/rack, +/turf/open/floor/plating, /area/mainship/squads/req) -"smT" = ( -/obj/machinery/firealarm, -/turf/open/floor/mainship/cargo/arrow, -/area/mainship/hallways/hangar) "snb" = ( /obj/effect/landmark/start/latejoin, /turf/open/floor/mainship/black{ @@ -22236,19 +22108,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/mainship/floor, /area/mainship/living/numbertwobunks) -"spk" = ( -/obj/structure/table/mainship/nometal, -/obj/item/clothing/head/chefhat, -/obj/item/clothing/under/rank/chef, -/obj/item/clothing/suit/chef/classic, -/turf/open/floor/mainship/floor, -/area/mainship/living/grunt_rnr) "spr" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment/corner{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -22463,7 +22328,7 @@ /obj/structure/window/reinforced, /obj/structure/cable, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/structure/disposalpipe/segment{ @@ -22572,21 +22437,11 @@ }, /area/mainship/hallways/port_ert) "sIN" = ( -/obj/structure/dropship_equipment/cas/weapon/rocket_pod, +/obj/structure/dropship_equipment/cas/weapon/bomblet_pod, /turf/open/floor/mainship/red{ dir = 8 }, /area/mainship/hallways/hangar) -"sIO" = ( -/obj/structure/window/framed/mainship, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor/mainship{ - dir = 2 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/pilotbunks) "sIR" = ( /obj/structure/table/mainship/nometal, /obj/machinery/computer/supplydrop_console, @@ -22606,8 +22461,10 @@ /turf/open/floor/mainship/floor, /area/mainship/medical/upper_medical) "sJx" = ( -/obj/machinery/cryopod/right, /obj/machinery/light/mainship, +/obj/machinery/cryopod/right{ + dir = 1 + }, /turf/open/floor/mainship/black/full, /area/mainship/living/cryo_cells) "sJS" = ( @@ -22628,6 +22485,12 @@ dir = 1 }, /area/mainship/hallways/port_ert) +"sLf" = ( +/obj/structure/dropship_equipment/cas/weapon/rocket_pod, +/turf/open/floor/mainship/red{ + dir = 10 + }, +/area/mainship/hallways/hangar) "sLm" = ( /obj/machinery/flasher{ id = "Containment Cell 3"; @@ -22642,6 +22505,13 @@ /obj/machinery/holopad, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/medical_science) +"sLG" = ( +/obj/structure/table/mainship/nometal, +/obj/item/clothing/head/chefhat, +/obj/item/clothing/under/rank/chef, +/obj/item/clothing/suit/storage/chef/classic, +/turf/open/floor/mainship/floor, +/area/mainship/living/grunt_rnr) "sLH" = ( /obj/machinery/firealarm{ dir = 8 @@ -22661,6 +22531,21 @@ /obj/machinery/firealarm, /turf/open/floor/mainship/floor, /area/mainship/engineering/starboard_atmos) +"sMc" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/mainship/orange{ + dir = 4 + }, +/area/mainship/living/tankerbunks) "sMT" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -22713,6 +22598,25 @@ dir = 8 }, /area/mainship/hallways/hangar) +"sQj" = ( +/obj/machinery/vending/cargo_supply, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/turf/open/floor/mainship/green{ + dir = 2 + }, +/area/mainship/squads/req) +"sQo" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/living/tankerbunks) "sQH" = ( /obj/machinery/door/airlock/mainship/marine/general/smart{ dir = 2 @@ -22756,7 +22660,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/structure/disposalpipe/segment, @@ -22777,13 +22681,6 @@ /obj/machinery/door/firedoor/mainship, /turf/open/floor/mainship/floor, /area/mainship/shipboard/chief_mp_office) -"sUB" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/mainship/black{ - dir = 1 - }, -/area/mainship/living/pilotbunks) "sUW" = ( /obj/effect/turf_decal/warning_stripes/thin, /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ @@ -22810,27 +22707,6 @@ /obj/structure/ship_ammo/cas/rocket/widowmaker, /turf/open/floor/mainship/cargo, /area/mainship/hallways/hangar) -"sWP" = ( -/obj/structure/table/mainship/nometal, -/obj/effect/spawner/random/misc/paperbin{ - pixel_x = -9; - pixel_y = 2 - }, -/obj/item/tool/pen{ - pixel_x = -7; - pixel_y = 1 - }, -/obj/item/storage/fancy/cigar{ - pixel_x = 7; - pixel_y = -3 - }, -/obj/item/tool/lighter/zippo{ - pixel_x = 5; - pixel_y = 7 - }, -/obj/machinery/light/mainship, -/turf/open/floor/mainship/green, -/area/mainship/squads/req) "sWV" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ dir = 8; @@ -22857,9 +22733,7 @@ /area/mainship/command/airoom) "sXM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ - dir = 2 - }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/structure/disposalpipe/segment/corner{ dir = 8 @@ -23048,13 +22922,6 @@ dir = 8 }, /area/mainship/hallways/starboard_hallway) -"tiG" = ( -/obj/structure/table/woodentable, -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/wood, -/area/mainship/hallways/port_hallway) "tiH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -23141,15 +23008,6 @@ }, /turf/open/floor/plating, /area/mainship/hull/starboard_hull) -"tqd" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/window/framed/mainship, -/obj/machinery/door/firedoor/mainship{ - dir = 2 - }, -/turf/open/floor/mainship/mono, -/area/mainship/living/tankerbunks) "tqJ" = ( /obj/machinery/door/poddoor/mainship/open/cic, /obj/machinery/door/firedoor/mainship, @@ -23170,6 +23028,10 @@ dir = 4 }, /obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/mainship/req{ + dir = 8; + id = "requisitions" + }, /turf/open/floor/mainship/floor, /area/mainship/squads/req) "tqM" = ( @@ -23190,13 +23052,15 @@ dir = 1 }, /area/mainship/living/evacuation) -"trQ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/mainship/black{ +"trC" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 9 + }, +/obj/structure/closet/toolcloset, +/turf/open/floor/mainship/orange/corner{ dir = 1 }, -/area/mainship/hallways/starboard_hallway) +/area/mainship/living/tankerbunks) "tsI" = ( /obj/machinery/door/poddoor/mainship/ammo{ dir = 2; @@ -23212,21 +23076,6 @@ }, /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/hangar) -"tsS" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "ttg" = ( /obj/machinery/camera/autoname/mainship{ dir = 4 @@ -23249,7 +23098,7 @@ /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/medical_science) "ttU" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -23289,6 +23138,21 @@ dir = 1 }, /area/mainship/hallways/hangar) +"tuR" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/mainship/black, +/area/mainship/living/pilotbunks) +"tuT" = ( +/obj/structure/dropship_equipment/shuttle/flare_launcher, +/turf/open/floor/mainship/orange{ + dir = 6 + }, +/area/mainship/hallways/hangar) "tvc" = ( /turf/open/floor/mainship/sterile/corner{ dir = 8 @@ -23380,15 +23244,6 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) -"tzR" = ( -/obj/machinery/door/firedoor{ - dir = 1 - }, -/obj/machinery/door/airlock/mainship/maint{ - dir = 2 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/hangar) "tzT" = ( /obj/structure/window/framed/mainship, /obj/structure/cable, @@ -23404,6 +23259,17 @@ /obj/machinery/door/firedoor/mainship, /turf/open/floor/mainship/floor, /area/mainship/hallways/port_hallway) +"tzV" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer1, +/obj/structure/cable, +/turf/open/floor/mainship/red{ + dir = 8 + }, +/area/mainship/shipboard/weapon_room) "tAd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -23545,20 +23411,28 @@ }, /turf/open/floor/plating, /area/mainship/hull/port_hull) -"tFh" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/effect/ai_node, -/turf/open/floor/mainship/orange{ - dir = 8 - }, -/area/mainship/engineering/engineering_workshop) "tFJ" = ( /turf/open/floor/mainship/silver{ dir = 10 }, /area/mainship/command/cic) +"tFL" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/obj/machinery/floodlight/landing, +/turf/open/floor/plating, +/area/mainship/hallways/hangar) +"tFM" = ( +/obj/machinery/door/poddoor/mainship/mech{ + name = "Vehicle Bay Shutters"; + id = "vehicle_shutters" + }, +/obj/machinery/door/firedoor/mainship{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/tankerbunks) "tGC" = ( /obj/structure/prop/tgbrokenvendor/sec, /turf/open/floor/mainship/floor, @@ -23582,20 +23456,12 @@ dir = 1 }, /area/mainship/living/grunt_rnr) -"tIN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hull/starboard_hull) "tIV" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /turf/open/floor/plating/plating_catwalk, @@ -23613,7 +23479,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/structure/disposalpipe/segment, @@ -23625,6 +23491,12 @@ dir = 6 }, /area/mainship/command/cic) +"tJr" = ( +/obj/machinery/door/firedoor/mainship{ + dir = 8 + }, +/turf/open/floor/mainship/stripesquare, +/area/mainship/hallways/starboard_hallway) "tJH" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -23659,7 +23531,7 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -23673,6 +23545,16 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) +"tLB" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/effect/ai_node, +/obj/machinery/light/mainship/small{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hull/starboard_hull) "tLC" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -23697,6 +23579,23 @@ dir = 1 }, /area/mainship/engineering/engineering_workshop) +"tNS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor/mainship{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/door/poddoor/mainship/mech{ + name = "Vehicle Bay Shutters"; + id = "vehicle_shutters" + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/tankerbunks) "tOf" = ( /obj/structure/window/framed/mainship/white/toughened, /turf/open/floor/mainship/research, @@ -23731,7 +23630,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /turf/open/floor/mainship/mono, @@ -23752,6 +23651,13 @@ /obj/machinery/camera/autoname/mainship, /turf/open/floor/mainship/floor, /area/mainship/engineering/engine_core) +"tQk" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "tRa" = ( /obj/structure/flora/ausbushes/ppflowers, /obj/structure/bed/stool{ @@ -23759,21 +23665,6 @@ }, /turf/open/floor/grass, /area/mainship/living/starboard_garden) -"tRk" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "tRx" = ( /obj/structure/table/mainship/nometal, /obj/machinery/chem_dispenser/beer{ @@ -23825,6 +23716,15 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) +"tVr" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/effect/ai_node, +/turf/open/floor/mainship/orange{ + dir = 8 + }, +/area/mainship/engineering/engineering_workshop) "tVF" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -23836,7 +23736,7 @@ /area/mainship/squads/general) "tVJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, @@ -23890,16 +23790,6 @@ "tZf" = ( /turf/open/floor/mainship/terragov/north, /area/mainship/command/cic) -"tZM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ - dir = 8 - }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) "uab" = ( /obj/structure/window/framed/mainship/white, /obj/structure/disposalpipe/segment, @@ -23938,12 +23828,21 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/effect/ai_node, /turf/open/floor/mainship/floor, /area/mainship/squads/general) +"ucN" = ( +/obj/machinery/door/airlock/mainship/maint{ + dir = 2 + }, +/obj/machinery/door/firedoor{ + dir = 1 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "ucO" = ( /turf/open/floor/mainship/silver{ dir = 8 @@ -24034,14 +23933,6 @@ }, /turf/open/floor/plating, /area/mainship/medical/medical_science) -"ugZ" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 10 - }, -/obj/machinery/vending/engivend, -/obj/structure/cable, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "uhS" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 10 @@ -24060,7 +23951,7 @@ /area/mainship/medical/lower_medical) "ujD" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -24244,6 +24135,13 @@ }, /turf/open/floor/wood, /area/mainship/hallways/starboard_ert) +"upn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/structure/disposalpipe/segment, +/obj/docking_port/stationary/marine_dropship/crash_target, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/lower_medical) "upq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -24302,6 +24200,8 @@ /obj/machinery/light/mainship{ dir = 1 }, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, /turf/open/floor/mainship/red, /area/mainship/shipboard/weapon_room) "ush" = ( @@ -24309,35 +24209,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/ntlogo/nt3, /area/mainship/medical/upper_medical) -"usx" = ( -/obj/effect/decal/cleanable/blood/oil{ - name = "grease"; - pixel_x = -7 - }, -/turf/open/floor/plating, -/area/mainship/living/tankerbunks) "usI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/floor, /area/mainship/command/airoom) -"utM" = ( -/obj/structure/cable, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) -"uub" = ( -/obj/machinery/door/airlock/mainship/research{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/door/firedoor{ - dir = 1 - }, -/obj/effect/ai_node, -/turf/open/floor/mainship/sterile/dark, -/area/mainship/medical/medical_science) "uud" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -24356,7 +24233,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/effect/ai_node, @@ -24380,17 +24257,6 @@ /obj/docking_port/stationary/escape_pod/right, /turf/open/floor/plating, /area/mainship/living/evacuation) -"uvX" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/machinery/camera/autoname/mainship{ - dir = 4 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "uwN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -24431,7 +24297,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /turf/open/floor/mainship/floor, @@ -24453,25 +24319,18 @@ dir = 10 }, /obj/machinery/door_control/mainship/req{ - id = "requisitions"; + id = "requisitions_main"; name = "Requisitions Shutters"; pixel_y = 25 }, /obj/machinery/light/mainship{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/mainship/green{ dir = 1 }, /area/mainship/squads/req) -"uyh" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/turf/open/floor/mainship/black{ - dir = 4 - }, -/area/mainship/hallways/port_hallway) "uyr" = ( /obj/machinery/optable, /obj/structure/curtain/medical, @@ -24620,13 +24479,6 @@ dir = 6 }, /area/mainship/hallways/hangar) -"uEC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/effect/ai_node, -/turf/open/floor/mainship/sterile/dark, -/area/mainship/medical/medical_science) "uFw" = ( /obj/machinery/door/airlock/mainship/generic/glass{ dir = 8 @@ -24746,7 +24598,7 @@ /area/mainship/command/airoom) "uJj" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -24871,7 +24723,7 @@ /area/mainship/squads/general) "uPh" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -24948,6 +24800,15 @@ }, /turf/open/floor/plating, /area/mainship/hallways/hangar) +"uTD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/starboard_hallway) "uTE" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -25010,9 +24871,7 @@ "uVE" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ - dir = 2 - }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /turf/open/floor/plating, /area/mainship/hallways/port_hallway) "uWc" = ( @@ -25125,6 +24984,11 @@ /obj/structure/window/framed/mainship/hull, /turf/open/floor/mainship/floor, /area/mainship/living/evacuation) +"vbh" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/firealarm, +/turf/open/floor/mainship/orange, +/area/mainship/living/tankerbunks) "vbs" = ( /obj/structure/table/mainship/nometal, /obj/effect/spawner/random/misc/paperbin{ @@ -25152,14 +25016,6 @@ /obj/structure/window/framed/mainship, /turf/open/floor/mainship/floor, /area/mainship/shipboard/brig_cells) -"vcI" = ( -/obj/structure/disposalpipe/segment/corner{ - dir = 1 - }, -/turf/open/floor/mainship/orange{ - dir = 9 - }, -/area/mainship/hallways/hangar/flight_control) "vdi" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/mainship/sterile/corner{ @@ -25350,6 +25206,7 @@ /obj/machinery/door/airlock/mainship/maint{ dir = 8 }, +/obj/machinery/door/poddoor/mainship/open/cic, /turf/open/floor/plating, /area/mainship/command/cic) "vkU" = ( @@ -25386,6 +25243,16 @@ dir = 10 }, /area/mainship/hallways/port_ert) +"vlu" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/port_hallway) "vlB" = ( /turf/closed/wall/mainship/outer, /area/mainship/hull/port_hull) @@ -25422,14 +25289,20 @@ /obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/port_hull) +"vmZ" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/effect/ai_node, +/turf/open/floor/mainship/floor, +/area/mainship/living/evacuation) "vnx" = ( -/obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/mainship/floor, /area/mainship/shipboard/weapon_room) "vnJ" = ( @@ -25450,13 +25323,6 @@ }, /turf/open/floor/mainship/cargo, /area/mainship/hallways/hangar) -"vnZ" = ( -/obj/machinery/door/poddoor/mainship/mech, -/obj/machinery/door/firedoor/mainship{ - dir = 8 - }, -/turf/open/floor/mainship/mono, -/area/mainship/living/tankerbunks) "vol" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -25468,6 +25334,14 @@ dir = 5 }, /area/mainship/command/cic) +"voO" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/disposalpipe/junction/yjunc{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/squads/general) "vpf" = ( /obj/machinery/door/airlock/mainship/maint{ dir = 8 @@ -25481,6 +25355,14 @@ /obj/machinery/door/firedoor, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/starboard_hull) +"vpu" = ( +/obj/machinery/camera/autoname/mainship{ + dir = 8 + }, +/turf/open/floor/mainship/black{ + dir = 8 + }, +/area/mainship/living/pilotbunks) "vqy" = ( /obj/machinery/door/airlock/mainship/medical/glass/research{ dir = 2 @@ -25504,14 +25386,6 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/operating_room_two) -"vqU" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 - }, -/turf/open/floor/mainship/black/corner{ - dir = 4 - }, -/area/mainship/hallways/port_hallway) "vqW" = ( /obj/structure/ship_rail_gun, /obj/effect/turf_decal/warning_stripes/thin{ @@ -25649,15 +25523,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) -"vvS" = ( -/obj/structure/rack, -/obj/item/tool/crowbar, -/obj/effect/spawner/random/engineering/toolbox, -/obj/item/stack/cable_coil, -/obj/effect/turf_decal/warning_stripes/thin, -/obj/structure/cable, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "vwt" = ( /obj/structure/rack, /obj/item/defibrillator, @@ -25691,7 +25556,7 @@ /area/mainship/squads/general) "vzf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -25751,6 +25616,14 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) +"vAY" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/mainship/floor, +/area/mainship/command/cic) "vBU" = ( /obj/structure/window/reinforced/toughened{ dir = 1 @@ -25796,6 +25669,14 @@ /obj/structure/droppod/leader, /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar/droppod) +"vEk" = ( +/obj/machinery/light/mainship{ + dir = 1 + }, +/turf/open/floor/mainship/red{ + dir = 8 + }, +/area/mainship/hallways/hangar) "vED" = ( /obj/structure/prop/mainship/name_stencil/T, /turf/open/floor/mainship_hull, @@ -25829,6 +25710,11 @@ }, /turf/open/floor/mainship/floor, /area/mainship/shipboard/brig) +"vFu" = ( +/obj/machinery/door/poddoor/mainship/mech, +/obj/machinery/door/firedoor/mainship, +/turf/open/floor/mainship/floor, +/area/mainship/living/tankerbunks) "vFx" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -25841,6 +25727,12 @@ /obj/effect/ai_node, /turf/open/floor/wood, /area/mainship/living/grunt_rnr) +"vGf" = ( +/obj/structure/dropship_equipment/cas/weapon/rocket_pod, +/turf/open/floor/mainship/red{ + dir = 6 + }, +/area/mainship/hallways/hangar) "vGh" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -25934,7 +25826,7 @@ /area/mainship/living/numbertwobunks) "vJu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -25961,6 +25853,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor/multi_tile, +/obj/structure/cable, /turf/open/floor/mainship/floor, /area/mainship/shipboard/weapon_room) "vKP" = ( @@ -25986,6 +25879,13 @@ /obj/effect/ai_node, /turf/open/floor/mainship/floor, /area/mainship/living/starboard_garden) +"vLD" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/port_hallway) "vLI" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -26026,20 +25926,6 @@ }, /turf/open/floor/mainship/floor, /area/mainship/command/cic) -"vMS" = ( -/obj/machinery/atmospherics/pipe/manifold4w/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/living/pilotbunks) -"vNl" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/turf/open/floor/mainship/black{ - dir = 5 - }, -/area/mainship/hallways/port_hallway) "vNz" = ( /obj/structure/table/mainship/nometal, /obj/machinery/reagentgrinder{ @@ -26132,13 +26018,14 @@ /obj/machinery/light/mainship{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/mainship/green{ dir = 1 }, /area/mainship/squads/req) "vRf" = ( /obj/structure/prop/vehicle/crane/cranecargo/destructible, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -26166,9 +26053,7 @@ /area/mainship/shipboard/brig) "vRx" = ( /obj/structure/bed/chair/nometal, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ - dir = 2 - }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -26261,7 +26146,7 @@ /area/mainship/shipboard/weapon_room) "vWR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -26270,6 +26155,19 @@ /obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) +"vXb" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 5 + }, +/obj/machinery/door_control/mainship/mech{ + dir = 4; + name = "Vehicle Bay Shutter"; + id = "vehicle_shutters" + }, +/turf/open/floor/mainship/orange/corner{ + dir = 4 + }, +/area/mainship/living/tankerbunks) "vXn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -26336,6 +26234,16 @@ /obj/effect/landmark/start/job/mechpilot, /turf/open/floor/wood, /area/mainship/living/pilotbunks) +"vYU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/obj/structure/table/mainship/nometal, +/turf/open/floor/wood, +/area/mainship/hallways/port_hallway) "waP" = ( /obj/structure/window/framed/mainship/white, /obj/machinery/door/firedoor/mainship{ @@ -26358,7 +26266,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/effect/ai_node, @@ -26393,6 +26301,7 @@ /obj/effect/turf_decal/warning_stripes/thin{ dir = 5 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/mainship/mono, /area/mainship/squads/req) "wcP" = ( @@ -26548,7 +26457,7 @@ /area/mainship/living/pilotbunks) "wjW" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -26593,7 +26502,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/disposalpipe/segment/corner, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/mainship/green{ dir = 8 }, @@ -26606,7 +26517,7 @@ /area/mainship/shipboard/chief_mp_office) "wmb" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -26658,9 +26569,10 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/mainship/green{ dir = 1 }, @@ -26734,6 +26646,20 @@ }, /turf/open/floor/mainship/red, /area/mainship/command/airoom) +"wrT" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor/mainship/floor, +/area/mainship/engineering/engineering_workshop) "wsB" = ( /obj/structure/window/framed/mainship, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -26882,14 +26808,6 @@ }, /turf/open/floor/mainship/floor, /area/mainship/engineering/starboard_atmos) -"wzR" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/holopad, -/turf/open/floor/mainship/floor, -/area/mainship/medical/upper_medical) "wzY" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 10 @@ -26904,16 +26822,6 @@ dir = 1 }, /area/mainship/hallways/port_ert) -"wAA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/turf/open/floor/mainship/orange, -/area/mainship/hallways/hangar/flight_control) "wAE" = ( /obj/structure/bed/chair{ dir = 8 @@ -26966,6 +26874,16 @@ /obj/structure/closet/crate/medical, /turf/open/floor/plating, /area/mainship/squads/req) +"wBr" = ( +/obj/structure/table/mainship/nometal, +/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/head/chefhat, +/obj/item/clothing/suit/storage/chef/classic, +/obj/item/tool/kitchen/rollingpin, +/obj/item/book/manual/chef_recipes, +/turf/open/floor/mainship/mono, +/area/mainship/living/grunt_rnr) "wCb" = ( /obj/docking_port/stationary/ert/target{ id = "starboard_target"; @@ -26979,16 +26897,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /turf/open/floor/wood, /area/mainship/shipboard/brig) -"wCN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/structure/disposalpipe/junction{ - dir = 8 - }, -/obj/effect/ai_node, -/turf/open/floor/plating, -/area/mainship/command/airoom) "wCW" = ( /obj/effect/ai_node, /turf/open/floor/mainship/black{ @@ -27094,16 +27002,6 @@ dir = 10 }, /area/mainship/command/cic) -"wGl" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/turf/open/floor/mainship/orange, -/area/mainship/hallways/hangar/flight_control) "wGu" = ( /obj/machinery/crema_switch{ id = 2; @@ -27184,12 +27082,6 @@ }, /turf/open/floor/mainship/black/full, /area/mainship/living/cryo_cells) -"wJE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/turf/open/floor/plating, -/area/mainship/medical/medical_science) "wJQ" = ( /obj/effect/ai_node, /turf/open/floor/plating, @@ -27205,8 +27097,7 @@ /obj/machinery/light/mainship{ dir = 4 }, -/obj/structure/cable, -/obj/machinery/power/monitor, +/obj/item/storage/fancy/cigar, /turf/open/floor/mainship/green{ dir = 4 }, @@ -27221,13 +27112,7 @@ }, /area/mainship/hallways/starboard_hallway) "wKW" = ( -/obj/machinery/power/port_gen/pacman, -/obj/item/stack/sheet/mineral/phoron{ - amount = 25 - }, -/obj/item/stack/sheet/mineral/phoron{ - amount = 25 - }, +/obj/structure/dropship_equipment/electronics/spotlights, /turf/open/floor/mainship/cargo, /area/mainship/hallways/hangar) "wLD" = ( @@ -27245,6 +27130,12 @@ /obj/machinery/door/firedoor/mainship, /turf/open/floor/mainship/black, /area/mainship/hallways/port_hallway) +"wLX" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/mainship/black{ + dir = 4 + }, +/area/mainship/living/pilotbunks) "wMy" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -27264,7 +27155,7 @@ /area/mainship/squads/general) "wNT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -27318,15 +27209,6 @@ dir = 1 }, /area/mainship/medical/lower_medical) -"wOQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/starboard_hallway) "wOW" = ( /obj/machinery/firealarm{ dir = 4 @@ -27404,19 +27286,18 @@ /obj/machinery/door/firedoor, /turf/open/floor/mainship/floor, /area/mainship/hallways/port_ert) -"wTx" = ( -/obj/machinery/vending/coffee, -/obj/machinery/camera/autoname/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/flight_control) "wTK" = ( /obj/machinery/bot/roomba, /turf/open/floor/mainship/red{ dir = 9 }, /area/mainship/hull/starboard_hull) +"wTM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/turf/open/floor/mainship/floor, +/area/mainship/engineering/engineering_workshop) "wUc" = ( /obj/machinery/door/firedoor{ dir = 1 @@ -27474,13 +27355,6 @@ /obj/effect/ai_node, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/medical_science) -"wXK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold4w/supply/visible/layer1, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/starboard_hallway) "wXL" = ( /obj/structure/closet/boxinggloves, /turf/open/floor/plating, @@ -27543,7 +27417,7 @@ /obj/structure/table/fancywoodentable, /obj/machinery/computer/marine_card, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -27558,22 +27432,10 @@ dir = 8 }, /area/mainship/living/evacuation) -"xdD" = ( -/obj/structure/dropship_equipment/electronics/spotlights, -/turf/open/floor/mainship/orange{ - dir = 8 - }, -/area/mainship/hallways/hangar) "xem" = ( /obj/structure/supply_drop, /turf/open/floor/plating, /area/mainship/squads/req) -"xen" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/starboard_hallway) "xez" = ( /obj/structure/sign/fire{ dir = 4 @@ -27590,6 +27452,14 @@ }, /turf/closed/wall/mainship/outer, /area/mainship/command/self_destruct) +"xeS" = ( +/obj/structure/rack, +/obj/item/tool/wrench, +/obj/item/paper/factoryhowto, +/obj/item/tool/crowbar, +/obj/machinery/light/mainship, +/turf/open/floor/plating, +/area/mainship/squads/req) "xfa" = ( /obj/machinery/camera/autoname/mainship{ dir = 8 @@ -27598,11 +27468,6 @@ dir = 4 }, /area/mainship/medical/upper_medical) -"xfA" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/obj/structure/cable, -/turf/open/floor/mainship/floor, -/area/mainship/squads/req) "xfL" = ( /obj/machinery/vending/medical/shipside, /obj/machinery/light/mainship{ @@ -27797,15 +27662,6 @@ dir = 9 }, /area/mainship/medical/medical_science) -"xop" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold4w/supply/visible/layer1, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, -/obj/structure/disposalpipe/segment, -/turf/open/floor/mainship/sterile/side{ - dir = 1 - }, -/area/mainship/medical/lower_medical) "xoT" = ( /obj/structure/prop/mainship/name_stencil, /turf/open/floor/mainship_hull, @@ -27821,7 +27677,7 @@ /area/mainship/hull/port_hull) "xqh" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -27898,6 +27754,23 @@ dir = 4 }, /area/mainship/shipboard/brig) +"xtT" = ( +/obj/machinery/camera/autoname/mainship{ + dir = 4 + }, +/turf/open/floor/mainship/orange{ + dir = 8 + }, +/area/mainship/engineering/engineering_workshop) +"xus" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/disposalpipe/junction/flipped{ + dir = 4 + }, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/chemistry) "xuI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -27944,12 +27817,6 @@ "xwJ" = ( /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) -"xwR" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/open/floor/plating, -/area/mainship/living/tankerbunks) "xwV" = ( /obj/structure/rack, /obj/structure/ob_ammo/warhead/incendiary, @@ -28012,12 +27879,17 @@ dir = 4 }, /area/mainship/squads/general) +"xzR" = ( +/turf/open/floor/mainship/black/corner{ + dir = 4 + }, +/area/mainship/living/pilotbunks) "xzX" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/structure/disposalpipe/segment/corner{ @@ -28046,7 +27918,7 @@ /area/mainship/living/numbertwobunks) "xAU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -28059,14 +27931,6 @@ /obj/machinery/self_destruct/console, /turf/open/floor/mainship/tcomms, /area/mainship/command/self_destruct) -"xCm" = ( -/obj/structure/window/framed/mainship, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor/mainship, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "xCr" = ( /obj/machinery/camera/autoname/mainship{ dir = 1 @@ -28100,7 +27964,7 @@ /turf/open/floor/wood, /area/mainship/command/corporateliaison) "xDu" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -28219,7 +28083,6 @@ /turf/open/floor/plating, /area/mainship/hallways/starboard_hallway) "xHY" = ( -/obj/structure/cable, /mob/living/simple_animal/cat/martin, /turf/open/floor/mainship/green/corner, /area/mainship/squads/req) @@ -28237,21 +28100,13 @@ /turf/open/floor/wood, /area/mainship/living/bridgebunks) "xIn" = ( -/obj/structure/table/mainship/nometal, -/obj/item/facepaint/green{ - pixel_x = -7; - pixel_y = 2 - }, -/obj/item/tool/hand_labeler{ - pixel_x = 7; - pixel_y = 7 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/vending/marineFood, /turf/open/floor/mainship/green{ dir = 2 }, @@ -28285,6 +28140,30 @@ /obj/structure/ship_ammo/cas/minirocket, /turf/open/floor/mainship/cargo, /area/mainship/hallways/hangar) +"xKo" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/toolbox/electrical{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/light/mainship{ + dir = 8 + }, +/turf/open/floor/mainship/orange/corner{ + dir = 2 + }, +/area/mainship/living/tankerbunks) "xKp" = ( /obj/machinery/door/airlock/mainship/marine/general/smart{ dir = 2 @@ -28342,7 +28221,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/effect/ai_node, @@ -28351,20 +28230,32 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/port_hull) -"xOi" = ( -/obj/structure/cable, -/turf/open/floor/mainship/orange{ - dir = 8 - }, -/area/mainship/living/pilotbunks) "xOn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating/plating_catwalk, /area/mainship/engineering/engine_core) +"xON" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/light/mainship{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/mainship/black{ + dir = 4 + }, +/area/mainship/living/pilotbunks) "xPi" = ( /obj/machinery/researchcomp, /turf/open/floor/mainship/orange{ @@ -28393,7 +28284,7 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -28530,7 +28421,7 @@ /area/mainship/squads/general) "xVF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -28607,6 +28498,16 @@ dir = 6 }, /area/mainship/hallways/port_hallway) +"yaC" = ( +/obj/machinery/door/poddoor/shutters/mainship/req{ + dir = 2; + id = "requisitions_main" + }, +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, +/turf/open/floor/mainship/floor, +/area/mainship/squads/req) "yaW" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/mainship/floor, @@ -28636,7 +28537,7 @@ /area/mainship/living/bridgebunks) "ybQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -28674,7 +28575,7 @@ /area/mainship/command/self_destruct) "ydT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -28742,12 +28643,12 @@ /turf/open/floor/mainship/floor, /area/mainship/command/self_destruct) "yfH" = ( -/obj/machinery/door/airlock/mainship/medical/glass/research{ - dir = 2 - }, /obj/machinery/door/firedoor{ dir = 1 }, +/obj/machinery/door/airlock/mainship/generic/glass{ + dir = 1 + }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/upper_medical) "yfZ" = ( @@ -28759,10 +28660,11 @@ "ygQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, /turf/open/floor/mainship/green, /area/mainship/squads/req) "ygU" = ( -/obj/machinery/vending/armor_supply, +/obj/machinery/quick_vendor/beginner, /turf/open/floor/mainship/black{ dir = 10 }, @@ -30560,18 +30462,18 @@ vkb vkb vkb vkb +idu vkb vkb vkb +idu vkb vkb +idu vkb vkb vkb -vkb -vkb -vkb -vkb +idu vkb idu vkb @@ -30663,16 +30565,16 @@ vlB vlB vlB vlB +vqX +vqX +vqX vlB vlB vlB vlB -vlB -vlB -vlB -vlB -vlB -vlB +vqX +vqX +vqX vlB vlB vlB @@ -30760,9 +30662,10 @@ vkb vkb vkb vlB -fDt +ord muq muq +pxf uro pxf pxf @@ -30770,7 +30673,6 @@ pxf uro pxf pxf -pxf bqN pxf qAQ @@ -30887,7 +30789,7 @@ dDc dDc dDc dDc -nig +bIm vlB vkb vkb @@ -30989,7 +30891,7 @@ dDc kqb beT dDc -bIm +hzN vlB vkb vkb @@ -31363,7 +31265,7 @@ pQC mbl lPB san -wzR +iKH exi nqR ack @@ -31570,7 +31472,7 @@ ssU peM iFs rXe -iyV +fKA cPq fgD jjn @@ -32013,7 +31915,7 @@ asC lqF ipc fMB -sal +jRS deW hOM gan @@ -32496,7 +32398,7 @@ otY spr mAr qna -iGR +aPk bEx ptU wbL @@ -32608,7 +32510,7 @@ alg alg hfg lCI -fEy +kbS dnA nLu nLu @@ -33317,7 +33219,7 @@ mot xxH snB mGS -nmt +rKc ptU ebP dfE @@ -33410,7 +33312,7 @@ pyh rfi eLi aZO -olm +fKq lYh ptU xyx @@ -33548,7 +33450,7 @@ ndd xOn avk shM -kXK +vlu itb kol lQF @@ -33636,7 +33538,7 @@ hHp vio gCn eWF -wJE +iNG abt llt inv @@ -33934,10 +33836,10 @@ xxH sYu etv etv -jlh +bzc xSv etv -cuU +nRf nLu wBj kQd @@ -33945,7 +33847,7 @@ nLu ahX qTP oWF -tFh +tVr bHZ oPX eRp @@ -34062,7 +33964,7 @@ lfY oIE msX qRH -cAR +vmZ pHG dGV dGV @@ -34141,18 +34043,18 @@ qVx oDR pNi qVx -hNK -uub +bsw +daG etv -nJa +luq goY -uEC +iDc kse eUB -ozH +eRd ukp owW -mZd +xtT uHr wkm ers @@ -34251,10 +34153,10 @@ tCW kpB kse gaQ -dCN +wrT rpm rpm -hXk +hZr twr bBy bej @@ -34418,15 +34320,15 @@ uEB rbz lRt tuN -mPC +mDZ fRR vkU xkw sMT yeb kMa -xop -nNN +pUe +upn tqM nNN cSO @@ -34466,11 +34368,11 @@ ybQ gYt myT roB -kIx +vYU lvg fOc jQG -miU +oaL mBg qpA mhs @@ -34847,7 +34749,7 @@ lFF afd sXw eFB -foM +xus nTa tBK xTX @@ -34878,7 +34780,7 @@ lfY bLP hFd vQh -miU +oaL pHG dGV dGV @@ -34967,7 +34869,7 @@ qTP epy jVd kIr -iNv +wTM sFo cWv uIr @@ -35171,7 +35073,7 @@ kse fOQ kuS gIE -lCw +qle cgW moq pSJ @@ -35432,7 +35334,7 @@ tNu fHx olD olD -tZM +mam kPd kPd tNu @@ -35535,10 +35437,10 @@ bMK hIO dSy fcW -xdD +mtB uLq uLq -hER +gzs oUe mPK mFV @@ -35569,10 +35471,10 @@ kcA pPz kcA kcA -cMv -uyh -uyh -vqU +kcz +kcA +kcA +nCs oQf puU lLL @@ -35638,7 +35540,7 @@ hIO ehy dxv ikw -ozW +wKW wKW qIG oUe @@ -35664,7 +35566,7 @@ bEI qns qns qns -eqs +aBu lvX aBu aBu @@ -35672,9 +35574,9 @@ tqL aBu aBu lvX -aSe -weW -ooo +aBu +qns +fyL oQf odq dsU @@ -35739,10 +35641,10 @@ bMK hIO dmG htw -ria +fsO wQY wQY -bGJ +tuT oUe mPK mFV @@ -35772,23 +35674,23 @@ crL egZ wkY mVg -qXq -qns -tiG +eJg +oeO +eJg kkD -ooo +fyL fVl hac bea hac hac hac -izM +vLD cYl uEn mMU uEn -dHM +mxD itb qwU kOB @@ -35872,13 +35774,13 @@ cpj hOf ccO aQr -iTj +irb hgk -sWP -qns +eJg +eJg qsW -dHB -vNl +kkD +cuo kcA kcA xim @@ -35974,11 +35876,11 @@ mnB qns riu wcJ -wAT -aQr -hvD -qns -qns +dVG +hgk +eJg +eJg +xeS rIo iyR rIo @@ -36054,8 +35956,8 @@ xYf rik rik rik -rik -hPC +pHS +bHy mGC mGC mGC @@ -36072,14 +35974,14 @@ xHp qns qns qns -eqs +aBu qns jLz qba wAT -aQr -qtV -wiu +hgk +eJg +eJg smB rIo lkF @@ -36145,8 +36047,8 @@ wQg etU vAL mGC -jfL -jcy +mGC +rki lNQ mGC mGC @@ -36179,9 +36081,9 @@ coX twK qba wux -aQr -aQr -aQr +hsb +jYX +jYX aAw rIo lkF @@ -36203,7 +36105,7 @@ fVh fVh dOo ylg -gjQ +ooE aoJ oSr akX @@ -36381,10 +36283,10 @@ rqa cpj knU piC -xfA +iPX igg -esW eJg +esW oEt sjm pLi @@ -36407,7 +36309,7 @@ uny lto bRk pXk -lNB +gPQ lYI vBU gZM @@ -36590,7 +36492,7 @@ wJQ xem eJg hTi -bnf +sQj pLi saV mUy @@ -36787,12 +36689,12 @@ aJZ aJZ rqa cpj -knU +yaC piC -xfA +iPX wBp +naR cWi -eJg oEt xIn pLi @@ -36961,8 +36863,8 @@ wQg etU vAL mGC -jfL -jcy +mGC +rki lNQ mGC mGC @@ -36987,7 +36889,7 @@ cpj cpj cpj cpj -cpj +eJB cpj fEb xlZ @@ -37005,21 +36907,21 @@ iKA iKA iKA iKA -eLB +tzV iKA buM kLw dBx vKf -for -chN +qSb +qTS pnh fVh fVh fVh bBp eWY -pdI +vAY aoJ yfn jLu @@ -37074,8 +36976,8 @@ jDS uST uST uST -uST -eHv +tFL +uhS mGC mGC mGC @@ -37097,23 +36999,23 @@ qns sRa qba xsC -bSA +aQr xHY lsn fzO -dSZ +jKK lvO eDN lQM mCT -dSZ +jKK vnx eHK lQM mCT lvO -dSZ -fIT +jKK +cmX tVJ haX fVh @@ -37381,14 +37283,14 @@ ixI ixI ixI ixI -ixI +aib ixI ffD ixI ixI ixI -aib -ixI +rgf +tQk ixI nDC oJJ @@ -37413,14 +37315,14 @@ skY oko gtr uDh -wXK +jPR dGd dGd dGd dGd lmX dGd -chN +qTS pnh qwU kOB @@ -37466,7 +37368,7 @@ vkb vkb vkb eju -dAd +iwz hIO mHO mFV @@ -37481,19 +37383,19 @@ oUe vtz qEX nHc +vSg +tys +kpw +tys +sWV uGv tys tys +aGN tys -sWV -cWw -vSg -fHP -kpw tys -uGv +rbo lWW -nHc eUr sdU uEz @@ -37566,9 +37468,9 @@ meP bwF vkb vkb -vkb eju -iwz +eju +dAd hIO ssO ttX @@ -37581,19 +37483,19 @@ poV ssO cVV xPo -jiF -lmo -nLY -nLY -nLY -bMa -iro -eiz +cVV mrs -mNP -hAQ -vnZ eiz +vFu +eVm +vFu +eiz +mrs +koG +pTZ +tNS +pTZ +tFM eiz mrs nnu @@ -37669,7 +37571,7 @@ bwF vkb vkb eju -eju +wPp dAd hIO wog @@ -37684,19 +37586,19 @@ hIO hFf vtz kEL -iro -hCq -dxr -bpv -cHG -iro -phV -pFg -qVG -dyl -qjY -uvX -jKk +eiz +mvP +jIi +sMc +lLa +hiw +xKo +lLa +lLa +fZA +rhO +rhO +vXb eOG dNX eBS @@ -37786,19 +37688,19 @@ orq oUe vtz van -iro -kmn -hgl -hgl -hIQ -iro -kKd +eiz +jix +iQF +iQF +iQF +ppr +sQo iQF iQF -xwR iQF iQF -tsS +iQF +pAm eOG dNX kDg @@ -37876,10 +37778,10 @@ eju pLM dAd hIO -izT +vnY jGj nQd -jQw +hOX xlh qvc etU @@ -37888,21 +37790,21 @@ orq oUe vtz dBe -iro -bKM -vcI -iva -eMA -iro -kJT -usx +eiz +cDb +mmP +bzN +mmP +juZ +gGg +iQF iQF -oCX iQF iQF -sbi +iQF +iKc eiz -nZf +tJr aRH coK eQh @@ -37977,8 +37879,8 @@ vkb eju cWR qrL -hIO -juW +ucN +wgU wgU ovg xsN @@ -37990,22 +37892,22 @@ orq oUe vtz fRR -nyG -utM -gdx -iHE -wTx -iro -ptK +eiz +qIh +rOU iQF -mmP +rOU +jcn +klv iQF -mmP -dEY -iua -tqd -trQ -wOQ +iQF +iQF +iQF +iQF +hAZ +oJx +nnu +kDg pnh eQh jLZ @@ -38090,21 +37992,21 @@ mQp mQp weJ oUe -xqh -vjQ -nTZ -rcX -kPm -wAA -nmW -iro -vvS +vtz +fRR +eiz +vbh +rqS iQF -rOU iQF -rOU -bzN -tRk +jDq +jdq +iQF +iQF +iQF +iQF +iQF +rMD eiz wIF wNT @@ -38121,7 +38023,7 @@ ciq gra xWA cmU -bIO +voO iiP nnc gfv @@ -38181,9 +38083,9 @@ vkb eju frL sbf -tzR -jGj -ngt +hIO +kAs +qkU mMV ttU hul @@ -38192,21 +38094,21 @@ hul hul tsI bca -beP -cPM -nyG -gvu -gdS -inL -rjM -iro -iRF +lLj +fRR +eiz +gqj +iQF +iQF +kXP +lgX +flT +iQF +iQF iQF -bFa -pfx -aro iQF -tRk +iQF +pAm eOG dNX kDg @@ -38284,8 +38186,8 @@ eju iFH twS hIO -kAs -qkU +daV +nir mMV lqe rTR @@ -38294,21 +38196,21 @@ nPa nPa igO oUe -wXN +fhn fRR -qIa -pfr -gdx -wGl -aoX -iro -ugZ -pNb -mUj -rge -ftu -qXu -ptL +lwX +jKl +fDq +hYj +fDq +trC +fIz +pjB +prS +kjW +iNp +fDq +rpl eOG dNX kDg @@ -38384,10 +38286,10 @@ vkb vkb eju hAy -tIN +lbf lry -rCt -nir +kAs +cZF mMV lqe mFV @@ -38396,21 +38298,21 @@ pef sIN orq oUe -vtz -fRR -nyG -pfr -gdx -wGl -pfr -lmo +khM +kEL +eiz pya +cGQ +pya +cGQ +pya +pya +pya +cGQ +dKZ +cGQ pya -nSU -eiz -lNL pya -xCm mrs nnu kDg @@ -38488,8 +38390,8 @@ eju rIp twS hIO -smT -ngt +vEk +sLf hnt hfk uJJ @@ -38498,23 +38400,23 @@ geW fZU orq oUe -vtz +khM fRR -iro -qIr -nSL -ddc -utM -cKm -fKK -iCP -cWK -fBI -mkw -iCP -osB -kHL -qyy +cGx +dGq +riy +fhU +riy +riy +fhU +riy +riy +xON +riy +riy +xzR +cGx +dNX kDg pnh eQh @@ -38591,7 +38493,7 @@ wPp twS hIO kAs -cZF +vGf mMV lqe mFV @@ -38600,24 +38502,24 @@ sIT gis orq oUe -vtz -van -iro -bfZ -qRL -cef -qSV -nDU -jCj -pEn -eVP -rzu -vMS -rXs -eYK -sIO -for -hlj +nYJ +rMY +bXD +tuR +bcP +bcP +bcP +bcP +bcP +bcP +bcP +fwB +pHO +ckd +frU +kpC +qSb +gMB pnh eQh xgs @@ -38690,7 +38592,7 @@ vkb eju qal jTF -qpQ +sai hIO hZO mQp @@ -38702,21 +38604,21 @@ mQp qUh hIO hFf -vtz -kEL -iro -fZg -lyb -pfr -gXF -ckG -ahj -esT -xOi -gpD -cza -esT -hnH +wXN +fRR +cGx +agU +ggB +ggB +aHP +vpu +ggB +ggB +ggB +vpu +loy +ggB +lWS cGx dNX hLz @@ -38733,7 +38635,7 @@ ghd cek iUX eWs -bFc +lMq ivy oBY ivy @@ -38750,7 +38652,7 @@ lqg eEl eQh aJt -put +lmK ofa bmT cmq @@ -38806,17 +38708,17 @@ ssO cVV xPo cVV -lmo -qeB -qeB -qeB -qeB -lmo -heV +lXb +mNE +mNE +mNE +mNE +lXb +cBC cBC vXt xMD -nyp +hST cBC cBC lXb @@ -38914,11 +38816,11 @@ tEM tEM psG xMD -jZO -fhU -sfd -lCp -qjy +jAq +hFJ +wLX +ell +glA pxu eCm xMD @@ -38944,7 +38846,7 @@ xJg xTJ urw ejm -lqg +hzX lbd xJg xTJ @@ -39019,8 +38921,8 @@ kOp elP elP gkl -sUB -fjh +ajx +cnm xIf jve xMD @@ -39148,7 +39050,7 @@ xJg xTJ urw ejm -lqg +hzX lbd xJg xTJ @@ -39345,7 +39247,7 @@ sQH lxw fuP lFh -fFA +kdg pnK vKP pnK @@ -39362,7 +39264,7 @@ xQU jpe cZU qOb -wOQ +uTD pnh tjt chu @@ -39853,7 +39755,7 @@ bdd xyG nKA aen -kER +psr lbd jAF eMj @@ -40527,7 +40429,7 @@ eju qee rFA rFA -qpQ +sai hIO sWd sWd @@ -40555,7 +40457,7 @@ hUk iKE fkS ePS -xen +gtJ pnh tgV cKw @@ -40576,7 +40478,7 @@ xja snb snb dmK -kxH +nKs kZO snb snb @@ -40647,7 +40549,7 @@ hIO qgU jkD fRR -aLN +jGd meB euP qWn @@ -40774,20 +40676,20 @@ vPR iXT ins jAF -ock +aJv pDZ sAo -ock +aJv ifS -ock +aJv uUI sAo -ock +aJv mdJ -ock +aJv shl wgS -ock +aJv jAF vLX mkb @@ -40838,7 +40740,7 @@ hIO wie izT aEg -ijA +rmj nXV baL fki @@ -40849,7 +40751,7 @@ edg edg edg oCQ -npJ +oYv oCQ boV nMT @@ -40993,7 +40895,7 @@ tHD uNh rRg hnd -wCN +eXz aLJ wJw rEl @@ -41144,7 +41046,7 @@ epM snq snq nYE -oZE +mnH khR nPy nPy @@ -41499,7 +41401,7 @@ qyM aRg vgK bxN -spk +sLG vNz eWn rQd @@ -41512,7 +41414,7 @@ hjf vXI gNh pIA -qpQ +sai eju vkb vkb @@ -41699,7 +41601,7 @@ rQd rQd rQd rQd -cML +wBr lve izc axs @@ -42183,7 +42085,7 @@ bmD dMp hjI iOX -mIN +wPp twS mOR mvW @@ -42209,7 +42111,7 @@ vlY pag rJJ rQd -dAd +bUD eju vkb vkb @@ -42388,9 +42290,7 @@ vkb vkb dJt eju -ade -rFA -jiL +mps rFA rFA rFA @@ -42399,18 +42299,20 @@ rFA rFA rFA jiL -aHr rFA rFA -jiL +tLB +rFA rFA rFA +jiL rFA jiL rFA +rFA aHr mqG -dmm +jTF jTF jTF yiV @@ -42495,22 +42397,22 @@ eju eju eju eju +iVj +iVj +iVj eju eju eju eju +iVj +iVj +iVj eju eju eju -eju -eju -eju -eju -eju -eju -eju -eju -eju +iVj +iVj +iVj eju eju eju @@ -42596,24 +42498,24 @@ vkb vkb vkb vkb +dJt vkb vkb vkb +dJt vkb vkb +dJt vkb vkb vkb +dJt vkb +dJt vkb vkb vkb -vkb -vkb -vkb -vkb -vkb -vkb +dJt vkb vkb vkb diff --git a/_maps/map_files/BigRed_v2/BigRed_v2.dmm b/_maps/map_files/BigRed_v2/BigRed_v2.dmm index e871b0ea946c8..c823279ec3e7e 100644 --- a/_maps/map_files/BigRed_v2/BigRed_v2.dmm +++ b/_maps/map_files/BigRed_v2/BigRed_v2.dmm @@ -21,7 +21,6 @@ /obj/machinery/door/airlock/mainship/research/glass/free_access{ name = "\improper Eta Lab Secure Storage" }, -/obj/structure/cable, /turf/open/floor/asteroidfloor, /area/bigredv2/outside/nanotrasen_lab/inside/garbledradio) "abb" = ( @@ -335,12 +334,10 @@ }, /area/bigredv2/caves/lambda_lab) "afd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/weed_node, +/obj/effect/ai_node, /obj/structure/cable, -/obj/machinery/power/apc/drained, /turf/open/floor, -/area/bigredv2/outside/n) +/area/bigredv2/outside/hydroponics) "afg" = ( /obj/machinery/power/apc, /obj/structure/cable, @@ -2724,11 +2721,6 @@ /obj/machinery/light, /turf/open/floor/tile/darkish, /area/bigredv2/caves/lambda_lab) -"axF" = ( -/obj/structure/barricade/wooden, -/obj/structure/barricade/wooden, -/turf/open/floor/plating/ground/mars/random/sand, -/area/bigredv2/outside/n) "axP" = ( /obj/structure/bed/chair{ dir = 4 @@ -4586,6 +4578,7 @@ dir = 1; name = "\improper Crew Habitation Complex" }, +/obj/structure/cable, /turf/open/floor, /area/bigredv2/outside/hydroponics) "aOV" = ( @@ -4721,7 +4714,6 @@ /area/bigredv2/outside/nanotrasen_lab/inside) "aRj" = ( /obj/structure/barricade/wooden, -/obj/structure/cable, /turf/open/floor/wood, /area/bigredv2/outside/bar) "aRk" = ( @@ -5917,18 +5909,18 @@ "bmv" = ( /obj/structure/filingcabinet, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "bmw" = ( /obj/structure/closet/secure_closet/engineering_chief, /obj/machinery/light{ dir = 1 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "bmx" = ( /obj/structure/bookcase/manuals/engineering, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "bmA" = ( /obj/structure/barricade/wooden, /turf/open/floor/marking/asteroidwarning{ @@ -5956,7 +5948,7 @@ "bmY" = ( /obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "bnb" = ( /obj/machinery/door_control{ dir = 4; @@ -6008,7 +6000,7 @@ /obj/item/tool/lighter/zippo, /obj/item/tool/lighter/zippo, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "bnA" = ( /obj/machinery/door/airlock/mainship/engineering/free_access{ name = "\improper Atmospherics Condenser" @@ -6219,7 +6211,7 @@ dir = 8 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/filtration_plant) "bqp" = ( /obj/structure/cable, /turf/open/floor, @@ -6346,7 +6338,7 @@ name = "\improper Engineering Complex" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "bsY" = ( /obj/machinery/door/airlock/multi_tile/mainship/generic{ name = "\improper Atmospherics Condenser" @@ -6382,12 +6374,12 @@ /obj/machinery/computer/station_alert, /obj/structure/table, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "btu" = ( /obj/machinery/computer/atmos_alert, /obj/structure/table, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "btv" = ( /obj/structure/cable, /turf/open/floor/marking/asteroidwarning{ @@ -6405,7 +6397,7 @@ /obj/structure/cable, /obj/machinery/light, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/filtration_plant) "btN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -6432,7 +6424,7 @@ name = "\improper Engineering Complex" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/filtration_plant) "bud" = ( /turf/open/floor/plating/ground/mars/cavetodirt{ dir = 9 @@ -8263,6 +8255,10 @@ dir = 4 }, /area/bigredv2/outside/space_port/two) +"deg" = ( +/obj/structure/cable, +/turf/open/floor/asteroidfloor, +/area/bigredv2/outside/ne) "dev" = ( /turf/open/floor/plating/ground/mars/dirttosand/autosmooth{ dir = 1 @@ -8385,7 +8381,7 @@ /obj/structure/table, /obj/effect/spawner/random/engineering/toolbox, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "dun" = ( /obj/effect/decal/cleanable/blood/xeno, /turf/open/floor/tile/dark/yellow2/corner{ @@ -8856,6 +8852,10 @@ /obj/effect/turf_decal/warning_stripes/box/threeside, /turf/open/floor/tile/dark, /area/bigredv2/caves/lambda_lab) +"euX" = ( +/obj/effect/landmark/campaign_structure/sensor_tower, +/turf/open/floor/plating/ground/mars/random/sand, +/area/bigredv2/outside/se) "evb" = ( /obj/structure/fence, /obj/effect/landmark/lv624/fog_blocker, @@ -8927,6 +8927,12 @@ /obj/effect/ai_node, /turf/open/floor, /area/bigredv2/outside/engineering) +"eGO" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "eHC" = ( /obj/effect/turf_decal/sandedge/corner2{ dir = 8 @@ -9012,12 +9018,9 @@ /turf/open/floor/asteroidfloor, /area/bigredv2/outside/s) "ePH" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 4 - }, /obj/structure/cable, -/turf/open/floor, -/area/bigredv2/outside/engineering) +/turf/open/floor/plating/ground/mars/random/dirt, +/area/bigredv2/outside/e) "ePI" = ( /turf/open/floor/plating/ground/mars/random/dirt, /area/bigredv2/caves/west) @@ -9653,6 +9656,9 @@ /obj/effect/landmark/start/job/xenomorph, /turf/open/floor/tile/white, /area/bigredv2/outside/virology) +"gnk" = ( +/turf/closed/wall/r_wall, +/area/bigredv2/outside/engineering/east) "gpg" = ( /obj/effect/ai_node, /turf/open/floor/plating/ground/mars/random/sand, @@ -9866,7 +9872,7 @@ }, /obj/effect/ai_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "gLv" = ( /obj/effect/ai_node, /turf/open/floor/asteroidfloor, @@ -10196,9 +10202,10 @@ /turf/closed/wall/r_wall, /area/bigredv2/outside/cargo) "htK" = ( +/obj/effect/landmark/weed_node, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/nanotrasen_lab/inside/garbledradio) +/area/bigredv2/outside/hydroponics) "hvP" = ( /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/mars/random/cave/rock, @@ -10565,7 +10572,7 @@ "iup" = ( /obj/effect/decal/cleanable/blood, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "iwo" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/marking/asteroidwarning{ @@ -10927,10 +10934,9 @@ }, /area/bigredv2/caves/lambda_lab) "jfc" = ( -/obj/effect/landmark/weed_node, -/obj/structure/cable, +/obj/effect/ai_node, /turf/open/floor, -/area/bigredv2/outside/nanotrasen_lab/inside/garbledradio) +/area/bigredv2/outside/filtration_plant) "jfy" = ( /obj/machinery/light{ dir = 1 @@ -11492,11 +11498,12 @@ /turf/open/floor, /area/bigredv2/outside/nanotrasen_lab/inside/garbledradio) "kjl" = ( -/obj/effect/spawner/random/misc/structure/supplycrate, /obj/structure/cable, -/obj/machinery/power/apc/drained, -/turf/open/floor/marking/bot, -/area/bigredv2/outside/s) +/obj/machinery/power/apc/drained{ + dir = 8 + }, +/turf/open/floor/plating/ground/mars/random/dirt, +/area/bigredv2/outside/e) "kkj" = ( /obj/structure/cable, /turf/open/floor/plating/ground/mars/random/sand, @@ -11608,6 +11615,9 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor, /area/bigredv2/outside/engineering) +"kzT" = ( +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "kAz" = ( /obj/structure/table, /turf/open/floor/tile/dark, @@ -11694,7 +11704,7 @@ /area/bigredv2/outside/marshal_office) "kOk" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/stack/sheet/glass, +/obj/item/stack/sheet/glass/glass, /turf/open/floor, /area/bigredv2/outside/engineering) "kPA" = ( @@ -12070,6 +12080,11 @@ /obj/effect/landmark/weed_node, /turf/open/floor/tile/dark, /area/bigredv2/caves/lambda_lab) +"lLa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "lLi" = ( /obj/effect/ai_node, /turf/open/floor/plating/ground/mars/random/sand, @@ -12687,7 +12702,7 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "niU" = ( /obj/effect/landmark/weed_node, /turf/open/floor/plating, @@ -12741,7 +12756,7 @@ /obj/structure/cable, /obj/effect/ai_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/filtration_plant) "nnD" = ( /obj/machinery/door_control{ id = "Marshal Offices"; @@ -12828,10 +12843,12 @@ /turf/open/floor/marking/delivery, /area/bigredv2/caves/lambda_lab) "nux" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable, -/turf/open/floor, -/area/bigredv2/outside/dorms) +/obj/machinery/power/apc/drained{ + dir = 4 + }, +/turf/open/floor/asteroidfloor, +/area/bigredv2/outside/ne) "nuy" = ( /obj/effect/landmark/lv624/fog_blocker, /obj/machinery/door/poddoor/timed_late/containment/landing_zone, @@ -12844,7 +12861,7 @@ /obj/structure/table, /obj/effect/decal/cleanable/dirt, /obj/item/stock_parts/smes_coil, -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 30 }, /turf/open/floor, @@ -13183,7 +13200,7 @@ on = 1 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "olw" = ( /obj/effect/landmark/weed_node, /obj/structure/cable, @@ -13235,7 +13252,7 @@ dir = 8 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "orX" = ( /obj/machinery/light{ dir = 4 @@ -13414,6 +13431,14 @@ /obj/structure/cable, /turf/open/floor/tile/darkgreen/darkgreen2/corner, /area/bigredv2/outside/nanotrasen_lab/inside/garbledradio) +"oJW" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/machinery/power/apc/drained, +/turf/open/floor/plating/ground/mars/random/dirt, +/area/bigredv2/outside/n) "oKE" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/marking/asteroidwarning{ @@ -13755,7 +13780,7 @@ /obj/structure/cable, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "pJP" = ( /turf/open/floor/marking/asteroidwarning{ dir = 1 @@ -13809,6 +13834,10 @@ /obj/effect/ai_node, /turf/open/floor, /area/bigredv2/outside/filtration_plant) +"pPI" = ( +/obj/structure/cable, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "pPJ" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden{ dir = 8 @@ -14484,6 +14513,11 @@ /obj/effect/landmark/xeno_tunnel_spawn, /turf/open/floor/freezer, /area/bigredv2/outside/dorms) +"rqt" = ( +/obj/effect/landmark/weed_node, +/obj/structure/cable, +/turf/open/floor/asteroidfloor, +/area/bigredv2/outside/ne) "rrc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -14512,6 +14546,10 @@ }, /turf/open/floor/asteroidfloor, /area/bigredv2/outside/nw) +"rtr" = ( +/obj/effect/landmark/campaign_structure/sensor_tower, +/turf/open/floor, +/area/bigredv2/outside/dorms) "rvj" = ( /obj/effect/landmark/weed_node, /obj/structure/cable, @@ -14603,6 +14641,10 @@ /obj/effect/landmark/weed_node, /turf/open/floor, /area/bigredv2/outside/marshal_office) +"rEZ" = ( +/obj/effect/landmark/campaign_structure/sensor_tower, +/turf/open/floor/plating/ground/mars/random/dirt, +/area/bigredv2/outside/s) "rFP" = ( /obj/effect/decal/cleanable/dirt, /obj/item/clothing/glasses/welding, @@ -14729,11 +14771,14 @@ }, /area/bigredv2/outside/nw) "rSn" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, /obj/structure/cable, /obj/machinery/power/apc/drained{ - dir = 1 + crash_break_probability = 100 }, -/turf/open/floor/wood, +/turf/open/floor/marking/asteroidwarning, /area/bigredv2/outside/c) "rSL" = ( /obj/structure/girder/reinforced, @@ -14899,7 +14944,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "sqr" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 10 @@ -14985,6 +15030,11 @@ /obj/effect/landmark/weed_node, /turf/open/floor/wood, /area/bigredv2/outside/nanotrasen_lab/inside) +"sBN" = ( +/obj/structure/table, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "sDV" = ( /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/mars/dirttosand/autosmooth, @@ -15176,7 +15226,6 @@ "tdx" = ( /obj/item/trash/candy, /obj/effect/landmark/weed_node, -/obj/structure/cable, /turf/open/floor, /area/bigredv2/outside/dorms) "tdC" = ( @@ -15257,6 +15306,9 @@ dir = 9 }, /area/bigredv2/outside/nanotrasen_lab/inside/garbledradio) +"tpg" = ( +/turf/closed/wall, +/area/bigredv2/outside/engineering/east) "tpG" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/marking/asteroidwarning{ @@ -15546,6 +15598,13 @@ "tXa" = ( /turf/open/floor/wood, /area/bigredv2/outside/nanotrasen_lab/inside/garbledradio) +"tXe" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/campaign_structure/sensor_tower, +/turf/open/floor, +/area/bigredv2/outside/cargo) "tXP" = ( /obj/effect/turf_decal/warning_stripes/linethick{ dir = 8 @@ -15801,7 +15860,7 @@ /obj/effect/decal/cleanable/dirt, /obj/item/clothing/glasses/meson, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "uwD" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -16015,6 +16074,12 @@ dir = 1 }, /area/bigredv2/outside/nw) +"uVx" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + name = "\improper Engineering Complex" + }, +/turf/open/floor, +/area/bigredv2/outside/filtration_plant) "uWz" = ( /obj/effect/turf_decal/warning_stripes/thin, /turf/open/floor, @@ -16473,7 +16538,7 @@ /obj/item/trash/kepler, /obj/effect/decal/cleanable/dirt, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "vSH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -17092,7 +17157,7 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "xrC" = ( /turf/open/floor/plating/ground/mars/dirttosand/autosmooth{ dir = 1 @@ -17109,7 +17174,7 @@ /obj/effect/decal/cleanable/blood, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "xsS" = ( /obj/effect/landmark/weed_node, /turf/open/floor/marking/asteroidwarning{ @@ -17125,11 +17190,11 @@ /area/bigredv2/outside/nanotrasen_lab/inside) "xuc" = ( /obj/machinery/power/apc/drained{ - dir = 4 + dir = 8 }, /obj/structure/cable, -/turf/open/floor, -/area/bigredv2/outside/ne) +/turf/open/floor/asteroidfloor, +/area/bigredv2/outside/s) "xue" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/marking/asteroidwarning, @@ -29206,7 +29271,7 @@ aXK aZo roT nlp -eVx +tXe roT kuf nlp @@ -34436,11 +34501,11 @@ sGO lKw wzM aMc -blJ +gnk btu -uNS +pPI dst -fRt +sBN aaa aaa aaa @@ -34653,11 +34718,11 @@ wzM lKw wzM aMc -blJ +gnk btr -uNS -tOJ -tOJ +pPI +lLa +lLa aaa aaa aaa @@ -34870,7 +34935,7 @@ wzM lKw wzM vYw -blJ +gnk bmv xsz uwr @@ -35087,7 +35152,7 @@ wzM lKw wzM tCk -blJ +gnk bmw gKZ vSs @@ -35304,11 +35369,11 @@ sGO lKw wzM vYw -blJ +gnk bmx iup bnz -bob +eGO aaa aaa aaa @@ -35521,11 +35586,11 @@ oxP wzM oxP vYw -blJ -bmk +gnk +tpg bmY bmY -bmk +tpg aaa aaa aaa @@ -35739,9 +35804,9 @@ aFM qDk fHv bsX -hwc -hwc -hwc +kzT +kzT +kzT orP aaa aaa @@ -36172,11 +36237,11 @@ xsS vBu vBu gaV -blJ -blJ -blJ -blJ -blJ +gnk +gnk +gnk +gnk +gnk aaa aaa aaa @@ -36982,7 +37047,7 @@ gzM gzM gzM gzM -axF +aqO aqO gzM gQv @@ -37271,12 +37336,12 @@ wzM oxP oxP oxP -bmk -bmq -bmq -hwc -ePH -bmk +bkt +bmK +bmK +bkE +bnC +bkt wMP vJR hLG @@ -37488,12 +37553,12 @@ yhc wzM oxP djb -bmk -bmq +bkt +bmK bqo -hwc +bkE btJ -bmk +bkt xOD kCz hLG @@ -37705,10 +37770,10 @@ wzM oxP oxP vNZ -bsX -hwc -udg -xzw +uVx +bkE +jfc +wOA nmV bua nrC @@ -37922,12 +37987,12 @@ oxP oxP oxP aMc -hwc -hwc -hwc -hwc -ePH -uNS +bkE +bkE +bkE +bkE +bnC +bqp dQy btv btv @@ -38274,7 +38339,7 @@ acp acp acp acp -aqJ +oJW waY waY asH @@ -38290,7 +38355,7 @@ asH gfD iPs asH -afd +boy aCP asH aEK @@ -38376,7 +38441,7 @@ hLG bvp jNI jNI -jNI +xuc dQy jNI mRs @@ -38507,7 +38572,7 @@ asH uUl atY asH -nux +dur aCO asH aCO @@ -38811,7 +38876,7 @@ xuH jNI mRs kEl -htK +uFI uFI elE mRs @@ -38941,7 +39006,7 @@ aaa waj asJ asJ -nux +dur asJ jaB dur @@ -39028,7 +39093,7 @@ bvp jNI mRs kEl -jfc +jgh pXY abX mRs @@ -39157,7 +39222,7 @@ aaa aaa aaa asJ -asJ +rtr tdx asJ asJ @@ -39244,8 +39309,8 @@ vJR bvp eOX mRs -kjl -htK +kEl +uFI uFI foK mRs @@ -39674,7 +39739,7 @@ tco wdV hLG hLG -hLG +rEZ xuH jNI mRs @@ -43948,7 +44013,7 @@ aKx aKx aEO aEO -rSn +aEO azb aTh fXC @@ -44384,7 +44449,7 @@ aKx aEO xjO azb -aTh +rSn oxP aMc eBA @@ -45246,7 +45311,7 @@ arD aKB aCc ulB -apo +nux apo aBv sEz @@ -45463,11 +45528,11 @@ arD aKB gsc ulB -apo -jdG +deg +rqt aOU -xMA -vDA +afd +htK aOU aTk tWT @@ -46106,7 +46171,7 @@ aaa aaa sEz aCf -xuc +sEz aCf aBv aIw @@ -49614,7 +49679,7 @@ scS scS dKR scS -scS +euX scS dKR scS @@ -52851,9 +52916,9 @@ aTq onZ aOl xHO -xHO -xHO -xHO +kjl +ePH +ePH uXp aaa aaa diff --git a/_maps/map_files/Campaign maps/jungle_outpost/jungle_outpost.dmm b/_maps/map_files/Campaign maps/jungle_outpost/jungle_outpost.dmm index 5801f1533129a..7aff0f42b44e3 100644 --- a/_maps/map_files/Campaign maps/jungle_outpost/jungle_outpost.dmm +++ b/_maps/map_files/Campaign maps/jungle_outpost/jungle_outpost.dmm @@ -5,12 +5,6 @@ }, /turf/open/floor, /area/campaign/jungle_outpost/ground/jungle) -"ab" = ( -/obj/structure/table/reinforced, -/obj/item/folder/blue, -/obj/item/tool/pen/blue, -/turf/open/floor/mainship/mono, -/area/campaign/jungle_outpost/outpost/medbay) "ac" = ( /obj/structure/rack, /obj/item/weapon/gun/rifle/famas, @@ -41,14 +35,6 @@ /obj/structure/platform, /turf/closed/wall, /area/campaign/jungle_outpost/outpost/req/depot) -"aj" = ( -/obj/structure/bed/chair/wheelchair{ - dir = 8 - }, -/turf/open/floor/tile/blue/whiteblue{ - dir = 4 - }, -/area/campaign/jungle_outpost/outpost/medbay) "ak" = ( /obj/structure/prop/computer/broken/eighteen, /obj/structure/table/reinforced, @@ -91,16 +77,15 @@ dir = 10 }, /area/campaign/jungle_outpost/outpost/science) -"as" = ( -/obj/machinery/power/smes/buildable/empty{ - dir = 1 +"at" = ( +/obj/structure/platform{ + dir = 8 }, -/obj/machinery/light{ - dir = 4 +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 8 }, -/obj/structure/cable, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/landing/storage) "au" = ( /obj/structure/flora/tree/jungle, /turf/open/liquid/water/river, @@ -109,9 +94,6 @@ /obj/item/trash/burger, /turf/open/floor, /area/campaign/jungle_outpost/outpost/outer/southwest) -"ax" = ( -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/living/hydro) "ay" = ( /obj/structure/cable, /turf/open/floor, @@ -212,13 +194,6 @@ }, /turf/open/floor/tile/white, /area/campaign/jungle_outpost/outpost/medbay/lobby) -"aU" = ( -/obj/structure/cargo_container/horizontal{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "aV" = ( /turf/open/ground/grass/beach/corner2{ dir = 8 @@ -292,6 +267,13 @@ /obj/structure/cable, /turf/open/floor/tile/white, /area/campaign/jungle_outpost/outpost/science) +"bn" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags, +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/autosmooth, +/area/campaign/jungle_outpost/ground/jungle/south_west) "bo" = ( /turf/open/floor/plating/ground/dirtgrassborder2/corner, /area/campaign/jungle_outpost/ground/jungle/east) @@ -310,21 +292,10 @@ dir = 4 }, /area/campaign/jungle_outpost/ground/jungle/east) -"bs" = ( -/obj/structure/bed/chair/office/light{ - dir = 4 - }, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "bt" = ( /obj/structure/rock/variable/jungle/big, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/north) -"bv" = ( -/obj/structure/table/reinforced, -/obj/item/clipboard, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) "bw" = ( /obj/structure/catwalk, /obj/structure/catwalk, @@ -333,6 +304,14 @@ }, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle) +"bx" = ( +/obj/structure/platform, +/obj/effect/landmark/campaign_structure/barricade/sandbags, +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/landing) "by" = ( /obj/structure/rock/variable/jungle, /turf/open/ground/grass/weedable, @@ -353,14 +332,6 @@ }, /turf/closed/wall, /area/campaign/jungle_outpost/outpost/req/depot) -"bD" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/tile/blue/whiteblue{ - dir = 8 - }, -/area/campaign/jungle_outpost/outpost/medbay) "bE" = ( /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/west) @@ -382,11 +353,15 @@ dir = 1 }, /area/campaign/jungle_outpost/outpost/living) -"bJ" = ( -/turf/open/floor/tile/blue/whitebluecorner{ - dir = 4 +"bI" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 8 }, -/area/campaign/jungle_outpost/outpost/medbay) +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 1 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/south_west) "bK" = ( /obj/structure/flora/jungle/large_bush, /turf/open/floor/plating/ground/dirtgrassborder2/corner{ @@ -463,20 +438,11 @@ }, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/south_east) -"bW" = ( -/turf/open/floor/tile/blue/whitebluecorner{ - dir = 1 - }, -/area/campaign/jungle_outpost/outpost/medbay) "bX" = ( /turf/open/floor/tile/neutral{ dir = 8 }, /area/campaign/jungle_outpost/outpost/living) -"bY" = ( -/obj/machinery/door/airlock/mainship/medical/free_access, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay/lobby) "bZ" = ( /obj/structure/stairs/seamless{ dir = 1 @@ -491,11 +457,6 @@ dir = 8 }, /area/campaign/jungle_outpost/outpost/medbay/chemistry) -"cc" = ( -/obj/structure/rack, -/obj/effect/spawner/random/engineering/tool, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "cd" = ( /turf/open/floor/wood/alt_four, /area/campaign/jungle_outpost/outpost/command/captain) @@ -524,10 +485,6 @@ }, /turf/open/liquid/water/river/autosmooth/deep, /area/campaign/jungle_outpost/ground/river/north) -"ci" = ( -/obj/machinery/door/airlock/multi_tile/mainship/engineering, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "cj" = ( /obj/structure/rock/variable/jungle/big, /turf/open/ground/grass/weedable, @@ -572,12 +529,6 @@ }, /turf/open/floor/wood, /area/campaign/jungle_outpost/outpost/command) -"cs" = ( -/obj/structure/platform{ - dir = 8 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/medbay/lobby) "ct" = ( /turf/open/floor/plating/ground/dirtgrassborder2, /area/campaign/jungle_outpost/ground/jungle/west) @@ -601,12 +552,6 @@ /obj/structure/flora/jungle/grass/thin, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, /area/campaign/jungle_outpost/ground/jungle/west) -"cz" = ( -/obj/structure/bed/chair/sofa/left{ - dir = 1 - }, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) "cA" = ( /obj/structure/closet/wardrobe/toxins_white, /obj/machinery/light{ @@ -620,27 +565,6 @@ /obj/structure/flora/grass/tallgrass/autosmooth, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, /area/campaign/jungle_outpost/ground/jungle/north) -"cH" = ( -/obj/structure/platform{ - dir = 4 - }, -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) -"cJ" = ( -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) -"cK" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/glass/beaker/cryoxadone, -/turf/open/floor/tile/blue/whiteblue{ - dir = 8 - }, -/area/campaign/jungle_outpost/outpost/medbay) -"cM" = ( -/obj/structure/rack, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "cN" = ( /obj/structure/closet/secure_closet/shiptech, /turf/open/floor/tile/brown{ @@ -717,10 +641,6 @@ /obj/machinery/vending/snack, /turf/open/floor/tile/green/greentaupe, /area/campaign/jungle_outpost/outpost/living) -"de" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) "df" = ( /obj/structure/cable, /turf/open/floor/tile/purple/whitepurple{ @@ -740,22 +660,12 @@ }, /turf/closed/wall, /area/campaign/jungle_outpost/outpost/living) -"dj" = ( -/obj/structure/morgue{ - dir = 8 - }, -/turf/open/floor/mainship/mono, -/area/campaign/jungle_outpost/outpost/medbay) "dk" = ( /obj/structure/closet/secure_closet/guncabinet/nt_lab, /turf/open/floor/tile/red/redtaupe{ dir = 9 }, /area/campaign/jungle_outpost/outpost/security) -"dl" = ( -/obj/effect/spawner/random/misc/structure/supplycrate/normalweighted, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) "dm" = ( /turf/open/floor/plating, /area/campaign/jungle_outpost/ground/jungle/west) @@ -773,12 +683,6 @@ dir = 4 }, /area/campaign/jungle_outpost/outpost/medbay/chemistry) -"dq" = ( -/obj/structure/cargo_container/red{ - dir = 1 - }, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "dr" = ( /obj/structure/bed/chair/sofa/right, /turf/open/floor/wood, @@ -789,21 +693,6 @@ dir = 8 }, /area/campaign/jungle_outpost/outpost/req) -"du" = ( -/obj/structure/bed/roller, -/turf/open/floor/tile/blue/whiteblue, -/area/campaign/jungle_outpost/outpost/medbay) -"dv" = ( -/obj/structure/table/reinforced, -/obj/effect/spawner/random/engineering/engibelt, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) -"dw" = ( -/obj/structure/platform{ - dir = 1 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/outer/west) "dx" = ( /obj/structure/flora/jungle/large_bush, /turf/open/floor/plating/ground/dirtgrassborder2{ @@ -833,12 +722,6 @@ /obj/structure/extinguisher_cabinet/mini, /turf/open/floor/plating/ground/concrete, /area/campaign/jungle_outpost/outpost/req/depot) -"dD" = ( -/obj/structure/cable, -/turf/open/floor/tile/blue/whiteblue{ - dir = 1 - }, -/area/campaign/jungle_outpost/outpost/medbay) "dF" = ( /obj/effect/spawner/random/engineering/structure/atmospherics_portable, /turf/open/floor/tile/purple/whitepurple{ @@ -862,17 +745,6 @@ dir = 5 }, /area/campaign/jungle_outpost/outpost/science/south) -"dJ" = ( -/obj/effect/turf_decal/grassdecal/corner2{ - dir = 1 - }, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) -"dK" = ( -/turf/open/floor/tile/blue/whiteblue{ - dir = 4 - }, -/area/campaign/jungle_outpost/outpost/medbay) "dL" = ( /turf/open/ground/coast{ dir = 5 @@ -890,13 +762,6 @@ /obj/machinery/door/airlock/mainship/research/glass, /turf/open/floor/tile/dark/gray, /area/campaign/jungle_outpost/outpost/science) -"dO" = ( -/obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, -/obj/structure/platform{ - dir = 8 - }, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "dP" = ( /obj/structure/table/reinforced, /obj/effect/spawner/random/engineering/powercell, @@ -934,17 +799,6 @@ /obj/structure/flora/tree/jungle/small, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle) -"dX" = ( -/turf/open/floor/tile/blue/whiteblue{ - dir = 1 - }, -/area/campaign/jungle_outpost/outpost/medbay) -"dY" = ( -/obj/structure/platform{ - dir = 10 - }, -/turf/closed/wall/r_wall, -/area/campaign/jungle_outpost/outpost/engineering) "ea" = ( /obj/structure/flora/jungle/grass/thin, /turf/open/ground/grass/weedable, @@ -953,16 +807,6 @@ /obj/structure/rock/variable/jungle, /turf/open/floor/plating/ground/dirtgrassborder2/autosmooth, /area/campaign/jungle_outpost/ground/jungle/south_east) -"ee" = ( -/obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) -"ef" = ( -/obj/structure/cable, -/turf/open/floor/tile/blue/whitebluecorner{ - dir = 4 - }, -/area/campaign/jungle_outpost/outpost/medbay) "eg" = ( /obj/structure/bed/bunkbed, /turf/open/floor/tile/green/greentaupe{ @@ -981,10 +825,6 @@ }, /turf/open/floor/plating/ground/dirtgrassborder2, /area/campaign/jungle_outpost/ground/jungle/north) -"ej" = ( -/obj/effect/spawner/random/engineering/tool, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) "el" = ( /turf/open/floor/tile/dark/gray, /area/campaign/jungle_outpost/outpost/req/qm) @@ -1007,27 +847,9 @@ }, /turf/open/floor/freezer, /area/campaign/jungle_outpost/outpost/living/bathroom) -"eq" = ( -/obj/structure/platform{ - dir = 9 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/medbay) "er" = ( /turf/open/floor/plating/ground/dirtgrassborder2/autosmooth, /area/campaign/jungle_outpost/ground/jungle/south) -"es" = ( -/obj/structure/platform, -/turf/closed/wall/r_wall, -/area/campaign/jungle_outpost/outpost/engineering) -"et" = ( -/obj/structure/platform, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/living/hydro) -"eu" = ( -/obj/item/trash/raisins, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) "ev" = ( /obj/structure/platform{ dir = 4 @@ -1092,13 +914,6 @@ }, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/east) -"eK" = ( -/obj/machinery/power/smes/buildable/empty{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "eL" = ( /obj/structure/flora/jungle/bush, /turf/open/ground/grass/weedable, @@ -1112,10 +927,6 @@ dir = 6 }, /area/campaign/jungle_outpost/outpost/req/depot) -"eO" = ( -/obj/structure/reagent_dispensers/fueltank/barrel, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "eP" = ( /obj/machinery/light{ dir = 4 @@ -1184,10 +995,6 @@ /obj/structure/flora/jungle/grass, /turf/open/liquid/water/river, /area/campaign/jungle_outpost/ground/jungle/east) -"fc" = ( -/obj/machinery/door/airlock/mainship/medical/free_access, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) "fd" = ( /obj/structure/table/woodentable, /obj/item/tool/lighter/zippo, @@ -1211,10 +1018,6 @@ dir = 4 }, /area/campaign/jungle_outpost/ground/jungle/south_east) -"fi" = ( -/obj/effect/spawner/random/misc/structure/closet/electrical, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "fj" = ( /obj/structure/catwalk, /obj/structure/platform{ @@ -1228,13 +1031,6 @@ "fl" = ( /turf/open/floor, /area/campaign/jungle_outpost/ground/jungle) -"fo" = ( -/obj/structure/rack, -/obj/effect/spawner/random/engineering/tool, -/obj/effect/spawner/random/engineering/tool, -/obj/machinery/vending/nanomed, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "fp" = ( /obj/structure/girder/displaced, /turf/open/floor/plating, @@ -1255,13 +1051,6 @@ /obj/effect/turf_decal/riverdecal, /turf/open/liquid/water/river/autosmooth/deep, /area/campaign/jungle_outpost/ground/river/west) -"ft" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "fu" = ( /obj/structure/bed/chair/sofa/corsat/right, /turf/open/floor/tile/blue/taupeblue{ @@ -1279,10 +1068,6 @@ dir = 4 }, /area/campaign/jungle_outpost/outpost/living) -"fy" = ( -/obj/machinery/hydroponics, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "fz" = ( /obj/structure/table/mainship, /obj/effect/spawner/random/food_or_drink/burger, @@ -1309,6 +1094,12 @@ /obj/structure/prop/mainship/research/destructive_analyzer, /turf/open/floor/tile/white, /area/campaign/jungle_outpost/outpost/science) +"fE" = ( +/obj/effect/landmark/campaign_structure/howitzer_objective{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirt2, +/area/campaign/jungle_outpost/ground/jungle/south_west) "fF" = ( /obj/structure/flora/tree/jungle, /turf/open/ground/grass/weedable, @@ -1328,9 +1119,6 @@ }, /turf/open/floor/tile/dark/gray, /area/campaign/jungle_outpost/outpost/req) -"fJ" = ( -/turf/open/floor/tile/blue/whiteblue, -/area/campaign/jungle_outpost/outpost/medbay/lobby) "fK" = ( /obj/structure/rack, /obj/item/weapon/shield/riot, @@ -1351,10 +1139,6 @@ /obj/effect/landmark/campaign_structure/howitzer_objective, /turf/open/floor, /area/campaign/jungle_outpost/outpost/landing/storage) -"fN" = ( -/obj/machinery/vending/hydroseeds, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "fQ" = ( /turf/open/floor/plating/ground/dirtgrassborder2/corner2{ dir = 4 @@ -1364,12 +1148,6 @@ /obj/structure/flora/tree/jungle/small, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, /area/campaign/jungle_outpost/ground/jungle/west) -"fS" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "fT" = ( /obj/structure/filingcabinet, /obj/machinery/light, @@ -1392,14 +1170,19 @@ dir = 1 }, /area/campaign/jungle_outpost/outpost/command) -"fW" = ( -/obj/structure/closet/secure_closet/engineering_personal, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "fX" = ( /obj/machinery/door/airlock/mainship/command/free_access, /turf/open/floor, /area/campaign/jungle_outpost/outpost/command) +"fY" = ( +/obj/structure/platform{ + dir = 4 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 4 + }, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/landing/storage) "fZ" = ( /obj/machinery/light{ dir = 1 @@ -1520,19 +1303,6 @@ dir = 8 }, /area/campaign/jungle_outpost/outpost/landing) -"gv" = ( -/obj/structure/table, -/obj/item/clothing/suit/apron, -/obj/item/clothing/gloves/botanic_leather, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) -"gw" = ( -/obj/structure/stairs/seamless/edge, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "gy" = ( /turf/open/floor/tile/green/greentaupe, /area/campaign/jungle_outpost/outpost/living) @@ -1555,26 +1325,12 @@ /obj/structure/closet/crate/secure/nanotrasen, /turf/open/floor/tile/purple/whitepurple, /area/campaign/jungle_outpost/outpost/science/south) -"gD" = ( -/obj/machinery/door/airlock/mainship/engineering/free_access{ - name = "\improper Engineering Dome" - }, -/obj/structure/cable, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "gE" = ( /obj/structure/bed/chair/office/dark{ dir = 8 }, /turf/open/floor/tile/white, /area/campaign/jungle_outpost/outpost/medbay/chemistry) -"gF" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/obj/structure/platform{ - dir = 6 - }, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "gG" = ( /obj/machinery/light, /turf/open/floor/tile/red/redtaupe{ @@ -1600,11 +1356,6 @@ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle) -"gL" = ( -/obj/item/reagent_containers/glass/bucket, -/obj/structure/table, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "gM" = ( /obj/structure/rock/variable/jungle, /turf/open/ground/grass/beach{ @@ -1637,12 +1388,6 @@ /obj/item/reagent_containers/food/drinks/bottle/gin, /turf/open/floor/wood, /area/campaign/jungle_outpost/outpost/command) -"gT" = ( -/obj/structure/platform{ - dir = 4 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/medbay) "gU" = ( /obj/machinery/light{ dir = 1 @@ -1677,13 +1422,6 @@ dir = 6 }, /area/campaign/jungle_outpost/outpost/command) -"hb" = ( -/obj/structure/stairs/seamless/edge{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "hc" = ( /obj/effect/spawner/random/misc/structure/supplycrate/normalweighted, /turf/open/floor/tile/purple/whitepurple{ @@ -1733,33 +1471,12 @@ dir = 4 }, /area/campaign/jungle_outpost/ground/jungle/east) -"hl" = ( -/obj/structure/platform{ - dir = 10 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/living/hydro) -"hm" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "hn" = ( /obj/structure/stairs/seamless/edge_vert{ dir = 4 }, /turf/open/floor/plating/ground/dirtgrassborder2, /area/campaign/jungle_outpost/ground/jungle) -"ho" = ( -/obj/machinery/vending/snack, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) -"hp" = ( -/turf/open/floor/tile/blue/whiteblue{ - dir = 10 - }, -/area/campaign/jungle_outpost/outpost/medbay) "hq" = ( /obj/structure/closet/firecloset, /turf/open/floor/tile/purple/whitepurple{ @@ -1825,12 +1542,6 @@ dir = 1 }, /area/campaign/jungle_outpost/outpost/command) -"hF" = ( -/obj/structure/cargo_container/ch_green{ - dir = 1 - }, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "hH" = ( /obj/structure/coatrack, /turf/open/floor/wood, @@ -1851,15 +1562,6 @@ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle/south_east) -"hN" = ( -/obj/structure/sign/greencross{ - dir = 1 - }, -/obj/structure/platform_decoration{ - dir = 9 - }, -/turf/open/ground/grass/weedable, -/area/campaign/jungle_outpost/ground/jungle) "hO" = ( /obj/machinery/door/airlock/multi_tile/mainship/secdoor{ dir = 1 @@ -1931,13 +1633,6 @@ "ib" = ( /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, /area/campaign/jungle_outpost/ground/jungle/north) -"ic" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/obj/structure/platform{ - dir = 8 - }, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay/lobby) "id" = ( /obj/structure/catwalk, /obj/structure/platform{ @@ -1947,13 +1642,6 @@ dir = 4 }, /area/campaign/jungle_outpost/ground/jungle) -"if" = ( -/obj/structure/flora/grass/tallgrass/autosmooth, -/obj/effect/landmark/mob_spawner/farwa, -/turf/open/floor/plating/ground/dirtgrassborder2{ - dir = 4 - }, -/area/campaign/jungle_outpost/ground/jungle) "ig" = ( /obj/structure/flora/grass/tallgrass/autosmooth, /turf/open/floor/plating/ground/dirtgrassborder2/corner{ @@ -1970,9 +1658,6 @@ /obj/structure/flora/grass/tallgrass/autosmooth, /turf/open/floor/plating/ground/dirtgrassborder2/corner, /area/campaign/jungle_outpost/ground/jungle) -"ij" = ( -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/living/hydro) "il" = ( /obj/structure/flora/jungle/grass/thin, /turf/open/ground/grass/weedable, @@ -1982,20 +1667,6 @@ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle) -"in" = ( -/obj/structure/closet/crate/hydroponics, -/obj/item/tool/plantspray/pests, -/obj/item/tool/plantspray/pests/old/carbaryl, -/obj/item/tool/shovel, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) -"io" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/obj/structure/platform{ - dir = 4 - }, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "ip" = ( /obj/structure/table/reinforced, /obj/item/paper, @@ -2048,6 +1719,12 @@ dir = 5 }, /area/campaign/jungle_outpost/outpost/command) +"iB" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 8 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/south_west) "iC" = ( /obj/machinery/light{ dir = 8 @@ -2074,9 +1751,6 @@ "iG" = ( /turf/open/floor/plating/dmg3, /area/campaign/jungle_outpost/ground/jungle/west) -"iH" = ( -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "iL" = ( /obj/structure/flora/grass/tallgrass/autosmooth, /turf/open/ground/grass/beach, @@ -2087,17 +1761,6 @@ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle/south_east) -"iN" = ( -/obj/structure/bookcase, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) -"iO" = ( -/obj/structure/stairs/seamless, -/turf/open/floor/plating/ground/dirtgrassborder2, -/area/campaign/jungle_outpost/ground/jungle) "iP" = ( /turf/open/floor/iron/smooth, /area/campaign/jungle_outpost/ground/river/west) @@ -2105,28 +1768,6 @@ /obj/structure/kitchenspike, /turf/open/floor/freezer, /area/campaign/jungle_outpost/outpost/living/kitchen) -"iS" = ( -/obj/structure/largecrate/random/barrel/yellow, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) -"iT" = ( -/obj/structure/table/reinforced, -/obj/item/paper, -/obj/effect/spawner/random/medical/pillbottle, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) -"iU" = ( -/obj/structure/bed/roller, -/turf/open/floor/tile/blue/whiteblue{ - dir = 6 - }, -/area/campaign/jungle_outpost/outpost/medbay) -"iV" = ( -/obj/structure/platform_decoration{ - dir = 10 - }, -/turf/open/ground/grass/weedable, -/area/campaign/jungle_outpost/ground/jungle/west) "iW" = ( /turf/open/floor/tile/blue/taupebluecorner{ dir = 4 @@ -2282,13 +1923,6 @@ dir = 4 }, /area/campaign/jungle_outpost/ground/jungle) -"jL" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/obj/structure/platform{ - dir = 8 - }, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) "jM" = ( /obj/structure/bed/bunkbed, /turf/open/floor/tile/green/greentaupe{ @@ -2315,12 +1949,6 @@ /obj/structure/flora/jungle/large_bush, /turf/open/floor/plating/ground/dirtgrassborder2/corner, /area/campaign/jungle_outpost/ground/jungle/west) -"jS" = ( -/obj/structure/flora/grass/tallgrass/autosmooth, -/turf/open/floor/plating/ground/dirtgrassborder2{ - dir = 4 - }, -/area/campaign/jungle_outpost/ground/jungle) "jT" = ( /obj/structure/rock/variable/jungle/big, /turf/open/ground/grass/beach/corner{ @@ -2366,6 +1994,14 @@ }, /turf/open/floor/plating/ground/concrete, /area/campaign/jungle_outpost/outpost/req/depot) +"kc" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) "kd" = ( /obj/structure/table/reinforced, /obj/effect/spawner/random/engineering/powercell, @@ -2379,14 +2015,6 @@ }, /turf/open/floor, /area/campaign/jungle_outpost/outpost/security) -"kf" = ( -/turf/open/floor/tile/blue/whiteblue{ - dir = 9 - }, -/area/campaign/jungle_outpost/outpost/medbay) -"kg" = ( -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/engineering) "kh" = ( /obj/structure/flora/tree/jungle/small, /obj/structure/flora/jungle/grass/thin, @@ -2445,10 +2073,6 @@ dir = 4 }, /area/campaign/jungle_outpost/ground/jungle) -"kv" = ( -/obj/machinery/botany/extractor, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "kw" = ( /obj/machinery/door/airlock/mainship/security, /turf/open/floor, @@ -2475,6 +2099,12 @@ dir = 6 }, /area/campaign/jungle_outpost/outpost/security) +"kA" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/landing) "kB" = ( /obj/item/trash/cigbutt, /obj/item/trash/cigbutt, @@ -2545,12 +2175,6 @@ /obj/structure/stairs/seamless/edge, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle) -"kS" = ( -/obj/structure/platform{ - dir = 9 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/outer/west) "kT" = ( /obj/structure/catwalk, /obj/structure/platform, @@ -2582,20 +2206,6 @@ /obj/structure/flora/jungle/bush, /turf/open/ground/grass/beach, /area/campaign/jungle_outpost/ground/jungle/north_east) -"la" = ( -/obj/structure/bookcase, -/obj/item/book/manual/engineering_singularity_safety, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) -"lb" = ( -/obj/structure/table, -/obj/structure/flora/pottedplant/two, -/obj/machinery/power/apc/drained, -/obj/structure/cable, -/turf/open/floor/tile/blue/whiteblue{ - dir = 5 - }, -/area/campaign/jungle_outpost/outpost/medbay/lobby) "lc" = ( /obj/structure/platform{ dir = 4 @@ -2660,12 +2270,6 @@ /obj/effect/spawner/random/medical/pillbottle, /turf/open/floor/wood/alt_seven, /area/campaign/jungle_outpost/outpost/science/office) -"ln" = ( -/obj/machinery/door/airlock/multi_tile/mainship/generic{ - dir = 1 - }, -/turf/open/floor/tile/blue/whiteblue, -/area/campaign/jungle_outpost/outpost/medbay) "lp" = ( /obj/structure/flora/tree/jungle, /obj/structure/flora/jungle/grass/thin, @@ -2702,12 +2306,6 @@ /obj/structure/catwalk, /turf/open/liquid/water/river/autosmooth, /area/campaign/jungle_outpost/ground/river/north) -"lx" = ( -/obj/structure/cargo_container{ - dir = 4 - }, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "ly" = ( /obj/structure/bed/chair/office/dark{ dir = 4 @@ -2771,9 +2369,6 @@ "lH" = ( /turf/open/floor/tile/dark/gray, /area/campaign/jungle_outpost/outpost/living/canteen) -"lI" = ( -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/outer/west) "lJ" = ( /obj/structure/flora/jungle/large_bush, /turf/open/floor/plating/ground/dirtgrassborder2/autosmooth, @@ -2814,13 +2409,6 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/campaign/jungle_outpost/outpost/command/captain) -"lT" = ( -/obj/structure/table, -/obj/item/storage/firstaid/adv, -/turf/open/floor/tile/blue/whiteblue{ - dir = 4 - }, -/area/campaign/jungle_outpost/outpost/medbay) "lU" = ( /turf/open/floor/plating/ground/dirtgrassborder2/corner, /area/campaign/jungle_outpost/ground/jungle/west) @@ -2833,14 +2421,6 @@ "lW" = ( /turf/open/floor/plating/ground/dirtgrassborder2/corner2, /area/campaign/jungle_outpost/ground/jungle/north_west) -"lX" = ( -/obj/structure/platform_decoration{ - dir = 6 - }, -/turf/open/floor/plating/ground/dirtgrassborder2{ - dir = 8 - }, -/area/campaign/jungle_outpost/ground/jungle/east) "lY" = ( /obj/structure/stairs/seamless/edge{ dir = 8 @@ -2860,15 +2440,16 @@ /obj/structure/flora/jungle/grass/thin, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/north_east) -"mb" = ( -/obj/structure/table/reinforced, -/obj/effect/spawner/random/misc/folder/nooffset, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "mc" = ( /obj/structure/flora/jungle/grass, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/north_west) +"md" = ( +/obj/effect/landmark/campaign_structure/howitzer_objective{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle) "me" = ( /obj/structure/rock/variable/jungle_large, /turf/open/liquid/water/river/autosmooth, @@ -2901,13 +2482,6 @@ dir = 8 }, /area/campaign/jungle_outpost/ground/jungle) -"mn" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/obj/structure/platform{ - dir = 1 - }, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) "mo" = ( /obj/effect/spawner/random/engineering/tool, /turf/open/floor, @@ -2918,12 +2492,6 @@ }, /turf/closed/wall/r_wall, /area/campaign/jungle_outpost/outpost/science) -"mq" = ( -/obj/structure/cargo_container/horizontal{ - dir = 2 - }, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "ms" = ( /obj/structure/platform{ dir = 4 @@ -2955,14 +2523,6 @@ /obj/structure/closet/wardrobe/robotics_black, /turf/open/floor/tile/purple/whitepurple, /area/campaign/jungle_outpost/outpost/science) -"mA" = ( -/obj/structure/cargo_container/ch_green, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) -"mB" = ( -/obj/effect/spawner/random/misc/structure/closet/welding, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "mC" = ( /obj/effect/landmark/campaign_structure/phoron_crate, /turf/open/floor/plating/ground/concrete, @@ -2976,10 +2536,6 @@ }, /turf/open/floor, /area/campaign/jungle_outpost/outpost/command) -"mG" = ( -/obj/effect/spawner/random/engineering/structure/tank/fuelweighted, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) "mH" = ( /obj/structure/flora/jungle/large_bush, /turf/open/ground/grass/beach/corner2{ @@ -3001,6 +2557,15 @@ /obj/structure/platform, /turf/closed/wall, /area/campaign/jungle_outpost/outpost/medbay/chemistry) +"mM" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 4 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/corner2, +/area/campaign/jungle_outpost/ground/jungle) "mO" = ( /obj/structure/flora/jungle/bush, /turf/open/floor/plating/ground/dirtgrassborder2/corner{ @@ -3013,14 +2578,6 @@ }, /turf/open/floor, /area/campaign/jungle_outpost/outpost/landing/storage) -"mQ" = ( -/obj/effect/landmark/campaign_structure/phoron_crate, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) -"mS" = ( -/obj/structure/closet/secure_closet/hydroponics, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "mT" = ( /obj/structure/rock/variable/jungle, /turf/open/ground/grass/weedable, @@ -3064,12 +2621,6 @@ dir = 4 }, /area/campaign/jungle_outpost/outpost/command) -"nd" = ( -/obj/effect/turf_decal/grassdecal{ - dir = 1 - }, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "ne" = ( /turf/open/ground/coast, /area/campaign/jungle_outpost/ground/river/lake) @@ -3081,6 +2632,13 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/campaign/jungle_outpost/ground/jungle/south_east) +"nh" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 4 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags, +/turf/open/floor/plating/ground/dirt2, +/area/campaign/jungle_outpost/ground/jungle) "nj" = ( /obj/structure/catwalk, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, @@ -3094,10 +2652,6 @@ dir = 9 }, /area/campaign/jungle_outpost/outpost/security) -"nn" = ( -/obj/structure/bed/stool, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "no" = ( /obj/structure/closet/l3closet/security, /obj/machinery/light{ @@ -3107,12 +2661,6 @@ dir = 5 }, /area/campaign/jungle_outpost/outpost/security) -"nq" = ( -/obj/machinery/iv_drip, -/turf/open/floor/tile/blue/whiteblue{ - dir = 4 - }, -/area/campaign/jungle_outpost/outpost/medbay) "nr" = ( /obj/structure/stairs/seamless/edge_vert, /turf/open/floor/plating/ground/dirtgrassborder2{ @@ -3180,33 +2728,17 @@ }, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle) -"nH" = ( -/obj/structure/table/mainship, -/obj/item/clothing/suit/chef/classic, -/obj/item/clothing/head/chefhat, -/obj/item/clothing/gloves/latex, -/turf/open/floor/tile/barber, -/area/campaign/jungle_outpost/outpost/living/kitchen) "nI" = ( /turf/closed/gm/dense, /area/campaign/jungle_outpost/ground/jungle/south) -"nJ" = ( -/turf/open/floor/tile/blue/whiteblue{ - dir = 6 - }, -/area/campaign/jungle_outpost/outpost/medbay) -"nK" = ( -/obj/structure/cargo_container{ +"nL" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags{ dir = 1 }, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) -"nM" = ( -/obj/structure/bed/chair/office/light{ - dir = 4 +/turf/open/ground/grass/beach/corner{ + dir = 1 }, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay/lobby) +/area/campaign/jungle_outpost/ground/jungle) "nN" = ( /obj/structure/rack, /obj/item/clothing/suit/armor/bulletproof, @@ -3256,11 +2788,6 @@ }, /turf/open/floor, /area/campaign/jungle_outpost/outpost/landing/storage) -"nX" = ( -/obj/structure/table/reinforced, -/obj/effect/spawner/random/misc/earmuffs, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "nY" = ( /obj/machinery/door/airlock/glass_engineering, /turf/open/floor/tile/dark/gray, @@ -3290,19 +2817,10 @@ /obj/effect/spawner/random/misc/folder, /turf/open/floor/carpet, /area/campaign/jungle_outpost/outpost/command/captain) -"oe" = ( -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) "of" = ( /obj/structure/mine_structure/wooden/support_wall/beams, /turf/open/floor/plating/ground/dirt, /area/campaign/jungle_outpost/ground/jungle/south_east) -"og" = ( -/obj/machinery/vending/medical, -/turf/open/floor/tile/blue/whiteblue{ - dir = 8 - }, -/area/campaign/jungle_outpost/outpost/medbay) "oh" = ( /obj/effect/landmark/mob_spawner/farwa, /turf/open/ground/grass/weedable, @@ -3332,14 +2850,6 @@ dir = 8 }, /area/campaign/jungle_outpost/outpost/living) -"os" = ( -/obj/structure/table, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) -"ot" = ( -/obj/structure/cable, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "ou" = ( /obj/structure/platform, /obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, @@ -3401,12 +2911,6 @@ /obj/structure/prop/mainship/telecomms/processor, /turf/open/floor/tile/dark, /area/campaign/jungle_outpost/outpost/command) -"oH" = ( -/obj/structure/flora/jungle/grass, -/turf/open/floor/plating/ground/dirtgrassborder2{ - dir = 1 - }, -/area/campaign/jungle_outpost/ground/jungle/east) "oI" = ( /obj/structure/flora/grass/tallgrass/autosmooth, /turf/open/floor/plating/ground/dirtgrassborder2, @@ -3515,10 +3019,6 @@ "pc" = ( /turf/open/floor/plating/ground/dirt, /area/campaign/jungle_outpost/ground/jungle/south_east) -"pd" = ( -/obj/structure/table/reinforced, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) "pe" = ( /obj/machinery/light{ dir = 1 @@ -3552,32 +3052,24 @@ dir = 4 }, /area/campaign/jungle_outpost/outpost/req/qm) -"pn" = ( -/obj/structure/cargo_container/nt{ +"po" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 4 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags{ dir = 1 }, -/obj/structure/cable, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) +/turf/open/floor/plating/ground/concrete/lines{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/landing) "pp" = ( /obj/structure/flora/grass/tallgrass/autosmooth, /turf/open/ground/grass/beach/corner2, /area/campaign/jungle_outpost/ground/jungle/north_east) -"pq" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/obj/structure/platform{ - dir = 1 - }, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "pr" = ( /turf/closed/wall, /area/campaign/jungle_outpost/outpost/req/depot) -"pt" = ( -/obj/effect/turf_decal/grassdecal, -/obj/structure/flora/jungle/grass/thin, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "pu" = ( /obj/structure/table/reinforced, /turf/open/floor/tile/red/redtaupe{ @@ -3601,20 +3093,17 @@ /obj/structure/flora/jungle/grass/thin, /turf/open/ground/grass/beach, /area/campaign/jungle_outpost/ground/jungle/north_east) +"py" = ( +/obj/structure/flora/jungle/grass/thin, +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 1 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) "pA" = ( /obj/structure/rock/variable/jungle, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, /area/campaign/jungle_outpost/ground/jungle) -"pB" = ( -/obj/machinery/vending/engineering, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) -"pD" = ( -/obj/structure/platform{ - dir = 6 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/medbay) "pF" = ( /obj/structure/prop/mainship/protolathe/sci, /turf/open/floor/tile/purple/whitepurple{ @@ -3647,12 +3136,6 @@ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle/south_west) -"pN" = ( -/obj/structure/bookcase, -/obj/item/book/manual/atmospipes, -/obj/machinery/light, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "pP" = ( /obj/structure/platform{ dir = 10 @@ -3748,16 +3231,6 @@ }, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, /area/campaign/jungle_outpost/ground/jungle/north) -"qn" = ( -/obj/structure/table, -/obj/item/tool/hatchet{ - pixel_x = 6; - pixel_y = 4 - }, -/obj/item/tool/analyzer/plant_analyzer, -/obj/effect/spawner/random/weaponry/melee, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "qo" = ( /obj/structure/flora/jungle/bush, /obj/structure/platform_decoration{ @@ -3816,22 +3289,9 @@ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle/east) -"qA" = ( -/obj/structure/bed/chair/sofa/right, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) "qC" = ( /turf/open/liquid/water, /area/campaign/jungle_outpost/ground/jungle/north) -"qD" = ( -/obj/structure/cargo_container/red, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) -"qE" = ( -/obj/structure/cargo_container/nt, -/obj/structure/cable, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "qF" = ( /obj/machinery/microwave, /obj/structure/table/mainship, @@ -3854,17 +3314,6 @@ dir = 4 }, /area/campaign/jungle_outpost/outpost/science) -"qI" = ( -/obj/item/reagent_containers/glass/bucket, -/obj/machinery/vending/hydroseeds, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) -"qK" = ( -/obj/machinery/vending/medical, -/turf/open/floor/tile/blue/whiteblue{ - dir = 10 - }, -/area/campaign/jungle_outpost/outpost/medbay) "qL" = ( /obj/structure/flora/jungle/grass/thin, /turf/open/floor/plating/ground/dirtgrassborder2/corner, @@ -3895,11 +3344,6 @@ }, /turf/open/floor/tile/red/full, /area/campaign/jungle_outpost/outpost/security/vault) -"qS" = ( -/obj/structure/rack, -/obj/effect/spawner/random/engineering/structure/handheld_lighting, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "qT" = ( /obj/structure/platform, /obj/structure/window/framed/colony/reinforced, @@ -3914,10 +3358,6 @@ dir = 8 }, /area/campaign/jungle_outpost/ground/jungle) -"qV" = ( -/obj/machinery/computer/body_scanconsole, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) "qW" = ( /obj/structure/table/reinforced, /obj/machinery/light, @@ -3945,21 +3385,6 @@ dir = 1 }, /area/campaign/jungle_outpost/outpost/command) -"rd" = ( -/obj/effect/turf_decal/grassdecal{ - dir = 1 - }, -/obj/structure/flora/jungle/grass/thin, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) -"re" = ( -/obj/structure/closet/crate/hydroponics, -/obj/item/tool/plantspray/pests, -/obj/item/tool/plantspray/pests/old/lindane, -/obj/item/tool/scythe, -/obj/item/tool/shovel/spade, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "rf" = ( /obj/structure/platform{ dir = 6 @@ -4031,13 +3456,6 @@ /obj/effect/spawner/random/food_or_drink/kitchenknife, /turf/open/floor/tile/barber, /area/campaign/jungle_outpost/outpost/living/kitchen) -"rr" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/obj/structure/platform{ - dir = 5 - }, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "rs" = ( /obj/structure/bed/chair/sofa/left{ dir = 1 @@ -4074,10 +3492,6 @@ dir = 1 }, /area/campaign/jungle_outpost/outpost/science/south) -"ry" = ( -/obj/structure/cable, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "rz" = ( /obj/structure/platform{ dir = 5 @@ -4109,6 +3523,11 @@ /obj/machinery/light, /turf/open/floor/tile/blue/taupeblue, /area/campaign/jungle_outpost/outpost/command) +"rF" = ( +/obj/structure/platform, +/obj/effect/landmark/campaign_structure/barricade/sandbags, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/landing/storage) "rG" = ( /obj/structure/flora/jungle/grass/thin, /turf/open/floor/plating/ground/dirtgrassborder2{ @@ -4151,13 +3570,6 @@ dir = 1 }, /area/campaign/jungle_outpost/outpost/command) -"rN" = ( -/obj/effect/decal/cleanable/blood/writing{ - dir = 4 - }, -/obj/machinery/door/airlock/mainship/medical/free_access, -/turf/open/floor/mainship/mono, -/area/campaign/jungle_outpost/outpost/medbay) "rO" = ( /obj/structure/flora/jungle/large_bush, /turf/open/ground/grass/beach{ @@ -4168,21 +3580,6 @@ /obj/machinery/door/airlock/glass, /turf/open/floor, /area/campaign/jungle_outpost/outpost/living) -"rQ" = ( -/obj/structure/stairs/seamless/edge_vert, -/turf/open/floor/plating/ground/dirtgrassborder2{ - dir = 1 - }, -/area/campaign/jungle_outpost/ground/jungle/west) -"rR" = ( -/obj/structure/cargo_container/horizontal{ - dir = 8 - }, -/obj/structure/cargo_container/horizontal{ - dir = 2 - }, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "rS" = ( /obj/structure/platform, /turf/closed/wall, @@ -4222,18 +3619,6 @@ }, /turf/open/floor/iron/smooth, /area/campaign/jungle_outpost/ground/jungle/south) -"sc" = ( -/obj/machinery/hydroponics, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) -"sd" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/obj/structure/platform, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) "se" = ( /obj/structure/rock/variable/jungle/big, /turf/open/floor/plating/ground/dirtgrassborder2/corner2{ @@ -4275,6 +3660,10 @@ /obj/structure/flora/jungle/bush, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/south) +"sl" = ( +/obj/effect/spawner/modularmap/jungle_outpost/medbay, +/turf/open/space/basic, +/area/space) "sm" = ( /obj/structure/flora/jungle/grass, /turf/open/floor/plating/ground/dirtgrassborder2/autosmooth, @@ -4422,23 +3811,10 @@ /obj/structure/flora/tree/jungle, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, /area/campaign/jungle_outpost/ground/jungle/north) -"sP" = ( -/obj/structure/table/reinforced, -/obj/effect/spawner/random/engineering/toolbox, -/obj/effect/spawner/random/engineering/tool, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "sQ" = ( /obj/structure/safe, /turf/open/floor/wood/alt_four, /area/campaign/jungle_outpost/outpost/command/captain) -"sR" = ( -/obj/machinery/optable, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/tile/blue/whitebluefull, -/area/campaign/jungle_outpost/outpost/medbay) "sT" = ( /obj/structure/table/reinforced, /obj/structure/prop/computer/broken/sixteen, @@ -4472,10 +3848,6 @@ }, /turf/open/floor/freezer, /area/campaign/jungle_outpost/outpost/command) -"sZ" = ( -/obj/effect/landmark/campaign_structure/phoron_crate, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) "ta" = ( /obj/structure/bed/chair/comfy/beige{ dir = 4 @@ -4513,6 +3885,10 @@ /obj/machinery/washing_machine, /turf/open/floor/freezer, /area/campaign/jungle_outpost/outpost/living) +"tj" = ( +/obj/effect/spawner/modularmap/jungle_outpost/engineering, +/turf/open/space/basic, +/area/space) "tk" = ( /obj/structure/bed/chair/office/dark{ dir = 8 @@ -4540,33 +3916,16 @@ }, /turf/closed/wall, /area/campaign/jungle_outpost/outpost/living) -"tq" = ( -/obj/structure/platform{ - dir = 10 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/outer/west) "tr" = ( /turf/open/floor/plating/ground/dirtgrassborder2/corner{ dir = 4 }, /area/campaign/jungle_outpost/ground/jungle/west) -"ts" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/obj/structure/platform{ - dir = 9 - }, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "tt" = ( /obj/structure/catwalk, /obj/structure/catwalk, /turf/open/liquid/water/river/autosmooth/deep, /area/campaign/jungle_outpost/ground/river/east) -"tu" = ( -/obj/structure/platform, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/medbay) "tv" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating/ground/concrete, @@ -4583,31 +3942,28 @@ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle/north) -"ty" = ( -/obj/structure/cable, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "tz" = ( /obj/machinery/vending/dinnerware, /turf/open/floor/tile/barber, /area/campaign/jungle_outpost/outpost/living/kitchen) -"tA" = ( -/obj/structure/cable, -/turf/open/floor/tile/blue/whiteblue{ +"tB" = ( +/obj/structure/platform{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags{ dir = 1 }, -/area/campaign/jungle_outpost/outpost/medbay/lobby) +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/landing/storage) "tC" = ( /obj/structure/flora/jungle/bush, /turf/open/floor/plating/ground/dirtgrassborder2/corner{ dir = 8 }, /area/campaign/jungle_outpost/ground/jungle/east) -"tD" = ( -/turf/open/floor/tile/blue/whitebluecorner{ - dir = 2 - }, -/area/campaign/jungle_outpost/outpost/medbay) "tF" = ( /obj/effect/spawner/random/misc/structure/supplycrate, /turf/open/floor/tile/dark/gray, @@ -4636,13 +3992,6 @@ /obj/machinery/vending/coffee, /turf/open/floor/tile/neutral/full, /area/campaign/jungle_outpost/outpost/living/canteen) -"tN" = ( -/obj/structure/cargo_container/nt{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "tQ" = ( /turf/closed/wall/r_wall, /area/campaign/jungle_outpost/outpost/science) @@ -4650,10 +3999,6 @@ /obj/structure/rock/variable/jungle_large, /turf/open/floor/plating/ground/dirtgrassborder2/autosmooth, /area/campaign/jungle_outpost/ground/jungle/south) -"tS" = ( -/obj/effect/spawner/random/engineering/structure/powergenerator/superweighted, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "tT" = ( /turf/open/floor/tile/blue/taupeblue{ dir = 9 @@ -4701,14 +4046,12 @@ }, /turf/closed/wall, /area/campaign/jungle_outpost/outpost/science/south) -"uc" = ( -/obj/structure/stairs/seamless/edge_vert{ - dir = 1 - }, -/turf/open/floor/plating/ground/dirtgrassborder2{ - dir = 1 +"ue" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 4 }, -/area/campaign/jungle_outpost/ground/jungle/west) +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/landing) "uf" = ( /obj/machinery/door/airlock/mainship/generic{ dir = 1; @@ -4743,21 +4086,6 @@ }, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/north) -"um" = ( -/obj/item/staff/broom, -/obj/item/stool, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/mainship/mono, -/area/campaign/jungle_outpost/outpost/medbay) -"un" = ( -/obj/structure/table, -/obj/effect/spawner/random/medical/health_analyzer, -/turf/open/floor/tile/blue/whiteblue{ - dir = 4 - }, -/area/campaign/jungle_outpost/outpost/medbay/lobby) "uo" = ( /turf/open/ground/grass/beach{ dir = 4 @@ -4767,10 +4095,6 @@ /obj/structure/rock/variable/jungle, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/south) -"uq" = ( -/obj/effect/landmark/campaign_structure/howitzer_objective, -/turf/open/ground/grass/weedable, -/area/campaign/jungle_outpost/ground/jungle/north_west) "ur" = ( /obj/structure/table/reinforced, /obj/item/radio, @@ -4785,11 +4109,6 @@ dir = 4 }, /area/campaign/jungle_outpost/outpost/medbay/chemistry) -"ut" = ( -/turf/open/floor/tile/blue/whiteblue{ - dir = 8 - }, -/area/campaign/jungle_outpost/outpost/medbay/lobby) "uu" = ( /obj/machinery/door/airlock/mainship/generic{ dir = 2 @@ -4820,12 +4139,14 @@ }, /turf/open/floor/tile/dark/gray, /area/campaign/jungle_outpost/outpost/living) -"uC" = ( -/obj/structure/platform_decoration{ - dir = 5 +"uB" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 1 }, -/turf/open/ground/grass/weedable, -/area/campaign/jungle_outpost/ground/jungle/west) +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) "uE" = ( /obj/structure/flora/jungle/grass/thin, /turf/open/floor/plating/ground/dirtgrassborder2/corner2, @@ -4859,12 +4180,6 @@ dir = 4 }, /area/campaign/jungle_outpost/ground/jungle) -"uN" = ( -/obj/structure/bed/chair/sofa/right{ - dir = 1 - }, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) "uO" = ( /obj/structure/cable, /turf/open/floor/tile/dark/gray, @@ -4892,10 +4207,6 @@ dir = 10 }, /area/campaign/jungle_outpost/outpost/science/south) -"uU" = ( -/obj/structure/flora/jungle/grass/thin, -/turf/open/floor/plating/ground/dirtgrassborder2/corner2, -/area/campaign/jungle_outpost/ground/jungle/east) "uX" = ( /obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, /obj/structure/platform{ @@ -4917,19 +4228,10 @@ }, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/east) -"vb" = ( -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/medbay) "vc" = ( /obj/structure/rock/variable/jungle, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, /area/campaign/jungle_outpost/ground/jungle/west) -"vd" = ( -/obj/structure/platform{ - dir = 9 - }, -/turf/closed/wall/r_wall, -/area/campaign/jungle_outpost/outpost/engineering) "ve" = ( /turf/open/liquid/water/river/autosmooth, /area/campaign/jungle_outpost/ground/river/north) @@ -4958,26 +4260,6 @@ dir = 5 }, /area/campaign/jungle_outpost/outpost/command) -"vn" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/obj/structure/platform{ - dir = 1 - }, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) -"vo" = ( -/obj/effect/landmark/campaign_structure/asat_system, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) -"vq" = ( -/obj/structure/table/reinforced, -/obj/item/healthanalyzer, -/obj/item/healthanalyzer, -/obj/item/clothing/glasses/hud/health, -/turf/open/floor/tile/blue/whiteblue{ - dir = 4 - }, -/area/campaign/jungle_outpost/outpost/medbay) "vr" = ( /obj/structure/flora/grass/tallgrass/autosmooth, /obj/structure/flora/grass/tallgrass/autosmooth, @@ -4997,10 +4279,6 @@ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle) -"vv" = ( -/obj/machinery/bioprinter, -/turf/open/floor/tile/blue/whitebluefull, -/area/campaign/jungle_outpost/outpost/medbay) "vw" = ( /obj/structure/table/reinforced, /obj/item/clipboard, @@ -5008,12 +4286,6 @@ /obj/item/paper, /turf/open/floor/tile/blue/taupeblue, /area/campaign/jungle_outpost/outpost/command) -"vx" = ( -/obj/structure/sink{ - dir = 8 - }, -/turf/open/floor/tile/blue/whitebluefull, -/area/campaign/jungle_outpost/outpost/medbay) "vy" = ( /turf/open/floor/plating/ground/dirtgrassborder2/autosmooth, /area/campaign/jungle_outpost/ground/jungle/south_east) @@ -5026,15 +4298,16 @@ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle) -"vA" = ( -/obj/effect/spawner/random/misc/structure/closet/welding, -/obj/machinery/light, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "vB" = ( /obj/structure/platform{ dir = 9 }, +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 1 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 8 + }, /turf/open/floor, /area/campaign/jungle_outpost/outpost/landing/storage) "vE" = ( @@ -5067,12 +4340,6 @@ /obj/item/reagent_containers/food/snacks/carpmeat, /turf/open/floor/wood/variable/wide, /area/campaign/jungle_outpost/outpost/outer/hermit) -"vL" = ( -/obj/structure/platform{ - dir = 5 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/living/hydro) "vM" = ( /obj/effect/landmark/patrol_point/tgmc_21, /obj/structure/flora/jungle/grass/thin, @@ -5083,10 +4350,6 @@ dir = 8 }, /area/campaign/jungle_outpost/ground/jungle/east) -"vO" = ( -/obj/effect/landmark/campaign_structure/howitzer_objective, -/turf/open/ground/grass/weedable, -/area/campaign/jungle_outpost/ground/jungle/east) "vP" = ( /obj/structure/flora/jungle/grass/thin, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, @@ -5132,12 +4395,6 @@ "vZ" = ( /turf/open/floor/plating/ground/dirt2, /area/campaign/jungle_outpost/ground/jungle/south_west) -"wa" = ( -/obj/effect/decal/cleanable/blood/writing{ - dir = 5 - }, -/turf/open/floor/mainship/mono, -/area/campaign/jungle_outpost/outpost/medbay) "wb" = ( /obj/structure/flora/grass/tallgrass/autosmooth, /obj/structure/platform_decoration{ @@ -5158,13 +4415,6 @@ /obj/structure/stairs/edge, /turf/open/floor/plating/ground/dirtgrassborder2, /area/campaign/jungle_outpost/ground/jungle) -"wj" = ( -/obj/structure/closet/radiation, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "wk" = ( /obj/structure/bed, /turf/open/floor/wood/alt_four, @@ -5199,16 +4449,6 @@ }, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle) -"wt" = ( -/obj/structure/cargo_container/green{ - dir = 1 - }, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) -"wu" = ( -/obj/machinery/vending/hydronutrients, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "wv" = ( /obj/structure/platform{ dir = 8 @@ -5241,10 +4481,6 @@ dir = 8 }, /area/campaign/jungle_outpost/ground/jungle) -"wB" = ( -/obj/effect/landmark/campaign_structure/howitzer_objective, -/turf/open/ground/grass/weedable, -/area/campaign/jungle_outpost/ground/jungle) "wC" = ( /obj/structure/platform_decoration, /turf/open/liquid/water, @@ -5255,9 +4491,6 @@ }, /turf/open/floor, /area/campaign/jungle_outpost/outpost/science) -"wG" = ( -/turf/open/floor/tile/blue/whitebluefull, -/area/campaign/jungle_outpost/outpost/medbay) "wH" = ( /obj/structure/rock/variable/jungle, /turf/open/floor/plating/ground/dirtgrassborder2, @@ -5311,23 +4544,11 @@ /obj/structure/prop/mainship/telecomms/hub, /turf/open/floor/tile/dark, /area/campaign/jungle_outpost/outpost/command) -"wS" = ( -/obj/structure/flora/jungle/grass/thin, -/turf/open/floor/plating/ground/dirtgrassborder2{ - dir = 8 - }, -/area/campaign/jungle_outpost/ground/jungle/east) "wT" = ( /obj/structure/flora/jungle/grass/thin, /obj/effect/landmark/campaign_structure/asat_system, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/west) -"wU" = ( -/obj/structure/cargo_container/horizontal{ - dir = 4 - }, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "wV" = ( /obj/structure/flora/grass/tallgrass/autosmooth, /obj/effect/landmark/mob_spawner/farwa, @@ -5343,11 +4564,6 @@ /obj/structure/platform, /turf/open/floor, /area/campaign/jungle_outpost/outpost/landing/storage) -"wZ" = ( -/obj/structure/table, -/obj/item/reagent_containers/glass/bucket, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "xa" = ( /obj/machinery/power/apc/drained{ dir = 8 @@ -5363,10 +4579,11 @@ /obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, /turf/open/floor, /area/campaign/jungle_outpost/outpost/medbay/lobby) -"xd" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) +"xe" = ( +/obj/structure/platform, +/obj/effect/landmark/campaign_structure/barricade/sandbags, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/landing) "xf" = ( /obj/structure/table/woodentable, /obj/machinery/computer/security, @@ -5447,12 +4664,6 @@ }, /turf/open/floor/plating/ground/concrete, /area/campaign/jungle_outpost/outpost/req/depot) -"xr" = ( -/obj/structure/platform{ - dir = 1 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/medbay) "xs" = ( /obj/structure/rock/variable/jungle/big, /turf/open/floor/plating/ground/dirtgrassborder2/autosmooth, @@ -5493,20 +4704,6 @@ dir = 8 }, /area/campaign/jungle_outpost/ground/jungle/north_west) -"xA" = ( -/obj/structure/table/reinforced, -/obj/item/storage/surgical_tray, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/tile/blue/whitebluefull, -/area/campaign/jungle_outpost/outpost/medbay) -"xB" = ( -/obj/machinery/vending/MarineMed/Blood, -/turf/open/floor/tile/blue/whiteblue{ - dir = 9 - }, -/area/campaign/jungle_outpost/outpost/medbay) "xC" = ( /turf/closed/wall/r_wall, /area/campaign/jungle_outpost/outpost/command) @@ -5514,11 +4711,6 @@ /obj/structure/flora/tree/jungle, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/south_west) -"xF" = ( -/obj/machinery/power/apc/drained, -/obj/structure/cable, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "xH" = ( /obj/structure/flora/grass/tallgrass/autosmooth, /turf/open/floor/plating/ground/dirtgrassborder2/corner, @@ -5601,13 +4793,6 @@ dir = 4 }, /area/campaign/jungle_outpost/ground/jungle/north) -"xX" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) "xY" = ( /obj/structure/closet, /turf/open/floor/tile/red/redtaupe{ @@ -5636,6 +4821,13 @@ }, /turf/closed/wall, /area/campaign/jungle_outpost/outpost/req) +"yd" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags, +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/autosmooth, +/area/campaign/jungle_outpost/ground/jungle/south_west) "ye" = ( /obj/structure/flora/grass/tallgrass/autosmooth, /turf/open/floor/plating/ground/dirtgrassborder2/autosmooth, @@ -5672,24 +4864,15 @@ /obj/structure/platform{ dir = 10 }, +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags, /turf/open/floor, /area/campaign/jungle_outpost/outpost/landing/storage) "yp" = ( /turf/open/floor, /area/campaign/jungle_outpost/outpost/living) -"yq" = ( -/obj/effect/turf_decal/grassdecal{ - dir = 1 - }, -/obj/structure/flora/jungle/large_bush, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) -"yr" = ( -/obj/machinery/door/airlock/multi_tile/mainship/generic{ - dir = 1 - }, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) "ys" = ( /obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, /turf/open/floor, @@ -5698,12 +4881,6 @@ /obj/structure/rock/variable/jungle_large, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/north_west) -"yu" = ( -/obj/machinery/vending/MarineMed/Blood, -/turf/open/floor/tile/blue/whiteblue{ - dir = 5 - }, -/area/campaign/jungle_outpost/outpost/medbay) "yv" = ( /obj/structure/platform{ dir = 4 @@ -5723,11 +4900,6 @@ dir = 10 }, /area/campaign/jungle_outpost/outpost/req) -"yz" = ( -/turf/open/floor/tile/blue/whitebluecorner{ - dir = 8 - }, -/area/campaign/jungle_outpost/outpost/medbay) "yA" = ( /obj/structure/flora/jungle/bush, /turf/open/floor/plating/ground/dirtgrassborder2/corner2{ @@ -5789,13 +4961,6 @@ }, /turf/open/floor/freezer, /area/campaign/jungle_outpost/outpost/command/captain) -"yP" = ( -/obj/machinery/hydroponics, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "yQ" = ( /obj/structure/table/woodentable, /obj/machinery/light, @@ -5837,18 +5002,18 @@ }, /turf/open/floor/plating/ground/concrete, /area/campaign/jungle_outpost/outpost/req/depot) +"yW" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 1 + }, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/landing/storage) "za" = ( /obj/structure/platform{ dir = 9 }, /turf/closed/wall/r_wall, /area/campaign/jungle_outpost/outpost/security) -"zb" = ( -/obj/machinery/door/airlock/multi_tile/mainship/engineering{ - dir = 1 - }, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "zc" = ( /obj/structure/flora/jungle/large_bush, /obj/structure/platform_decoration{ @@ -5856,6 +5021,12 @@ }, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle) +"zd" = ( +/obj/effect/landmark/campaign_structure/howitzer_objective{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) "ze" = ( /obj/structure/flora/jungle/grass, /turf/open/floor/plating/ground/dirtgrassborder2, @@ -5866,10 +5037,6 @@ dir = 6 }, /area/campaign/jungle_outpost/outpost/living) -"zg" = ( -/obj/machinery/light, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "zh" = ( /obj/machinery/chem_dispenser, /turf/open/floor/tile/blue/whiteblue{ @@ -5891,17 +5058,6 @@ }, /turf/closed/wall/r_wall, /area/campaign/jungle_outpost/outpost/science) -"zl" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) -"zn" = ( -/obj/structure/table/reinforced, -/obj/item/radio/survivor, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "zo" = ( /obj/machinery/prop/computer/dna, /turf/open/floor/tile/purple/whitepurple{ @@ -5924,22 +5080,6 @@ dir = 1 }, /area/campaign/jungle_outpost/outpost/command) -"zr" = ( -/obj/effect/spawner/random/misc/structure/supplycrate, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) -"zs" = ( -/obj/structure/platform{ - dir = 10 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/medbay) -"zt" = ( -/obj/machinery/door/airlock/mainship/medical/free_access{ - dir = 1 - }, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) "zu" = ( /obj/structure/flora/jungle/bush, /turf/open/ground/grass/weedable, @@ -5982,20 +5122,7 @@ /turf/open/floor/plating/ground/dirtgrassborder2/corner{ dir = 1 }, -/area/campaign/jungle_outpost/ground/jungle/west) -"zB" = ( -/obj/structure/closet/secure_closet/medical3/colony, -/turf/open/floor/tile/blue/whiteblue{ - dir = 1 - }, -/area/campaign/jungle_outpost/outpost/medbay) -"zC" = ( -/obj/structure/closet/secure_closet/hydroponics, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) +/area/campaign/jungle_outpost/ground/jungle/west) "zD" = ( /turf/open/floor/tile/green/greentaupecorner, /area/campaign/jungle_outpost/outpost/living) @@ -6092,32 +5219,16 @@ /obj/structure/flora/jungle/grass/thin, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle) -"Ac" = ( -/obj/structure/platform_decoration{ - dir = 6 - }, -/turf/open/ground/grass/weedable, -/area/campaign/jungle_outpost/ground/jungle/west) "Ad" = ( /turf/open/floor/tile/brown{ dir = 1 }, /area/campaign/jungle_outpost/outpost/req) -"Ae" = ( -/obj/effect/turf_decal/grassdecal/corner{ - dir = 4 - }, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "Af" = ( /turf/open/ground/grass/beach{ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle/north_east) -"Ag" = ( -/obj/item/trash/chips, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "Ah" = ( /turf/open/floor/plating/ground/dirtgrassborder2, /area/campaign/jungle_outpost/ground/jungle/north_east) @@ -6138,6 +5249,10 @@ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle/north_east) +"An" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags, +/turf/open/floor/plating/ground/dirtgrassborder2/autosmooth, +/area/campaign/jungle_outpost/ground/jungle/south_west) "Ap" = ( /obj/structure/closet/crate/mass_produced_crate/construction, /turf/open/floor/tile/purple/whitepurple, @@ -6178,12 +5293,6 @@ /obj/structure/flora/tree/jungle/small, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/north_east) -"Aw" = ( -/obj/machinery/door/airlock/colony/medical/hydroponics{ - dir = 1 - }, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) "Ax" = ( /obj/structure/table/reinforced, /obj/effect/spawner/random/engineering/technology_scanner, @@ -6228,10 +5337,6 @@ }, /turf/open/liquid/water/river/autosmooth, /area/campaign/jungle_outpost/ground/river/east) -"AE" = ( -/obj/structure/cargo_container/green, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "AF" = ( /obj/effect/spawner/random/engineering/ore_box, /turf/open/floor/tile/brown{ @@ -6260,16 +5365,6 @@ dir = 4 }, /area/campaign/jungle_outpost/ground/jungle/north) -"AL" = ( -/obj/structure/platform, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/outer/west) -"AM" = ( -/obj/effect/turf_decal/grassdecal{ - dir = 8 - }, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "AN" = ( /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, /area/campaign/jungle_outpost/ground/jungle) @@ -6287,13 +5382,6 @@ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle/north) -"AQ" = ( -/obj/structure/bed/chair/sofa{ - dir = 1 - }, -/obj/machinery/light, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) "AR" = ( /obj/structure/platform, /obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, @@ -6359,11 +5447,6 @@ }, /turf/closed/wall/r_wall, /area/campaign/jungle_outpost/outpost/command/captain) -"Bh" = ( -/turf/open/floor/tile/blue/whiteblue{ - dir = 8 - }, -/area/campaign/jungle_outpost/outpost/medbay) "Bi" = ( /turf/open/ground/grass/beach/corner{ dir = 8 @@ -6379,14 +5462,6 @@ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle/south_west) -"Bm" = ( -/obj/structure/bed/chair/office/light{ - dir = 1 - }, -/turf/open/floor/tile/blue/whiteblue{ - dir = 8 - }, -/area/campaign/jungle_outpost/outpost/medbay) "Bn" = ( /obj/machinery/door/airlock/mainship/command/free_access, /turf/open/floor/tile/dark, @@ -6396,10 +5471,6 @@ /obj/item/trash/cigbutt, /turf/open/floor, /area/campaign/jungle_outpost/outpost/outer/southwest) -"Bp" = ( -/obj/structure/cargo_container, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "Bq" = ( /obj/structure/flora/jungle/grass/thin, /turf/open/floor/plating/ground/dirtgrassborder2/corner2{ @@ -6416,34 +5487,21 @@ "Bt" = ( /turf/closed/wall, /area/campaign/jungle_outpost/outpost/science/south) -"Bu" = ( -/obj/structure/table/reinforced, -/obj/item/tool/surgery/FixOVein, -/obj/item/storage/pill_bottle/inaprovaline{ - pixel_x = 7 - }, -/obj/effect/spawner/random/medical/pillbottle, -/turf/open/floor/tile/blue/whiteblue{ - dir = 4 - }, -/area/campaign/jungle_outpost/outpost/medbay) "Bv" = ( /obj/machinery/light{ dir = 1 }, /turf/open/floor, /area/campaign/jungle_outpost/outpost/living) -"Bw" = ( -/obj/structure/platform_decoration{ - dir = 9 - }, -/turf/open/ground/grass/weedable, -/area/campaign/jungle_outpost/ground/jungle/west) "By" = ( /turf/open/floor/plating/ground/dirtgrassborder2{ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle/south_east) +"BA" = ( +/obj/effect/spawner/modularmap/jungle_outpost/hydroponics, +/turf/open/space/basic, +/area/space) "BB" = ( /turf/open/ground/grass/beach/corner2, /area/campaign/jungle_outpost/ground/jungle) @@ -6451,13 +5509,6 @@ /obj/structure/flora/jungle/grass, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/south_east) -"BF" = ( -/turf/closed/wall/r_wall, -/area/campaign/jungle_outpost/outpost/engineering) -"BG" = ( -/obj/structure/stairs/edge, -/turf/open/liquid/water, -/area/campaign/jungle_outpost/ground/jungle) "BH" = ( /obj/structure/flora/jungle/grass, /obj/structure/platform_decoration{ @@ -6472,10 +5523,6 @@ dir = 6 }, /area/campaign/jungle_outpost/outpost/command) -"BJ" = ( -/obj/structure/cargo_container/hd_blue, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "BK" = ( /obj/machinery/door/airlock/mainship/engineering, /turf/open/floor/tile/dark/gray, @@ -6484,19 +5531,14 @@ /obj/structure/platform, /turf/closed/wall/r_wall, /area/campaign/jungle_outpost/outpost/science) -"BN" = ( -/obj/structure/cargo_container/horizontal{ - dir = 1 - }, -/obj/structure/cargo_container/horizontal{ - dir = 4 - }, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "BO" = ( /obj/structure/platform{ dir = 10 }, +/obj/effect/landmark/campaign_structure/barricade/sandbags, +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 8 + }, /turf/open/floor/plating/ground/concrete, /area/campaign/jungle_outpost/outpost/landing) "BP" = ( @@ -6521,25 +5563,13 @@ dir = 4 }, /area/campaign/jungle_outpost/outpost/security/vault) -"BR" = ( -/obj/structure/table, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/regular, -/turf/open/floor/tile/blue/whiteblue{ - dir = 4 - }, -/area/campaign/jungle_outpost/outpost/medbay) -"BS" = ( -/obj/structure/cable, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) "BT" = ( /obj/structure/stairs/seamless/platform, /turf/open/floor/plating/ground/concrete, /area/campaign/jungle_outpost/outpost/landing) "BU" = ( /obj/structure/table/mainship, -/obj/item/trash/barcardine, +/obj/item/trash/barcaridine, /turf/open/floor/tile/neutral/full, /area/campaign/jungle_outpost/outpost/living/canteen) "BV" = ( @@ -6564,10 +5594,6 @@ "BZ" = ( /turf/open/floor/plating/ground/dirt, /area/campaign/jungle_outpost/ground/jungle/south) -"Ca" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/engitool, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "Cb" = ( /turf/open/floor/tile/dark/gray, /area/campaign/jungle_outpost/outpost/medbay/lobby) @@ -6591,17 +5617,13 @@ /area/campaign/jungle_outpost/ground/jungle/south_east) "Cf" = ( /obj/structure/flora/jungle/grass/thin, +/obj/effect/landmark/campaign_structure/howitzer_objective{ + dir = 4 + }, /turf/open/ground/grass/beach/corner{ dir = 4 }, /area/campaign/jungle_outpost/ground/jungle) -"Cg" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/spray/surgery, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/suit/surgical, -/turf/open/floor/tile/blue/whitebluefull, -/area/campaign/jungle_outpost/outpost/medbay) "Ci" = ( /obj/structure/closet/secure_closet/guncabinet/nt_lab, /turf/open/floor/tile/red/redtaupe{ @@ -6612,11 +5634,6 @@ /obj/structure/flora/jungle/grass/thin, /turf/open/liquid/water/river, /area/campaign/jungle_outpost/ground/jungle/east) -"Ck" = ( -/obj/structure/table/reinforced, -/obj/item/t_scanner, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "Cl" = ( /turf/open/floor/plating/ground/dirtgrassborder2{ dir = 1 @@ -6684,12 +5701,6 @@ /obj/structure/cable, /turf/open/floor/tile/barber, /area/campaign/jungle_outpost/outpost/living/kitchen) -"CB" = ( -/obj/structure/platform{ - dir = 5 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/outer/west) "CC" = ( /obj/structure/flora/jungle/grass, /turf/open/ground/grass/beach/corner, @@ -6710,13 +5721,15 @@ "CG" = ( /turf/open/floor/plating/ground/dirtgrassborder2, /area/campaign/jungle_outpost/ground/jungle/south_west) -"CJ" = ( -/obj/machinery/door/airlock/mainship/engineering/free_access{ - dir = 1; - name = "\improper Engineering Dome" +"CI" = ( +/obj/structure/platform{ + dir = 1 }, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 1 + }, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/landing/storage) "CK" = ( /obj/structure/table/reinforced, /obj/effect/spawner/random/engineering/bomb_supply, @@ -6737,12 +5750,6 @@ /obj/structure/rock/variable/jungle/big, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/north_west) -"CN" = ( -/obj/structure/platform{ - dir = 6 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/outer/west) "CO" = ( /turf/open/floor/plating/ground/dirtgrassborder2/corner{ dir = 8 @@ -6752,12 +5759,6 @@ /obj/effect/spawner/random/misc/structure/supplycrate/normalweighted, /turf/open/floor, /area/campaign/jungle_outpost/outpost/outer/southwest) -"CR" = ( -/obj/structure/platform{ - dir = 5 - }, -/turf/closed/wall/r_wall, -/area/campaign/jungle_outpost/outpost/engineering) "CS" = ( /obj/structure/prop/mainship/mapping_computer, /turf/open/floor/tile/blue/taupeblue, @@ -6792,37 +5793,11 @@ }, /turf/open/floor/tile/white, /area/campaign/jungle_outpost/outpost/medbay/lobby) -"Da" = ( -/obj/structure/flora/tree/jungle, -/obj/structure/platform_decoration{ - dir = 5 - }, -/turf/open/ground/grass/weedable, -/area/campaign/jungle_outpost/ground/jungle/east) -"Db" = ( -/obj/structure/platform{ - dir = 10 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/medbay/lobby) -"Dc" = ( -/obj/structure/table, -/obj/item/tool/pen, -/obj/effect/spawner/random/misc/folder, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "Dd" = ( /obj/structure/catwalk, /obj/structure/platform, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/north) -"De" = ( -/obj/machinery/light, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "Df" = ( /obj/structure/prop/mainship/sensor_computer3, /turf/open/floor/tile/purple/whitepurple{ @@ -6835,20 +5810,10 @@ }, /turf/open/floor/plating/ground/dirt2, /area/campaign/jungle_outpost/outpost/outer/southwest) -"Dh" = ( -/obj/item/trash/cheesie, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) "Di" = ( /obj/structure/prop/mainship/research/explosivecompressor, /turf/open/floor/tile/purple/whitepurple, /area/campaign/jungle_outpost/outpost/science) -"Dj" = ( -/obj/structure/table, -/turf/open/floor/tile/blue/whiteblue{ - dir = 8 - }, -/area/campaign/jungle_outpost/outpost/medbay/lobby) "Dk" = ( /obj/machinery/light, /turf/open/floor/tile/dark/gray, @@ -6894,13 +5859,6 @@ dir = 8 }, /area/campaign/jungle_outpost/ground/jungle/south_east) -"Dw" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/obj/structure/platform{ - dir = 8 - }, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) "Dx" = ( /obj/structure/table/reinforced, /turf/open/floor/tile/red/redtaupe{ @@ -7049,10 +6007,6 @@ "Eh" = ( /turf/open/ground/grass/beach/corner2, /area/campaign/jungle_outpost/ground/jungle/north_east) -"Ei" = ( -/obj/machinery/light, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) "Ej" = ( /obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, /obj/structure/platform{ @@ -7063,15 +6017,6 @@ "El" = ( /turf/open/floor/plating/ground/dirt2, /area/campaign/jungle_outpost/ground/jungle/north_east) -"Em" = ( -/obj/machinery/iv_drip, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/tile/blue/whiteblue{ - dir = 4 - }, -/area/campaign/jungle_outpost/outpost/medbay) "En" = ( /obj/structure/bookcase/manuals/research_and_development, /obj/item/book/manual/engineering_construction, @@ -7105,12 +6050,6 @@ /obj/structure/largecrate/random/case, /turf/open/floor, /area/campaign/jungle_outpost/outpost/landing/storage) -"Et" = ( -/obj/structure/flora/jungle/grass/thin, -/turf/open/floor/plating/ground/dirtgrassborder2/corner{ - dir = 8 - }, -/area/campaign/jungle_outpost/ground/jungle/west) "Eu" = ( /obj/structure/reagent_dispensers/fueltank/barrel, /turf/open/floor, @@ -7124,13 +6063,6 @@ dir = 1 }, /area/campaign/jungle_outpost/outpost/req) -"Ew" = ( -/obj/machinery/door/airlock/multi_tile/mainship/engineering{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "Ex" = ( /turf/closed/gm/dense, /area/campaign/jungle_outpost/ground/jungle/north_east) @@ -7140,10 +6072,6 @@ dir = 1 }, /area/campaign/jungle_outpost/outpost/command) -"Ez" = ( -/obj/machinery/iv_drip, -/turf/open/floor/tile/blue/whitebluefull, -/area/campaign/jungle_outpost/outpost/medbay) "EA" = ( /obj/structure/table/woodentable, /obj/item/camera, @@ -7164,15 +6092,6 @@ /obj/structure/cable, /turf/open/floor/wood/alt_seven, /area/campaign/jungle_outpost/outpost/science/office) -"EF" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay/lobby) -"EG" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/obj/structure/platform, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "EI" = ( /obj/structure/prop/mainship/research/tdoppler, /turf/open/floor/tile/purple/whitepurple{ @@ -7263,19 +6182,6 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/campaign/jungle_outpost/outpost/command/captain) -"Fb" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) -"Fc" = ( -/obj/machinery/power/apc/drained{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) "Fd" = ( /obj/structure/flora/jungle/bush, /turf/open/ground/grass/weedable, @@ -7291,30 +6197,11 @@ /obj/machinery/vending/boozeomat, /turf/open/floor/wood, /area/campaign/jungle_outpost/outpost/command) -"Fh" = ( -/obj/structure/closet/secure_closet/medical3/colony, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/tile/blue/whiteblue{ - dir = 1 - }, -/area/campaign/jungle_outpost/outpost/medbay) "Fi" = ( /turf/open/ground/grass/beach/corner2{ dir = 4 }, /area/campaign/jungle_outpost/ground/jungle) -"Fj" = ( -/obj/structure/table, -/obj/effect/spawner/random/medical/firstaid, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/tile/blue/whiteblue{ - dir = 9 - }, -/area/campaign/jungle_outpost/outpost/medbay/lobby) "Fk" = ( /turf/open/floor, /area/campaign/jungle_outpost/outpost/medbay/lobby) @@ -7332,12 +6219,6 @@ }, /turf/closed/wall, /area/campaign/jungle_outpost/outpost/living/canteen) -"Fr" = ( -/obj/structure/platform{ - dir = 9 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/living/hydro) "Ft" = ( /obj/structure/flora/jungle/grass/thin, /turf/open/ground/grass/weedable, @@ -7382,23 +6263,6 @@ /obj/structure/closet/crate/secure, /turf/open/floor/tile/white, /area/campaign/jungle_outpost/outpost/science/south) -"FD" = ( -/obj/structure/sign/greencross{ - dir = 1 - }, -/obj/structure/platform_decoration{ - dir = 5 - }, -/turf/open/ground/grass/weedable, -/area/campaign/jungle_outpost/ground/jungle) -"FE" = ( -/obj/machinery/door/airlock/mainship/engineering/free_access{ - dir = 1; - name = "\improper Engineering Dome" - }, -/obj/structure/cable, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "FF" = ( /obj/structure/flora/tree/jungle/small, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, @@ -7418,12 +6282,6 @@ /obj/structure/flora/jungle/grass, /turf/open/liquid/water/river, /area/campaign/jungle_outpost/ground/jungle/north_east) -"FK" = ( -/obj/structure/bed/chair/sofa{ - dir = 1 - }, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) "FL" = ( /turf/open/floor/plating/ground/dirtgrassborder2/corner2{ dir = 4 @@ -7434,10 +6292,6 @@ dir = 4 }, /area/campaign/jungle_outpost/outpost/landing) -"FO" = ( -/obj/structure/bed/stool, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "FP" = ( /turf/open/ground/grass/beach/corner{ dir = 4 @@ -7495,10 +6349,6 @@ dir = 1 }, /area/campaign/jungle_outpost/outpost/living) -"Gb" = ( -/obj/effect/turf_decal/grassdecal, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "Gd" = ( /turf/closed/gm/dense, /area/campaign/jungle_outpost/ground/jungle/south_west) @@ -7546,6 +6396,12 @@ dir = 8 }, /area/campaign/jungle_outpost/outpost/medbay/chemistry) +"Gr" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/south_west) "Gs" = ( /turf/open/floor/plating/dmg2, /area/campaign/jungle_outpost/outpost/outer/southwest) @@ -7571,12 +6427,6 @@ /obj/structure/cargo_container/gorg, /turf/open/floor/plating/ground/concrete, /area/campaign/jungle_outpost/outpost/req/depot) -"Gx" = ( -/obj/machinery/door/airlock/mainship/medical/free_access{ - dir = 1 - }, -/turf/open/floor/tile/blue/whitebluefull, -/area/campaign/jungle_outpost/outpost/medbay) "Gy" = ( /obj/effect/turf_decal/riverdecal, /obj/structure/catwalk, @@ -7586,12 +6436,6 @@ /obj/structure/bed/chair/office/light, /turf/open/floor, /area/campaign/jungle_outpost/outpost/command) -"GA" = ( -/obj/structure/closet/secure_closet/medical2, -/turf/open/floor/tile/blue/whiteblue{ - dir = 8 - }, -/area/campaign/jungle_outpost/outpost/medbay) "GB" = ( /obj/machinery/light{ dir = 8 @@ -7694,6 +6538,12 @@ }, /turf/open/floor/plating/ground/dirtgrassborder2, /area/campaign/jungle_outpost/ground/jungle/east) +"GY" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/autosmooth, +/area/campaign/jungle_outpost/ground/jungle/south_west) "GZ" = ( /obj/structure/catwalk, /obj/effect/turf_decal/riverdecal, @@ -7719,12 +6569,6 @@ /obj/machinery/door/airlock/multi_tile/secure, /turf/open/floor, /area/campaign/jungle_outpost/outpost/security/vault) -"Hg" = ( -/obj/structure/table, -/turf/open/floor/tile/blue/whiteblue{ - dir = 6 - }, -/area/campaign/jungle_outpost/outpost/medbay/lobby) "Hh" = ( /obj/structure/table/woodentable, /obj/machinery/light, @@ -7748,12 +6592,6 @@ dir = 6 }, /area/campaign/jungle_outpost/outpost/landing) -"Hn" = ( -/obj/structure/rock/variable/jungle/big, -/turf/open/floor/plating/ground/dirtgrassborder2{ - dir = 1 - }, -/area/campaign/jungle_outpost/ground/jungle/east) "Ho" = ( /obj/structure/flora/jungle/bush, /turf/open/ground/grass/weedable, @@ -7767,25 +6605,12 @@ "Hq" = ( /turf/open/floor/plating/ground/dirt2, /area/campaign/jungle_outpost/ground/jungle/west) -"Hs" = ( -/turf/open/floor/mainship/mono, -/area/campaign/jungle_outpost/outpost/medbay) "Ht" = ( /obj/structure/filingcabinet/filingcabinet, /turf/open/floor/tile/blue/taupeblue{ dir = 1 }, /area/campaign/jungle_outpost/outpost/command) -"Hv" = ( -/obj/structure/cargo_container/hd_blue{ - dir = 4 - }, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) -"Hw" = ( -/obj/effect/landmark/campaign_structure/howitzer_objective, -/turf/open/floor/plating/ground/dirtgrassborder2/corner, -/area/campaign/jungle_outpost/ground/jungle) "Hy" = ( /obj/structure/stairs/seamless/edge_vert{ dir = 8 @@ -7921,10 +6746,6 @@ /obj/effect/turf_decal/warning_stripes, /turf/open/floor/plating/ground/concrete, /area/campaign/jungle_outpost/outpost/req/depot) -"Ib" = ( -/obj/structure/sink, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "Ic" = ( /obj/structure/platform{ dir = 8 @@ -7958,11 +6779,6 @@ /obj/structure/flora/grass/tallgrass/autosmooth, /turf/open/liquid/water/river/autosmooth, /area/campaign/jungle_outpost/ground/river/north) -"Il" = ( -/obj/structure/flora/jungle/grass/thin, -/obj/effect/landmark/campaign_structure/howitzer_objective, -/turf/open/ground/grass/weedable, -/area/campaign/jungle_outpost/ground/jungle/east) "Im" = ( /obj/structure/flora/grass/tallgrass/autosmooth, /obj/structure/platform_decoration{ @@ -7976,15 +6792,6 @@ }, /turf/open/floor/tile/neutral/full, /area/campaign/jungle_outpost/outpost/living/canteen) -"Io" = ( -/obj/structure/window/reinforced/tinted, -/obj/structure/bed/chair/comfy{ - dir = 8 - }, -/turf/open/floor/tile/blue/whiteblue{ - dir = 4 - }, -/area/campaign/jungle_outpost/outpost/medbay) "Ip" = ( /obj/structure/closet/toolcloset, /turf/open/floor/tile/purple/whitepurple{ @@ -8020,11 +6827,6 @@ /obj/structure/platform, /turf/open/liquid/water/river/autosmooth/deep, /area/campaign/jungle_outpost/ground/river/east) -"Iy" = ( -/obj/structure/bed/roller, -/obj/machinery/light, -/turf/open/floor/tile/blue/whiteblue, -/area/campaign/jungle_outpost/outpost/medbay) "Iz" = ( /obj/structure/table/mainship, /obj/item/tool/kitchen/tray, @@ -8077,11 +6879,6 @@ /obj/structure/flora/jungle/grass/thin, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/east) -"IK" = ( -/obj/structure/flora/jungle/bush, -/obj/structure/flora/grass/tallgrass/autosmooth, -/turf/open/ground/grass/weedable, -/area/campaign/jungle_outpost/ground/jungle) "IM" = ( /obj/structure/flora/jungle/grass/thin, /turf/open/ground/grass/beach/corner, @@ -8128,10 +6925,6 @@ "IV" = ( /turf/closed/wall, /area/campaign/jungle_outpost/outpost/command) -"IW" = ( -/obj/structure/cargo_container/hd, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "IZ" = ( /obj/structure/platform{ dir = 1 @@ -8200,11 +6993,6 @@ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle) -"Jp" = ( -/obj/machinery/hydroponics, -/obj/machinery/light, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "Jq" = ( /obj/structure/flora/jungle/grass/thin, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, @@ -8231,10 +7019,6 @@ dir = 4 }, /area/campaign/jungle_outpost/outpost/req/qm) -"Jy" = ( -/obj/structure/flora/tree/jungle/small, -/turf/open/floor/plating/ground/dirtgrassborder2/corner2, -/area/campaign/jungle_outpost/ground/jungle/east) "Jz" = ( /obj/structure/prop/vehicle/van{ dir = 8 @@ -8254,6 +7038,14 @@ /obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, /turf/open/floor/tile/white, /area/campaign/jungle_outpost/outpost/medbay/chemistry) +"JF" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) "JG" = ( /obj/machinery/door/airlock/mainship/generic, /turf/open/floor/freezer, @@ -8265,43 +7057,18 @@ "JI" = ( /turf/open/floor/iron/smooth, /area/campaign/jungle_outpost/ground/river/east) -"JJ" = ( -/obj/structure/cargo_container/ch_green{ - dir = 4 - }, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) -"JK" = ( -/obj/effect/landmark/campaign_structure/howitzer_objective, -/turf/open/ground/grass/weedable, -/area/campaign/jungle_outpost/ground/jungle/south_west) "JL" = ( /turf/open/floor/plating/ground/dirtgrassborder2/corner2, /area/campaign/jungle_outpost/ground/jungle/south_west) "JO" = ( /turf/open/liquid/water/river, /area/campaign/jungle_outpost/ground/river/lake) -"JP" = ( -/obj/structure/cable, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) -"JQ" = ( -/obj/item/clothing/gloves/botanic_leather, -/obj/structure/table, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "JR" = ( /obj/structure/platform{ dir = 1 }, /turf/closed/wall, /area/campaign/jungle_outpost/outpost/science/south) -"JS" = ( -/obj/structure/platform{ - dir = 8 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/medbay) "JU" = ( /obj/structure/catwalk, /obj/structure/platform{ @@ -8428,6 +7195,9 @@ /area/campaign/jungle_outpost/ground/jungle/north_east) "Kv" = ( /obj/effect/landmark/mob_spawner/farwa, +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 1 + }, /turf/open/ground/grass/beach/corner2{ dir = 4 }, @@ -8451,14 +7221,13 @@ /obj/machinery/shower, /turf/open/floor/freezer, /area/campaign/jungle_outpost/outpost/command) -"KC" = ( -/obj/structure/bed/roller, -/obj/machinery/power/apc/drained, -/obj/structure/cable, -/turf/open/floor/tile/blue/whiteblue{ - dir = 1 +"KB" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 8 }, -/area/campaign/jungle_outpost/outpost/medbay) +/obj/effect/landmark/campaign_structure/barricade/sandbags, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/south_west) "KD" = ( /obj/structure/rack, /obj/item/weapon/gun/pistol/g22, @@ -8478,10 +7247,6 @@ /obj/structure/flora/tree/jungle/small, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, /area/campaign/jungle_outpost/ground/jungle/east) -"KF" = ( -/obj/effect/landmark/campaign_structure/howitzer_objective, -/turf/open/ground/grass/weedable, -/area/campaign/jungle_outpost/ground/jungle/north) "KG" = ( /obj/structure/bed/chair/sofa/left{ dir = 8 @@ -8591,12 +7356,6 @@ /obj/structure/stairs/seamless/platform_vert/water, /turf/open/liquid/water, /area/campaign/jungle_outpost/outpost/science) -"Le" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "Lf" = ( /obj/structure/sink/kitchen{ dir = 1 @@ -8691,12 +7450,6 @@ dir = 8 }, /area/campaign/jungle_outpost/outpost/security) -"Lz" = ( -/obj/structure/platform{ - dir = 9 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/medbay/lobby) "LA" = ( /obj/machinery/vending/cigarette/colony, /turf/open/floor, @@ -8784,26 +7537,6 @@ /obj/structure/flora/jungle/grass/thin, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, /area/campaign/jungle_outpost/ground/jungle/north_west) -"LV" = ( -/obj/machinery/hydroponics, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) -"LW" = ( -/obj/machinery/door/airlock/mainship/engineering/free_access{ - name = "\improper Engineering Dome" - }, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) -"LX" = ( -/obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, -/obj/structure/platform{ - dir = 1 - }, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "Mb" = ( /obj/structure/largecrate/supply/generator, /turf/open/floor/plating/ground/concrete, @@ -8942,12 +7675,6 @@ /obj/structure/flora/grass/tallgrass/autosmooth, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/north_west) -"MK" = ( -/obj/structure/cargo_container/horizontal{ - dir = 1 - }, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "ML" = ( /obj/structure/flora/jungle/large_bush, /turf/open/floor/plating/ground/dirtgrassborder2/corner2{ @@ -8996,6 +7723,10 @@ /obj/structure/sign/greencross, /turf/open/floor, /area/campaign/jungle_outpost/outpost/medbay/lobby) +"MW" = ( +/obj/effect/spawner/modularmap/jungle_outpost/southcrates, +/turf/open/space/basic, +/area/space) "MX" = ( /obj/machinery/door/airlock/multi_tile/mainship/generic, /turf/open/floor/tile/dark/gray, @@ -9070,17 +7801,19 @@ "Nk" = ( /turf/open/floor/plating/ground/dirt2, /area/campaign/jungle_outpost/ground/jungle/east) +"Nl" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 1 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/south_west) "Nm" = ( /obj/structure/flora/jungle/grass, /turf/open/floor/plating/ground/dirtgrassborder2/corner, /area/campaign/jungle_outpost/ground/jungle/north) -"Nn" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "No" = ( /obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, /obj/structure/platform{ @@ -9088,12 +7821,6 @@ }, /turf/open/floor/tile/white, /area/campaign/jungle_outpost/outpost/science/south) -"Np" = ( -/obj/structure/platform{ - dir = 6 - }, -/turf/closed/wall/r_wall, -/area/campaign/jungle_outpost/outpost/engineering) "Nq" = ( /obj/structure/rock/variable/jungle/big, /turf/open/floor/plating/ground/dirtgrassborder2, @@ -9113,15 +7840,6 @@ }, /turf/open/floor, /area/campaign/jungle_outpost/outpost/science) -"Nw" = ( -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/medbay) -"Nx" = ( -/obj/structure/platform{ - dir = 10 - }, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/medbay) "Ny" = ( /obj/structure/flora/jungle/grass/thin, /turf/open/floor/plating/ground/dirtgrassborder2{ @@ -9151,10 +7869,6 @@ dir = 1 }, /area/campaign/jungle_outpost/outpost/req) -"NF" = ( -/obj/effect/landmark/campaign_structure/phoron_crate, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "NG" = ( /turf/closed/wall, /area/campaign/jungle_outpost/ground/river/east) @@ -9183,15 +7897,6 @@ dir = 10 }, /area/campaign/jungle_outpost/outpost/command) -"NM" = ( -/obj/machinery/computer/body_scanconsole, -/obj/machinery/light, -/turf/open/floor/tile/blue/whiteblue, -/area/campaign/jungle_outpost/outpost/medbay) -"NN" = ( -/obj/machinery/power/monitor, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "NO" = ( /obj/structure/rock/variable/jungle, /turf/open/floor/plating/ground/dirtgrassborder2/corner2{ @@ -9206,22 +7911,6 @@ dir = 4 }, /area/campaign/jungle_outpost/outpost/security) -"NR" = ( -/obj/structure/table, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/roller, -/turf/open/floor/tile/blue/whiteblue{ - dir = 1 - }, -/area/campaign/jungle_outpost/outpost/medbay) -"NS" = ( -/obj/structure/cargo_container/hd_blue{ - dir = 1 - }, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "NT" = ( /obj/structure/table/reinforced, /obj/effect/spawner/random/engineering/tool, @@ -9231,10 +7920,6 @@ /obj/structure/platform, /turf/closed/wall, /area/campaign/jungle_outpost/outpost/science/south) -"NV" = ( -/obj/item/trash/cigbutt, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) "NW" = ( /obj/machinery/light, /obj/structure/cable, @@ -9257,14 +7942,6 @@ dir = 1 }, /area/campaign/jungle_outpost/outpost/living) -"Ob" = ( -/obj/structure/table/reinforced, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/toxin, -/turf/open/floor/tile/blue/whiteblue{ - dir = 8 - }, -/area/campaign/jungle_outpost/outpost/medbay) "Oc" = ( /obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, /obj/structure/platform{ @@ -9369,10 +8046,6 @@ }, /turf/open/floor/wood, /area/campaign/jungle_outpost/outpost/command) -"Oz" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "OB" = ( /obj/structure/flora/grass/tallgrass/autosmooth, /turf/open/floor/plating/ground/dirtgrassborder2/corner{ @@ -9436,12 +8109,6 @@ dir = 9 }, /area/campaign/jungle_outpost/outpost/medbay/chemistry) -"OO" = ( -/obj/machinery/door/airlock/colony/medical/hydroponics{ - dir = 1 - }, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "OP" = ( /obj/structure/flora/jungle/grass/thin, /turf/open/floor/plating/ground/dirtgrassborder2/autosmooth, @@ -9471,23 +8138,6 @@ }, /turf/open/floor, /area/campaign/jungle_outpost/outpost/command) -"OV" = ( -/obj/effect/spawner/random/misc/structure/closet/tool, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) -"OW" = ( -/obj/structure/flora/jungle/grass, -/obj/structure/platform_decoration{ - dir = 5 - }, -/turf/open/ground/grass/weedable, -/area/campaign/jungle_outpost/ground/jungle) -"OX" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) "OY" = ( /obj/structure/flora/grass/tallgrass/autosmooth, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, @@ -9524,14 +8174,6 @@ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle) -"Ph" = ( -/obj/structure/table, -/obj/item/paper, -/obj/item/tool/pen/red, -/turf/open/floor/tile/blue/whiteblue{ - dir = 4 - }, -/area/campaign/jungle_outpost/outpost/medbay/lobby) "Pi" = ( /obj/structure/flora/jungle/bush, /turf/open/floor/plating/ground/dirtgrassborder2{ @@ -9547,28 +8189,12 @@ }, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle) -"Pm" = ( -/obj/structure/platform{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/campaign/jungle_outpost/outpost/engineering) "Pn" = ( /obj/structure/platform_decoration{ dir = 1 }, /turf/open/floor/plating/ground/dirt2, /area/campaign/jungle_outpost/ground/jungle/south_west) -"Po" = ( -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) -"Pp" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/obj/structure/platform{ - dir = 8 - }, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "Pq" = ( /obj/effect/spawner/random/engineering/structure/tank/fuelweighted, /turf/open/floor/tile/purple/whitepurple{ @@ -9580,12 +8206,6 @@ dir = 4 }, /area/campaign/jungle_outpost/ground/jungle/south_east) -"Ps" = ( -/obj/structure/platform{ - dir = 1 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/medbay/lobby) "Pt" = ( /obj/effect/landmark/campaign_structure/sensor_tower, /turf/open/ground/grass/weedable, @@ -9637,15 +8257,6 @@ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle/east) -"PE" = ( -/obj/effect/landmark/campaign_structure/howitzer_objective, -/turf/open/ground/grass/weedable, -/area/campaign/jungle_outpost/ground/jungle/south) -"PF" = ( -/obj/structure/rack, -/obj/effect/spawner/random/engineering/engibelt, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "PG" = ( /obj/structure/flora/jungle/grass, /turf/open/ground/grass/weedable, @@ -9671,12 +8282,6 @@ dir = 1 }, /area/campaign/jungle_outpost/ground/river/lake) -"PM" = ( -/obj/structure/rack, -/obj/effect/spawner/random/engineering/powercell, -/obj/effect/spawner/random/engineering/powercell, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "PN" = ( /obj/machinery/door/airlock/mainship/security{ dir = 8 @@ -9702,6 +8307,13 @@ }, /turf/open/floor/plating/ground/concrete, /area/campaign/jungle_outpost/outpost/landing) +"PS" = ( +/obj/structure/table/mainship, +/obj/item/clothing/suit/storage/chef/classic, +/obj/item/clothing/head/chefhat, +/obj/item/clothing/gloves/latex, +/turf/open/floor/tile/barber, +/area/campaign/jungle_outpost/outpost/living/kitchen) "PT" = ( /turf/open/floor/plating/ground/concrete/lines{ dir = 10 @@ -9752,22 +8364,6 @@ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle/south_east) -"Qi" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/glasses/eyepatch, -/obj/item/storage/box/rxglasses{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/box/masks, -/obj/item/storage/box/gloves{ - pixel_x = -5; - pixel_y = -5 - }, -/turf/open/floor/tile/blue/whiteblue{ - dir = 4 - }, -/area/campaign/jungle_outpost/outpost/medbay) "Qj" = ( /obj/structure/catwalk, /obj/structure/platform{ @@ -9813,12 +8409,6 @@ }, /turf/open/floor/tile/neutral/full, /area/campaign/jungle_outpost/outpost/living/canteen) -"Qs" = ( -/obj/structure/platform{ - dir = 6 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/living/hydro) "Qu" = ( /obj/structure/catwalk, /obj/structure/platform{ @@ -9826,22 +8416,10 @@ }, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, /area/campaign/jungle_outpost/ground/jungle/south_east) -"Qv" = ( -/obj/structure/closet/secure_closet/medical1, -/turf/open/floor/tile/blue/whiteblue{ - dir = 8 - }, -/area/campaign/jungle_outpost/outpost/medbay) "Qy" = ( /obj/machinery/light, /turf/open/floor/tile/neutral/full, /area/campaign/jungle_outpost/outpost/living/canteen) -"Qz" = ( -/obj/structure/platform{ - dir = 5 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/medbay) "QB" = ( /turf/open/floor/plating/ground/dirtgrassborder2/corner, /area/campaign/jungle_outpost/ground/jungle/south_east) @@ -9878,13 +8456,6 @@ dir = 5 }, /area/campaign/jungle_outpost/outpost/living) -"QK" = ( -/obj/structure/table, -/obj/item/storage/firstaid, -/turf/open/floor/tile/blue/whiteblue{ - dir = 1 - }, -/area/campaign/jungle_outpost/outpost/medbay) "QL" = ( /turf/open/floor/plating/ground/dirtgrassborder2/corner2{ dir = 1 @@ -9904,6 +8475,15 @@ /obj/machinery/light, /turf/open/floor/tile/purple/whitepurple, /area/campaign/jungle_outpost/outpost/science/south) +"QQ" = ( +/obj/structure/platform{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/landing) "QR" = ( /turf/closed/wall, /area/campaign/jungle_outpost/outpost/living) @@ -9944,12 +8524,6 @@ }, /turf/closed/wall, /area/campaign/jungle_outpost/outpost/living/bathroom) -"Rb" = ( -/obj/structure/platform{ - dir = 4 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/outer/west) "Rc" = ( /obj/structure/flora/grass/tallgrass/autosmooth, /turf/open/floor/plating/ground/dirtgrassborder2{ @@ -10038,14 +8612,6 @@ }, /turf/open/floor/tile/dark/gray, /area/campaign/jungle_outpost/outpost/req) -"Rs" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/bodybags, -/obj/item/roller, -/turf/open/floor/tile/blue/whiteblue{ - dir = 5 - }, -/area/campaign/jungle_outpost/outpost/medbay) "Rt" = ( /obj/structure/stairs/seamless/edge_vert, /turf/open/floor/tile/red/full, @@ -10087,11 +8653,6 @@ /obj/structure/flora/grass/tallgrass/autosmooth, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, /area/campaign/jungle_outpost/ground/jungle/south_east) -"RF" = ( -/obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, -/obj/structure/platform, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "RH" = ( /obj/structure/closet/cabinet, /obj/item/stack/sheet/wood/large_stack, @@ -10128,12 +8689,6 @@ /obj/structure/flora/grass/tallgrass/autosmooth, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/south) -"RO" = ( -/obj/machinery/door/airlock/multi_tile/mainship/generic{ - dir = 1 - }, -/turf/open/floor/tile/blue/whiteblue, -/area/campaign/jungle_outpost/outpost/medbay/lobby) "RP" = ( /obj/structure/toilet{ dir = 8 @@ -10209,10 +8764,6 @@ /obj/structure/prop/vehicle/crawler/crawler_blue, /turf/open/floor/plating/ground/concrete, /area/campaign/jungle_outpost/outpost/req/depot) -"Se" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/engivend, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "Sf" = ( /obj/structure/flora/jungle/grass/thin, /turf/open/floor/plating/ground/dirtgrassborder2{ @@ -10224,12 +8775,6 @@ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle/north_east) -"Sh" = ( -/obj/structure/platform{ - dir = 8 - }, -/turf/closed/wall/r_wall, -/area/campaign/jungle_outpost/outpost/engineering) "Sj" = ( /obj/structure/prop/mainship/chimney, /turf/open/floor/wood/variable/wide, @@ -10252,10 +8797,6 @@ }, /turf/closed/wall, /area/campaign/jungle_outpost/outpost/living) -"St" = ( -/obj/machinery/door/airlock/multi_tile/mainship/generic, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "Su" = ( /obj/effect/spawner/random/misc/structure/supplycrate/normalweighted, /turf/open/floor/tile/white, @@ -10316,10 +8857,6 @@ }, /turf/closed/wall/r_wall, /area/campaign/jungle_outpost/outpost/security) -"SF" = ( -/obj/structure/stairs/edge, -/turf/open/floor/plating/ground/dirtgrassborder2, -/area/campaign/jungle_outpost/ground/jungle/west) "SG" = ( /obj/structure/rock/variable/jungle, /turf/open/floor/plating/ground/dirtgrassborder2{ @@ -10442,12 +8979,14 @@ }, /turf/open/floor, /area/campaign/jungle_outpost/outpost/living) -"Ti" = ( -/obj/machinery/atmospherics/components/unary/cryo_cell, -/turf/open/floor/tile/blue/whiteblue{ +"Tj" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ dir = 8 }, -/area/campaign/jungle_outpost/outpost/medbay) +/area/campaign/jungle_outpost/ground/jungle) "Tk" = ( /turf/closed/wall/r_wall, /area/campaign/jungle_outpost/outpost/security) @@ -10486,23 +9025,11 @@ /obj/structure/flora/tree/jungle/small, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, /area/campaign/jungle_outpost/ground/jungle/south_east) -"Tw" = ( -/obj/machinery/computer/med_data, -/turf/open/floor/tile/blue/whiteblue{ - dir = 9 - }, -/area/campaign/jungle_outpost/outpost/medbay) "Tx" = ( /obj/structure/platform, /obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, /turf/open/floor, /area/campaign/jungle_outpost/outpost/outer/southwest) -"Ty" = ( -/obj/structure/cargo_container/hd{ - dir = 4 - }, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "TA" = ( /obj/machinery/power/apc/drained{ dir = 8 @@ -10528,12 +9055,14 @@ /obj/machinery/prop/computer/PC, /turf/open/floor/wood/alt_seven, /area/campaign/jungle_outpost/outpost/science/office) -"TE" = ( -/obj/structure/cable, -/turf/open/floor/tile/blue/whitebluecorner{ - dir = 1 +"TD" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 8 + }, +/turf/open/ground/grass/beach{ + dir = 4 }, -/area/campaign/jungle_outpost/outpost/medbay) +/area/campaign/jungle_outpost/ground/jungle) "TF" = ( /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/east) @@ -10570,14 +9099,6 @@ /obj/structure/platform, /turf/open/floor/tile/dark/gray, /area/campaign/jungle_outpost/outpost/req/depot) -"TP" = ( -/obj/structure/platform_decoration{ - dir = 9 - }, -/turf/open/floor/plating/ground/dirtgrassborder2{ - dir = 8 - }, -/area/campaign/jungle_outpost/ground/jungle/east) "TQ" = ( /turf/open/ground/grass/beach{ dir = 8 @@ -10697,18 +9218,6 @@ /obj/effect/landmark/patrol_point/tgmc_12, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/south_east) -"Up" = ( -/obj/structure/platform{ - dir = 1 - }, -/turf/closed/wall/r_wall, -/area/campaign/jungle_outpost/outpost/engineering) -"Uq" = ( -/obj/machinery/computer/med_data, -/turf/open/floor/tile/blue/whiteblue{ - dir = 1 - }, -/area/campaign/jungle_outpost/outpost/medbay/lobby) "Ur" = ( /obj/structure/flora/grass/tallgrass/autosmooth, /turf/open/floor/plating/ground/dirtgrassborder2/corner{ @@ -10732,14 +9241,6 @@ }, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, /area/campaign/jungle_outpost/ground/jungle/south_west) -"Ux" = ( -/obj/structure/stairs/railstairs_vert{ - dir = 1 - }, -/turf/open/floor/plating/ground/dirtgrassborder2{ - dir = 1 - }, -/area/campaign/jungle_outpost/ground/jungle/east) "Uy" = ( /obj/structure/table, /obj/effect/spawner/random/engineering/toolbox, @@ -10778,21 +9279,12 @@ dir = 8 }, /area/campaign/jungle_outpost/ground/jungle) -"UE" = ( -/obj/structure/stairs/railstairs_vert{ - dir = 4 - }, -/turf/open/floor/plating/ground/dirtgrassborder2, -/area/campaign/jungle_outpost/ground/jungle/east) "UF" = ( /obj/structure/bed/chair/sofa/left{ dir = 8 }, /turf/open/floor/wood/alt_four, /area/campaign/jungle_outpost/outpost/command/captain) -"UG" = ( -/turf/open/floor/tile/blue/whiteblue, -/area/campaign/jungle_outpost/outpost/medbay) "UH" = ( /obj/machinery/light{ dir = 8 @@ -10821,13 +9313,6 @@ /obj/structure/cable, /turf/open/floor/tile/dark/gray, /area/campaign/jungle_outpost/outpost/living/canteen) -"UP" = ( -/obj/structure/table/reinforced, -/obj/item/assembly/prox_sensor, -/obj/item/tool/multitool, -/obj/item/clothing/head/hardhat/orange, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "UQ" = ( /obj/structure/flora/jungle/bush, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth, @@ -10838,10 +9323,6 @@ dir = 1 }, /area/campaign/jungle_outpost/outpost/command) -"US" = ( -/obj/machinery/vending/coffee, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) "UU" = ( /obj/structure/cable, /turf/open/floor, @@ -10896,12 +9377,6 @@ /obj/structure/flora/jungle/grass/thin, /turf/open/floor/plating/ground/dirt2, /area/campaign/jungle_outpost/ground/jungle) -"Vh" = ( -/obj/machinery/vending/nanomed, -/turf/open/floor/tile/blue/whiteblue{ - dir = 1 - }, -/area/campaign/jungle_outpost/outpost/medbay) "Vi" = ( /turf/open/floor/tile/red/redtaupe, /area/campaign/jungle_outpost/outpost/security) @@ -10913,21 +9388,8 @@ /area/campaign/jungle_outpost/ground/jungle/south) "Vk" = ( /obj/structure/flora/jungle/grass/thin, -/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, -/area/campaign/jungle_outpost/ground/jungle) -"Vl" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/obj/structure/platform{ - dir = 10 - }, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) -"Vm" = ( -/obj/structure/bed/chair/sofa/left{ - dir = 8 - }, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) "Vn" = ( /obj/structure/flora/jungle/grass, /turf/open/ground/grass/beach/corner{ @@ -10995,13 +9457,6 @@ dir = 4 }, /area/campaign/jungle_outpost/outpost/security/vault) -"VC" = ( -/obj/effect/spawner/random/misc/structure/supplycrate, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "VD" = ( /obj/structure/platform{ dir = 8 @@ -11047,20 +9502,6 @@ "VL" = ( /turf/open/liquid/water/river, /area/campaign/jungle_outpost/ground/river/east) -"VM" = ( -/obj/machinery/power/geothermal, -/obj/structure/cable, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) -"VN" = ( -/obj/machinery/power/apc/drained, -/obj/structure/cable, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) -"VO" = ( -/obj/machinery/door/airlock/colony/medical/hydroponics, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "VP" = ( /obj/structure/platform_decoration{ dir = 10 @@ -11078,10 +9519,6 @@ }, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/east) -"VS" = ( -/obj/machinery/sleeper, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) "VT" = ( /obj/structure/table/reinforced, /obj/effect/spawner/random/misc/folder, @@ -11093,13 +9530,18 @@ }, /turf/open/floor/freezer, /area/campaign/jungle_outpost/outpost/living/bathroom) -"VV" = ( -/turf/open/liquid/water/river, -/area/campaign/jungle_outpost/ground/river/north) -"VW" = ( -/obj/machinery/botany/editor, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) +"VX" = ( +/obj/structure/platform{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/landing) "VY" = ( /obj/structure/stairs/seamless{ dir = 1 @@ -11131,10 +9573,6 @@ }, /turf/open/floor, /area/campaign/jungle_outpost/outpost/command) -"Wd" = ( -/obj/effect/spawner/random/engineering/tool, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "We" = ( /obj/structure/catwalk, /obj/structure/platform{ @@ -11166,10 +9604,6 @@ }, /turf/closed/wall, /area/campaign/jungle_outpost/outpost/req) -"Wl" = ( -/obj/structure/bed/chair/sofa/corner, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) "Wm" = ( /obj/machinery/power/apc/drained{ dir = 4 @@ -11197,10 +9631,6 @@ dir = 9 }, /area/campaign/jungle_outpost/outpost/security) -"Wq" = ( -/obj/machinery/door/airlock/multi_tile/mainship/generic, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) "Wr" = ( /obj/structure/sink/bathroom{ dir = 1 @@ -11232,10 +9662,6 @@ }, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/east) -"Ww" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/coffeeweighted, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "Wx" = ( /obj/structure/flora/tree/jungle/small, /turf/open/ground/grass/weedable, @@ -11288,11 +9714,6 @@ dir = 8 }, /area/campaign/jungle_outpost/outpost/command) -"WI" = ( -/obj/machinery/door/airlock/colony/medical/hydroponics, -/obj/structure/cable, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "WJ" = ( /obj/structure/table/reinforced, /obj/machinery/computer/station_alert, @@ -11349,20 +9770,6 @@ /obj/structure/toilet, /turf/open/floor, /area/campaign/jungle_outpost/outpost/security) -"WS" = ( -/obj/machinery/door/airlock/multi_tile/mainship/generic, -/turf/open/floor/tile/blue/whiteblue{ - dir = 8 - }, -/area/campaign/jungle_outpost/outpost/medbay) -"WU" = ( -/obj/structure/stairs/edge{ - dir = 4 - }, -/turf/open/floor/plating/ground/dirtgrassborder2{ - dir = 4 - }, -/area/campaign/jungle_outpost/ground/jungle/east) "WV" = ( /obj/structure/flora/tree/jungle/small, /turf/open/ground/grass/weedable, @@ -11383,6 +9790,12 @@ }, /turf/open/floor/plating/ground/concrete, /area/campaign/jungle_outpost/outpost/landing) +"Xa" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags{ + dir = 1 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/south_west) "Xb" = ( /turf/open/floor/tile/neutral/full, /area/campaign/jungle_outpost/outpost/living/canteen) @@ -11391,10 +9804,6 @@ /obj/structure/flora/jungle/grass/thin, /turf/open/floor/plating/ground/dirtgrassborder2/autosmooth, /area/campaign/jungle_outpost/ground/jungle/north_west) -"Xd" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/snackweighted, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "Xe" = ( /obj/machinery/light{ dir = 4 @@ -11447,12 +9856,6 @@ dir = 1 }, /area/campaign/jungle_outpost/outpost/science) -"Xn" = ( -/obj/structure/cargo_container/hd{ - dir = 1 - }, -/turf/open/floor/plating/ground/concrete, -/area/campaign/jungle_outpost/outpost/req/containers) "Xo" = ( /obj/structure/flora/grass/tallgrass/autosmooth, /obj/structure/platform_decoration{ @@ -11464,16 +9867,6 @@ /obj/structure/bed/bunkbed, /turf/open/floor, /area/campaign/jungle_outpost/outpost/security) -"Xr" = ( -/obj/machinery/sleeper, -/turf/open/floor/tile/blue/whiteblue, -/area/campaign/jungle_outpost/outpost/medbay) -"Xs" = ( -/obj/structure/flora/jungle/large_bush, -/turf/open/floor/plating/ground/dirtgrassborder2{ - dir = 8 - }, -/area/campaign/jungle_outpost/ground/jungle/east) "Xt" = ( /obj/machinery/vending/nanomed, /obj/machinery/light{ @@ -11487,12 +9880,6 @@ /obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, /turf/open/floor, /area/campaign/jungle_outpost/outpost/command) -"Xw" = ( -/obj/structure/platform{ - dir = 8 - }, -/turf/closed/wall, -/area/campaign/jungle_outpost/outpost/outer/west) "Xx" = ( /obj/structure/prop/vehicle/van/destructible{ dir = 1 @@ -11511,10 +9898,6 @@ dir = 1 }, /area/campaign/jungle_outpost/outpost/security) -"XB" = ( -/obj/structure/cable, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/living/hydro) "XC" = ( /turf/open/floor/plating/ground/dirtgrassborder2/corner{ dir = 1 @@ -11574,9 +9957,6 @@ dir = 1 }, /area/campaign/jungle_outpost/outpost/req/depot) -"XN" = ( -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/outer/west) "XP" = ( /obj/structure/closet/secure_closet/freezer/fridge, /obj/item/reagent_containers/food/snacks/flour, @@ -11622,12 +10002,6 @@ "XW" = ( /turf/open/floor/plating/ground/dirt2, /area/campaign/jungle_outpost/ground/jungle/south) -"XX" = ( -/obj/structure/sink{ - dir = 4 - }, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "XY" = ( /obj/structure/catwalk, /obj/structure/platform{ @@ -11635,31 +10009,15 @@ }, /turf/open/liquid/water/river/autosmooth/deep, /area/campaign/jungle_outpost/ground/river/north) -"Yb" = ( -/obj/effect/spawner/random/misc/structure/supplycrate, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "Yc" = ( /turf/open/floor/tile/purple/whitepurplecorner{ dir = 8 }, /area/campaign/jungle_outpost/outpost/science/south) -"Yd" = ( -/obj/structure/sink{ - dir = 1 - }, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "Yf" = ( /obj/structure/prop/mainship/research/circuit_imprinter, /turf/open/floor/tile/purple/whitepurple, /area/campaign/jungle_outpost/outpost/science) -"Yg" = ( -/obj/structure/platform{ - dir = 6 - }, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/medbay) "Yh" = ( /obj/structure/cargo_container/red{ dir = 8 @@ -11672,18 +10030,16 @@ dir = 1 }, /area/campaign/jungle_outpost/ground/jungle/north_east) +"Yk" = ( +/obj/effect/spawner/modularmap/jungle_outpost/westtower, +/turf/open/space/basic, +/area/space) "Yl" = ( /obj/structure/flora/jungle/large_bush, /turf/open/ground/grass/beach/corner2{ dir = 4 }, /area/campaign/jungle_outpost/ground/jungle) -"Ym" = ( -/obj/machinery/power/monitor{ - name = "Main Power Grid Monitoring" - }, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) "Yn" = ( /obj/structure/flora/jungle/large_bush, /turf/open/floor/plating/ground/dirtgrassborder2, @@ -11742,29 +10098,13 @@ dir = 4 }, /area/campaign/jungle_outpost/outpost/living) -"YB" = ( -/obj/structure/platform{ - dir = 8 - }, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/engineering) "YC" = ( /turf/closed/wall, /area/campaign/jungle_outpost/outpost/medbay/chemistry) -"YD" = ( -/obj/effect/landmark/campaign_structure/phoron_crate, -/turf/open/floor/tile/blue/whiteblue{ - dir = 4 - }, -/area/campaign/jungle_outpost/outpost/medbay) "YE" = ( /obj/structure/cable, /turf/open/floor/wood/alt_four, /area/campaign/jungle_outpost/outpost/command/captain) -"YF" = ( -/obj/effect/landmark/campaign_structure/howitzer_objective, -/turf/open/ground/grass/weedable, -/area/campaign/jungle_outpost/ground/jungle/west) "YG" = ( /obj/structure/table/woodentable, /obj/effect/spawner/random/medical/pillbottle, @@ -11782,13 +10122,6 @@ /obj/machinery/light, /turf/open/floor/tile/dark, /area/campaign/jungle_outpost/outpost/science) -"YM" = ( -/obj/structure/table, -/obj/item/storage/box/botanydisk, -/obj/item/tool/analyzer/plant_analyzer, -/obj/item/reagent_containers/food/drinks/flask/vacuumflask, -/turf/open/floor/tile/hydro, -/area/campaign/jungle_outpost/outpost/living/hydro) "YO" = ( /obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, /obj/structure/platform{ @@ -11802,17 +10135,6 @@ }, /turf/open/floor, /area/campaign/jungle_outpost/outpost/landing/storage) -"YQ" = ( -/obj/structure/bed/chair/wheelchair{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/tile/blue/whiteblue{ - dir = 4 - }, -/area/campaign/jungle_outpost/outpost/medbay) "YR" = ( /obj/structure/bed/bunkbed, /turf/open/floor, @@ -11890,10 +10212,6 @@ /obj/structure/catwalk, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/north_west) -"Zl" = ( -/obj/machinery/light, -/turf/open/floor/tile/blue/whiteblue, -/area/campaign/jungle_outpost/outpost/medbay) "Zm" = ( /obj/machinery/power/apc/drained, /obj/structure/cable, @@ -11973,6 +10291,9 @@ /obj/effect/landmark/patrol_point/som/som_13, /turf/open/ground/grass/weedable, /area/campaign/jungle_outpost/ground/jungle/south_west) +"ZC" = ( +/turf/open/space/basic, +/area/space) "ZD" = ( /obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, /obj/structure/platform{ @@ -12008,11 +10329,6 @@ dir = 1 }, /area/campaign/jungle_outpost/outpost/command) -"ZJ" = ( -/obj/structure/table, -/obj/item/storage/donut_box, -/turf/open/floor/tile/white, -/area/campaign/jungle_outpost/outpost/medbay) "ZK" = ( /obj/structure/bed/chair/comfy{ dir = 4 @@ -12052,17 +10368,6 @@ "ZS" = ( /turf/closed/gm/dense, /area/campaign/jungle_outpost/ground/jungle/west) -"ZU" = ( -/obj/effect/spawner/random/engineering/structure/tank/fuelweighted, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/tile/dark, -/area/campaign/jungle_outpost/outpost/engineering) -"ZV" = ( -/obj/structure/cable, -/turf/open/floor, -/area/campaign/jungle_outpost/outpost/engineering) "ZW" = ( /obj/machinery/vending/snack, /turf/open/floor/tile/green/greentaupe{ @@ -13223,20 +11528,20 @@ ZS ZS Fd bE -bE -Ac -kS -Xw -Xw -Xw -Xw -Xw -jL -jL -Xw -tq -Bw -il +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +Yk bE bE bE @@ -13375,20 +11680,20 @@ bE Sa wT bE -bE -kS -lI -dv -pd -XN -lI -XN -XN -XN -OX -lI -tq -bE +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC bE bE ZS @@ -13527,20 +11832,20 @@ Rl Rl aH bE -bE -dw -XN -NV -eu -XN -xd -XN -XN -XN -XN -XN -AL -lU +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC Rl ZS ZS @@ -13679,20 +11984,20 @@ Sf FL Lv Rl -Et -vn -XN -XN -XN -XN -Aw -XN -XN -XN -XN -XN -Aw -SF +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC Hq ZS ZS @@ -13831,20 +12136,20 @@ bE wX Sf FL -Cl -vn -XN -XN -XN -Ei -lI -Fb -XN -XN -XN -XN -AL -Eq +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC Sf oU ZS @@ -13983,20 +12288,20 @@ ZS ZS ZS ct -Cl -dw -Fb -XN -BS -Fc -lI -lI -XN -yr -lI -lI -AL -il +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC bE il ZS @@ -14135,20 +12440,20 @@ ZS ZS jQ sg -Cl -dw -XN -XN -BS -sZ -lI -mG -XN -XN -OX -ej -AL -Fd +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC bE ZS ZS @@ -14284,23 +12589,23 @@ ZS ZS ZS Fd -YF +bE ct Hq -rQ -Wq -XN -XN -BS -XN -Wq -XN -ej -XN -NV -XN -sd -bE +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC bE ZS ZS @@ -14439,20 +12744,20 @@ bE bE ct Hq -uc -BS -BS -BS -BS -XN -XN -XN -XN -XN -NV -bv -sd -bE +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC bE bE fp @@ -14591,20 +12896,20 @@ bE bE ct kO -tr -dw -XN -XN -XN -Ei -lI -Fb -XN -XN -Dh -iT -AL -bE +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC bE bE eB @@ -14713,7 +13018,7 @@ BV BV BV Fe -uq +Fe Fe Fe BV @@ -14743,20 +13048,20 @@ Ie bE ct MR -bE -CB -lI -XN -dl -dl -lI -mG -XN -XN -XN -lI -CN -bE +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC bE bE eB @@ -14895,20 +13200,20 @@ ph ph ct Km -bE -iV -CB -Rb -Rb -Rb -Rb -Rb -cH -cH -Rb -CN -uC -il +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC bE bE Qp @@ -16087,24 +14392,24 @@ gg ve ve AN -AN -Vk -eL -mD -KY -mD -ts -Pp -Pp -Pp -Vl -IK -AN -AN -AN -bl -bl -bl +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +BA bl bl Go @@ -16239,24 +14544,24 @@ gg ve ve AN -sy -mD -mD -KY -Fr -Pp -Oz -fy -Po -fy -Oz -Pp -hl -Sk -AN -AN -bl -bl +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC bl bl bl @@ -16303,9 +14608,9 @@ PQ Xz Xz Xz -Xz -Xz -Xz +bI +iB +KB Uj Gd Gd @@ -16391,24 +14696,24 @@ gg AN AN Vk -KY -mD -ts -Pp -Oz -fy -ij -fy -Po -fy -fy -fy -Oz -Pp -Vl -AN -AN -AN +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC bl bl bl @@ -16543,24 +14848,24 @@ gg AN mD mD -mD -sy -pq -fy -fy -Po -OO -Po -Po -fy -fy -Po -fy -fy -EG -dV -KY -AN +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC bl bl bl @@ -16695,24 +15000,24 @@ AU BX mD mD -mD -Fr -Oz -Po -Po -Po -Oz -fy -Po -Po -Po -Po -Po -Po -Oz -hl -eL -AN +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC vH AN bl @@ -16767,7 +15072,7 @@ vZ vZ vZ eU -eU +yd Xz Xz Xz @@ -16847,24 +15152,24 @@ wO oM oM CO -Qc -pq -fy -fy -fy -Po -ij -yP -Po -XX -wZ -Po -LV -fy -fy -EG -Qc -KY +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC mD AN AU @@ -16910,7 +15215,7 @@ Xz Xz Xz eU -vZ +fE vZ vZ vZ @@ -16919,7 +15224,7 @@ sN vZ vZ vZ -eU +An Xz Xz Xz @@ -16999,24 +15304,24 @@ XC cX fQ kH -ts -Oz -fy -fy -fy -zg -ij -ij -VO -ij -ij -VO -ij -Oz -ij -ij -hl -mD +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC KY mD mD @@ -17069,9 +15374,9 @@ vZ vZ vZ vZ +fE vZ -vZ -eU +An Xz Xz Xz @@ -17151,24 +15456,24 @@ eL UJ hI kH -pq -YM -Po -Po -Po -Yd -ij -qI -Po -gL -gv -Po -fy -fy -sc -Yb -et -wO +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC oM CO dn @@ -17211,7 +15516,7 @@ QL Dp fa CV -Xz +Xa eU vZ vZ @@ -17223,7 +15528,7 @@ vZ eU eU eU -eU +bn Xz Xz cm @@ -17303,24 +15608,24 @@ UJ UJ ze kH -pq -Dc -FO -Po -Po -JQ -Oz -wu -Po -Po -mQ -Po -Po -Po -Po -Po -St -Hy +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC xw kH dn @@ -17363,7 +15668,7 @@ TJ Xz Xz Xz -Xz +Xa eU vZ vZ @@ -17455,24 +15760,24 @@ UJ UJ lA kH -pq -VW -FO -Po -Po -Po -St -Po -ot -ot -ot -ot -ot -ot -ot -ot -ot -hn +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC xw ld oM @@ -17515,14 +15820,14 @@ Dp Xz Xz Xz -Xz +Xa eU +fE vZ vZ -vZ -eU eU -Xz +GY +Gr Gd Gd Gd @@ -17607,24 +15912,24 @@ UJ dV NK kH -pq -kv -Po -Po -Po -Po -Po -Po -ot -Po -Po -Po -Po -Po -Po -mS -et -XC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC cX cX fQ @@ -17667,7 +15972,7 @@ Xz Ft Uj Ft -Xz +Nl eU eU eU @@ -17759,24 +16064,24 @@ UJ KY NK kH -rr -Oz -fy -fy -fy -Po -Oz -Ib -ot -fy -fy -Po -fy -fy -Jp -ij -Qs -mD +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC mD KY NK @@ -17886,49 +16191,49 @@ YS YS YS ve -VV -VV -VV -VV -ve -lw -AN -OY -OY -dn -dn -mD -eL -Qc -mD -mD -KY -sy -Qc -KY -mD -mD -mD -NK +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +sl kH -sy -pq -fy -fy -fy -Po -ij -wu -ot -fy -fy -Po -fy -fy -fy -EG -mD -mD +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC mD Sk Sc @@ -18038,49 +16343,49 @@ YS YS ve ve -eq -Dw -Dw -JS -JS -rN -JS -JS -JS -JS -JS -JS -JS -Dw -Dw -JS -JS -JS -JS -JS -JS -zs -mD -NK +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC kH -KY -vL -Oz -Po -Po -zg -ij -fN -ot -Po -Po -Po -Po -Po -Oz -Qs -mD -mD +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC mD mD NK @@ -18189,50 +16494,50 @@ YS YS ve ve -VV -mn -oe -oe -uN -vb -wa -Hs -dj -dj -dj -vb -xB -Ob -GA -Qv -og -qK -vb -Tw -Bm -hp -tu -hN -NK +ve +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC ld -CO -dn -pq -fy -fy -Po -ij -qn -ot -Po -Po -Po -fy -fy -EG -mD -mD -mD +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC mD mD sV @@ -18342,49 +16647,49 @@ ve ve ve ve -mn -oe -os -FK -vb -um -Hs -Hs -Hs -Hs -vb -zB -oe -oe -oe -oe -Zl -vb -NR -oe -UG -de -Nx -NK +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC xw -kH -dn -rr -io -Oz -in -ij -Le -ot -Po -zC -re -Oz -io -gF -mD -mD -Qc +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC UJ UJ Fv @@ -18494,49 +16799,49 @@ ve ve ve AN -mn -oe -ZJ -AQ -vb -ab -dj -dj -dj -Hs -vb -Fh -oe -oe -oe -oe -UG -vb -QK -oe -UG -de -Nw -Hy +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC xw -kH -dn -dn -dn -vL -io -ij -VN -ot -Po -ij -io -Qs -KX -XE -ZH -MA -UJ +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC UJ UJ UJ @@ -18643,52 +16948,52 @@ ve ve ve ve -ve -AN -AN -mn -oe -oe -cz -vb -vb -vb -vb -vb -fc -vb -Rs -Qi -Bu -vq -bJ -UG -vb -Vh -oe -yz -WS -Nw -iO -xw -ld -oM -if -jS -oM -oM -vL -WI -ij -VO -Qs -KX -KX -KX -KX -KX -WP -UJ +ve +AN +AN +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +xw +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC UJ UJ UJ @@ -18798,49 +17103,49 @@ ve AN AN mD -mn -qA -oe -oe -oe -oe -zt -yz -bD -oe -vb -vb -de -vb -de -dX -ln -vb -KC -oe -tD -dK -Nw -iO +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC xw -Jo -cX -cX -cX -cX -fQ -Qf -XB -ax -ax -BG -im -DN -DN -Fi -KX -XE -MA +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC UJ UJ dV @@ -18950,30 +17255,30 @@ AN AN mD mD -xr -Wl -Vm -xX -ho -US -de -dX -oe -oe -bD -Ti -cK -Ti -Bh -bW -yz -bD -TE -oe -UG -de -Nw -hn +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC xw kH mD @@ -19102,30 +17407,30 @@ Sk dn mD mD -xr -vb -vb -vb -vb -vb -vb -dX -oe -oe -oe -oe -oe -oe -oe -oe -JP -JP -JP -oe -UG -de -Yg -NK +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC Jo tf DH @@ -19254,30 +17559,30 @@ dn dn dn mD -xr -vv -sR -vx -de -kf -Bh -bW -oe -oe -oe -oe -oe -oe -oe -oe -JP -oe -VS -oe -Xr -tu -FD -NK +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC kH mD mD @@ -19406,30 +17711,30 @@ UJ dn dn mD -xr -wG -wG -wG -Gx -oe -oe -oe -oe -oe -oe -oe -oe -oe -oe -oe -JP -oe -qV -oe -NM -tu -mD -NK +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC sE mD mD @@ -19558,30 +17863,30 @@ UJ UJ dn mD -xr -Cg -xA -Ez -de -yu -Em -Io -nq -Io -YQ -aj -lT -BR -oe -YD -ef -oe -tD -dK -nJ -tu -Aa -NK +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC kH mD mD @@ -19710,30 +18015,30 @@ UJ UJ cj mD -Qz -gT -gT -gT -gT -gT -gT -gT -gT -gT -HZ -EF -EF -EF -bY -HZ -dD -oe -du -vb -gT -pD -KY -NK +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC kH mD UJ @@ -19862,30 +18167,30 @@ mD KY mD mD -mD -mD -dn -dn -dn -dn -mD -mD -mD -VP -Ps -Fj -Dj -ut -ya -EF -dD -oe -Iy -tu -OW -KY -mD -NK +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC xU UJ UJ @@ -20014,30 +18319,30 @@ AN mD mD mD -mD -mD -dV -dn -dn -KY -mD -mD -mD -qd -Ps -Uq -ya -nM -fJ -EF -dD -tD -iU -tu -zc -mD -mD -NK +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC kH UJ Sr @@ -20166,30 +18471,30 @@ pA AN mD KY -mD -mD -mD -mD -mD -mD -KY -qd -Lz -cs -HZ -lb -un -Ph -Hg -HZ -tA -RO -EF -HZ -ic -Db -mD -NK +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC ld vJ tp @@ -20404,7 +18709,7 @@ cm cm Uj Xz -JK +Xz Gd Gd Gd @@ -22012,10 +20317,10 @@ YC YC YC mL -ZH +TD MA -XC -fQ +kc +JF DE Ga yp @@ -22614,7 +20919,7 @@ kH mD mD mD -KY +py mD PP KX @@ -22642,7 +20947,7 @@ mD KY mD mD -Hw +wO oM MD kH @@ -22921,7 +21226,7 @@ fQ ld oM oM -HF +nL DN DN jV @@ -23070,10 +21375,10 @@ mD mD mD Wo -cX +Tj cX fQ -ld +uB oM oM oM @@ -23377,9 +21682,9 @@ gn Fg ND mD -wB +mD Qc -NK +md xw kH dV @@ -23441,20 +21746,20 @@ EX EX ea LG -pt -cJ -cJ -ry -ry -ry -ry -ry -ry -cJ -cJ -cJ -cJ -nd +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +MW ea sk ea @@ -23534,7 +21839,7 @@ mD NK xw kH -mD +zd mD tp QR @@ -23593,20 +21898,20 @@ EX EX EX ea -Gb -Bp -cJ -qE -qD -AE -cJ -cJ -mA -cJ -cJ -cJ -cJ -nd +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC WV EX EX @@ -23683,8 +21988,8 @@ qG mD mD wO -MD -xw +mM +nh kH mD mD @@ -23745,20 +22050,20 @@ EX EX EX EX -Gb -nK -cJ -pn -dq -wt -cJ -cJ -hF -cJ -cJ -cJ -cJ -nd +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC EX EX RJ @@ -23897,20 +22202,20 @@ ea EX EX EX -Gb -nK -cJ -tN -dq -wt -cJ -cJ -JJ -cJ -cJ -BJ -cJ -rd +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC EX ea EX @@ -24021,7 +22326,7 @@ EW In Xb tz -nH +PS Kp qF Ji @@ -24049,20 +22354,20 @@ EX ea jP EX -Gb -lx -cJ -ry -dq -wt -cJ -cJ -cJ -cJ -cJ -NS -cJ -yq +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC EX EX EX @@ -24201,20 +22506,20 @@ nI LG nI ea -Gb -cJ -cJ -ry -cJ -cJ -cJ -cJ -cJ -cJ -cJ -Hv -cJ -nd +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC EX ea EX @@ -24353,20 +22658,20 @@ nI nI nI EX -Gb -cJ -cJ -ry -cJ -cJ -cJ -cJ -cJ -cJ -cJ -cJ -cJ -nd +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC EX EX ea @@ -24503,22 +22808,22 @@ sk nI nI LG -PE -EX -Gb -cJ -cJ -aU -BN -rR -mq -cJ -cJ -cJ -Bp -cJ -cJ -rd +EX +EX +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC EX ea sk @@ -24657,20 +22962,20 @@ EX EX EX EX -Gb -IW -cJ -ry -cJ -cJ -cJ -cJ -cJ -cJ -nK -vo -cJ -rd +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC nI nI nI @@ -24809,20 +23114,20 @@ WV EX EX ea -Gb -Xn -cJ -ry -cJ -MK -wU -mq -cJ -cJ -lx -cJ -cJ -nd +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC nI nI nI @@ -24863,7 +23168,7 @@ bA nO bA bA -KF +bA nO xK HV @@ -24961,20 +23266,20 @@ RL EX EX jP -Gb -Ty -cJ -ry -cJ -cJ -cJ -cJ -cJ -cJ -cJ -cJ -cJ -nd +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC sk nI nI @@ -25113,20 +23418,20 @@ EX EX EX EX -Gb -cJ -cJ -hb -gw -cJ -cJ -cJ -cJ -dJ -AM -AM -AM -Ae +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC jP nI nI @@ -28562,7 +26867,7 @@ mD mD lA kH -wB +mD dn dn qs @@ -28831,44 +27136,44 @@ Jh Jh Jh Jh +tB +at +at +at Jh Jh Jh -Jh -Jh -Jh -Jh -Jh -Jh -Jh -Jh -Jh +at +at +at +at +at yn Ct yD CT CT -CT -CT -mi -mi -bo -xJ -xJ -Jy -Nk -Nk -Ux -YB -kg -ZV -YB -UE -Nk -yD -TF -XV -CT +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +tj CT CT CT @@ -28975,8 +27280,7 @@ Ex Ex Ho EU -IZ -jt +CI jt jt jt @@ -28984,6 +27288,7 @@ jt jt jt jt +yW jt jt jt @@ -28995,32 +27300,32 @@ jt jt jt jt -wY +rF Ct yD CT CT -CT -qp -mi -TF -Ct -WE -nP -nP -nP -lX -vd -ee -iH -Ew -ee -dY -TP -br -TF -TF -TF +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC mT CT CT @@ -29127,7 +27432,7 @@ he uY EU EU -IZ +CI jt jt jt @@ -29147,32 +27452,32 @@ jt nU jt jt -wY +rF Ct vN CT CT -TF -TF -TF -TF -Ct -yD -vd -dO -dO -dO -BF -PF -iH -ty -pN -BF -dO -dO -dY -zu -TF +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC TF TF TF @@ -29279,7 +27584,7 @@ EU EU EU EU -IZ +CI jt jt jt @@ -29290,7 +27595,7 @@ jt jt jt jt -jt +fM jt Mh Mh @@ -29299,32 +27604,32 @@ jt MM jt jt -wY +rF Ct Nk vN xJ -xJ -xJ -xJ -xJ -iz -yD -Up -iH -iH -De -BF -fo -iH -ty -iH -UP -tS -tS -RF -Mp -XV +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC TF TF XV @@ -29456,27 +27761,27 @@ GX Nk SN nP -nP -nP -nP -wS -Xs -br -Up -VM -iH -VM -BF -OV -iH -ty -iH -nn -iH -fW -RF -XV -XV +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC CT CT zu @@ -29597,7 +27902,7 @@ jt jt jt jt -jt +fM jt jt Ds @@ -29608,27 +27913,27 @@ Oi Nk PD TF -TF -TF -TF -TF -TF -Wv -Up -VM -iH -VM -BF -mB -fS -ty -iH -cM -ZU -fi -RF -eJ -TF +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC CT CT CT @@ -29742,10 +28047,10 @@ BT hV hV ZR -tX -tX -tX -tX +VX +QQ +QQ +QQ BO jt jt @@ -29755,32 +28060,32 @@ jt jt jt jt -wY +rF qz nP br TF -vd -Sh -Sh -Sh -Sh -Sh -BF -VM -ty -VM -BF -BF -BF -ty -zb -BF -BF -BF -BF -dY -CT +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC CT TF TF @@ -29898,7 +28203,7 @@ jf jf jf jf -HO +xe Pd jt jt @@ -29907,32 +28212,32 @@ jt jt jt jt -wY +rF If Mp XV TF -Up -iS -zl -iH -zl -eO -BF -iH -ty -iH -zl -iH -iH -ty -iH -iH -zn -sP -iH -RF -bo +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC xJ xJ xJ @@ -30050,41 +28355,41 @@ jf jf jf jf -HO +xe Pd jt -fM +jt jt jt Yh jt jt -wY +rF TF zu TF TF -Up -iS -iH -Ag -iH -iH -CJ -iH -ty -ty -ty -ty -ty -ty -ty -ty -ty -iH -iH -CJ -na +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC Nk WE nP @@ -30198,11 +28503,11 @@ jf jf jf jf +kA jf jf jf -jf -HO +xe jt jt jt @@ -30211,32 +28516,32 @@ jt GF jt jt -wY +rF TF TF TF XV -Up -tS -bs -Wd -iH -Xd -BF -zr -Nn -iH -iH -NF -la -iN -iH -Se -ty -fS -Ww -RF -Ct +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC WE br TF @@ -30350,11 +28655,11 @@ FM FM FM FM -FM -jf +po +ue jf jf -HO +bx jt jt jt @@ -30363,32 +28668,32 @@ jt GF jt jt -wY +rF TF TF IJ TF -Up -BF -ee -ee -LW -BF -BF -BF -BF -Ck -iH -zr -BF -BF -BF -BF -gD -BF -BF -Np -Ct +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC yD TF za @@ -30510,37 +28815,37 @@ JW hv jt jt -jt +fM jt mP jt jt -wY +rF eJ TF TF Wv -LX -iH -iH -iH -iH -zl -iH -cc -BF -mb -iH -De -BF -PM -qS -iH -ty -iH -es -Da -Ct +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC PD TF lv @@ -30672,27 +28977,27 @@ VR VR VR VR -ci -iH -iH -iH -iH -iH -iH -vA -BF -nX -iH -iH -BF -xF -ty -ty -ty -iH -es -bo -iz +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC yD zu lv @@ -30824,27 +29129,27 @@ pw pw pw pw -iH -iH -iH -VM -iH -VM -iH -mB -BF -VC -ty -ty -FE -ty -iH -ft -ft -ft -RF -Ct -WE +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC br mi lv @@ -30976,27 +29281,27 @@ BY TF TF va -LX -iH -Wd -VM -iH -VM -iH -Ca -BF -zr -ty -zr -BF -Ym -fS -eK -as -eK -RF -Ct -oH +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC TF mi lv @@ -31128,27 +29433,27 @@ TF TF zu XV -Up -hm -iH -VM -iH -VM -iH -BF -BF -ee -gD -ee -BF -Pm -Pm -Pm -Pm -Pm -Np -Ct -yD +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC TF mi lv @@ -31268,10 +29573,10 @@ jf jf HO jt -YP -YP -YP -YP +fY +fY +fY +fY YP YP YP @@ -31280,27 +29585,27 @@ TF If CC hk -Up -iH -iH -VM -iH -VM -De -BF -zr -iH -ty -iH -es -BY -TF -TF -TF -TF -zu -Ct -sM +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC Vr mi lv @@ -31432,27 +29737,27 @@ GJ hk hY Vb -Up -NN -iH -ty -ty -ty -ty -FE -ty -ty -ty -iH -es -TF -TF -TF -TF -TF -TF -Ct -Hn +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC Mp TF lv @@ -31584,27 +29889,27 @@ zK Vb Vb Vb -Up -BF -zr -iH -iH -pB -iH -BF -BF -wj -BF -wj -es -CT -TF -TF -mT -XV -TF -Ct -yD +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC TF TF CY @@ -31736,27 +30041,27 @@ zK Vb Vb Vb -CR -Pm -Pm -LW -Pm -Pm -Pm -Pm -Pm -Pm -Pm -Pm -Np -CT -TF -TF -bo -xJ -xJ -uU -yD +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC TF TF TF @@ -31888,27 +30193,27 @@ is Rz Vb Cj -Vb -Zv -bo -WU -it -TF -mi -mi -CT -CT -CT -CT -CT -CT -CT -Mp -Ct -WE -nP -nP -br +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC +ZC TF TF mT @@ -32082,7 +30387,7 @@ Nk Nk yD TF -Il +XV TF TF TF @@ -33123,7 +31428,7 @@ TF TF CT CT -vO +TF nw nw OE diff --git a/_maps/map_files/Campaign maps/nt_base/nt_base.dmm b/_maps/map_files/Campaign maps/nt_base/nt_base.dmm index 5b5c4dbe07b6d..81d55444f1649 100644 --- a/_maps/map_files/Campaign maps/nt_base/nt_base.dmm +++ b/_maps/map_files/Campaign maps/nt_base/nt_base.dmm @@ -449,7 +449,7 @@ /turf/open/floor/plating/ground/ice, /area/gelida/caves/west_caves) "arF" = ( -/obj/structure/holohoop{ +/obj/structure/hoop{ dir = 4; id = "lvbasketball"; side = "left" @@ -1511,7 +1511,7 @@ /turf/open/floor/mainship/stripesquare, /area/gelida/cavestructuretwo) "beU" = ( -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/gelida/caves/central_caves/garbledradio) "beW" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -1752,7 +1752,7 @@ }, /area/gelida/landing_zone_2) "bmp" = ( -/obj/structure/holohoop{ +/obj/structure/hoop{ pixel_y = 27 }, /obj/item/toy/beach_ball/holoball{ @@ -9771,7 +9771,7 @@ /turf/open/floor/prison/sterilewhite, /area/gelida/landing_zone_forecon/UD6_Tornado) "hju" = ( -/obj/structure/holohoop{ +/obj/structure/hoop{ dir = 8; id = "lvbasketball"; side = "right" @@ -17986,7 +17986,7 @@ /area/gelida/indoors/a_block/executive) "nkE" = ( /obj/structure/table/mainship, -/obj/item/clothing/suit/chef/classic, +/obj/item/clothing/suit/storage/chef/classic, /turf/open/floor/prison/kitchen, /area/gelida/indoors/a_block/kitchen) "nkH" = ( @@ -19647,7 +19647,7 @@ /area/gelida/landing_zone_2) "owj" = ( /obj/effect/landmark/lv624/fog_blocker/xeno_spawn, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/gelida/caves/central_caves) "owm" = ( /obj/machinery/door/airlock/mainship/medical/glass{ @@ -21581,7 +21581,7 @@ /turf/open/floor/prison/plate, /area/gelida/indoors/a_block/admin) "pLW" = ( -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/gelida/powergen) "pMg" = ( /obj/structure/flora/ausbushes/pointybush{ @@ -23202,7 +23202,7 @@ /turf/open/floor/prison/whitegreen/full, /area/gelida/indoors/a_block/fitness) "qVp" = ( -/obj/structure/holohoop, +/obj/structure/hoop, /turf/open/floor/prison/whitepurple/full{ dir = 4 }, @@ -23331,7 +23331,7 @@ /turf/open/floor/mainship/stripesquare, /area/gelida/indoors/a_block/security) "qZL" = ( -/obj/structure/bed/chair/wheelchair, +/obj/vehicle/ridden/wheelchair, /obj/machinery/atmospherics/components/unary/vent_pump, /turf/open/floor/prison/whitepurple/full{ dir = 4 @@ -23346,7 +23346,7 @@ /turf/open/floor/wood, /area/gelida/indoors/a_block/fitness) "raa" = ( -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/gelida/caves/west_caves/garbledradio) "raz" = ( /obj/effect/spawner/random/misc/structure/supplycrate/secureweighted, @@ -24128,7 +24128,7 @@ pixel_x = 7; pixel_y = -9 }, -/obj/structure/holohoop{ +/obj/structure/hoop{ dir = 4 }, /turf/open/floor/plating/ground/snow/layer0, @@ -27071,7 +27071,7 @@ }, /area/gelida/indoors/a_block/admin) "tKl" = ( -/obj/item/trash/barcardine, +/obj/item/trash/barcaridine, /turf/open/floor/prison, /area/gelida/indoors/a_block/hallway) "tKn" = ( @@ -28497,7 +28497,7 @@ /turf/open/floor/prison/darkbrown/full, /area/gelida/landing_zone_1) "uPv" = ( -/obj/item/trash/barcardine, +/obj/item/trash/barcaridine, /turf/open/floor/prison/blue, /area/gelida/indoors/a_block/hallway) "uPN" = ( @@ -29176,7 +29176,7 @@ /area/gelida/indoors/a_block/security) "vqi" = ( /obj/effect/landmark/lv624/fog_blocker/xeno_spawn, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/gelida/outdoors/rock) "vqz" = ( /obj/effect/spawner/random/engineering/structure/tank/waterweighted, @@ -32289,9 +32289,6 @@ /obj/effect/turf_decal/warning_stripes/stripedsquare/tile/border, /turf/open/floor/mainship/stripesquare, /area/gelida/indoors/b_block/hydro) -"xIt" = ( -/turf/closed/mineral/smooth/darkfrostwall, -/area/gelida/outdoors/rock) "xIu" = ( /obj/structure/rack/nometal, /obj/item/frame/table{ @@ -33418,87 +33415,87 @@ nsK "} (2,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rIi rIi rIi @@ -33640,88 +33637,88 @@ nsK "} (3,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rIi rIi rIi @@ -33862,89 +33859,89 @@ nsK "} (4,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rIi rIi rIi @@ -34084,88 +34081,88 @@ nsK "} (5,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS yiB yiB -xIt -xIt +cgS +cgS yiB yiB yiB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rIi rIi rIi @@ -34306,12 +34303,12 @@ nsK "} (6,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS yiB dII ewI @@ -34319,77 +34316,77 @@ geP gBm gZL yiB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rIi rIi rIi @@ -34528,11 +34525,11 @@ nsK "} (7,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS yiB cDx dKf @@ -34542,75 +34539,75 @@ geP aPS gZL yiB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rIi rIi rIi @@ -34750,10 +34747,10 @@ nsK "} (8,1,1) = {" cgS -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS yiB yiB cDx @@ -34765,73 +34762,73 @@ bgd hRV yiB yiB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS wJU wJU -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uew -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rIi rIi rIi @@ -34972,9 +34969,9 @@ nsK "} (9,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS wpv bem iUh @@ -34988,72 +34985,72 @@ geP iUh sUt jBU -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS wJU wJU agw -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS uew uew uew uew uew uew -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rIi rIi rIi @@ -35194,8 +35191,8 @@ nsK "} (10,1,1) = {" cgS -xIt -xIt +cgS +cgS wpv wpv bjn @@ -35211,40 +35208,40 @@ iUh sUt jBU jBU -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS bOD wJU wJU @@ -35264,19 +35261,19 @@ uew uew uew uew -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rIi rIi rIi @@ -35416,8 +35413,8 @@ nsK "} (11,1,1) = {" cgS -xIt -xIt +cgS +cgS wpv wpv bjn @@ -35434,38 +35431,38 @@ jua jBU jBU wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS wJU wJU wJU @@ -35486,19 +35483,19 @@ pLC xvz qFN jFo -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rIi rIi rIi @@ -35638,8 +35635,8 @@ nsK "} (12,1,1) = {" cgS -xIt -xIt +cgS +cgS wpv wpv bjn @@ -35657,36 +35654,36 @@ dOs jBU dOs wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cJC -xIt -xIt -xIt +cgS +cgS +cgS wJU wJU wJU @@ -35708,18 +35705,18 @@ kUg pJc abp oqu -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rIi rIi rIi @@ -35860,7 +35857,7 @@ nsK "} (13,1,1) = {" cgS -xIt +cgS wpv wpv wpv @@ -35881,24 +35878,24 @@ wpv wpv wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS xjB xjB xjB @@ -35930,17 +35927,17 @@ hFv gHC qqv niX -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uew -xIt -xIt -xIt +cgS +cgS +cgS uew -xIt +cgS rIi rIi rIi @@ -36082,8 +36079,8 @@ nsK "} (14,1,1) = {" cgS -xIt -xIt +cgS +cgS wpv wpv bjn @@ -36105,20 +36102,20 @@ wpv wpv wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS xjB xjB xjB @@ -36153,10 +36150,10 @@ lYx xPd fJd uew -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS uew uew uew @@ -36304,8 +36301,8 @@ nsK "} (15,1,1) = {" cgS -xIt -xIt +cgS +cgS wpv wpv bem @@ -36329,16 +36326,16 @@ wpv wpv wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS xjB xjB xjB @@ -36376,8 +36373,8 @@ xPd uew uew uew -xIt -xIt +cgS +cgS uew uew eue @@ -36526,7 +36523,7 @@ nsK "} (16,1,1) = {" cgS -xIt +cgS wpv wpv wpv @@ -36553,13 +36550,13 @@ wpv wpv wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS xjB xjB xjB @@ -36748,8 +36745,8 @@ nsK "} (17,1,1) = {" cgS -xIt -xIt +cgS +cgS wpv wpv bjn @@ -36776,10 +36773,10 @@ wpv wpv wpv wpv -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS xjB xjB xjB @@ -36792,8 +36789,8 @@ xjB xjB xjB xjB -xIt -xIt +cgS +cgS cJC rfq rfq @@ -36970,10 +36967,10 @@ nsK "} (18,1,1) = {" cgS -xIt -xIt +cgS +cgS wpv -xIt +cgS yiB yiB aPS @@ -36985,7 +36982,7 @@ iUh aPS yiB yiB -xIt +cgS jBU dOs wpv @@ -36999,9 +36996,9 @@ wpv wpv wpv wpv -xIt -xIt -xIt +cgS +cgS +cgS xjB xjB xjB @@ -37011,16 +37008,16 @@ xjB xjB wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tWN wJU wJU @@ -37192,11 +37189,11 @@ nsK "} (19,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS yiB cQx dUu @@ -37206,8 +37203,8 @@ iUh hgq hRV yiB -xIt -xIt +cgS +cgS jBU wpv dOs @@ -37231,18 +37228,18 @@ xjB xjB xjB mPF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS otX tWN wJU @@ -37414,11 +37411,11 @@ nsK "} (20,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS yiB yiB yiB @@ -37428,8 +37425,8 @@ gLz yiB yiB yiB -xIt -xIt +cgS +cgS wpv wpv wpv @@ -37450,21 +37447,21 @@ xjB ugu xjB xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS xbv tWN wJU @@ -37636,11 +37633,11 @@ nsK "} (21,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS yiB lmN lUi @@ -37650,8 +37647,8 @@ sWh hsw kuB yiB -xIt -xIt +cgS +cgS wpv wpv wpv @@ -37671,23 +37668,23 @@ xjB xjB xjB xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS otX tWN tWN @@ -37858,8 +37855,8 @@ nsK "} (22,1,1) = {" cgS -xIt -xIt +cgS +cgS yiB yiB yiB @@ -37873,7 +37870,7 @@ wgu fTM yiB yiB -xIt +cgS wpv wpv wpv @@ -37891,30 +37888,30 @@ wpv xjB xjB xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS otX otX tWN -xIt -xIt +cgS +cgS eue tzc eue @@ -37927,8 +37924,8 @@ rIi tzc tzc uew -xIt -xIt +cgS +cgS uew uew uew @@ -38080,7 +38077,7 @@ nsK "} (23,1,1) = {" cgS -xIt +cgS yiB yiB aHZ @@ -38095,7 +38092,7 @@ upW upW sWh yiB -xIt +cgS wpv wpv wpv @@ -38112,37 +38109,37 @@ wpv wpv wpv xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tWN tWN -xIt -xIt -xIt +cgS +cgS +cgS tzc tzc tzc -xIt -xIt -xIt +cgS +cgS +cgS eue tzc oWT @@ -38150,7 +38147,7 @@ tzc uew uew uew -xIt +cgS uew uew uew @@ -38302,7 +38299,7 @@ nsK "} (24,1,1) = {" cgS -xIt +cgS yiB aeZ aNR @@ -38334,38 +38331,38 @@ wpv wpv wpv xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tWN otX -xIt -xIt -xIt +cgS +cgS +cgS tzc tzc eue -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS tzc uew uew @@ -38524,8 +38521,8 @@ nsK "} (25,1,1) = {" cgS -xIt -xIt +cgS +cgS sWh cZX upW @@ -38557,36 +38554,36 @@ wpv wpv xjB mPF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS xjB xjB xjB -xIt +cgS tWN otX tWN tWN -xIt +cgS tzc tzc eue tzc tzc -xIt -xIt +cgS +cgS eue tzc uew @@ -38746,8 +38743,8 @@ nsK "} (26,1,1) = {" cgS -xIt -xIt +cgS +cgS sWh apA bAh @@ -38781,16 +38778,16 @@ xjB xjB xjB wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS xjB xjB xjB @@ -38968,8 +38965,8 @@ nsK "} (27,1,1) = {" cgS -xIt -xIt +cgS +cgS sZZ upW upW @@ -39005,12 +39002,12 @@ xjB xjB xjB xjB -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS xjB xjB xjB @@ -39190,7 +39187,7 @@ nsK "} (28,1,1) = {" cgS -xIt +cgS yiB atX axk @@ -39227,10 +39224,10 @@ xjB xjB xjB xjB -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS xjB xjB xjB @@ -39412,7 +39409,7 @@ nsK "} (29,1,1) = {" cgS -xIt +cgS yiB yiB sWh @@ -39465,8 +39462,8 @@ xjB cJC tWN tWN -xIt -xIt +cgS +cgS eue tzc uew @@ -39634,8 +39631,8 @@ nsK "} (30,1,1) = {" cgS -xIt -xIt +cgS +cgS yiB sWh cLZ @@ -39649,7 +39646,7 @@ dkT kuB yiB yiB -xIt +cgS wpv wpv wpv @@ -39684,11 +39681,11 @@ mPF xjB xjB cJC -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS bPS tzc uew @@ -39856,9 +39853,9 @@ nsK "} (31,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS yiB dhv yiB @@ -39870,8 +39867,8 @@ yiB yiB yiB yiB -xIt -xIt +cgS +cgS wpv wpv wpv @@ -39883,8 +39880,8 @@ wpv wpv wpv wpv -xIt -xIt +cgS +cgS wpv wpv xjB @@ -39903,14 +39900,14 @@ xjB xjB xjB xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc eue tzc @@ -40078,23 +40075,23 @@ nsK "} (32,1,1) = {" cgS -xIt -xIt +cgS +cgS jBU wpv njJ jBU -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS wpv dOs wpv @@ -40102,14 +40099,14 @@ wpv wpv wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS wpv xjB xjB @@ -40124,13 +40121,13 @@ xjB xjB xjB xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc tzc tzc @@ -40300,39 +40297,39 @@ nsK "} (33,1,1) = {" cgS -xIt -xIt +cgS +cgS jBU jBU njJ wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS wpv wpv wpv wpv wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS xjB xjB xjB @@ -40343,15 +40340,15 @@ ugu xjB xjB xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc tzc eue @@ -40522,40 +40519,40 @@ nsK "} (34,1,1) = {" cgS -xIt -xIt +cgS +cgS wpv arf njJ -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS wpv wpv wpv wpv wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS xjB xjB dao @@ -40563,17 +40560,17 @@ xjB xjB xjB xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc eue eue @@ -40744,39 +40741,39 @@ nsK "} (35,1,1) = {" cgS -xIt -xIt +cgS +cgS wpv wpv fEZ -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS wpv wpv wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS xjB xjB xjB @@ -40784,17 +40781,17 @@ xjB xjB xjB xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc tzc eue @@ -40966,58 +40963,58 @@ nsK "} (36,1,1) = {" cgS -xIt +cgS wpv wpv wpv eFS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS wpv wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS xjB xjB xjB xjB xjB xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc eue eue @@ -41188,37 +41185,37 @@ nsK "} (37,1,1) = {" cgS -xIt +cgS wpv wpv dOs fEZ -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS wpv wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS xjB xjB xjB @@ -41226,21 +41223,21 @@ xjB xjB xjB xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc eue eue @@ -41410,59 +41407,59 @@ nsK "} (38,1,1) = {" cgS -xIt +cgS wpv wpv wpv fEZ -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS dOs wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS mPF xjB xjB xjB xjB mPF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc tzc eue @@ -41632,60 +41629,60 @@ nsK "} (39,1,1) = {" cgS -xIt -xIt +cgS +cgS wpv wpv fEZ wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS wpv wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS xjB xjB xjB xjB xjB xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc tzc tzc @@ -41854,60 +41851,60 @@ nsK "} (40,1,1) = {" cgS -xIt -xIt +cgS +cgS wpv wpv fEZ wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS wpv wpv wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS xjB xjB xjB xjB xjB xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc bPS tzc @@ -42076,61 +42073,61 @@ nsK "} (41,1,1) = {" cgS -xIt -xIt +cgS +cgS wpv wpv fEZ wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS wpv wpv wpv wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS xjB xjB xjB xjB xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc tzc uew @@ -42298,61 +42295,61 @@ nsK "} (42,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS wpv fEZ wpv wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS wpv wpv wpv wpv wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS raa xjB xjB xjB xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc tzc uew @@ -42520,61 +42517,61 @@ nsK "} (43,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS dOs fEZ fEZ fEZ gKU -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS wpv wpv wpv wpv wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS xjB xjB xjB xjB xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc tzc uew @@ -42742,61 +42739,61 @@ nsK "} (44,1,1) = {" cgS -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS wpv wpv wpv fEZ wpv -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS wpv wpv wpv wpv wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS xjB xjB xjB xjB xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS eue uew uew @@ -42964,61 +42961,61 @@ nsK "} (45,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS wpv wpv fEZ wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS dOs wpv dOs wpv wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS xjB xjB xjB xjB xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew uew @@ -43186,36 +43183,36 @@ nsK "} (46,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS wpv wpv fEZ dOs wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS wpv wpv fyL wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS xjB xjB xjB @@ -43223,24 +43220,24 @@ xjB xjB xjB xjB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew esd @@ -43408,36 +43405,36 @@ nsK "} (47,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS wpv gKU wpv wpv wpv -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb kNR ubb @@ -43447,22 +43444,22 @@ ubb ubb ubb tJs -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc uew uew @@ -43630,35 +43627,35 @@ nsK "} (48,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS qzH uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb @@ -43670,22 +43667,22 @@ ubb ubb ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew uew @@ -43852,40 +43849,40 @@ nsK "} (49,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS qzH uGF uGF uGF -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uGF uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb ubb -xIt +cgS ubb ubb ubb @@ -43893,21 +43890,21 @@ ubb ubb ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew uew @@ -44074,41 +44071,41 @@ nsK "} (50,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS qzH uGF uGF uGF -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS uGF uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb ubb ubb -xIt -xIt +cgS +cgS ubb ubb ubb @@ -44116,20 +44113,20 @@ ubb rvq ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew iiB uew @@ -44296,62 +44293,62 @@ nsK "} (51,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS uGF qzH uGF uGF uGF -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS xEg uGF uGF xEg -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb ubb ubb -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS ubb ubb ubb ubb ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew uew @@ -44518,62 +44515,62 @@ nsK "} (52,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS uGF qzH uGF uGF uGF -xIt -xIt -xIt +cgS +cgS +cgS uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb ubb ubb -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS tJs ubb ubb ubb ubb tJs -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew uew @@ -44740,44 +44737,44 @@ nsK "} (53,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS uGF qzH xEg uGF uGF -xIt -xIt -xIt +cgS +cgS +cgS uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb ubb ubb -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vqi oHy oHy @@ -44792,10 +44789,10 @@ vqi vqi vqi vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS uew uew uew @@ -44962,44 +44959,44 @@ nsK "} (54,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS qzH uGF uGF uGF -xIt -xIt -xIt +cgS +cgS +cgS uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tJs ubb rvq tJs -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS vqi ubb ubb @@ -45010,14 +45007,14 @@ ubb ubb ubb ubb -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS uew uew uew @@ -45184,44 +45181,44 @@ nsK "} (55,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS uGF qzH uGF uGF uGF uGF -xIt +cgS uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -ubb -ubb -ubb -ubb -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +ubb +ubb +ubb +ubb +cgS +cgS +cgS +cgS +cgS +cgS vqi ubb ubb @@ -45233,13 +45230,13 @@ ubb ubb ubb ubb -xIt -xIt +cgS +cgS vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS uew uew uew @@ -45406,13 +45403,13 @@ nsK "} (56,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS qzH uGF xEg @@ -45422,28 +45419,28 @@ uGF uGF uGF xEg -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -ubb -ubb -ubb -ubb -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +ubb +ubb +ubb +ubb +cgS +cgS +cgS +cgS +cgS +cgS vqi ubb ubb @@ -45455,13 +45452,13 @@ ubb ubb ubb ubb -xIt -xIt +cgS +cgS vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS uew uew rSi @@ -45628,13 +45625,13 @@ nsK "} (57,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS qzH xEg uGF @@ -45643,31 +45640,31 @@ uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb ubb ubb ubb -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vqi -xIt +cgS ubb ubb ubb @@ -45678,12 +45675,12 @@ ubb ubb ubb ubb -xIt +cgS vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS uew uew vQm @@ -45850,46 +45847,46 @@ nsK "} (58,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS qzH qzH uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb ubb ubb ubb -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vqi -xIt +cgS ubb ubb ubb @@ -45900,12 +45897,12 @@ ubb ubb ubb ubb -xIt +cgS vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS uew iiB skK @@ -46072,32 +46069,32 @@ nsK "} (59,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS qzH uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb @@ -46105,13 +46102,13 @@ ubb ubb ubb ubb -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vqi -xIt +cgS ubb ubb ubb @@ -46122,12 +46119,12 @@ ubb ubb tJs ubb -xIt +cgS vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS uew uew vQm @@ -46294,32 +46291,32 @@ nsK "} (60,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS qzH uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb tJs @@ -46327,14 +46324,14 @@ ubb ubb ubb ubb -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vqi -xIt -xIt +cgS +cgS ubb ubb ubb @@ -46347,8 +46344,8 @@ ubb ubb oHy ubb -xIt -xIt +cgS +cgS eue tzc uew @@ -46516,18 +46513,18 @@ nsK "} (61,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uGF qzH uGF uGF uGF -xIt -xIt +cgS +cgS vqi vqi vqi @@ -46542,22 +46539,22 @@ vqi vqi vqi vqi -xIt +cgS ubb ubb ubb ubb ubb ubb -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt +cgS +cgS +cgS ubb ubb ubb @@ -46738,20 +46735,20 @@ nsK "} (62,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uGF qzH uGF uGF uGF -xIt -xIt +cgS +cgS vqi -xIt +cgS pfm nyC pfm @@ -46761,11 +46758,11 @@ pfm pfm nyC nyC -xIt -xIt +cgS +cgS vqi -xIt -xIt +cgS +cgS ubb ubb ubb @@ -46773,13 +46770,13 @@ ubb ubb ubb ubb -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt -xIt +cgS +cgS +cgS ubb ubb ubb @@ -46960,18 +46957,18 @@ nsK "} (63,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uGF qzH uGF xEg -xIt -xIt -xIt +cgS +cgS +cgS vqi pfm pfm @@ -46986,8 +46983,8 @@ nyC pfm nyC muV -xIt -xIt +cgS +cgS ubb ubb ubb @@ -46996,12 +46993,12 @@ ubb ubb ubb ubb -xIt -xIt +cgS +cgS vqi -xIt -xIt -xIt +cgS +cgS +cgS ubb ubb ubb @@ -47182,17 +47179,17 @@ nsK "} (64,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uGF qzH xEg uGF -xIt -xIt +cgS +cgS pfm mKk pfm @@ -47221,9 +47218,9 @@ ubb ubb ubb vqi -xIt -xIt -xIt +cgS +cgS +cgS ubb ubb ubb @@ -47232,7 +47229,7 @@ ubb ubb ubb ubb -xIt +cgS oHy ubb ubb @@ -47404,17 +47401,17 @@ nsK "} (65,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS xEg uGF uGF fZP uGF -xIt -xIt -xIt +cgS +cgS +cgS pfm muV mJj @@ -47456,8 +47453,8 @@ nue vqi vqi vqi -xIt -xIt +cgS +cgS eue tzc mXU @@ -47626,17 +47623,17 @@ nsK "} (66,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS qzH qzH qzH qzH -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS pfm mKk kDZ @@ -47658,8 +47655,8 @@ pxr ubb ubb beU -xIt -xIt +cgS +cgS ubb ubb ubb @@ -47674,12 +47671,12 @@ ubb ubb ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS eue eue tzc @@ -47848,17 +47845,17 @@ nsK "} (67,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF qzH uGF uGF -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS nyC muV pfm @@ -47875,14 +47872,14 @@ mJj nyC mKk pfm -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb @@ -47895,13 +47892,13 @@ tJs ubb ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS eue eue tzc @@ -48070,18 +48067,18 @@ nsK "} (68,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF qzH uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS muV hNx pfm @@ -48098,15 +48095,15 @@ nyC mKk pfm pfm -xIt -xIt +cgS +cgS pfm -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb @@ -48116,14 +48113,14 @@ ubb cQd ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS eue eue eue @@ -48292,17 +48289,17 @@ nsK "} (69,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF qzH uGF -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS iqm igB mKk @@ -48321,15 +48318,15 @@ oBs iqm iqm iqm -xIt +cgS pfm pfm -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS tJs ubb ubb @@ -48338,15 +48335,15 @@ ubb ubb ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS eue eue sWa @@ -48514,17 +48511,17 @@ nsK "} (70,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF qzH uGF -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS iqm rXv pfm @@ -48547,28 +48544,28 @@ rXv pfm nyC pfm -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb ubb ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS eue tzc sWa @@ -48736,16 +48733,16 @@ nsK "} (71,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF qzH uGF uGF -xIt -xIt +cgS +cgS fVm -xIt +cgS nyC iqm nyC @@ -48769,28 +48766,28 @@ nyC fXJ elo pfm -xIt +cgS qaM -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS ubb tJs ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc tzc vaE @@ -48958,14 +48955,14 @@ nsK "} (72,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS qzH uGF uGF uGF -xIt +cgS pfm elo nyC @@ -48993,26 +48990,26 @@ pfm pfm pfm qaW -xIt -xIt -xIt -xIt -xIt -ubb -ubb -ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +ubb +ubb +ubb +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew tzc vaE @@ -49180,8 +49177,8 @@ nsK "} (73,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF qzH vwm @@ -49215,26 +49212,26 @@ nyC fXJ pfm pfm -xIt +cgS iqm iqm -xIt +cgS ubb ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew vaE @@ -49402,7 +49399,7 @@ nsK "} (74,1,1) = {" cgS -xIt +cgS uGF uGF ewO @@ -49444,19 +49441,19 @@ nyC ubb ubb tJs -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew vaE @@ -49624,7 +49621,7 @@ nsK "} (75,1,1) = {" cgS -xIt +cgS uGF uGF qzH @@ -49666,18 +49663,18 @@ lEI pxr ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew uew @@ -49846,7 +49843,7 @@ nsK "} (76,1,1) = {" cgS -xIt +cgS uGF uGF qzH @@ -49884,21 +49881,21 @@ iqm iqm pfm nyC -xIt -xIt +cgS +cgS pxr ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew uew @@ -50068,7 +50065,7 @@ nsK "} (77,1,1) = {" cgS -xIt +cgS uGF uGF qzH @@ -50107,19 +50104,19 @@ qih pfm icv iqm -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew uew @@ -50290,7 +50287,7 @@ nsK "} (78,1,1) = {" cgS -xIt +cgS uGF uGF qzH @@ -50298,7 +50295,7 @@ bVM pfm kDZ eoI -xIt +cgS eqE pfm hNx @@ -50329,21 +50326,21 @@ qkR nyC pfm nyC -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew uew @@ -50512,15 +50509,15 @@ nsK "} (79,1,1) = {" cgS -xIt +cgS uGF uGF fZP bVQ pfm nyC -xIt -xIt +cgS +cgS bdt kDZ nyC @@ -50551,21 +50548,21 @@ qkR pfm nyC nyC -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew uew @@ -50734,15 +50731,15 @@ nsK "} (80,1,1) = {" cgS -xIt +cgS uGF uGF qzH xEg pfm -xIt -xIt -xIt +cgS +cgS +cgS nyC nyC nyC @@ -50773,22 +50770,22 @@ eqT pfm nyC nyC -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew vaE @@ -50963,7 +50960,7 @@ qzH uGF pfm pfm -xIt +cgS rCQ pfm pfm @@ -50995,22 +50992,22 @@ eqT kDZ nyC iqm -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS bcB tzc vaE @@ -51183,11 +51180,11 @@ uGF uGF qzH qzH -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS kDZ iqm nyC @@ -51217,22 +51214,22 @@ pfm pfm icv iqm -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb bcB eZJ @@ -51400,17 +51397,17 @@ nsK "} (83,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF uGF qzH uGF -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS iqm pfm jaz @@ -51439,21 +51436,21 @@ pfm nyC nyC iqm -xIt -xIt -xIt +cgS +cgS +cgS ubb ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tJs ubb bcB @@ -51622,16 +51619,16 @@ nsK "} (84,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF uGF qzH uGF uGF -xIt -xIt -xIt +cgS +cgS +cgS icv iqm rXv @@ -51661,20 +51658,20 @@ nyC pfm iqm iqm -xIt -xIt +cgS +cgS ubb ubb ubb ubb ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb @@ -51844,16 +51841,16 @@ nsK "} (85,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF vwm ewO uGF uGF -xIt -xIt -xIt +cgS +cgS +cgS nyC iqm pfm @@ -51892,10 +51889,10 @@ tJs ubb ubb ubb -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS ubb ubb ubb @@ -52066,15 +52063,15 @@ nsK "} (86,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF uGF qzH uGF uGF uGF -xIt +cgS nyC gZd iqm @@ -52115,8 +52112,8 @@ tPt tPt tPt ubb -xIt -xIt +cgS +cgS ubb ubb ubb @@ -52288,8 +52285,8 @@ nsK "} (87,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF uGF ewO @@ -52330,8 +52327,8 @@ tPt gpF tPt tPt -xIt -xIt +cgS +cgS tJs ubb ubb @@ -52510,8 +52507,8 @@ nsK "} (88,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF uGF qzH @@ -52552,10 +52549,10 @@ ubb ubb ubb ubb -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS ubb ubb ubb @@ -52732,8 +52729,8 @@ nsK "} (89,1,1) = {" cgS -xIt -xIt +cgS +cgS xEg uGF qzH @@ -52774,11 +52771,11 @@ nyC ubb ubb ubb -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS ubb ubb ubb @@ -52954,7 +52951,7 @@ nsK "} (90,1,1) = {" cgS -xIt +cgS uGF uGF uGF @@ -52994,12 +52991,12 @@ hNx qoT ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb @@ -53007,8 +53004,8 @@ ubb ubb ubb ubb -xIt -xIt +cgS +cgS ubb ubb bcB @@ -53176,7 +53173,7 @@ nsK "} (91,1,1) = {" cgS -xIt +cgS uGF uGF uGF @@ -53213,25 +53210,25 @@ muV pfm nyC nyC -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb ubb ubb ubb -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS ubb bcB bBz @@ -53398,8 +53395,8 @@ nsK "} (92,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF uGF qzH @@ -53433,14 +53430,14 @@ iqm pVA igB iqm -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tJs ubb ubb @@ -53448,12 +53445,12 @@ ubb ubb tJs ubb -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS ubb bcB ujh @@ -53620,7 +53617,7 @@ nsK "} (93,1,1) = {" cgS -xIt +cgS uGF uGF uGF @@ -53655,13 +53652,13 @@ pfm nyC igB iqm -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb @@ -53669,13 +53666,13 @@ ubb ubb ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ujh @@ -53842,7 +53839,7 @@ nsK "} (94,1,1) = {" cgS -xIt +cgS uGF uGF uGF @@ -53876,28 +53873,28 @@ iqm pfm pfm igB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ujh @@ -54064,13 +54061,13 @@ nsK "} (95,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF xEg uGF uGF -xIt +cgS pfm pfm pfm @@ -54098,29 +54095,29 @@ iqm iqm pVA igB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -ubb -ubb -ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +ubb +ubb +ubb +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb nwP eZJ @@ -54286,14 +54283,14 @@ nsK "} (96,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS uGF uGF -xIt -xIt -xIt +cgS +cgS +cgS eqT pfm nyC @@ -54320,29 +54317,29 @@ iqm iqm pfm igB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -ubb -ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +ubb +ubb +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb nwP wGX @@ -54508,15 +54505,15 @@ nsK "} (97,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS uGF uGF uGF -xIt -xIt -xIt +cgS +cgS +cgS nyC pfm iqm @@ -54542,29 +54539,29 @@ iqm iqm pVA igB -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb ubb -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb nwP wGX @@ -54730,27 +54727,27 @@ nsK "} (98,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS nyC iqm -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vqi vqi igB @@ -54764,30 +54761,30 @@ igB vqi vqi vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS ubb ubb ubb ubb ubb ubb -xIt -xIt -xIt +cgS +cgS +cgS ubb ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS nwP wGX nwP @@ -54952,28 +54949,28 @@ nsK "} (99,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS uGF uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF nyC nyC @@ -54983,14 +54980,14 @@ nyC ubb nyC iqm -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb tJs ubb @@ -55004,12 +55001,12 @@ ubb ubb ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS nwP iJc nwP @@ -55174,27 +55171,27 @@ nsK "} (100,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS xEg uGF uGF uGF xEg -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -55206,11 +55203,11 @@ ubb ubb tJs iqm -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS ubb ubb ubb @@ -55227,11 +55224,11 @@ ubb ubb ubb ubb -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS nwP wGX jSq @@ -55396,27 +55393,27 @@ nsK "} (101,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -55451,9 +55448,9 @@ ubb ubb ubb ubb -xIt -xIt -xIt +cgS +cgS +cgS nwP wGX ujh @@ -55618,26 +55615,26 @@ nsK "} (102,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF vwm @@ -55659,7 +55656,7 @@ ubb ubb ubb ubb -xIt +cgS ubb ubb ubb @@ -55674,8 +55671,8 @@ ubb ubb tJs ubb -xIt -xIt +cgS +cgS nwP wGX ujh @@ -55840,26 +55837,26 @@ nsK "} (103,1,1) = {" cgS -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS uGF uGF uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -55880,14 +55877,14 @@ ubb ubb ubb ubb -xIt -xIt -xIt +cgS +cgS +cgS ubb ubb -xIt -xIt -xIt +cgS +cgS +cgS ubb ubb ubb @@ -55897,7 +55894,7 @@ ubb ubb ubb ubb -xIt +cgS nwP eZJ bBz @@ -56062,11 +56059,11 @@ nsK "} (104,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS xEg uGF uGF @@ -56078,10 +56075,10 @@ uGF uGF uGF uGF -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS uGF uGF uGF @@ -56101,17 +56098,17 @@ oHy ubb ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb -xIt +cgS ubb ubb ubb @@ -56284,13 +56281,13 @@ nsK "} (105,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -56301,10 +56298,10 @@ uGF uGF uGF uGF -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS xEg uGF uGF @@ -56321,20 +56318,20 @@ ubb ubb oHy ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb @@ -56506,14 +56503,14 @@ nsK "} (106,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -56523,12 +56520,12 @@ uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS uGF qTf xEg @@ -56542,21 +56539,21 @@ ubb ubb tJs oHy -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb @@ -56728,14 +56725,14 @@ nsK "} (107,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF xEg uGF @@ -56745,13 +56742,13 @@ xEg uGF uGF xEg -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS vqi uGF uGF @@ -56764,25 +56761,25 @@ ubb ubb ubb vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -ubb -ubb -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +ubb +ubb +cgS bcB bcB bBz @@ -56950,13 +56947,13 @@ nsK "} (108,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -56968,14 +56965,14 @@ uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS vqi -xIt +cgS uGF ubb ubb @@ -56984,28 +56981,28 @@ ubb ubb ubb ubb -xIt +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS bBz ujh ujh @@ -57172,13 +57169,13 @@ nsK "} (109,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -57190,14 +57187,14 @@ uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS vqi -xIt +cgS uGF rvq ubb @@ -57205,31 +57202,31 @@ ubb ubb ubb ubb -xIt -xIt +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vby cZN vby @@ -57394,13 +57391,13 @@ nsK "} (110,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -57412,14 +57409,14 @@ uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS vqi -xIt +cgS uGF ubb ubb @@ -57427,30 +57424,30 @@ ubb ubb ubb ubb -xIt -xIt +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vby vby nSG @@ -57616,14 +57613,14 @@ nsK "} (111,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -57634,44 +57631,44 @@ uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS vqi -xIt -xIt +cgS +cgS ubb ubb ubb ubb ubb ubb -xIt -xIt +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vby vby vby @@ -57838,14 +57835,14 @@ nsK "} (112,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -57857,11 +57854,11 @@ uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vqi vqi vqi @@ -57874,24 +57871,24 @@ oHy vqi vqi vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vby vby vby @@ -58060,14 +58057,14 @@ nsK "} (113,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF xEg uGF @@ -58079,39 +58076,39 @@ uGF xEg uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb ubb ubb ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vby vby vby @@ -58282,14 +58279,14 @@ nsK "} (114,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -58301,38 +58298,38 @@ uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb tJs ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vby vby juQ @@ -58504,15 +58501,15 @@ nsK "} (115,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -58524,35 +58521,35 @@ vwm uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -ubb -ubb -ubb -ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +ubb +ubb +ubb +ubb +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tyz vby vby @@ -58726,17 +58723,17 @@ nsK "} (116,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -58747,33 +58744,33 @@ uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -ubb -ubb -ubb -ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +ubb +ubb +ubb +ubb +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tyz tyz vby @@ -58948,17 +58945,17 @@ nsK "} (117,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -58969,33 +58966,33 @@ uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -ubb -ubb -ubb -ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +ubb +ubb +ubb +ubb +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tyz tyz tyz @@ -59170,19 +59167,19 @@ nsK "} (118,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -59192,32 +59189,32 @@ uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -ubb -ubb -ubb -ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +ubb +ubb +ubb +ubb +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jIg tyz tyz @@ -59392,21 +59389,21 @@ nsK "} (119,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF xEg uGF @@ -59414,32 +59411,32 @@ uGF uGF uGF xEg -xIt -xIt -xIt -xIt -xIt -xIt -ubb -ubb -ubb -ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +ubb +ubb +ubb +ubb +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS qHh qHh lyG @@ -59614,22 +59611,22 @@ nsK "} (120,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -59637,31 +59634,31 @@ uGF uGF uGF uGF -xIt -xIt -xIt -xIt -ubb -ubb -ubb -ubb -ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +ubb +ubb +ubb +ubb +ubb +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS qHh qHh lyG @@ -59836,21 +59833,21 @@ nsK "} (121,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -59860,31 +59857,31 @@ uGF uGF uGF uGF -xIt -xIt +cgS +cgS ubb tJs ubb ubb tJs -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS lyG uYy uYy @@ -60058,25 +60055,25 @@ nsK "} (122,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF -xIt +cgS uGF uGF uGF @@ -60088,26 +60085,26 @@ uGF ubb ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -60280,26 +60277,26 @@ nsK "} (123,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF -xIt -xIt +cgS +cgS uGF uGF uGF @@ -60310,27 +60307,27 @@ uGF ubb ubb ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -60502,27 +60499,27 @@ nsK "} (124,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF -xIt -xIt -xIt +cgS +cgS +cgS xEg uGF uGF @@ -60531,28 +60528,28 @@ uGF uGF xEg ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -60724,10 +60721,10 @@ nsK "} (125,1,1) = {" cgS -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vqi vqi vqi @@ -60743,38 +60740,38 @@ qTf qTf vqi vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS uGF uGF uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -60946,58 +60943,58 @@ nsK "} (126,1,1) = {" cgS -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx vBx uLt -xIt +cgS vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vBx vBx vBx vBx vBx -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -61168,15 +61165,15 @@ nsK "} (127,1,1) = {" cgS -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vBx vBx vBx @@ -61185,41 +61182,41 @@ vBx vBx vBx vBx -xIt +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx vBx kjD -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -61390,14 +61387,14 @@ nsK "} (128,1,1) = {" cgS -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt +cgS +cgS +cgS vBx uLt vBx @@ -61407,40 +61404,40 @@ vBx vBx vBx uLt -xIt +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx uLt vBx kjD nWw -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -61612,14 +61609,14 @@ nsK "} (129,1,1) = {" cgS -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt +cgS +cgS +cgS vBx vBx vBx @@ -61629,39 +61626,39 @@ vBx vBx vBx vBx -xIt +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx ihG kjD -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -61834,13 +61831,13 @@ nsK "} (130,1,1) = {" cgS -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vqi -xIt -xIt +cgS +cgS vBx vBx vBx @@ -61851,38 +61848,38 @@ vBx vBx vBx vBx -xIt +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx kjD kjD kjD -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -62056,13 +62053,13 @@ nsK "} (131,1,1) = {" cgS -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vqi -xIt -xIt +cgS +cgS vBx vBx vBx @@ -62073,37 +62070,37 @@ vBx vBx vBx vBx -xIt +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx kjD kjD kjD -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -62278,14 +62275,14 @@ nsK "} (132,1,1) = {" cgS -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt +cgS +cgS +cgS vBx vBx vBx @@ -62297,35 +62294,35 @@ vBx vBx vBx vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx kjD kjD kjD -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS xKP uYy uYy @@ -62500,13 +62497,13 @@ nsK "} (133,1,1) = {" cgS -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vqi -xIt -xIt +cgS +cgS vBx vBx vBx @@ -62519,35 +62516,35 @@ vBx vBx vBx qIR -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx kjD kjD kjD -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uYy pKS @@ -62722,14 +62719,14 @@ nsK "} (134,1,1) = {" cgS -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt +cgS +cgS +cgS vBx uLt oCF @@ -62742,11 +62739,11 @@ uLt vBx qIR vBx -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vqi vqi vqi @@ -62764,11 +62761,11 @@ vqi vqi vqi vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -62944,13 +62941,13 @@ nsK "} (135,1,1) = {" cgS -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vqi -xIt -xIt +cgS +cgS vBx vBx vBx @@ -62964,33 +62961,33 @@ vBx vBx qIR vBx -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS kjD kjD kjD kjD -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -63166,13 +63163,13 @@ nsK "} (136,1,1) = {" cgS -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vqi -xIt -xIt +cgS +cgS vBx vBx vBx @@ -63186,33 +63183,33 @@ vBx vBx qIR vBx -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS nWw kjD kjD kjD nWw -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -63388,10 +63385,10 @@ nsK "} (137,1,1) = {" cgS -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vqi vqi vqi @@ -63408,33 +63405,33 @@ qIR qIR qIR vBx -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS kjD kjD kjD kjD kjD -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -63610,15 +63607,15 @@ nsK "} (138,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx @@ -63630,33 +63627,33 @@ vBx vBx vBx vBx -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS kjD kjD kjD kjD kjD kjD -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -63832,15 +63829,15 @@ nsK "} (139,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx @@ -63852,33 +63849,33 @@ vBx vBx vBx vBx -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS kjD kjD kjD kjD kjD kjD -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -64054,15 +64051,15 @@ nsK "} (140,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx @@ -64074,17 +64071,17 @@ vBx vBx vBx vBx -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS kjD kjD kjD @@ -64092,9 +64089,9 @@ kjD kjD kjD kjD -xIt -xIt -xIt +cgS +cgS +cgS vqi kjD tzY @@ -64276,16 +64273,16 @@ nsK "} (141,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx @@ -64295,19 +64292,19 @@ vBx vBx vBx vBx -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS kjD kjD kjD @@ -64315,8 +64312,8 @@ kjD ihG kjD kjD -xIt -xIt +cgS +cgS tOc kjD kjD @@ -64498,16 +64495,16 @@ nsK "} (142,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx @@ -64518,18 +64515,18 @@ vBx vBx vBx vBx -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS kjD kjD kjD @@ -64537,7 +64534,7 @@ kjD kjD kjD kjD -xIt +cgS kjD tOc kjD @@ -64720,17 +64717,17 @@ nsK "} (143,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uLt vBx vBx @@ -64740,18 +64737,18 @@ uLt vBx vBx vBx -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS kjD kjD nWw @@ -64942,37 +64939,37 @@ nsK "} (144,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx vBx vBx vBx -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vBx kjD kjD @@ -65164,43 +65161,43 @@ nsK "} (145,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx vBx vBx -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt +cgS +cgS +cgS uLt vBx vBx kjD kjD nWw -xIt -xIt +cgS +cgS kjD kjD kjD @@ -65386,51 +65383,51 @@ nsK "} (146,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vqi -xIt -xIt +cgS +cgS vBx vBx vBx vBx kjD -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS kjD kjD kjD vqi -xIt -xIt -xIt +cgS +cgS +cgS tzY tzY cIQ @@ -65608,31 +65605,31 @@ nsK "} (147,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx vBx -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS vqi vqi qIR @@ -65650,10 +65647,10 @@ vqi tOc vqi vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS tzY cIQ cIQ @@ -65830,52 +65827,52 @@ nsK "} (148,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx vBx -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx vBx vBx -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzY cIQ cIQ @@ -66052,52 +66049,52 @@ nsK "} (149,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx vBx vBx -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx vBx vBx -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cIQ cIQ cIQ @@ -66274,52 +66271,52 @@ nsK "} (150,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx uLt vBx vBx uLt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx vBx -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzY tzY cIQ @@ -66496,53 +66493,53 @@ nsK "} (151,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx vBx vBx vBx -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vBx uLt vBx vBx uLt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzY cIQ jIg @@ -66718,53 +66715,53 @@ nsK "} (152,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx vBx vBx vBx -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vBx vBx vBx vBx -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzY cIQ jIg @@ -66940,52 +66937,52 @@ nsK "} (153,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx vBx vBx vBx -xIt -xIt +cgS +cgS vBx vBx vBx vBx -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzY tzY cIQ @@ -67162,21 +67159,21 @@ nsK "} (154,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx @@ -67190,24 +67187,24 @@ vBx vBx uLt vBx -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzY tzY qDM @@ -67384,9 +67381,9 @@ nsK "} (155,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS vqi vqi vqi @@ -67413,24 +67410,24 @@ vBx vBx vBx vBx -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzY cIQ jIg @@ -67606,20 +67603,20 @@ nsK "} (156,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx oCF vBx @@ -67635,23 +67632,23 @@ vBx vBx vBx vBx -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS kjD kjD -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzY tzY cIQ @@ -67828,19 +67825,19 @@ nsK "} (157,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cLI vBx vBx @@ -67849,8 +67846,8 @@ qIR vBx vBx vBx -xIt -xIt +cgS +cgS vBx vBx vBx @@ -67858,21 +67855,21 @@ vBx vBx vBx vBx -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS kjD kjD kjD kjD kjD -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS tzY tzY cIQ @@ -68050,18 +68047,18 @@ nsK "} (158,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx @@ -68070,19 +68067,19 @@ vBx qIR vBx vBx -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vBx vBx vBx vBx vBx -xIt -xIt -xIt +cgS +cgS +cgS vqi vqi vqi @@ -68272,15 +68269,15 @@ nsK "} (159,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS csv uLt vBx @@ -68292,22 +68289,22 @@ vBx qIR vBx hix -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS uLt vBx vBx vBx uLt -xIt -xIt +cgS +cgS vqi -xIt -xIt +cgS +cgS nWw kjD kjD @@ -68494,14 +68491,14 @@ nsK "} (160,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vBx vBx vBx @@ -68512,23 +68509,23 @@ vBx vBx vBx qIR -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx vBx vBx vBx -xIt +cgS vqi -xIt +cgS kjD kjD kjD @@ -68716,14 +68713,14 @@ nsK "} (161,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vBx vBx vBx @@ -68734,15 +68731,15 @@ vBx vBx vBx vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx @@ -68938,13 +68935,13 @@ nsK "} (162,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt -xIt +cgS +cgS +cgS vBx vBx vBx @@ -68953,19 +68950,19 @@ vBx vBx vBx vBx -xIt -xIt +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx @@ -69160,12 +69157,12 @@ nsK "} (163,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt +cgS +cgS vBx vBx vBx @@ -69174,21 +69171,21 @@ vBx vBx vBx vBx -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx uLt vBx @@ -69205,8 +69202,8 @@ kjD cpa ihG kjD -xIt -xIt +cgS +cgS tzY tzY vby @@ -69382,12 +69379,12 @@ nsK "} (164,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt +cgS +cgS vBx vBx vBx @@ -69396,22 +69393,22 @@ vBx vBx vBx hgN -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS vBx kjD kjD @@ -69426,9 +69423,9 @@ kjD kjD tOc kjD -xIt -xIt -xIt +cgS +cgS +cgS tzY cIQ vby @@ -69604,12 +69601,12 @@ nsK "} (165,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt +cgS +cgS uLt vBx vBx @@ -69619,22 +69616,22 @@ vBx vBx vBx vBx -xIt -xIt +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS kjD kjD tOc @@ -69644,13 +69641,13 @@ kjD kjD kjD kjD -xIt -xIt +cgS +cgS vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS tzY cIQ jIg @@ -69826,13 +69823,13 @@ nsK "} (166,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt -xIt +cgS +cgS +cgS vBx vBx vBx @@ -69841,38 +69838,38 @@ vBx vBx vBx vBx -xIt -xIt +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS kjD tOc kjD kjD kjD -xIt +cgS kjD -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS cIQ tzY jIg @@ -70048,14 +70045,14 @@ nsK "} (167,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vBx pyu uLt @@ -70063,39 +70060,39 @@ vBx vBx uLt vBx -xIt -xIt +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS kjD tOc kjD kjD nWw -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS tzY tyz pKS @@ -70270,39 +70267,39 @@ nsK "} (168,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS vBx vBx vBx vBx vBx -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tOc tOc cpa @@ -70313,12 +70310,12 @@ vqi vqi vqi vqi -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS rIi vby pKS @@ -70492,55 +70489,55 @@ nsK "} (169,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS vBx vBx vBx -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rIi rIi pKS @@ -70714,9 +70711,9 @@ nsK "} (170,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS vqi vqi vqi @@ -70732,37 +70729,37 @@ vqi vqi vqi vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rIi pKS pKS @@ -70936,55 +70933,55 @@ nsK "} (171,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rIi rIi rIi @@ -71158,55 +71155,55 @@ nsK "} (172,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rIi rIi rIi @@ -71380,55 +71377,55 @@ nsK "} (173,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rIi rIi rIi @@ -71602,55 +71599,55 @@ nsK "} (174,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rIi rIi rIi diff --git a/_maps/map_files/Campaign maps/orion_2/orionoutpost_2.dmm b/_maps/map_files/Campaign maps/orion_2/orionoutpost_2.dmm index d8b45142d7a14..d0bcbaf7c8f42 100644 --- a/_maps/map_files/Campaign maps/orion_2/orionoutpost_2.dmm +++ b/_maps/map_files/Campaign maps/orion_2/orionoutpost_2.dmm @@ -2863,7 +2863,7 @@ /area/orion_outpost/ground/underground/caveN) "nJ" = ( /obj/item/ammo_magazine/tank/ltb_cannon, -/obj/item/ammo_magazine/tank/ltaaap_minigun, +/obj/item/ammo_magazine/tank/ltaap_chaingun, /turf/open/floor/mainship/black{ dir = 8 }, @@ -6740,7 +6740,7 @@ /area/orion_outpost/ground/outpostcent) "Gr" = ( /obj/item/ammo_magazine/tank/ltb_cannon, -/obj/item/ammo_magazine/tank/ltaaap_minigun, +/obj/item/ammo_magazine/tank/ltaap_chaingun, /turf/open/floor/mainship/black/full, /area/orion_outpost/surface/building/ammodepot) "Gs" = ( diff --git a/_maps/map_files/Campaign maps/patricks_rest/patricks_rest.dmm b/_maps/map_files/Campaign maps/patricks_rest/patricks_rest.dmm index 7b6fb49c10c00..2e48c317d3bf0 100644 --- a/_maps/map_files/Campaign maps/patricks_rest/patricks_rest.dmm +++ b/_maps/map_files/Campaign maps/patricks_rest/patricks_rest.dmm @@ -203,6 +203,12 @@ /obj/machinery/computer/telecomms/server, /turf/open/floor/mainship/sterile/dark, /area/patricks_rest/surface/building/science) +"aW" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete/lines, +/area/patricks_rest/ground/colonyse) "aY" = ( /turf/closed/mineral/smooth/indestructible, /area/patricks_rest/ground/colonysw) @@ -328,6 +334,13 @@ /obj/effect/landmark/patrol_point/som/som_22, /turf/open/floor/plating/ground/mars/random/sand, /area/patricks_rest/ground/colonynw) +"bC" = ( +/obj/structure/flora/desert/grass/heavy, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/ground/grass/weedable/patch/grassyellow, +/area/patricks_rest/ground/colonys) "bD" = ( /obj/structure/platform/metalplatform{ dir = 9 @@ -670,12 +683,22 @@ /obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/patricks_rest/surface/building/hydro) +"db" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonycent) "dc" = ( /obj/machinery/light{ dir = 8 }, /turf/open/floor/plating/ground/desertdam/asphalt/cement, /area/patricks_rest/surface/building/storage_depot_south) +"dd" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/floor/plating/ground/concrete, +/area/patricks_rest/ground/colonyse) "de" = ( /obj/structure/platform/metalplatform{ dir = 1 @@ -889,6 +912,13 @@ /obj/structure/cable, /turf/open/floor/mainship/mono, /area/patricks_rest/surface/building/residential_w) +"ej" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonys) "el" = ( /obj/structure/bed/chair{ dir = 8 @@ -1245,6 +1275,10 @@ }, /turf/open/floor/mainship/mono, /area/patricks_rest/surface/landing_pad) +"fM" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonynw) "fN" = ( /obj/structure/fence, /turf/open/floor/plating/ground/desertdam/asphalt/cement, @@ -1504,6 +1538,11 @@ }, /turf/open/floor/plating/ground/concrete, /area/patricks_rest/ground/colonyne) +"gV" = ( +/obj/structure/cable, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonyse) "gW" = ( /obj/effect/ai_node, /turf/open/floor/plating/ground/concrete, @@ -1753,6 +1792,15 @@ }, /turf/open/floor/mainship/mono, /area/patricks_rest/surface/building/offices) +"ie" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 1 + }, +/area/patricks_rest/ground/colonyse) "if" = ( /obj/structure/largecrate, /obj/structure/cable, @@ -1944,6 +1992,12 @@ }, /turf/open/floor/mainship/mono, /area/patricks_rest/surface/building/storage_depot_research) +"iU" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonycent) "iV" = ( /obj/machinery/conveyor, /obj/item/storage/briefcase, @@ -2062,6 +2116,14 @@ /obj/structure/window/framed/mainship, /turf/open/floor/mainship/mono, /area/patricks_rest/surface/building/atc) +"jx" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 1 + }, +/area/patricks_rest/ground/colonycent) "jy" = ( /obj/structure/table/mainship, /turf/open/floor/mainship/mono, @@ -2203,6 +2265,15 @@ }, /turf/open/floor/plating/ground/mars/random/cave/darker, /area/patricks_rest/ground/underground/cave) +"kc" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/turf/open/floor/plating/ground/mars/random/sand, +/area/patricks_rest/ground/colonyse) "ke" = ( /obj/effect/ai_node, /obj/machinery/light{ @@ -2252,6 +2323,12 @@ dir = 8 }, /area/patricks_rest/ground/colonycent) +"kr" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/patricks_rest/ground/colonyn) "ks" = ( /obj/structure/largecrate/random/barrel/white, /turf/open/floor/mainship/mono, @@ -2609,6 +2686,18 @@ /obj/item/reagent_containers/food/snacks/soup/meatballsoup, /turf/open/floor/prison/sterilewhite, /area/patricks_rest/surface/building/residential_cent) +"lZ" = ( +/obj/structure/largecrate, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 9 + }, +/area/patricks_rest/ground/colonyn) "ma" = ( /obj/structure/cable, /turf/open/floor/prison/darkyellow/full, @@ -2625,6 +2714,14 @@ /obj/effect/turf_decal/warning_stripes/stripedsquare, /turf/open/floor/mainship/mono, /area/patricks_rest/surface/building/security_post_cargo) +"me" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 9 + }, +/area/patricks_rest/ground/colonyn) "mf" = ( /obj/structure/filingcabinet/chestdrawer, /turf/open/floor/prison/blue/plate{ @@ -2884,6 +2981,12 @@ }, /turf/open/floor/prison/yellow/full, /area/patricks_rest/surface/building/residential_w) +"ni" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/turf/open/floor/plating/ground/mars/random/sand, +/area/patricks_rest/ground/colonye) "nj" = ( /turf/open/floor/plating/ground/concrete, /area/patricks_rest/surface/landing_pad) @@ -3009,12 +3112,6 @@ "nH" = ( /turf/open/ground/grass/weedable/patch/grassyellow, /area/patricks_rest/surface/building/residential_w) -"nI" = ( -/obj/structure/cargo_container{ - dir = 1 - }, -/turf/open/floor/plating/ground/concrete, -/area/patricks_rest/ground/colonyn) "nK" = ( /obj/structure/largecrate/random/barrel/yellow, /turf/open/floor/mainship/mono, @@ -3024,6 +3121,10 @@ /obj/effect/ai_node, /turf/open/floor/prison/sterilewhite, /area/patricks_rest/surface/building/residential_cent) +"nM" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/floor/plating/ground/mars/random/sand, +/area/patricks_rest/surface/building/medbay) "nN" = ( /obj/structure/desertdam/decals/road/line{ dir = 4 @@ -3363,6 +3464,10 @@ }, /turf/open/floor/mainship/mono, /area/patricks_rest/surface/building/ore) +"po" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/floor/plating/ground/mars/random/sand, +/area/patricks_rest/ground/colonye) "pp" = ( /obj/machinery/light{ dir = 1 @@ -3435,6 +3540,12 @@ /obj/item/stack/sheet/metal, /turf/open/ground/grass/weedable/patch/grassyellow, /area/patricks_rest/ground/colonyn) +"pD" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/mars/random/sand, +/area/patricks_rest/ground/colonyse) "pE" = ( /turf/open/ground/grass/weedable/patch/grassyellow, /area/patricks_rest/surface/building/storage_depot_south) @@ -3519,7 +3630,7 @@ }, /area/patricks_rest/ground/colonyn) "pX" = ( -/obj/structure/holohoop{ +/obj/structure/hoop{ dir = 8; id = "lvbasketball"; side = "right" @@ -3582,6 +3693,12 @@ /obj/structure/cable, /turf/open/floor/mainship/mono, /area/patricks_rest/surface/building/hydro) +"ql" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/turf/open/ground/grass/weedable/patch/grassyellow, +/area/patricks_rest/ground/colonye) "qm" = ( /obj/structure/window/framed/mainship, /turf/open/floor/mainship/mono, @@ -3619,6 +3736,15 @@ /obj/machinery/griddle, /turf/open/floor/grayscale/black, /area/patricks_rest/surface/building/residential_cent) +"qw" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/patricks_rest/ground/colonyn) "qx" = ( /obj/structure/rack, /obj/item/newspaper, @@ -3768,10 +3894,26 @@ /obj/structure/desertdam/decals/road/line{ dir = 1 }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, /turf/open/floor/plating/ground/concrete/lines{ dir = 8 }, /area/patricks_rest/ground/colonynw) +"rn" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete/lines, +/area/patricks_rest/ground/colonys) +"ro" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/mars/random/sand, +/area/patricks_rest/ground/colonynw) "rp" = ( /obj/structure/rack, /turf/open/floor/mainship/mono, @@ -3779,6 +3921,13 @@ "rs" = ( /turf/open/floor/plating/ground/desertdam/asphalt/cement, /area/patricks_rest/surface/building/residential_cent) +"rt" = ( +/obj/structure/flora/desert/grass, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/ground/grass/weedable/patch/grassyellow, +/area/patricks_rest/ground/colonys) "ru" = ( /obj/structure/table/reinforced/prison, /obj/item/tool/kitchen/tray, @@ -3946,6 +4095,7 @@ /area/patricks_rest/ground/colonye) "sn" = ( /obj/structure/desertdam/decals/road/line, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, /turf/open/floor/plating/ground/concrete/lines{ dir = 4 }, @@ -3957,6 +4107,14 @@ }, /turf/open/floor/mainship/sterile/dark, /area/patricks_rest/surface/building/science) +"sp" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 10 + }, +/area/patricks_rest/ground/colonyn) "sq" = ( /obj/machinery/door/airlock/multi_tile/mainship/personalglass{ dir = 2 @@ -4026,6 +4184,13 @@ /obj/effect/ai_node, /turf/open/floor/mainship/sterile/dark, /area/patricks_rest/surface/building/residential_w) +"sK" = ( +/obj/structure/cable, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonys) "sL" = ( /obj/structure/prop/mainship/gelida/rails{ dir = 8 @@ -4407,6 +4572,11 @@ "uB" = ( /turf/open/floor/mainship/sterile/dark, /area/patricks_rest/surface/building/science) +"uC" = ( +/obj/structure/flora/desert/grass/heavy, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/ground/grass/weedable/patch/grassyellow, +/area/patricks_rest/ground/colonye) "uD" = ( /obj/structure/table/reinforced, /obj/structure/window{ @@ -4485,6 +4655,12 @@ }, /turf/open/floor/plating/ground/mars/random/sand, /area/patricks_rest/surface/building/atc) +"uS" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete/lines, +/area/patricks_rest/ground/underground/cave) "uT" = ( /turf/open/floor/plating/ground/concrete/lines{ dir = 1 @@ -4623,6 +4799,12 @@ dir = 5 }, /area/patricks_rest/ground/colonye) +"vC" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 4 + }, +/turf/open/ground/grass/weedable/patch/grassyellow, +/area/patricks_rest/ground/colonys) "vD" = ( /obj/structure/largecrate, /obj/machinery/light{ @@ -4792,6 +4974,14 @@ /obj/structure/cable, /turf/open/floor/prison/whitegreenfull2, /area/patricks_rest/surface/building/residential_w) +"ww" = ( +/obj/structure/cable, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 4 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonyse) "wx" = ( /obj/structure/largecrate/random/case, /turf/open/floor/prison/yellow/full, @@ -4831,6 +5021,14 @@ /obj/structure/cable, /turf/open/floor/plating/ground/concrete, /area/patricks_rest/surface/building/ore_storage) +"wH" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 1 + }, +/area/patricks_rest/ground/colonys) "wJ" = ( /obj/structure/desertdam/decals/road/line, /turf/open/floor/plating/ground/concrete, @@ -5111,6 +5309,10 @@ /obj/structure/cable, /turf/open/floor/prison/red/full, /area/patricks_rest/surface/building/security_post_cargo) +"yh" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/ground/grass/weedable/patch/grassyellow, +/area/patricks_rest/ground/colonye) "yj" = ( /obj/structure/table/reinforced, /obj/machinery/computer/emails, @@ -5232,6 +5434,10 @@ /obj/machinery/mineral/processing_unit, /turf/open/floor/prison/darkbrown/full, /area/patricks_rest/surface/building/ore) +"yW" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonyn) "yY" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 2 @@ -5259,6 +5465,12 @@ /obj/structure/prop/mainship/sensor_computer1, /turf/open/floor/mainship/mono, /area/patricks_rest/surface/building/offices) +"zg" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/patricks_rest/ground/underground/cave) "zh" = ( /obj/structure/table/mainship, /obj/machinery/light, @@ -5272,10 +5484,6 @@ }, /turf/open/floor/prison/red/full, /area/patricks_rest/surface/building/security_post_cargo) -"zj" = ( -/obj/effect/landmark/campaign_structure/mlrs, -/turf/open/ground/grass/weedable/patch/grassyellow, -/area/patricks_rest/ground/colonyw) "zl" = ( /obj/structure/dropship_piece/two/cockpit/right{ dir = 1 @@ -5428,6 +5636,17 @@ /obj/machinery/vending/cola, /turf/open/floor/prison/darkyellow/full, /area/patricks_rest/surface/building/hydro) +"Af" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 8 + }, +/area/patricks_rest/surface/building/security_post_cargo) "Ah" = ( /turf/open/floor/plating/ground/concrete, /area/patricks_rest/surface/building/engineering) @@ -5556,6 +5775,12 @@ /obj/structure/cable, /turf/open/floor/plating/ground/concrete, /area/patricks_rest/surface/building/residential_cent) +"AP" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/patricks_rest/ground/underground/cave) "AQ" = ( /obj/structure/window/framed/mainship, /turf/open/floor/mainship/mono, @@ -5611,6 +5836,14 @@ /obj/machinery/door/airlock/mainship/generic, /turf/open/floor/mainship/sterile/dark, /area/patricks_rest/surface/building/residential_w) +"Bg" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 1 + }, +/area/patricks_rest/ground/underground/cave) "Bi" = ( /turf/open/floor/plating/ground/concrete/edge{ dir = 4 @@ -5806,6 +6039,15 @@ /obj/machinery/light, /turf/open/ground/grass/weedable/patch/grassyellow, /area/patricks_rest/surface/building/engineering) +"Ci" = ( +/obj/structure/cable, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 4 + }, +/area/patricks_rest/ground/colonyn) "Cj" = ( /obj/structure/table/mainship, /obj/machinery/light{ @@ -5826,6 +6068,13 @@ /obj/machinery/computer3/laptop, /turf/open/floor/mainship/mono, /area/patricks_rest/surface/building/residential_engi) +"Cr" = ( +/obj/structure/cable, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonyse) "Cs" = ( /turf/open/ground/grass/weedable/patch/grassyellow, /area/patricks_rest/surface/building/medbay) @@ -5915,6 +6164,9 @@ /area/patricks_rest/surface/building/science) "CN" = ( /obj/machinery/floodlight/colony, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, /turf/open/floor/plating/ground/desertdam/asphalt/cement, /area/patricks_rest/surface/building/command) "CO" = ( @@ -5939,6 +6191,12 @@ dir = 1 }, /area/patricks_rest/ground/colonyw) +"CU" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/surface/building/storage_depot_south) "CV" = ( /obj/structure/rock/variable/basalt, /turf/open/floor/plating/ground/mars/random/sand, @@ -5953,6 +6211,12 @@ dir = 1 }, /area/patricks_rest/ground/colonye) +"CZ" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonyn) "Da" = ( /obj/structure/fence, /turf/open/floor/plating/ground/desertdam/asphalt/cement, @@ -6086,6 +6350,11 @@ dir = 1 }, /area/patricks_rest/surface/building/command) +"DG" = ( +/obj/structure/flora/desert/grass/heavy, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/ground/grass/weedable/patch/grassyellow, +/area/patricks_rest/ground/colonyse) "DH" = ( /obj/structure/largecrate, /turf/open/floor/plating/ground/concrete/lines{ @@ -6114,10 +6383,26 @@ }, /turf/open/liquid/water/river, /area/patricks_rest/surface/building/residential_w) +"DQ" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/floor/plating/ground/mars/random/sand, +/area/patricks_rest/ground/colonyse) "DR" = ( /obj/machinery/light, /turf/open/floor/mainship/mono, /area/patricks_rest/surface/building/residential_cent) +"DS" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonye) "DT" = ( /turf/open/floor/plating/ground/concrete/lines{ dir = 4 @@ -6185,20 +6470,27 @@ "Ek" = ( /turf/open/floor/plating/ground/concrete/edge, /area/patricks_rest/ground/colonynw) +"Em" = ( +/obj/structure/cable, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonys) "En" = ( /obj/item/shard, /turf/open/floor/mainship/sterile/dark, /area/patricks_rest/surface/building/medbay) +"Eo" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonys) "Ep" = ( /obj/structure/bed/chair/office/dark{ dir = 1 }, /turf/open/floor/mainship/sterile/purple, /area/patricks_rest/surface/building/science) -"Eq" = ( -/obj/effect/landmark/campaign_structure/sensor_tower, -/turf/open/floor/plating/ground/desertdam/asphalt/cement, -/area/patricks_rest/ground/colonys) "Er" = ( /obj/machinery/floodlight/colony, /turf/open/floor/plating/ground/mars/random/sand, @@ -6227,6 +6519,15 @@ /obj/machinery/power/port_gen/pacman, /turf/open/floor/prison/darkyellow/full, /area/patricks_rest/surface/building/hydro) +"Ey" = ( +/obj/structure/cable, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 1 + }, +/area/patricks_rest/ground/colonys) "Ez" = ( /obj/machinery/door/airlock/mainship/generic/glass, /obj/structure/cable, @@ -6399,6 +6700,12 @@ /obj/structure/largecrate, /turf/open/floor/mainship/mono, /area/patricks_rest/surface/building/hydro) +"Fr" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/patricks_rest/ground/underground/cave) "Fs" = ( /obj/machinery/door/airlock/multi_tile/mainship/engineering, /turf/open/floor/prison/darkyellow/full, @@ -6437,10 +6744,6 @@ "FA" = ( /turf/open/floor/prison/whitegreenfull2, /area/patricks_rest/surface/building/residential_w) -"FB" = ( -/obj/machinery/door/poddoor/timed_late/containment/landing_zone, -/turf/closed/mineral/smooth, -/area/patricks_rest/ground/colonye) "FC" = ( /obj/effect/ai_node, /obj/structure/bed/chair/office/dark{ @@ -6489,6 +6792,9 @@ /area/patricks_rest/surface/building/baggage) "FP" = ( /obj/structure/cable, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, /turf/open/floor/plating/ground/concrete/edge, /area/patricks_rest/ground/colonyn) "FR" = ( @@ -6567,6 +6873,16 @@ }, /turf/open/floor/plating/ground/concrete, /area/patricks_rest/ground/underground/cave) +"Gi" = ( +/obj/structure/cable, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonys) "Gk" = ( /turf/open/floor/mainship/mono, /area/patricks_rest/surface/building/barracks) @@ -6616,6 +6932,14 @@ "Gs" = ( /turf/open/floor/plating/ground/concrete, /area/patricks_rest/surface/building/security_post_cargo) +"Gu" = ( +/obj/structure/prop/mainship/gelida/lightstick, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/patricks_rest/ground/underground/cave) "Gv" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 @@ -6822,6 +7146,13 @@ /obj/structure/rack, /turf/open/floor/freezer, /area/patricks_rest/surface/building/residential_cent) +"Ht" = ( +/obj/structure/flora/desert/grass, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/turf/open/ground/grass/weedable/patch/grassyellow, +/area/patricks_rest/ground/colonye) "Hu" = ( /obj/machinery/computer/body_scanconsole, /turf/open/floor/mainship/sterile/dark, @@ -6944,12 +7275,26 @@ "HY" = ( /turf/open/floor/prison/yellow/full, /area/patricks_rest/surface/building/residential_w) +"HZ" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/ground/grass/weedable/patch/grassyellow, +/area/patricks_rest/ground/colonynw) "Ia" = ( /obj/structure/prop/mainship/gelida/rails{ dir = 1 }, /turf/open/floor/plating/ground/mars/random/cave/darker, /area/patricks_rest/ground/underground/cave) +"Ic" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 8 + }, +/area/patricks_rest/ground/colonyn) "Id" = ( /obj/machinery/door/poddoor/timed_late/containment/landing_zone, /turf/closed/wall/mainship, @@ -6982,6 +7327,12 @@ /obj/machinery/vending/snack, /turf/open/floor/prison/whitegreenfull2, /area/patricks_rest/surface/building/offices) +"Im" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/patricks_rest/ground/colonys) "Iq" = ( /obj/structure/cable, /turf/open/floor/mainship/mono, @@ -7681,6 +8032,15 @@ }, /turf/open/floor/plating/ground/mars/random/sand, /area/patricks_rest/ground/colonycent) +"LJ" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 4 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 1 + }, +/area/patricks_rest/ground/colonys) "LN" = ( /obj/machinery/light, /obj/structure/cable, @@ -7739,6 +8099,20 @@ }, /turf/open/floor/plating/ground/mars/random/sand, /area/patricks_rest/ground/colonynw) +"Mb" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 4 + }, +/area/patricks_rest/ground/colonyn) +"Mc" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 4 + }, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonys) "Md" = ( /obj/structure/largecrate/random/case/double, /turf/open/floor/plating/ground/concrete/lines{ @@ -7820,6 +8194,13 @@ /obj/structure/largecrate/random/case/double, /turf/open/floor/mainship/mono, /area/patricks_rest/surface/building/storage_depot_south) +"Mt" = ( +/obj/structure/cable, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/patricks_rest/ground/colonyn) "Mu" = ( /obj/effect/ai_node, /turf/open/floor/plating/ground/concrete/lines{ @@ -7939,6 +8320,12 @@ /obj/structure/table/mainship, /turf/open/floor/mainship/mono, /area/patricks_rest/surface/building/science) +"MV" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/patricks_rest/ground/colonycent) "MX" = ( /obj/effect/landmark/campaign_structure/tele_blocker, /turf/open/ground/grass/weedable/patch/grassyellow, @@ -7949,6 +8336,15 @@ }, /turf/open/floor/plating/ground/concrete, /area/patricks_rest/ground/colonyn) +"Na" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonycent) "Nb" = ( /obj/machinery/door/poddoor/mainship/open{ dir = 1 @@ -8010,6 +8406,12 @@ }, /turf/open/floor/prison/sterilewhite, /area/patricks_rest/surface/building/residential_cent) +"Nr" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/patricks_rest/ground/colonys) "Ns" = ( /obj/structure/largecrate/random/barrel/yellow, /obj/machinery/light{ @@ -8023,6 +8425,12 @@ dir = 8 }, /area/patricks_rest/ground/colonyn) +"Nu" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/patricks_rest/ground/colonyse) "Nx" = ( /turf/closed/wall/mainship, /area/patricks_rest/surface/building/residential_cent) @@ -8036,6 +8444,12 @@ /obj/structure/cable, /turf/open/floor/plating/ground/concrete, /area/patricks_rest/surface/building/security_post_cargo) +"NA" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/ground/grass/weedable/patch/grassyellow, +/area/patricks_rest/ground/colonys) "NB" = ( /obj/machinery/vending/coffee, /turf/open/floor/prison/darkbrown/full, @@ -8057,6 +8471,10 @@ "NH" = ( /turf/closed/mineral/smooth, /area/patricks_rest/surface/building/hydro) +"NI" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonys) "NJ" = ( /obj/structure/bed/chair/office/dark{ dir = 1 @@ -8144,6 +8562,14 @@ }, /turf/open/ground/grass/weedable/patch/grassyellow, /area/patricks_rest/ground/colonyw) +"Oa" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete/edge{ + dir = 8 + }, +/area/patricks_rest/ground/colonyn) "Ob" = ( /turf/open/floor/mainship/tcomms, /area/patricks_rest/surface/building/science) @@ -8241,6 +8667,14 @@ }, /turf/open/floor/plating/ground/mars/random/sand, /area/patricks_rest/ground/colonyn) +"OD" = ( +/obj/structure/cable, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonys) "OE" = ( /obj/structure/window/framed/mainship, /turf/open/floor/mainship/mono, @@ -8482,6 +8916,12 @@ "PL" = ( /turf/closed/mineral/smooth, /area/patricks_rest/ground/colonycent) +"PM" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 4 + }, +/turf/open/floor/plating/ground/mars/random/sand, +/area/patricks_rest/ground/colonys) "PN" = ( /obj/structure/table/reinforced, /obj/machinery/science/pathogenic_Isolator, @@ -8746,6 +9186,10 @@ /obj/structure/stairs/seamless/edge_vert, /turf/open/floor/mainship/mono, /area/patricks_rest/ground/colonye) +"QZ" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/ground/grass/weedable/patch/grassyellow, +/area/patricks_rest/ground/colonys) "Ra" = ( /turf/closed/shuttle/dropship2/singlewindow{ dir = 1 @@ -8797,10 +9241,6 @@ /obj/structure/prop/brokenvendor/brokenuniformvendor, /turf/open/floor/mainship/green/full, /area/patricks_rest/surface/building/barracks) -"Rq" = ( -/obj/effect/landmark/campaign_structure/mlrs, -/turf/open/floor/plating/ground/desertdam/asphalt/cement, -/area/patricks_rest/ground/colonys) "Rr" = ( /obj/effect/ai_node, /turf/open/floor/plating/ground/concrete, @@ -8904,7 +9344,7 @@ /area/patricks_rest/surface/building/residential_cent) "RL" = ( /obj/structure/closet/crate/mass_produced_crate/supply, -/obj/item/stack/sheet/glass/large_stack, +/obj/item/stack/sheet/glass/glass/large_stack, /turf/open/floor/prison/darkbrown/full, /area/patricks_rest/surface/building/ore_storage) "RN" = ( @@ -9163,6 +9603,13 @@ }, /turf/open/ground/grass/weedable/patch/grassyellow, /area/patricks_rest/ground/colonycent) +"SZ" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonyn) "Ta" = ( /obj/structure/largecrate/random/secure, /turf/open/floor/mainship/mono, @@ -9264,10 +9711,6 @@ /obj/structure/cable, /turf/open/floor/mainship/mono, /area/patricks_rest/surface/building/atc) -"TG" = ( -/obj/effect/landmark/campaign_structure/mlrs, -/turf/open/ground/grass/weedable/patch/grassyellow, -/area/patricks_rest/ground/colonycent) "TJ" = ( /obj/effect/ai_node, /obj/machinery/door/airlock/multi_tile/mainship/personalglass{ @@ -9326,6 +9769,16 @@ }, /turf/open/floor/prison/darkyellow/full, /area/patricks_rest/surface/building/engineering) +"Ua" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete/lines, +/area/patricks_rest/ground/colonys) +"Ub" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/floor/plating/ground/mars/random/sand, +/area/patricks_rest/ground/colonyse) "Uc" = ( /obj/structure/closet/secure_closet/security, /turf/open/floor/prison/red/full, @@ -9357,12 +9810,18 @@ /turf/open/floor/prison/darkyellow/full, /area/patricks_rest/surface/building/engineering) "Uj" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, /turf/open/floor/plating/ground/concrete/edge{ dir = 1 }, /area/patricks_rest/ground/colonyn) "Uk" = ( -/obj/structure/holohoop{ +/obj/structure/hoop{ dir = 4; id = "lvbasketball"; side = "left" @@ -9385,6 +9844,13 @@ /obj/effect/landmark/campaign_structure/mlrs, /turf/open/floor/plating/ground/desertdam/asphalt/cement, /area/patricks_rest/ground/colonycent) +"Uo" = ( +/obj/structure/flora/desert/grass/heavy, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/turf/open/ground/grass/weedable/patch/grassyellow, +/area/patricks_rest/ground/colonys) "Up" = ( /turf/closed/mineral/smooth, /area/patricks_rest/ground/colonys) @@ -9550,6 +10016,12 @@ }, /turf/open/ground/grass/weedable/patch/grassyellow, /area/patricks_rest/ground/colonyn) +"Ve" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/patricks_rest/ground/colonyn) "Vf" = ( /obj/effect/ai_node, /obj/structure/cable, @@ -9577,6 +10049,15 @@ }, /turf/open/floor/prison/whitegreenfull2, /area/patricks_rest/surface/building/offices) +"Vn" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonys) "Vp" = ( /obj/effect/ai_node, /turf/open/floor/plating/ground/mars/random/sand, @@ -9653,6 +10134,15 @@ "VG" = ( /turf/closed/wall/mainship, /area/patricks_rest/ground/colonys) +"VH" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 4 + }, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/patricks_rest/ground/colonys) "VI" = ( /turf/open/floor/plating/ground/concrete/lines{ dir = 4 @@ -9756,6 +10246,15 @@ }, /turf/open/floor/mainship/mono, /area/patricks_rest/surface/building/transformer_barracks) +"Wj" = ( +/obj/structure/largecrate/random/case/double, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 5 + }, +/area/patricks_rest/ground/colonyn) "Wk" = ( /obj/structure/flora/grass/tallgrass/tallgrasscorner{ color = "#7a8c54"; @@ -9988,6 +10487,13 @@ dir = 4 }, /area/patricks_rest/ground/colonyn) +"Xl" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/patricks_rest/ground/underground/cave) "Xm" = ( /obj/machinery/light{ dir = 4 @@ -10293,6 +10799,10 @@ /obj/machinery/microwave, /turf/open/floor/prison/whitegreenfull2, /area/patricks_rest/surface/building/residential_engi) +"YU" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som, +/turf/open/ground/grass/weedable/patch/grassyellow, +/area/patricks_rest/ground/colonyse) "YV" = ( /obj/structure/bed/chair/office/dark{ dir = 1 @@ -10337,6 +10847,9 @@ dir = 8 }, /obj/structure/flora/desert/grass, +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, /turf/open/ground/grass/weedable/patch/grassyellow, /area/patricks_rest/surface/building/residential_w) "Zd" = ( @@ -10423,6 +10936,14 @@ /obj/structure/bed/chair/office/dark, /turf/open/floor/mainship/mono, /area/patricks_rest/surface/building/ore_storage) +"Zx" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/som{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 1 + }, +/area/patricks_rest/ground/colonyn) "Zy" = ( /obj/machinery/light{ dir = 8 @@ -16831,7 +17352,7 @@ gk wj Yq Yq -zj +Yq Yq iy bH @@ -18650,12 +19171,12 @@ Ev Ev Ev AD -AD -KP -KP +ro +HZ +HZ tf tf -KP +HZ Ev Ev Ev @@ -19056,12 +19577,12 @@ tf tf tf tf +fM tf tf tf tf -tf -tf +fM up up up @@ -19445,9 +19966,9 @@ fN fN fN cc -va +Mt FP -qB +Ci qB qB qB @@ -19573,9 +20094,9 @@ QG Ow QG fN -yZ -wA -pW +lZ +Ic +sp cc va RW @@ -19652,7 +20173,7 @@ ud tz Km Lr -Rq +wz wz wz wz @@ -19705,7 +20226,7 @@ zB Ow Ow fN -cc +Zx JD fY cc @@ -19837,7 +20358,7 @@ zB Ow Ow fN -kO +Wj BA Bu cc @@ -19969,7 +20490,7 @@ zB zB Ow fN -MA +me DH MS XU @@ -20458,8 +20979,8 @@ NG Jx Ad Ad -ES -tz +CU +wH Km Lr wz @@ -20571,12 +21092,12 @@ ND ht hy ff -UR -wz +bC +ej tz Km -Lr -ES +rn +CU Ad ey ey @@ -20856,9 +21377,9 @@ NG Ad ES tz -Km -Lr -wz +Im +Ua +Eo bm "} (79,1,1) = {" @@ -21034,9 +21555,9 @@ XG AZ AZ AZ -AZ -fk -AZ +qw +CZ +Ve AZ sN sN @@ -21166,7 +21687,7 @@ XG AC AC AZ -AZ +kr fk AZ AZ @@ -21298,7 +21819,7 @@ XG WI WI AZ -nI +AZ fk AZ AZ @@ -22085,11 +22606,11 @@ wA wA wA Uj -va -iO -wA -pW -fk +Mt +Oa +Ic +sp +SZ Ow fk AZ @@ -22221,7 +22742,7 @@ va AZ AZ XG -fk +yW fk fk fk @@ -22285,17 +22806,17 @@ nH SO Ni UR -SO -Ni -Ni -wz +rt +NA +NA +ej tz Km Lr -Py -wz -wz -wz +Gi +Eo +Eo +ej wz wz vr @@ -22366,7 +22887,7 @@ xV dR Ol dR -xV +Af kp kp zX @@ -22412,7 +22933,7 @@ bQ Lr wz wz -wz +VH wz wz vr @@ -22420,14 +22941,14 @@ wz wz wz wz -wz +NI tz Km Lr -Py +sK Ni SO -Ni +QZ Ni SO SO @@ -22493,12 +23014,12 @@ AZ AZ AZ AZ -AZ +kr Qz wO tX Qz -Qz +MV Qz wO wk @@ -22559,7 +23080,7 @@ Lr Py Ni lX -QT +nM QT QT Cs @@ -22625,7 +23146,7 @@ cW cW cW cW -cW +Mb uK jE cd @@ -22940,7 +23461,7 @@ Km Lr wz wz -wz +Vn wz Lq GW @@ -23072,7 +23593,7 @@ Km Lr wz Ni -UR +Uo wz tz Km @@ -23205,7 +23726,7 @@ Lr VG VG UR -Eq +wz tz Km Km @@ -23304,7 +23825,7 @@ ME ME ME NW -TG +GX GX cC ME @@ -23729,8 +24250,8 @@ VG mx ob Km -Lr -mx +Ua +Nr VG Ni wz @@ -23819,10 +24340,10 @@ XQ Tn Wd Tt -HK +jx Qz wk -Pg +iU fw PL PL @@ -24218,9 +24739,9 @@ Tt HK Qz wk -Pg -Pg -Pg +Na +iU +iU Pg PL PL @@ -24343,14 +24864,14 @@ wW Ie tP Pg -Pg +db EQ kp kp nA Qz wk -Pg +db Pg Un Pg @@ -24396,9 +24917,9 @@ ao wz wz wz -wz -wz -tz +Mc +Mc +LJ Km Lr Py @@ -24475,7 +24996,7 @@ Go Vc cA UK -Pg +db HK Qz jT @@ -24607,7 +25128,7 @@ Wd Tt EC UK -Pg +db HK Qz Qz @@ -24650,8 +25171,8 @@ lX ao ao VG -mx -ob +Nr +Ey Km Lr mx @@ -24930,12 +25451,12 @@ tz Km Lr Py -Ni -Ni -Ni -Ni -lX -lX +vC +vC +vC +vC +PM +PM mS qj GE @@ -25142,9 +25663,9 @@ Qz wJ wO wk -Pg -Pg -Pg +iU +iU +iU UK Mq cJ @@ -25838,7 +26359,7 @@ Up Si UR Ni -Py +OD tz Km Lr @@ -25964,13 +26485,13 @@ eY eY Ni Ni +QZ Ni Ni Ni Ni Ni -Ni -Py +Em tz Km Lr @@ -26096,13 +26617,13 @@ eY eY Ni UR +QZ Ni Ni Ni Ni Ni -Ni -Py +Em tz Km Lr @@ -26219,13 +26740,13 @@ eY eY eY eY -eY +zg eY LF eY eY eY -eY +zg Jq Jq bs @@ -26234,7 +26755,7 @@ bs hW bs Jq -le +gV iX Rr MO @@ -26357,7 +26878,7 @@ eY eY eY eY -eY +zg Jq Jq Jq @@ -26366,7 +26887,7 @@ HI bs HI Jq -le +gV iX HE MO @@ -26498,7 +27019,7 @@ zC zC zC zC -le +ww iX HE MO @@ -26615,7 +27136,7 @@ eY eY eY eY -eY +zg eY LF eY @@ -26747,7 +27268,7 @@ eY eY eY eY -eY +zg Vv Vv Vv @@ -27818,14 +28339,14 @@ to to to to -le -iX +Cr +ie Rr MO we -Jq -Jq -Jq +kc +pD +DQ bs ao ao @@ -27911,10 +28432,10 @@ uc uc uc uc -UC -Bb -Wx -vW +Bg +AP +uS +Gu eY eY eY @@ -27957,7 +28478,7 @@ MO we Jq Jq -Jq +Ub bs ao ao @@ -28089,7 +28610,7 @@ MO we Jq BV -bs +YU bs ao ao @@ -28221,7 +28742,7 @@ MO we HI bs -TR +DG HI bs ao @@ -28479,7 +29000,7 @@ uJ uJ uJ Au -HE +dd HE MO we @@ -28611,7 +29132,7 @@ uJ uJ uJ Au -HE +dd HE MO we @@ -28744,8 +29265,8 @@ uJ uJ Au HE -HE -MO +Nu +aW CN bG bG @@ -29755,14 +30276,14 @@ mC mC mC mC -eY -eY -eY -eY +Fr +Fr +Fr +Xl GM hA VN -ae +DS ae ae ae @@ -30700,7 +31221,7 @@ Vv Vv Vv Vv -FB +Vv Vv Vv Vv @@ -30962,7 +31483,7 @@ SA IX IX Jz -Jz +ni Jz Jz zV @@ -30972,7 +31493,7 @@ mL Jz Jz Jz -IX +yh IX IX QW @@ -31094,7 +31615,7 @@ IX IX IX Jz -Jz +ni Jz Jz Vp @@ -31104,7 +31625,7 @@ Jz Jz Jz Jz -IX +yh SA IX sf @@ -31226,7 +31747,7 @@ IX IX IX IX -IX +ql IX IX IX @@ -31236,7 +31757,7 @@ Jz Jz Jz Jz -IX +yh IX IX fx @@ -31358,7 +31879,7 @@ IX SA SA IX -IX +ql IX IX IX @@ -31632,7 +32153,7 @@ IX IX IX IX -IX +yh IX IX IX @@ -31764,7 +32285,7 @@ Jz Jz Jz IX -IX +yh IX IX fx @@ -31896,7 +32417,7 @@ Jz Jz Jz Jc -SA +uC SA IX lg @@ -32028,7 +32549,7 @@ Jz Jz Jz IX -IX +yh SA IX kz @@ -32160,7 +32681,7 @@ Jz Jz Jz IX -IX +yh IX IX IX @@ -32279,7 +32800,7 @@ VN Cu IX Jz -Jz +ni Jz IX IX @@ -32411,10 +32932,10 @@ ST Cu IX IX +ql IX IX -IX -IX +ql IX bq IX @@ -32546,7 +33067,7 @@ SA IX IX IX -ZM +Ht IX IX Jz @@ -32556,7 +33077,7 @@ Jz Jz Jz Jz -Jz +po SA IX kz @@ -32678,7 +33199,7 @@ IX IX IX IX -Jz +ni Jz Jz Jz @@ -32688,7 +33209,7 @@ jG rZ Ko Jz -Jz +po Jz IX IX @@ -32807,7 +33328,7 @@ ae ae IX IX -IX +ql Jz Jz Jz @@ -32820,7 +33341,7 @@ rU rU rU Ko -Jz +po Jz Jz IX diff --git a/_maps/map_files/Campaign maps/som_base/sombase.dmm b/_maps/map_files/Campaign maps/som_base/sombase.dmm index 52140d2de9fab..47a80bd1995ba 100644 --- a/_maps/map_files/Campaign maps/som_base/sombase.dmm +++ b/_maps/map_files/Campaign maps/som_base/sombase.dmm @@ -15720,11 +15720,6 @@ /obj/machinery/power/apc, /turf/open/floor/mainship/mono, /area/rocinante_base/surface/building/living/janitor) -"vOw" = ( -/obj/structure/table/black, -/obj/item/hardpoint/treads, -/turf/open/floor/mainship/mono, -/area/rocinante_base/surface/building/cargo/southern_aux) "vPC" = ( /obj/structure/flora/grass/tallgrass/tallgrasscorner{ color = "#5b7857"; @@ -34481,7 +34476,7 @@ gnj jaw jaw jaw -vOw +lJq tao oVs pEm @@ -34633,7 +34628,7 @@ gnj aSY gOG cQP -vOw +lJq oVs oVs pEm diff --git a/_maps/map_files/Campaign maps/som_raid_base/som_raiding_base.dmm b/_maps/map_files/Campaign maps/som_raid_base/som_raiding_base.dmm new file mode 100644 index 0000000000000..798084c506985 --- /dev/null +++ b/_maps/map_files/Campaign maps/som_raid_base/som_raiding_base.dmm @@ -0,0 +1,32262 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle/west) +"ac" = ( +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/tunnel) +"ad" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/south_east) +"af" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete/edge, +/area/campaign/som_raiding/outpost/tunnel/west) +"ag" = ( +/obj/structure/table/black, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"ah" = ( +/obj/machinery/vending/nanomed{ + dir = 4 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command/cic) +"ai" = ( +/turf/open/floor/tile/dark/green2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"aj" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel/west) +"al" = ( +/obj/structure/cable, +/turf/open/floor/tile/brown{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/qm) +"am" = ( +/obj/structure/prop/brokenvendor/brokenuniformvendor/specialist, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"aq" = ( +/obj/structure/monorail, +/obj/item/target/syndicate, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/firing_range) +"at" = ( +/obj/structure/table/reinforced, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/qm) +"av" = ( +/turf/open/floor/plating/ground/concrete/edge{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/tunnel) +"ay" = ( +/obj/structure/prop/nt_computer, +/turf/open/floor/mainship/tcomms, +/area/campaign/som_raiding/outpost/command/telecom) +"az" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/north) +"aA" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/tunnel/west) +"aC" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command) +"aD" = ( +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/south_post) +"aE" = ( +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/construction) +"aG" = ( +/obj/structure/bed/chair/alt{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/living/briefing) +"aH" = ( +/turf/open/floor/tile/brown{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/qm) +"aI" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/living) +"aJ" = ( +/turf/open/floor/plating/ground/concrete/lines{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req) +"aM" = ( +/obj/structure/prop/mainship/gelida/rails, +/obj/effect/turf_decal/sandedge{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"aP" = ( +/obj/structure/largecrate/random/case/double, +/turf/open/floor/tile/brown{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/req/qm) +"aQ" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/south) +"aT" = ( +/obj/structure/ship_ammo/cas/bomblet, +/turf/open/floor/tile/dark/brown2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/req/secure) +"aU" = ( +/obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/cope/predeployed, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel) +"aW" = ( +/obj/structure/table/mainship, +/obj/item/tool/kitchen/tray, +/obj/effect/spawner/random/food_or_drink/burger, +/obj/effect/spawner/random/food_or_drink/burger, +/turf/open/floor/tile/barber, +/area/campaign/som_raiding/outpost/living/kitchen) +"aY" = ( +/obj/machinery/light, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"bd" = ( +/obj/structure/cable, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/med) +"be" = ( +/obj/machinery/light, +/obj/structure/closet/firecloset/full, +/turf/open/floor/tile/brown, +/area/campaign/som_raiding/outpost/req/qm) +"bg" = ( +/obj/structure/platform{ + dir = 4 + }, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/qm) +"bh" = ( +/obj/structure/largecrate/supply/explosives/mortar_he, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"bi" = ( +/obj/structure/largecrate/random/case/double, +/turf/open/floor/tile/dark/brown2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/req/secure) +"bk" = ( +/obj/structure/rock/variable/jungle_large, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"bl" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/west) +"bp" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/central_corridor) +"bq" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/south_post) +"bs" = ( +/obj/machinery/light/red{ + dir = 8 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command/cic) +"bt" = ( +/obj/structure/rock/variable/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"bv" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/southeast_post) +"by" = ( +/obj/structure/prop/mainship/gelida/rails{ + dir = 1 + }, +/obj/effect/turf_decal/sandedge{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"bz" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance) +"bA" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/security/cargo_post) +"bB" = ( +/obj/effect/turf_decal/sandedge/corner2{ + dir = 8 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"bC" = ( +/obj/structure/mine_structure/wooden/support_wall/broken, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/cave/tunnel) +"bD" = ( +/obj/effect/landmark/corpsespawner/marine/regular, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/construction) +"bE" = ( +/turf/open/floor/plating/dmg3, +/area/campaign/som_raiding/outpost/construction) +"bF" = ( +/turf/closed/gm/dense, +/area/campaign/som_raiding/ground/jungle) +"bH" = ( +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric/glass, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/qm) +"bJ" = ( +/obj/structure/rack, +/obj/item/weapon/gun/rifle/standard_carbine, +/obj/item/weapon/gun/rifle/standard_carbine, +/turf/open/floor/tile/dark/brown2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/secure) +"bK" = ( +/obj/machinery/light, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/firing_range) +"bL" = ( +/obj/effect/spawner/random/misc/structure/closet/welding, +/turf/open/floor/tile/dark/yellow2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/engineering) +"bM" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/south_west) +"bN" = ( +/obj/structure/cable, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/brown{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/aux) +"bO" = ( +/obj/effect/landmark/corpsespawner/bridgeofficer/regular, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/construction) +"bQ" = ( +/obj/structure/rack, +/turf/open/floor/tile/dark/brown2, +/area/campaign/som_raiding/outpost/req/secure) +"bR" = ( +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/construction) +"bS" = ( +/obj/structure/cable, +/obj/structure/extinguisher_cabinet{ + dir = 4 + }, +/turf/open/floor/tile/dark/red2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/security/north_post) +"bU" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/west) +"bV" = ( +/turf/open/ground/grass/beach/corner2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/north) +"bW" = ( +/obj/structure/window/reinforced, +/obj/machinery/computer/som_two{ + dir = 1 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command) +"bX" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/living) +"bY" = ( +/obj/structure/filingcabinet, +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/dark/red2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/security/southeast_post) +"cb" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric/glass, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"cc" = ( +/obj/structure/rock/variable/jungle/big, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/north) +"cd" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/req/secure) +"ce" = ( +/obj/structure/prop/mainship/gelida/rails{ + dir = 1 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_east) +"cg" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/cic) +"ch" = ( +/obj/structure/rack, +/turf/open/floor/freezer, +/area/campaign/som_raiding/outpost/living/kitchen) +"ci" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/tile/dark/blue2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/command) +"cj" = ( +/obj/machinery/power/apc{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"ck" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_east) +"cl" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/green2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/living) +"co" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/tile/dark/yellow2, +/area/campaign/som_raiding/outpost/engineering) +"cq" = ( +/obj/structure/largecrate/supply/weapons/pistols, +/turf/open/floor/tile/dark/brown2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/req/secure) +"cr" = ( +/obj/machinery/power/apc, +/obj/structure/cable, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/living) +"cs" = ( +/obj/structure/largecrate/random/case/double, +/turf/open/floor/tile/dark/brown2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/secure) +"ct" = ( +/turf/open/floor/tile/dark/green2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"cu" = ( +/turf/open/floor/mainship/red{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/living/briefing) +"cv" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2, +/area/campaign/som_raiding/outpost/engineering) +"cw" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/north) +"cx" = ( +/obj/machinery/door/airlock/mainship/security, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/cargo_post) +"cA" = ( +/obj/structure/prop/vehicle/crane{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"cB" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/tile/dark/blue2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command/north) +"cC" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/south) +"cD" = ( +/obj/structure/table/mainship, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"cF" = ( +/turf/open/floor/plating/dmg2, +/area/campaign/som_raiding/outpost/construction) +"cJ" = ( +/obj/machinery/computer/body_scanconsole, +/obj/structure/cable, +/turf/open/floor/mainship/sterile/dark, +/area/campaign/som_raiding/outpost/medbay) +"cM" = ( +/turf/open/floor/tile/brown{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/req/aux) +"cN" = ( +/obj/structure/platform_decoration, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"cP" = ( +/obj/structure/bed/bunkbed, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/green2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/living) +"cS" = ( +/obj/effect/turf_decal/sandedge/corner2{ + dir = 1 + }, +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"cT" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/red2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/security/south_post) +"cU" = ( +/obj/structure/morgue{ + dir = 2 + }, +/turf/open/floor/freezer, +/area/campaign/som_raiding/outpost/medbay) +"cV" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/obj/machinery/light, +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command/north) +"cW" = ( +/obj/structure/largecrate/supply/ammo/standard_ammo, +/turf/open/floor/tile/dark/brown2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/req/secure) +"cX" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/construction) +"cY" = ( +/obj/structure/table/mainship, +/obj/item/tool/kitchen/rollingpin, +/obj/effect/spawner/random/food_or_drink/kitchenknife, +/turf/open/floor/tile/barber, +/area/campaign/som_raiding/outpost/living/kitchen) +"da" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/tile/dark/blue2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/command/cic) +"db" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/tunnel) +"dd" = ( +/obj/structure/table/black, +/obj/effect/spawner/random/food_or_drink/donut, +/turf/open/floor/tile/dark/blue2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/command/north) +"dg" = ( +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command/captain) +"dk" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/north) +"dm" = ( +/obj/structure/mine_structure/cart, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/cave/tunnel) +"dn" = ( +/obj/structure/cable, +/obj/machinery/power/apc{ + dir = 8 + }, +/turf/open/floor/tile/brown{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/qm) +"dp" = ( +/obj/effect/landmark/patrol_point/som/som_22, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"dt" = ( +/obj/machinery/vending/snack, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"dv" = ( +/obj/effect/turf_decal/sandedge{ + dir = 8 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"dw" = ( +/obj/machinery/vending/nanomed{ + dir = 8 + }, +/turf/open/floor/tile/brown{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/req/qm) +"dy" = ( +/obj/machinery/computer/som, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/cic) +"dz" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/engineering) +"dA" = ( +/obj/machinery/computer/som_two{ + dir = 1 + }, +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command/cic) +"dB" = ( +/obj/structure/table/black, +/obj/item/explosive/grenade/incendiary/som, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"dC" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/south_west) +"dD" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/tile/brown{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/qm) +"dE" = ( +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/obj/structure/cable, +/turf/open/floor/tile/showroom, +/area/campaign/som_raiding/outpost/living/bathroom) +"dF" = ( +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/req) +"dG" = ( +/obj/effect/spawner/random/engineering/structure/tank_dispenser, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"dI" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/som_raiding/ground/jungle/south_west) +"dJ" = ( +/obj/machinery/light/red{ + dir = 4 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command/cic) +"dM" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle/north) +"dN" = ( +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/cic) +"dO" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/red2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/security/south_post) +"dR" = ( +/obj/structure/prop/mainship/gelida/rails{ + dir = 1 + }, +/obj/structure/mine_structure/cart, +/obj/effect/turf_decal/sandedge{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"dT" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/south_west) +"dU" = ( +/obj/structure/flora/jungle/bush, +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_east) +"dV" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/engie) +"dW" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/living) +"dZ" = ( +/obj/structure/prop/mainship/gelida/rails{ + dir = 1 + }, +/turf/open/floor/plating/ground/mars/random/cave, +/area/campaign/som_raiding/outpost/tunnel) +"ea" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/cargo_post) +"ec" = ( +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command) +"ef" = ( +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/med) +"ei" = ( +/obj/structure/reagent_dispensers/fueltank/barrel, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/box, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"ej" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/maintenance/med) +"ek" = ( +/obj/structure/stairs/seamless/platform_vert{ + dir = 8 + }, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/north) +"em" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/south_post) +"eq" = ( +/obj/structure/largecrate/random/case, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"er" = ( +/obj/effect/turf_decal/sandedge/corner2{ + dir = 1 + }, +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"et" = ( +/obj/structure/bed/bunkbed, +/turf/open/floor/tile/dark/green2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/living) +"eu" = ( +/obj/structure/prop/brokenvendor/engivend, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"ev" = ( +/turf/open/floor/tile/dark/green2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"ew" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/central_corridor) +"ex" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/south) +"ez" = ( +/obj/structure/cargo_container/ch_red, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"eA" = ( +/obj/machinery/door/airlock/mainship/security/glass/free_access{ + dir = 2 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/captain) +"eB" = ( +/obj/structure/rock/variable/jungle/big, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/west) +"eC" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"eD" = ( +/obj/structure/rack, +/obj/effect/spawner/random/misc/earmuffs, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/aux) +"eE" = ( +/obj/structure/table/black, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/firing_range) +"eF" = ( +/obj/structure/bed/chair/office/dark, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/qm) +"eG" = ( +/obj/structure/cable, +/turf/open/floor/mainship/sterile/dark, +/area/campaign/som_raiding/outpost/medbay) +"eH" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/north) +"eJ" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/hud/health, +/obj/item/storage/box/gloves{ + pixel_x = -5; + pixel_y = -5 + }, +/obj/item/storage/box/masks, +/turf/open/floor/mainship/sterile/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/medbay) +"eK" = ( +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/brown, +/area/campaign/som_raiding/outpost/req/aux) +"eM" = ( +/obj/structure/largecrate/random/case, +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"eN" = ( +/obj/effect/turf_decal/sandedge{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle) +"eQ" = ( +/obj/structure/prop/nt_computer/rack, +/turf/open/floor/mainship/tcomms, +/area/campaign/som_raiding/outpost/command/telecom) +"eT" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/showroom, +/area/campaign/som_raiding/outpost/living/bathroom) +"eV" = ( +/obj/effect/turf_decal/sandedge/corner2, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel/west) +"eW" = ( +/turf/closed/gm/dense, +/area/campaign/som_raiding/ground/jungle/north) +"eX" = ( +/obj/structure/flora/jungle/grass, +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"eY" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"fa" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/engineering/tech_supply, +/obj/effect/spawner/random/engineering/metal, +/turf/open/floor/tile/brown{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/req/qm) +"fb" = ( +/obj/structure/largecrate/random/case/double, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/central_corridor) +"fd" = ( +/obj/structure/extinguisher_cabinet{ + dir = 1 + }, +/obj/effect/turf_decal/box, +/obj/structure/reagent_dispensers/fueltank/xfuel, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"fe" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/req/north) +"fg" = ( +/turf/open/floor/plating/ground/concrete/edge{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/north) +"fj" = ( +/turf/open/floor/tile/dark/brown2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/req/secure) +"fk" = ( +/obj/machinery/door/airlock/hatch{ + dir = 1 + }, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/central_corridor) +"fl" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/west) +"fn" = ( +/obj/structure/table/reinforced, +/obj/item/healthanalyzer, +/obj/effect/spawner/random/medical/medbottle, +/obj/effect/spawner/random/medical/firstaid, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/mainship/sterile/side{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/medbay) +"fo" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/north) +"fp" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/operation) +"fq" = ( +/obj/effect/turf_decal/sandedge, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"fr" = ( +/obj/structure/cable, +/obj/machinery/power/fusion_engine/preset, +/turf/open/floor/tile/dark/yellow2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/engineering) +"fs" = ( +/obj/machinery/power/apc, +/obj/structure/cable, +/turf/open/floor/tile/neutral/full, +/area/campaign/som_raiding/outpost/living/canteen) +"ft" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/secure) +"fu" = ( +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/tunnel) +"fv" = ( +/obj/machinery/vending/boozeomat, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"fw" = ( +/obj/machinery/vending/coffee, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/brown{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/qm) +"fz" = ( +/obj/machinery/vending/snack, +/turf/open/floor/tile/neutral/full, +/area/campaign/som_raiding/outpost/living/canteen) +"fA" = ( +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command/cic) +"fC" = ( +/obj/structure/largecrate/random/case/small, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/secure) +"fD" = ( +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/engineering) +"fE" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/south_west) +"fF" = ( +/obj/structure/prop/brokenvendor/brokenmarinemedvendor, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"fG" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/largecrate/random/case/double, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"fH" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/living/canteen) +"fN" = ( +/turf/closed/gm/dense, +/area/campaign/som_raiding/ground/jungle/west) +"fO" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/req/north) +"fQ" = ( +/obj/structure/largecrate/supply/supplies, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"fR" = ( +/turf/open/floor/tile/dark/brown2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/req/secure) +"fT" = ( +/turf/open/ground/grass/beach{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/north) +"fX" = ( +/obj/structure/tankholder/extinguisher, +/turf/open/floor/tile/dark/brown2, +/area/campaign/som_raiding/outpost/req/secure) +"fY" = ( +/obj/structure/cable, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/tunnel/west) +"fZ" = ( +/obj/structure/flora/jungle/grass/thin, +/obj/effect/landmark/mob_spawner/farwa, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"ga" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/req/qm) +"gc" = ( +/obj/structure/closet/crate/internals, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"gf" = ( +/obj/machinery/door/airlock/multi_tile/mainship/medidoor{ + dir = 1 + }, +/turf/open/floor/mainship/sterile/dark, +/area/campaign/som_raiding/outpost/medbay) +"gh" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/item/reagent_containers/food/snacks/grown/potato, +/obj/item/reagent_containers/food/snacks/grown/potato, +/obj/item/reagent_containers/food/snacks/meat/monkey, +/obj/item/reagent_containers/food/snacks/meat/monkey, +/obj/item/reagent_containers/food/snacks/meat/monkey, +/obj/item/reagent_containers/food/snacks/grown/potato, +/obj/item/reagent_containers/food/snacks/grown/potato, +/obj/item/reagent_containers/food/snacks/grown/tomato, +/obj/item/reagent_containers/food/snacks/grown/tomato, +/obj/item/reagent_containers/food/snacks/grown/tomato, +/obj/item/reagent_containers/food/snacks/grown/tomato, +/obj/item/reagent_containers/food/snacks/grown/tomato, +/turf/open/floor/freezer, +/area/campaign/som_raiding/outpost/living/kitchen) +"gi" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/tile/brown{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/qm) +"gl" = ( +/turf/open/floor/tile/brown{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/aux) +"gm" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/south_east) +"gn" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"go" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle/south_west) +"gp" = ( +/obj/structure/largecrate, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel) +"gr" = ( +/obj/machinery/computer/som_two, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/north) +"gs" = ( +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command) +"gt" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/north) +"gu" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/south) +"gw" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/living/canteen) +"gx" = ( +/turf/open/floor/tile/dark/blue2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/cic) +"gy" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/som_raiding/ground/jungle) +"gz" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/adv, +/obj/machinery/light, +/turf/open/floor/mainship/sterile/side, +/area/campaign/som_raiding/outpost/medbay) +"gA" = ( +/turf/open/floor/tile/dark/brown2, +/area/campaign/som_raiding/outpost/req/secure) +"gB" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/req) +"gC" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/engineering/powercell, +/turf/open/floor/tile/brown{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/qm) +"gD" = ( +/obj/machinery/computer/som, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/north) +"gF" = ( +/obj/structure/table/black, +/obj/machinery/computer/emails, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command) +"gG" = ( +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command) +"gH" = ( +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"gI" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle) +"gJ" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/living/kitchen) +"gK" = ( +/obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/cope/predeployed, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/tunnel) +"gL" = ( +/obj/structure/prop/brokenvendor/surplusarmor, +/turf/open/floor/tile/dark/red2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/security/southeast_post) +"gM" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/tunnel) +"gN" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle/south) +"gR" = ( +/obj/structure/table/black, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/firing_range) +"gS" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command) +"gU" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"gW" = ( +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"gX" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/maintenance/cic) +"gZ" = ( +/obj/structure/largecrate/random/barrel/blue, +/turf/open/floor/tile/dark/brown2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/req/secure) +"hb" = ( +/obj/effect/turf_decal/sandedge{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel/west) +"hc" = ( +/obj/structure/largecrate/supply/powerloader, +/turf/open/floor/tile/dark/brown2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/req/secure) +"hd" = ( +/obj/structure/largecrate/random/barrel/green, +/turf/open/floor/tile/dark/brown2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/req/secure) +"he" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/southeast_post) +"hf" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/engineering) +"hg" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"hi" = ( +/turf/open/floor/tile/dark/blue2/corner, +/area/campaign/som_raiding/outpost/command) +"hj" = ( +/obj/effect/turf_decal/sandedge/corner2{ + dir = 8 + }, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/tunnel) +"hk" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/security/cargo_post) +"hl" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/engie) +"ho" = ( +/obj/structure/bed/chair/alt{ + dir = 8 + }, +/turf/open/floor/tile/dark/green2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"hq" = ( +/obj/structure/closet/toolcloset, +/turf/open/floor/tile/brown{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/req/qm) +"hs" = ( +/obj/effect/landmark/patrol_point/tgmc_23, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_west) +"ht" = ( +/obj/effect/turf_decal/sandedge{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/south) +"hu" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/west) +"hv" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/security/cargo_post) +"hw" = ( +/turf/open/ground/grass/beach{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/north) +"hx" = ( +/obj/structure/bed/chair/office/dark, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/cic) +"hz" = ( +/obj/structure/largecrate/random/barrel/green, +/turf/open/floor/tile/brown{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/aux) +"hA" = ( +/obj/structure/monorail, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/firing_range) +"hB" = ( +/obj/effect/turf_decal/warning_stripes/leader, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"hC" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/tile/dark/green2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"hD" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command) +"hE" = ( +/obj/machinery/power/smes/buildable/empty, +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/engineering) +"hF" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/west) +"hI" = ( +/obj/structure/bed/bunkbed, +/turf/open/floor/tile/dark/green2, +/area/campaign/som_raiding/outpost/living) +"hK" = ( +/obj/effect/turf_decal/sandedge/corner{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel) +"hL" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/north) +"hM" = ( +/obj/structure/table/black, +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command/north) +"hP" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/spawner/random/engineering/structure/gascan, +/turf/open/floor/tile/dark/yellow2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/engineering) +"hR" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark/green2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/living) +"hS" = ( +/obj/structure/filingcabinet, +/turf/open/floor/tile/brown{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/req/aux) +"hT" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/req) +"hU" = ( +/obj/structure/prop/vehicle/truck/destructible, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/tunnel) +"hW" = ( +/obj/structure/stairs/seamless/platform_vert{ + dir = 8 + }, +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command) +"hZ" = ( +/turf/open/floor/tile/dark/brown2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/req/secure) +"ia" = ( +/obj/structure/platform_decoration{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"ib" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/cic) +"ic" = ( +/obj/machinery/status_display, +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/living/briefing) +"id" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/construction) +"ie" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/green2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"ig" = ( +/obj/structure/table/black, +/obj/machinery/computer/emails, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/north) +"ih" = ( +/obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/cope/predeployed, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel/west) +"ij" = ( +/turf/open/floor/tile/dark/brown2/corner, +/area/campaign/som_raiding/outpost/req/secure) +"ik" = ( +/obj/machinery/computer/telecomms/server, +/turf/open/floor/tile/dark/blue2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/command/north) +"il" = ( +/obj/structure/bed/chair/alt{ + dir = 1 + }, +/obj/machinery/light, +/turf/open/floor/mainship/red, +/area/campaign/som_raiding/outpost/living/briefing) +"in" = ( +/turf/open/floor/tile/dark/blue2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command) +"io" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/tile/dark/red2, +/area/campaign/som_raiding/outpost/security/southeast_post) +"ip" = ( +/obj/effect/turf_decal/sandedge/corner2, +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"iq" = ( +/turf/open/floor/tile/dark/blue2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command/north) +"is" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/engineering) +"iu" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/south_west) +"iv" = ( +/obj/effect/landmark/mob_spawner/farwa, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"iy" = ( +/obj/structure/prop/vehicle/truck/truckcargo/destructible{ + dir = 1 + }, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/tunnel) +"iz" = ( +/obj/structure/bed/chair/alt{ + dir = 1 + }, +/turf/open/floor/mainship/red, +/area/campaign/som_raiding/outpost/living/briefing) +"iA" = ( +/obj/structure/cargo_container/hd, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"iB" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/central_corridor) +"iC" = ( +/obj/machinery/vending/nanomed{ + dir = 8 + }, +/turf/open/floor/mainship/sterile/corner, +/area/campaign/som_raiding/outpost/medbay) +"iD" = ( +/obj/structure/cable, +/turf/open/floor/mainship/red{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/living/briefing) +"iE" = ( +/obj/structure/cargo_container{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"iF" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/engie) +"iG" = ( +/turf/open/floor/tile/dark/red2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/security/west_post) +"iI" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle) +"iJ" = ( +/obj/structure/ship_ammo/cas/minirocket/incendiary, +/turf/open/floor/tile/dark/brown2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/req/secure) +"iK" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/engineering) +"iL" = ( +/obj/structure/largecrate/random/barrel/white, +/turf/open/floor/tile/brown{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/req/qm) +"iM" = ( +/obj/effect/turf_decal/sandedge/corner2{ + dir = 8 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"iO" = ( +/obj/structure/bed/chair/office/dark, +/turf/open/floor/tile/dark/blue2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command) +"iP" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/tile/dark/brown2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/req/secure) +"iQ" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark/brown2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/secure) +"iR" = ( +/obj/machinery/power/apc, +/obj/structure/cable, +/turf/open/floor/tile/dark/red2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/security/north_post) +"iS" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/tunnel/west) +"iT" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark/green2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/living) +"iU" = ( +/obj/structure/extinguisher_cabinet{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/firing_range) +"iW" = ( +/obj/machinery/computer/som_two, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/cic) +"iZ" = ( +/obj/structure/cargo_container/nt, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"jb" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"jd" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/structure/handheld_lighting, +/turf/open/floor/tile/dark/blue2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command/north) +"jf" = ( +/turf/open/floor/tile/dark/red2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/security/southeast_post) +"jh" = ( +/obj/structure/table/mainship, +/turf/open/floor/tile/dark/green2, +/area/campaign/som_raiding/outpost/central_corridor) +"ji" = ( +/obj/structure/cable, +/obj/machinery/power/apc{ + dir = 1 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance) +"jj" = ( +/obj/structure/prop/nt_computer/recorder, +/obj/machinery/light/red{ + dir = 1 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/cic) +"jk" = ( +/obj/structure/ship_ammo/cas/heavygun/highvelocity, +/turf/open/floor/tile/dark/brown2, +/area/campaign/som_raiding/outpost/req/secure) +"jl" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/hatch, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/living/canteen) +"jn" = ( +/obj/machinery/computer/som_two{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"jo" = ( +/obj/effect/landmark/patrol_point/som/som_24, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"jp" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/obj/effect/landmark/mob_spawner/farwa, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"ju" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/structure/handheld_lighting, +/obj/effect/spawner/random/engineering/powercell, +/turf/open/floor/tile/dark/yellow2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/engineering) +"jv" = ( +/obj/structure/sink{ + dir = 8 + }, +/obj/structure/mirror{ + dir = 8 + }, +/turf/open/floor/tile/showroom, +/area/campaign/som_raiding/outpost/living/bathroom) +"jw" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/beach/corner2{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/north) +"jy" = ( +/obj/structure/girder, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"jz" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/tunnel/west) +"jA" = ( +/obj/structure/table/reinforced, +/obj/item/bodybag/cryobag, +/turf/open/floor/mainship/sterile/side{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/medbay) +"jB" = ( +/obj/structure/rack, +/obj/item/ammo_magazine/rifle/standard_assaultrifle, +/obj/item/ammo_magazine/rifle/standard_assaultrifle, +/obj/item/ammo_magazine/rifle/standard_assaultrifle, +/obj/item/ammo_magazine/rifle/standard_assaultrifle, +/obj/item/ammo_magazine/rifle/standard_carbine, +/obj/item/ammo_magazine/rifle/standard_carbine, +/turf/open/floor/tile/dark/brown2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/req/secure) +"jC" = ( +/turf/open/floor/tile/dark/green2/corner, +/area/campaign/som_raiding/outpost/central_corridor) +"jD" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/beach{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/north) +"jI" = ( +/obj/effect/turf_decal/sandedge/corner{ + dir = 1 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"jJ" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/ground/jungle/south) +"jL" = ( +/obj/structure/largecrate/supply/supplies/mre, +/turf/open/floor/tile/dark/brown2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/req/secure) +"jM" = ( +/obj/structure/largecrate/supply/explosives/mines, +/turf/open/floor/tile/dark/brown2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/req/secure) +"jN" = ( +/obj/structure/ship_ammo/cas/bomb, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/secure) +"jQ" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle) +"jU" = ( +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel/west) +"jV" = ( +/turf/open/floor/tile/dark/blue2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command/cic) +"jX" = ( +/obj/structure/largecrate/random, +/obj/machinery/light, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"jY" = ( +/obj/structure/rock/variable/stalagmite, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/tunnel) +"jZ" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/sink{ + dir = 8 + }, +/turf/open/floor/mainship/sterile/side{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/medbay) +"kc" = ( +/obj/machinery/door/airlock/maintenance, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/construction) +"ke" = ( +/obj/structure/flora/tree/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"kf" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_west) +"kg" = ( +/obj/machinery/power/apc, +/obj/structure/cable, +/turf/open/floor/tile/dark/red2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/security/west_post) +"kh" = ( +/obj/machinery/vending/medical, +/turf/open/floor/mainship/sterile/side{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/medbay) +"ki" = ( +/obj/structure/bed/chair/alt{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/mainship/red{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/living/briefing) +"kk" = ( +/obj/structure/prop/mainship/gelida/rails, +/obj/structure/prop/mainship/gelida/rails{ + dir = 9 + }, +/obj/effect/turf_decal/sandedge{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"km" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/cave/tunnel) +"kn" = ( +/obj/machinery/vending/nanomed{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"ko" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle) +"kq" = ( +/obj/machinery/bodyscanner, +/turf/open/floor/mainship/sterile/side{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/medbay) +"kr" = ( +/obj/effect/turf_decal/sandedge{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/south) +"ks" = ( +/obj/effect/spawner/random/engineering/structure/tank, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/cic) +"kt" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/west) +"ku" = ( +/obj/structure/table/black, +/obj/item/explosive/grenade/som, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"kv" = ( +/turf/closed/mineral/smooth/indestructible, +/area/campaign/som_raiding/cave/tunnel) +"ky" = ( +/obj/structure/prop/brokenvendor/brokenuniformvendor, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"kz" = ( +/obj/machinery/light, +/turf/open/floor/mainship/sterile/side, +/area/campaign/som_raiding/outpost/medbay) +"kA" = ( +/obj/structure/flora/tree/jungle, +/turf/open/liquid/water, +/area/campaign/som_raiding/ground/jungle/north) +"kB" = ( +/turf/open/floor/plating/ground/concrete/lines, +/area/campaign/som_raiding/outpost/req) +"kC" = ( +/turf/open/ground/grass/beach{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/north) +"kD" = ( +/obj/structure/filingcabinet, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/central_corridor) +"kG" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/north) +"kI" = ( +/obj/structure/flora/tree/jungle/small, +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"kJ" = ( +/obj/effect/turf_decal/sandedge/corner, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"kK" = ( +/obj/structure/largecrate/random/case/double, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"kL" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/green2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"kM" = ( +/obj/structure/prop/mainship/gelida/railbumper{ + dir = 1 + }, +/obj/effect/turf_decal/sandedge{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"kN" = ( +/obj/structure/cargo_container/nt{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"kO" = ( +/obj/structure/prop/oresilo, +/turf/open/floor/tile/dark/brown2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/req/secure) +"kP" = ( +/turf/open/floor/tile/dark/blue2/corner, +/area/campaign/som_raiding/outpost/command/cic) +"kQ" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/living) +"kR" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/red2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/security/cargo_post) +"kT" = ( +/obj/structure/rock/variable/jungle/big, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"kU" = ( +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"kW" = ( +/turf/open/ground/grass/beach{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/west) +"kX" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/south_east) +"lb" = ( +/obj/structure/rack, +/obj/item/weapon/gun/rifle/standard_lmg, +/obj/item/weapon/gun/rifle/standard_lmg, +/turf/open/floor/tile/dark/brown2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/req/secure) +"lc" = ( +/obj/machinery/smartfridge, +/turf/open/floor/freezer, +/area/campaign/som_raiding/outpost/living/kitchen) +"ld" = ( +/obj/structure/prop/brokenvendor/brokenweaponsrack, +/turf/open/floor/tile/dark/red2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/security/southeast_post) +"le" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/cic) +"lf" = ( +/obj/structure/largecrate/random, +/turf/open/floor/tile/dark/brown2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/req/secure) +"lg" = ( +/obj/effect/turf_decal/sandedge{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"lh" = ( +/obj/effect/spawner/random/engineering/tool, +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"li" = ( +/obj/machinery/light, +/turf/open/floor/mainship/tcomms, +/area/campaign/som_raiding/outpost/command/telecom) +"lj" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"ln" = ( +/obj/structure/platform, +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/req/north) +"lp" = ( +/obj/effect/landmark/mob_spawner/farwa, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/west) +"lq" = ( +/obj/structure/largecrate/random, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"lr" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/extinguisher, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/req) +"ls" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/req/north) +"lt" = ( +/obj/structure/largecrate/supply/ammo/m41a, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/secure) +"lu" = ( +/obj/structure/prop/nt_computer, +/turf/open/floor/tile/dark/blue2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/command/cic) +"lv" = ( +/turf/open/floor/tile/brown{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/req/qm) +"lw" = ( +/turf/open/ground/grass/beach/corner{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/west) +"ly" = ( +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric/glass, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/req/north) +"lB" = ( +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric/glass, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/req) +"lC" = ( +/obj/structure/rock/variable/jungle, +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/west) +"lD" = ( +/obj/structure/flora/drought/shroom/brain, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/cave/tunnel) +"lE" = ( +/obj/structure/cargo_container/nt{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"lF" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/req) +"lH" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/living/canteen) +"lI" = ( +/turf/open/ground/grass/beach/corner{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/north) +"lL" = ( +/obj/machinery/computer/som_two{ + dir = 4 + }, +/turf/open/floor/tile/dark/red2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/security/cargo_post) +"lM" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/req/north) +"lO" = ( +/obj/effect/turf_decal/sandedge/corner{ + dir = 4 + }, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/tunnel) +"lP" = ( +/obj/machinery/door/airlock/mainship/security{ + dir = 2 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/north_post) +"lQ" = ( +/obj/machinery/computer/som{ + dir = 1 + }, +/turf/open/floor/tile/dark/red2, +/area/campaign/som_raiding/outpost/security/north_post) +"lT" = ( +/obj/structure/extinguisher_cabinet, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"lU" = ( +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric/glass, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/south_post) +"lV" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/effect/spawner/random/medical/firstaid, +/obj/effect/spawner/random/medical/heal_pack, +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/medbay) +"lW" = ( +/obj/structure/flora/drought/shroom/lure_weed, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/cave/tunnel) +"lX" = ( +/obj/effect/turf_decal/sandedge/corner{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/north) +"lY" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance) +"ma" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command/north) +"mb" = ( +/obj/structure/rack, +/obj/item/weapon/gun/rifle/standard_assaultrifle, +/obj/item/weapon/gun/rifle/standard_assaultrifle, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/secure) +"md" = ( +/obj/machinery/computer/som_two{ + dir = 1 + }, +/turf/open/floor/tile/dark/red2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/security/north_post) +"me" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/tunnel) +"mf" = ( +/turf/open/floor/tile/dark/brown2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/secure) +"mh" = ( +/obj/structure/cable, +/obj/item/trash/cigbutt, +/obj/item/trash/cigbutt, +/turf/open/floor/tile/dark/yellow2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/engineering) +"mi" = ( +/obj/structure/cable, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"mj" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/north) +"mk" = ( +/obj/structure/table/black, +/obj/item/clipboard, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/captain) +"mm" = ( +/turf/open/floor/plating/ground/concrete/lines{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/tunnel/west) +"mn" = ( +/obj/machinery/power/monitor{ + name = "Main Power Grid Monitoring" + }, +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/engineering) +"mp" = ( +/obj/structure/table/black, +/turf/open/floor/tile/dark/red2, +/area/campaign/som_raiding/outpost/security/north_post) +"mr" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/west_post) +"ms" = ( +/obj/structure/reagent_dispensers/fueltank/barrel, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/tunnel) +"mt" = ( +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"my" = ( +/obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/cope/predeployed, +/turf/open/floor/plating/ground/mars/random/cave, +/area/campaign/som_raiding/outpost/tunnel/west) +"mB" = ( +/turf/open/floor/tile/dark/green2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"mC" = ( +/obj/structure/largecrate/random/case/small, +/turf/open/floor/tile/dark/brown2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/secure) +"mD" = ( +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/central_corridor) +"mE" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/south_west) +"mF" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/north) +"mH" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/red2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/security/cargo_post) +"mI" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/tunnel) +"mJ" = ( +/turf/open/floor/mainship/sterile/dark, +/area/campaign/som_raiding/outpost/medbay) +"mN" = ( +/obj/structure/table/black, +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command/cic) +"mO" = ( +/turf/open/floor/mainship/sterile/corner{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/medbay) +"mP" = ( +/obj/structure/prop/brokenvendor/surplusclothes, +/turf/open/floor/tile/dark/red2, +/area/campaign/som_raiding/outpost/security/west_post) +"mQ" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"mR" = ( +/obj/structure/rock/variable/jungle, +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/som_raiding/ground/jungle/south_west) +"mT" = ( +/obj/effect/landmark/patrol_point/tgmc_14, +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_west) +"mU" = ( +/turf/open/floor/plating, +/area/campaign/som_raiding/cave/tunnel) +"mV" = ( +/obj/effect/turf_decal/sandedge/corner2{ + dir = 4 + }, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/tunnel) +"mW" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/living) +"mY" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/tunnel) +"mZ" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/turf/open/floor/mainship/som/ne, +/area/campaign/som_raiding/outpost/command) +"nb" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/brown2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/secure) +"nc" = ( +/obj/structure/rock/variable/jungle, +/obj/structure/flora/jungle/large_bush, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"nd" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/firing_range) +"ne" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"nf" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/south_post) +"ng" = ( +/obj/structure/table/mainship, +/obj/item/tool/kitchen/tray, +/obj/effect/spawner/random/food_or_drink/burger, +/turf/open/floor/tile/barber, +/area/campaign/som_raiding/outpost/living/kitchen) +"nh" = ( +/obj/structure/rack, +/obj/item/weapon/gun/shotgun/som/standard, +/obj/item/ammo_magazine/shotgun/buckshot, +/turf/open/floor/tile/dark/red2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/security/south_post) +"nj" = ( +/obj/structure/table/reinforced, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/mainship/sterile/side{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/medbay) +"nm" = ( +/obj/machinery/power/apc{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"no" = ( +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle) +"nr" = ( +/obj/structure/mine_structure/wooden/plank/alt, +/obj/structure/mine_structure/wooden/support_wall/beams, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/cave/tunnel) +"nt" = ( +/turf/open/floor/tile/dark/green2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/living) +"nw" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/green2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"nx" = ( +/obj/machinery/power/apc, +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/engineering) +"ny" = ( +/obj/structure/closet/crate, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"nz" = ( +/obj/structure/largecrate/random/case/double, +/turf/open/floor/tile/brown, +/area/campaign/som_raiding/outpost/req/aux) +"nC" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/qm) +"nD" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/medbay) +"nE" = ( +/turf/open/floor/tile/dark/blue2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command/north) +"nF" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/command/cic) +"nI" = ( +/obj/effect/turf_decal/sandedge/corner2{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel/west) +"nJ" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/north) +"nK" = ( +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/firing_range) +"nM" = ( +/obj/structure/filingcabinet, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"nN" = ( +/obj/machinery/computer/som_two{ + dir = 4 + }, +/turf/open/floor/tile/dark/red2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/security/southeast_post) +"nP" = ( +/obj/structure/flora/jungle/grass, +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_east) +"nQ" = ( +/obj/structure/table/black, +/obj/effect/spawner/random/food_or_drink/drink_cans, +/turf/open/floor/tile/dark/red2, +/area/campaign/som_raiding/outpost/security/north_post) +"nR" = ( +/obj/structure/cable, +/turf/open/floor/tile/brown{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/req/aux) +"nS" = ( +/obj/structure/prop/nt_computer/recorder, +/turf/open/floor/mainship/tcomms, +/area/campaign/som_raiding/outpost/command/telecom) +"nT" = ( +/obj/structure/prop/mainship/protolathe, +/turf/open/floor/tile/dark/blue2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/command/north) +"nU" = ( +/obj/item/trash/cigbutt, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/qm) +"nV" = ( +/obj/effect/turf_decal/warning_stripes/box, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"nX" = ( +/obj/structure/bed/chair/office/dark, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/north) +"nY" = ( +/obj/machinery/vending/snack, +/turf/open/floor/tile/dark/blue2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/command/north) +"oa" = ( +/obj/structure/largecrate/supply/weapons/shotgun, +/turf/open/floor/tile/dark/brown2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/req/secure) +"ob" = ( +/obj/structure/bed/chair/office/dark, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command) +"oc" = ( +/obj/structure/prop/brokenvendor/surplusarmor, +/turf/open/floor/tile/dark/red2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/security/south_post) +"od" = ( +/turf/open/floor/mainship/sterile/side{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/medbay) +"oe" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/north) +"of" = ( +/obj/structure/cable, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/med) +"oh" = ( +/turf/open/floor/tile/dark/red2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/security/south_post) +"oj" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/liquid/water, +/area/campaign/som_raiding/ground/jungle/north) +"ok" = ( +/turf/open/floor/mainship/sterile/side{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/medbay) +"ol" = ( +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/engineering) +"on" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/tile/dark/brown2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/req/secure) +"oo" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"oq" = ( +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/cave) +"ot" = ( +/obj/effect/landmark/corpsespawner/marine/regular, +/obj/effect/decal/cleanable/blood/six, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/construction) +"ou" = ( +/obj/structure/bed/fancy, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"ov" = ( +/obj/structure/prop/mainship/gelida/miner, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"ow" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/secure) +"ox" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/cic) +"oy" = ( +/obj/structure/rock/variable/jungle/big, +/obj/structure/flora/jungle/large_bush, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"oz" = ( +/obj/structure/prop/vehicle/truck/destructible, +/obj/effect/turf_decal/box, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"oA" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command) +"oB" = ( +/obj/structure/largecrate/random/case/double, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel) +"oC" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/som_raiding/ground/jungle/west) +"oF" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/construction) +"oG" = ( +/obj/structure/largecrate/random/barrel/white, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/secure) +"oH" = ( +/obj/structure/largecrate/supply/generator, +/turf/open/floor/tile/dark/brown2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/req/secure) +"oI" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command) +"oK" = ( +/obj/machinery/power/smes/buildable/empty, +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/engineering) +"oL" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"oM" = ( +/obj/structure/cargo_container/gorg{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"oO" = ( +/obj/effect/spawner/random/misc/structure/closet/tool, +/turf/open/floor/tile/brown{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/aux) +"oP" = ( +/obj/structure/cable, +/turf/open/floor/mainship/red{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/living/briefing) +"oR" = ( +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/cave/tunnel) +"oT" = ( +/obj/structure/closet/secure_closet/medical3/colony, +/turf/open/floor/mainship/sterile/corner{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/medbay) +"oV" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/aux) +"oW" = ( +/obj/effect/turf_decal/sandedge{ + dir = 8 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"oX" = ( +/obj/structure/largecrate/supply/medicine, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"oZ" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/maintenance) +"pb" = ( +/obj/structure/bed/bunkbed, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/living) +"pe" = ( +/turf/open/floor/mainship/tcomms, +/area/campaign/som_raiding/outpost/command/telecom) +"pg" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/beach, +/area/campaign/som_raiding/ground/jungle/north) +"pj" = ( +/obj/structure/largecrate/supply/ammo/standard_ammo, +/turf/open/floor/tile/brown{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/qm) +"pm" = ( +/obj/structure/largecrate/supply/explosives/grenades, +/turf/open/floor/tile/dark/brown2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/secure) +"pn" = ( +/obj/structure/ore_box, +/turf/open/floor/wood/alt_one, +/area/campaign/som_raiding/ground/jungle/south_east) +"pq" = ( +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric/glass{ + dir = 2 + }, +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"pr" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/liquid/water, +/area/campaign/som_raiding/ground/jungle/north) +"pt" = ( +/turf/open/floor/tile/brown{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/aux) +"pu" = ( +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/operation) +"pv" = ( +/obj/structure/bed/chair, +/turf/open/floor/tile/neutral/full, +/area/campaign/som_raiding/outpost/living/canteen) +"pw" = ( +/obj/machinery/telecomms/relay/preset/telecomms, +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/cave) +"px" = ( +/turf/open/floor/tile/dark/red2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/security/west_post) +"py" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/stairs/seamless/platform_vert{ + dir = 4 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/command) +"pz" = ( +/obj/structure/filingcabinet, +/turf/open/floor/tile/brown{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/qm) +"pA" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/south_east) +"pD" = ( +/obj/machinery/vending/nanomed{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"pE" = ( +/obj/structure/rock/variable/jungle/big, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_east) +"pH" = ( +/obj/machinery/power/apc{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/tile/brown{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/aux) +"pJ" = ( +/obj/structure/table/black, +/obj/machinery/computer/station_alert, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/north) +"pL" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/maintenance) +"pM" = ( +/obj/structure/bed/chair/alt{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/mainship/red/corner{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/living/briefing) +"pQ" = ( +/turf/open/floor/plating/ground/concrete/edge{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/tunnel/west) +"pT" = ( +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric/glass, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"pU" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"pV" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/west_post) +"pW" = ( +/obj/machinery/computer/som, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/north) +"pX" = ( +/obj/structure/extinguisher_cabinet{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/defibrillator, +/turf/open/floor/mainship/sterile/corner{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/medbay) +"pZ" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/som_raiding/ground/jungle/south_west) +"qa" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/north) +"qc" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/tunnel/west) +"qe" = ( +/obj/structure/largecrate/random/case/small, +/turf/open/floor/tile/dark/brown2, +/area/campaign/som_raiding/outpost/req/secure) +"qg" = ( +/turf/open/floor/plating/ground/concrete/lines{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/tunnel) +"qh" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/aux) +"qj" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/mini, +/turf/open/floor/tile/neutral/full, +/area/campaign/som_raiding/outpost/living/canteen) +"qm" = ( +/obj/effect/spawner/random/engineering/engibelt, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/operation) +"qn" = ( +/obj/structure/bookcase, +/turf/open/floor/tile/dark/blue2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/command/captain) +"qo" = ( +/obj/structure/sink/kitchen{ + dir = 1 + }, +/turf/open/floor/tile/barber, +/area/campaign/som_raiding/outpost/living/kitchen) +"qp" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/neutral/full, +/area/campaign/som_raiding/outpost/living/canteen) +"qq" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/living/briefing) +"qr" = ( +/obj/effect/turf_decal/warning_stripes/box, +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/security) +"qs" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"qt" = ( +/obj/structure/girder/displaced, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"qw" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"qy" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/red2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/security/north_post) +"qz" = ( +/obj/structure/extinguisher_cabinet{ + dir = 1 + }, +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command) +"qA" = ( +/obj/machinery/computer/som{ + dir = 8 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command/cic) +"qD" = ( +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel) +"qE" = ( +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/cic) +"qF" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2, +/area/campaign/som_raiding/ground/jungle/south_east) +"qH" = ( +/obj/effect/turf_decal/sandedge/corner, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel/west) +"qL" = ( +/obj/effect/landmark/patrol_point/som/som_23, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"qM" = ( +/obj/structure/largecrate/supply/floodlights, +/turf/open/floor/tile/dark/brown2, +/area/campaign/som_raiding/outpost/req/secure) +"qN" = ( +/obj/structure/bed/chair/alt{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command) +"qO" = ( +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/maintenance) +"qP" = ( +/obj/effect/turf_decal/sandedge/corner{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"qQ" = ( +/obj/structure/platform_decoration{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"qT" = ( +/obj/structure/cargo_container/hd{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"qU" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/north) +"qV" = ( +/obj/structure/reagent_dispensers/fueltank/barrel, +/turf/open/floor/tile/dark/brown2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/req/secure) +"qZ" = ( +/turf/open/floor/tile/dark/red2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/security/cargo_post) +"rb" = ( +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance) +"rc" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/food/snacks/chocolatebar, +/obj/item/reagent_containers/food/snacks/chocolatebar, +/obj/item/reagent_containers/food/snacks/chocolatebar, +/turf/open/floor/freezer, +/area/campaign/som_raiding/outpost/living/kitchen) +"rd" = ( +/obj/effect/turf_decal/sandedge/corner2, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"rf" = ( +/obj/structure/filingcabinet, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/brown{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/qm) +"rg" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance) +"rh" = ( +/obj/machinery/light/small, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/cic) +"rl" = ( +/obj/machinery/door/airlock/mainship/security{ + dir = 2 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"rn" = ( +/obj/structure/largecrate/supply/weapons/standard_smg, +/turf/open/floor/tile/dark/brown2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/secure) +"ro" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/som_raiding/ground/jungle/north) +"rr" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/west) +"rs" = ( +/obj/structure/prop/mainship/gelida/rails{ + dir = 1 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"rt" = ( +/obj/structure/largecrate/supply/explosives/mortar_he, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/secure) +"rv" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/north_post) +"rx" = ( +/obj/structure/largecrate, +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/brown, +/area/campaign/som_raiding/outpost/req/qm) +"ry" = ( +/obj/structure/table/black, +/obj/item/explosive/grenade/som, +/turf/open/floor/tile/dark/red2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/security/west_post) +"rz" = ( +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"rA" = ( +/obj/structure/kitchenspike, +/turf/open/floor/freezer, +/area/campaign/som_raiding/outpost/living/kitchen) +"rC" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/central_corridor) +"rF" = ( +/obj/structure/largecrate/supply/supplies, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/aux) +"rG" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/living/briefing) +"rI" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/mainship/engineering, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/engineering) +"rJ" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mainship/red{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/living/briefing) +"rK" = ( +/obj/machinery/door/airlock/mainship/medical/free_access{ + dir = 1 + }, +/turf/open/floor/mainship/sterile/dark, +/area/campaign/som_raiding/outpost/medbay) +"rL" = ( +/turf/closed/gm/dense, +/area/campaign/som_raiding/ground/jungle/south_west) +"rM" = ( +/turf/open/floor/mainship/sterile/side{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/medbay) +"rN" = ( +/turf/open/floor/mainship/red{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/living/briefing) +"rO" = ( +/obj/structure/cable, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command/north) +"rP" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/west_post) +"rU" = ( +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"rX" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/security) +"rY" = ( +/obj/structure/stairs, +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel) +"rZ" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/blue2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command) +"sa" = ( +/turf/open/floor/tile/dark/blue2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/command) +"sc" = ( +/turf/open/floor/plating/ground/concrete/lines, +/area/campaign/som_raiding/outpost/req/north) +"sd" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/req/qm) +"sf" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/mainship/sterile/dark, +/area/campaign/som_raiding/outpost/medbay) +"sg" = ( +/obj/structure/prop/mainship/gelida/rails{ + dir = 1 + }, +/obj/effect/turf_decal/sandedge/corner, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"sh" = ( +/obj/machinery/power/apc{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/mainship/sterile/side{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/medbay) +"si" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"sj" = ( +/turf/open/liquid/water, +/area/campaign/som_raiding/ground/jungle/west) +"sk" = ( +/obj/structure/prop/mainship/research/circuit_imprinter, +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command) +"sl" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/maintenance/operation) +"sm" = ( +/obj/structure/cable, +/obj/machinery/power/fusion_engine/preset, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/engineering) +"so" = ( +/obj/structure/cable, +/obj/machinery/vending/nanomed{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"sq" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete/edge, +/area/campaign/som_raiding/outpost/tunnel) +"sr" = ( +/obj/structure/prop/mainship/mapping_computer, +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command) +"st" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/tunnel) +"sv" = ( +/obj/structure/rock/variable/jungle, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle/south_east) +"sx" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/cic) +"sy" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/south_east) +"sB" = ( +/obj/effect/spawner/random/misc/structure/closet/tool, +/turf/open/floor/tile/dark/yellow2, +/area/campaign/som_raiding/outpost/engineering) +"sC" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/tech_supply, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance) +"sD" = ( +/turf/open/floor/tile/dark/red2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/security/southeast_post) +"sI" = ( +/obj/structure/largecrate/random/barrel/yellow, +/obj/structure/window{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/central_corridor) +"sM" = ( +/obj/effect/turf_decal/sandedge/corner2{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/north) +"sN" = ( +/turf/open/floor/plating/ground/mars/random/cave, +/area/campaign/som_raiding/ground/jungle/north) +"sO" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/qm) +"sP" = ( +/obj/structure/largecrate/guns/russian, +/turf/open/floor/tile/dark/brown2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/req/secure) +"sQ" = ( +/obj/structure/closet/cabinet, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/command/captain) +"sS" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/west) +"sT" = ( +/obj/effect/turf_decal/sandedge/corner{ + dir = 1 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"sU" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"sW" = ( +/obj/structure/mine_structure/wooden/plank/alt, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/cave/tunnel) +"sX" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_east) +"sZ" = ( +/obj/structure/prop/mainship/gelida/railbumper{ + dir = 1 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_east) +"ta" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle) +"tb" = ( +/obj/machinery/light/red{ + dir = 8 + }, +/obj/machinery/computer/som{ + dir = 8 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command/cic) +"tc" = ( +/turf/open/floor/tile/dark/red2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/security/west_post) +"tg" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"th" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/closed/gm/dense, +/area/campaign/som_raiding/ground/jungle/west) +"tk" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/req) +"tl" = ( +/obj/structure/table/black, +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command/cic) +"tm" = ( +/obj/machinery/power/apc{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"tn" = ( +/obj/structure/tankholder/extinguisher, +/turf/open/floor/tile/dark/brown2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/req/secure) +"to" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/command/cic) +"tp" = ( +/turf/open/floor/plating/ground/concrete/lines{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/tunnel/west) +"tq" = ( +/obj/effect/spawner/random/medical/medicalcloset, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/medbay) +"tr" = ( +/obj/structure/table/black, +/obj/machinery/computer3/server, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/north) +"ts" = ( +/obj/structure/largecrate/random/barrel/blue, +/turf/open/floor/tile/dark/brown2/corner, +/area/campaign/som_raiding/outpost/req/secure) +"tt" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/medical/health_analyzer, +/turf/open/floor/mainship/sterile/corner{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/medbay) +"tu" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/engineering) +"tv" = ( +/turf/open/floor/tile/brown{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/qm) +"tx" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/turf/open/floor/mainship/som/ne, +/area/campaign/som_raiding/outpost/living/briefing) +"tz" = ( +/obj/structure/platform_decoration{ + dir = 8 + }, +/obj/effect/spawner/random/engineering/structure/tank/waterweighted, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"tA" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/engineering/engibelt, +/turf/open/floor/tile/brown{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/qm) +"tB" = ( +/obj/structure/table/black, +/obj/machinery/light/red, +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command/cic) +"tC" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/structure/handheld_lighting, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/engineering) +"tD" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"tE" = ( +/obj/structure/prop/mainship/gelida/rails{ + dir = 4 + }, +/turf/open/floor/wood/alt_one, +/area/campaign/som_raiding/ground/jungle/south_east) +"tG" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle) +"tH" = ( +/obj/structure/bed/chair/office/dark, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"tJ" = ( +/obj/effect/turf_decal/sandedge{ + dir = 4 + }, +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"tK" = ( +/obj/structure/bed/chair/alt{ + dir = 1 + }, +/turf/open/floor/mainship/red{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/living/briefing) +"tL" = ( +/obj/structure/largecrate/random/case/double, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/secure) +"tM" = ( +/obj/structure/largecrate/random/case/double, +/turf/open/floor/tile/brown, +/area/campaign/som_raiding/outpost/req/qm) +"tO" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command) +"tP" = ( +/obj/structure/bed/chair/office/dark, +/obj/structure/cable, +/turf/open/floor/tile/dark/red2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/security/south_post) +"tS" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/ground/grass/beach, +/area/campaign/som_raiding/ground/jungle/west) +"tV" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/req/aux) +"tX" = ( +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/security/south_post) +"tZ" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/turf/open/floor/tile/dark/yellow2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/engineering) +"ua" = ( +/obj/structure/rack, +/turf/open/floor/tile/dark/blue2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/command/north) +"ub" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/cic) +"ud" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/computer/som_two, +/turf/open/floor/tile/dark/blue2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/command) +"ue" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command) +"uf" = ( +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/req) +"ug" = ( +/obj/structure/largecrate/random, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/qm) +"uj" = ( +/turf/open/ground/grass/beach/corner, +/area/campaign/som_raiding/ground/jungle/west) +"ul" = ( +/obj/structure/largecrate/guns/russian, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/brown2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/secure) +"uo" = ( +/obj/machinery/door/airlock/mainship/marine, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"uq" = ( +/turf/open/floor/tile/brown, +/area/campaign/som_raiding/outpost/req/aux) +"ur" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/green2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"ut" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/security/southeast_post) +"uw" = ( +/obj/structure/table/reinforced, +/turf/open/floor/freezer, +/area/campaign/som_raiding/outpost/medbay) +"ux" = ( +/obj/effect/spawner/random/engineering/engibelt, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"uy" = ( +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"uz" = ( +/obj/structure/table/mainship, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"uB" = ( +/turf/open/floor/freezer, +/area/campaign/som_raiding/outpost/medbay) +"uC" = ( +/turf/open/floor/mainship/sterile/corner{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/medbay) +"uE" = ( +/obj/structure/largecrate/random, +/obj/structure/cable, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/qm) +"uF" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/north) +"uG" = ( +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric/glass, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/aux) +"uH" = ( +/obj/structure/stairs/railstairs{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/qm) +"uI" = ( +/obj/structure/largecrate/random, +/turf/open/floor/tile/dark/brown2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/secure) +"uJ" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/south_west) +"uK" = ( +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/maintenance) +"uL" = ( +/obj/structure/extinguisher_cabinet{ + dir = 4 + }, +/turf/open/floor/tile/dark/yellow2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/engineering) +"uM" = ( +/turf/open/floor/tile/dark/green2/corner, +/area/campaign/som_raiding/outpost/living) +"uO" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/spawner/random/engineering/structure/gascan, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"uQ" = ( +/obj/structure/largecrate, +/obj/machinery/door/window, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/central_corridor) +"uR" = ( +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/captain) +"uT" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel) +"uU" = ( +/obj/structure/prop/mainship/gelida/railbumper{ + dir = 8 + }, +/turf/open/floor/wood/alt_one, +/area/campaign/som_raiding/ground/jungle/south_east) +"uV" = ( +/obj/structure/bed/chair/alt{ + dir = 1 + }, +/turf/open/floor/mainship/red{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/living/briefing) +"uW" = ( +/obj/effect/landmark/patrol_point/som/som_13, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/living) +"uY" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/secure) +"uZ" = ( +/obj/structure/table/black, +/obj/machinery/computer/emails, +/obj/structure/window/reinforced, +/turf/open/floor/tile/dark/blue2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command) +"va" = ( +/obj/structure/prop/vehicle/truck/truckcargo/destructible, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"vb" = ( +/obj/machinery/computer/som_two{ + dir = 4 + }, +/turf/open/floor/tile/dark/red2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/security/south_post) +"vc" = ( +/obj/structure/largecrate/guns, +/turf/open/floor/tile/dark/brown2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/req/secure) +"vd" = ( +/turf/open/floor/plating/ground/mars/random/cave, +/area/campaign/som_raiding/ground/jungle/south) +"ve" = ( +/obj/structure/largecrate/guns/merc, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/tunnel) +"vf" = ( +/obj/structure/largecrate/supply/explosives/mortar_he, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/brown2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/secure) +"vi" = ( +/obj/structure/prop/mainship/gelida/rails, +/turf/open/floor/plating/ground/mars/random/cave, +/area/campaign/som_raiding/ground/jungle) +"vj" = ( +/obj/structure/flora/jungle/bush, +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle) +"vk" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/blue2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command) +"vn" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/cic) +"vo" = ( +/obj/machinery/atmospherics/components/unary/cryo_cell{ + dir = 8 + }, +/turf/open/floor/mainship/sterile/side{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/medbay) +"vp" = ( +/obj/structure/bed/bunkbed, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/living) +"vq" = ( +/obj/structure/flora/jungle/grass/thin, +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"vv" = ( +/obj/structure/largecrate/random/barrel/yellow, +/turf/open/floor/tile/dark/brown2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/secure) +"vw" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/open/floor/tile/neutral/full, +/area/campaign/som_raiding/outpost/living/canteen) +"vA" = ( +/obj/structure/rock/variable/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"vB" = ( +/obj/machinery/power/apc, +/obj/structure/cable, +/turf/open/floor/tile/showroom, +/area/campaign/som_raiding/outpost/living/bathroom) +"vC" = ( +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/west) +"vD" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/turf/open/floor/mainship/som/sw, +/area/campaign/som_raiding/outpost/command) +"vE" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/red2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/security/southeast_post) +"vF" = ( +/obj/structure/cargo_container/horizontal, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"vG" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/secure) +"vI" = ( +/obj/structure/filingcabinet, +/turf/open/floor/tile/dark/blue2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command/captain) +"vL" = ( +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle/north) +"vM" = ( +/obj/effect/turf_decal/grassdecal/corner{ + dir = 4 + }, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/ground/jungle/south_east) +"vN" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle) +"vO" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/cave) +"vQ" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/tile/dark/yellow2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/engineering) +"vS" = ( +/obj/effect/turf_decal/sandedge/corner2{ + dir = 4 + }, +/obj/effect/turf_decal/sandedge{ + dir = 1 + }, +/obj/structure/prop/mainship/gelida/rails{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel) +"vT" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/security) +"vV" = ( +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel) +"vX" = ( +/obj/machinery/microwave, +/obj/structure/table/mainship, +/turf/open/floor/tile/barber, +/area/campaign/som_raiding/outpost/living/kitchen) +"vY" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/south_east) +"wb" = ( +/obj/machinery/light, +/obj/structure/cable, +/turf/open/floor/freezer, +/area/campaign/som_raiding/outpost/living/kitchen) +"wd" = ( +/obj/structure/xenoautopsy/tank, +/turf/open/floor/tile/dark/brown2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/secure) +"we" = ( +/obj/effect/turf_decal/grassdecal{ + dir = 1 + }, +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/ground/jungle/south_east) +"wf" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"wg" = ( +/obj/structure/table/black, +/obj/item/weapon/gun/pistol/som, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"wh" = ( +/obj/machinery/light, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"wi" = ( +/obj/structure/largecrate/supply/supplies/plasteel, +/turf/open/floor/tile/dark/brown2, +/area/campaign/som_raiding/outpost/req/secure) +"wj" = ( +/obj/structure/prop/mainship/gelida/rails{ + dir = 6 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"wl" = ( +/turf/open/floor/tile/dark/red2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/security/west_post) +"wn" = ( +/turf/open/floor/tile/dark/green2, +/area/campaign/som_raiding/outpost/central_corridor) +"wo" = ( +/obj/structure/flora/drought/shroom/nara_root, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/cave/tunnel) +"wp" = ( +/obj/structure/table/reinforced, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/machinery/light, +/turf/open/floor/mainship/sterile/side, +/area/campaign/som_raiding/outpost/medbay) +"wq" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/obj/machinery/light, +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command/north) +"wr" = ( +/obj/machinery/door/airlock/mainship/generic{ + dir = 2 + }, +/obj/structure/cable, +/turf/open/floor/freezer, +/area/campaign/som_raiding/outpost/living/kitchen) +"ws" = ( +/obj/machinery/power/apc, +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/tunnel) +"ww" = ( +/turf/open/floor/tile/dark/red2, +/area/campaign/som_raiding/outpost/security/cargo_post) +"wx" = ( +/obj/structure/largecrate/random, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/req) +"wy" = ( +/obj/structure/largecrate/supply/explosives/grenades, +/turf/open/floor/tile/dark/brown2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/secure) +"wz" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering/glass, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/engineering) +"wA" = ( +/obj/structure/stairs/edge{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/req) +"wE" = ( +/obj/structure/table/reinforced, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/showroom, +/area/campaign/som_raiding/outpost/living/bathroom) +"wF" = ( +/obj/structure/extinguisher_cabinet{ + dir = 1 + }, +/turf/open/floor/tile/dark/red2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/security/west_post) +"wI" = ( +/obj/effect/turf_decal/sandedge{ + dir = 1 + }, +/obj/structure/prop/mainship/gelida/rails{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel) +"wJ" = ( +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/central_corridor) +"wK" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/tile/dark/blue2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command) +"wL" = ( +/obj/machinery/vending/nanomed{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"wM" = ( +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/req/north) +"wN" = ( +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle/south_east) +"wO" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"wR" = ( +/obj/structure/flora/tree/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_east) +"wS" = ( +/obj/structure/cable, +/obj/item/trash/barcaridine, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/yellow2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/engineering) +"wT" = ( +/turf/open/floor/tile/dark/blue2/corner, +/area/campaign/som_raiding/outpost/command/north) +"wU" = ( +/turf/closed/wall/brick, +/area/campaign/som_raiding/ground/jungle/south_east) +"wV" = ( +/obj/structure/table/black, +/turf/open/floor/tile/dark/red2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/security/west_post) +"wW" = ( +/obj/structure/window/reinforced, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command) +"wY" = ( +/turf/open/floor/tile/dark/green2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"wZ" = ( +/turf/closed/mineral/smooth/indestructible, +/area/campaign/som_raiding/ground/jungle/south_east) +"xc" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/maintenance/req) +"xd" = ( +/obj/structure/table/reinforced, +/obj/item/bodybag/cryobag, +/obj/item/roller, +/turf/open/floor/mainship/sterile/side{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/medbay) +"xe" = ( +/obj/effect/spawner/random/misc/structure/flavorvending/engivend, +/turf/open/floor/tile/dark/yellow2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/engineering) +"xf" = ( +/turf/open/floor/plating/ground/concrete/edge{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/tunnel/west) +"xh" = ( +/turf/open/floor/tile/dark/yellow2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/engineering) +"xi" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/ground/jungle) +"xj" = ( +/turf/open/floor/plating/dmg2, +/area/campaign/som_raiding/outpost/firing_range) +"xk" = ( +/turf/closed/mineral/smooth/indestructible, +/area/campaign/som_raiding/ground/jungle/north) +"xm" = ( +/obj/structure/largecrate/supply/explosives/grenades, +/turf/open/floor/tile/dark/brown2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/req/secure) +"xp" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"xq" = ( +/obj/effect/turf_decal/grassdecal/corner{ + dir = 8 + }, +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/ground/jungle/south_east) +"xr" = ( +/obj/structure/largecrate/supply/ammo/shotgun, +/turf/open/floor/tile/dark/brown2, +/area/campaign/som_raiding/outpost/req/secure) +"xs" = ( +/obj/structure/table/black, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"xt" = ( +/obj/structure/prop/brokenvendor/brokenweaponsrack, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark/red2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/security/south_post) +"xv" = ( +/obj/structure/rock/variable/jungle_large, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"xw" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/operation) +"xx" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2, +/area/campaign/som_raiding/ground/jungle) +"xz" = ( +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/aux) +"xA" = ( +/obj/machinery/vending/nanomed{ + dir = 8 + }, +/turf/open/floor/tile/dark/red2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/security/cargo_post) +"xB" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/west) +"xC" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2, +/area/campaign/som_raiding/ground/jungle/north) +"xE" = ( +/turf/open/floor/mainship/sterile/side{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/medbay) +"xH" = ( +/obj/machinery/processor{ + pixel_y = 5 + }, +/obj/machinery/light, +/turf/open/floor/tile/barber, +/area/campaign/som_raiding/outpost/living/kitchen) +"xI" = ( +/obj/structure/largecrate/random, +/turf/open/floor/tile/dark/brown2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/req/secure) +"xL" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/red2, +/area/campaign/som_raiding/outpost/security/cargo_post) +"xO" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/red2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/security/cargo_post) +"xR" = ( +/obj/structure/window/framed/mainship/gray, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/qm) +"xS" = ( +/obj/effect/landmark/patrol_point/som/som_11, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/living) +"xT" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"xU" = ( +/obj/structure/reagent_dispensers/fueltank/barrel, +/turf/open/floor/tile/dark/brown2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/req/secure) +"xV" = ( +/obj/effect/landmark/mob_spawner/farwa, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_east) +"xW" = ( +/obj/effect/landmark/campaign_structure/drop_blocker, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_east) +"xZ" = ( +/obj/structure/prop/mainship/gelida/miner, +/turf/open/floor/plating/ground/mars/random/cave, +/area/campaign/som_raiding/outpost/tunnel) +"ya" = ( +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"yb" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/aux) +"ye" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2, +/area/campaign/som_raiding/ground/jungle/west) +"yf" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/red2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/security/west_post) +"yg" = ( +/turf/open/floor/tile/dark/yellow2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/engineering) +"yl" = ( +/obj/structure/girder, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/security/south_post) +"ym" = ( +/obj/effect/landmark/patrol_point/som/som_14, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/living) +"yo" = ( +/obj/structure/largecrate/supply/ammo/m41a, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/brown2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/secure) +"yq" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"ys" = ( +/turf/open/floor/tile/dark/red2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/security/north_post) +"yv" = ( +/turf/open/floor/tile/dark/red2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/security/south_post) +"yx" = ( +/obj/structure/mine_structure/wooden/support_wall/beams, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/cave/tunnel) +"yy" = ( +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/security/south_post) +"yz" = ( +/turf/closed/mineral/smooth/indestructible, +/area/campaign/som_raiding/cave) +"yC" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/engineering) +"yF" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/maintenance/cic) +"yG" = ( +/obj/structure/cable, +/turf/open/floor/mainship/sterile/side{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/medbay) +"yH" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/med) +"yI" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/living/canteen) +"yK" = ( +/turf/closed/gm/dense, +/area/campaign/som_raiding/ground/jungle/south_east) +"yL" = ( +/obj/structure/table/reinforced, +/obj/item/roller, +/obj/effect/spawner/random/medical/pillbottle, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/medbay) +"yN" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/freezer, +/area/campaign/som_raiding/outpost/medbay) +"yO" = ( +/obj/structure/ship_ammo/cas/bomb/fourhundred, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/secure) +"yP" = ( +/obj/machinery/power/port_gen/pacman/mrs, +/turf/open/floor/tile/dark/yellow2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/engineering) +"yR" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/north) +"yS" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/south_west) +"yT" = ( +/obj/structure/cable, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/operation) +"yU" = ( +/obj/machinery/door/airlock/hatch, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/west_post) +"yV" = ( +/obj/structure/prop/brokenvendor/brokenweaponsrack, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"yX" = ( +/turf/open/floor/tile/dark/blue2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/command) +"yZ" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/south) +"za" = ( +/turf/open/floor/tile/dark/brown2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/secure) +"zc" = ( +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/southeast_post) +"ze" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/req) +"zg" = ( +/obj/structure/prop/mainship/protolathe, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command) +"zi" = ( +/obj/structure/largecrate, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/central_corridor) +"zj" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/blue2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/command) +"zk" = ( +/turf/open/floor/tile/neutral/full, +/area/campaign/som_raiding/outpost/living/canteen) +"zl" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/hatch{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"zm" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/yellow2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/engineering) +"zo" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/operation) +"zq" = ( +/obj/structure/prop/mainship/gelida/rails{ + dir = 1 + }, +/obj/effect/turf_decal/sandedge{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"zt" = ( +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/dark/red2, +/area/campaign/som_raiding/outpost/security/west_post) +"zw" = ( +/obj/machinery/door/airlock/mainship/security{ + dir = 2 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/cargo_post) +"zx" = ( +/obj/structure/filingcabinet, +/turf/open/floor/tile/dark/blue2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/command/captain) +"zy" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/req/north) +"zz" = ( +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric/glass, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"zA" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/engineering) +"zB" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/north) +"zC" = ( +/obj/machinery/computer/som{ + dir = 1 + }, +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command/north) +"zD" = ( +/obj/structure/prop/mainship/halfbuilt_mech, +/obj/machinery/light, +/turf/open/floor/tile/dark/brown2, +/area/campaign/som_raiding/outpost/req/secure) +"zE" = ( +/obj/structure/rack, +/obj/effect/spawner/random/misc/greytide, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/brown{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/aux) +"zF" = ( +/obj/structure/table/black, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"zG" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/blue2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command/north) +"zI" = ( +/obj/structure/rack, +/obj/effect/spawner/random/food_or_drink/drink_cans, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance) +"zJ" = ( +/turf/open/floor/tile/dark/brown2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/req/secure) +"zL" = ( +/obj/machinery/door/airlock/hatch, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/living) +"zN" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/command/living) +"zP" = ( +/turf/open/floor/plating/ground/concrete/lines{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/tunnel/west) +"zQ" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/door/window{ + dir = 1 + }, +/turf/open/floor/tile/showroom, +/area/campaign/som_raiding/outpost/living/bathroom) +"zR" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/command/telecom) +"zS" = ( +/obj/structure/rock/variable/jungle_large, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_east) +"zT" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/command/telecom) +"zY" = ( +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"zZ" = ( +/obj/structure/largecrate/supply/weapons/hpr, +/turf/open/floor/tile/dark/brown2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Aa" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/req) +"Ab" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/med) +"Ac" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/med) +"Ad" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/command/north) +"Ag" = ( +/obj/structure/reagent_dispensers/fueltank/barrel, +/turf/open/floor/tile/dark/brown2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Ah" = ( +/obj/machinery/computer/som_two, +/turf/open/floor/tile/dark/blue2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/command) +"Ak" = ( +/obj/structure/bed/chair/alt{ + dir = 4 + }, +/turf/open/floor/tile/dark/green2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"Al" = ( +/turf/open/floor/mainship/red{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/living/briefing) +"An" = ( +/obj/structure/cable, +/turf/open/floor/tile/showroom, +/area/campaign/som_raiding/outpost/living/bathroom) +"Ap" = ( +/obj/structure/urinal, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/showroom, +/area/campaign/som_raiding/outpost/living/bathroom) +"As" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete/edge, +/area/campaign/som_raiding/outpost/req) +"Av" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/radio, +/obj/effect/spawner/random/engineering/cable, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/tunnel) +"Aw" = ( +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"Ay" = ( +/turf/open/floor/tile/dark/blue2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/command) +"Az" = ( +/obj/machinery/computer/som{ + dir = 4 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/command) +"AA" = ( +/obj/machinery/vending/snack, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"AB" = ( +/obj/structure/largecrate/supply/medicine/iv, +/turf/open/floor/tile/brown{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/req/aux) +"AC" = ( +/obj/structure/prop/mainship/gelida/rails, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"AE" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle/south) +"AI" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle/north) +"AJ" = ( +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command/captain) +"AO" = ( +/obj/structure/platform_decoration, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"AS" = ( +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command) +"AT" = ( +/obj/structure/reagent_dispensers/fueltank/barrel, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/secure) +"AU" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/south_west) +"AV" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/brown{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/aux) +"AW" = ( +/obj/structure/largecrate/supply/ammo/m41a_box, +/obj/machinery/light, +/turf/open/floor/tile/dark/brown2, +/area/campaign/som_raiding/outpost/req/secure) +"AY" = ( +/obj/structure/largecrate/supply/floodlights, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Ba" = ( +/turf/open/floor/plating/ground/concrete/edge{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req) +"Bd" = ( +/obj/machinery/computer/som_two{ + dir = 8 + }, +/turf/open/floor/tile/dark/red2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/security/north_post) +"Be" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command) +"Bg" = ( +/obj/structure/cable, +/turf/open/floor/tile/brown/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/aux) +"Bh" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/aux) +"Bj" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/req) +"Bk" = ( +/obj/machinery/power/apc, +/obj/structure/cable, +/turf/open/floor/tile/dark/red2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/security/cargo_post) +"Bm" = ( +/obj/effect/turf_decal/sandedge{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel/west) +"Bn" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/food_or_drink/burger, +/turf/open/floor/tile/neutral/full, +/area/campaign/som_raiding/outpost/living/canteen) +"Bq" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/mainship/som, +/area/campaign/som_raiding/outpost/living/briefing) +"Bt" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/qm) +"Bv" = ( +/obj/effect/turf_decal/sandedge/corner{ + dir = 8 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"Bw" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/engineering) +"Bx" = ( +/obj/structure/largecrate/random/case/double, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"By" = ( +/obj/structure/largecrate/supply/explosives/mortar_he, +/turf/open/floor/tile/dark/brown2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Bz" = ( +/obj/structure/cargo_container/ch_green{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"BA" = ( +/obj/structure/platform{ + dir = 9 + }, +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/maintenance/req) +"BB" = ( +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric/glass{ + dir = 2 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/north) +"BC" = ( +/obj/structure/table/mainship, +/obj/item/trash/barcaridine, +/turf/open/floor/tile/neutral/full, +/area/campaign/som_raiding/outpost/living/canteen) +"BD" = ( +/obj/structure/prop/mainship/gelida/rails{ + dir = 8 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"BE" = ( +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/qm) +"BF" = ( +/obj/structure/mine_structure/cart, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"BG" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/green2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"BH" = ( +/obj/structure/cable, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"BI" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/engineering) +"BJ" = ( +/obj/structure/extinguisher_cabinet{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"BK" = ( +/obj/machinery/gibber, +/turf/open/floor/freezer, +/area/campaign/som_raiding/outpost/living/kitchen) +"BL" = ( +/turf/open/floor/tile/dark/red2, +/area/campaign/som_raiding/outpost/security/southeast_post) +"BM" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/command/telecom) +"BO" = ( +/obj/structure/largecrate/supply/explosives/grenades, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark/brown2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/secure) +"BP" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/cargo_post) +"BQ" = ( +/obj/effect/spawner/random/engineering/structure/tank/fuelweighted, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance) +"BS" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/southeast_post) +"BU" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"BV" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/ground/jungle/south_west) +"BY" = ( +/obj/machinery/status_display, +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/security) +"Ca" = ( +/obj/structure/largecrate, +/turf/open/floor/tile/brown{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/aux) +"Cb" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/west_post) +"Cd" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/req/secure) +"Cf" = ( +/turf/open/floor/plating/ground/concrete/lines{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/north) +"Ch" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/south_east) +"Cj" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/north_post) +"Ck" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mainship/som/nw, +/area/campaign/som_raiding/outpost/living/briefing) +"Cl" = ( +/turf/open/floor/tile/dark/blue2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command) +"Cm" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/cargo_post) +"Cn" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/north) +"Co" = ( +/obj/structure/ship_ammo/cas/minirocket, +/turf/open/floor/tile/dark/brown2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Cp" = ( +/turf/open/floor/plating/ground/concrete/lines, +/area/campaign/som_raiding/outpost/tunnel/west) +"Cq" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/living/briefing) +"Ct" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_west) +"Cu" = ( +/obj/structure/bed/bunkbed, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/living) +"Cz" = ( +/turf/open/floor/plating/ground/concrete/lines{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req) +"CA" = ( +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/obj/effect/turf_decal/box, +/obj/effect/spawner/random/engineering/structure/tank/waterweighted, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"CB" = ( +/obj/structure/filingcabinet, +/turf/open/floor/tile/brown, +/area/campaign/som_raiding/outpost/req/aux) +"CD" = ( +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/living/briefing) +"CE" = ( +/obj/structure/prop/brokenvendor/surplusclothes, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"CF" = ( +/obj/machinery/door/airlock/mainship/generic, +/turf/open/floor/tile/barber, +/area/campaign/som_raiding/outpost/living/kitchen) +"CI" = ( +/obj/structure/extinguisher_cabinet, +/turf/open/floor/tile/brown{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/qm) +"CJ" = ( +/obj/effect/turf_decal/sandedge/corner2{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel) +"CK" = ( +/obj/machinery/power/apc, +/obj/structure/cable, +/turf/open/floor/mainship/red{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/living/briefing) +"CL" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/command/captain) +"CM" = ( +/turf/open/floor/plating/dmg1, +/area/campaign/som_raiding/outpost/construction) +"CN" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"CO" = ( +/obj/structure/largecrate/supply/supplies/sandbags, +/turf/open/floor/tile/dark/brown2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/req/secure) +"CP" = ( +/obj/machinery/door/airlock/maintenance, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/central_corridor) +"CR" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/tunnel/west) +"CS" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/red2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/security/cargo_post) +"CU" = ( +/obj/structure/ship_ammo/cas/heavygun, +/turf/open/floor/tile/dark/brown2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/req/secure) +"CW" = ( +/turf/open/floor/tile/dark/yellow2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/engineering) +"CZ" = ( +/obj/machinery/light, +/turf/open/floor/tile/dark/green2, +/area/campaign/som_raiding/outpost/central_corridor) +"Da" = ( +/obj/machinery/door/airlock/hatch{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/central_corridor) +"Dd" = ( +/turf/open/floor/tile/barber, +/area/campaign/som_raiding/outpost/living/kitchen) +"De" = ( +/obj/effect/turf_decal/sandedge/corner{ + dir = 8 + }, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/tunnel) +"Df" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/beach{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/north) +"Dg" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/south_east) +"Dk" = ( +/obj/structure/largecrate/supply/supplies/flares, +/turf/open/floor/tile/dark/brown2, +/area/campaign/som_raiding/outpost/req/secure) +"Dl" = ( +/obj/effect/turf_decal/sandedge/corner2{ + dir = 1 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"Dm" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"Dq" = ( +/obj/structure/extinguisher_cabinet{ + dir = 1 + }, +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command/cic) +"Dr" = ( +/obj/structure/table/black, +/obj/item/weapon/gun/rifle/mpi_km/black/magharness, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"Ds" = ( +/obj/machinery/door/airlock/hatch, +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/living/briefing) +"Dt" = ( +/obj/structure/largecrate, +/turf/open/floor/wood/alt_one, +/area/campaign/som_raiding/ground/jungle/south_east) +"Du" = ( +/obj/machinery/status_display, +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/command/living) +"Dv" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"Dy" = ( +/obj/structure/cargo_container/nt{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"Dz" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/cave/tunnel) +"DC" = ( +/obj/machinery/door/airlock/maintenance, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/req) +"DD" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/red2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/security/west_post) +"DE" = ( +/obj/machinery/computer/som, +/turf/open/floor/tile/dark/red2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/security/west_post) +"DF" = ( +/turf/open/floor/tile/dark/yellow2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/engineering) +"DG" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/freezer, +/area/campaign/som_raiding/outpost/medbay) +"DH" = ( +/obj/machinery/door/airlock/mainship/medical/free_access, +/turf/open/floor/mainship/sterile/dark, +/area/campaign/som_raiding/outpost/medbay) +"DI" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"DJ" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle) +"DK" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/captain) +"DL" = ( +/obj/effect/turf_decal/sandedge{ + dir = 1 + }, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/tunnel) +"DM" = ( +/obj/structure/cargo_container/ch_red{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"DO" = ( +/obj/structure/cable, +/obj/structure/stairs/edge, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/req) +"DP" = ( +/turf/open/floor/tile/dark/yellow2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/engineering) +"DQ" = ( +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle/west) +"DR" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/west) +"DS" = ( +/turf/open/floor/tile/dark/yellow2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/engineering) +"DT" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle) +"DU" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/mainship/som, +/area/campaign/som_raiding/outpost/command) +"DW" = ( +/obj/structure/rock/variable/jungle/big, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"DX" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/tile/dark/blue2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/command/north) +"Ea" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command) +"Eb" = ( +/obj/structure/table/black, +/turf/open/floor/tile/dark/blue2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/command/cic) +"Ec" = ( +/obj/effect/spawner/random/engineering/structure/tank/fuelweighted, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"Ef" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/green2, +/area/campaign/som_raiding/outpost/central_corridor) +"Eg" = ( +/turf/open/floor/wood/alt_one, +/area/campaign/som_raiding/ground/jungle/south_east) +"Ei" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/warning_stripes/box, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"Ej" = ( +/obj/structure/table/reinforced, +/obj/item/defibrillator, +/turf/open/floor/mainship/sterile/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/medbay) +"El" = ( +/obj/structure/stairs/seamless/platform{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/north) +"Em" = ( +/obj/effect/landmark/patrol_point/tgmc_24, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_west) +"En" = ( +/turf/open/floor/plating/ground/concrete/edge, +/area/campaign/som_raiding/outpost/tunnel) +"Eo" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark/yellow2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/engineering) +"Ep" = ( +/obj/structure/ship_ammo/cas/rocket/monarch, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/secure) +"Eq" = ( +/obj/machinery/door/airlock/mainship/marine{ + dir = 2 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"Er" = ( +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/tunnel) +"Et" = ( +/turf/open/floor/mainship/red{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/living/briefing) +"Eu" = ( +/turf/open/floor/mainship/red/corner{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/living/briefing) +"Ev" = ( +/obj/structure/largecrate/machine, +/turf/open/floor/wood/alt_one, +/area/campaign/som_raiding/ground/jungle/south_east) +"Ew" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle/south_west) +"Ex" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_east) +"Ey" = ( +/turf/open/floor/tile/dark/green2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"Ez" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/security/south_post) +"EA" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/north_post) +"EB" = ( +/obj/structure/flora/tree/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"ED" = ( +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"EF" = ( +/obj/structure/flora/jungle/large_bush, +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/west) +"EG" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command/north) +"EI" = ( +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/dark/green2, +/area/campaign/som_raiding/outpost/central_corridor) +"EJ" = ( +/turf/open/floor/plating/ground/concrete/edge{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/north) +"EK" = ( +/obj/structure/table/black, +/obj/machinery/vending/nanomed{ + dir = 4 + }, +/turf/open/floor/tile/dark/red2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/security/west_post) +"EL" = ( +/obj/structure/reagent_dispensers/fueltank/barrel, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel) +"EO" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/south_east) +"EP" = ( +/obj/structure/flora/jungle/bush, +/turf/closed/gm/dense, +/area/campaign/som_raiding/ground/jungle/west) +"EQ" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/obj/structure/bed/chair/alt, +/turf/open/floor/mainship/som/se, +/area/campaign/som_raiding/outpost/living/briefing) +"ER" = ( +/turf/open/floor/plating/ground/concrete/lines, +/area/campaign/som_raiding/outpost/tunnel) +"ES" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/central_corridor) +"ET" = ( +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"EV" = ( +/obj/structure/flora/drought/shroom, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/cave/tunnel) +"EY" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/security/north_post) +"Fa" = ( +/obj/effect/turf_decal/siding/dark, +/obj/structure/bed/chair/alt, +/turf/open/floor/mainship/som/s, +/area/campaign/som_raiding/outpost/living/briefing) +"Fc" = ( +/obj/machinery/cic_maptable/no_flags, +/turf/open/floor/tile/dark/red2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/security/south_post) +"Ff" = ( +/obj/structure/extinguisher_cabinet{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/item/roller, +/obj/effect/spawner/random/medical/pillbottle, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/mainship/sterile/side{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/medbay) +"Fi" = ( +/obj/machinery/vending/nanomed{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/firing_range) +"Fj" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/command/captain) +"Fl" = ( +/obj/structure/bed/chair/alt{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"Fn" = ( +/turf/open/ground/grass/beach/corner{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/north) +"Fo" = ( +/turf/open/floor/tile/dark/yellow2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/engineering) +"Fq" = ( +/obj/structure/bed/bunkbed, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/green2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/living) +"Fs" = ( +/turf/open/floor/tile/dark/red2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/security/south_post) +"Fv" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/tile/brown{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/aux) +"Fw" = ( +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_west) +"Fx" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/red2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/security/southeast_post) +"Fy" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2, +/area/campaign/som_raiding/ground/jungle/south_west) +"Fz" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/north) +"FA" = ( +/obj/structure/cable, +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/construction) +"FB" = ( +/obj/structure/cargo_container/nt, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"FC" = ( +/obj/structure/prop/mainship/mission_planning_system, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"FF" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/south_west) +"FG" = ( +/obj/structure/stairs/seamless/platform_vert{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/north) +"FH" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/green2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"FJ" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/computer/som_two, +/turf/open/floor/tile/dark/blue2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/command) +"FK" = ( +/obj/structure/bed/fancy, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"FL" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"FN" = ( +/obj/structure/bed/chair/office/dark, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"FQ" = ( +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/cic) +"FR" = ( +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric, +/turf/open/floor/tile/showroom, +/area/campaign/som_raiding/outpost/living/bathroom) +"FS" = ( +/turf/open/floor/tile/dark/red2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/security/cargo_post) +"FT" = ( +/obj/machinery/shower{ + dir = 1 + }, +/turf/open/floor/tile/showroom, +/area/campaign/som_raiding/outpost/living/bathroom) +"FU" = ( +/turf/open/floor/tile/dark/brown2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/secure) +"FV" = ( +/obj/machinery/light, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/firing_range) +"FZ" = ( +/obj/effect/turf_decal/grassdecal{ + dir = 1 + }, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/ground/jungle/south_east) +"Ga" = ( +/obj/structure/prop/mainship/gelida/rails, +/obj/effect/turf_decal/sandedge{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"Gc" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/tile/dark/blue2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/command/north) +"Ge" = ( +/obj/effect/turf_decal/sandedge/corner2{ + dir = 8 + }, +/obj/structure/flora/jungle/large_bush, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"Gf" = ( +/obj/machinery/vending/nanomed{ + dir = 8 + }, +/turf/open/floor/tile/dark/red2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/security/southeast_post) +"Gg" = ( +/obj/structure/rock/variable/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_east) +"Gh" = ( +/obj/structure/platform_decoration{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"Gj" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/north) +"Gk" = ( +/obj/structure/rock/variable/jungle/big, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_west) +"Gm" = ( +/obj/structure/ship_ammo/cas/rocket/fatty, +/turf/open/floor/tile/dark/brown2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Go" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/liquid/water, +/area/campaign/som_raiding/ground/jungle/west) +"Gp" = ( +/obj/structure/largecrate/random/barrel/green, +/turf/open/floor/plating/ground/mars/random/cave, +/area/campaign/som_raiding/outpost/tunnel) +"Gq" = ( +/obj/structure/bed/bunkbed, +/turf/open/floor/tile/dark/green2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/living) +"Gs" = ( +/obj/structure/prop/brokenvendor/brokenweaponsrack, +/turf/open/floor/tile/dark/red2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/security/west_post) +"Gt" = ( +/obj/machinery/power/apc, +/obj/structure/cable, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/cic) +"Gu" = ( +/obj/effect/turf_decal/sandedge/corner, +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"Gx" = ( +/obj/effect/turf_decal/sandedge/corner{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel/west) +"GA" = ( +/obj/structure/table/black, +/obj/machinery/computer/emails, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command) +"GC" = ( +/obj/structure/stairs/seamless/platform, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/north) +"GD" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/south_east) +"GF" = ( +/obj/machinery/door/airlock/hatch{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/secure) +"GG" = ( +/obj/structure/table/reinforced, +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/brown{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/qm) +"GI" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/powercell, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/central_corridor) +"GK" = ( +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_east) +"GL" = ( +/obj/item/trash/cigbutt, +/obj/item/trash/cigbutt, +/obj/structure/table/reinforced, +/obj/item/clipboard, +/obj/item/paper, +/obj/item/paper, +/obj/item/tool/pen/blue, +/obj/machinery/light, +/turf/open/floor/tile/brown, +/area/campaign/som_raiding/outpost/req/qm) +"GM" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/obj/structure/bed/chair/alt, +/turf/open/floor/mainship/som/sw, +/area/campaign/som_raiding/outpost/living/briefing) +"GN" = ( +/obj/effect/turf_decal/sandedge/corner, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"GP" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/red2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/security/southeast_post) +"GR" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"GS" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"GU" = ( +/turf/open/floor/tile/dark/green2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/living) +"GV" = ( +/obj/structure/bed/chair/alt{ + dir = 8 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/command) +"GW" = ( +/turf/open/floor/plating/ground/concrete/lines{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/tunnel) +"GX" = ( +/turf/open/floor/plating/ground/concrete/edge{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/north) +"Hc" = ( +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_east) +"Hd" = ( +/turf/open/floor/tile/dark/blue2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/command/north) +"Hi" = ( +/obj/structure/cargo_container/hd_blue, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"Hj" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/tile/dark/brown2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Hk" = ( +/turf/open/floor/tile/dark/blue2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command) +"Hl" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/south_west) +"Hm" = ( +/obj/structure/largecrate/random/barrel/green, +/turf/open/floor/tile/dark/brown2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Hn" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/blue2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command) +"Ho" = ( +/turf/closed/mineral/smooth/indestructible, +/area/campaign/som_raiding/ground/jungle/south) +"Hq" = ( +/obj/structure/cable, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"Hr" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"Hu" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/tunnel/west) +"Hw" = ( +/obj/structure/table/black, +/obj/item/explosive/grenade/som, +/turf/open/floor/tile/dark/red2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/security/north_post) +"Hx" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command/north) +"Hy" = ( +/obj/machinery/power/apc, +/obj/structure/cable, +/obj/effect/turf_decal/box, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"HA" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/req) +"HB" = ( +/obj/structure/cable, +/turf/open/floor/tile/brown{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/req/qm) +"HC" = ( +/obj/item/ammo_casing/shell, +/obj/item/ammo_casing/shell, +/obj/item/trash/cigbutt, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"HD" = ( +/turf/open/ground/grass/beach, +/area/campaign/som_raiding/ground/jungle/north) +"HE" = ( +/obj/structure/table/black, +/turf/open/floor/tile/dark/red2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/security/north_post) +"HF" = ( +/obj/structure/table/black, +/obj/effect/spawner/random/engineering/radio, +/turf/open/floor/tile/dark/red2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/security/south_post) +"HG" = ( +/obj/machinery/status_display, +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/command/captain) +"HI" = ( +/obj/machinery/door/airlock/maintenance, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/engineering) +"HJ" = ( +/turf/open/floor/plating/ground/concrete/lines{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/tunnel) +"HK" = ( +/obj/machinery/computer/som_two{ + dir = 4 + }, +/turf/open/floor/tile/brown{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/qm) +"HL" = ( +/turf/open/floor/mainship/sterile/side, +/area/campaign/som_raiding/outpost/medbay) +"HN" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/command/north) +"HO" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/construction) +"HQ" = ( +/obj/effect/spawner/random/misc/structure/closet/tool, +/turf/open/floor/tile/dark/yellow2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/engineering) +"HS" = ( +/obj/machinery/door/airlock/mainship/engineering, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/central_corridor) +"HV" = ( +/obj/structure/prop/brokenvendor/brokenspecialistvendor/corpsman, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"HX" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/central_corridor) +"HY" = ( +/obj/structure/prop/brokenvendor/brokenweaponsrack, +/turf/open/floor/tile/dark/red2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/security/cargo_post) +"HZ" = ( +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle/south_west) +"Ia" = ( +/turf/open/ground/grass/beach/corner2{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/north) +"Ic" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/tunnel) +"Ie" = ( +/obj/structure/cable, +/turf/open/floor/mainship/red, +/area/campaign/som_raiding/outpost/living/briefing) +"If" = ( +/turf/open/floor/tile/dark/green2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/living) +"Ig" = ( +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"Ii" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/power/apc{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark/blue2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/command) +"Ij" = ( +/turf/open/floor/plating/ground/concrete/edge{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req) +"Ik" = ( +/obj/effect/turf_decal/sandedge{ + dir = 8 + }, +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"Il" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/security/south_post) +"Im" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/tile/dark/brown2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/req/secure) +"In" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle) +"Io" = ( +/obj/structure/flora/jungle/grass/thin, +/obj/effect/landmark/mob_spawner/farwa, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/north) +"It" = ( +/obj/effect/spawner/random/engineering/assemblies, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/med) +"Iw" = ( +/turf/open/floor/tile/dark/green2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"IA" = ( +/obj/structure/largecrate, +/turf/open/floor/tile/brown{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/aux) +"IB" = ( +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/tunnel/west) +"IC" = ( +/obj/machinery/door/airlock/mainship/security, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/south_post) +"ID" = ( +/obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/cope/predeployed, +/turf/open/floor/plating/ground/mars/random/cave, +/area/campaign/som_raiding/ground/jungle) +"IE" = ( +/obj/effect/landmark/mob_spawner/farwa, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/cave/tunnel) +"IF" = ( +/obj/effect/landmark/patrol_point/tgmc_21, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_west) +"IH" = ( +/obj/structure/cargo_container/red{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"II" = ( +/turf/open/floor/plating/ground/mars/random/cave, +/area/campaign/som_raiding/outpost/tunnel) +"IK" = ( +/obj/effect/turf_decal/sandedge, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"IL" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/green2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"IN" = ( +/obj/machinery/door/airlock/mainship/medical/free_access{ + dir = 1 + }, +/turf/open/floor/freezer, +/area/campaign/som_raiding/outpost/medbay) +"IP" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/south) +"IQ" = ( +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_west) +"IR" = ( +/obj/structure/cargo_container/hd_blue{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"IS" = ( +/turf/open/floor/plating/ground/concrete/lines{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/tunnel) +"IT" = ( +/turf/open/floor/tile/dark/green2, +/area/campaign/som_raiding/outpost/living) +"IW" = ( +/obj/structure/ship_ammo/cas/rocket/swansong, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/secure) +"IX" = ( +/obj/structure/table/mainship, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command) +"IZ" = ( +/obj/structure/rack, +/obj/effect/spawner/random/misc/clipboard, +/turf/open/floor/tile/brown{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/aux) +"Ja" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle/south) +"Jd" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering/glass{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/engineering) +"Jf" = ( +/obj/structure/largecrate/random/barrel/yellow, +/turf/open/floor/wood/alt_one, +/area/campaign/som_raiding/ground/jungle/south_east) +"Jk" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/west) +"Jl" = ( +/obj/structure/extinguisher_cabinet, +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/medbay) +"Jn" = ( +/obj/structure/table/reinforced, +/turf/open/floor/tile/brown{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/req/qm) +"Jo" = ( +/obj/structure/reagent_dispensers/fueltank/barrel, +/turf/open/floor/tile/dark/brown2/corner, +/area/campaign/som_raiding/outpost/req/secure) +"Jp" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/toolbox, +/obj/effect/spawner/random/engineering/structure/handheld_lighting, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/cic) +"Jq" = ( +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"Jt" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"Ju" = ( +/obj/structure/cargo_container/ch_green, +/obj/effect/turf_decal/box, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"Jw" = ( +/turf/open/floor/mainship/red{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/living/briefing) +"Jx" = ( +/obj/machinery/bioprinter, +/turf/open/floor/mainship/sterile/corner{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/medbay) +"Jy" = ( +/obj/structure/cable, +/turf/open/floor/tile/brown, +/area/campaign/som_raiding/outpost/req/aux) +"Jz" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle) +"JA" = ( +/obj/structure/sink/bathroom, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/central_corridor) +"JB" = ( +/turf/open/floor/tile/dark/green2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/living) +"JC" = ( +/turf/open/floor/plating/ground/mars/random/cave, +/area/campaign/som_raiding/ground/jungle) +"JE" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle) +"JF" = ( +/obj/structure/table/black, +/obj/item/phone, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/captain) +"JH" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"JM" = ( +/obj/machinery/power/apc, +/obj/structure/cable, +/turf/open/floor/tile/dark/red2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/security/southeast_post) +"JN" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle/south) +"JO" = ( +/obj/structure/rack, +/obj/item/weapon/gun/rifle/standard_autoshotgun, +/obj/item/weapon/gun/rifle/standard_autoshotgun, +/turf/open/floor/tile/dark/brown2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/req/secure) +"JP" = ( +/obj/structure/bed/chair/alt, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"JU" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/red2, +/area/campaign/som_raiding/outpost/security/west_post) +"JV" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete/edge{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/tunnel) +"JW" = ( +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"JX" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/aux) +"JY" = ( +/obj/structure/cable, +/turf/open/floor/mainship/red/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/living/briefing) +"JZ" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/engineering) +"Kb" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/north) +"Kc" = ( +/obj/structure/xenoautopsy/tank, +/turf/open/floor/tile/dark/brown2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Kd" = ( +/turf/open/floor/tile/dark/blue2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/command/cic) +"Ke" = ( +/obj/structure/table/black, +/obj/structure/window/reinforced, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command) +"Kh" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/neutral/full, +/area/campaign/som_raiding/outpost/living/canteen) +"Kk" = ( +/obj/structure/cable, +/turf/open/floor/tile/barber, +/area/campaign/som_raiding/outpost/living/kitchen) +"Kl" = ( +/turf/open/floor/plating/dmg1, +/area/campaign/som_raiding/outpost/firing_range) +"Ko" = ( +/obj/structure/extinguisher_cabinet{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"Kp" = ( +/obj/structure/table/black, +/obj/machinery/faxmachine, +/obj/item/paper, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"Kq" = ( +/obj/effect/landmark/patrol_point/tgmc_12, +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/som_raiding/ground/jungle/south_west) +"Ks" = ( +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/living) +"Ku" = ( +/obj/structure/flora/jungle/large_bush, +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"Kx" = ( +/obj/structure/largecrate/random/barrel/white, +/turf/open/floor/tile/dark/brown2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Kz" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance) +"KB" = ( +/turf/open/floor/tile/dark/red2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/security/cargo_post) +"KD" = ( +/obj/effect/landmark/mob_spawner/farwa, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_west) +"KE" = ( +/obj/structure/table/mainship, +/obj/structure/extinguisher_cabinet/mini{ + dir = 4 + }, +/turf/open/floor/tile/barber, +/area/campaign/som_raiding/outpost/living/kitchen) +"KF" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"KG" = ( +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/north_post) +"KH" = ( +/turf/open/floor/plating/ground/concrete/lines{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/north) +"KI" = ( +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/firing_range) +"KJ" = ( +/turf/open/floor/plating/ground/concrete/edge{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/tunnel) +"KK" = ( +/obj/structure/prop/mainship/gelida/railbumper{ + dir = 8 + }, +/obj/structure/reagent_dispensers/fueltank/barrel, +/turf/open/floor/wood/alt_one, +/area/campaign/som_raiding/ground/jungle/south_east) +"KM" = ( +/obj/structure/cable, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/engie) +"KN" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/west) +"KO" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/fire, +/obj/item/storage/firstaid/fire, +/obj/effect/spawner/random/medical/bloodpack, +/obj/effect/spawner/random/medical/bloodpack, +/obj/effect/spawner/random/medical/bloodpack, +/turf/open/floor/mainship/sterile/corner{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/medbay) +"KU" = ( +/obj/machinery/vending/nanomed{ + dir = 1 + }, +/turf/open/floor/tile/dark/red2, +/area/campaign/som_raiding/outpost/security/south_post) +"KV" = ( +/obj/structure/prop/mainship/protolathe/security, +/turf/open/floor/tile/dark/blue2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/command) +"KW" = ( +/turf/closed/mineral/smooth/indestructible, +/area/campaign/som_raiding/outpost/living) +"La" = ( +/obj/structure/table/reinforced, +/obj/item/roller, +/obj/item/roller, +/obj/item/roller, +/turf/open/floor/mainship/sterile/side, +/area/campaign/som_raiding/outpost/medbay) +"Lb" = ( +/obj/structure/cable, +/turf/open/floor/tile/neutral/full, +/area/campaign/som_raiding/outpost/living/canteen) +"Lc" = ( +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/west_post) +"Le" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete/edge{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/tunnel/west) +"Lf" = ( +/obj/machinery/iv_drip, +/turf/open/floor/mainship/sterile/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/medbay) +"Lg" = ( +/obj/structure/largecrate/guns, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel) +"Li" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/tunnel) +"Lk" = ( +/turf/open/floor/tile/dark/yellow2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/engineering) +"Ll" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"Lo" = ( +/turf/open/ground/grass/beach/corner{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/north) +"Lp" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark/green2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"Lu" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/cic) +"Lv" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"Lw" = ( +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"Lx" = ( +/obj/structure/platform_decoration{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"Ly" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/north) +"LA" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/living/bathroom) +"LB" = ( +/obj/structure/mine_structure/wooden/support_wall, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/cave/tunnel) +"LC" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/qm) +"LD" = ( +/obj/structure/table/black, +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"LE" = ( +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric/glass{ + dir = 2 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"LG" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/medbay) +"LH" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"LI" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"LJ" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/liquid/water, +/area/campaign/som_raiding/ground/jungle/north) +"LK" = ( +/turf/open/ground/grass/beach/corner2, +/area/campaign/som_raiding/ground/jungle/west) +"LM" = ( +/obj/machinery/computer3/server/rack, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"LN" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"LO" = ( +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric/glass{ + dir = 2 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/living/canteen) +"LP" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/ground/jungle/south_east) +"LQ" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"LR" = ( +/obj/structure/cable, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark/green2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"LT" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/maintenance/req) +"LU" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/ground/jungle/west) +"LV" = ( +/obj/machinery/computer/som_two{ + dir = 8 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/command) +"LW" = ( +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/cic) +"LX" = ( +/obj/structure/table/mainship, +/obj/item/clothing/suit/storage/chef/classic, +/obj/item/clothing/head/chefhat, +/obj/item/clothing/gloves/latex, +/turf/open/floor/tile/barber, +/area/campaign/som_raiding/outpost/living/kitchen) +"LY" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/command/north) +"LZ" = ( +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"Ma" = ( +/obj/machinery/vending/nanomed{ + dir = 1 + }, +/turf/open/floor/mainship/sterile/side, +/area/campaign/som_raiding/outpost/medbay) +"Mb" = ( +/obj/structure/cable, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/construction) +"Me" = ( +/obj/structure/cable, +/turf/open/floor/freezer, +/area/campaign/som_raiding/outpost/living/kitchen) +"Mf" = ( +/obj/structure/table/black, +/obj/effect/spawner/random/engineering/cable, +/turf/open/floor/tile/dark/red2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/security/cargo_post) +"Mg" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/item/reagent_containers/food/snacks/flour, +/obj/item/reagent_containers/food/snacks/flour, +/obj/item/reagent_containers/food/snacks/flour, +/obj/item/reagent_containers/food/snacks/flour, +/obj/item/reagent_containers/food/snacks/flour, +/turf/open/floor/freezer, +/area/campaign/som_raiding/outpost/living/kitchen) +"Ml" = ( +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/secure) +"Mm" = ( +/obj/structure/table/black, +/obj/item/weapon/gun/pistol/som/standard, +/turf/open/floor/tile/dark/red2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/security/southeast_post) +"Mn" = ( +/obj/effect/landmark/patrol_point/tgmc_22, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/south_west) +"Mo" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command) +"Mp" = ( +/obj/structure/cargo_container/hd_blue{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"Mq" = ( +/obj/structure/largecrate/guns/russian, +/turf/open/floor/tile/dark/brown2/corner, +/area/campaign/som_raiding/outpost/req/secure) +"Mr" = ( +/turf/open/floor/mainship/red/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/living/briefing) +"Ms" = ( +/obj/machinery/power/apc{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command/north) +"Mt" = ( +/obj/effect/landmark/patrol_point/som/som_21, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"Mv" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/adv{ + pixel_x = 6; + pixel_y = -2 + }, +/obj/item/storage/box/gloves{ + pixel_x = -5; + pixel_y = -5 + }, +/obj/machinery/light, +/turf/open/floor/mainship/sterile/side, +/area/campaign/som_raiding/outpost/medbay) +"My" = ( +/obj/item/ammo_casing/bullet, +/turf/open/floor/plating/dmg1, +/area/campaign/som_raiding/outpost/construction) +"MC" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/green2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"MD" = ( +/obj/effect/spawner/random/engineering/structure/tank/fuelweighted, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/tunnel) +"ME" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/south_west) +"MF" = ( +/obj/machinery/door/airlock/hatch, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"MG" = ( +/obj/structure/prop/brokenvendor/surplusarmor, +/turf/open/floor/tile/dark/red2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/security/cargo_post) +"MH" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/engie) +"MI" = ( +/obj/effect/turf_decal/sandedge{ + dir = 8 + }, +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"MK" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/south_post) +"ML" = ( +/obj/machinery/computer/som_two{ + dir = 8 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command/cic) +"MM" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/head/hardhat/orange, +/turf/open/floor/tile/dark/yellow2, +/area/campaign/som_raiding/outpost/engineering) +"MN" = ( +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"MP" = ( +/obj/structure/largecrate/supply/supplies/coifs, +/turf/open/floor/tile/dark/brown2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/req/secure) +"MT" = ( +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"MV" = ( +/obj/structure/prop/mainship/gelida/rails{ + dir = 8 + }, +/obj/structure/closet/crate/miningcar, +/turf/open/floor/wood/alt_one, +/area/campaign/som_raiding/ground/jungle/south_east) +"MW" = ( +/obj/structure/table/black, +/obj/effect/spawner/random/engineering/radio, +/turf/open/floor/tile/dark/red2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/security/cargo_post) +"MX" = ( +/obj/structure/table/black, +/obj/machinery/conveyor_switch, +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command/north) +"MY" = ( +/turf/open/floor/tile/dark/yellow2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/engineering) +"MZ" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"Nc" = ( +/obj/machinery/optable, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/medbay) +"Nd" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/som_raiding/ground/jungle/north) +"Ne" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/multi_tile/mainship/engineering, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/engineering) +"Nf" = ( +/obj/machinery/vending/nanomed{ + dir = 1 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/command) +"Ng" = ( +/turf/open/floor/plating/ground/concrete/edge{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/tunnel) +"Nh" = ( +/obj/structure/rock/variable/jungle_large, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"Nj" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/green2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"Nk" = ( +/obj/structure/table/reinforced, +/turf/open/floor/tile/showroom, +/area/campaign/som_raiding/outpost/living/bathroom) +"Nl" = ( +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/qm) +"Nn" = ( +/turf/open/floor/mainship/sterile/side{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/medbay) +"No" = ( +/obj/machinery/door/airlock/hatch{ + dir = 1 + }, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/command/telecom) +"Np" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"Nq" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/west) +"Nr" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/south_east) +"Nt" = ( +/obj/structure/cargo_container/ch_red{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"Nu" = ( +/obj/structure/reagent_dispensers/beerkeg, +/turf/open/floor/tile/dark/brown2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Nw" = ( +/obj/structure/platform_decoration, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"Nx" = ( +/obj/machinery/computer/som, +/turf/open/floor/tile/dark/red2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/security/south_post) +"Ny" = ( +/obj/machinery/power/apc{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/freezer, +/area/campaign/som_raiding/outpost/living/kitchen) +"Nz" = ( +/obj/structure/table/reinforced, +/turf/open/floor/tile/brown, +/area/campaign/som_raiding/outpost/req/qm) +"NA" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle) +"ND" = ( +/obj/structure/rock/variable/jungle_large, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/west) +"NE" = ( +/obj/structure/cargo_container, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"NF" = ( +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/req) +"NG" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/north) +"NI" = ( +/obj/structure/bed/chair/alt{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"NJ" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/tile/dark/brown2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/req/secure) +"NK" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/qm) +"NL" = ( +/obj/effect/landmark/patrol_point/tgmc_13, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_west) +"NO" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/captain) +"NP" = ( +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"NQ" = ( +/obj/structure/largecrate/supply/explosives/mortar_incend, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/secure) +"NT" = ( +/obj/structure/stairs/railstairs, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/req) +"NU" = ( +/obj/machinery/power/apc{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel/west) +"NV" = ( +/obj/structure/prop/nt_computer, +/turf/open/floor/tile/dark/red2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/security/north_post) +"NZ" = ( +/obj/structure/flora/tree/jungle, +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_west) +"Oa" = ( +/obj/structure/largecrate, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/aux) +"Oc" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/south) +"Od" = ( +/obj/structure/largecrate/supply/medicine, +/turf/open/floor/tile/dark/brown2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Oe" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/construction) +"Of" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/engie) +"Oh" = ( +/obj/structure/filingcabinet, +/turf/open/floor/tile/brown, +/area/campaign/som_raiding/outpost/req/qm) +"Oi" = ( +/obj/structure/ship_ammo/cas/heavygun, +/turf/open/floor/tile/dark/brown2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Oj" = ( +/turf/open/floor/mainship/sterile/side{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/medbay) +"Ol" = ( +/turf/open/floor/tile/dark/green2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/living) +"On" = ( +/obj/structure/cargo_container/horizontal{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"Oo" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/security/north_post) +"Op" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/showroom, +/area/campaign/som_raiding/outpost/living/bathroom) +"Oq" = ( +/obj/structure/prop/brokenvendor/brokenspecialistvendor/leader, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"Os" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/living/canteen) +"Ov" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_west) +"Ow" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/central_corridor) +"Ox" = ( +/obj/structure/largecrate/supply/weapons/flamers, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/secure) +"OB" = ( +/turf/open/floor/mainship/red{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/living/briefing) +"OD" = ( +/obj/structure/table/reinforced, +/obj/item/storage/surgical_tray, +/obj/item/reagent_containers/spray/cleaner, +/turf/open/floor/mainship/sterile/corner{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/medbay) +"OF" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/mainship/red{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/living/briefing) +"OG" = ( +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"OH" = ( +/obj/structure/largecrate/random/barrel/yellow, +/turf/open/floor/tile/brown{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/req/aux) +"OI" = ( +/obj/machinery/power/smes/buildable/empty, +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/engineering) +"OJ" = ( +/obj/structure/prop/mainship/protolathe, +/turf/open/floor/tile/dark/blue2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/command) +"OK" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle) +"OL" = ( +/obj/structure/table/black, +/obj/machinery/computer/secure_data, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/north) +"OM" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"ON" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle/south_west) +"OO" = ( +/obj/structure/largecrate/supply/powerloader, +/turf/open/floor/tile/dark/brown2, +/area/campaign/som_raiding/outpost/req/secure) +"OS" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2, +/area/campaign/som_raiding/outpost/engineering) +"OT" = ( +/obj/structure/largecrate/supply/ammo, +/turf/open/floor/tile/dark/brown2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/req/secure) +"OV" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/qm) +"OW" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/cave) +"OY" = ( +/obj/effect/spawner/random/engineering/extinguisher, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"OZ" = ( +/obj/effect/spawner/random/engineering/structure/gascan, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"Pa" = ( +/obj/effect/landmark/corpsespawner/marine/corpsman, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/construction) +"Pc" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"Pd" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/tunnel) +"Pf" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/living/briefing) +"Pg" = ( +/obj/structure/largecrate/packed, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel) +"Ph" = ( +/obj/structure/stairs/railstairs{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/qm) +"Pi" = ( +/obj/structure/table/black, +/obj/machinery/computer/emails, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"Pk" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/turf/open/floor/mainship/sterile/dark, +/area/campaign/som_raiding/outpost/medbay) +"Pl" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/firing_range) +"Pm" = ( +/obj/structure/table/black, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command) +"Pn" = ( +/obj/structure/table/black, +/obj/item/weapon/gun/rifle/som/standard, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"Pr" = ( +/turf/open/floor/tile/dark/green2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/living) +"Ps" = ( +/obj/effect/turf_decal/sandedge/corner, +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"Pt" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/som_raiding/ground/jungle/south_east) +"Pu" = ( +/obj/structure/extinguisher_cabinet{ + dir = 8 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command) +"Pw" = ( +/turf/open/floor/tile/dark/blue2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command/cic) +"Px" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/beach/corner{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/north) +"Py" = ( +/obj/structure/extinguisher_cabinet{ + dir = 4 + }, +/turf/open/floor/mainship/sterile/side{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/medbay) +"Pz" = ( +/turf/open/floor/tile/dark/brown2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/secure) +"PC" = ( +/obj/structure/reagent_dispensers/fueltank/barrel, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"PD" = ( +/obj/structure/largecrate/supply/medicine/iv, +/turf/open/floor/tile/brown{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/aux) +"PE" = ( +/obj/item/ammo_casing/shell, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"PF" = ( +/obj/effect/turf_decal/sandedge/corner2{ + dir = 1 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"PG" = ( +/obj/structure/prop/mainship/gelida/rails{ + dir = 8 + }, +/turf/open/floor/wood/alt_one, +/area/campaign/som_raiding/ground/jungle/south_east) +"PI" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/west) +"PM" = ( +/turf/closed/gm/dense, +/area/campaign/som_raiding/ground/jungle/south) +"PO" = ( +/obj/machinery/computer/som_two, +/turf/open/floor/tile/dark/red2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/security/west_post) +"PP" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/som_raiding/ground/jungle/west) +"PQ" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/north_post) +"PS" = ( +/obj/structure/prop/mainship/protolathe/sci, +/turf/open/floor/tile/dark/blue2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/command/north) +"PT" = ( +/turf/open/floor/plating/ground/concrete/edge{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req) +"PU" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/west) +"PV" = ( +/obj/structure/prop/mainship/gelida/rails{ + dir = 1 + }, +/obj/structure/prop/mainship/gelida/rails{ + dir = 9 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"PX" = ( +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/engie) +"PY" = ( +/obj/structure/cargo_container/red, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"Qa" = ( +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"Qb" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"Qc" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/tile/dark/brown2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Qd" = ( +/obj/effect/landmark/mob_spawner/farwa, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"Qe" = ( +/obj/machinery/computer/som_two{ + dir = 4 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command/north) +"Qf" = ( +/obj/machinery/light, +/turf/open/floor/tile/dark/brown2, +/area/campaign/som_raiding/outpost/req/secure) +"Qh" = ( +/turf/open/floor/plating/ground/concrete/edge, +/area/campaign/som_raiding/outpost/req/north) +"Qi" = ( +/obj/item/ammo_casing/bullet, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"Qj" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/north) +"Qk" = ( +/obj/structure/prop/nt_computer, +/obj/machinery/light, +/turf/open/floor/mainship/tcomms, +/area/campaign/som_raiding/outpost/command/telecom) +"Ql" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle) +"Qm" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/north) +"Qn" = ( +/turf/open/floor/tile/dark/blue2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command/north) +"Qq" = ( +/obj/structure/table/black, +/turf/open/floor/tile/dark/blue2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/command/cic) +"Qr" = ( +/obj/structure/largecrate/random, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Qs" = ( +/obj/structure/rock/variable/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"Qu" = ( +/obj/structure/platform_decoration{ + dir = 8 + }, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"Qw" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/req) +"Qx" = ( +/obj/structure/reagent_dispensers/fueltank/xfuel, +/obj/effect/turf_decal/bot, +/turf/open/floor/tile/dark/brown2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Qy" = ( +/obj/structure/table/mainship, +/turf/open/floor/tile/dark/blue2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/command) +"Qz" = ( +/obj/effect/turf_decal/sandedge/corner{ + dir = 1 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"QD" = ( +/turf/open/floor/plating/ground/dirt2, +/area/campaign/som_raiding/ground/jungle/south_east) +"QE" = ( +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command) +"QF" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle/south) +"QH" = ( +/obj/structure/urinal, +/turf/open/floor/tile/showroom, +/area/campaign/som_raiding/outpost/living/bathroom) +"QI" = ( +/obj/effect/spawner/random/misc/structure/closet/welding, +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/dark/yellow2, +/area/campaign/som_raiding/outpost/engineering) +"QK" = ( +/obj/structure/reagent_dispensers/fueltank/barrel, +/turf/open/floor/tile/dark/brown2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/secure) +"QL" = ( +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/north) +"QM" = ( +/obj/structure/rack, +/obj/item/weapon/gun/rifle/standard_skirmishrifle, +/obj/item/weapon/gun/rifle/standard_skirmishrifle, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/secure) +"QO" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/o2, +/obj/item/storage/firstaid/rad, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/turf/open/floor/mainship/sterile/side{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/medbay) +"QP" = ( +/obj/structure/rack, +/turf/open/floor/tile/dark/brown2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/req/secure) +"QQ" = ( +/turf/open/floor/tile/dark/red2, +/area/campaign/som_raiding/outpost/security/west_post) +"QR" = ( +/obj/structure/flora/drought/shroom/glow, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/cave/tunnel) +"QS" = ( +/obj/structure/cable, +/turf/open/floor/tile/brown{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/aux) +"QU" = ( +/turf/open/floor/plating/ground/concrete/lines{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/north) +"QV" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/turf/open/floor/mainship/som/nw, +/area/campaign/som_raiding/outpost/command) +"QY" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/north) +"QZ" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/living/kitchen) +"Rd" = ( +/turf/closed/mineral/smooth/indestructible, +/area/campaign/som_raiding/ground/jungle/south_west) +"Rh" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/red2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/security/cargo_post) +"Rn" = ( +/obj/structure/prop/mainship/gelida/rails{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"Ro" = ( +/obj/structure/extinguisher_cabinet{ + dir = 4 + }, +/turf/open/floor/tile/dark/red2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/security/cargo_post) +"Rr" = ( +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric/glass{ + dir = 2 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/firing_range) +"Rs" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/prop/mainship/telecomms/processor, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"Rt" = ( +/obj/structure/cable, +/obj/structure/platform_decoration{ + dir = 8 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/req) +"Ru" = ( +/obj/machinery/computer/som{ + dir = 4 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/command/north) +"Rw" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/showroom, +/area/campaign/som_raiding/outpost/living/bathroom) +"Rx" = ( +/obj/machinery/shower{ + pixel_y = 15 + }, +/turf/open/floor/tile/showroom, +/area/campaign/som_raiding/outpost/living/bathroom) +"Ry" = ( +/obj/structure/flora/jungle/grass/thin, +/obj/effect/landmark/mob_spawner/farwa, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"Rz" = ( +/turf/open/ground/grass/beach/corner, +/area/campaign/som_raiding/ground/jungle/north) +"RA" = ( +/obj/structure/largecrate/supply/explosives/mortar_flare, +/turf/open/floor/tile/dark/brown2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/secure) +"RB" = ( +/obj/machinery/door/airlock/hatch, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/central_corridor) +"RC" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/closed/gm/dense, +/area/campaign/som_raiding/ground/jungle) +"RD" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/engineering) +"RG" = ( +/obj/machinery/door/airlock/hatch{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command) +"RH" = ( +/obj/structure/largecrate/supply/weapons/standard_carbine, +/turf/open/floor/tile/dark/brown2, +/area/campaign/som_raiding/outpost/req/secure) +"RI" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/command) +"RJ" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/maintenance/engie) +"RM" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/firing_range) +"RN" = ( +/obj/structure/rock/variable/stalagmite, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/cave/tunnel) +"RQ" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/north) +"RR" = ( +/turf/open/floor/mainship/red/corner, +/area/campaign/som_raiding/outpost/living/briefing) +"RS" = ( +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command/north) +"RT" = ( +/obj/structure/cable, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/brown{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/qm) +"RU" = ( +/obj/effect/turf_decal/grassdecal/corner{ + dir = 8 + }, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/ground/jungle/south_east) +"RX" = ( +/obj/structure/table/reinforced, +/obj/item/storage/belt/lifesaver/som/quick, +/obj/effect/spawner/random/medical/pillbottle, +/turf/open/floor/mainship/sterile/side{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/medbay) +"RY" = ( +/obj/effect/spawner/random/engineering/shovel, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/construction) +"RZ" = ( +/obj/structure/largecrate/supply/supplies/flares, +/turf/open/floor/tile/dark/brown2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Sa" = ( +/obj/effect/turf_decal/box, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"Sb" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/south) +"Sc" = ( +/obj/machinery/door/airlock/mainship/engineering, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/engineering) +"Se" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_east) +"Sf" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_east) +"Sg" = ( +/obj/structure/bed/bunkbed, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark/green2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/living) +"Si" = ( +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/medbay) +"Sl" = ( +/obj/structure/cable, +/turf/open/floor/tile/brown{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/qm) +"Sm" = ( +/obj/machinery/vending/dinnerware, +/turf/open/floor/tile/barber, +/area/campaign/som_raiding/outpost/living/kitchen) +"Sn" = ( +/obj/structure/window/framed/mainship/gray, +/obj/structure/platform, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/north) +"So" = ( +/obj/structure/largecrate/random, +/obj/effect/turf_decal/box, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"Sp" = ( +/obj/machinery/light/small, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/maintenance) +"Sq" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/south_east) +"Sr" = ( +/obj/structure/rock/variable/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/west) +"St" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"Su" = ( +/obj/structure/largecrate/supply/supplies/mre, +/turf/open/floor/tile/dark/brown2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Sv" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/medbay) +"Sx" = ( +/obj/structure/largecrate/supply/supplies, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"Sy" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"Sz" = ( +/obj/effect/spawner/random/engineering/structure/tank, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"SA" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/green2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"SB" = ( +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/tunnel/west) +"SC" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"SF" = ( +/obj/machinery/computer/emails, +/obj/structure/table/black, +/obj/structure/window/reinforced, +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command) +"SG" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel) +"SH" = ( +/obj/structure/prop/mainship/gelida/rails, +/turf/open/floor/plating/ground/mars/random/cave, +/area/campaign/som_raiding/outpost/tunnel) +"SI" = ( +/obj/structure/cable, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark/green2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"SJ" = ( +/obj/structure/cargo_container/gorg, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"SK" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command) +"SL" = ( +/obj/structure/largecrate/random/barrel/yellow, +/turf/open/floor/tile/dark/brown2/corner, +/area/campaign/som_raiding/outpost/req/secure) +"SN" = ( +/obj/effect/spawner/random/engineering/structure/handheld_lighting, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"SQ" = ( +/turf/open/floor/tile/showroom, +/area/campaign/som_raiding/outpost/living/bathroom) +"SR" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/west_post) +"SS" = ( +/obj/machinery/cic_maptable/drawable/big/som{ + pixel_x = -3 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/cic) +"ST" = ( +/turf/closed/mineral/smooth/indestructible, +/area/campaign/som_raiding/ground/jungle/west) +"SV" = ( +/obj/machinery/door/airlock/maintenance, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/southeast_post) +"SW" = ( +/turf/open/floor/tile/brown{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/qm) +"Tc" = ( +/obj/machinery/door/airlock/mainship/security, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/southeast_post) +"Td" = ( +/obj/machinery/computer/som_two{ + dir = 4 + }, +/turf/open/floor/tile/dark/red2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/security/west_post) +"Te" = ( +/obj/structure/cable, +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/medbay) +"Tf" = ( +/turf/open/ground/grass/beach, +/area/campaign/som_raiding/ground/jungle/west) +"Th" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/engineering) +"Ti" = ( +/obj/structure/cargo_container/nt{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"Tj" = ( +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/maintenance) +"Tk" = ( +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/construction) +"Tl" = ( +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric/glass, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/construction) +"Tn" = ( +/obj/structure/table/black, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/living/briefing) +"Ts" = ( +/obj/structure/prop/brokenvendor/brokencorpsmanvendor, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"Tu" = ( +/obj/structure/cable, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/yellow2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/engineering) +"Tw" = ( +/turf/open/floor/tile/brown/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/qm) +"Tx" = ( +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/west) +"Tz" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/tile/dark/yellow2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/engineering) +"TA" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/south) +"TB" = ( +/obj/machinery/camera/autoname/mainship/somship, +/obj/machinery/computer/som_two, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/cic) +"TD" = ( +/obj/structure/table/black, +/obj/machinery/computer3/server, +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command/north) +"TF" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command/north) +"TJ" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/som_raiding/ground/jungle) +"TK" = ( +/obj/machinery/light, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/cic) +"TL" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/north) +"TO" = ( +/obj/structure/ship_ammo/cas/rocket/keeper, +/turf/open/floor/tile/dark/brown2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/req/secure) +"TP" = ( +/obj/structure/largecrate/supply/explosives/mortar_he, +/turf/open/floor/tile/dark/brown2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/req/secure) +"TQ" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/west) +"TR" = ( +/obj/structure/prop/brokenvendor/surplusarmor, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"TT" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/firing_range) +"TU" = ( +/turf/open/floor/tile/dark/green2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/living) +"TX" = ( +/obj/structure/stairs/seamless/platform, +/obj/structure/cable, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/req) +"Ua" = ( +/obj/machinery/power/apc, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"Uc" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command) +"Ue" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/security/southeast_post) +"Uf" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/som_raiding/ground/jungle/south_west) +"Ug" = ( +/obj/effect/turf_decal/sandedge/corner2{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/north) +"Uk" = ( +/obj/machinery/light, +/turf/open/floor/tile/neutral/full, +/area/campaign/som_raiding/outpost/living/canteen) +"Um" = ( +/turf/open/floor/tile/dark/blue2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/command/north) +"Un" = ( +/obj/structure/rock/variable/jungle_large, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_west) +"Uo" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command) +"Up" = ( +/obj/structure/rock/variable/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_west) +"Uq" = ( +/obj/machinery/vending/cola, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"Ur" = ( +/obj/structure/prop/mainship/mission_planning_system, +/turf/open/floor/tile/dark/blue2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command) +"Us" = ( +/obj/effect/spawner/random/misc/structure/closet/electrical, +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/dark/yellow2, +/area/campaign/som_raiding/outpost/engineering) +"Uw" = ( +/obj/structure/cable, +/obj/machinery/power/fusion_engine/preset, +/turf/open/floor/tile/dark/yellow2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/engineering) +"Uy" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/cic) +"Uz" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle) +"UA" = ( +/turf/open/floor/plating/ground/concrete/lines{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/tunnel/west) +"UB" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/south) +"UC" = ( +/obj/structure/largecrate/supply/supplies, +/obj/effect/turf_decal/box, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"UD" = ( +/obj/machinery/power/apc, +/obj/structure/cable, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"UE" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/west) +"UF" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_west) +"UH" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance) +"UI" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"UJ" = ( +/obj/structure/closet/secure_closet/medical2, +/turf/open/floor/mainship/sterile/corner, +/area/campaign/som_raiding/outpost/medbay) +"UK" = ( +/obj/structure/table/black, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"UL" = ( +/obj/effect/turf_decal/sandedge/corner2, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"UM" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/tile/dark/brown2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/secure) +"UN" = ( +/turf/open/floor/tile/dark/brown2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/secure) +"UO" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_west) +"UP" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle) +"UQ" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/req) +"US" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"UT" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/engineering) +"UU" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/central_corridor) +"UV" = ( +/obj/structure/table/reinforced, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/showroom, +/area/campaign/som_raiding/outpost/living/bathroom) +"UX" = ( +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/secure) +"UY" = ( +/obj/structure/table/black, +/obj/effect/spawner/random/engineering/radio, +/turf/open/floor/tile/dark/red2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/security/southeast_post) +"UZ" = ( +/obj/machinery/door/airlock/mainship/security{ + dir = 2 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/west_post) +"Va" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/tile/dark/green2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"Vb" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"Vc" = ( +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command/north) +"Ve" = ( +/turf/open/floor/tile/dark/red2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/security/west_post) +"Vf" = ( +/obj/structure/cable, +/turf/open/floor/tile/brown, +/area/campaign/som_raiding/outpost/req/qm) +"Vg" = ( +/obj/structure/ship_ammo/cas/laser_battery, +/turf/open/floor/tile/dark/brown2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Vh" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command) +"Vi" = ( +/obj/structure/ship_ammo/cas/bomb/moab, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/secure) +"Vj" = ( +/obj/machinery/computer/som, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/telecom) +"Vk" = ( +/obj/effect/turf_decal/warning_stripes/engineer, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"Vm" = ( +/obj/structure/rack, +/obj/effect/vendor_bundle/xenonauten_light, +/obj/effect/vendor_bundle/xenonauten_light, +/turf/open/floor/tile/dark/brown2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Vn" = ( +/turf/open/ground/grass/beach/corner2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/north) +"Vo" = ( +/obj/structure/platform, +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/tunnel) +"Vp" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req) +"Vq" = ( +/obj/machinery/cic_maptable/no_flags, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command) +"Vr" = ( +/obj/structure/cable, +/obj/machinery/light, +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command) +"Vs" = ( +/obj/structure/largecrate/random/barrel/white, +/turf/open/floor/plating/ground/mars/random/cave, +/area/campaign/som_raiding/outpost/tunnel) +"Vt" = ( +/obj/effect/turf_decal/sandedge{ + dir = 8 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"Vu" = ( +/obj/structure/largecrate/random, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/box, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"Vw" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/showroom, +/area/campaign/som_raiding/outpost/living/bathroom) +"Vx" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/west) +"Vy" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/security/west_post) +"VA" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/qm) +"VC" = ( +/turf/open/floor/tile/dark/blue2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/command/cic) +"VD" = ( +/obj/machinery/door/airlock/hatch{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/central_corridor) +"VF" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/tile/brown{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/aux) +"VG" = ( +/obj/machinery/power/apc, +/obj/structure/cable, +/turf/open/floor/tile/dark/red2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/security/south_post) +"VH" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/blue2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/north) +"VK" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/ground/jungle/north) +"VM" = ( +/turf/open/floor/plating/ground/concrete/lines{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req) +"VP" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/tile/dark/yellow2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/engineering) +"VQ" = ( +/turf/open/floor/plating/ground/concrete/lines{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/tunnel/west) +"VR" = ( +/obj/machinery/door/window, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command) +"VS" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/north) +"VU" = ( +/obj/structure/cargo_container/hd{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"VW" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/engineering/plasteel, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"VY" = ( +/obj/item/ammo_casing/shell, +/obj/item/ammo_casing/shell, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"Wc" = ( +/turf/open/floor/tile/dark/green2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/central_corridor) +"Wd" = ( +/obj/structure/prop/brokenvendor/surplusclothes, +/turf/open/floor/tile/dark/red2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/security/south_post) +"We" = ( +/obj/structure/cable, +/obj/machinery/cic_maptable/no_flags, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/living/briefing) +"Wf" = ( +/obj/effect/turf_decal/sandedge/corner2{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"Wg" = ( +/obj/structure/cable, +/obj/structure/platform_decoration{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"Wh" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/engineering/tool, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/yellow2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/engineering) +"Wi" = ( +/obj/structure/bed/stool, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/engineering) +"Wj" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/north_post) +"Wl" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"Wm" = ( +/turf/open/floor/tile/dark/red2, +/area/campaign/som_raiding/outpost/security/south_post) +"Wn" = ( +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"Wo" = ( +/obj/machinery/vending/sovietsoda, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"Wp" = ( +/turf/open/liquid/water, +/area/campaign/som_raiding/ground/jungle/north) +"Wq" = ( +/obj/structure/prop/mainship/gelida/rails, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_east) +"Wu" = ( +/obj/structure/bed/chair/alt{ + dir = 4 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/captain) +"Wx" = ( +/obj/structure/bed/chair/office/dark, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark/blue2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/command) +"Wy" = ( +/obj/structure/prop/mainship/gelida/railbumper{ + dir = 1 + }, +/turf/open/floor/plating/ground/mars/random/cave, +/area/campaign/som_raiding/ground/jungle) +"WA" = ( +/obj/structure/morgue{ + dir = 1 + }, +/turf/open/floor/freezer, +/area/campaign/som_raiding/outpost/medbay) +"WD" = ( +/obj/structure/stairs/seamless, +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command) +"WE" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/food_or_drink/bread, +/obj/effect/spawner/random/food_or_drink/cheesewedge, +/turf/open/floor/tile/barber, +/area/campaign/som_raiding/outpost/living/kitchen) +"WF" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/green2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/living) +"WG" = ( +/obj/machinery/computer3/server/rack, +/turf/open/floor/tile/dark/blue2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/command/north) +"WI" = ( +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/construction) +"WJ" = ( +/turf/open/floor/tile/dark/red2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/security/southeast_post) +"WK" = ( +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"WM" = ( +/obj/structure/cable, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel/west) +"WO" = ( +/obj/structure/cable, +/obj/effect/spawner/random/engineering/structure/tank/waterweighted, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance) +"WQ" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"WR" = ( +/obj/structure/cable, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/tunnel) +"WT" = ( +/obj/structure/largecrate/random/case/small, +/turf/open/floor/tile/brown{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/req/qm) +"WU" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/red2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/security/south_post) +"WV" = ( +/obj/structure/bed/chair/alt{ + dir = 1 + }, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/living/briefing) +"WW" = ( +/obj/structure/mine_structure/wooden/support_wall/t_bar, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/cave/tunnel) +"WX" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/req/secure) +"Xb" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/green2{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/living) +"Xc" = ( +/obj/structure/largecrate/random/case/double, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/tunnel) +"Xd" = ( +/obj/structure/table/mainship, +/obj/machinery/griddle, +/obj/structure/cable, +/turf/open/floor/tile/barber, +/area/campaign/som_raiding/outpost/living/kitchen) +"Xe" = ( +/obj/machinery/vending/nanomed{ + dir = 8 + }, +/turf/open/floor/tile/dark/yellow2{ + dir = 6 + }, +/area/campaign/som_raiding/outpost/engineering) +"Xg" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/turf/open/floor/mainship/som/se, +/area/campaign/som_raiding/outpost/command) +"Xm" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"Xn" = ( +/obj/machinery/power/port_gen/pacman/mrs, +/turf/open/floor/tile/dark/yellow2, +/area/campaign/som_raiding/outpost/engineering) +"Xp" = ( +/obj/structure/ship_ammo/cas/minirocket, +/turf/open/floor/tile/dark/brown2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Xr" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/maintenance) +"Xt" = ( +/obj/structure/largecrate/supply/supplies/metal, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/req/secure) +"Xu" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/req/qm) +"Xv" = ( +/obj/machinery/door/airlock/hatch{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"Xw" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/window{ + dir = 1 + }, +/turf/open/floor/tile/showroom, +/area/campaign/som_raiding/outpost/living/bathroom) +"Xy" = ( +/turf/open/floor/tile/dark/blue2, +/area/campaign/som_raiding/outpost/command/cic) +"Xz" = ( +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric/glass{ + dir = 2 + }, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/qm) +"XA" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/ground/jungle/south_west) +"XB" = ( +/obj/structure/prop/brokenvendor/brokenuniformvendor, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security) +"XD" = ( +/obj/effect/turf_decal/sandedge/corner{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"XE" = ( +/obj/structure/rack, +/obj/item/weapon/gun/rifle/standard_br/standard, +/obj/item/weapon/gun/rifle/standard_br/standard, +/turf/open/floor/tile/dark/brown2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/req/secure) +"XF" = ( +/obj/structure/cargo_container{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"XG" = ( +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/living/briefing) +"XH" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/medbay) +"XI" = ( +/obj/structure/closet/crate/radiation, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req/north) +"XK" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/construction) +"XL" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"XM" = ( +/obj/machinery/cic_maptable/no_flags, +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/north) +"XN" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/engie) +"XO" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/south_west) +"XP" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/req/aux) +"XS" = ( +/obj/effect/landmark/patrol_point/tgmc_11, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_west) +"XT" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/obj/structure/window/reinforced, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command) +"XV" = ( +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric/glass, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/central_corridor) +"XW" = ( +/obj/structure/table/mainship, +/obj/machinery/reagentgrinder{ + pixel_y = 5 + }, +/turf/open/floor/tile/barber, +/area/campaign/som_raiding/outpost/living/kitchen) +"XX" = ( +/obj/structure/bed/chair/office/dark, +/obj/structure/cable, +/obj/machinery/vending/nanomed{ + dir = 4 + }, +/turf/open/floor/tile/dark/red2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/security/north_post) +"XY" = ( +/turf/open/floor/tile/brown/corner{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/aux) +"Ya" = ( +/obj/structure/filingcabinet, +/turf/open/floor/tile/brown{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/req/qm) +"Yb" = ( +/obj/machinery/power/apc, +/obj/structure/cable, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Ye" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/tile/dark/yellow2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/engineering) +"Yg" = ( +/obj/structure/prop/mainship/gelida/rails{ + dir = 1 + }, +/turf/open/floor/plating/ground/mars/random/cave, +/area/campaign/som_raiding/ground/jungle) +"Yh" = ( +/obj/structure/table/mainship, +/turf/open/floor/tile/neutral/full, +/area/campaign/som_raiding/outpost/living/canteen) +"Yi" = ( +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/living) +"Yj" = ( +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/mainship/som/s, +/area/campaign/som_raiding/outpost/command) +"Yk" = ( +/obj/effect/landmark/mob_spawner/farwa, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"Yn" = ( +/obj/structure/closet/fireaxecabinet, +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/req/qm) +"Yp" = ( +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/tunnel) +"Yq" = ( +/obj/structure/largecrate/supply/medicine/medkits, +/turf/open/floor/tile/dark/brown2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Ys" = ( +/obj/structure/rack, +/obj/item/ammo_magazine/rifle/standard_br, +/obj/item/ammo_magazine/rifle/standard_br, +/obj/item/ammo_magazine/rifle/standard_br, +/obj/item/ammo_magazine/rifle/standard_skirmishrifle, +/obj/item/ammo_magazine/rifle/standard_skirmishrifle, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Yu" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/north) +"Yv" = ( +/obj/effect/turf_decal/sandedge{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle) +"Yy" = ( +/obj/structure/flora/tree/jungle, +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/north) +"YA" = ( +/obj/structure/cargo_container/red{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"YC" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/west) +"YF" = ( +/obj/structure/largecrate/random/barrel/white, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"YG" = ( +/turf/open/floor/tile/dark/blue2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/command/north) +"YH" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/engineering) +"YJ" = ( +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/campaign/som_raiding/outpost/req) +"YK" = ( +/obj/structure/cargo_container/ch_green{ + dir = 1 + }, +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/obj/effect/turf_decal/box, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"YN" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/ground/jungle/south_east) +"YP" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/tile/dark/yellow2{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/engineering) +"YR" = ( +/obj/structure/flora/tree/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south_west) +"YT" = ( +/obj/structure/flora/tree/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"YX" = ( +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/som_raiding/ground/jungle/south) +"YY" = ( +/turf/open/floor/tile/dark/red2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/security/south_post) +"YZ" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/south_west) +"Zb" = ( +/obj/structure/prop/mainship/gelida/rails{ + dir = 8 + }, +/obj/structure/closet/crate/miningcar/stripe, +/turf/open/floor/wood/alt_one, +/area/campaign/som_raiding/ground/jungle/south_east) +"Zc" = ( +/obj/structure/ship_ammo/cas/minirocket/incendiary, +/turf/open/floor/tile/dark/brown2/corner{ + dir = 4 + }, +/area/campaign/som_raiding/outpost/req/secure) +"Ze" = ( +/turf/open/floor/plating/dmg3, +/area/campaign/som_raiding/outpost/firing_range) +"Zg" = ( +/obj/structure/largecrate/mule, +/turf/open/floor/tile/dark/gray, +/area/campaign/som_raiding/outpost/req/qm) +"Zh" = ( +/obj/effect/turf_decal/sandedge/corner2{ + dir = 8 + }, +/obj/structure/flora/tree/jungle/small, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/south) +"Zi" = ( +/turf/closed/wall/mainship/gray, +/area/campaign/som_raiding/outpost/security/southeast_post) +"Zj" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/central_corridor) +"Zk" = ( +/obj/effect/spawner/random/misc/structure/closet/tool, +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/dark/yellow2, +/area/campaign/som_raiding/outpost/engineering) +"Zl" = ( +/obj/structure/table/black, +/obj/structure/extinguisher_cabinet{ + dir = 1 + }, +/turf/open/floor/tile/dark/red2, +/area/campaign/som_raiding/outpost/security/south_post) +"Zm" = ( +/obj/machinery/power/apc{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/firing_range) +"Zo" = ( +/turf/open/floor/tile/brown, +/area/campaign/som_raiding/outpost/req/qm) +"Zq" = ( +/obj/structure/window/framed/mainship/gray, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/cargo_post) +"Zr" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/security/west_post) +"Zt" = ( +/turf/open/floor/plating/ground/mars/random/cave, +/area/campaign/som_raiding/outpost/tunnel/west) +"Zu" = ( +/obj/machinery/vending/medical, +/turf/open/floor/mainship/sterile/corner, +/area/campaign/som_raiding/outpost/medbay) +"Zw" = ( +/obj/effect/landmark/patrol_point/som/som_12, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/living) +"Zx" = ( +/turf/open/floor/tile/dark/yellow2/corner, +/area/campaign/som_raiding/outpost/engineering) +"Zy" = ( +/obj/structure/largecrate/random, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"Zz" = ( +/obj/structure/cargo_container/horizontal{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/som_raiding/outpost/req) +"ZA" = ( +/obj/machinery/power/apc{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"ZB" = ( +/obj/effect/spawner/random/engineering/structure/powergenerator, +/turf/open/floor/mainship/mono, +/area/campaign/som_raiding/outpost/construction) +"ZC" = ( +/obj/structure/largecrate/supply/explosives/mortar_he, +/turf/open/floor/tile/dark/brown2{ + dir = 5 + }, +/area/campaign/som_raiding/outpost/req/secure) +"ZD" = ( +/obj/structure/rock/variable/jungle/big, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle) +"ZF" = ( +/turf/open/floor/tile/dark/yellow2, +/area/campaign/som_raiding/outpost/engineering) +"ZH" = ( +/obj/structure/largecrate/random/barrel/yellow, +/obj/machinery/light, +/turf/open/floor/tile/dark/brown2, +/area/campaign/som_raiding/outpost/req/secure) +"ZI" = ( +/obj/structure/rack, +/obj/effect/vendor_bundle/xenonauten_medium, +/obj/effect/vendor_bundle/xenonauten_medium, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/campaign/som_raiding/outpost/req/secure) +"ZJ" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/tile/dark, +/area/campaign/som_raiding/outpost/command/living) +"ZK" = ( +/turf/closed/mineral/smooth, +/area/campaign/som_raiding/outpost/security/west_post) +"ZM" = ( +/turf/open/floor/tile/dark/red2/corner{ + dir = 8 + }, +/area/campaign/som_raiding/outpost/security/southeast_post) +"ZN" = ( +/obj/structure/flora/tree/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/som_raiding/ground/jungle/west) +"ZQ" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/campaign/som_raiding/outpost/maintenance/cic) +"ZT" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/tile/dark/yellow2{ + dir = 10 + }, +/area/campaign/som_raiding/outpost/engineering) +"ZW" = ( +/turf/open/ground/grass/beach/corner{ + dir = 1 + }, +/area/campaign/som_raiding/ground/jungle/west) +"ZZ" = ( +/turf/open/floor/tile/dark/blue2{ + dir = 9 + }, +/area/campaign/som_raiding/outpost/command/cic) + +(1,1,1) = {" +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +xk +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +ST +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +Rd +"} +(2,1,1) = {" +xk +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +eW +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +fN +rL +rL +rL +rL +Fw +Fw +IQ +Fw +IQ +Fw +Fw +Fw +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +Rd +"} +(3,1,1) = {" +xk +eW +eW +eW +eW +eW +eW +JW +LQ +eW +eW +eW +eW +JW +yq +eY +eY +JW +eW +eW +eW +JW +JW +eY +eW +eW +eW +eW +eW +eW +eW +eW +eW +Wp +Wp +Wp +Wp +fT +ke +JW +JW +eW +eW +eW +JW +DW +JW +Pc +JW +JW +Pc +eW +eW +eW +eW +eW +eW +eW +eW +eW +JW +JW +JW +JW +JW +eW +eW +eW +JW +JW +JW +vC +vC +fl +vC +vC +vC +TQ +hF +fN +fN +TQ +KN +vC +Tx +vC +vC +KN +fN +fN +fN +fN +fN +fN +ZN +KN +vC +vC +vC +vC +vC +vC +Tx +vC +vC +rL +rL +rL +rL +rL +UO +Fw +Fw +Fw +Fw +Fw +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +Fw +kf +kf +kf +kf +kf +kf +kf +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +Rd +"} +(4,1,1) = {" +xk +eW +eW +eW +ke +JW +Pc +jo +JW +JW +eW +eW +eW +JW +eY +eY +eY +JW +ke +JW +eW +eW +UI +eY +eY +eW +eW +eW +eW +eW +oj +Wp +Wp +Wp +Wp +Vn +hw +Fn +JW +JW +eW +eW +JW +LQ +JW +JW +JW +JW +JW +OG +JW +yq +JW +JW +eW +eW +eW +ke +JW +JW +JW +OG +eY +eY +eW +eW +eW +eW +JW +JW +yq +vC +vC +vC +vC +vC +vC +hF +fN +fN +hF +hF +vC +vC +vC +vC +fN +fN +fN +fN +fN +vC +vC +vC +vC +vC +vC +vC +fl +vC +vC +lp +vC +eB +vC +Fw +Fw +rL +rL +Fw +Fw +Fw +Fw +Fw +Fw +rL +rL +rL +rL +rL +rL +rL +rL +rL +Fw +NL +Fw +Fw +Fw +Fw +kf +kf +kf +kf +Fw +Fw +Fw +Fw +IQ +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +Rd +"} +(5,1,1) = {" +xk +eW +eW +JW +OG +Mt +JW +JW +JW +ke +eW +eW +eW +eW +eW +eY +JW +JW +JW +OG +LQ +JW +Pc +JW +eY +eY +eW +eW +Wp +Wp +Wp +Wp +Wp +Wp +Wp +bV +Lo +JW +Qs +JW +JW +JW +yq +JW +JW +eW +eW +eW +UI +JW +JW +JW +JW +JW +JW +JW +JW +JW +JW +JW +eY +eY +eY +eW +eW +eW +JW +JW +JW +JW +JW +vC +vC +vC +vC +fl +vC +hF +hF +hF +hF +hF +vC +vC +Sr +vC +fN +fN +fN +fN +Tx +vC +vC +vC +vC +vC +hF +hF +vC +vC +vC +TQ +vC +vC +vC +Fw +Fw +IQ +Fw +Fw +Fw +Fw +Ct +Fw +UO +rL +rL +rL +rL +rL +rL +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +UO +Fw +kf +kf +Fw +Fw +Fw +UO +IQ +Fw +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +Rd +"} +(6,1,1) = {" +xk +eW +ke +DW +LQ +JW +JW +JW +JW +Pc +JW +JW +eW +eW +eW +ro +eH +eH +Io +eH +eH +eH +gt +JW +JW +JW +ke +lI +hw +jw +Wp +Wp +eW +eW +Wp +Wp +fT +JW +OG +JW +JW +JW +JW +JW +JW +JW +eW +eW +eW +eW +JW +JW +JW +JW +JW +JW +JW +JW +iv +JW +eY +eY +eY +eW +eW +JW +JW +JW +DW +JW +JW +vC +fN +fN +vC +vC +vC +vC +hF +hF +vC +vC +KN +bU +vC +vC +fN +fN +fN +fN +KN +vC +fl +vC +vC +vC +hF +hF +vC +vC +vC +vC +fl +vC +vC +Fw +UO +Fw +Fw +UF +Fw +Fw +Fw +Fw +UO +Fw +Fw +Fw +rL +rL +rL +Fw +XS +Fw +Ov +Fw +IQ +mT +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +NZ +Fw +Fw +rL +rL +rL +rL +rL +rL +rL +rL +rL +rL +Rd +"} +(7,1,1) = {" +xk +eW +eY +JW +iv +yq +JW +JW +JW +JW +Ku +Pc +JW +JW +Nd +xC +Fz +fo +fo +fo +fo +Qm +az +eH +gt +JW +JW +JW +JW +lI +hw +hw +eW +eW +eW +Wp +jD +JW +JW +JW +JW +UI +eY +eY +Pc +JW +JW +JW +eW +eW +eW +JW +JW +JW +JW +bk +JW +JW +OG +JW +JW +eY +eY +eW +eW +JW +JW +JW +JW +JW +Qs +fN +fN +fN +ZN +vC +vC +vC +vC +vC +vC +vC +vC +vC +vC +fN +fN +fN +fN +fN +vC +vC +Tx +fN +fN +hF +hF +hF +vC +vC +vC +Tx +vC +vC +vC +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +UO +Fw +Fw +rL +rL +Fw +Fw +Fw +Fw +Up +Fw +Fw +Fw +Fw +IQ +Fw +UF +Fw +Fw +Fw +Fw +Fw +Fw +Fw +IQ +Fw +Fw +rL +rL +rL +rL +rL +rL +rL +Rd +"} +(8,1,1) = {" +yz +OW +eY +dp +JW +JW +JW +ro +eH +eH +eH +eH +eH +eH +xC +Fz +Ly +eW +eW +eW +JW +TL +fo +Qm +az +gt +JW +yq +JW +LQ +JW +JW +JW +eW +eW +hw +Fn +DW +JW +VK +VK +eY +eY +eY +eY +JW +LQ +JW +eW +eW +eW +Pc +LQ +JW +JW +JW +JW +JW +JW +UI +JW +JW +eY +eW +eW +eW +JW +JW +yq +JW +JW +fN +th +hF +vC +vC +vC +eB +bU +vC +uj +kW +lw +vC +fN +fN +fN +fN +fN +fN +fN +vC +fN +fN +fN +hF +hF +vC +vC +Sr +eB +vC +vC +vC +vC +Fw +YR +kf +kf +kf +Fw +IQ +Fw +Up +IQ +Fw +Fw +rL +rL +rL +Ct +Fw +UO +Fw +Fw +Fw +UO +Fw +Fw +Fw +Fw +Fw +Fw +Fw +IQ +Fw +Ov +Fw +Fw +Fw +KD +Fw +rL +rL +rL +rL +rL +rL +rL +Rd +"} +(9,1,1) = {" +yz +OW +eY +JW +JW +Pc +OG +TL +qU +fo +fo +fo +fo +fo +fo +qa +eW +eW +eW +ke +JW +JW +yq +TL +Qm +cw +eH +eH +eH +eH +Qj +gt +JW +eW +eW +ke +JW +JW +JW +VK +VK +VK +VK +eY +eY +JW +JW +JW +JW +JW +JW +JW +JW +JW +JW +JW +yq +JW +JW +JW +JW +JW +JW +JW +eW +eW +JW +JW +JW +JW +JW +hF +hF +hF +vC +vC +vC +Sr +vC +uj +LK +Go +fN +fN +fN +fN +vC +vC +vC +fN +fN +fN +fN +fN +fN +hF +ZN +vC +vC +vC +eB +vC +vC +vC +vC +rL +rL +rL +kf +kf +kf +kf +Fw +IQ +KD +Fw +rL +rL +rL +Fw +Fw +Fw +Fw +Fw +Kq +dT +Fw +Fw +Up +Fw +Fw +Fw +IQ +Fw +Gk +Fw +Fw +Fw +kf +kf +Fw +Fw +Fw +kf +rL +rL +rL +rL +rL +Rd +"} +(10,1,1) = {" +yz +OW +OW +eY +qL +JW +JW +Pc +JW +eW +eW +JW +JW +JW +JW +JW +eW +eW +JW +JW +JW +OG +JW +JW +TL +fo +fo +fo +fo +Yu +Qm +az +eH +gt +JW +JW +JW +yq +JW +JW +VK +VK +VK +VK +VK +JW +JW +JW +UI +JW +JW +JW +JW +JW +JW +JW +JW +JW +JW +JW +yq +JW +JW +OG +JW +JW +JW +JW +JW +JW +eY +hF +hF +vC +vC +vC +fl +vC +uj +LK +sj +sj +sj +fN +fN +vC +Sr +vC +hF +hF +fN +fN +fN +hF +hF +hF +vC +vC +vC +bU +vC +vC +vC +fN +fN +rL +rL +kf +kf +kf +kf +kf +kf +Fw +Fw +Fw +rL +rL +Fw +Fw +Fw +dI +dC +dC +Fy +yS +UF +Fw +Fw +Fw +UO +Fw +Fw +UO +Fw +Fw +kf +kf +kf +kf +Fw +UF +Fw +kf +rL +rL +rL +rL +rL +Rd +"} +(11,1,1) = {" +yz +OW +OW +eY +eY +LQ +JW +JW +JW +eW +eW +eW +JW +ke +JW +OG +JW +JW +JW +Pc +JW +LQ +JW +eW +eW +eW +JW +LQ +JW +JW +TL +fo +Qm +az +gt +JW +JW +JW +JW +JW +JW +VK +VK +VK +VK +JW +JW +JW +JW +JW +JW +JW +JW +JW +JW +ke +JW +JW +JW +JW +JW +JW +JW +JW +JW +JW +JW +JW +JW +eY +eY +hF +vC +vC +vC +vC +vC +vC +tS +sj +sj +sj +fN +fN +fN +fN +hF +hF +hF +hF +hF +hF +vC +vC +vC +vC +vC +Tx +vC +vC +fl +vC +vC +vC +fN +rL +rL +kf +kf +Fw +Fw +kf +kf +Fw +Fw +Fw +Fw +Fw +Fw +IQ +Fw +HZ +uJ +FF +FF +XA +Fw +Fw +Fw +Fw +Gk +Fw +Fw +Fw +Up +Fw +rL +rL +kf +kf +Fw +Up +Fw +kf +rL +rL +rL +rL +rL +Rd +"} +(12,1,1) = {" +yz +OW +OW +OW +eY +eY +JW +JW +JW +ke +eW +eW +eY +eY +JW +JW +JW +yq +JW +JW +eY +eY +eW +eW +eW +JW +JW +ke +JW +JW +JW +JW +nJ +Qm +az +eH +eH +eH +gt +UI +VK +VK +VK +VK +JW +JW +LQ +JW +JW +yq +JW +LQ +JW +JW +JW +JW +JW +JW +JW +eW +eW +eY +eY +eY +JW +JW +JW +UI +JW +eY +eY +hF +vC +vC +vC +TQ +vC +vC +Tf +sj +fN +fN +fN +ZN +fN +fN +fN +hF +hF +hF +hF +vC +PP +bl +xB +bl +bl +bl +bl +bl +bl +sS +vC +vC +vC +rL +rL +rL +kf +Fw +Uf +dC +dC +dC +dC +dC +dC +dC +dC +dC +dC +Fy +XO +dT +Fw +IQ +Fw +Fw +IQ +rL +rL +Fw +Ov +Fw +IQ +rL +rL +rL +kf +Fw +IQ +UO +Fw +kf +kf +kf +rL +rL +rL +Rd +"} +(13,1,1) = {" +yz +OW +OW +OW +OW +OW +JW +JW +JW +JW +JW +eY +eY +eY +eY +Qs +JW +JW +DW +eY +eY +OW +OW +OW +OW +OW +OW +OW +OW +eY +JW +LQ +JW +TL +fo +fo +fo +Qm +uF +JW +VK +VK +LQ +Pc +Pc +JW +JW +OG +JW +Qs +JW +JW +JW +JW +JW +JW +eW +eW +JW +eW +eW +eW +eW +eY +eY +JW +JW +JW +JW +JW +JW +vC +vC +vC +vC +vC +vC +vC +ZW +fN +fN +fN +vC +vC +vC +fN +fN +vC +TQ +vC +vC +Sr +DQ +Vx +YC +YC +YC +YC +YC +YC +rr +DR +sS +bU +vC +Fw +rL +rL +Fw +Uf +Fy +uJ +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +Hl +yS +Fw +IQ +Fw +Fw +Fw +rL +rL +rL +rL +rL +Fw +rL +rL +kf +kf +Fw +Fw +Fw +Fw +Fw +kf +kf +kf +rL +rL +Rd +"} +(14,1,1) = {" +yz +OW +OW +OW +OW +OW +kI +Pc +yq +Pc +JW +eY +eY +eY +eY +JW +JW +eY +eY +eY +eY +OW +OW +OW +OW +OW +OW +OW +OW +eY +eY +JW +Pc +JW +VK +JW +JW +vL +uF +JW +JW +DW +JW +JW +JW +JW +UI +JW +JW +LQ +JW +JW +JW +yq +JW +eW +eW +eW +eW +eW +eW +eW +eW +eY +eY +eY +JW +JW +OG +JW +JW +vC +vC +vC +vC +vC +Tx +vC +vC +fN +fN +ZN +vC +vC +vC +vC +KN +vC +vC +vC +vC +PP +ye +PI +vC +vC +vC +vC +vC +vC +hu +rr +DR +bl +bl +dC +dC +dC +dC +Fy +uJ +XA +Fw +Fw +UF +Fw +Fw +Fw +IQ +Fw +Fw +Fw +HZ +yS +Fw +Fw +Fw +Fw +Fw +YR +rL +rL +rL +rL +rL +rL +rL +Fw +Gk +Fw +Fw +Fw +Fw +Fw +Fw +kf +kf +rL +rL +Rd +"} +(15,1,1) = {" +yz +OW +OW +OW +OW +OW +JW +JW +JW +JW +LQ +JW +eY +eW +eW +LQ +JW +eY +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +LQ +JW +OW +VK +eY +Pc +vL +uF +JW +JW +JW +yq +JW +JW +JW +eW +eW +Rz +kC +kC +kC +Lo +JW +JW +eW +eW +eW +eW +eW +eW +eW +eY +eY +eY +eY +JW +JW +OG +JW +JW +Sr +vC +Tx +vC +vC +fl +vC +vC +vC +vC +vC +vC +Tx +vC +PP +bl +bl +bl +bl +bl +ye +Vx +PU +Tx +vC +vC +vC +fN +fN +fN +kt +YC +YC +YC +FF +FF +FF +FF +FF +XA +Fw +Fw +Fw +Fw +Up +Fw +Fw +Fw +Fw +Fw +Fw +HZ +XO +dC +dC +dT +Fw +Fw +Fw +Fw +Fw +rL +rL +rL +rL +KD +Fw +Fw +Fw +Fw +Fw +Ov +Fw +YR +Fw +kf +rL +rL +Rd +"} +(16,1,1) = {" +yz +OW +OW +OW +OW +OW +Yy +Pc +OG +Pc +JW +JW +eW +eW +eW +JW +JW +eY +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +VK +eY +JW +vL +az +gt +JW +OG +JW +eW +eW +eW +eW +eW +HD +Wp +Wp +Wp +fT +JW +JW +JW +JW +JW +eW +eW +eW +eW +eY +eY +eY +JW +JW +JW +JW +JW +JW +vC +vC +vC +PP +bl +bl +bl +bl +bl +bl +bl +bl +bl +bl +ye +Vx +YC +YC +YC +YC +UE +Nq +vC +vC +vC +vC +fN +fN +fN +vC +vC +vC +vC +vC +IQ +Fw +Fw +Fw +Fw +Fw +YR +Fw +Fw +Fw +Fw +Fw +rL +rL +rL +YR +Fw +fE +FF +FF +Hl +yS +Ov +Fw +UF +Fw +Fw +kf +kf +rL +rL +Fw +Fw +UO +Fw +Up +Fw +Fw +Fw +Fw +Fw +Fw +rL +rL +Rd +"} +(17,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +DW +JW +JW +eW +eW +ke +Pc +JW +LQ +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +eY +eY +JW +TL +dk +uF +Pc +JW +JW +JW +eW +eW +eW +JW +pg +Wp +Wp +Wp +bV +Lo +LQ +DW +JW +JW +JW +eW +eW +eW +eW +eY +eY +Rz +kC +kC +Lo +JW +UI +vC +vC +vC +DQ +Vx +YC +YC +YC +YC +YC +YC +YC +YC +YC +YC +Nq +vC +vC +vC +vC +vC +vC +vC +vC +Tx +fN +fN +fN +fN +vC +vC +bU +fl +vC +Fw +Fw +Fw +Fw +Fw +rL +rL +Fw +kf +kf +Fw +Fw +rL +rL +rL +rL +rL +Fw +Fw +IQ +HZ +yS +Fw +Fw +Fw +Up +kf +kf +rL +rL +rL +Fw +Fw +Ct +Fw +Fw +Fw +IQ +Fw +Fw +Gk +Fw +Fw +rL +Rd +"} +(18,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +JW +JW +eW +eW +eW +JW +JW +JW +JW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +ke +JW +JW +JW +JW +JW +JW +vL +az +gt +JW +JW +JW +JW +eW +eW +eW +lI +Ia +Wp +pr +Wp +fT +JW +JW +JW +JW +JW +JW +UI +eW +eW +eY +JW +HD +Wp +Wp +fT +JW +JW +vC +vC +vC +aa +PI +vC +vC +hF +hF +hF +KN +vC +vC +vC +vC +vC +vC +bU +vC +Tx +vC +vC +fN +fN +fN +fN +fN +fN +vC +ZN +vC +vC +vC +vC +Fw +Fw +Fw +Fw +UO +rL +rL +rL +rL +kf +kf +Fw +UO +Fw +rL +rL +rL +Fw +Fw +IQ +HZ +yS +Fw +Fw +UO +Fw +kf +kf +rL +rL +kf +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +rL +Rd +"} +(19,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +LQ +JW +eW +eW +JW +Pc +JW +JW +UI +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +eY +JW +JW +OG +JW +LQ +JW +JW +JW +TL +Qm +uF +JW +JW +JW +ke +eW +eW +eW +eW +HD +Wp +Wp +Wp +bV +Lo +JW +JW +yq +JW +JW +JW +JW +JW +JW +JW +eW +eW +Wp +bV +Lo +JW +vC +Tx +oC +ye +PI +fN +fN +fN +hF +hF +hF +hF +vC +vC +vC +TQ +vC +Sr +vC +vC +Sr +fN +fN +fN +fN +fN +vC +vC +vC +vC +KN +vC +vC +fN +rL +Fw +IQ +Fw +Fw +Fw +rL +rL +rL +rL +kf +Fw +Fw +Fw +Fw +Fw +Fw +Ov +Fw +Fw +HZ +mE +Fw +Fw +Ct +Fw +rL +kf +kf +kf +kf +Fw +Fw +Fw +Ov +Fw +Fw +Fw +Fw +UF +IQ +Fw +kf +rL +Rd +"} +(20,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +eY +JW +JW +JW +yq +OG +JW +JW +JW +OW +OW +OW +OW +OW +OW +OW +OW +OW +eY +eY +eY +yq +JW +eY +eY +eY +eW +eW +eW +iv +vL +uF +JW +JW +JW +JW +eY +eY +eW +eW +lI +Ia +Wp +Wp +Wp +fT +JW +JW +JW +OG +JW +JW +JW +JW +eW +eW +eW +eW +Wp +Wp +bV +Lo +vC +vC +DQ +Vx +Nq +fN +fN +fN +fN +fN +hF +hF +hF +vC +vC +vC +vC +fl +vC +vC +fN +fN +fN +fN +fN +fN +fN +vC +vC +vC +vC +vC +fN +fN +rL +rL +Fw +UF +Fw +Fw +Fw +Fw +kf +kf +kf +kf +Fw +Fw +Up +Fw +Fw +Fw +UF +Fw +HZ +yS +Fw +Fw +Fw +rL +rL +rL +rL +kf +kf +Fw +Fw +Ov +Fw +UF +Fw +Fw +Fw +rL +rL +Fw +kf +rL +Rd +"} +(21,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +eY +eY +eY +JW +JW +iv +JW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +eY +eY +JW +JW +eY +eY +eW +eW +eW +eW +eW +JW +vL +uF +JW +JW +JW +JW +eY +eY +eY +eY +JW +lI +Ia +Wp +Wp +fT +JW +JW +JW +JW +JW +JW +JW +OG +eW +eW +eW +eW +kA +Wp +LJ +fT +vC +vC +DQ +PI +vC +vC +vC +fN +fN +fN +fN +hF +hF +vC +vC +vC +vC +vC +vC +fN +fN +fN +vC +vC +fN +fN +fN +vC +vC +Sr +vC +eB +fN +fN +rL +kf +Fw +Fw +Gk +Fw +IQ +Fw +IQ +kf +kf +kf +Fw +Fw +Ov +Fw +Fw +Gk +Fw +Fw +Ew +yS +Fw +Fw +rL +rL +rL +rL +kf +kf +Fw +Fw +Fw +Fw +Up +Fw +Gk +Fw +Fw +rL +rL +Fw +kf +kf +Rd +"} +(22,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +eY +eY +eY +eY +JW +LQ +JW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +eY +JW +JW +eW +eW +eY +eY +eW +eW +eW +ke +JW +vL +uF +yq +JW +JW +JW +JW +eY +eY +JW +LQ +JW +lI +hw +hw +Fn +JW +UI +JW +JW +JW +OG +JW +JW +JW +eW +eW +Wp +Wp +Wp +Wp +fT +PP +bl +ye +PI +vC +EF +vC +vC +fN +fN +fN +fN +hF +vC +vC +bU +vC +vC +fN +fN +fN +vC +KN +vC +fN +fN +vC +vC +Tx +vC +vC +vC +hF +Jk +kf +kf +kf +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +IQ +Fw +Fw +Uf +Fy +yS +Fw +Fw +rL +rL +rL +Fw +Fw +UO +Fw +Fw +UO +Fw +Fw +Fw +UO +Fw +rL +rL +rL +Fw +Fw +kf +Rd +"} +(23,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +JW +JW +ke +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +eY +eY +Pc +JW +eW +eW +eW +eY +eY +eW +eW +JW +Nd +xC +uF +JW +JW +Qs +JW +OG +JW +JW +LQ +JW +JW +JW +yq +JW +JW +JW +JW +JW +JW +JW +JW +UI +JW +JW +JW +lI +Ia +Wp +Wp +Vn +Fn +DQ +Vx +YC +Nq +vC +vC +vC +KN +EP +fN +fN +fN +vC +vC +vC +vC +vC +hF +fN +fN +fN +vC +vC +vC +bU +vC +Tx +vC +vC +Tx +vC +Tx +vC +hF +kf +kf +kf +Fw +Fw +UO +Fw +Fw +Ct +Fw +Fw +Fw +Fw +kf +kf +Fw +Ct +Fw +Fw +HZ +uJ +iu +Fw +Fw +Fw +rL +rL +rL +Fw +Fw +Fw +UF +Fw +Fw +Fw +Fw +Fw +Fw +rL +rL +Fw +Fw +IQ +kf +Rd +"} +(24,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +JW +JW +Pc +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +JW +JW +LQ +JW +JW +eW +eW +UI +eY +eY +Nd +eH +xC +Fz +cc +JW +LQ +JW +JW +JW +bk +JW +LQ +JW +JW +JW +JW +JW +JW +JW +JW +yq +JW +JW +JW +JW +JW +yq +JW +JW +lI +hw +hw +Fn +Nd +ye +PI +vC +hF +hF +hF +vC +vC +vC +vC +vC +vC +vC +vC +ZN +vC +hF +hF +hF +fN +vC +vC +vC +vC +vC +vC +vC +vC +vC +KN +vC +vC +vC +vC +kf +kf +Fw +BV +YR +Fw +Fw +Fw +Fw +Fw +Ov +Fw +kf +kf +kf +Fw +Fw +Fw +Fw +Ew +yS +IQ +Ov +Fw +Fw +YR +rL +rL +Ct +Fw +Uf +dC +dC +dC +dC +dC +Mn +Fw +Fw +Fw +Em +Fw +UO +rL +Rd +"} +(25,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Pc +Pc +OG +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +UI +JW +JW +JW +yq +JW +JW +OG +JW +JW +vL +Fz +fo +mF +JW +eW +eW +JW +JW +JW +JW +JW +JW +JW +JW +eW +eW +JW +JW +JW +JW +JW +VK +JW +JW +Pc +JW +JW +OG +JW +JW +LQ +JW +JW +vL +Vx +Nq +fN +fN +hF +hF +vC +vC +eB +vC +vC +vC +vC +vC +vC +vC +hF +hF +hF +hF +vC +vC +ZN +vC +vC +vC +vC +vC +vC +vC +vC +vC +fl +vC +kf +BV +BV +BV +BV +Fw +Fw +Fw +BV +BV +UF +UO +kf +kf +kf +kf +Fw +IQ +UO +HZ +yS +Fw +Fw +Fw +Fw +Fw +Gk +Fw +Fw +Fw +HZ +uJ +FF +FF +FF +FF +XA +Fw +Fw +IQ +Fw +Fw +Fw +rL +Rd +"} +(26,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +JW +LQ +Pc +JW +JW +JW +JW +JW +JW +JW +dM +uF +JW +JW +eW +eW +eW +eY +JW +JW +JW +JW +JW +UI +eW +eW +eW +JW +JW +JW +ke +VK +VK +eY +OG +JW +Nd +eH +eH +eH +eH +eH +eH +eH +xC +PI +fN +fN +fN +hF +hF +ZN +vC +vC +vC +vC +vC +vC +Tx +vC +vC +hF +hF +vC +vC +vC +vC +vC +vC +vC +vC +vC +vC +vC +ZN +vC +vC +vC +vC +Fw +BV +BV +BV +BV +BV +UF +BV +BV +BV +Fw +Fw +Fw +kf +BV +BV +Gk +Fw +Fw +HZ +yS +Fw +Fw +Fw +Fw +Fw +Fw +Fw +pZ +dC +Fy +yS +Fw +Fw +YR +Fw +Fw +Fw +Fw +UO +Ov +Up +Fw +rL +Rd +"} +(27,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +JW +JW +JW +JW +OG +JW +JW +Pc +Qs +JW +dM +Kb +eW +eW +eW +eW +eY +eY +JW +LQ +JW +JW +JW +JW +eW +eW +JW +JW +JW +JW +VK +VK +eY +eY +JW +JW +vL +Fz +fo +fo +fo +fo +fo +fo +fo +Nq +fN +fN +hF +hF +KN +vC +vC +vC +vC +bU +vC +fl +vC +vC +lp +vC +vC +KN +vC +vC +vC +vC +bU +Sr +vC +vC +vC +LU +LU +vC +vC +TQ +vC +UO +Ov +BV +BV +BV +BV +Fw +BV +BV +Fw +Fw +UO +Fw +BV +BV +BV +Fw +Fw +Up +HZ +mE +Fw +UO +Fw +Fw +UF +Fw +Fw +HZ +uJ +FF +XA +Fw +Fw +Fw +Fw +Fw +UO +IF +Fw +hs +rL +rL +rL +Rd +"} +(28,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +ke +JW +OW +OW +JW +JW +JW +vL +uF +eW +eW +eW +JW +eY +JW +JW +JW +JW +JW +eW +eW +eW +eW +yq +JW +JW +VK +VK +VK +eY +JW +JW +JW +AI +uF +DW +JW +JW +LQ +JW +JW +eW +fN +fN +fN +hF +hF +vC +vC +vC +Tx +vC +fN +fN +vC +vC +vC +vC +vC +vC +vC +Tx +vC +vC +vC +vC +vC +vC +vC +LU +LU +LU +LU +hF +hF +vC +Fw +Fw +Fw +BV +BV +BV +BV +BV +BV +Fw +Up +IQ +BV +BV +BV +BV +Fw +UF +Fw +HZ +yS +Gk +Fw +UF +Fw +Fw +Fw +IQ +HZ +yS +Fw +Fw +Ov +Fw +Fw +Fw +IQ +Fw +IQ +Fw +Fw +rL +rL +rL +Rd +"} +(29,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +JW +JW +DW +vL +uF +eW +eW +eW +ke +JW +JW +UI +OG +Pc +JW +eW +eW +eW +JW +JW +OG +VK +VK +VK +JW +JW +JW +JW +ke +vL +Kb +JW +Qs +OG +JW +JW +eW +eW +fN +fN +vC +vC +vC +vC +vC +vC +vC +vC +fN +fN +fN +vC +vC +TQ +vC +fl +vC +vC +vC +vC +Tx +Tx +vC +vC +vC +vC +KN +LU +LU +hF +hF +Tx +Fw +Fw +BV +BV +BV +BV +BV +BV +Fw +IQ +Fw +BV +BV +BV +BV +YR +Fw +Uf +dC +Fy +XO +dC +dT +Fw +Fw +mR +dC +dC +Fy +mE +Fw +Fw +Fw +Fw +Fw +UF +kf +kf +kf +Fw +rL +rL +rL +rL +Rd +"} +(30,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +JW +JW +JW +JW +vL +uF +JW +eW +eW +eW +JW +JW +JW +JW +JW +eW +eW +eW +JW +JW +LQ +JW +JW +VK +JW +Nd +eH +eH +eH +eH +xC +uF +JW +JW +JW +JW +eW +eW +eW +fN +fN +vC +KN +vC +vC +vC +TQ +vC +vC +vC +fN +fN +vC +fN +fN +fN +vC +vC +vC +TQ +vC +vC +eB +vC +fl +vC +KN +LU +LU +LU +hF +hF +vC +Fw +Fw +BV +BV +BV +BV +BV +BV +BV +BV +IQ +BV +BV +BV +Fw +Fw +Fw +HZ +uJ +FF +FF +Hl +yS +Fw +Fw +HZ +bM +FF +FF +XA +Fw +Fw +Fw +IQ +Fw +kf +kf +kf +rL +rL +rL +rL +rL +rL +Rd +"} +(31,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +JW +yq +JW +JW +JW +JW +vL +RQ +gt +JW +eW +eW +JW +JW +JW +JW +JW +eW +eW +Nd +eH +eH +eH +eH +eH +eH +eH +xC +Fz +fo +Cn +fo +fo +Ly +JW +yq +JW +JW +eW +eW +eW +fN +fN +fN +fN +vC +vC +vC +vC +fl +vC +Tx +vC +fN +fN +fN +fN +fN +vC +KN +vC +vC +ND +vC +vC +vC +vC +vC +vC +LU +LU +hF +hF +vC +vC +Ov +IQ +Fw +Fw +BV +BV +BV +BV +BV +BV +BV +BV +BV +BV +Fw +Fw +Fw +HZ +yS +Fw +Fw +HZ +XO +dC +dC +Fy +yS +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +kf +rL +rL +rL +rL +rL +rL +rL +rL +Rd +"} +(32,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +ke +JW +JW +JW +OG +JW +JW +TL +Qm +az +gt +JW +JW +JW +OG +JW +JW +JW +ke +JW +vL +Fz +fo +fo +fo +fo +fo +fo +fo +Ly +Pc +JW +JW +LQ +JW +JW +JW +JW +JW +JW +ke +JW +vC +fN +fN +fN +Tx +vC +vC +bU +vC +hF +fN +fN +fN +fN +fN +vC +vC +vC +vC +vC +vC +vC +vC +vC +vC +vC +bU +vC +vC +hF +hF +hF +vC +lp +Fw +Fw +Fw +UO +BV +BV +BV +BV +BV +BV +BV +BV +Fw +Fw +Uf +dC +dC +Fy +yS +Fw +Fw +ME +FF +FF +Hl +uJ +XA +IQ +Fw +Fw +Up +Fw +Fw +Ct +Ct +kf +rL +rL +rL +rL +rL +rL +rL +rL +Rd +"} +(33,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +JW +JW +iv +JW +LQ +eY +eY +eY +ke +TL +Qm +az +eH +zB +JW +JW +JW +JW +JW +JW +JW +vL +uF +JW +VK +VK +kC +Px +JW +OG +JW +eW +eW +JW +JW +eW +eW +JW +JW +JW +JW +JW +JW +Tx +vC +KN +vC +vC +vC +vC +vC +vC +hF +fN +fN +fN +vC +vC +vC +vC +vC +vC +vC +fl +Tx +vC +vC +vC +vC +vC +vC +KN +vC +vC +vC +vC +Tx +Fw +Fw +Fw +BV +BV +BV +BV +BV +UF +Fw +Fw +Fw +UF +Fw +HZ +uJ +FF +FF +XA +rL +rL +Fw +Fw +Fw +HZ +mE +Fw +Fw +Fw +UO +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +rL +rL +rL +rL +rL +rL +Rd +"} +(34,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +JW +OG +JW +JW +eY +eY +eW +eW +eW +JW +TL +Gj +Qm +uF +JW +yq +Nd +eH +eH +eH +eH +xC +uF +VK +VK +VK +Wp +fT +JW +JW +JW +eW +eW +eW +eW +eW +eW +JW +JW +Pc +JW +JW +JW +vC +vC +vC +vC +vC +lC +vC +vC +vC +hF +hF +hF +hF +vC +vC +vC +ZN +vC +vC +vC +vC +vC +vC +KN +vC +vC +vC +ZN +vC +vC +bU +vC +vC +vC +Fw +Ct +kf +BV +BV +BV +BV +Fw +Fw +Up +Fw +Fw +Fw +Fw +ON +yS +Fw +Fw +Fw +rL +rL +Fw +Fw +Fw +HZ +yS +rL +rL +rL +Fw +Fw +Ov +Fw +Fw +UF +Fw +Fw +Fw +rL +rL +rL +rL +rL +rL +Rd +"} +(35,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +LQ +JW +JW +JW +eY +eY +eW +eW +eW +JW +JW +JW +vL +uF +JW +JW +vL +Fz +fo +fo +fo +fo +Ly +VK +VK +VK +Wp +fT +JW +JW +JW +JW +eW +eW +eW +eW +eY +JW +JW +JW +yq +JW +JW +vC +vC +TQ +Tx +vC +vC +vC +vC +vC +vC +hF +hF +vC +vC +vC +vC +vC +vC +bU +vC +vC +OW +OW +OW +vC +vC +vC +vC +vC +vC +vC +Sr +vC +vC +Fw +Fw +kf +kf +kf +BV +BV +BV +Fw +Fw +Gk +Ov +Uf +dC +Fy +yS +UO +rL +rL +rL +rL +YR +Fw +Ov +Ew +yS +rL +rL +rL +rL +rL +Fw +Fw +UO +Fw +Fw +Up +Fw +Fw +Fw +rL +rL +rL +rL +Rd +"} +(36,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +JW +JW +JW +UI +eY +eY +eY +eW +eW +eW +JW +LQ +vL +uF +JW +JW +vL +uF +JW +JW +JW +JW +VK +VK +VK +oj +Wp +Df +JW +JW +JW +UI +eW +eW +eW +eY +eY +eY +JW +JW +JW +JW +JW +vC +vC +vC +vC +vC +vC +vC +vC +vC +vC +bU +vC +vC +vC +vC +Tx +vC +vC +vC +OW +OW +OW +OW +OW +OW +OW +OW +vC +vC +Tx +vC +fl +vC +vC +UO +Fw +IQ +kf +kf +BV +BV +BV +BV +Fw +Fw +Uf +Fy +uJ +FF +XA +Fw +rL +rL +rL +kf +Fw +Fw +Fw +HZ +yS +Fw +Fw +rL +rL +rL +rL +Fw +Fw +IQ +Fw +Fw +UO +Fw +Fw +rL +rL +rL +rL +Rd +"} +(37,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Pc +JW +JW +JW +Pc +eY +eY +eW +eW +eW +JW +JW +vL +uF +Nd +eH +xC +uF +JW +JW +JW +VK +VK +VK +kA +Wp +Vn +Fn +JW +JW +JW +JW +JW +eY +eY +eY +eY +eY +JW +JW +JW +Qs +JW +vC +vC +vC +vC +vC +vC +vC +vC +ZN +vC +vC +Sr +vC +vC +vC +vC +vC +vC +vC +OW +OW +OW +OW +OW +OW +OW +OW +vC +vC +OW +OW +vC +KN +vC +Fw +Fw +Fw +kf +kf +kf +kf +BV +BV +YR +Fw +HZ +uJ +XA +Fw +Fw +rL +rL +rL +rL +kf +kf +Fw +Fw +Ew +yS +Fw +Fw +Fw +rL +rL +rL +Fw +Fw +Fw +Fw +Ov +Fw +Fw +Ct +Fw +rL +rL +rL +Rd +"} +(38,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Pc +JW +JW +JW +JW +JW +JW +JW +JW +eW +eW +JW +vL +az +xC +Fz +fo +Ly +JW +JW +VK +VK +VK +Wp +Wp +Wp +fT +LQ +JW +yq +JW +JW +DW +JW +eY +eY +eY +JW +JW +JW +JW +JW +JW +Tx +vC +vC +lp +vC +OW +OW +vC +vC +Tx +vC +vC +vC +fl +vC +vC +OW +OW +KN +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +vC +Ov +Up +Fw +kf +kf +kf +kf +Fw +Fw +Fw +Fw +HZ +yS +UO +rL +rL +rL +rL +kf +kf +kf +kf +kf +UF +HZ +yS +Fw +Fw +YR +rL +rL +rL +rL +rL +rL +YR +Fw +Fw +Fw +Fw +Fw +rL +rL +rL +Rd +"} +(39,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +JW +yq +JW +JW +bk +LQ +JW +eW +eW +JW +vL +Fz +fo +Ly +JW +JW +OG +LQ +VK +VK +VK +Wp +Wp +Vn +Fn +JW +JW +JW +JW +OG +JW +yq +JW +JW +JW +JW +JW +ke +JW +OG +JW +vC +vC +vC +fl +vC +OW +OW +OW +vC +vC +vC +eB +vC +vC +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Fw +Fw +Fw +Fw +kf +kf +Fw +Fw +Uf +dC +dC +Fy +yS +Fw +rL +rL +rL +kf +kf +kf +kf +rL +rL +rL +HZ +yS +Fw +Fw +Fw +Fw +Fw +rL +rL +rL +rL +Fw +Fw +Fw +Fw +Up +Fw +Fw +rL +rL +Rd +"} +(40,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +JW +JW +JW +JW +JW +JW +JW +JW +JW +JW +vL +uF +JW +JW +JW +Pc +JW +JW +JW +VK +Wp +Wp +Vn +Fn +JW +JW +JW +JW +JW +JW +JW +iv +JW +JW +Pc +JW +JW +JW +JW +JW +JW +OW +OW +bU +vC +vC +vC +OW +OW +OW +vC +vC +vC +Tx +vC +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Ct +IQ +IQ +Uf +dC +dC +dC +AU +Fy +uJ +FF +FF +XA +Fw +Fw +Fw +Fw +Fw +Fw +kf +kf +rL +rL +rL +HZ +yS +Fw +UF +Fw +rL +rL +rL +rL +rL +rL +rL +Fw +Fw +Fw +Up +Fw +UF +rL +rL +Rd +"} +(41,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +JW +JW +JW +JW +JW +JW +JW +JW +JW +JW +vL +uF +LQ +JW +JW +iv +JW +JW +JW +lI +hw +hw +Fn +eY +eY +eY +ke +JW +eY +eY +JW +JW +JW +JW +JW +JW +JW +JW +JW +JW +JW +OW +OW +OW +vC +vC +KN +OW +OW +OW +OW +OW +vC +vC +KN +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +UF +Fw +Fw +HZ +uJ +FF +FF +FF +FF +XA +Fw +Fw +Ov +Fw +Fw +Un +Fw +Fw +UO +kf +rL +rL +rL +rL +HZ +yS +Fw +Fw +Fw +rL +rL +rL +Fw +rL +rL +rL +Gk +Fw +Fw +Fw +UO +Fw +rL +rL +Rd +"} +(42,1,1) = {" +yz +OW +pw +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +ke +OG +JW +JW +UI +JW +yq +JW +vL +uF +JW +JW +JW +JW +JW +JW +JW +JW +JW +JW +eY +eY +eY +eW +eW +eY +eY +eW +eW +JW +JW +JW +JW +JW +OG +JW +JW +JW +JW +yq +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Fw +Ov +Uf +Fy +yS +UO +Fw +Fw +Fw +Fw +UO +Fw +Fw +Fw +Fw +Fw +Fw +Fw +IQ +Fw +rL +rL +Fw +Fw +HZ +yS +Up +rL +rL +rL +rL +rL +Fw +rL +rL +rL +Fw +IQ +Fw +Fw +Fw +rL +rL +rL +Rd +"} +(43,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +JW +JW +JW +JW +JW +JW +JW +JW +vL +uF +JW +OG +Qs +JW +JW +JW +JW +UI +JW +JW +eY +eW +eW +eW +eW +eY +eY +eW +eW +eW +eW +JW +ke +JW +JW +JW +JW +bk +JW +JW +JW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Fw +Uf +dC +Fy +uJ +XA +Fw +Ov +UF +Fw +Fw +Fw +KD +Up +Fw +Ov +Fw +Fw +Fw +Fw +Fw +rL +rL +Fw +Fw +HZ +yS +Fw +rL +rL +rL +Fw +Fw +Fw +Fw +IQ +Fw +Fw +Fw +Fw +rL +rL +rL +rL +rL +Rd +"} +(44,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +PF +JW +JW +JW +OG +JW +JW +JW +vL +uF +JW +JW +JW +JW +DW +JW +JW +JW +JW +LQ +eY +eW +eW +eW +eY +eY +eY +eW +eW +eW +eW +eW +eW +eW +eW +JW +JW +JW +JW +OG +JW +JW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +UF +HZ +uJ +FF +XA +Fw +Fw +rL +rL +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Ct +Fw +Fw +Up +Fw +Fw +IQ +HZ +yS +Fw +rL +rL +rL +rL +rL +Fw +Fw +Fw +Ov +Up +Fw +Fw +rL +rL +rL +rL +rL +Rd +"} +(45,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +sT +oW +oW +PF +DW +JW +JW +LQ +vL +uF +JW +JW +JW +JW +JW +JW +JW +JW +JW +JW +JW +eW +eW +eW +eY +eY +JW +JW +eW +eW +eW +eW +eW +eW +JW +JW +JW +JW +JW +JW +JW +JW +Pc +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Fw +Fw +Fw +Fw +HZ +YZ +Fw +Fw +Up +rL +rL +rL +Fw +Fw +Fw +Fw +YR +Fw +Fw +Fw +Fw +Fw +Fw +Fw +IQ +Fw +Fw +Fw +HZ +yS +Fw +YR +rL +rL +rL +rL +Fw +Fw +Ct +Fw +Fw +Fw +rL +rL +rL +Fw +rL +rL +Rd +"} +(46,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +sT +PF +JW +JW +JW +vL +uF +JW +JW +yq +JW +JW +JW +OW +JW +JW +JW +JW +JW +JW +eY +eY +JW +JW +OG +OG +JW +eW +eW +UI +eY +JW +Pc +JW +JW +JW +UI +JW +DW +JW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Fw +Fw +Fw +Gk +Fw +HZ +yS +Fw +Fw +UF +rL +rL +rL +rL +Fw +Fw +Fw +rL +rL +rL +rL +Fw +IQ +Fw +Fw +Fw +kf +kf +Fw +HZ +XO +dT +Fw +rL +rL +Fw +Fw +Fw +Fw +Fw +Fw +Fw +rL +rL +rL +Fw +Fw +Fw +rL +Rd +"} +(47,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +sN +fq +JW +JW +OG +vL +uF +Pc +JW +bB +Ik +OW +OW +OW +UI +Pc +JW +OG +JW +LQ +JW +JW +JW +JW +LQ +JW +JW +eY +eY +eY +eY +JW +JW +JW +JW +JW +JW +JW +JW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Fw +Fw +YR +Fw +Fw +ON +yS +Fw +Fw +Fw +Fw +rL +rL +rL +rL +Fw +rL +rL +rL +rL +rL +rL +Fw +Fw +Fw +kf +kf +kf +kf +ME +Hl +yS +Fw +Fw +IQ +UO +Fw +kf +kf +Fw +IQ +Fw +rL +rL +YR +Fw +Fw +Fw +rL +Rd +"} +(48,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +qc +qc +Zt +sT +PF +JW +JW +vL +sM +oW +oW +XD +OW +OW +OW +OW +OW +Pc +JW +JW +JW +JW +JW +JW +DW +JW +JW +JW +eY +eY +eY +eY +eY +eY +JW +JW +JW +JW +JW +Pc +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Fw +Fw +Fw +Uf +dC +Fy +yS +Fw +Fw +Fw +Fw +rL +rL +rL +rL +rL +rL +rL +Fw +Fw +rL +rL +rL +Fw +kf +kf +kf +kf +kf +Fw +HZ +yS +Fw +Fw +UF +Fw +kf +kf +kf +kf +Fw +Fw +Fw +Fw +Fw +Fw +Fw +IQ +rL +Rd +"} +(49,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +qc +Zt +Zt +Zt +sT +PF +JW +Ug +lX +sN +OW +OW +OW +OW +OW +OW +OW +OW +JW +JW +JW +JW +ke +JW +Pc +JW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Pc +OW +OW +JW +JW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Fw +Fw +Up +Fw +Fw +go +bM +FF +XA +Fw +Fw +YR +rL +rL +rL +rL +rL +rL +rL +Fw +Fw +Fw +Fw +rL +rL +Fw +kf +kf +kf +Fw +Fw +Fw +Ew +XO +dT +Fw +Fw +kf +kf +kf +kf +kf +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +rL +Rd +"} +(50,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +my +Zt +Zt +Zt +Zt +sT +oW +XD +Zt +qc +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +JW +JW +JW +JW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OG +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +UF +Fw +Fw +pZ +dC +Fy +yS +Fw +Fw +Fw +rL +rL +rL +rL +rL +rL +rL +rL +Fw +Fw +Fw +Ov +Fw +Fw +Fw +Fw +Fw +kf +kf +Gk +Fw +Fw +ME +Hl +yS +Fw +Fw +rL +rL +kf +kf +Fw +Fw +UF +Fw +Fw +Fw +Fw +Fw +Fw +YR +Rd +"} +(51,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +my +qc +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Fw +Fw +Fw +HZ +uJ +FF +XA +IQ +Fw +rL +rL +rL +rL +rL +Fw +Fw +rL +rL +rL +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Fw +Ct +Fw +Fw +Ov +HZ +yS +Fw +Fw +rL +rL +rL +Fw +Fw +Fw +Fw +Fw +Fw +Ov +Fw +Fw +Fw +Fw +Rd +"} +(52,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +qc +Zt +Zt +Zt +Zt +Zt +Zt +Zt +qc +qc +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +mQ +si +rU +rU +Ov +HZ +yS +Fw +Fw +rL +rL +rL +rL +rL +rL +Fw +Fw +UO +Fw +rL +rL +rL +YR +Fw +Fw +Fw +Fw +Fw +YR +Fw +Fw +Fw +Fw +Fw +Fw +HZ +yS +UF +Fw +Fw +rL +rL +Fw +Fw +rL +rL +rL +Fw +Fw +Fw +Fw +Fw +Fw +Rd +"} +(53,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +qc +qc +qc +Zt +Zt +Zt +Zt +Zt +Zt +qc +qc +qc +qc +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +rU +rU +TJ +jQ +jQ +xx +In +rU +bF +bF +bF +bF +bF +bF +bF +bF +Jt +rU +rU +rU +bF +bF +rU +rU +NP +NP +NP +NP +NP +bt +NP +SC +NP +NP +NP +YX +IP +GR +NP +NP +PM +PM +PM +PM +PM +PM +PM +PM +GR +NP +NP +GR +NP +Ho +"} +(54,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +qc +qc +qc +qc +Zt +Zt +Zt +Zt +Zt +IB +qc +qc +qc +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +rU +rU +no +iI +OK +OK +DT +si +jp +Qb +bF +Qb +bF +bF +bF +bF +rU +rU +si +rU +rU +rU +rU +rU +NP +NP +NP +NP +NP +NP +NP +NP +PM +PM +NP +YX +IP +NP +NP +NP +PM +PM +PM +PM +PM +NP +NP +NP +NP +NP +Lw +NP +jb +Ho +"} +(55,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +qc +IB +qc +qc +Zt +qH +Bm +Gx +Zt +IB +IB +IB +IB +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +YT +mt +no +In +rU +rU +rU +Qb +Qb +Qb +Qb +Qb +bF +bF +Qb +rU +mt +ZD +rU +rU +rU +rU +rU +vA +NP +NP +NP +NP +NP +PM +PM +PM +PM +PM +EB +YX +IP +NP +NP +PM +PM +PM +PM +NP +NP +Lw +NP +bt +NP +NP +NP +NP +NP +Ho +"} +(56,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +qc +IB +IB +qc +Bm +eV +jU +hb +Zt +IB +IB +IB +qc +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +rU +rU +NA +In +vA +rU +rU +Qb +Qb +bF +bF +Qb +bF +bF +Qb +Qb +rU +mt +rU +rU +rU +rU +rU +rU +NP +NP +NP +Qd +NP +PM +PM +PM +PM +NP +NP +YX +IP +NP +PM +PM +PM +NP +NP +NP +Lw +NP +NP +NP +NP +GR +bt +NP +NP +Ho +"} +(57,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +qc +IB +IB +IB +jU +jU +jU +nI +Bm +qc +qc +ZK +ZK +Vy +ZK +ZK +ZK +Vy +Vy +Vy +OW +OW +uK +uK +OW +OW +OW +OW +OW +OW +Xr +uK +Xr +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +rU +rU +rU +vA +rU +no +In +rU +rU +mt +Qb +bF +bF +bF +Qb +Qb +Qb +Qb +bF +rU +rU +rU +rU +Jt +Qb +Qb +Qb +NP +NP +NP +NP +NP +PM +PM +PM +PM +NP +NP +YX +IP +NP +PM +PM +NP +Xm +NP +NP +NP +NP +NP +NP +PM +NP +Lw +NP +NP +Ho +"} +(58,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +qc +qc +IB +IB +jU +jU +jU +jU +jU +qc +qc +ZK +wV +EK +Td +iG +Vy +px +iG +Vy +Xr +uK +uK +uK +OW +OW +OW +OW +OW +OW +Xr +uK +uK +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +rU +rU +rU +Jt +rU +ko +JE +bF +bF +bF +Qb +bF +bF +Qb +Qb +Qb +bF +bF +bF +bF +mQ +mt +rU +Qb +Qb +Qb +Qb +NP +NP +kT +NP +PM +PM +PM +PM +PM +Lw +NP +AE +Oc +aQ +NP +NP +NP +NP +NP +NP +NP +NP +NP +NP +PM +PM +NP +NP +PM +Ho +"} +(59,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +qc +qc +qc +qc +jU +VQ +jU +Cp +jU +IB +qc +ZK +Ve +Cb +Zr +JU +UZ +yf +JU +rP +qO +bz +rb +Xr +Xr +Xr +bz +bz +bz +bz +bz +uK +Xr +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Qb +Qb +rU +mt +no +In +bF +bF +bF +bF +bF +bF +Qb +Qb +Qb +bF +bF +bF +bF +rU +rU +rU +Qb +bF +Qb +Qb +NP +NP +SC +NP +PM +PM +PM +PM +NP +NP +NP +ex +cC +Oc +aQ +NP +NP +NP +NP +NP +NP +NP +EB +PM +PM +PM +NP +PM +PM +Ho +"} +(60,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +qc +qc +qc +qc +IB +VQ +jU +Cp +IB +IB +qc +ZK +ry +Cb +Lc +QQ +mr +yf +zt +Vy +oZ +bz +rb +Xr +Xr +Xr +bz +rb +Xr +Xr +bz +uK +Xr +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +mt +rU +OW +OW +OW +Qb +Qb +Qb +TJ +xx +In +rU +bF +bF +RC +bF +rU +rU +rU +Qb +Qb +bF +bF +bF +bF +rU +rU +Qb +bF +bF +mQ +NP +NP +NP +NP +PM +PM +PM +PM +PM +PM +Lw +NP +Sb +cC +Oc +UB +NP +bt +NP +NP +NP +NP +PM +PM +PM +PM +NP +PM +PM +Ho +"} +(61,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +oF +oF +oF +oF +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +qc +qc +qc +qc +iS +VQ +jU +Cp +SB +qc +qc +Vy +PO +SR +Lc +zt +Vy +kg +mP +ZK +Xr +bz +bz +bz +qO +bz +bz +Tj +Xr +Xr +bz +rb +Xr +pL +pL +Xr +Xr +OW +OW +Xr +Xr +Xr +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +rU +LI +OW +OW +OW +OW +Qb +Qb +no +iI +DT +rU +rU +rU +rU +mt +rU +rU +rU +rU +rU +bF +bF +bF +bF +rU +rU +rU +bF +bF +YT +NP +NP +PM +PM +PM +PM +PM +PM +PM +PM +NP +NP +NP +ex +cC +IP +NP +NP +NP +GS +GS +PM +PM +PM +PM +PM +NP +PM +PM +Ho +"} +(62,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +oF +WI +WI +oF +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +qc +qc +qc +IB +IB +VQ +jU +Cp +IB +qc +qc +Vy +DE +DD +wl +wF +Vy +tc +Gs +ZK +Xr +BQ +rb +qc +qc +qc +qc +Hu +Hu +Xr +bz +rb +Sp +pL +Kz +rb +rb +Xr +Xr +Xr +uK +Xr +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Jt +rU +rU +rU +OW +OW +Qb +gy +xx +In +rU +rU +rU +mQ +rU +rU +rU +rU +LI +rU +rU +rU +bF +bF +bF +LI +rU +rU +rU +bF +bF +NP +NP +PM +PM +PM +PM +PM +PM +GR +NP +NP +NP +NP +NP +YX +IP +NP +NP +GS +GS +PM +PM +PM +PM +PM +NP +NP +PM +PM +Ho +"} +(63,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +oF +oF +WI +oF +oF +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +qc +qc +qc +qc +qc +VQ +jU +Cp +qc +qc +qc +Vy +Vy +yU +mr +pV +Vy +ZK +ZK +ZK +Hu +Hu +qc +qc +IB +IB +IB +IB +Hu +qc +WO +bz +bz +UH +bz +bz +rb +Xr +Xr +uK +uK +Xr +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +rU +rU +si +LI +rU +Qb +Qb +no +iI +DT +Jt +rU +rU +rU +rU +rU +LI +rU +Qb +Qb +rU +rU +rU +bF +rU +rU +rU +rU +rU +bF +bF +PM +NP +PM +PM +PM +PM +PM +NP +Lw +NP +NP +NP +NP +NP +QF +IP +NP +Lw +GS +GS +PM +PM +PM +NP +NP +GR +NP +Xm +PM +Ho +"} +(64,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +oF +WI +WI +oF +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +qc +qc +jU +VQ +jU +pQ +UA +UA +UA +jz +UA +Le +jU +pQ +UA +UA +jz +UA +UA +UA +UA +jz +UA +UA +UA +tp +IB +qc +Xr +rb +rb +pL +Xr +bz +bz +bz +bz +bz +bz +Xr +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +ZD +rU +TJ +jQ +jQ +jQ +jQ +xx +In +rU +rU +rU +rU +mt +rU +rU +rU +Qb +Qb +Qb +Qb +rU +rU +LI +si +vA +rU +rU +rU +bF +bF +PM +PM +PM +PM +PM +PM +PM +NP +NP +PM +NP +bt +NP +NP +YX +IP +NP +NP +GS +GS +GS +PM +GS +NP +NP +NP +NP +NP +PM +Ho +"} +(65,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +oF +WI +WI +WI +oF +oF +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +qc +ih +jU +VQ +jU +jU +jU +jU +jU +jU +jU +aj +jU +jU +jU +jU +jU +jU +jU +jU +jU +jU +jU +jU +jU +Cp +IB +IB +Xr +rb +rb +Xr +Xr +rb +rb +rb +rb +rb +bz +Xr +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +rU +rU +OW +OW +rU +rU +TJ +xx +iI +OK +OK +OK +OK +DT +rU +mt +rU +rU +rU +si +rU +mt +Qb +Qb +bF +Qb +Qb +rU +rU +rU +rU +rU +mt +rU +rU +bF +PM +PM +PM +PM +PM +PM +PM +PM +PM +PM +EB +NP +NP +NP +YX +IP +NP +NP +NP +GS +GS +GS +GS +NP +NP +Lw +NP +NP +PM +Ho +"} +(66,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +oF +oF +oF +WI +bO +oF +oF +oF +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +qc +qc +jU +mm +zP +zP +zP +zP +zP +xf +aj +af +zP +zP +zP +zP +zP +zP +zP +zP +zP +zP +zP +xf +jU +Cp +SB +qc +Xr +Tj +rb +Xr +Xr +Xr +uK +pL +pL +Kz +bz +Xr +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +rU +rU +rU +OW +YT +rU +no +iI +vj +rU +rU +rU +rU +rU +rU +rU +rU +bF +bF +bF +rU +rU +rU +bF +bF +bF +Qb +rU +rU +rU +rU +rU +rU +rU +rU +bF +PM +PM +PM +PM +PM +PM +PM +PM +PM +NP +NP +NP +NP +NP +JN +IP +NP +NP +NP +EB +GS +GS +NP +NP +Lw +NP +NP +PM +PM +Ho +"} +(67,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +oF +oF +bD +WI +bR +WI +WI +oF +oF +oF +oF +oF +oF +oF +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +qc +qc +qc +IB +IB +IB +IB +qc +qc +NU +WM +ih +IB +IB +qc +qc +IB +IB +IB +IB +IB +IB +qc +VQ +jU +Cp +IB +qc +Xr +Tj +rb +OW +OW +OW +Xr +Xr +Xr +rb +bz +pL +OW +OW +OW +OW +OW +OW +OW +rU +LI +rU +rU +rU +rU +rU +rU +rU +vq +no +In +rU +rU +rU +rU +rU +YT +rU +rU +Qb +bF +bF +bF +bF +bF +mt +bF +bF +bF +YT +rU +rU +rU +rU +mQ +rU +mt +rU +rU +PM +PM +PM +PM +PM +PM +PM +PM +PM +PM +PM +NP +NP +NP +YX +IP +NP +NP +NP +NP +NP +NP +NP +NP +NP +NP +PM +PM +PM +Ho +"} +(68,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +oF +WI +id +WI +Qa +aE +RY +WI +WI +Qa +Qa +Qa +bE +oF +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +qc +qc +qc +qc +qc +qc +qc +qc +Hu +Hu +aA +Hu +Hu +qc +qc +qc +IB +qc +qc +IB +qc +qc +qc +VQ +jU +Cp +Hu +qc +Tj +rb +rb +OW +OW +OW +OW +OW +pL +rb +ji +pL +pL +pL +OW +OW +OW +rU +rU +rU +rU +rU +rU +vA +rU +TJ +jQ +jQ +jQ +xx +Jz +rU +rU +rU +rU +rU +rU +rU +Qb +Qb +jp +bF +bF +bF +bF +bF +bF +bF +rU +rU +rU +rU +rU +rU +rU +rU +vA +rU +bF +PM +PM +PM +PM +PM +PM +PM +PM +PM +PM +PM +PM +EB +NP +YX +IP +NP +NP +NP +NP +Lw +NP +Ry +PM +PM +PM +PM +PM +PM +Ho +"} +(69,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +oF +ot +Qa +Qa +Qa +PE +jy +Qa +bE +aE +Qa +Qa +Qa +oF +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Hu +fY +CR +Hu +qc +qc +qc +qc +qc +qc +qc +qc +qc +qc +Hu +VQ +jU +Cp +Hu +Xr +rb +sC +rg +OW +OW +OW +OW +OW +pL +rb +bz +bz +bz +pL +OW +OW +OW +rU +mt +rU +Jt +LI +rU +rU +rU +Uz +iI +OK +OK +OK +DT +rU +xi +xi +rU +rU +rU +xi +xi +xi +Qb +bF +rU +bF +bF +bF +bF +rU +rU +rU +rU +rU +rU +rU +rU +rU +rU +bF +bF +PM +PM +PM +PM +PM +PM +PM +NP +PM +PM +PM +PM +PM +GS +YX +yZ +jb +NP +NP +NP +NP +NP +NP +NP +PM +PM +PM +PM +PM +Ho +"} +(70,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +oF +oF +Pa +bR +aE +ET +My +HC +Qa +Qa +Qa +Qa +cF +Qa +Qa +oF +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +fe +fe +fe +fe +ls +ls +ls +fe +fe +fO +fe +fe +fe +ls +ls +ls +hT +hT +hT +hT +Qw +Qw +Qw +aJ +ED +kB +Qw +Qw +DC +Qw +hT +hT +hT +Qw +Qw +Qw +hT +zI +rb +rb +bz +Xr +OW +OW +OW +OW +OW +OW +rU +rU +rU +rU +rU +no +In +rU +rU +rU +rU +rU +xi +xi +rU +xi +xi +xi +xi +xi +Qb +bF +rU +rU +bF +bF +rU +rU +rU +mt +rU +rU +rU +rU +si +rU +rU +bF +bF +PM +PM +PM +PM +NP +Lw +NP +GR +NP +GS +PM +PM +PM +GS +YX +IP +NP +Lw +NP +NP +NP +NP +Xm +PM +PM +PM +NP +NP +PM +Ho +"} +(71,1,1) = {" +yz +OW +OW +OW +OW +OW +oF +oF +WI +WI +WI +Qi +qt +Qa +aE +tD +Qa +MN +Qa +Qa +Qa +VW +oF +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +fe +lq +fG +Aw +Aw +Aw +Aw +KF +Aw +BH +Aw +Aw +Aw +KF +Aw +ls +hT +hT +ED +ED +Sx +Bx +MZ +Ba +ED +PT +MZ +ED +uy +ED +ED +ED +ED +MZ +ED +Qw +hT +Xr +Xr +rb +bz +Xr +OW +OW +OW +OW +OW +OW +OW +OW +OW +mt +TJ +xx +In +rU +si +rU +rU +xi +xi +xi +xi +xi +xi +xi +xi +Qb +Qb +bF +Qb +rU +rU +rU +YT +rU +rU +rU +rU +Qb +Qb +Qb +bF +bF +bF +bF +bF +NP +NP +NP +NP +Xm +NP +SC +NP +NP +GS +GS +GS +GS +GS +YX +IP +NP +NP +NP +NP +NP +NP +PM +PM +PM +PM +NP +NP +PM +Ho +"} +(72,1,1) = {" +yz +OW +OW +OW +OW +oF +oF +WI +WI +WI +aE +jy +SN +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +xp +oF +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +ls +eq +Aw +Aw +Aw +Aw +Aw +Aw +Aw +JH +Aw +Aw +Aw +Aw +eq +ls +hT +Qw +FB +ED +ED +ED +ED +ED +ED +ED +ED +ED +ED +ED +ED +ED +Zy +bh +ED +YJ +hT +Xr +Xr +rb +bz +uK +OW +OW +OW +OW +OW +OW +OW +OW +rU +rU +no +iI +DT +rU +rU +rU +mt +xi +xi +xi +xi +xi +xi +xi +xi +Qb +Qb +Qb +Qb +rU +rU +rU +rU +si +rU +rU +Qb +Qb +Qb +bF +bF +bF +bF +bF +bF +EB +NP +NP +NP +NP +NP +NP +NP +Lw +NP +NP +GS +GS +NP +gN +IP +NP +PM +PM +NP +NP +NP +NP +PM +PM +NP +NP +NP +PM +Ho +"} +(73,1,1) = {" +yz +OW +OW +OW +oF +WI +WI +WI +WI +oF +aE +VY +Qa +Qa +Qa +Qa +dG +Qa +Qa +Qa +Qa +Qa +HO +XP +XP +XP +XP +XP +XP +XP +XP +XP +XP +ls +Qu +Aw +Aw +Aw +iZ +Aw +Aw +iZ +JH +Aw +Aw +Aw +Aw +fQ +ls +hT +Qw +kN +ED +ED +ED +ED +ED +ED +ED +ED +ED +ED +ED +kn +ED +PC +Zy +ED +YJ +hT +OW +Xr +rb +bz +uK +OW +OW +OW +OW +OW +OW +OW +rU +rU +rU +no +In +rU +rU +xi +xi +xi +xi +xi +xi +xi +xi +mt +mt +Qb +Qb +Qb +rU +rU +mt +rU +rU +ZD +rU +rU +Qb +Qb +Qb +rU +YT +bF +bF +bF +bF +rU +NP +NP +NP +NP +NP +NP +NP +NP +NP +NP +NP +NP +NP +NP +YX +IP +PM +PM +PM +NP +NP +NP +NP +NP +NP +NP +Lw +kT +PM +Ho +"} +(74,1,1) = {" +yz +OW +OW +oF +oF +WI +oF +WI +WI +oF +aE +aE +Qa +MN +Qa +Qa +ZB +Qa +Qa +Qa +Qa +Ig +HO +XP +cM +gl +IZ +zE +Ca +gl +VF +hS +XP +ln +Aw +Aw +Aw +Aw +lE +Aw +Aw +lE +JH +Aw +Aw +Aw +Aw +rz +ls +Qw +Qw +Dy +ED +ED +Wn +Qw +So +ED +ED +ED +ED +ED +Ju +Qw +Wn +ED +ED +ED +ED +wx +OW +Xr +rb +bz +Xr +Xr +OW +OW +OW +OW +OW +rU +rU +rU +Jt +no +In +rU +rU +xi +xi +xi +xi +xi +xi +xi +xi +xi +rU +Qb +Qb +rU +rU +rU +rU +rU +rU +rU +rU +rU +Qb +Qb +Qb +Qb +rU +rU +rU +rU +rU +rU +SC +NP +Qd +NP +SC +GR +NP +NP +NP +NP +NP +NP +NP +kT +YX +IP +PM +PM +EB +NP +jb +NP +oy +NP +NP +NP +NP +Lw +PM +Ho +"} +(75,1,1) = {" +yz +OW +OW +oF +WI +WI +oF +oF +WI +oF +aE +bE +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +HO +XP +pt +xz +qh +eD +Oa +xz +xz +CB +XP +ln +Aw +Aw +Aw +Aw +Ti +Aw +Aw +Ti +JH +Aw +Aw +Aw +Aw +GX +KH +Cz +Cz +Ba +ED +ED +Qw +Qw +ei +ED +ED +ED +ED +ED +YK +Qw +Qw +ED +ED +ED +ED +YJ +OW +Xr +rb +bz +Xr +uK +Xr +Xr +Xr +OW +LI +rU +vA +rU +rU +no +In +rU +rU +xi +xi +xi +xi +rU +rU +xi +xi +xi +rU +rU +rU +rU +mt +rU +rU +rU +mt +rU +Jt +rU +rU +Qb +Qb +rU +LI +rU +rU +rU +xv +LI +NP +NP +NP +kT +NP +NP +jb +NP +NP +NP +EB +NP +NP +NP +YX +IP +NP +NP +NP +NP +bt +Lw +NP +NP +GR +GR +NP +NP +PM +Ho +"} +(76,1,1) = {" +yz +OW +OW +oF +WI +oF +OW +OW +oF +oF +CM +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Tl +cM +XY +xz +yb +Bh +xz +xz +xz +eK +XP +ln +Lv +Aw +Aw +gc +ny +Aw +Aw +XI +JH +Aw +Aw +Aw +Aw +Aw +Aw +ED +ED +ED +ED +ED +ED +MZ +ED +ED +ED +ED +ED +ED +Bz +MZ +NE +ED +ED +ED +YJ +Bj +OW +Xr +rb +bz +rb +rb +rb +uK +Xr +OW +rU +rU +rU +si +rU +no +In +rU +rU +YT +xi +xi +rU +rU +xi +xi +xi +xi +rU +rU +mt +rU +rU +Jt +bF +bF +bF +bF +bF +rU +rU +rU +rU +rU +si +Jt +rU +rU +rU +rU +NP +jb +GR +NP +Lw +NP +NP +PM +PM +NP +NP +NP +jb +NP +YX +Oc +aQ +NP +NP +GR +NP +NP +NP +NP +NP +NP +NP +Lw +PM +Ho +"} +(77,1,1) = {" +yz +OW +OW +oF +WI +oF +OW +OW +OW +oF +Qa +Qa +Qa +zY +zY +zY +zY +zY +zY +lh +zY +zY +cX +nR +Bg +xz +xz +rF +xz +xz +xz +uq +uG +ek +qQ +Aw +Aw +Aw +ny +Aw +Aw +Aw +JH +Aw +Aw +Aw +Aw +Aw +Aw +ED +ED +ED +ED +ED +ED +PY +ED +ED +ED +ED +ED +ED +OY +ED +XF +ED +ED +ED +PC +hT +OW +Xr +BQ +bz +bz +bz +bz +bz +Xr +OW +rU +mt +rU +rU +rU +no +In +rU +rU +Qb +Qb +Qb +Qb +rU +xi +xi +xi +rU +mQ +rU +si +rU +rU +bF +bF +bF +bF +bF +bF +bF +rU +rU +rU +rU +rU +rU +rU +LI +rU +rU +NP +NP +NP +NP +NP +NP +PM +PM +PM +PM +PM +PM +NP +NP +ex +cC +IP +NP +NP +NP +NP +NP +GR +NP +NP +NP +EB +NP +PM +Ho +"} +(78,1,1) = {" +yz +OW +OW +oF +oF +OW +OW +OW +OW +oF +Qa +Qa +Qa +zY +Qa +Qa +zY +Qa +Qa +Qa +Qa +Qa +HO +XP +bN +JX +JX +JX +JX +JX +JX +Jy +JX +FG +Wg +JH +JH +JH +JH +JH +JH +JH +JH +Aw +Aw +Aw +Aw +Aw +Aw +ED +ED +ED +ED +ED +ED +IH +ED +ED +ED +ED +ED +ED +ED +ED +iE +ED +ED +ED +hT +hT +OW +Xr +Xr +Xr +Xr +Xr +rb +bz +Xr +OW +rU +rU +si +rU +rU +no +gI +jQ +vN +rU +Qb +Qb +Qb +rU +rU +xi +rU +rU +rU +rU +rU +bF +bF +bF +bF +rU +bF +bF +bF +bF +YT +rU +rU +rU +rU +rU +rU +rU +rU +rU +NP +NP +NP +Lw +NP +PM +PM +PM +PM +PM +PM +PM +PM +NP +NP +YX +IP +NP +NP +NP +Lw +NP +NP +NP +NP +NP +NP +NP +PM +Ho +"} +(79,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +oF +Qa +Qa +Qa +zY +XL +Qa +ZA +Qa +Qa +Qa +Qa +Qa +HO +XP +Fv +xz +xz +xz +JX +xz +xz +uq +XP +ln +Lv +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Qh +Cf +VM +VM +Ij +ED +ED +ED +YA +ED +ED +ED +ED +ED +ED +ED +ED +ED +ED +ED +ED +Qw +OW +OW +OW +OW +OW +OW +Xr +lY +bz +Xr +OW +OW +OW +OW +oq +rU +ta +OK +UP +In +rU +Qb +Qb +Qb +mQ +rU +rU +rU +rU +rU +rU +bF +bF +bF +bF +rU +rU +rU +bF +bF +rU +rU +rU +Jt +rU +rU +rU +rU +rU +YT +rU +NP +NP +NP +NP +EB +PM +PM +PM +PM +Lw +PM +PM +PM +Lw +NP +gN +IP +Xm +PM +PM +PM +PM +NP +NP +PM +NP +NP +NP +PM +Ho +"} +(80,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +oF +HO +HO +Qa +pq +HO +HO +HO +HO +kc +HO +HO +HO +HO +XP +oO +xz +xz +xz +JX +xz +xz +nz +XP +ln +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +rz +ls +hT +hT +wf +ED +ED +ED +ED +ED +Wn +ED +iA +ED +ED +ED +ED +ED +ED +ED +ED +Qw +OW +OW +OW +ac +ac +Ez +Ez +Ez +MK +Ez +Ez +OW +OW +OW +OW +rU +rU +rU +no +In +mt +rU +Qb +Qb +Qb +rU +rU +rU +rU +rU +rU +bF +bF +mQ +rU +LI +rU +rU +rU +rU +LI +rU +rU +rU +rU +Qb +Qb +Qb +rU +bF +rU +NP +NP +NP +NP +PM +PM +PM +PM +NP +NP +NP +PM +PM +NP +NP +YX +IP +NP +PM +PM +PM +PM +NP +PM +PM +PM +NP +SC +PM +Ho +"} +(81,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +HO +Tk +XK +HO +RJ +RJ +PX +PX +hl +RJ +RJ +RJ +XP +AB +PD +IA +pH +QS +AV +hz +OH +tV +ls +Lx +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +OZ +ls +hT +hT +ED +ED +ED +ED +ED +ED +ED +ED +qT +ED +ED +Hi +ED +ED +ED +ED +kU +Qw +Pd +ac +ac +ac +ac +Ez +HF +vb +tP +Fc +Ez +OW +OW +OW +OW +OW +YT +rU +Uz +In +rU +Qb +Qb +Qb +Qb +Qb +rU +rU +ZD +rU +Jt +rU +rU +rU +rU +rU +rU +mt +rU +rU +rU +rU +si +LI +Qb +Qb +Qb +bF +bF +bF +rU +SC +NP +NP +NP +PM +PM +PM +PM +NP +SC +NP +NP +NP +NP +NP +YX +IP +NP +NP +PM +PM +PM +PM +PM +PM +Lw +NP +bt +PM +Ho +"} +(82,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +oF +Tk +XK +oF +PX +PX +PX +PX +PX +PX +PX +PX +XP +XP +tV +tV +tV +oV +tV +tV +tV +tV +ls +Sa +Aw +Sa +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +oz +Aw +oz +ls +ED +ED +ED +ED +ED +ED +ED +ED +ED +ED +VU +ED +ED +IR +ED +ED +ED +ED +PT +Cz +IS +IS +IS +GW +qD +nf +Nx +em +bq +Zl +Ez +OW +OW +OW +rU +rU +rU +rU +no +In +rU +Qb +bF +bF +Qb +Qb +rU +rU +rU +rU +rU +rU +rU +rU +rU +mt +LI +rU +rU +rU +rU +rU +rU +Qb +Qb +Qb +bF +bF +bF +rU +rU +NP +NP +NP +PM +PM +PM +NP +NP +NP +NP +NP +NP +NP +NP +EB +YX +IP +NP +NP +SC +NP +PM +PM +PM +PM +NP +NP +NP +PM +Ho +"} +(83,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +oF +Tk +XK +HO +dV +RJ +MH +XN +PX +RJ +RJ +PX +PX +PX +PX +iF +KM +iF +PX +PX +PX +RJ +fe +Sa +sU +Sa +fg +Aw +Qh +Sz +sU +fg +Aw +Qh +Sa +uO +Sa +fe +hT +oX +ED +ED +ED +Zz +On +vF +ED +ne +Bx +ED +ED +Mp +ED +ED +ED +ED +ED +ED +qD +qD +qD +Ng +qD +lU +yv +bq +bq +KU +Ez +OW +OW +rU +rU +LI +rU +vA +no +In +bF +bF +bF +bF +rU +rU +rU +rU +si +rU +rU +rU +rU +Qb +Qb +rU +rU +rU +rU +rU +rU +rU +rU +Qb +Qb +xi +xi +bF +bF +rU +rU +Lw +NP +PM +PM +PM +GS +GS +GS +GS +NP +NP +NP +NP +NP +NP +YX +gu +NP +PM +PM +PM +PM +PM +PM +PM +PM +GR +NP +PM +Ho +"} +(84,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +oF +Tk +XK +Oe +PX +hf +hf +hf +hf +yC +yC +yC +yC +hf +hf +RD +hf +hf +yC +yC +PX +PX +fe +fe +fe +fe +QU +Aw +sc +fe +fe +QU +Aw +sc +fe +fe +fe +fe +hT +Zy +Sx +ED +ED +ED +OM +ED +ED +Hr +eM +Hr +Hr +Hr +Hq +Hr +Hr +Hr +As +Vp +gM +JV +uT +sq +uT +bq +cT +WU +dO +nh +Ez +OW +OW +OW +OW +Jt +rU +rU +no +In +rU +bF +bF +bF +bF +rU +bF +bF +rU +rU +rU +Qb +Qb +Qb +Qb +rU +rU +rU +rU +rU +YT +rU +Qb +Qb +xi +xi +xi +bF +rU +mt +ZD +NP +PM +PM +PM +PM +PM +GS +GS +GS +NP +Lw +bt +NP +NP +Lw +YX +IP +NP +PM +PM +PM +PM +PM +NP +NP +PM +NP +NP +PM +Ho +"} +(85,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +oF +Tk +FA +HO +HO +hf +vQ +tZ +hf +xe +ju +Eo +yP +hf +VP +UT +yg +Tz +ZT +yC +PX +PX +fe +Sa +KF +Sa +EJ +Aw +GX +KF +Aw +EJ +Aw +GX +Aw +KF +Ko +fe +hT +hT +YF +ED +ED +Qw +Qw +Vu +ED +Hr +ED +ED +ED +CA +Qw +Qw +ED +ez +kU +Qw +Pd +qg +uT +ER +vV +Ez +IC +nf +Ez +Ez +Ez +OW +OW +OW +OW +rU +ZD +rU +no +In +rU +rU +YT +bF +bF +bF +bF +bF +rU +vA +rU +Qb +Qb +Qb +rU +rU +rU +rU +rU +rU +rU +rU +Qb +xi +xi +xi +rU +rU +rU +rU +rU +NP +PM +PM +NP +PM +PM +GS +GS +GR +NP +NP +NP +NP +GR +NP +YX +IP +PM +PM +PM +PM +NP +NP +NP +GR +NP +NP +NP +PM +Ho +"} +(86,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +oF +Tk +XK +Tk +Tk +iK +Lk +Fo +uL +MY +ol +ol +ZF +wz +Lk +BI +ol +ol +Xn +yC +Of +PX +fe +Hy +JH +Sa +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +wL +fe +hT +Qw +wf +ED +Wn +ED +Qw +UC +ED +Hr +ED +ED +ED +fd +Qw +SJ +ED +Nt +ED +Qw +ac +qg +uT +ER +ac +Ez +VG +oc +xt +Wd +Ez +OW +OW +OW +OW +rU +rU +rU +no +gI +jQ +jQ +jQ +vN +bF +bF +rU +rU +rU +rU +rU +Qb +rU +bF +bF +YT +rU +rU +rU +rU +rU +xi +xi +xi +xi +xi +rU +YT +rU +rU +Jt +NP +NP +Lw +NP +GS +GS +GS +NP +NP +NP +jb +NP +NP +SC +NP +YX +IP +PM +PM +NP +NP +SC +NP +NP +NP +NP +NP +Xm +PM +Ho +"} +(87,1,1) = {" +yz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +oF +Tk +XK +XK +XK +BI +tu +Zx +DF +xh +BI +BI +OS +BI +tu +BI +BI +ol +Zk +hf +hf +HI +fe +Aw +JH +Aw +Aw +Aw +Aw +Aw +Aw +Aw +ux +Aw +Aw +Aw +LZ +ly +NF +lB +uy +ED +ED +ED +ED +ED +ED +Hr +ED +ED +ED +Wn +ED +oM +ED +DM +ED +hT +ac +qg +uT +ER +ac +Il +yv +aD +aD +Wm +Ez +OW +OW +rU +rU +rU +mQ +Jt +ta +OK +OK +OK +UP +In +rU +rU +rU +rU +rU +rU +rU +bF +bF +bF +bF +rU +LI +rU +rU +rU +xi +xi +xi +xi +xi +rU +rU +rU +rU +rU +rU +NP +NP +NP +NP +Lw +NP +NP +NP +Lw +PM +PM +PM +NP +NP +NP +YX +Oc +aQ +PM +PM +NP +NP +NP +jb +NP +NP +NP +NP +PM +Ho +"} +(88,1,1) = {" +yz +OW +OW +OW +OW +OW +oF +oF +oF +oF +oF +oF +Tk +XK +oF +oF +hf +dz +zm +hf +mn +zA +DF +Xe +hf +nx +ol +BI +ol +sB +hf +Lk +ol +ls +Ec +JH +JH +JH +JH +JH +JH +JH +JH +cA +JH +cA +JH +BH +wM +uf +uf +mi +Hr +Hr +Hr +Hr +Hr +Hr +Hr +ED +ED +ED +ED +ED +ED +ED +ED +ED +hT +ac +qg +uT +ER +st +Il +YY +oh +yy +Fs +Il +OW +OW +OW +rU +rU +rU +rU +rU +rU +rU +rU +no +In +rU +rU +mQ +rU +rU +mt +bF +bF +bF +bF +rU +rU +rU +rU +rU +xi +xi +xi +xi +LI +rU +rU +mt +rU +si +rU +rU +NP +NP +NP +NP +GR +NP +NP +NP +NP +PM +PM +PM +PM +NP +Lw +ex +cC +IP +PM +PM +NP +NP +GR +NP +bt +NP +NP +NP +PM +Ho +"} +(89,1,1) = {" +yz +OW +OW +OW +OW +OW +oF +Tk +Tk +Tk +Tk +Tk +Tk +XK +oF +oF +hf +rI +hf +hf +hf +BI +Jd +hf +hf +Wh +Wi +BI +BI +OS +Ne +tu +ol +ls +tz +JH +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +fe +hT +Qw +ED +ED +ED +cN +nm +ED +OM +ia +ED +ED +ED +ED +ED +OM +ED +ED +ED +hT +st +qg +uT +ER +st +Il +Il +yl +tX +tX +Il +OW +OW +OW +OW +OW +mt +LI +OW +OW +si +rU +no +In +rU +rU +Yk +rU +rU +rU +bF +bF +bF +rU +rU +rU +vA +rU +rU +rU +xi +xi +xi +rU +LI +rU +rU +rU +vA +bF +bF +PM +NP +NP +NP +NP +NP +jb +NP +NP +NP +PM +PM +PM +PM +GS +NP +YX +IP +NP +NP +NP +NP +NP +NP +NP +NP +NP +PM +PM +Ho +"} +(90,1,1) = {" +yz +OW +OW +OW +OW +OW +oF +Tk +XK +Mb +XK +XK +XK +XK +oF +oF +hf +JZ +Uw +Uw +Uw +UT +yg +HQ +hf +Ye +DF +zA +DF +DS +ol +tu +fD +Sn +Aw +JH +Aw +Aw +Aw +Ec +Ec +sU +Aw +Aw +Aw +Aw +Aw +rz +fe +hT +Qw +Qw +hT +hT +hT +tk +tk +tk +NT +NF +wA +ED +ED +ED +hT +hT +hT +hT +hT +st +qg +uT +ER +st +st +st +st +st +st +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +rU +rU +Uz +gI +vN +rU +rU +LI +rU +LI +rU +rU +si +rU +rU +rU +rU +rU +rU +rU +YT +xi +xi +xi +rU +rU +rU +rU +rU +bF +bF +PM +PM +PM +EB +NP +NP +NP +NP +NP +Lw +PM +GS +GS +GS +GS +GS +YX +IP +NP +NP +NP +NP +EB +NP +GR +NP +Lw +PM +PM +Ho +"} +(91,1,1) = {" +yz +OW +OW +OW +OW +OW +oF +Tk +XK +oF +oF +oF +oF +oF +oF +oF +hf +Tu +ol +ol +ol +BI +ol +QI +hf +hf +hf +rI +hf +hf +hf +tu +ol +ln +Lv +JH +Aw +Aw +eq +kK +fe +fe +Lv +Aw +Aw +Aw +Aw +Aw +fe +LT +LT +LT +ga +ga +ga +ga +ga +sd +OV +Xu +OV +xR +xR +Xu +sd +st +st +st +st +ac +qg +uT +ER +ac +st +st +st +st +st +OW +OW +OW +OW +OW +OW +OW +OW +OW +rU +mt +rU +ta +UP +In +xi +xi +rU +rU +rU +rU +rU +rU +rU +rU +LI +rU +rU +rU +rU +rU +rU +rU +rU +mt +rU +bF +rU +rU +rU +rU +PM +PM +PM +GS +GS +NP +NP +bt +NP +NP +GS +GS +PM +PM +GS +GS +YX +IP +GR +NP +NP +NP +NP +PM +PM +NP +PM +PM +PM +Ho +"} +(92,1,1) = {" +yz +nd +nd +nd +nd +RM +RM +KI +Rr +RM +LA +LA +LA +LA +LA +LA +hf +tu +sm +sm +sm +BI +ol +MM +Bw +DP +Eo +UT +Eo +CW +hf +tu +ol +hL +St +JH +Aw +Aw +Aw +jX +fe +fe +Aw +Aw +Aw +Aw +Aw +Aw +fe +LT +LT +LT +ga +aP +SW +HK +GG +sd +CI +SW +SW +WT +tA +Jn +sd +st +st +ac +ac +ac +qg +uT +ER +ac +ac +st +st +st +st +OW +OW +OW +OW +OW +OW +OW +OW +OW +rU +rU +rU +rU +no +In +xi +xi +xi +rU +vA +rU +rU +rU +mt +rU +rU +rU +rU +rU +Jt +Jt +rU +rU +rU +rU +rU +bF +bF +rU +mt +rU +PM +PM +PM +PM +GS +GS +GS +NP +GR +SC +NP +GS +PM +PM +PM +GS +YX +yZ +NP +NP +NP +NP +NP +PM +PM +PM +PM +PM +PM +Ho +"} +(93,1,1) = {" +yz +nK +nK +nK +nK +bK +RM +KI +TT +FV +LA +jv +jv +jv +SQ +Xw +hf +tu +sm +sm +sm +BI +ol +co +Bw +YH +is +BI +is +cv +hf +Tu +BI +mj +qw +JH +Aw +Aw +Aw +Aw +Aw +KF +Aw +Aw +Aw +Aw +Aw +Aw +ls +LT +LT +LT +ga +gC +BE +NK +at +sO +BE +BE +BE +nU +NK +GL +sd +st +st +st +ac +ac +qg +uT +ER +ac +ac +ac +ac +st +st +st +st +st +st +st +st +OW +OW +OW +OW +OW +OW +YT +no +In +rU +xi +xi +rU +rU +LI +rU +rU +rU +rU +bF +bF +rU +rU +rU +rU +rU +rU +rU +bF +bF +bF +bF +YT +rU +rU +GS +PM +PM +PM +GS +GS +PM +NP +NP +NP +NP +NP +NP +PM +PM +PM +YX +IP +NP +NP +GR +jb +NP +Lw +PM +PM +PM +PM +PM +Ho +"} +(94,1,1) = {" +yz +aq +hA +hA +hA +hA +gR +KI +TT +KI +FR +SQ +SQ +eT +SQ +Xw +hf +wS +ol +ol +ol +BI +ol +Us +hf +hE +OI +DF +OI +oK +hf +Lk +ol +ln +JH +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +Aw +fe +lF +gB +lr +ga +gi +Bt +BE +BE +bH +BE +BE +BE +BE +BE +Oh +sd +st +st +st +st +ac +qg +uT +ER +ac +st +st +ac +ac +ac +st +st +st +st +st +st +OW +OW +OW +OW +OW +OW +rU +no +gI +jQ +jQ +jQ +jQ +tG +rU +rU +Qb +Qb +bF +bF +bF +YT +rU +rU +si +rU +bF +bF +bF +bF +bF +rU +rU +LI +rU +GS +GS +GS +GS +GS +PM +PM +PM +NP +NP +NP +NP +NP +NP +PM +PM +YX +IP +NP +Xm +NP +NP +NP +PM +PM +PM +PM +PM +PM +Ho +"} +(95,1,1) = {" +yz +nK +nK +nK +nK +bK +RM +Kl +TT +TT +An +An +dE +LA +SQ +Xw +hf +mh +fr +fr +fr +zA +zA +bL +Ad +Ad +Ad +Ad +Ad +Ad +Ad +Ad +HN +ln +JH +JH +JH +JH +JH +JH +JH +JH +JH +JH +JH +JH +JH +JH +zy +Aa +Aa +dF +sd +rf +BE +LC +LC +LC +LC +BE +BE +BE +eF +Nz +sd +st +st +st +st +st +qg +uT +ER +ac +st +st +st +st +ac +st +st +st +st +st +st +OW +OW +OW +OW +OW +OW +rU +ta +OK +OK +OK +OK +UP +gI +vN +Qb +Qb +bF +bF +bF +bF +rU +rU +rU +rU +rU +rU +bF +bF +bF +rU +rU +rU +rU +rU +NP +GS +GS +PM +PM +PM +PM +PM +PM +Lw +NP +NP +NP +NP +NP +NP +YX +IP +NP +NP +NP +NP +PM +PM +PM +PM +PM +PM +PM +Ho +"} +(96,1,1) = {" +yz +aq +hA +hA +hA +hA +eE +xj +Pl +FV +LA +QH +An +LA +Vw +Xw +hf +hf +hf +hf +hf +Bw +Sc +hf +Ad +PS +ma +Vc +Qe +hM +Um +Ad +HN +ls +Lx +Aw +Aw +Aw +Aw +va +Aw +va +Aw +Aw +Aw +Aw +Aw +Aw +fe +UQ +Rt +dF +sd +Ya +aH +al +aH +Yn +dn +fw +Tw +BE +BE +be +sd +st +st +st +st +Pd +Ic +uT +ER +st +st +st +st +st +ac +ac +st +st +st +st +st +OW +OW +OW +OW +OW +OW +OW +OW +OW +rU +si +rU +ta +UP +In +Qb +Qb +Qb +Qb +bF +Qb +rU +rU +rU +rU +rU +rU +rU +rU +rU +rU +rU +mt +rU +Jt +NP +NP +GS +GS +GS +PM +PM +PM +PM +NP +NP +NP +NP +EB +NP +NP +Ja +TA +bt +NP +NP +NP +PM +PM +PM +NP +PM +PM +PM +Ho +"} +(97,1,1) = {" +yz +nK +nK +nK +nK +bK +RM +Ze +TT +iU +LA +Ap +An +Op +SQ +Xw +hf +yC +yC +hf +hP +yg +UT +YP +Ad +tr +wT +nE +EG +Qn +RS +Ad +HN +fe +Aw +sU +Aw +Aw +Aw +AO +sU +Aw +Aw +Gh +Nw +Aw +sU +Aw +fe +ze +TX +BA +sd +sd +sd +LC +Xz +sd +sd +sd +dw +aH +pz +hq +sd +st +st +st +st +st +qg +uT +ER +st +st +ac +ac +st +st +ac +ac +jY +st +Pd +st +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +rU +rU +rU +no +In +bF +bF +bF +Qb +Qb +Qb +rU +rU +mQ +rU +rU +Jt +rU +rU +ZD +rU +rU +rU +rU +rU +NP +NP +NP +NP +NP +NP +PM +PM +NP +NP +NP +NP +NP +NP +NP +jb +YX +IP +GR +NP +NP +Nh +NP +NP +EB +NP +NP +PM +PM +Ho +"} +(98,1,1) = {" +yz +hA +aq +hA +hA +hA +gR +KI +TT +KI +LA +QH +An +SQ +eT +zQ +hf +yC +yC +hf +Th +ol +BI +tC +Ad +ig +RS +Ad +Ad +YG +RS +Ad +Ad +Ad +Ad +Ad +Ad +ls +ls +ls +lM +lM +lM +GC +El +lM +lM +lM +fe +dF +Aa +Aa +VA +HB +RT +Sl +SW +dD +fa +hk +hk +hv +hv +hk +hk +st +st +st +Pd +Pd +ws +uT +ER +st +st +ac +gK +ac +ac +ac +ac +ac +ac +ac +st +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +rU +rU +rU +no +In +bF +bF +Qb +Qb +rU +rU +rU +rU +rU +xv +rU +rU +rU +si +rU +rU +rU +rU +Qb +Qb +GS +NP +NP +NP +NP +NP +EB +NP +NP +NP +Qd +NP +NP +bt +NP +NP +YX +IP +NP +NP +NP +NP +NP +NP +NP +GR +GR +PM +PM +Ho +"} +(99,1,1) = {" +yz +nK +nK +nK +nK +bK +RM +KI +TT +Zm +LA +LA +An +SQ +LA +LA +LA +iB +iB +iB +iB +ew +HS +iB +Ad +VS +iq +nY +Ad +OL +Hx +Ad +DX +Vc +Qe +dd +Ad +yF +yF +yF +yF +yF +nF +dN +LW +nF +LT +LT +LT +dF +Aa +LT +sd +tv +BE +LC +BE +BE +Zo +hk +Ro +MW +lL +Mf +hk +st +st +Pd +Vo +qD +av +uT +Ng +IS +IS +IS +IS +IS +IS +IS +IS +GW +ac +ac +st +OW +OW +OW +OW +OW +OW +OW +OW +OW +rU +mt +LI +rU +no +gI +vN +rU +rU +rU +rU +rU +rU +rU +rU +rU +rU +rU +rU +rU +rU +rU +mt +Qb +Qb +Qb +GS +NP +NP +NP +NP +NP +NP +NP +NP +kT +NP +NP +iM +Vt +Vt +Vt +kr +ht +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +cS +NP +PM +Ho +"} +(100,1,1) = {" +yz +aq +hA +hA +hA +hA +gR +KI +TT +FV +LA +Nk +An +SQ +Op +FT +LA +zi +fb +iB +ev +Iw +nw +ct +LY +YG +wT +Gc +Ad +pJ +wq +Ad +gr +QY +kG +TD +Ad +yF +yF +nF +nF +nF +nF +ZZ +Kd +nF +nF +nF +nF +Aa +Aa +LT +sd +tv +ug +uE +LC +LC +Vf +zw +Rh +Cm +BP +ww +hk +WR +fu +fu +Li +rY +uT +uT +uT +uT +uT +uT +uT +uT +uT +uT +uT +ER +ac +st +st +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +mt +ta +UP +gI +vN +rU +rU +rU +YT +rU +rU +mt +rU +mt +rU +vA +LI +rU +rU +rU +Qb +Qb +xi +jJ +jJ +NP +NP +SC +NP +NP +GR +NP +jb +iM +Vt +qP +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +Qz +Vt +Vt +Ho +"} +(101,1,1) = {" +yz +nK +nK +nK +nK +bK +RM +KI +TT +Fi +LA +vB +An +wE +SQ +FT +LA +sI +uQ +iB +oo +wJ +Ow +wn +LY +YG +RS +Ad +Ad +YG +RS +Ad +pW +QL +QL +TF +yR +FQ +gX +nF +lu +ah +bs +gx +Pw +tb +mN +da +nF +Aa +LT +LT +ga +tv +nC +Zg +BE +BE +Zo +hk +xO +Cm +Cm +xL +ea +fu +Yp +Yp +Vo +qD +HJ +HJ +HJ +HJ +HJ +HJ +HJ +HJ +db +KJ +uT +ER +ac +st +st +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +rU +rU +ta +UP +gI +jQ +jQ +jQ +jQ +jQ +vN +rU +rU +rU +rU +rU +rU +rU +LI +rU +rU +Qb +xi +jJ +jJ +NP +NP +NP +NP +NP +NP +NP +iM +qP +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +Ho +"} +(102,1,1) = {" +yz +aq +hA +hA +hA +hA +gR +KI +TT +KI +LA +Vw +SQ +LA +Rx +FT +LA +mD +mD +fk +mB +wY +Ow +EI +Ad +ik +cB +Vc +rO +VH +Ms +Ad +XM +QY +QL +MX +Ad +cg +FQ +nF +dy +dN +dN +dN +dN +dN +ib +Xy +nF +Aa +LT +LT +ga +tv +BE +BE +BE +BE +Zo +Zq +FS +CS +KB +xA +hk +Pd +OW +OW +Pd +Pd +me +ac +ac +ac +st +st +ac +ac +Pd +Ic +uT +ER +st +st +st +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +mt +rU +nc +rU +DJ +OK +OK +OK +Ql +OK +UP +In +rU +fZ +rU +xi +xi +xi +YT +rU +rU +rU +xi +xi +jJ +NP +Lw +NP +bt +NP +NP +NP +Zh +qP +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +Ho +"} +(103,1,1) = {" +yz +nK +nK +nK +nK +bK +RM +KI +TT +FV +LA +SQ +SQ +LA +Rx +Rw +LA +mD +mD +iB +iB +Jq +Ow +wn +Ad +Ad +WG +nE +zG +jd +ua +Ad +gD +QL +nX +zC +Ad +yF +FQ +nF +TB +ub +dN +dN +dN +dN +dN +dA +nF +Aa +LT +LT +ga +tv +BE +BE +BE +BE +tM +hk +hk +cx +hv +hk +hk +OW +OW +OW +OW +OW +OW +OW +ac +ac +st +st +st +st +Pd +qg +uT +ER +st +st +st +st +st +st +st +st +st +st +st +st +st +st +LI +rU +LI +rU +OW +OW +rU +rU +rU +rU +no +In +rU +rU +rU +xi +xi +xi +rU +rU +mt +rU +xi +xi +jJ +jJ +NP +NP +NP +NP +NP +iM +qP +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +Ho +"} +(104,1,1) = {" +yz +hA +aq +hA +hA +hA +gR +KI +TT +KI +FR +SQ +SQ +LA +Rx +FT +LA +JA +mD +kD +iB +Jq +Ow +Ey +ct +Ad +Ad +QL +BB +oe +Ad +Ad +nT +Qn +QL +MX +Ad +yF +FQ +nF +dy +dN +dN +dN +SS +dN +hx +dA +nF +Aa +Aa +LT +ga +pj +BE +BE +bg +BE +rx +hk +Bk +mH +qZ +HY +hk +OW +OW +OW +OW +OW +OW +OW +OW +OW +st +st +st +st +jY +qg +uT +ER +ac +st +st +st +st +st +st +st +ac +st +st +st +st +st +OW +OW +mt +OW +OW +OW +OW +OW +Dl +mt +no +In +rU +Jt +rU +xi +xi +xi +xi +xi +rU +xi +xi +xi +jJ +jJ +jJ +EB +NP +NP +iM +qP +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +vd +Ho +"} +(105,1,1) = {" +yz +nK +nK +nK +nK +bK +RM +KI +TT +KI +SQ +SQ +SQ +UV +SQ +FT +LA +bp +mD +kD +iB +oo +Ow +wJ +Ey +Iw +Lp +Iw +nw +Iw +ct +Ad +Ad +YG +QL +cV +Ad +FQ +FQ +nF +jj +dN +dN +dN +dN +dN +dN +tB +nF +LT +Aa +LT +ga +iL +aH +uH +Nl +Ph +lv +hk +kR +KB +KB +MG +bA +OW +cd +cd +cd +cd +cd +OW +OW +OW +st +ac +ac +st +ac +qg +uT +ER +ac +ac +ac +st +st +st +st +ac +ac +ac +st +st +st +st +OW +OW +OW +OW +OW +OW +OW +OW +IK +rU +no +In +LI +vA +rU +rU +xi +xi +xi +xi +xi +xi +xi +xi +NP +jJ +jJ +jJ +NP +Ge +qP +vd +vd +vd +vd +vd +vd +vd +vd +vd +Gu +tJ +lg +lg +lg +lg +Bv +vd +vd +vd +vd +vd +vd +Ho +"} +(106,1,1) = {" +yz +hA +aq +hA +hA +hA +gR +KI +TT +FV +LA +SQ +SQ +SQ +SQ +FT +LA +mD +mD +GI +iB +mB +BG +IL +Ow +Ow +Ow +Ow +Ow +Ow +SA +ct +oe +Hd +nE +Ru +Ad +FQ +yF +nF +Gt +dN +kP +dJ +dJ +VC +hx +tl +nF +LT +Aa +WX +WX +cd +cd +NJ +cd +iP +cd +hk +bA +bA +bA +bA +bA +cd +cd +Im +UM +on +cd +cd +OW +OW +st +st +ac +ac +ac +qg +uT +ER +st +st +ac +ac +st +st +st +st +ac +ac +ac +ac +st +st +OW +OW +OW +OW +OW +OW +OW +OW +IK +si +no +In +rU +rU +rU +xi +xi +xi +xi +xi +xi +xi +mt +mt +NP +NP +jJ +jJ +iM +qP +vd +vd +vd +vd +vd +vd +vd +kJ +lg +lg +ip +kT +GR +NP +SC +NP +Wf +lg +tJ +lg +lg +lg +lg +Ho +"} +(107,1,1) = {" +yz +OW +OW +yI +yI +Os +Os +gw +LO +yI +yI +yI +yI +LA +LA +LA +LA +UU +LG +LG +LG +LG +LG +mB +ai +ai +ai +ai +FH +wY +Ow +CZ +Ad +NG +Ad +Ad +Ad +ZQ +ZQ +to +vn +dN +Xy +nF +nF +qE +dN +Dq +nF +Aa +Aa +cd +cd +cd +fR +za +Ml +Pz +zJ +cd +cd +cd +WX +cd +cd +cd +XE +bJ +Ml +Pz +qV +cd +cd +cd +OW +OW +OW +st +ac +qg +uT +ER +st +st +st +st +st +st +hU +ve +hU +ac +iy +ac +gK +st +OW +OW +OW +OW +st +st +ID +GN +rd +mt +no +In +rU +eX +ZD +xi +xi +xi +xi +mt +mt +rU +rU +rU +NP +NP +NP +iM +qP +vd +vd +vd +vd +vd +vd +vd +Ps +UL +jJ +NP +NP +NP +NP +NP +NP +Lw +NP +NP +NP +NP +NP +NP +PM +Ho +"} +(108,1,1) = {" +yz +OW +OW +yI +qp +zk +zk +Lb +Lb +zk +zk +Uk +yI +ej +LG +LG +LG +LG +LG +Jx +jZ +OD +LG +LG +XH +LG +LG +LG +LG +Jq +Ow +Ey +Iw +Iw +ct +iB +yF +ZQ +rh +nF +iW +ub +Pw +fA +fA +gx +Lu +Xy +nF +Aa +dF +cd +Vm +UN +za +Ml +Ml +Ml +Pz +Kx +lf +cd +WX +cd +fR +UN +za +Ml +Ml +Ml +Pz +cs +bi +cd +OW +OW +OW +st +st +qg +uT +ER +ac +st +st +st +st +st +ac +ms +qD +qD +qD +ac +ac +st +st +st +st +st +xZ +II +JC +IK +rU +rU +no +In +rU +rU +rU +xi +xi +xi +xi +xi +ov +rU +mt +rU +iM +Vt +Vt +qP +vd +vd +vd +vd +vd +vd +vd +kJ +UL +jJ +jJ +jJ +NP +NP +NP +Xm +NP +NP +NP +NP +NP +NP +PM +PM +PM +Ho +"} +(109,1,1) = {" +yz +OW +OW +yI +pv +Yh +vw +Lb +zk +pv +Yh +vw +yI +ej +LG +cU +DG +WA +LG +Nc +mJ +Mv +LG +oT +ok +RX +QO +KO +LG +Jq +Ow +wJ +wJ +wJ +wn +rC +yF +ZQ +FQ +nF +Eb +ML +dJ +jV +jV +dJ +qA +Qq +nF +Aa +xc +cd +ZI +Ml +Ml +Ml +Ml +Ml +Ml +rt +qe +cd +cd +cd +UX +Ml +Ml +Ml +Ml +Ml +Ml +Ml +gA +cd +cd +OW +OW +st +st +qg +uT +ER +ac +st +st +st +st +st +SG +qD +qD +qD +qD +qD +ac +ac +hj +lO +II +II +II +II +JC +jI +dv +MI +Yv +eN +dv +dv +dv +dv +dv +xi +xi +dv +dv +dv +dv +dv +qP +vd +vd +vd +vd +vd +vd +vd +vd +vd +kJ +UL +NP +jJ +jJ +jJ +NP +NP +NP +NP +NP +NP +NP +NP +NP +EB +PM +PM +PM +Ho +"} +(110,1,1) = {" +yz +OW +OW +yI +pv +Yh +vw +Lb +zk +pv +Bn +vw +yI +ej +LG +cU +uB +WA +LG +UJ +rM +Lf +LG +tq +mJ +mJ +mJ +gz +LG +Jq +Ow +wJ +jC +ai +hC +iB +FQ +ZQ +yF +nF +nF +nF +nF +dN +LW +nF +nF +nF +nF +Aa +xc +fR +za +fC +Ml +ij +nb +FU +Ml +Ml +Pz +zJ +cd +fR +za +Ml +Ml +Mq +ul +FU +Ml +Ml +Pz +zJ +cd +OW +OW +Pd +Pd +qg +uT +ER +ac +ac +ac +st +st +qD +qD +qD +qD +qD +qD +ac +ac +ac +DL +II +II +II +II +II +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +vd +vd +vd +vd +vd +vd +vd +vd +vd +kJ +UL +NP +jJ +jJ +jJ +jJ +EB +NP +NP +NP +NP +NP +NP +NP +NP +NP +PM +PM +PM +Ho +"} +(111,1,1) = {" +yz +OW +OW +yI +pv +BC +vw +Lb +zk +pv +Yh +vw +yI +ej +LG +cU +uB +WA +LG +LG +DH +LG +LG +Zu +rM +rM +rM +eJ +LG +UD +Ow +wJ +CZ +iB +iB +iB +ZQ +ZQ +ZQ +ZQ +yF +yF +nF +dN +TK +nF +LT +LT +Aa +Aa +xc +Yb +Ml +Ml +ij +fj +cd +hZ +FU +Ml +Ml +gA +GF +UX +Ml +Ml +ij +sP +cd +hZ +FU +Ml +Ml +gA +cd +OW +OW +Pd +qD +qg +uT +Ng +IS +IS +IS +IS +IS +IS +qD +qD +qD +qD +qD +qD +qD +qD +wI +dZ +SH +II +dZ +dZ +vi +Yg +Yg +Wy +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +vd +vd +vd +vd +vd +vd +vd +vd +kJ +UL +jJ +jJ +jJ +jJ +jJ +NP +NP +NP +Lw +NP +bt +jb +NP +NP +Lw +NP +Lw +PM +PM +Ho +"} +(112,1,1) = {" +yz +OW +OW +yI +zk +zk +zk +Lb +zk +zk +zk +zk +yI +ej +LG +cU +uB +uB +IN +mO +ok +uC +LG +LG +LG +mJ +gf +LG +LG +AA +Ow +wJ +Ey +Ak +rC +yF +ZQ +yF +yF +ZQ +ZQ +ZQ +Uy +ox +ox +Uy +Aa +Aa +Aa +LT +xc +ft +Ml +Ml +Qf +cd +cd +cd +vG +Ml +Ml +gA +uY +UX +Ml +Ml +zD +cd +cd +cd +vG +Ml +Ml +gA +cd +OW +OW +st +qD +qg +uT +qD +qD +qD +qD +qD +qD +qD +qD +qD +qD +qD +qD +qD +qD +qD +CJ +hK +II +II +II +II +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +JC +vd +vd +vd +vd +vd +vd +vd +kJ +UL +jJ +jJ +jJ +jJ +Lw +NP +NP +NP +Lw +Lw +NP +NP +NP +NP +NP +NP +NP +NP +PM +PM +Ho +"} +(113,1,1) = {" +yz +OW +OW +yI +pv +Yh +vw +Lb +zk +pv +Yh +vw +yI +ej +LG +cU +yN +uw +LG +nD +mJ +Oj +ok +ok +Py +ok +ok +tt +LG +hg +Ow +wJ +wJ +jh +rC +yF +ZQ +ZQ +yF +yF +ks +Jp +nF +sx +dN +nF +dF +HA +Aa +DO +Cd +ft +Ml +Ml +Pz +Qc +cd +Hj +Hm +Ml +Ml +gA +GF +UX +Ml +Ml +Pz +Qx +cd +fR +za +Ml +Ml +wi +cd +OW +OW +ac +qD +qg +uT +En +HJ +HJ +HJ +HJ +HJ +HJ +qD +qD +qD +qD +qD +qD +qD +qD +qD +vS +SH +dZ +dZ +dZ +vi +sg +by +by +aM +by +by +by +aM +by +by +by +kk +aM +by +by +by +by +Ga +zq +zq +zq +zq +dR +kM +jJ +jJ +jJ +jJ +Lw +NP +NP +NP +GR +NP +NP +NP +NP +NP +NP +Lw +PM +PM +NP +Lw +NP +PM +Ho +"} +(114,1,1) = {" +yz +OW +OW +yI +pv +Bn +vw +Lb +zk +pv +Bn +vw +yI +ej +LG +LG +LG +LG +LG +Si +mJ +mJ +mJ +mJ +mJ +mJ +mJ +wp +LG +qs +Ow +wJ +jC +ho +iB +yF +FQ +ZQ +yF +BM +BM +BM +BM +gH +LE +BM +BM +BM +zT +zT +BM +hZ +FU +Ml +Ml +Pz +iQ +za +Ml +Ml +ij +fj +cd +hZ +mC +Ml +Ml +Pz +iQ +za +oG +Ml +ij +vc +cd +OW +OW +st +Pd +SG +uT +qD +ac +st +ac +ac +st +qD +qD +qD +qD +qD +qD +qD +ac +ac +ac +DL +II +II +II +II +JC +jI +dv +Dl +LI +rU +rU +LI +rU +Jt +rU +mt +Rn +rU +mt +rU +si +rU +GK +GK +GK +GK +GK +LP +LP +LP +LP +LP +LP +GK +GK +GK +Hc +GK +GK +GK +GK +GK +GK +GK +GK +yK +yK +GK +GK +GK +yK +wZ +"} +(115,1,1) = {" +yz +OW +OW +yI +pv +Yh +vw +Lb +zk +pv +Bn +vw +yI +ef +ef +ef +ej +LG +pX +od +Nn +vo +nj +vo +xE +mJ +mJ +La +LG +Jq +Ow +wJ +CZ +iB +iB +iB +FQ +ZQ +yF +BM +Rs +jn +Pi +gH +gH +FL +BM +ay +ay +ay +BM +cd +mb +Ml +Ml +Ml +Ml +Ml +Ml +Ml +OO +cd +cd +cd +Qr +tL +Ml +Ml +Ml +Xt +Ml +Ml +Dk +cd +cd +OW +OW +st +st +Zi +Tc +Ue +Zi +ut +st +st +st +st +Xc +qD +qD +qD +qD +qD +qD +ac +ac +mV +De +Gp +Vs +II +JC +JC +JC +jI +er +rU +si +rU +rU +rU +rU +rU +wj +AC +rs +PV +PV +rs +Wq +ce +ce +ce +ce +sZ +LP +LP +LP +LP +LP +GK +GK +GK +GK +GK +GK +GK +GK +GK +wR +pE +yK +yK +yK +GK +GK +yK +yK +wZ +"} +(116,1,1) = {" +yz +OW +OW +yI +fs +Lb +Lb +Lb +zk +zk +zk +zk +fH +Ac +ef +ef +ef +LG +yL +mJ +kz +LG +LG +LG +lV +mJ +mJ +HL +rK +Jq +Ow +wJ +Ey +Iw +Va +iB +le +ZQ +yF +BM +gH +gU +gH +gH +gH +eC +No +pe +pe +pe +zT +cd +JO +mf +FU +Ml +Ml +Ml +ij +mf +fj +cd +WX +cd +hd +Ag +FU +Ml +Ml +Ml +ij +mf +Su +cd +OW +OW +OW +Zi +Zi +Zi +Fx +sD +Zi +Zi +st +st +st +st +EL +qD +qD +qD +Pg +qD +qD +st +ac +ac +st +st +st +st +st +st +ID +JC +jI +Dl +rU +vA +rU +BF +rU +rU +rU +mt +rU +BD +BD +rU +GK +GK +GK +GK +GK +GK +zS +Ex +LP +LP +LP +LP +wR +Sf +GK +Gg +GK +GK +GK +GK +yK +yK +yK +yK +GK +GK +Hc +yK +yK +wZ +"} +(117,1,1) = {" +yz +OW +yI +yI +qj +Lb +zk +zk +Uk +gJ +CF +gJ +gJ +gJ +gJ +gJ +yH +LG +Si +mJ +Oj +kq +sh +kq +od +mJ +mJ +HL +sf +Jq +Ow +wJ +wJ +wJ +wn +iB +iB +ES +iB +BM +lT +gH +gH +gH +gH +nM +BM +ay +ay +li +zT +cd +cd +cd +hZ +FU +Ml +ij +fj +cd +cd +cd +WX +cd +cd +cd +hZ +FU +Ml +ij +fj +cd +cd +cd +OW +OW +OW +Zi +Mm +nN +vE +ZM +bY +Zi +st +st +st +st +gp +oB +qD +qD +Lg +Lg +aU +st +ac +st +st +st +st +st +st +st +st +OW +JC +jI +Dl +mt +rU +rU +rU +YT +wU +wU +wU +tE +tE +wU +wU +wU +GK +sX +GK +GK +GK +Ex +Ex +Ex +LP +LP +GK +GK +GK +GK +Hc +GK +GK +yK +yK +yK +yK +GK +GK +GK +yK +yK +yK +wZ +"} +(118,1,1) = {" +yz +OW +yI +fz +zk +Lb +zk +zk +WE +KE +Dd +qo +gJ +gh +ch +gJ +Ab +Sv +Te +eG +eG +cJ +eG +cJ +mJ +mJ +mJ +HL +rK +Jq +Ow +Ow +Ow +Ow +Ef +XV +LR +nw +ct +pT +gH +gH +gH +gH +gH +nM +BM +ay +ay +pe +zT +WX +WX +cd +cd +hZ +mf +fj +cd +cd +WX +WX +WX +WX +WX +cd +cd +hZ +mf +fj +cd +cd +Dz +Dz +Dz +Dz +Dz +Zi +UY +bv +BS +zc +io +ut +st +st +st +st +st +st +qD +st +st +ac +st +st +st +st +st +st +st +st +st +st +st +OW +JC +JC +IK +rU +rU +rU +rU +rU +wU +Dt +pn +PG +PG +Eg +Dt +wU +GK +GK +GK +GK +GK +GK +Ex +Ex +Ex +Ex +GK +GK +GK +GK +GK +GK +yK +yK +yK +yK +GK +GK +GK +GK +yK +yK +yK +wZ +"} +(119,1,1) = {" +yz +OW +yI +zk +zk +Lb +zk +zk +ng +Dd +Dd +xH +gJ +Mg +Me +QZ +Ab +LG +Jl +mJ +mJ +mJ +mJ +eG +mJ +mJ +mJ +Ma +LG +Jq +Ow +wJ +wJ +wJ +wn +wJ +mB +ai +kL +gH +gH +gH +gH +xT +xT +tm +BM +pe +pe +pe +zT +WX +WX +WX +cd +ow +cd +ow +cd +WX +WX +WX +WX +WX +WX +WX +cd +ow +cd +ow +cd +WX +Dz +Dz +Dz +Dz +Dz +Zi +JM +BS +BS +zc +BL +Zi +st +st +st +st +st +st +mI +st +st +st +st +st +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +IK +rU +rU +rU +rU +Qb +wU +Dt +Eg +PG +PG +Eg +Ev +wU +GK +GK +Gg +GK +GK +GK +GK +Ex +Ex +GK +GK +GK +Se +GK +yK +yK +yK +yK +yK +GK +GK +GK +GK +sX +GK +yK +yK +wZ +"} +(120,1,1) = {" +yz +OW +yI +zk +zk +Lb +zk +zk +aW +Dd +Dd +cY +lc +rc +wb +gJ +ef +LG +iC +xd +fn +kh +rM +yG +rM +jA +Ff +Ej +LG +mB +BG +BG +FH +ai +Wc +iB +iB +CP +iB +BM +BM +BU +gH +xT +MT +BM +BM +nS +pe +eQ +zT +WX +WX +cd +cd +fR +wy +zJ +cd +cd +WX +WX +WX +WX +WX +cd +cd +fR +UN +zJ +cd +cd +Dz +Dz +Dz +Dz +Dz +ut +GP +zc +zc +zc +BL +he +Yp +st +MD +Av +Er +st +Er +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +GK +GK +GK +GK +Ex +wU +Eg +Eg +PG +PG +Eg +Eg +Eg +GK +Hc +GK +GK +Hc +Hc +GK +GK +Hc +GK +ck +GK +GK +GK +GK +yK +yK +GK +GK +GK +GK +wR +GK +GK +GK +yK +yK +wZ +"} +(121,1,1) = {" +yz +OW +yI +zk +zk +Lb +Lb +Lb +Xd +Kk +Kk +Kk +wr +Me +Ny +gJ +ef +LG +LG +LG +LG +LG +LG +Pk +LG +LG +LG +LG +LG +Zj +ew +RB +iB +iB +iB +iB +zo +pu +sl +BM +Vj +gH +gH +xT +gH +Kp +tg +pe +pe +pe +zT +cd +cd +cd +oa +za +Ml +Pz +zJ +cd +cd +cd +WX +cd +cd +cd +fR +za +Ml +Pz +zJ +cd +cd +cd +Dz +Dz +Dz +ut +ld +gL +Gf +jf +WJ +Zi +mY +Er +Er +Er +Yp +Er +Yp +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +GK +GK +Hc +GK +Ex +Ex +wU +Eg +Eg +tE +tE +Eg +Eg +Eg +GK +GK +GK +GK +GK +GK +GK +GK +GK +GK +GK +GK +GK +GK +GK +GK +wR +GK +GK +GK +GK +GK +GK +GK +GK +yK +yK +wZ +"} +(122,1,1) = {" +yz +OW +yI +zk +zk +Lb +Kh +zk +Sm +Dd +Dd +Dd +gJ +rA +BK +gJ +ef +ef +ef +ej +ej +ej +It +Ab +Ab +bd +of +Ab +HX +Nj +nw +MC +iB +sl +sl +sl +pu +pu +sl +BM +ag +gH +gH +xT +FN +ag +tg +pe +ay +Qk +zT +cd +jL +UN +za +Ml +Ml +Ml +Pz +UN +tn +cd +WX +cd +CO +UN +za +Ml +Ml +Ml +Pz +UN +zJ +cd +QR +oR +Dz +Zi +Zi +ut +Zi +SV +Zi +Zi +st +st +Er +Er +Yp +st +st +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Hc +ck +GK +GK +GK +wR +Ex +Ex +LP +LP +Jf +MV +PG +Eg +Eg +wU +wR +GK +GK +GK +yK +sX +GK +GK +GK +GK +yK +Hc +GK +GK +GK +GK +GK +GK +GK +GK +GK +GK +Gg +GK +GK +Hc +yK +wZ +"} +(123,1,1) = {" +yz +OW +yI +lH +Os +jl +yI +yI +gJ +LX +XW +vX +gJ +gJ +gJ +gJ +ej +ef +ef +ef +ef +Ab +Ab +Ab +EY +EY +EY +EY +EY +Jq +wJ +Ef +iB +xw +fp +fp +fp +fp +qm +zT +Vj +gH +gH +xT +gH +gH +BM +pe +ay +ay +BM +cd +Ox +Ml +Ml +Ml +Ml +Ml +Ml +Ml +fX +cd +cd +cd +UX +Ml +Ml +Ml +Ml +Ml +Ml +Ml +gA +cd +cd +QR +oR +Dz +Dz +Dz +Dz +mU +km +Dz +st +st +Yp +Er +Er +st +st +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +GK +GK +GK +LP +LP +LP +LP +LP +LP +uU +Zb +Eg +Eg +wU +GK +GK +Hc +GK +yK +yK +GK +Sf +yK +yK +yK +wR +GK +ck +GK +GK +GK +GK +nP +GK +GK +GK +GK +GK +Hc +GK +yK +wZ +"} +(124,1,1) = {" +yz +OW +rG +CD +CD +XG +rG +OW +vO +vT +vT +vT +vT +vT +vT +vT +ej +ej +ej +ej +ej +Ab +Ac +Ab +rv +bS +XX +md +PQ +Jq +wJ +Ef +HX +fp +fp +pu +pu +fp +pu +zT +LM +LM +gH +xT +gH +FC +BM +pe +pe +pe +BM +fR +za +Ml +Ml +ij +yo +pm +lt +Ml +Pz +zJ +cd +fR +za +Ml +Ml +ij +vf +Od +Ml +Ml +Pz +cq +cd +Dz +oR +oR +lD +Dz +Dz +Dz +mU +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +OW +OW +GK +GK +Ex +LP +LP +LP +LP +LP +LP +LP +KK +Eg +Eg +wU +pE +GK +GK +GK +yK +yK +yK +yK +yK +yK +yK +yK +GK +GK +GK +GK +GK +GK +GK +yK +yK +Hc +Ex +Ex +Ex +GK +yK +wZ +"} +(125,1,1) = {" +yz +OW +rG +CD +CD +XG +rG +OW +OW +vT +Oq +Oq +am +eu +yV +vT +vT +vT +vT +vT +vT +Sy +vT +ej +EY +qy +Wj +mp +PQ +Jq +wJ +wn +iB +sl +sl +sl +sl +fp +sl +zT +zT +zT +zT +wO +BM +BM +BM +BM +zR +BM +BM +UX +Ml +Ml +ij +xm +cd +oH +FU +Ml +Ml +gA +GF +UX +Ml +Ml +SL +hc +cd +zZ +rn +Ml +Ml +RH +cd +Dz +Dz +oR +oR +Dz +Dz +Dz +oR +oR +lW +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +ck +GK +Hc +GK +Ex +Ex +LP +LP +xW +LP +LP +LP +LP +wU +Eg +wU +GK +GK +Sf +Hc +GK +yK +yK +yK +yK +yK +yK +yK +yK +GK +GK +GK +Se +GK +GK +yK +yK +yK +yK +Ex +Ex +Ex +yK +wZ +"} +(126,1,1) = {" +yz +OW +rG +qq +Pf +Ds +rG +OW +OW +vT +Ei +nV +nV +WK +WK +vT +ky +XB +XB +US +WK +LN +vT +Oo +EY +NV +Wj +mp +PQ +mB +ai +Wc +iB +sl +sl +sl +sl +fp +fp +fp +fp +yT +fp +fp +RI +Ah +ec +bW +oI +OJ +cd +UX +Ml +Ml +AW +cd +cd +cd +AY +Ml +Ml +gA +uY +UX +Ml +Ml +Qf +cd +cd +cd +vG +Ml +Ml +gA +cd +Dz +Dz +oR +oR +Dz +Dz +Dz +Dz +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Hc +ck +Hc +Se +Ex +Ex +Ex +GK +GK +Sf +GK +LP +GK +wN +QD +ad +GK +GK +Se +GK +GK +yK +yK +yK +GK +Hc +yK +yK +yK +Hc +Hc +ck +GK +GK +GK +Hc +yK +yK +yK +yK +Ex +Ex +yK +wZ +"} +(127,1,1) = {" +yz +OW +rG +Jw +OB +oP +rG +OW +OW +vT +am +WK +WK +WK +WK +Eq +nV +nV +nV +WK +WK +LN +vT +Oo +EY +iR +Wj +lQ +EY +Zj +ew +Zj +iB +zN +zN +zN +zN +zN +zN +RI +RI +RI +tO +RI +RI +GA +Uo +Ke +gG +sk +cd +UX +Ml +Ml +Pz +zJ +cd +Yq +za +Ml +Ml +gA +GF +UX +Ml +Ml +Pz +jM +cd +cW +QK +Ml +Ml +bQ +cd +Dz +Dz +oR +oR +oR +Dz +Dz +Dz +oR +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +oR +oR +Dz +Dz +WW +oR +oR +oR +oR +Dz +Dz +Dz +Dz +RU +GK +GK +Ex +GK +GK +GK +GK +GK +Pt +kX +qF +Ch +GD +GK +Hc +GK +Hc +GK +yK +yK +wR +GK +GK +GK +yK +GK +GK +GK +GK +Gg +GK +Sf +GK +yK +yK +yK +yK +GK +GK +yK +wZ +"} +(128,1,1) = {" +yz +rG +rG +rJ +CD +Ie +rG +rG +rG +vT +vT +vT +vT +uo +vT +vT +yV +yV +yV +WK +WK +LN +rl +EA +lP +ys +KG +nQ +EY +ev +Iw +ct +zN +fv +gW +tH +xs +xs +zN +RI +Az +sr +Mo +zj +RI +GA +Uo +Ke +gG +gs +cd +hZ +FU +Ml +Ml +Pz +iQ +za +Ml +Ml +ij +fj +cd +hZ +FU +Ml +Ml +Pz +BO +QK +Ml +Ml +ij +QP +cd +Dz +Dz +Dz +oR +oR +Dz +Dz +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +oR +oR +oR +oR +Dz +Dz +Dz +oR +oR +Dz +bC +oR +FZ +Gg +GK +GK +GK +yK +yK +wR +GK +sv +Ch +sy +GD +GK +LP +LP +GK +Gg +GK +GK +GK +GK +Hc +Hc +GK +GK +Hc +GK +GK +GK +GK +GK +GK +GK +GK +GK +yK +yK +wR +GK +yK +wZ +"} +(129,1,1) = {" +yz +rG +Jw +Eu +CD +pM +ki +uV +tK +vT +fF +WK +vT +Vk +hB +Eq +nV +nV +nV +WK +WK +wh +vT +Oo +EY +qy +Cj +mp +PQ +Jq +wJ +wn +zN +gn +gW +gW +tH +LD +zN +FJ +wK +gG +gG +Vr +RI +oA +gG +VR +gG +AS +cd +cd +QM +Ml +Ml +Ml +Ml +Ml +Ml +Ml +xr +cd +cd +cd +NQ +Ml +Ml +Ml +Ml +Ml +Ml +Ml +gA +cd +cd +Dz +Dz +oR +oR +oR +oR +Dz +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +LB +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +oR +oR +oR +Dz +vM +Hc +GK +xV +yK +yK +yK +yK +Pt +qF +ad +GK +GK +LP +LP +LP +GK +GK +GK +Ex +Ex +GK +GK +GK +GK +GK +GK +Ex +Ex +yK +yK +GK +Hc +GK +Hc +GK +GK +GK +Hc +GK +yK +wZ +"} +(130,1,1) = {" +yz +rG +rJ +CD +CD +aG +WV +WV +il +vT +HV +nV +Eq +WK +WK +vT +ky +XB +XB +WK +WK +LN +vT +Oo +EY +Hw +Bd +HE +PQ +Jq +wJ +wn +zN +FK +gW +FK +gW +xs +zN +Pm +gG +mZ +Xg +hD +gG +yX +iO +uZ +in +gs +cd +cd +lb +mf +FU +Ml +Ml +Ml +ij +mf +TP +cd +WX +cd +ZC +RA +FU +Ml +Ml +Ml +ij +mf +OT +cd +Dz +Dz +Dz +Dz +Dz +oR +oR +RN +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +wo +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +GK +Hc +GK +yK +yK +yK +wN +Ch +GD +GK +LP +LP +LP +Hc +GK +xV +Ex +Ex +Ex +Ex +GK +GK +sX +GK +Ex +Ex +yK +yK +yK +pE +GK +GK +Hc +xV +GK +GK +GK +GK +yK +wZ +"} +(131,1,1) = {" +yz +rG +Al +CD +CD +aG +WV +WV +iz +vT +Ts +WK +qr +CN +WK +vT +vT +vT +vT +WK +WK +LN +WK +vT +EY +PQ +EY +PQ +EY +oo +wJ +wn +zN +xs +gW +xs +gW +Vb +Du +Vq +gG +DU +Yj +Vr +RI +RI +RI +RI +yX +Ay +cd +cd +cd +cd +hZ +FU +Ml +ij +fj +cd +cd +cd +WX +cd +cd +cd +hZ +FU +Ml +ij +fj +cd +cd +cd +Dz +Dz +Dz +Dz +Dz +Dz +LB +oR +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +RU +Pt +pA +pA +pA +pA +qF +ad +LP +LP +LP +GK +GK +GK +Sf +GK +Ex +Ex +Ex +Ex +GK +GK +GK +GK +yK +Ex +yK +yK +Ex +GK +GK +GK +GK +GK +Hc +yK +yK +yK +yK +wZ +"} +(132,1,1) = {" +yz +ic +tx +EQ +Tn +aG +WV +WV +iz +vT +vT +vT +vT +Ua +WK +vT +TR +CE +vT +CN +WK +LN +LN +zl +LR +MC +Da +Nj +SI +ie +Ow +Ef +zN +FK +gW +FK +gW +gW +zN +Pm +Uc +QV +vD +Hn +SF +gS +Wx +SF +sa +RI +cd +WX +WX +cd +cd +hZ +mf +fj +cd +cd +WX +WX +WX +WX +WX +cd +cd +hZ +mf +fj +cd +cd +Dz +Dz +Dz +Dz +Dz +Dz +Dz +oR +oR +oR +oR +oR +QR +Dz +Dz +Dz +Dz +oR +Dz +oR +oR +oR +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +oR +oR +nr +oR +sW +nr +we +gm +sy +sy +sy +sy +sy +Dg +GK +LP +LP +LP +Hc +GK +GK +GK +GK +Ex +Ex +Hc +GK +GK +GK +Hc +yK +Ex +Ex +Ex +Ex +GK +GK +yK +yK +GK +GK +yK +yK +yK +yK +wZ +"} +(133,1,1) = {" +yz +rG +Bq +Fa +We +XG +XG +XG +Ie +cb +LN +LN +LN +LN +LN +zz +LN +LN +so +LN +LN +LN +WK +vT +Jq +wn +iB +Jq +wJ +wJ +wJ +Ef +zN +xs +gW +xs +gW +ya +zN +ud +in +Uo +gG +ue +wW +gG +gG +wW +AS +RI +WX +WX +WX +WX +cd +ow +cd +ow +cd +WX +WX +WX +WX +WX +WX +WX +cd +ow +cd +ow +cd +Dz +Dz +Dz +Dz +Dz +oR +oR +Dz +oR +oR +Dz +Dz +oR +oR +oR +Dz +Dz +oR +oR +oR +oR +oR +Dz +Dz +oR +oR +oR +oR +Dz +Dz +EV +oR +oR +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +GK +GK +dU +Sf +Ex +Ex +LP +LP +GK +GK +GK +wR +GK +GK +GK +GK +GK +GK +yK +yK +yK +Ex +Ex +GK +Hc +GK +yK +yK +yK +yK +yK +yK +yK +yK +wZ +"} +(134,1,1) = {" +yz +ic +Ck +GM +Tn +aG +WV +WV +iz +WK +WK +WK +WK +WK +WK +WK +WK +WK +oL +WK +WK +WK +WK +Xv +mB +Wc +VD +mB +FH +ai +ai +ur +zN +ou +gW +FK +Ll +cj +zN +RI +LV +Ur +in +ue +gF +XT +ob +gF +gs +RI +cd +WX +WX +cd +cd +fR +UN +zJ +cd +cd +WX +WX +WX +WX +WX +cd +cd +fR +UN +zJ +cd +cd +Dz +Dz +Dz +Dz +Dz +oR +oR +oR +oR +Dz +Dz +Dz +Dz +oR +oR +oR +oR +oR +oR +oR +Dz +Dz +oR +oR +Dz +Dz +WW +oR +oR +oR +oR +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +LB +dm +xq +GK +GK +GK +GK +Ex +Ex +Ex +GK +GK +GK +GK +Hc +GK +GK +sX +Hc +GK +yK +yK +yK +yK +Ex +GK +GK +GK +GK +GK +yK +yK +yK +yK +GK +yK +wZ +"} +(135,1,1) = {" +yz +rG +Al +CD +CD +aG +WV +WV +il +vT +WK +WK +WK +WK +WK +Np +JP +dB +BY +wg +Fl +WK +aY +vT +iB +iB +iB +zN +zN +ZJ +zN +MF +zN +xs +gW +xs +Ll +gW +zN +RI +RI +RI +Ii +vk +gG +gG +gG +gG +Cl +Nf +cd +cd +cd +cd +gZ +za +Ml +Pz +zJ +cd +cd +cd +WX +cd +cd +cd +Xp +za +Ml +Pz +zJ +cd +cd +cd +Dz +Dz +Dz +Dz +Dz +bC +Dz +Dz +Dz +Dz +Dz +Dz +Dz +LB +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +IE +oR +oR +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +oR +oR +oR +oR +FZ +GK +GK +sX +Pt +Nr +Hc +GK +GK +GK +GK +pE +Hc +GK +GK +GK +GK +Sf +GK +yK +yK +Ex +Ex +GK +GK +GK +Hc +GK +GK +yK +yK +Hc +GK +yK +wZ +"} +(136,1,1) = {" +yz +rG +CK +XG +XG +aG +WV +WV +iz +vT +WK +WK +WK +WK +NI +vT +JP +zF +BY +zF +Fl +WK +WK +vT +OW +zN +Dv +LH +pD +gW +LH +Ll +zN +zN +zN +zN +MF +zN +ci +zg +KV +RI +RI +aC +gG +Be +Be +gG +gG +qz +cd +cd +jB +UN +vv +Ml +Ml +Ml +Pz +RZ +MP +cd +WX +cd +Xp +Co +za +Ml +yO +Vi +Pz +UN +Vg +cd +Dz +Dz +Dz +Dz +Dz +oR +oR +Dz +oR +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +oR +oR +RN +oR +oR +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +oR +oR +oR +oR +Dz +OW +OW +OW +OW +OW +ad +GK +GK +GK +Gg +GK +Se +GK +GK +Hc +GK +GK +GK +GK +GK +GK +GK +GK +GK +wR +GK +GK +GK +GK +sX +GK +GK +Gg +yK +wZ +"} +(137,1,1) = {" +yz +rG +Et +Mr +CD +aG +WV +WV +iz +vT +CN +WK +NI +NI +Dr +vT +CN +WK +US +WK +WK +WK +WK +vT +OW +zN +uz +gW +gW +gW +gW +Ll +gW +gW +LH +gW +Ll +LH +QE +gG +Cl +SK +Vh +rZ +gG +gG +gG +gG +hi +Ay +cd +cd +Ys +Ml +Ml +Ml +Ml +Ml +Ml +Ml +qM +cd +cd +cd +UX +Ml +Ml +Ml +Ml +jN +Ml +Ml +gA +cd +cd +Dz +Dz +Dz +Dz +oR +oR +oR +oR +Dz +oR +oR +yx +Dz +QR +Dz +oR +oR +oR +oR +oR +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +oR +oR +yx +oR +Dz +Dz +Dz +OW +OW +OW +OW +OW +EO +kX +pA +Sq +Sq +YN +GK +GK +OW +OW +GK +GK +GK +Gg +GK +GK +GK +GK +GK +GK +GK +GK +GK +Ex +Ex +Ex +GK +Hc +yK +wZ +"} +(138,1,1) = {" +yz +rG +rG +Et +OF +JY +CD +RR +cu +vT +vT +JP +Pn +UK +ku +vT +WK +WK +WK +WK +BJ +oL +WK +vT +OW +zN +pU +gW +lj +Uq +gW +Ll +Ll +Ll +Ll +Ll +Ll +Ll +aC +ue +ue +ue +ue +ue +gG +gG +gG +gG +AS +RI +cd +fR +za +Ml +Ml +ij +nb +FU +Ml +Ml +Pz +Qc +cd +fR +za +Ml +Ml +ij +nb +FU +Ml +Ml +Oi +CU +cd +Dz +Dz +Dz +oR +oR +Dz +oR +oR +Dz +Dz +Dz +oR +oR +oR +oR +oR +oR +oR +Dz +Dz +bC +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +oR +oR +oR +oR +Dz +Dz +oR +Dz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +vY +Hc +Hc +OW +OW +OW +GK +GK +GK +GK +GK +GK +Gg +GK +GK +GK +GK +Ex +Ex +Ex +Ex +GK +GK +yK +wZ +"} +(139,1,1) = {" +yz +OW +rG +rG +rG +iD +rN +cu +Cq +rX +vT +vT +vT +vT +vT +vT +rX +DI +Np +DI +vT +vT +vT +vT +OW +zN +Dv +gW +Wo +dt +gW +gW +gW +gW +gW +gW +gW +gW +QE +gG +hi +Pu +Ea +Hk +Hk +Ea +in +gG +hW +RG +Ml +UX +Ml +Ml +ij +kO +cd +hZ +FU +Ml +Ml +gA +GF +UX +Ml +Ml +ij +xU +cd +aT +FU +Ml +Ml +gA +cd +QR +oR +bC +oR +Dz +Dz +Dz +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +oR +oR +oR +oR +oR +Dz +Dz +Dz +oR +oR +oR +oR +Dz +Dz +Dz +Dz +oR +oR +Dz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +EO +Nr +GK +GK +OW +OW +Hc +Hc +GK +GK +Hc +GK +GK +GK +Hc +GK +Sf +Ex +Ex +yK +yK +GK +Se +yK +wZ +"} +(140,1,1) = {" +yz +OW +OW +dW +dW +zL +aI +kQ +mW +mW +mW +mW +mW +mW +mW +mW +mW +If +nt +Ol +mW +mW +OW +OW +OW +zN +uz +gW +gW +gW +gW +gW +gW +zN +zN +zN +zN +zN +QE +gG +gs +CL +CL +NO +NO +CL +IX +gG +WD +RI +Ml +UX +Ml +Ml +Qf +cd +cd +cd +vG +Ml +Ml +gA +uY +UX +Ml +Ml +ZH +cd +cd +cd +vG +Ep +Ml +gA +cd +Dz +Dz +oR +Dz +Dz +Dz +lW +oR +oR +oR +Dz +Dz +Dz +Dz +oR +Dz +oR +oR +oR +oR +wo +Dz +Dz +oR +oR +oR +oR +oR +Dz +Dz +Dz +Dz +Dz +oR +oR +oR +Dz +Dz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +pE +GK +Hc +GK +GK +GK +GK +GK +GK +GK +Ex +yK +yK +yK +GK +GK +yK +wZ +"} +(141,1,1) = {" +yz +OW +OW +dW +iT +WF +nt +nt +Gq +Gq +Sg +mW +mW +iT +Gq +Gq +Gq +Pr +Yi +JB +hR +mW +OW +OW +OW +zN +Dm +gW +gW +gW +gW +Dv +zN +zN +OW +OW +OW +zN +GV +qN +Ay +eA +Fj +dg +qn +HG +Qy +Hk +py +RG +Ml +UX +Ml +Ml +wd +Kc +cd +fR +za +Ml +Ml +gA +GF +UX +Ml +Ml +Pz +Gm +cd +TO +za +Ml +Ml +jk +cd +Dz +Dz +oR +oR +Dz +Dz +Dz +Dz +oR +oR +oR +yx +oR +oR +oR +oR +oR +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +wo +oR +oR +oR +Dz +Dz +Dz +oR +EV +Dz +Dz +Dz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +GK +GK +Hc +GK +OW +OW +Se +GK +GK +yK +yK +yK +GK +GK +yK +wZ +"} +(142,1,1) = {" +yz +OW +OW +dW +cr +bX +Yi +Yi +Yi +ym +IT +mW +mW +Ks +Yi +Yi +Yi +Yi +Yi +Yi +IT +mW +OW +OW +OW +zN +Wl +uz +WQ +Wl +cD +uz +zN +OW +OW +OW +OW +zN +RI +RI +RI +CL +Wu +uR +AJ +CL +RI +RI +RI +RI +cd +hZ +FU +Ml +Ml +Pz +iQ +za +Ml +Ml +ij +fj +cd +hZ +FU +Ml +Ml +Pz +iQ +za +Ml +Ml +ij +xU +cd +Dz +Dz +Dz +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +oR +oR +oR +oR +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +WW +oR +oR +oR +yx +Dz +Dz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +GK +OW +OW +OW +GK +GK +Hc +yK +yK +GK +Hc +GK +yK +wZ +"} +(143,1,1) = {" +yz +OW +OW +dW +pb +Cu +Cu +Yi +Yi +Yi +JB +nt +nt +Pr +Cu +Cu +Cu +Yi +Cu +Cu +hI +mW +OW +OW +OW +zN +zN +zN +zN +zN +zN +zN +zN +OW +OW +OW +OW +OW +OW +OW +OW +CL +JF +mk +AJ +CL +OW +OW +OW +OW +cd +cd +UX +Ml +Ml +Ml +Ml +Ml +Ml +Ml +gA +cd +cd +cd +IW +Ml +Ml +Ml +Ml +Ml +Ml +Ml +gA +cd +cd +Dz +Dz +lW +oR +oR +oR +Dz +Dz +Dz +Dz +oR +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +GK +GK +GK +GK +GK +GK +GK +yK +yK +wZ +"} +(144,1,1) = {" +yz +OW +OW +dW +pb +Cu +Cu +Yi +Yi +Yi +Yi +GU +GU +TU +Cu +Cu +Cu +Yi +Cu +Cu +hI +mW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +CL +DK +uR +AJ +CL +OW +OW +OW +OW +OW +cd +Nu +mf +FU +Ml +Ml +Ml +ts +uI +fj +cd +WX +cd +hZ +mf +FU +Ml +Ml +Ml +ij +By +TP +cd +Dz +Dz +Dz +Dz +Dz +oR +oR +RN +oR +oR +oR +oR +Dz +oR +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Hc +GK +GK +Gg +GK +GK +GK +GK +wR +yK +yK +wZ +"} +(145,1,1) = {" +yz +OW +OW +dW +Zw +Yi +Yi +Yi +Cu +Cu +Cu +mW +mW +Ks +Yi +Yi +Yi +Yi +Yi +Yi +IT +mW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +CL +sQ +vI +zx +CL +OW +OW +OW +OW +OW +cd +cd +cd +hZ +FU +AT +Jo +xI +cd +cd +cd +WX +cd +cd +cd +iJ +Zc +Ml +ij +fj +cd +cd +cd +Dz +Dz +Dz +Dz +Dz +Dz +oR +oR +oR +oR +Dz +Dz +Dz +Dz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +GK +GK +GK +Hc +GK +GK +GK +GK +GK +yK +yK +wZ +"} +(146,1,1) = {" +yz +OW +OW +dW +pb +Cu +Cu +Yi +Cu +Cu +Cu +mW +mW +Ks +Cu +Cu +Cu +Yi +Cu +Cu +hI +mW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +CL +CL +CL +CL +CL +OW +OW +OW +OW +OW +WX +WX +cd +cd +hZ +mf +fj +cd +cd +WX +WX +WX +WX +WX +cd +cd +hZ +mf +fj +cd +cd +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +WW +oR +Dz +Dz +Dz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +GK +sX +GK +Sf +GK +Hc +GK +Hc +yK +yK +wZ +"} +(147,1,1) = {" +yz +OW +OW +dW +pb +Cu +Cu +Yi +Yi +Yi +Yi +nt +nt +Pr +Cu +Cu +Cu +Yi +Cu +Cu +hI +mW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +cd +cd +cd +cd +cd +OW +OW +OW +OW +OW +OW +OW +cd +cd +cd +cd +cd +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +oR +oR +oR +Dz +Dz +Dz +Dz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +GK +GK +GK +GK +Se +GK +GK +yK +yK +wZ +"} +(148,1,1) = {" +yz +OW +OW +dW +xS +Yi +Yi +Yi +Yi +uW +uM +GU +GU +TU +Yi +Yi +Yi +Yi +Yi +Yi +IT +mW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +oR +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +GK +Hc +GK +yK +yK +yK +wZ +"} +(149,1,1) = {" +yz +OW +OW +dW +Fq +et +et +Xb +et +et +vp +mW +mW +cl +et +et +et +Xb +et +et +cP +mW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +Dz +Dz +Dz +Dz +Dz +Dz +QR +oR +oR +Dz +Dz +Dz +Dz +Dz +Dz +Dz +Dz +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +OW +yK +yK +yK +yK +yK +wZ +"} +(150,1,1) = {" +yz +yz +yz +KW +KW +KW +KW +KW +KW +KW +KW +KW +KW +KW +KW +KW +KW +KW +KW +KW +KW +KW +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +kv +kv +kv +kv +kv +kv +kv +kv +kv +kv +kv +kv +kv +kv +kv +kv +kv +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +yz +wZ +wZ +wZ +wZ +wZ +"} diff --git a/_maps/map_files/DaedalusPrison/DaedalusPrison.dmm b/_maps/map_files/DaedalusPrison/DaedalusPrison.dmm new file mode 100644 index 0000000000000..4d1a809cad6b9 --- /dev/null +++ b/_maps/map_files/DaedalusPrison/DaedalusPrison.dmm @@ -0,0 +1,74343 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aac" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"aar" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/weaponry/explosive/grenade/multiplefour, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/pmcdropship) +"aaF" = ( +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"aaI" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + name = "Recreation" + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/recreation) +"aaO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"aaP" = ( +/obj/item/shard, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/north) +"aaW" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"abR" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"ace" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"ach" = ( +/obj/structure/closet/secure_closet/medical2, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"acs" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/cameras) +"acA" = ( +/obj/structure/table/mainship, +/obj/item/coin, +/turf/open/floor/prison/darkyellow{ + dir = 10 + }, +/area/daedalusprison/inside/mechanicshop) +"acI" = ( +/obj/effect/spawner/random/engineering/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"acX" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"ada" = ( +/obj/machinery/disposal, +/turf/open/floor/tile/dark/green2{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"adi" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"adl" = ( +/obj/structure/table/mainship, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"adH" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/security/warden) +"adM" = ( +/obj/structure/prop/computer/broken/three, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"adP" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/gym) +"aeD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/barracks) +"aeT" = ( +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest/garbledradio) +"afh" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/outside/east) +"afA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"afI" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/sportstorage) +"afL" = ( +/obj/item/paper/crumpled, +/turf/open/floor/prison, +/area/daedalusprison/inside/studyroom) +"afM" = ( +/obj/machinery/vending/dinnerware, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"agd" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/turf/open/floor/tile/chapel{ + dir = 1 + }, +/area/daedalusprison/inside/chapel) +"agf" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/habitationnorth) +"agG" = ( +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest/garbledradio) +"agH" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/structure/cargo_container/horizontal{ + dir = 2 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonyauxstorage) +"agT" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker) +"ahu" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/turf/open/floor/tile/dark/green2{ + dir = 4 + }, +/area/daedalusprison/inside/colonydorms) +"ahM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"ahX" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"aif" = ( +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/outside/east) +"aiF" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/south) +"aiP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"ajr" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"ajt" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/prison, +/area/daedalusprison/inside/janitorial) +"ajK" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"ajT" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"aky" = ( +/obj/structure/closet/secure_closet/guncabinet/lmg, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/security/warden) +"akF" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"akQ" = ( +/obj/structure/prop/mainship/suit_storage_prop, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/mining) +"ald" = ( +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/westernbooth) +"all" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/effect/spawner/random/misc/paperbin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/tool/pen{ + pixel_y = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"alK" = ( +/obj/effect/spawner/random/misc/structure/crate, +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"alV" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/blue/whiteblue, +/area/daedalusprison/inside/southmeetingroom) +"ame" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/ai_node, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"amu" = ( +/turf/open/floor/prison/red/corner{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"amz" = ( +/obj/structure/table/mainship, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 6 + }, +/area/daedalusprison/inside/gym) +"anb" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/sportstorage) +"anl" = ( +/obj/structure/table/reinforced/weak, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/lobby) +"anI" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"anT" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/machinery/random_broken_computer/small, +/turf/open/floor/prison/green{ + dir = 6 + }, +/area/daedalusprison/inside/westcomputerlab) +"aok" = ( +/turf/closed/wall, +/area/daedalusprison/inside/colonydorms) +"aoJ" = ( +/turf/open/floor/prison/red/corner, +/area/daedalusprison/inside/habitationnorth) +"aoM" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"aoO" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/effect/landmark/corpsespawner/prisoner/burst, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"apf" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/southclass) +"apB" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/obj/effect/mapping_helpers/broken_apc/lowchance, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"apS" = ( +/obj/machinery/floodlight/colony, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"apX" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"aqd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/corpsespawner/prison_security, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/office) +"aqf" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/firstaid, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"aqj" = ( +/turf/open/floor/plating, +/area/daedalusprison/inside/hydroponics) +"aqE" = ( +/obj/item/shard, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"aqS" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"aqT" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"arf" = ( +/obj/machinery/door/airlock/mainship/security/glass/free_access{ + name = "Visitation" + }, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"arR" = ( +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest/garbledradio) +"arX" = ( +/obj/structure/bed/chair/office/dark/west, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"asd" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"asY" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/northeast) +"ata" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/southeast) +"atg" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"atk" = ( +/obj/structure/largecrate/random, +/turf/open/floor/prison, +/area/daedalusprison/inside/auxstorage) +"ats" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/prisongarden) +"atT" = ( +/obj/structure/window_frame/prison/reinforced, +/obj/item/shard, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"aud" = ( +/obj/machinery/door/poddoor/timed_late/containment/landing_zone, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"aui" = ( +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"auq" = ( +/obj/structure/table/reinforced/weak, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker) +"auD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"auY" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"avf" = ( +/obj/structure/table/gamblingtable, +/obj/item/spacecash/c10, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"avg" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"avi" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red/full, +/area/daedalusprison/inside/security/office) +"avQ" = ( +/turf/open/floor/prison/darkyellow{ + dir = 1 + }, +/area/daedalusprison/inside/sportstorage) +"avR" = ( +/obj/structure/table/reinforced/weak, +/obj/item/reagent_containers/spray/cleaner, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"avU" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"avV" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/daedalusprison/inside/southmeetingroom) +"avY" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest/garbledradio) +"awf" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"awp" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/chapel{ + dir = 1 + }, +/area/daedalusprison/inside/chapel) +"awu" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 4 + }, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"awG" = ( +/obj/structure/rack, +/obj/item/toy/blink, +/turf/open/floor/prison, +/area/daedalusprison/inside/sportstorage) +"axj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"axs" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/habitationnorth) +"axS" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/mainship/orange{ + dir = 6 + }, +/area/daedalusprison/caves/research) +"ayr" = ( +/obj/machinery/chem_dispenser/soda{ + dir = 8 + }, +/turf/closed/wall, +/area/daedalusprison/inside/colonydorms) +"ays" = ( +/obj/structure/table/reinforced/weak, +/obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_rifle, +/obj/item/cell/lasgun/lasrifle, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/east) +"azf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/air_alarm, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"azF" = ( +/obj/structure/table/mainship, +/obj/item/clothing/suit/storage/snow_suit/engineer, +/turf/open/floor/tile/dark/yellow2{ + dir = 8 + }, +/area/daedalusprison/inside/engineering) +"azO" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"azT" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"aAc" = ( +/turf/open/floor/prison/whitepurple{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"aAe" = ( +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/office) +"aAJ" = ( +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"aAL" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"aAN" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/beaker/largeweighted, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"aBc" = ( +/obj/structure/window_frame/prison/reinforced, +/obj/item/shard, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"aBC" = ( +/obj/structure/table/mainship, +/obj/structure/prop/computer/broken/fourteen, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"aBN" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"aBY" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"aCg" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/freezer) +"aCm" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"aCC" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/food_or_drink/burger/normal, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"aCJ" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/ai_node, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"aCY" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + name = "Prison Laundromat" + }, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"aDe" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"aDQ" = ( +/turf/open/floor/prison/darkred{ + dir = 10 + }, +/area/daedalusprison/inside/security/easternbooth) +"aDY" = ( +/obj/structure/closet/secure_closet/personal, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisonshower) +"aEk" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/mining) +"aEB" = ( +/obj/structure/bed/chair/office/dark/west, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"aEN" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/gym) +"aFf" = ( +/obj/structure/closet/cabinet, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/habitationsouth) +"aFk" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/heal_pack, +/obj/machinery/light, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"aFM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/office) +"aFY" = ( +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/habitationnorth) +"aGj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"aGo" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/obj/effect/mapping_helpers/broken_apc/lowchance, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/security/medsec) +"aGF" = ( +/turf/closed/shuttle/dropship2/interiormisc{ + dir = 4 + }, +/area/daedalusprison/inside/pmcdropship) +"aGY" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/daedalusprison/inside/prisonshower) +"aHc" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/security/warden) +"aHB" = ( +/obj/structure/table/reinforced/weak, +/obj/item/tool/surgery/suture, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"aHK" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"aHM" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"aIm" = ( +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"aIr" = ( +/obj/structure/sink{ + pixel_y = 15 + }, +/obj/item/tool/kitchen/utensil/knife, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"aID" = ( +/obj/structure/closet/secure_closet/security, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"aIX" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/daedalusprison/inside/southmeetingroom) +"aJl" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/freezer) +"aKn" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/red/corner{ + dir = 4 + }, +/area/daedalusprison/inside/habitationsouth) +"aKu" = ( +/obj/machinery/door/airlock/multi_tile/mainship/secdoor/glass{ + name = "\improper Prison Lobby" + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"aKw" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"aKB" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 5 + }, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"aKD" = ( +/obj/structure/sign/nosmoking_2{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"aKG" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"aKH" = ( +/obj/effect/landmark/weed_node, +/obj/structure/platform/nondense{ + dir = 8 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"aLe" = ( +/obj/structure/table/mainship, +/obj/structure/prop/computer/broken/nineteen, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"aLl" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/east) +"aLv" = ( +/obj/structure/janitorialcart, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"aLJ" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/darkyellow, +/area/daedalusprison/inside/sportstorage) +"aLV" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"aMl" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"aMp" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"aMq" = ( +/obj/effect/landmark/weed_node, +/obj/item/weapon/gun/rifle/m16, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"aMr" = ( +/obj/effect/turf_decal/warning_stripes, +/obj/item/toy/beach_ball/basketball, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"aMx" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/center) +"aMB" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/dark/red2{ + dir = 6 + }, +/area/daedalusprison/inside/seccheckpoint) +"aMD" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"aMO" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/door/poddoor/shutters{ + id = "DPsec" + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"aMU" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"aNi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"aNr" = ( +/obj/effect/spawner/random/misc/plant, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 9 + }, +/area/daedalusprison/inside/southmeetingroom) +"aNv" = ( +/obj/structure/window_frame/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/laundromat) +"aNW" = ( +/obj/structure/cable, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/power/apc/drained, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"aOh" = ( +/obj/machinery/disposal, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"aOo" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/daedalusprison/inside/southmeetingroom) +"aOR" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/air_alarm{ + dir = 1 + }, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"aOY" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"aOZ" = ( +/obj/structure/table/mainship, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"aPP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"aQq" = ( +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"aQC" = ( +/obj/structure/table/mainship, +/obj/item/tool/kitchen/rollingpin, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"aQF" = ( +/obj/effect/landmark/xeno_tunnel_spawn, +/turf/open/floor/plating, +/area/daedalusprison/inside/easternhalls) +"aQX" = ( +/obj/structure/table/mainship, +/obj/item/reagent_containers/spray/cleaner, +/turf/open/floor/prison, +/area/daedalusprison/inside/janitorial) +"aRe" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/mainship/purple{ + dir = 5 + }, +/area/daedalusprison/caves/research) +"aRQ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green{ + dir = 9 + }, +/area/daedalusprison/inside/westcomputerlab) +"aSd" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic/canteen{ + name = "\improper Mineral Processing" + }, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"aSu" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/item/ammo_casing/bullet, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"aTd" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical/treatment) +"aTg" = ( +/obj/effect/landmark/excavation_site_spawner, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"aTh" = ( +/obj/effect/spawner/random/engineering/structure/tank/fuelweighted, +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"aTu" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"aTA" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + name = "Study Room" + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/studyroom) +"aUi" = ( +/obj/structure/bed, +/mob/living/simple_animal/corgi/lisa, +/turf/open/floor/wood, +/area/daedalusprison/inside/habitationsouth) +"aUx" = ( +/turf/closed/wall, +/area/daedalusprison/inside/garden) +"aUP" = ( +/obj/item/ammo_casing/shell, +/turf/open/floor/tile/chapel, +/area/daedalusprison/inside/chapel) +"aUR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"aVl" = ( +/obj/structure/closet/crate/freezer, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/freezer) +"aVs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"aVv" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/daedalusprison/inside/westcomputerlab) +"aWo" = ( +/obj/effect/landmark/weed_node, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/whitegreen{ + dir = 4 + }, +/area/daedalusprison/inside/medical) +"aWE" = ( +/obj/structure/table/mainship, +/obj/item/reagent_containers/food/snacks/burger/chicken, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"aXu" = ( +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/obj/item/shard, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"aXz" = ( +/turf/open/floor/tile/dark/green2, +/area/daedalusprison/inside/colonydorms) +"aXI" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"aYX" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"aZi" = ( +/obj/effect/spawner/random/engineering/ore_box, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"aZk" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/plating, +/area/daedalusprison/inside/habitationsouth) +"baa" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"bac" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"baz" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"baI" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/lobby) +"baV" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/item/tool/kitchen/knife/shiv, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"bbm" = ( +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue{ + dir = 10 + }, +/area/daedalusprison/inside/corporateoffice) +"bbz" = ( +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"bbM" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/interrogation) +"bbV" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/seeds, +/turf/open/floor/prison/green{ + dir = 5 + }, +/area/daedalusprison/inside/prisongarden) +"bcc" = ( +/obj/structure/table/woodentable, +/obj/structure/paper_bin, +/turf/open/floor/prison, +/area/daedalusprison/inside/northclass) +"bce" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast) +"bcz" = ( +/obj/item/stack/tile, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"bcA" = ( +/obj/machinery/disposal, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"bcU" = ( +/obj/structure/dropship_piece/two/engine/leftbottom, +/turf/closed/shuttle/dropship2/engineone{ + dir = 4 + }, +/area/daedalusprison/inside/pmcdropship) +"bdd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"bdl" = ( +/obj/structure/bed/chair/office/dark/west, +/obj/structure/cable, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"bdH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/corporateoffice) +"bdJ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"bdW" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"beL" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"bfk" = ( +/obj/structure/table/reinforced/weak, +/obj/item/tool/hand_labeler, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"bgM" = ( +/obj/structure/closet/crate/trashcart, +/obj/effect/spawner/random/clothing/general, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"bif" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/security/easternbooth) +"bii" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"bim" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"biZ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"bju" = ( +/obj/structure/bed/chair/comfy, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"bkc" = ( +/obj/structure/table/reinforced/weak, +/obj/item/book/manual/engineering_guide, +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/east) +"bkt" = ( +/obj/machinery/disposal, +/turf/open/floor/tile/green/greentaupe{ + dir = 5 + }, +/area/daedalusprison/inside/hydroponics) +"bkv" = ( +/obj/item/ammo_casing/shell, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"bkP" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/centralhalls) +"bkX" = ( +/obj/structure/bed/chair{ + dir = 4; + pixel_x = 1; + pixel_y = 3 + }, +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"bln" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"blI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/easternhalls) +"blT" = ( +/obj/structure/rack, +/obj/item/toy/bikehorn, +/turf/open/floor/prison, +/area/daedalusprison/inside/sportstorage) +"blW" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/light, +/turf/open/floor/prison/whitepurple{ + dir = 6 + }, +/area/daedalusprison/inside/medical) +"blY" = ( +/obj/structure/table/mainship, +/obj/item/toy/deck, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"bmq" = ( +/obj/structure/bed/chair/dropship/pilot{ + dir = 1 + }, +/obj/effect/landmark/corpsespawner/pmc, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"bmu" = ( +/obj/structure/bed/bunkbed, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/barracks) +"bmE" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic/noglass{ + name = "\improper Women's Restroom" + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"bmI" = ( +/obj/effect/turf_decal/warning_stripes/box, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"bmN" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/green{ + dir = 4 + }, +/area/daedalusprison/inside/southclass) +"bnm" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"bnC" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"bnV" = ( +/obj/machinery/floodlight/colony, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"bnZ" = ( +/obj/machinery/door/airlock/multi_tile/mainship/secdoor/glass{ + name = "\improper Prison Checkpoint" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"boi" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 2 + }, +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"bou" = ( +/obj/structure/cable, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"boH" = ( +/obj/machinery/light, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"boI" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/machinery/random_broken_computer/small, +/turf/open/floor/tile/green/full, +/area/daedalusprison/inside/colonydorms) +"bpt" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/daedalusprison/inside/cargo) +"bpw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"bpM" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"bpR" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red/corner{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"bpU" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"bqa" = ( +/turf/closed/shuttle/dropship2/engine_sidealt{ + dir = 8 + }, +/area/daedalusprison/inside/pmcdropship) +"bqd" = ( +/obj/structure/fence/broken, +/obj/structure/platform/rockcliff/icycliff/nondense{ + dir = 4 + }, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"bql" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"bqD" = ( +/turf/closed/shuttle/dropship2/engineone{ + dir = 8 + }, +/area/daedalusprison/inside/pmcdropship) +"bqV" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/barracks) +"bra" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/bed/chair/comfy, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"brn" = ( +/obj/effect/landmark/corpsespawner/chef, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"brO" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/westernbooth) +"brZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"bsf" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"bsz" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/northmeetingroom) +"bsB" = ( +/obj/machinery/space_heater, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/red{ + dir = 9 + }, +/area/daedalusprison/inside/security/secbreakroom) +"bsG" = ( +/obj/structure/sink{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitepurple{ + dir = 4 + }, +/area/daedalusprison/inside/medical/chemistry) +"bsR" = ( +/obj/structure/bed/chair{ + dir = 4; + pixel_x = 1; + pixel_y = 3 + }, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"bsT" = ( +/obj/machinery/camera/autoname/lz_camera, +/turf/open/floor/plating, +/area/daedalusprison/inside/landingzoneone) +"btm" = ( +/obj/structure/closet/secure_closet/security, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"bts" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"btJ" = ( +/obj/structure/barricade/metal, +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"btM" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/dark/red2{ + dir = 5 + }, +/area/daedalusprison/inside/seccheckpoint) +"bui" = ( +/obj/structure/fence/broken, +/obj/structure/platform/rockcliff/icycliff/nondense{ + dir = 5 + }, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"buk" = ( +/turf/open/floor/prison/cellstripe{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"bun" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"buo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"bur" = ( +/obj/structure/rack, +/obj/item/weapon/classic_baton, +/obj/item/weapon/classic_baton, +/obj/item/weapon/classic_baton, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"bvc" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest/garbledradio) +"bvC" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"bwj" = ( +/obj/item/clothing/under/rank/prisoner, +/turf/open/floor/rustyplating, +/area/daedalusprison/inside/laundromat) +"bwL" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"bwN" = ( +/obj/machinery/disposal, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/easternhalls) +"bwV" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"bxq" = ( +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"bxB" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"bxP" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/easternhalls) +"byr" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"byz" = ( +/obj/structure/filingcabinet/security, +/turf/open/floor/prison/green, +/area/daedalusprison/inside/northclass) +"byG" = ( +/obj/machinery/vending/dinnerware, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"byI" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"byJ" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/lobby) +"byX" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/cans/cola, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"bzl" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/easternhalls) +"bzt" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"bzF" = ( +/obj/effect/spawner/random/misc/plant, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 9 + }, +/area/daedalusprison/inside/lobby) +"bAe" = ( +/obj/structure/cable, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/power/apc/drained, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"bAw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"bAx" = ( +/obj/item/taperecorder, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"bAE" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/brown2, +/area/daedalusprison/inside/cargo) +"bAH" = ( +/obj/effect/spawner/random/misc/book, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"bAQ" = ( +/obj/structure/table/mainship, +/obj/item/phone, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"bAV" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"bBf" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/north) +"bBo" = ( +/obj/structure/table/mainship/nometal, +/obj/machinery/reagentgrinder, +/obj/item/stack/sheet/mineral/phoron, +/turf/open/floor/prison/whitepurple{ + dir = 9 + }, +/area/daedalusprison/inside/medical/chemistry) +"bBr" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"bBt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"bBE" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"bBG" = ( +/obj/structure/closet/secure_closet/security, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"bCq" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"bCA" = ( +/obj/machinery/botany/editor, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"bCS" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"bDn" = ( +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"bDu" = ( +/obj/structure/table/reinforced/weak, +/obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_rifle, +/obj/item/cell/lasgun/lasrifle, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"bDH" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/security/easternbooth) +"bDY" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"bEf" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"bEs" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"bEv" = ( +/obj/effect/spawner/random/misc/structure/girder, +/turf/open/floor/plating, +/area/daedalusprison/inside/engineering) +"bEA" = ( +/obj/structure/table, +/obj/item/reagent_containers/spray/cleaner, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"bEI" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"bEJ" = ( +/obj/machinery/disposal, +/obj/machinery/light, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"bER" = ( +/obj/structure/bed/chair, +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"bFq" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/south) +"bFw" = ( +/obj/structure/table/mainship, +/obj/structure/prop/computer/broken/fourteen, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"bFN" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/interrogation) +"bGc" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/landmark/xeno_tunnel_spawn, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"bGE" = ( +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/security/warden) +"bHC" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"bIA" = ( +/turf/open/floor/prison/red/corner, +/area/daedalusprison/inside/habitationsouth) +"bIJ" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"bIT" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"bJM" = ( +/obj/machinery/disposal, +/obj/machinery/light, +/turf/open/floor/tile/brown/full, +/area/daedalusprison/inside/engineering) +"bJP" = ( +/turf/open/floor/prison/darkred/corners{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"bKa" = ( +/obj/machinery/light, +/turf/open/floor/tile/dark/brown2, +/area/daedalusprison/inside/cargo) +"bKc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"bKf" = ( +/obj/effect/spawner/random/engineering/shovel, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/northeast) +"bKg" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"bKj" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen/corner, +/area/daedalusprison/inside/medical) +"bKA" = ( +/obj/structure/sink, +/turf/open/floor/prison/darkpurple{ + dir = 9 + }, +/area/daedalusprison/inside/janitorial) +"bLb" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"bLo" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"bLp" = ( +/obj/structure/table/mainship, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"bLB" = ( +/obj/structure/prop/vehicle/truck/destructible, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/garage) +"bLJ" = ( +/obj/effect/spawner/random/engineering/structure/tank/fuelweighted, +/turf/open/floor/plating, +/area/daedalusprison/inside/habitationsouth) +"bLT" = ( +/obj/structure/xenoautopsy/tank/escaped, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"bLV" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"bMk" = ( +/obj/machinery/hydroponics/slashable, +/turf/open/floor/prison/green{ + dir = 6 + }, +/area/daedalusprison/inside/prisongarden) +"bMu" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"bMy" = ( +/obj/machinery/air_alarm, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/secbreakroom) +"bMJ" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"bNd" = ( +/obj/machinery/door/airlock/mainship/generic{ + dir = 1; + name = "\improper Dormitory Unit" + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"bNA" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"bNI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/easternhalls) +"bNN" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"bOk" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/food_or_drink/packagedbar, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"bOo" = ( +/obj/structure/table/mainship, +/obj/structure/bedsheetbin, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"bOX" = ( +/turf/closed/shuttle/dropship2/fins{ + dir = 1 + }, +/area/daedalusprison/inside/pmcdropship) +"bPz" = ( +/obj/effect/landmark/xeno_silo_spawn, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"bPG" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"bPK" = ( +/turf/open/floor/prison/green{ + dir = 8 + }, +/area/daedalusprison/inside/southclass) +"bPO" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/darkred{ + dir = 6 + }, +/area/daedalusprison/inside/lobby) +"bQa" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/computer/secure_data, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/easternbooth) +"bQs" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"bRq" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/daedalusprison/inside/colonydorms) +"bRA" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"bRU" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/landmark/weed_node, +/obj/machinery/light, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"bSf" = ( +/turf/closed/wall, +/area/daedalusprison/inside/southmeetingroom) +"bSq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing, +/obj/item/ammo_casing, +/obj/machinery/light, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"bSZ" = ( +/obj/machinery/scoreboard{ + id = "basketball"; + pixel_y = 30 + }, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"bTf" = ( +/obj/structure/bed/stool, +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"bTg" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"bTz" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/hydroponics) +"bTE" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/south) +"bTF" = ( +/obj/structure/table/mainship, +/obj/structure/prop/computer/broken/ten, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"bUg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"bUI" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"bUR" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/red/corner{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"bUX" = ( +/obj/structure/table/reinforced/weak, +/obj/item/defibrillator, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"bVb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"bVg" = ( +/obj/structure/closet/secure_closet/security, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"bVs" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/effect/spawner/random/misc/handcuffs, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"bVB" = ( +/obj/machinery/door/airlock/mainship/medical/glass/free_access{ + name = "\improper Dormitories Directors Office" + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"bVE" = ( +/obj/structure/filingcabinet, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 6 + }, +/area/daedalusprison/inside/security/cameras) +"bVN" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/interrogation) +"bVQ" = ( +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/center) +"bVT" = ( +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/garage) +"bVX" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -11 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"bWA" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"bWV" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"bWW" = ( +/obj/structure/reagent_dispensers/wallmounted/peppertank, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/caves/nukestorage) +"bXu" = ( +/obj/structure/bed/chair/office/dark/west, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"bXA" = ( +/obj/structure/table/mainship, +/obj/item/laptop, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"bXH" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"bXR" = ( +/obj/structure/bed/chair/office/dark, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"bYi" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"bYr" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/center) +"bZg" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red/corner{ + dir = 1 + }, +/area/daedalusprison/inside/security/secbreakroom) +"bZU" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/machinery/random_broken_computer/small, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"bZX" = ( +/obj/structure/table/reinforced/weak, +/obj/item/storage/firstaid/regular{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/storage/firstaid/regular{ + pixel_x = 5; + pixel_y = 3 + }, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"bZZ" = ( +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"cac" = ( +/obj/machinery/vending/MarineMed/Blood, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"cag" = ( +/obj/machinery/light, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"caI" = ( +/turf/closed/wall, +/area/daedalusprison/inside/secoffices) +"cbi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/dark/green2, +/area/daedalusprison/inside/colonydorms) +"cbp" = ( +/obj/structure/filingcabinet, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"cbR" = ( +/obj/item/clothing/gloves/botanic_leather, +/obj/effect/ai_node, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"cbX" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 8 + }, +/obj/structure/prop/mainship/gelida/lightstick, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/southeast) +"cce" = ( +/obj/structure/closet/wardrobe/orange, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"ccv" = ( +/obj/item/reagent_containers/glass/rag, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/gym) +"ccx" = ( +/turf/closed/shuttle/dropship2/wallthree/alt, +/area/daedalusprison/inside/pmcdropship) +"ccL" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"ccN" = ( +/obj/structure/filingcabinet, +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 10 + }, +/area/daedalusprison/inside/security/warden) +"cda" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"cdc" = ( +/obj/structure/barricade/metal{ + dir = 1 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"cdG" = ( +/obj/structure/window/framed/colony, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"cdJ" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/air_alarm{ + dir = 8 + }, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"cdV" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"ceo" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/darkbrown{ + dir = 1 + }, +/area/daedalusprison/inside/mining) +"cep" = ( +/turf/open/floor/prison/whitegreen/corner, +/area/daedalusprison/inside/medical) +"cfo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonyauxstorage) +"cfC" = ( +/obj/effect/decal/cleanable/blood, +/obj/item/weapon/gun/revolver/standard_revolver, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"cfI" = ( +/obj/item/ammo_casing, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"cfU" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"cgr" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"cgO" = ( +/obj/machinery/line_nexter{ + dir = 2 + }, +/obj/structure/cable, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"chp" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/gym) +"chB" = ( +/turf/open/floor/tile/dark2, +/area/daedalusprison/caves/nukestorage) +"chJ" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/closed/mineral/smooth/darkfrostwall, +/area/daedalusprison/caves/rock) +"chS" = ( +/obj/structure/table, +/obj/item/tool/analyzer/plant_analyzer, +/obj/item/tool/analyzer/plant_analyzer, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"chZ" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"ciq" = ( +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/studyroom) +"ciV" = ( +/obj/structure/reagent_dispensers/beerkeg, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"ciY" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/light, +/turf/open/floor/tile/dark/brown2, +/area/daedalusprison/inside/cargo) +"cji" = ( +/obj/machinery/biogenerator, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"cjr" = ( +/obj/item/clothing/mask/facehugger/dead, +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"cjw" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/structure/cargo_container/nt{ + dir = 1 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"cjT" = ( +/obj/structure/table/reinforced/weak, +/obj/item/storage/box/gloves{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/item/storage/box/masks, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/whitegreen{ + dir = 10 + }, +/area/daedalusprison/inside/medical) +"cjV" = ( +/obj/structure/rack, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/head/helmet/riot, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/barracks) +"cjX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"ckp" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/computercircuit, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/yellow2{ + dir = 1 + }, +/area/daedalusprison/inside/engineering) +"ckA" = ( +/obj/effect/decal/cleanable/blood, +/obj/item/ammo_casing, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/barracks) +"ckJ" = ( +/obj/machinery/computer/security/wooden_tv{ + desc = "An old TV hooked up to a video cassette recorder, you can even use it to time shift WOW."; + dir = 4; + name = "Television set"; + network = null; + pixel_y = 4 + }, +/obj/structure/table/mainship, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"ckM" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/podhatch/floor, +/area/daedalusprison/inside/engineering) +"ckP" = ( +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"ckW" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/book, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"clm" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"clG" = ( +/obj/structure/table/mainship, +/obj/item/detective_scanner, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"clM" = ( +/obj/effect/spawner/random/misc/structure/curtain/medical, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"clV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"clW" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison, +/area/daedalusprison/inside/janitorial) +"cmd" = ( +/obj/machinery/disposal, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"cmg" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"cmh" = ( +/turf/open/floor/prison/green, +/area/daedalusprison/inside/southclass) +"cmn" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/effect/spawner/random/misc/paperbin{ + pixel_x = -3; + pixel_y = 7 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"cmt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/brown2{ + dir = 4 + }, +/area/daedalusprison/inside/cargo) +"cmw" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/effect/spawner/random/machinery/random_broken_computer/small, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"cmU" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/syringe, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"cnA" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"coG" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/blue/whiteblue, +/area/daedalusprison/inside/southmeetingroom) +"coH" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/ai_node, +/obj/structure/cable, +/turf/open/floor/prison/bright_clean/two, +/area/daedalusprison/inside/centralhalls) +"coT" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"cpo" = ( +/obj/structure/table/mainship, +/obj/item/clothing/suit/storage/snow_suit/engineer, +/turf/open/floor/tile/dark/yellow2{ + dir = 5 + }, +/area/daedalusprison/inside/engineering) +"cpA" = ( +/obj/effect/landmark/weed_node, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"cpC" = ( +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"cqk" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark/brown2, +/area/daedalusprison/inside/cargo) +"cqt" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"cqx" = ( +/obj/effect/landmark/start/job/xenomorph, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast) +"cqA" = ( +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/lobby) +"cqG" = ( +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"cqH" = ( +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/center) +"cqK" = ( +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/east) +"crX" = ( +/obj/machinery/shower{ + dir = 8 + }, +/obj/machinery/light/small, +/obj/effect/landmark/corpsespawner/colonist, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"csB" = ( +/obj/structure/table/mainship, +/obj/machinery/cell_charger, +/obj/effect/spawner/random/engineering/powercell, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"csX" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red/corner{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"cta" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationnorth) +"ctI" = ( +/obj/machinery/door/airlock/multi_tile/mainship/maint, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"cug" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/obj/item/ammo_casing, +/obj/item/ammo_casing, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"cuy" = ( +/obj/machinery/door/airlock/multi_tile/ice{ + name = "Cargo Hold" + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"cuE" = ( +/obj/effect/spawner/random/misc/plant, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/security/office) +"cuO" = ( +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/flora/ausbushes/brflowers, +/turf/open/ground/grass/weedable, +/area/daedalusprison/inside/hydroponics) +"cuP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"cve" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"cvh" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/west) +"cvj" = ( +/turf/open/floor/tile/brown/full, +/area/daedalusprison/inside/engineering) +"cvn" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/spawner/random/misc/trash, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"cww" = ( +/obj/structure/table/reinforced/weak, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/security/medsec) +"cwy" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/turf/open/floor/tile/dark/yellow2{ + dir = 6 + }, +/area/daedalusprison/inside/engineering) +"cwH" = ( +/obj/structure/prop/computer/broken/six, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/mining) +"cwP" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"cwT" = ( +/obj/machinery/door/airlock/centcom{ + name = "Nuclear Storage"; + dir = 1 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/caves/nukestorage) +"cxj" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"cxt" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"cyy" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"cyC" = ( +/obj/item/shard, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/north) +"cyD" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/sportstorage) +"cyI" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/mining) +"czd" = ( +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/flora/ausbushes/sunnybush, +/turf/open/ground/grass/weedable, +/area/daedalusprison/inside/hydroponics) +"czG" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"czL" = ( +/obj/machinery/space_heater, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 9 + }, +/area/daedalusprison/inside/centralhalls) +"czM" = ( +/obj/machinery/light, +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/whitegreen{ + dir = 6 + }, +/area/daedalusprison/inside/medical) +"cAe" = ( +/obj/structure/window_frame/prison/reinforced, +/obj/item/shard, +/turf/open/floor/prison/bright_clean/two, +/area/daedalusprison/inside/gym) +"cAi" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"cAj" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationnorth) +"cAo" = ( +/obj/machinery/door/airlock/mainship/generic{ + dir = 1; + name = "\improper Toilet Unit" + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"cAp" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/plating, +/area/daedalusprison/inside/centralhalls) +"cAr" = ( +/obj/structure/table/mainship, +/obj/machinery/faxmachine, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"cAG" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/brown/full, +/area/daedalusprison/inside/engineering) +"cAS" = ( +/obj/structure/prop/mainship/gelida/smallwire, +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 4 + }, +/obj/structure/prop/mainship/gelida/lightstick{ + pixel_x = -8; + pixel_y = 7 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"cAV" = ( +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/southclass) +"cBU" = ( +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/sportstorage) +"cBY" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"cCb" = ( +/obj/effect/landmark/xeno_tunnel_spawn, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/freezer) +"cCU" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"cDy" = ( +/obj/machinery/door/airlock/mainship/engineering/CSEoffice{ + dir = 2; + name = "\improper Engineering Auxillary Storage" + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"cDB" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"cDR" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"cEc" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"cEg" = ( +/obj/item/ammo_casing/shell, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"cEp" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/computer/med_data/laptop, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"cEt" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/food_or_drink/burger/normal, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"cEK" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/sportstorage) +"cEQ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"cFQ" = ( +/obj/machinery/computer/intel_computer, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"cGh" = ( +/obj/machinery/door/airlock/mainship/medical/glass{ + name = "\improper Hydroponics Equipment"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"cGy" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisongarden) +"cGA" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"cGC" = ( +/obj/structure/rack, +/obj/item/weapon/gun/rifle/m16, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/barracks) +"cGT" = ( +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/east) +"cGY" = ( +/turf/closed/wall/r_wall, +/area/daedalusprison/inside/bunker/west) +"cHg" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"cHs" = ( +/obj/structure/sink{ + pixel_y = 15 + }, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"cHx" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison/darkbrown, +/area/daedalusprison/inside/mining) +"cHH" = ( +/turf/closed/shuttle/dropship2/glasssix, +/area/daedalusprison/inside/pmcdropship) +"cHN" = ( +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/daedalusprison/inside/southmeetingroom) +"cIq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"cII" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/secbreakroom) +"cIR" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"cJB" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"cJU" = ( +/obj/effect/turf_decal/tracks/wheels/bloody, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"cKe" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/barricade/wooden{ + dir = 1 + }, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/easternhalls) +"cKo" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"cKz" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/security/easternbooth) +"cKB" = ( +/turf/closed/shuttle/dropship2/rearcorner{ + dir = 1 + }, +/area/daedalusprison/inside/pmcdropship) +"cKF" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/daedalusprison/inside/southmeetingroom) +"cKS" = ( +/obj/structure/bed/chair/dropship/passenger{ + dir = 4 + }, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"cKU" = ( +/obj/structure/bed/chair/comfy, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"cLb" = ( +/obj/machinery/vending/coffee, +/obj/machinery/light, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"cLn" = ( +/obj/item/ammo_casing, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"cLH" = ( +/obj/structure/table/mainship, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"cLU" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"cMb" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"cMo" = ( +/turf/closed/shuttle/dropship2/fins{ + dir = 10 + }, +/area/daedalusprison/inside/pmcdropship) +"cMq" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/turf/open/floor/tile/dark/brown2{ + dir = 8 + }, +/area/daedalusprison/inside/cargo) +"cMG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/corpsespawner/prisoner, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/gym) +"cNr" = ( +/obj/structure/bed/chair/office/dark, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"cNW" = ( +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"cOB" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/gym) +"cOM" = ( +/turf/open/floor/prison/red, +/area/daedalusprison/inside/mining) +"cPN" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"cPR" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/effect/spawner/random/misc/structure/supplycrate, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"cQj" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/item/ammo_casing/bullet, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"cQM" = ( +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/easternhalls) +"cQQ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"cRb" = ( +/obj/machinery/door/airlock/multi_tile/mainship/medidoor{ + name = "Chemistry" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"cRu" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 2 + }, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"cRx" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"cRM" = ( +/obj/machinery/iv_drip, +/turf/open/floor/prison/whitegreen{ + dir = 4 + }, +/area/daedalusprison/inside/medical/treatment) +"cTb" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/security/secbreakroom) +"cTh" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"cTj" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"cTm" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/darkred/corners{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"cTL" = ( +/obj/machinery/space_heater, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/yellow2{ + dir = 9 + }, +/area/daedalusprison/inside/engineering) +"cUa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"cUD" = ( +/obj/structure/table/woodentable, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"cUM" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 4 + }, +/obj/structure/barricade/metal, +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"cVe" = ( +/turf/open/floor/prison/darkred/corners{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"cVf" = ( +/obj/structure/table/woodentable, +/obj/item/laptop, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/corporateoffice) +"cWv" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"cWx" = ( +/obj/structure/table/reinforced/weak, +/obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_rifle, +/obj/item/cell/lasgun/lasrifle, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker) +"cWT" = ( +/turf/closed/shuttle/dropship2/engine_sidealt{ + dir = 4 + }, +/area/daedalusprison/inside/pmcdropship) +"cXm" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall/prison, +/area/daedalusprison/inside/easternhalls) +"cXs" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/whitegreen/corner{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"cXA" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/clothing/sunglasses, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"cXM" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/daedalusprison/inside/southmeetingroom) +"cYf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"cYw" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"cYz" = ( +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"cZf" = ( +/turf/open/floor/prison/green{ + dir = 5 + }, +/area/daedalusprison/inside/southclass) +"cZj" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"cZl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"cZt" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/machinery/light, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"cZE" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"cZP" = ( +/obj/effect/spawner/random/misc/plant, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"cZU" = ( +/obj/machinery/air_alarm{ + dir = 4 + }, +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"cZZ" = ( +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/security/easternbooth) +"daj" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/sportstorage) +"das" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/garage) +"daH" = ( +/obj/structure/platform/nondense{ + dir = 8 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"dbb" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/flora/ausbushes/brflowers, +/turf/open/ground/grass/weedable, +/area/daedalusprison/inside/hydroponics) +"dbk" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"dbI" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 8 + }, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/northeast) +"dbL" = ( +/obj/machinery/light{ + dir = 8; + pixel_y = 16 + }, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"dci" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/powercell, +/obj/effect/spawner/random/engineering/powercell, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"dcs" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/effect/ai_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"dcC" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"dcF" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/obj/structure/cable, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"dcH" = ( +/obj/structure/table/mainship/nometal, +/obj/effect/spawner/random/misc/paperbin, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"dcM" = ( +/obj/machinery/computer/arcade, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"ddL" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"ddW" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 5 + }, +/obj/item/ammo_magazine/rifle/m16, +/obj/item/ammo_casing/bullet, +/turf/open/shuttle/dropship/three, +/area/daedalusprison/inside/pmcdropship) +"ded" = ( +/obj/machinery/light, +/turf/open/floor/prison/darkbrown{ + dir = 10 + }, +/area/daedalusprison/inside/mining) +"deg" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/tile/dark/brown2, +/area/daedalusprison/inside/cargo) +"del" = ( +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/prisonshower) +"deo" = ( +/obj/structure/bed/bunkbed, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationnorth) +"der" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"deu" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"deA" = ( +/obj/structure/table/woodentable, +/obj/item/book/manual/security_space_law, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/corporateoffice) +"deK" = ( +/obj/structure/girder/reinforced, +/turf/open/floor/plating, +/area/daedalusprison/inside/barracks) +"deL" = ( +/turf/closed/shuttle/dropship2/panels, +/area/daedalusprison/inside/pmcdropship) +"dfA" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/lobby) +"dfW" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"dfZ" = ( +/obj/structure/filingcabinet, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/cameras) +"dgq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4 + }, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/barracks) +"dgz" = ( +/obj/vehicle/train/cargo/trolley, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/daedalusprison/inside/cargo) +"dgM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"dgS" = ( +/obj/machinery/smartfridge, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"dgV" = ( +/obj/machinery/computer/autodoc_console, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical/treatment) +"dgX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"dhk" = ( +/obj/structure/window/framed/colony, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/southmeetingroom) +"dhB" = ( +/obj/effect/turf_decal/tracks/wheels/bloody, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"dhL" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"dhQ" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/food_or_drink/burger/normal, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"dir" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering{ + name = "\improper Engineering Generators" + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"diE" = ( +/obj/structure/table/woodentable, +/obj/machinery/photocopier, +/obj/machinery/light, +/turf/open/floor/prison/red{ + dir = 6 + }, +/area/daedalusprison/inside/habitationsouth) +"diJ" = ( +/obj/item/ammo_casing, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"diZ" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"dja" = ( +/obj/machinery/vending/snack, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"dje" = ( +/obj/machinery/disposal, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/brown2/corner, +/area/daedalusprison/inside/cargo) +"dju" = ( +/obj/effect/decal/cleanable/blood/gibs/limb, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"djL" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/obj/effect/ai_node, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"djT" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"dkB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/space_heater, +/turf/open/floor/tile/green/full, +/area/daedalusprison/inside/colonydorms) +"dkK" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"dkP" = ( +/obj/structure/bed/chair, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/turf/open/floor/prison/green{ + dir = 8 + }, +/area/daedalusprison/inside/southclass) +"dkZ" = ( +/obj/structure/table/woodentable, +/obj/machinery/computer/med_data/laptop, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationsouth) +"dla" = ( +/obj/machinery/mineral/stacking_machine, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"dlw" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"dlx" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"dlI" = ( +/obj/structure/cable, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"dmi" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationsouth) +"dms" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"dmw" = ( +/obj/structure/table/mainship, +/obj/structure/prop/computer/broken/sixteen, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"dmP" = ( +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/southwest) +"dnu" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"dnJ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"dnM" = ( +/obj/machinery/disposal, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/office) +"dnO" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"dnY" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/handcuffs, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/office) +"dom" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"dop" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"doq" = ( +/turf/open/floor/prison/darkred/corners, +/area/daedalusprison/inside/easternhalls) +"dor" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"dow" = ( +/obj/machinery/hydroponics/slashable, +/turf/open/floor/prison/green{ + dir = 8 + }, +/area/daedalusprison/inside/prisongarden) +"doJ" = ( +/obj/structure/table/gamblingtable, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"dpv" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/northeast) +"dpx" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark/brown2/corner, +/area/daedalusprison/inside/cargo) +"dpB" = ( +/turf/closed/shuttle/dropship2/fins, +/area/daedalusprison/inside/pmcdropship) +"dpC" = ( +/obj/structure/window/framed/colony, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"dpH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4 + }, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"dpL" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bar) +"dpR" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"dpW" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkyellow{ + dir = 9 + }, +/area/daedalusprison/inside/sportstorage) +"dqa" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"dqk" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/northclass) +"dqo" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/computer/operating, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"dqy" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"dqz" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"dqQ" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"dqX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/intel_computer, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/corporateoffice) +"drb" = ( +/obj/machinery/light, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"drs" = ( +/obj/structure/dispenser, +/turf/open/floor/prison/red{ + dir = 9 + }, +/area/daedalusprison/inside/mining) +"drw" = ( +/obj/structure/rack, +/obj/item/cell/high/empty, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical/treatment) +"drI" = ( +/turf/closed/wall, +/area/daedalusprison/inside/colonyauxstorage) +"drS" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"dsm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"dsw" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"dsx" = ( +/obj/structure/bed/chair/office/dark/west, +/obj/structure/cable, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"dsQ" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"dsY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"dtu" = ( +/obj/structure/table/reinforced/weak, +/obj/item/trash/plate, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/center) +"dtB" = ( +/obj/effect/landmark/patrol_point/som/som_11, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest/garbledradio) +"dtU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"dur" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"duD" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"duG" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"duS" = ( +/turf/open/floor/wood, +/area/daedalusprison/inside/centralhalls) +"dvf" = ( +/obj/structure/fence/broken, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"dvi" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest/garbledradio) +"dvo" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"dvG" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"dwe" = ( +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"dwq" = ( +/obj/effect/spawner/random/misc/book, +/turf/open/floor/tile/chapel{ + dir = 4 + }, +/area/daedalusprison/inside/chapel) +"dwR" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"dwX" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"dxa" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/ai_node, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"dxg" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"dxi" = ( +/obj/machinery/door/poddoor/timed_late/containment/landing_zone, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/inside/landingzoneone) +"dxp" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/red/full, +/area/daedalusprison/inside/security/office) +"dxq" = ( +/obj/structure/prop/mainship/gelida/miner, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"dxr" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"dxK" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/janitorial) +"dxO" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/medsec) +"dxQ" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/open/floor/plating, +/area/daedalusprison/inside/habitationsouth) +"dyU" = ( +/obj/machinery/door/airlock/mainship/medical/glass/free_access{ + dir = 4; + name = "\improper Bar Storage" + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bar) +"dzt" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"dzz" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"dzO" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"dzZ" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/west) +"dAO" = ( +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/barracks) +"dAP" = ( +/obj/machinery/mineral/stacking_unit_console, +/turf/closed/wall/prison, +/area/daedalusprison/inside/mining) +"dAR" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"dBv" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest) +"dBB" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/obj/machinery/light, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bar) +"dBD" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/daedalusprison/inside/hydroponics) +"dBO" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"dCb" = ( +/obj/structure/fence/broken, +/obj/structure/platform/rockcliff/icycliff/nondense{ + dir = 8 + }, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"dCh" = ( +/obj/structure/filingcabinet/security, +/obj/machinery/light, +/turf/open/floor/prison/green{ + dir = 10 + }, +/area/daedalusprison/inside/northclass) +"dCk" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/darkred{ + dir = 5 + }, +/area/daedalusprison/inside/easternhalls) +"dCl" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/barracks) +"dCv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"dCT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"dDl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"dDq" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"dDz" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering{ + name = "\improper Engineering"; + dir = 1 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"dDH" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/barricade/metal{ + dir = 8 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"dDL" = ( +/obj/structure/barricade/metal{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"dDT" = ( +/obj/structure/cable, +/obj/machinery/light, +/obj/machinery/power/apc/drained{ + dir = 1 + }, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/mining) +"dDW" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/structure/cargo_container/ch_green, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"dDX" = ( +/obj/structure/closet/crate/trashcart, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"dEj" = ( +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"dEU" = ( +/turf/open/floor/prison/cellstripe, +/area/daedalusprison/inside/habitationnorth) +"dFe" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/habitationnorth) +"dFg" = ( +/obj/effect/decal/cleanable/blood/gibs, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"dFi" = ( +/obj/structure/table/woodentable, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"dGb" = ( +/obj/machinery/vending/engivend, +/turf/open/floor/tile/dark/yellow2{ + dir = 9 + }, +/area/daedalusprison/inside/engineering) +"dGe" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"dGf" = ( +/obj/effect/landmark/corpsespawner/doctor, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical/treatment) +"dGk" = ( +/obj/machinery/light, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/west) +"dGz" = ( +/obj/structure/rack, +/obj/item/stack/sheet/mineral/osmium, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/mining) +"dGC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"dGG" = ( +/obj/machinery/disposal, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green{ + dir = 5 + }, +/area/daedalusprison/inside/northmeetingroom) +"dHm" = ( +/obj/structure/table/mainship, +/obj/item/clothing/under/rank/janitor, +/turf/open/floor/prison, +/area/daedalusprison/inside/janitorial) +"dHG" = ( +/obj/effect/turf_decal/warning_stripes/nscenter{ + dir = 4 + }, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"dIo" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"dIV" = ( +/obj/structure/dispenser, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/mining) +"dJo" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"dJy" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"dKa" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/south) +"dKe" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"dKv" = ( +/obj/effect/landmark/corpsespawner/colonist, +/turf/open/floor/tile/chapel{ + dir = 4 + }, +/area/daedalusprison/inside/chapel) +"dLg" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest/garbledradio) +"dLh" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/security/warden) +"dLr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/reinforced/weak, +/obj/item/storage/surgical_tray, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"dLt" = ( +/turf/open/floor/mainship/purple, +/area/daedalusprison/caves/research) +"dLM" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"dLO" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"dMl" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"dMn" = ( +/obj/structure/table/reinforced/weak, +/obj/item/clothing/gloves/insulated, +/obj/effect/decal/cleanable/cobweb{ + dir = 4 + }, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"dMO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/interrogation) +"dMW" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"dNI" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison/bright_clean/two, +/area/daedalusprison/inside/gym) +"dNJ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 2 + }, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/daedalusprison/inside/colonydorms) +"dNP" = ( +/obj/machinery/space_heater, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/whitepurple{ + dir = 9 + }, +/area/daedalusprison/inside/medical) +"dNV" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"dOb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"dOh" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"dOi" = ( +/obj/item/weapon/gun/revolver/judge, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"dOu" = ( +/obj/effect/landmark/xeno_silo_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north) +"dOT" = ( +/obj/structure/bed, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"dPa" = ( +/turf/closed/wall/r_wall, +/area/daedalusprison/inside/bunker) +"dPl" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic/canteen{ + name = "\improper Colony Administration" + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"dPQ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/lobby) +"dPS" = ( +/obj/item/weapon/gun/shotgun/pump/cmb, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"dPT" = ( +/obj/machinery/light, +/turf/open/floor/prison/darkbrown{ + dir = 6 + }, +/area/daedalusprison/inside/mining) +"dPX" = ( +/obj/structure/cable, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"dQa" = ( +/turf/open/floor/mainship/purple{ + dir = 1 + }, +/area/daedalusprison/caves/research) +"dQc" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"dQm" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red/corner{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"dQv" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/cameras) +"dQI" = ( +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/security/warden) +"dQO" = ( +/obj/structure/table/reinforced/weak, +/turf/open/floor/prison/darkred{ + dir = 10 + }, +/area/daedalusprison/inside/westernbooth) +"dRn" = ( +/obj/structure/table, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"dRs" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationnorth) +"dRC" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"dRF" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"dSz" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"dSD" = ( +/obj/structure/bed/chair/dropship/passenger{ + dir = 4 + }, +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"dSE" = ( +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"dSK" = ( +/obj/machinery/disposal, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"dTg" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + name = "Classroom" + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/northclass) +"dTw" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/interrogation) +"dTM" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"dTW" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/habitationsouth) +"dTZ" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"dUp" = ( +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"dUT" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"dVi" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"dVz" = ( +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest/garbledradio) +"dVH" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"dVP" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/lobby) +"dWd" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/office) +"dWz" = ( +/obj/machinery/door/airlock/mainship/security/glass/free_access{ + dir = 1; + name = "\improper Barrack Storage" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"dWT" = ( +/obj/effect/decal/cleanable/blood, +/obj/structure/cable, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/westernbooth) +"dXk" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"dXo" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/effect/decal/cleanable/blood, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"dXs" = ( +/obj/structure/table/woodentable, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/green{ + dir = 8 + }, +/area/daedalusprison/inside/southclass) +"dXG" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest/garbledradio) +"dXL" = ( +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/north) +"dXU" = ( +/obj/item/lightstick/red/anchored, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/north) +"dYk" = ( +/obj/structure/table/mainship, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"dYH" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest/garbledradio) +"dYO" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/brown2/corner, +/area/daedalusprison/inside/cargo) +"dYX" = ( +/obj/item/reagent_containers/dropper, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"dZv" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"dZz" = ( +/obj/machinery/door/airlock/dropship_hatch/left/two, +/turf/open/shuttle/dropship/three, +/area/daedalusprison/inside/pmcdropship) +"dZR" = ( +/turf/open/floor/prison/darkbrown{ + dir = 4 + }, +/area/daedalusprison/inside/mining) +"eam" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/darkpurple{ + dir = 4 + }, +/area/daedalusprison/inside/janitorial) +"ean" = ( +/obj/machinery/light, +/obj/structure/bookcase, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"eas" = ( +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"eaw" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/tile/chapel{ + dir = 4 + }, +/area/daedalusprison/inside/chapel) +"eaT" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/lobby) +"eaV" = ( +/turf/closed/shuttle/dropship2/enginethree{ + dir = 8 + }, +/area/daedalusprison/inside/pmcdropship) +"ebl" = ( +/obj/structure/stairs/seamless, +/obj/machinery/door/poddoor/shutters/mainship/open{ + dir = 1; + id = "UD6"; + name = "\improper Shutters" + }, +/turf/open/floor/plating, +/area/daedalusprison/inside/pmcdropship) +"ebp" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/darkbrown{ + dir = 5 + }, +/area/daedalusprison/inside/mining) +"ebw" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall/prison, +/area/daedalusprison/inside/southclass) +"ebD" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"ebN" = ( +/obj/machinery/air_alarm{ + dir = 4 + }, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"ect" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"ecx" = ( +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/secbreakroom) +"edt" = ( +/obj/structure/bed/chair/comfy, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"edx" = ( +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"edE" = ( +/obj/structure/table/mainship, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"edO" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/mining) +"eeh" = ( +/obj/structure/barricade/wooden{ + dir = 4 + }, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"eem" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted, +/obj/structure/table/reinforced/weak, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"eey" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/cameras) +"eeG" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"eeH" = ( +/obj/structure/prop/vehicle/truck/truckcargo/destructible, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/garage) +"eeZ" = ( +/turf/closed/wall, +/area/daedalusprison/inside/hydroponics) +"efe" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"eff" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationnorth) +"efq" = ( +/obj/effect/acid_hole, +/turf/closed/wall/prison, +/area/daedalusprison/inside/freezer) +"efF" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/dark/red2{ + dir = 8 + }, +/area/daedalusprison/inside/seccheckpoint) +"efN" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"efO" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"efS" = ( +/obj/effect/decal/cleanable/blood/gibs/body, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/centralhalls) +"egs" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/bloodpack, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"egI" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"ehh" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"ehG" = ( +/obj/machinery/vending/cola, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"ehH" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/outside/east) +"ehP" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 6 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"ehY" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/cellstripe, +/area/daedalusprison/inside/habitationsouth) +"eid" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"ejr" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/interrogation) +"ejE" = ( +/obj/structure/prop/computer/broken/nine, +/turf/open/floor/tile/dark/red2{ + dir = 4 + }, +/area/daedalusprison/inside/seccheckpoint) +"ejG" = ( +/obj/machinery/light, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"ejW" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"ekb" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"ekH" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"ekV" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"elc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"eld" = ( +/obj/structure/sink{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"elH" = ( +/turf/open/floor/tile/green/greentaupe{ + dir = 9 + }, +/area/daedalusprison/inside/hydroponics) +"elS" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"elT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"emh" = ( +/obj/machinery/vending/cola, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"emm" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/heal_pack, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical/treatment) +"emE" = ( +/obj/structure/closet/secure_closet/security, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"emF" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/northclass) +"emM" = ( +/obj/structure/rack, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/gym) +"emS" = ( +/obj/machinery/door/airlock/multi_tile/mainship/medidoor{ + name = "Treatment"; + dir = 1 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"enh" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/security/interrogation) +"enq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"enR" = ( +/obj/structure/rack, +/obj/item/stack/sheet/mineral/phoron, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/mining) +"eos" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"eou" = ( +/obj/machinery/smartfridge/seeds, +/turf/open/floor/prison/green{ + dir = 4 + }, +/area/daedalusprison/inside/prisongarden) +"eoA" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"eoH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/corpsespawner/prison_security, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"eoJ" = ( +/obj/structure/bed/chair/comfy, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/security/easternbooth) +"epa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"epd" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"epm" = ( +/obj/structure/table, +/obj/item/tool/scythe, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"epN" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/item/tool/pen{ + pixel_y = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"eqt" = ( +/obj/structure/bed/chair/office/dark/east, +/obj/effect/decal/cleanable/blood/gibs/xeno, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"eqx" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 9 + }, +/obj/item/weapon/gun/rifle/m16, +/turf/open/shuttle/dropship/three, +/area/daedalusprison/inside/pmcdropship) +"eqA" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/computer/secure_data, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/cameras) +"eqC" = ( +/obj/machinery/hydroponics/slashable, +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/prisongarden) +"eqW" = ( +/obj/machinery/computer/arcade, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"erd" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"erf" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/green{ + dir = 8 + }, +/area/daedalusprison/inside/prisongarden) +"erg" = ( +/turf/open/floor/prison/darkbrown{ + dir = 8 + }, +/area/daedalusprison/inside/mining) +"eri" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/firstaid, +/turf/open/floor/prison/whitegreen{ + dir = 10 + }, +/area/daedalusprison/inside/medical/treatment) +"ery" = ( +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"erA" = ( +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"erJ" = ( +/obj/vehicle/train/cargo/trolley, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/daedalusprison/inside/cargo) +"esg" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/mining) +"esl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"esy" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"esP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"esT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"etR" = ( +/obj/item/ammo_casing/shell, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"eum" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/green2, +/area/daedalusprison/inside/colonydorms) +"euC" = ( +/obj/machinery/vending/snack, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"evh" = ( +/obj/structure/window_frame/prison/reinforced, +/obj/item/shard, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"evi" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/east) +"evq" = ( +/obj/item/paper/crumpled, +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/center) +"evy" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"evD" = ( +/obj/structure/table/mainship, +/obj/item/tool/kitchen/tray, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"evX" = ( +/turf/open/floor/prison/darkred{ + dir = 5 + }, +/area/daedalusprison/inside/easternhalls) +"ewq" = ( +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/southeast) +"ewu" = ( +/obj/structure/cable, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/obj/machinery/power/apc/drained, +/turf/open/floor/prison/darkyellow{ + dir = 5 + }, +/area/daedalusprison/inside/sportstorage) +"ewM" = ( +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/north) +"ewP" = ( +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"ewY" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"exh" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"exk" = ( +/turf/open/floor/prison/darkred{ + dir = 5 + }, +/area/daedalusprison/inside/sportstorage) +"exm" = ( +/obj/structure/closet/l3closet/janitor, +/turf/open/floor/prison/darkpurple{ + dir = 4 + }, +/area/daedalusprison/inside/janitorial) +"exu" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"eyg" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"eAn" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 1 + }, +/obj/machinery/light, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"eAp" = ( +/obj/structure/table/reinforced/weak, +/obj/item/storage/firstaid/adv, +/turf/open/floor/prison/whitegreen{ + dir = 4 + }, +/area/daedalusprison/inside/medical) +"eAB" = ( +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"eAF" = ( +/obj/machinery/vending/MarineMed/Blood, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"eAU" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"eBm" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, +/turf/open/shuttle/dropship/three, +/area/daedalusprison/inside/pmcdropship) +"eBn" = ( +/turf/closed/shuttle/dropship2/panels{ + dir = 8 + }, +/area/daedalusprison/inside/pmcdropship) +"eBo" = ( +/turf/closed/shuttle/dropship2/corners{ + dir = 4 + }, +/area/daedalusprison/inside/pmcdropship) +"eBU" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/paperbin, +/turf/open/floor/tile/blue/whiteblue, +/area/daedalusprison/inside/southmeetingroom) +"eBW" = ( +/obj/machinery/door/airlock/mainship/security/glass/free_access{ + dir = 2; + name = "Security Booth" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/easternbooth) +"eCd" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/orange{ + dir = 8 + }, +/area/daedalusprison/caves/research) +"eCq" = ( +/obj/structure/table/reinforced/weak, +/obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_mlaser, +/obj/item/cell/lasgun/lasrifle, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"eDa" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/chapel, +/area/daedalusprison/inside/chapel) +"eDj" = ( +/obj/machinery/air_alarm, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"eDn" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"eEa" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, +/obj/machinery/power/apc/drained{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"eEm" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"eEF" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"eEG" = ( +/obj/effect/ai_node, +/turf/open/shuttle/dropship/three, +/area/daedalusprison/inside/pmcdropship) +"eEP" = ( +/obj/item/tool/surgery/scalpel, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"eEQ" = ( +/obj/machinery/power/port_gen/pacman/super, +/obj/structure/cable, +/turf/open/floor/plating, +/area/daedalusprison/caves/nukestorage) +"eFB" = ( +/obj/structure/girder, +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating, +/area/daedalusprison/inside/mining) +"eFI" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/northclass) +"eFJ" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/habitationnorth) +"eFP" = ( +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/northclass) +"eFT" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitegreen{ + dir = 4 + }, +/area/daedalusprison/inside/medical) +"eFX" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/tile/dark/green2, +/area/daedalusprison/inside/colonydorms) +"eGh" = ( +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"eGw" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"eGz" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"eGQ" = ( +/turf/open/floor/podhatch/floor, +/area/daedalusprison/inside/engineering) +"eHc" = ( +/obj/item/trash/cigbutt/cigarbutt, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"eHf" = ( +/obj/structure/closet/secure_closet/hydroponics, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"eHh" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"eHi" = ( +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north) +"eHk" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"eHs" = ( +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical/treatment) +"eHA" = ( +/obj/machinery/light, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/office) +"eHS" = ( +/obj/structure/closet/secure_closet/personal, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisonshower) +"eIf" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/engineering/tool, +/obj/machinery/light, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker) +"eIo" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark/green2{ + dir = 6 + }, +/area/daedalusprison/inside/colonydorms) +"eIU" = ( +/obj/effect/landmark/patrol_point/tgmc_14, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"eIZ" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/darkyellow{ + dir = 9 + }, +/area/daedalusprison/inside/mechanicshop) +"eJd" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"eJm" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"eJo" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/gym) +"eJp" = ( +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/tile/chapel, +/area/daedalusprison/inside/chapel) +"eJB" = ( +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"eJC" = ( +/obj/machinery/computer/intel_computer, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"eJE" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/northmeetingroom) +"eJQ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"eJV" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/secbreakroom) +"eKr" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/office) +"eKE" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"eLL" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitepurple/corner{ + dir = 8 + }, +/area/daedalusprison/inside/medical/chemistry) +"eLO" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic/canteen{ + name = "\improper Dormitories Computer Lab" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"eMj" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/daedalusprison/inside/habitationsouth) +"eMt" = ( +/obj/machinery/vending/coffee, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"eMN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/obj/item/stack/sheet/metal, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"eNA" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"eNF" = ( +/turf/closed/shuttle/dropship2/front{ + dir = 4 + }, +/area/daedalusprison/inside/pmcdropship) +"eOa" = ( +/obj/structure/table/reinforced/weak, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationsouth) +"eOb" = ( +/obj/structure/device/piano/full, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"eOs" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"eOu" = ( +/obj/structure/toilet{ + dir = 8 + }, +/turf/open/floor/prison/cellstripe{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"eOQ" = ( +/obj/structure/closet/crate/ammo, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"ePs" = ( +/obj/structure/table/mainship, +/obj/effect/decal/cleanable/blood, +/obj/item/storage/briefcase, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"ePD" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/electrical, +/turf/open/floor/plating, +/area/daedalusprison/inside/colonydorms) +"ePK" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"ePM" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"ePZ" = ( +/obj/machinery/door/airlock/mainship/medical/glass/free_access{ + name = "\improper Prison Freezer" + }, +/obj/structure/cable, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/freezer) +"eQn" = ( +/obj/effect/landmark/corpsespawner/engineer, +/turf/open/floor/tile/brown/full, +/area/daedalusprison/inside/engineering) +"eQM" = ( +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"eQN" = ( +/obj/machinery/vending/coffee, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/daedalusprison/inside/southmeetingroom) +"eQZ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"eRd" = ( +/obj/effect/decal/cleanable/blood/gibs, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"eRt" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/prison/darkyellow{ + dir = 10 + }, +/area/daedalusprison/inside/mechanicshop) +"eRN" = ( +/obj/structure/table/mainship, +/obj/item/tool/minihoe, +/turf/open/floor/prison/green{ + dir = 8 + }, +/area/daedalusprison/inside/prisongarden) +"eSh" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"eSo" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"eSp" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"eSx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/northclass) +"eSz" = ( +/obj/machinery/vending/medical, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"eSK" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green{ + dir = 9 + }, +/area/daedalusprison/inside/westcomputerlab) +"eSN" = ( +/obj/structure/bed/chair/dropship/passenger{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/turf/open/shuttle/dropship/six, +/area/daedalusprison/inside/pmcdropship) +"eTn" = ( +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/easternhalls) +"eTs" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"eUj" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 8 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"eUp" = ( +/obj/machinery/door/airlock/mainship/medical/glass{ + name = "\improper Hydroponics Break Room" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"eUx" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/decal/cleanable/blood, +/obj/effect/landmark/weed_node, +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"eUF" = ( +/obj/machinery/newscaster, +/turf/closed/wall, +/area/daedalusprison/inside/southmeetingroom) +"eUT" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"eVm" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/corporateoffice) +"eVL" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"eVO" = ( +/obj/machinery/computer/intel_computer, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"eVT" = ( +/turf/open/floor/prison/green{ + dir = 4 + }, +/area/daedalusprison/inside/westcomputerlab) +"eWB" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"eWZ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"eXq" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north) +"eXs" = ( +/turf/open/floor/plating, +/area/daedalusprison/inside/habitationsouth) +"eXu" = ( +/obj/machinery/door/airlock/multi_tile/mainship/medidoor{ + name = "Medical Offices" + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"eXF" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/westernbooth) +"eXR" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/brown2{ + dir = 8 + }, +/area/daedalusprison/inside/cargo) +"eXT" = ( +/obj/machinery/door/airlock/mainship/medical/glass/free_access{ + name = "\improper Dormitories Kitchen" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"eXX" = ( +/obj/machinery/door/poddoor/timed_late/containment/landing_zone, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/daedalusprison/inside/corporateoffice) +"eYa" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "engi_mech" + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"eYn" = ( +/obj/structure/table/mainship, +/obj/item/flashlight/lamp, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"eYR" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/clothing/sunglasses, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/habitationsouth) +"eYY" = ( +/obj/structure/window_frame/prison/reinforced, +/obj/item/shard, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/cameras) +"eZg" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/daedalusprison/inside/cargo) +"eZo" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest/garbledradio) +"eZJ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"eZU" = ( +/turf/open/floor/prison/green{ + dir = 4 + }, +/area/daedalusprison/inside/southclass) +"eZX" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/westernbooth) +"fae" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"faA" = ( +/obj/structure/table/mainship, +/obj/item/clothing/head/chefhat, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"faD" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/plushie, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"faH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"faN" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + dir = 1; + name = "\improper Canteen" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"faU" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/barracks) +"fbs" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southwest) +"fbw" = ( +/obj/structure/rack, +/obj/item/stack/sheet/mineral/sandstone, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/mining) +"fbB" = ( +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"fbM" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"fch" = ( +/obj/machinery/vending/cigarette/colony, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"fcm" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitepurple, +/area/daedalusprison/inside/medical/chemistry) +"fcu" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/barracks) +"fcE" = ( +/obj/structure/cable, +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"fcS" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"fdf" = ( +/obj/structure/bed/bunkbed, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/barracks) +"fdz" = ( +/obj/structure/table/mainship, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"fdO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"fdV" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"fem" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"feW" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall/prison, +/area/daedalusprison/inside/medical) +"feX" = ( +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/north) +"feY" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"ffa" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"ffj" = ( +/obj/machinery/door/airlock/multi_tile/mainship/secdoor/glass{ + name = "\improper Prison Security Office"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"ffx" = ( +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"fgm" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/interrogation) +"fgD" = ( +/obj/structure/xenoautopsy/tank/hugger, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"fgX" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"fhl" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/gym) +"fhm" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/east) +"fhM" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"fhT" = ( +/obj/machinery/air_alarm{ + dir = 1 + }, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"fhY" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"fir" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/southwest) +"fiV" = ( +/obj/machinery/disposal, +/obj/machinery/light, +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/barracks) +"fiX" = ( +/turf/open/floor/mainship/orange{ + dir = 4 + }, +/area/daedalusprison/caves/research) +"fjf" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"fjp" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/dark/brown2, +/area/daedalusprison/inside/cargo) +"fjx" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/security/easternbooth) +"fjK" = ( +/obj/structure/table/mainship/nometal, +/obj/machinery/reagentgrinder, +/obj/item/stack/sheet/mineral/phoron, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"fjM" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/dark/green2{ + dir = 10 + }, +/area/daedalusprison/inside/colonydorms) +"fjP" = ( +/obj/effect/decal/cleanable/blood/oil, +/turf/open/floor/tile/dark/yellow2, +/area/daedalusprison/inside/engineering) +"fke" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"fkG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/hydroponics) +"fkQ" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/habitationsouth) +"fly" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"flP" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"fmc" = ( +/obj/structure/bed, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"fmi" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"fml" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/machinery/miner/damaged, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"fmw" = ( +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/security/easternbooth) +"fmx" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/blue/whiteblue{ + dir = 5 + }, +/area/daedalusprison/inside/southmeetingroom) +"fmA" = ( +/obj/structure/prop/mainship/gelida/miner, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"fmH" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/prisonshower) +"fmP" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationsouth) +"fmV" = ( +/obj/structure/barricade/metal, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"fnc" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/tile/brown/full, +/area/daedalusprison/inside/engineering) +"fnd" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"fng" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/cameras) +"fnq" = ( +/obj/structure/sign/chemistry{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"fnz" = ( +/obj/machinery/light, +/turf/open/floor/prison/green, +/area/daedalusprison/inside/westcomputerlab) +"fof" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green{ + dir = 8 + }, +/area/daedalusprison/inside/northclass) +"foA" = ( +/obj/structure/rack, +/turf/open/floor/plating, +/area/daedalusprison/caves/nukestorage) +"foG" = ( +/obj/machinery/door/airlock/multi_tile/mainship/secdoor/glass{ + name = "\improper Eastern Bunker" + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/east) +"foQ" = ( +/obj/effect/turf_decal/tracks/wheels/bloody, +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red/corner, +/area/daedalusprison/inside/habitationnorth) +"foR" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"foU" = ( +/obj/effect/landmark/corpsespawner/scientist, +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitepurple, +/area/daedalusprison/inside/medical) +"fpd" = ( +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/security/warden) +"fpf" = ( +/obj/effect/landmark/xeno_tunnel_spawn, +/turf/open/floor/rustyplating, +/area/daedalusprison/inside/substation) +"fpK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"fqd" = ( +/obj/machinery/power/apc{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/darkyellow{ + dir = 8 + }, +/area/daedalusprison/inside/mechanicshop) +"fqe" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/computer/security{ + network = list("PRISON") + }, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/easternbooth) +"fqt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"fqx" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southwest) +"fqJ" = ( +/obj/structure/table/gamblingtable, +/obj/item/toy/dice, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"fqU" = ( +/obj/vehicle/ridden/wheelchair{ + dir = 1 + }, +/turf/open/floor/prison/whitegreen{ + dir = 6 + }, +/area/daedalusprison/inside/medical) +"fre" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/sportstorage) +"frw" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison, +/area/daedalusprison/inside/studyroom) +"frY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"fsm" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"fsq" = ( +/turf/open/floor/prison/darkred{ + dir = 6 + }, +/area/daedalusprison/inside/easternhalls) +"fsW" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/barracks) +"ftw" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"ftC" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"ftS" = ( +/obj/structure/table/reinforced/weak, +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/center) +"ftT" = ( +/turf/open/floor/mainship/purple{ + dir = 8 + }, +/area/daedalusprison/caves/research) +"ftW" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"fuY" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"fvb" = ( +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north) +"fvO" = ( +/turf/open/floor/tile/dark/brown2{ + dir = 8 + }, +/area/daedalusprison/inside/cargo) +"fvS" = ( +/obj/effect/spawner/random/misc/structure/cabinet, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"fwd" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"fwe" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/misc/paperbin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/tool/pen{ + pixel_y = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/security/warden) +"fwO" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/machinery/vending/nanomed{ + dir = 8 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"fxk" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/machinery/door/airlock/multi_tile/mainship/medidoor{ + name = "Surgery Lobby" + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"fxl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"fxO" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"fya" = ( +/obj/structure/table/mainship, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"fyj" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/northeast) +"fyk" = ( +/obj/structure/closet/crate, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/auxstorage) +"fyy" = ( +/obj/structure/prop/computer/broken/three, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"fyE" = ( +/obj/structure/cable, +/obj/machinery/power/apc{ + dir = 4 + }, +/obj/machinery/light, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker) +"fyL" = ( +/obj/item/ammo_casing/shell, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"fyR" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/plating, +/area/daedalusprison/inside/hydroponics) +"fzb" = ( +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/red/full, +/area/daedalusprison/inside/security/office) +"fzY" = ( +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"fAk" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/northeast) +"fAl" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor, +/area/daedalusprison/inside/hydroponicstesting) +"fAs" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/green/greentaupe{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"fBp" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"fBr" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"fBv" = ( +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/south) +"fBx" = ( +/obj/structure/rack, +/obj/item/weapon/gun/shotgun/pump/cmb, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/barracks) +"fCn" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/open/floor/plating, +/area/daedalusprison/inside/centralhalls) +"fCq" = ( +/obj/effect/landmark/xeno_tunnel_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast) +"fCy" = ( +/obj/machinery/light, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"fCO" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/obj/item/ammo_casing/bullet, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"fDl" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"fDS" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"fDX" = ( +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"fEa" = ( +/turf/open/floor/prison/red/corner{ + dir = 1 + }, +/area/daedalusprison/inside/gym) +"fEd" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"fEg" = ( +/obj/structure/cable, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/power/apc/drained{ + dir = 8 + }, +/turf/open/floor/plating, +/area/daedalusprison/inside/easternhalls) +"fEj" = ( +/obj/machinery/door/airlock/mainship/medical/or/free_access{ + dir = 2; + name = "\improper Therapy Office" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"fEo" = ( +/obj/machinery/biogenerator, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"fET" = ( +/obj/structure/table/reinforced/weak, +/obj/item/ammo_casing, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"fFn" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/barracks) +"fFs" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/center) +"fFI" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/decal/cleanable/blood, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"fGk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"fGR" = ( +/obj/structure/bed/chair/comfy, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"fHT" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"fHX" = ( +/obj/structure/barricade/metal, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"fIf" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/center) +"fIg" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/item/ammo_casing/shell, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"fIn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/sheet/metal, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"fIP" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"fIU" = ( +/obj/item/reagent_containers/glass/bucket/janibucket, +/obj/item/tool/mop, +/turf/open/floor/prison/darkpurple{ + dir = 4 + }, +/area/daedalusprison/inside/janitorial) +"fJl" = ( +/obj/machinery/light, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/barracks) +"fJr" = ( +/obj/item/ammo_magazine/rifle/m16, +/obj/effect/decal/cleanable/blood/gibs/xeno, +/turf/open/shuttle/dropship/three, +/area/daedalusprison/inside/pmcdropship) +"fJB" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 1 + }, +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 8 + }, +/obj/structure/prop/mainship/gelida/lightstick{ + pixel_x = 7; + pixel_y = 17 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"fKn" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"fKE" = ( +/obj/structure/cable, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"fKV" = ( +/obj/effect/turf_decal/warning_stripes/thick/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"fLa" = ( +/obj/machinery/vending/snack, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/green/greentaupe{ + dir = 9 + }, +/area/daedalusprison/inside/hydroponics) +"fLe" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 5 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"fLo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"fLA" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/southwest) +"fLN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"fLR" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/plating, +/area/daedalusprison/inside/easternhalls) +"fLS" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"fLW" = ( +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"fMf" = ( +/obj/effect/spawner/random/medical/organ, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical/treatment) +"fMj" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/security/warden) +"fMS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"fNb" = ( +/obj/structure/closet/wardrobe/orange, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"fNy" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"fNC" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/health_analyzer, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"fNE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen{ + dir = 4 + }, +/area/daedalusprison/inside/medical) +"fNQ" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/habitationnorth) +"fOb" = ( +/obj/structure/sink{ + dir = 8 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationnorth) +"fOk" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"fOx" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/lobby) +"fPf" = ( +/obj/machinery/light, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"fPp" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/effect/ai_node, +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"fPL" = ( +/obj/structure/prop/mainship/gelida/smallwire, +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 4 + }, +/obj/structure/prop/mainship/gelida/lightstick{ + pixel_x = -8; + pixel_y = 7 + }, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/northeast) +"fPM" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/easternhalls) +"fPO" = ( +/obj/structure/flora/ausbushes/stalkybush, +/obj/machinery/light, +/turf/open/ground/grass/weedable, +/area/daedalusprison/inside/hydroponics) +"fPW" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"fQb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"fQf" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"fQT" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/effect/spawner/random/misc/structure/supplycrate, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"fRA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/disposal, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"fRE" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"fSm" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"fSL" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"fSP" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green, +/area/daedalusprison/inside/prisongarden) +"fSV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"fSW" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/janitorial) +"fTz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/filingcabinet, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"fTR" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"fTS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"fUs" = ( +/obj/item/weapon/gun/shotgun/pump/cmb, +/obj/effect/ai_node, +/turf/open/floor/prison/red/corner{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"fUE" = ( +/obj/machinery/door/airlock/mainship/generic{ + name = "\improper Dormitory Unit" + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"fVj" = ( +/obj/effect/ai_node, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"fVm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"fVK" = ( +/obj/machinery/door/airlock/multi_tile/mainship/secdoor/glass{ + name = "\improper Prison Habitation Control" + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"fWe" = ( +/obj/machinery/door/airlock/multi_tile/mainship/medidoor{ + name = "Infirmary" + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"fWC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"fWG" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/turf/open/floor/prison/darkred/corners, +/area/daedalusprison/inside/security/easternbooth) +"fWI" = ( +/obj/structure/stairs/seamless{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/easternhalls) +"fWP" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/centralhalls) +"fXg" = ( +/obj/structure/table/mainship, +/obj/item/storage/box/donkpockets, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/secbreakroom) +"fXz" = ( +/obj/structure/table/reinforced/weak, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/westernbooth) +"fXJ" = ( +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/mining) +"fXM" = ( +/obj/effect/landmark/excavation_site_spawner, +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest/garbledradio) +"fYh" = ( +/obj/structure/table, +/obj/effect/spawner/random/misc/seeds, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"fYQ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/blue/whiteblue, +/area/daedalusprison/inside/southmeetingroom) +"fYV" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"fZC" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"gal" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"gaE" = ( +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/green, +/area/daedalusprison/inside/northclass) +"gaR" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"gbb" = ( +/obj/machinery/space_heater, +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"gbt" = ( +/obj/machinery/door/airlock/mainship/secure/free_access{ + name = "Execution Chamber" + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"gbA" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"gbG" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/northclass) +"gbY" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"gcb" = ( +/obj/structure/table, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"gck" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/red/corner{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"gcT" = ( +/obj/structure/rack, +/turf/open/floor/prison/darkred{ + dir = 6 + }, +/area/daedalusprison/inside/security/easternbooth) +"gdj" = ( +/obj/structure/table/mainship, +/obj/item/phone, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"gdW" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north) +"gef" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/plushie, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"geq" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/interrogation) +"geF" = ( +/turf/open/floor/plating, +/area/daedalusprison/inside/laundromat) +"geX" = ( +/obj/structure/bookcase, +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/east) +"gfi" = ( +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/obj/item/ammo_casing/shell, +/turf/open/floor/prison/red{ + dir = 6 + }, +/area/daedalusprison/inside/barracks) +"gfH" = ( +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"gfL" = ( +/obj/structure/punching_bag, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/gym) +"gfR" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"ggV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"ghq" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"ghx" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"ghP" = ( +/obj/item/stack/sheet/metal, +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/northeast) +"giM" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"gje" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/tile/barber, +/area/daedalusprison/inside/corporateoffice) +"gjh" = ( +/obj/effect/landmark/sensor_tower, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"gju" = ( +/obj/machinery/floodlight/landing, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"gjy" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/barracks) +"gjz" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"gjK" = ( +/obj/structure/window/framed/colony/reinforced, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/center) +"gjZ" = ( +/obj/structure/bed/chair/comfy, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"gkl" = ( +/turf/open/floor/prison/darkyellow{ + dir = 8 + }, +/area/daedalusprison/inside/mechanicshop) +"glb" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"gld" = ( +/turf/closed/shuttle/dropship2/finleft{ + dir = 1 + }, +/area/daedalusprison/inside/pmcdropship) +"glg" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/medhud, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"glm" = ( +/obj/machinery/vending/cola, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"glD" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"glI" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/gibs/xeno, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"glQ" = ( +/obj/structure/bed/chair/comfy, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"glU" = ( +/obj/effect/landmark/corpsespawner/doctor/burst, +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/purple, +/area/daedalusprison/caves/research) +"gmt" = ( +/turf/open/floor/tile/dark/green2{ + dir = 4 + }, +/area/daedalusprison/inside/colonydorms) +"gmu" = ( +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"gmx" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"gmB" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison, +/area/daedalusprison/inside/janitorial) +"gnl" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/blue/whiteblue{ + dir = 6 + }, +/area/daedalusprison/inside/southmeetingroom) +"gnq" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"gnH" = ( +/obj/structure/window/reinforced, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/habitationsouth) +"gnN" = ( +/turf/open/floor/prison/red, +/area/daedalusprison/inside/barracks) +"gnV" = ( +/obj/structure/closet/wardrobe/orange, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"gow" = ( +/obj/structure/reagent_dispensers/wallmounted/peppertank, +/turf/open/floor/tile/dark2, +/area/daedalusprison/caves/nukestorage) +"goz" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/barricade/wooden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"goE" = ( +/turf/open/floor/prison/darkred/corners{ + dir = 4 + }, +/area/daedalusprison/inside/easternhalls) +"goQ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"goR" = ( +/turf/open/floor/prison/darkbrown{ + dir = 1 + }, +/area/daedalusprison/inside/mining) +"goT" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"gpe" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/seeds, +/turf/open/floor/prison/green{ + dir = 4 + }, +/area/daedalusprison/inside/prisongarden) +"gpi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/multi_tile/mainship/medidoor{ + dir = 2; + name = "Infirmary Foyer" + }, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"gpG" = ( +/turf/open/floor/prison/darkred{ + dir = 5 + }, +/area/daedalusprison/inside/lobby) +"gqp" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/west) +"gqK" = ( +/obj/machinery/griddle, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"gqX" = ( +/obj/structure/window/reinforced, +/turf/open/floor/wood, +/area/daedalusprison/inside/habitationsouth) +"gri" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/security/medsec) +"gro" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/barracks) +"grM" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/green/greentaupe{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"grY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"gsi" = ( +/obj/item/ammo_casing/bullet, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"gsr" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"gsw" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"gsE" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/pillbottle, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"gsG" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/mining) +"gsL" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/lobby) +"gsR" = ( +/obj/item/ammo_magazine/rifle/m16, +/obj/item/organ/xenos/eggsac, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"gto" = ( +/obj/machinery/disposal, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"guj" = ( +/obj/structure/table/woodentable, +/obj/machinery/chem_dispenser/beer{ + dir = 8 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"guG" = ( +/obj/structure/table/mainship, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"guR" = ( +/obj/machinery/door/airlock/mainship/secure/free_access{ + dir = 2; + name = "Interrogation" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/interrogation) +"guS" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"gvJ" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"gwg" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north) +"gwh" = ( +/obj/effect/spawner/random/misc/plant, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light, +/turf/open/floor/prison/red{ + dir = 6 + }, +/area/daedalusprison/inside/habitationsouth) +"gwr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"gwK" = ( +/obj/structure/table/mainship, +/obj/structure/cable, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"gwR" = ( +/obj/structure/rack, +/obj/item/toy/katana, +/turf/open/floor/prison, +/area/daedalusprison/inside/sportstorage) +"gwS" = ( +/obj/machinery/power/smes/buildable/empty{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/mainship/orange{ + dir = 10 + }, +/area/daedalusprison/caves/research) +"gxa" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/daedalusprison/inside/hydroponics) +"gxh" = ( +/obj/structure/table/mainship, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/reagent_containers/spray/cleaner, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"gxH" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/ai_node, +/turf/open/floor/prison/red/corner{ + dir = 4 + }, +/area/daedalusprison/inside/habitationsouth) +"gxU" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"gxX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/gibs/xeno, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"gyf" = ( +/obj/machinery/atmospherics/pipe/manifold4w/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"gyi" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/darkred{ + dir = 9 + }, +/area/daedalusprison/inside/easternhalls) +"gyW" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"gyY" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/dark/brown2/corner, +/area/daedalusprison/inside/cargo) +"gzg" = ( +/obj/item/stack/tile, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"gzn" = ( +/obj/machinery/space_heater, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 9 + }, +/area/daedalusprison/inside/barracks) +"gzt" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"gzH" = ( +/obj/machinery/vending/cola, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"gzR" = ( +/obj/machinery/vending/cola, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"gzV" = ( +/obj/effect/landmark/patrol_point/som/som_12, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest/garbledradio) +"gAD" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"gAE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"gAL" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"gBf" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationsouth) +"gBI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"gCp" = ( +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/secbreakroom) +"gCq" = ( +/obj/effect/turf_decal/tracks/wheels/bloody, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"gCs" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"gCy" = ( +/obj/structure/table/mainship, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"gCD" = ( +/obj/effect/landmark/corpsespawner/engineer, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"gCS" = ( +/obj/structure/closet/crate/trashcart, +/obj/item/clothing/under/rank/prisoner, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"gDm" = ( +/obj/effect/landmark/patrol_point/som/som_22, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast) +"gDy" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"gEf" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"gEi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"gEp" = ( +/obj/effect/decal/cleanable/blood/gibs, +/obj/structure/cable, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/freezer) +"gEt" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"gES" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"gFR" = ( +/obj/structure/prop/mainship/gelida/smallwire, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"gGe" = ( +/obj/structure/sign/securearea, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"gGH" = ( +/obj/effect/acid_hole, +/turf/closed/wall/prison, +/area/daedalusprison/inside/studyroom) +"gGK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"gGM" = ( +/obj/structure/table/mainship, +/obj/structure/prop/computer/broken/fourteen, +/turf/open/floor/tile/dark/brown2/corner, +/area/daedalusprison/inside/cargo) +"gHb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"gHr" = ( +/obj/machinery/vending/snack, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/daedalusprison/inside/southmeetingroom) +"gHu" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"gHx" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/machinery/power/apc/drained, +/obj/effect/mapping_helpers/broken_apc/lowchance, +/turf/open/floor/prison/red{ + dir = 9 + }, +/area/daedalusprison/inside/security/cameras) +"gIb" = ( +/obj/structure/window/framed/colony/reinforced, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker) +"gIi" = ( +/obj/item/tool/shovel/spade, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"gIL" = ( +/obj/structure/nuke_disk_candidate{ + set_associations = list("set1") + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/studyroom) +"gIY" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/cellstripe{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"gJu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"gJA" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/brown2{ + dir = 9 + }, +/area/daedalusprison/inside/cargo) +"gJX" = ( +/obj/structure/table/woodentable, +/obj/item/paper, +/obj/item/tool/pen/blue{ + pixel_x = 5 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"gKO" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 4 + }, +/turf/open/floor/tile/chapel{ + dir = 8 + }, +/area/daedalusprison/inside/chapel) +"gKW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"gLb" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 8 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"gLv" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/east) +"gLx" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/chapel) +"gLX" = ( +/obj/effect/landmark/xeno_tunnel_spawn, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationnorth) +"gLZ" = ( +/obj/structure/table/reinforced/weak, +/obj/item/storage/donut_box, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"gMk" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southwest) +"gMl" = ( +/obj/structure/table/mainship, +/obj/item/tool/pen/blue{ + pixel_x = 5 + }, +/obj/item/paper, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"gMD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"gMQ" = ( +/obj/structure/table, +/obj/item/reagent_containers/dropper, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"gNl" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"gNw" = ( +/obj/effect/landmark/corpsespawner/doctor, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"gNO" = ( +/obj/effect/ai_node, +/turf/open/ground/grass/weedable, +/area/daedalusprison/inside/hydroponics) +"gNR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"gOC" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/northeast) +"gOI" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"gPf" = ( +/obj/structure/table/mainship, +/obj/item/tool/soap/nanotrasen, +/obj/item/tool/soap/nanotrasen, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"gPC" = ( +/obj/structure/rack, +/obj/item/reagent_containers/spray/pepper, +/obj/item/reagent_containers/spray/pepper, +/turf/open/floor/tile/dark2, +/area/daedalusprison/caves/nukestorage) +"gPP" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"gPV" = ( +/obj/machinery/hydroponics/slashable, +/turf/open/floor/prison/green, +/area/daedalusprison/inside/prisongarden) +"gPZ" = ( +/obj/structure/bed/chair/wood/normal, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"gQg" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical/treatment) +"gQC" = ( +/obj/machinery/door/airlock/prison/horizontal/open, +/turf/open/floor/prison/red/full, +/area/daedalusprison/inside/habitationnorth) +"gQM" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"gQR" = ( +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"gQX" = ( +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/office) +"gRn" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/easternhalls) +"gRq" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"gRr" = ( +/obj/machinery/door/airlock/science{ + name = "\improper Biological Facility Power" + }, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"gRu" = ( +/turf/closed/wall, +/area/daedalusprison/inside/bar) +"gRx" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/secbreakroom) +"gRE" = ( +/obj/item/ammo_casing, +/obj/item/ammo_casing, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"gSz" = ( +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"gTx" = ( +/obj/effect/turf_decal/tracks/wheels/bloody, +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"gTE" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north) +"gUt" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/chapel, +/area/daedalusprison/inside/chapel) +"gUI" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southwest) +"gUJ" = ( +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/auxstorage) +"gUS" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationsouth) +"gUT" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/barber, +/area/daedalusprison/inside/corporateoffice) +"gVc" = ( +/obj/machinery/disposal, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"gVh" = ( +/obj/machinery/vending/medical/shipside, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"gVo" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/closet/secure_closet/security, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"gVy" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"gWb" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"gWd" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"gWk" = ( +/obj/effect/spawner/random/misc/trash, +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"gWm" = ( +/obj/structure/sink{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"gXB" = ( +/obj/structure/sink, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkpurple{ + dir = 1 + }, +/area/daedalusprison/inside/janitorial) +"gXS" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"gYf" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/item/electropack, +/obj/item/clothing/head/helmet, +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"gYm" = ( +/turf/open/floor/prison/green{ + dir = 10 + }, +/area/daedalusprison/inside/prisongarden) +"gYA" = ( +/obj/structure/cable, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"gYN" = ( +/obj/structure/bed/chair, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"gYQ" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"gZr" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"gZC" = ( +/obj/effect/landmark/sensor_tower, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"gZR" = ( +/obj/structure/table/reinforced/weak, +/obj/item/paper{ + pixel_x = 5 + }, +/obj/item/tool/pen, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"gZV" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"ham" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"haB" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"haE" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic/canteen{ + name = "\improper Dormitories Kitchen" + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"haJ" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/habitationsouth) +"haN" = ( +/obj/structure/filingcabinet, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/security/medsec) +"haT" = ( +/obj/machinery/conveyor, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"haV" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"hbo" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"hbE" = ( +/obj/structure/rack, +/obj/item/toy/beach_ball/basketball, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/sportstorage) +"hbO" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/tile/green/full, +/area/daedalusprison/inside/colonydorms) +"hch" = ( +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north) +"hcH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"hcT" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"hdd" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/food_or_drink/donut, +/obj/machinery/light, +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/habitationsouth) +"hde" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/green/greentaupe{ + dir = 9 + }, +/area/daedalusprison/inside/hydroponics) +"hdi" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"hdp" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"hdI" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"hdP" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/mainship/purple{ + dir = 8 + }, +/area/daedalusprison/caves/research) +"hfh" = ( +/obj/effect/ai_node, +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast) +"hfi" = ( +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/auxstorage) +"hfT" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/east) +"hge" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"hgg" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"hgm" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall/prison, +/area/daedalusprison/inside/mechanicshop) +"hgB" = ( +/obj/structure/rack, +/turf/open/floor/prison/darkyellow{ + dir = 8 + }, +/area/daedalusprison/inside/mechanicshop) +"hgQ" = ( +/obj/effect/landmark/weed_node, +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/darkred{ + dir = 9 + }, +/area/daedalusprison/inside/centralhalls) +"hgT" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/misc/paperbin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/tool/pen{ + pixel_x = 9; + pixel_y = 8 + }, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/westernbooth) +"hhg" = ( +/obj/item/reagent_containers/pill/tramadol, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/gym) +"hhz" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/office) +"hhT" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/security/cameras) +"his" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, +/obj/machinery/light, +/turf/open/floor/prison/whitepurple, +/area/daedalusprison/inside/medical/chemistry) +"hiC" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"hjv" = ( +/obj/machinery/air_alarm, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"hjB" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"hjK" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 8 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker) +"hjN" = ( +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"hko" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"hkv" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/centralhalls) +"hkX" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"hla" = ( +/obj/effect/turf_decal/warning_stripes/thick/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"hlH" = ( +/obj/item/ammo_casing/shell, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"hmB" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/recreation) +"hmI" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"hna" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"hnf" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/northmeetingroom) +"hno" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"hnv" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"hnJ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/barber, +/area/daedalusprison/inside/corporateoffice) +"hnN" = ( +/obj/structure/cable, +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"hoc" = ( +/obj/machinery/robotic_fabricator, +/turf/open/floor/prison/darkyellow{ + dir = 1 + }, +/area/daedalusprison/inside/mechanicshop) +"hoO" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/closed/mineral/smooth/darkfrostwall, +/area/daedalusprison/caves/rock) +"hoW" = ( +/obj/structure/table/reinforced/weak, +/obj/item/storage/donut_box, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"hpf" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/northeast) +"hpj" = ( +/obj/structure/mopbucket, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"hpl" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"hpT" = ( +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/kitchenknife, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"hqp" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"hqt" = ( +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"hqw" = ( +/obj/machinery/space_heater, +/obj/machinery/light, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"hqW" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"hrd" = ( +/obj/machinery/air_alarm{ + dir = 4 + }, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"hrh" = ( +/obj/item/ammo_casing/shell, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"hro" = ( +/obj/machinery/vending/security, +/turf/open/floor/prison/darkred{ + dir = 9 + }, +/area/daedalusprison/inside/security/easternbooth) +"hry" = ( +/obj/machinery/photocopier, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"hrW" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"hsG" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/southeast) +"hsO" = ( +/turf/closed/shuttle/dropship2/corners{ + dir = 1 + }, +/area/daedalusprison/inside/pmcdropship) +"hsQ" = ( +/obj/structure/bed/bunkbed, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationsouth) +"htp" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"htF" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/garage) +"htU" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"htV" = ( +/obj/structure/bed/chair{ + dir = 4; + pixel_x = 2; + pixel_y = 6 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/centralhalls) +"huf" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"huF" = ( +/obj/effect/acid_hole, +/turf/closed/wall/prison, +/area/daedalusprison/inside/westcomputerlab) +"huH" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/tile/blue/whiteblue, +/area/daedalusprison/inside/southmeetingroom) +"huW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"hvj" = ( +/obj/machinery/disposal, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"hvu" = ( +/obj/structure/bed/chair, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/interrogation) +"hvx" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/freezer, +/area/daedalusprison/inside/staffrestroom) +"hvJ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"hws" = ( +/obj/structure/table/mainship, +/obj/item/clipboard, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"hwA" = ( +/obj/item/weapon/gun/rifle/m16, +/turf/open/shuttle/dropship/eight, +/area/daedalusprison/inside/pmcdropship) +"hxg" = ( +/obj/effect/spawner/random/misc/trash, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"hxA" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/plushie, +/turf/open/floor/prison/darkyellow{ + dir = 4 + }, +/area/daedalusprison/inside/mechanicshop) +"hym" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/yellow2{ + dir = 8 + }, +/area/daedalusprison/inside/engineering) +"hyX" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"hzr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"hzF" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"hzQ" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/daedalusprison/inside/easternhalls) +"hzR" = ( +/obj/structure/table/reinforced/weak, +/obj/structure/prop/computer/broken/ten, +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/center) +"hzW" = ( +/turf/open/floor/plating, +/area/daedalusprison/inside/engineering) +"hAt" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/office) +"hAI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"hAK" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"hAM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/turf_decal/tracks/wheels/bloody, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"hAO" = ( +/obj/structure/flora/ausbushes/reedbush, +/turf/open/ground/grass/weedable, +/area/daedalusprison/inside/hydroponics) +"hBp" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/brown2{ + dir = 4 + }, +/area/daedalusprison/inside/cargo) +"hBw" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"hBB" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + name = "Garden" + }, +/turf/open/floor/prison/bright_clean/two, +/area/daedalusprison/inside/prisongarden) +"hBE" = ( +/obj/effect/landmark/dropship_start_location, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"hBX" = ( +/obj/structure/table, +/obj/effect/spawner/random/medical/beaker/largeweighted, +/obj/effect/spawner/random/medical/beaker/largeweighted, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"hCo" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"hCs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/gym) +"hCA" = ( +/obj/item/stack/sheet/plasteel, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"hCC" = ( +/obj/machinery/space_heater, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/red{ + dir = 9 + }, +/area/daedalusprison/inside/security/office) +"hCF" = ( +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/ground/grass/weedable, +/area/daedalusprison/inside/hydroponics) +"hCG" = ( +/turf/open/floor/plating, +/area/daedalusprison/inside/easternhalls) +"hCI" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/easternhalls) +"hCT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"hDt" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"hDU" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"hEa" = ( +/obj/machinery/firealarm{ + dir = 4 + }, +/turf/open/floor/prison/whitepurple{ + dir = 8 + }, +/area/daedalusprison/inside/medical/chemistry) +"hEL" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"hEM" = ( +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/north) +"hFj" = ( +/obj/item/ammo_casing, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"hFk" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/daedalusprison/inside/southmeetingroom) +"hFl" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"hFm" = ( +/obj/effect/spawner/random/misc/plant, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/darkred{ + dir = 5 + }, +/area/daedalusprison/inside/security/warden) +"hFn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"hFu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"hFv" = ( +/obj/structure/largecrate/random, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/auxstorage) +"hFw" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 9 + }, +/area/daedalusprison/inside/gym) +"hFF" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"hFK" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/red2/corner{ + dir = 4 + }, +/area/daedalusprison/inside/seccheckpoint) +"hGA" = ( +/obj/machinery/hydroponics/slashable, +/turf/open/floor/prison/green{ + dir = 5 + }, +/area/daedalusprison/inside/prisongarden) +"hGF" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/east) +"hGZ" = ( +/obj/structure/window_frame/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"hHk" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison, +/area/daedalusprison/inside/gym) +"hHD" = ( +/obj/machinery/door/airlock/mainship/medical/glass/free_access{ + name = "\improper Prison Computer Lab" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"hIg" = ( +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bar) +"hIr" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"hIy" = ( +/obj/structure/fence/broken, +/obj/structure/platform/rockcliff/icycliff/nondense, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/southwest) +"hIX" = ( +/obj/effect/spawner/random/misc/soap/regularweighted, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"hJm" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/ai_node, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"hJM" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"hJP" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"hKb" = ( +/obj/machinery/miner/damaged/platinum, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"hKz" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/secbreakroom) +"hLb" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"hLi" = ( +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/prisongarden) +"hLk" = ( +/obj/item/ammo_casing, +/obj/item/ammo_casing, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"hLl" = ( +/obj/structure/bed/chair/sofa/left, +/turf/open/floor/prison/whitepurple{ + dir = 5 + }, +/area/daedalusprison/inside/medical) +"hLR" = ( +/obj/structure/table/mainship, +/obj/item/storage/fancy/cigarettes, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"hMi" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/gym) +"hMy" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/closed/wall/prison, +/area/daedalusprison/inside/mining) +"hMS" = ( +/turf/open/floor/tile/dark/yellow2{ + dir = 4 + }, +/area/daedalusprison/inside/engineering) +"hNa" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"hNg" = ( +/obj/structure/table/mainship, +/obj/structure/mopbucket, +/turf/open/floor/prison/darkpurple{ + dir = 8 + }, +/area/daedalusprison/inside/janitorial) +"hNF" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"hNT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"hOg" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/heal_pack, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"hOl" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/obj/machinery/light, +/turf/open/floor/tile/dark/brown2, +/area/daedalusprison/inside/cargo) +"hOV" = ( +/obj/effect/landmark/corpsespawner/colonist, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"hOW" = ( +/obj/machinery/door/poddoor/timed_late/containment/landing_zone, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/daedalusprison/inside/secoffices) +"hPm" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"hPH" = ( +/obj/machinery/atmospherics/pipe/manifold4w/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"hPP" = ( +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/lobby) +"hQl" = ( +/turf/open/floor/freezer, +/area/daedalusprison/inside/staffrestroom) +"hQW" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/daedalusprison/inside/colonydorms) +"hRh" = ( +/obj/effect/spawner/random/medical/beaker, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"hRl" = ( +/obj/machinery/disposal, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"hRR" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"hSL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"hSM" = ( +/obj/structure/xenoautopsy/tank, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"hSN" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/medhud, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"hSR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"hTd" = ( +/obj/structure/cable, +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/southclass) +"hTf" = ( +/obj/structure/bed/chair{ + dir = 4; + pixel_x = 2; + pixel_y = 6 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"hTo" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"hTS" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"hUa" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/security/warden) +"hUb" = ( +/obj/machinery/atmospherics/components/unary/cryo_cell, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical/treatment) +"hUg" = ( +/obj/machinery/iv_drip, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"hUj" = ( +/obj/structure/table/woodentable, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/corporateoffice) +"hUv" = ( +/obj/effect/landmark/patrol_point/tgmc_12, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"hUT" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"hUV" = ( +/obj/structure/bed/chair/comfy, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green{ + dir = 4 + }, +/area/daedalusprison/inside/westcomputerlab) +"hUZ" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/office) +"hVR" = ( +/obj/structure/window/framed/prison/cell, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"hWe" = ( +/obj/machinery/hydroponics/slashable, +/turf/open/floor/prison/green{ + dir = 4 + }, +/area/daedalusprison/inside/prisongarden) +"hWu" = ( +/obj/machinery/chem_dispenser, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"hWD" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"hWR" = ( +/turf/open/floor/tile/chapel, +/area/daedalusprison/inside/chapel) +"hXk" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/mainship/purple, +/area/daedalusprison/caves/research) +"hYc" = ( +/obj/structure/rack, +/obj/item/toy/beach_ball/basketball, +/turf/open/floor/prison, +/area/daedalusprison/inside/sportstorage) +"hYm" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/daedalusprison/inside/habitationsouth) +"hYZ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"hZO" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"iaa" = ( +/obj/structure/bed/bunkbed, +/turf/open/floor/prison/red{ + dir = 9 + }, +/area/daedalusprison/inside/barracks) +"iam" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison, +/area/daedalusprison/inside/janitorial) +"iax" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitepurple{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"iaJ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/east) +"iaP" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/easternbooth) +"ibh" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/podhatch/floor, +/area/daedalusprison/inside/engineering) +"ibj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/easternhalls) +"ibl" = ( +/obj/structure/barricade/metal, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/centralhalls) +"ibE" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"ibG" = ( +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/easternhalls) +"ibH" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/medical/treatment) +"ibP" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + name = "Workshop" + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"icd" = ( +/obj/effect/turf_decal/tracks/wheels/bloody, +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"ics" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"idb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"idg" = ( +/obj/structure/table, +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"idh" = ( +/obj/structure/rack, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_x = 7; + pixel_y = 2 + }, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"idq" = ( +/obj/vehicle/ridden/wheelchair{ + dir = 1 + }, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"idx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"ieG" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"ieH" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/lobby) +"ieL" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + dir = 1; + name = "Meeting Room" + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/northmeetingroom) +"ifh" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/mainship/purple{ + dir = 1 + }, +/area/daedalusprison/caves/research) +"ifK" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"ifQ" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/door_control/old/checkpoint{ + id = "DPsec" + }, +/turf/open/floor/tile/dark/red2{ + dir = 8 + }, +/area/daedalusprison/inside/seccheckpoint) +"ige" = ( +/obj/structure/rack, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/gym) +"igU" = ( +/obj/effect/spawner/random/misc/book, +/turf/open/floor/tile/chapel, +/area/daedalusprison/inside/chapel) +"igX" = ( +/obj/item/ammo_casing/shell, +/obj/effect/spawner/random/misc/book, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"igY" = ( +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"ihw" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/whitegreen{ + dir = 4 + }, +/area/daedalusprison/inside/medical/treatment) +"ihy" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"ihO" = ( +/mob/living/simple_animal/cow, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/ground/grass/weedable, +/area/daedalusprison/inside/hydroponics) +"ihW" = ( +/turf/closed/wall/r_wall, +/area/daedalusprison/inside/bunker/center) +"iif" = ( +/obj/machinery/door/airlock/mainship/medical/or/free_access, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"iiH" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"ijq" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/prisongarden) +"ijy" = ( +/obj/structure/platform/nondense{ + dir = 4 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southwest) +"ijB" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"ijP" = ( +/obj/structure/cable, +/obj/machinery/power/apc{ + dir = 1 + }, +/obj/machinery/light, +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/west) +"iko" = ( +/obj/structure/table/woodentable, +/turf/open/floor/prison, +/area/daedalusprison/inside/northclass) +"ikq" = ( +/obj/effect/ai_node, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north/garbledradio) +"ikt" = ( +/obj/structure/table/woodentable, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 10 + }, +/area/daedalusprison/inside/corporateoffice) +"ikv" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"ikJ" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/tile/dark/yellow2{ + dir = 4 + }, +/area/daedalusprison/inside/engineering) +"ikS" = ( +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"ilh" = ( +/obj/machinery/power/apc{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/prison/green{ + dir = 6 + }, +/area/daedalusprison/inside/northclass) +"ils" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"ilP" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison/darkyellow{ + dir = 8 + }, +/area/daedalusprison/inside/mechanicshop) +"imt" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/turf/open/floor/prison/darkred/corners{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"imG" = ( +/obj/effect/ai_node, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"imI" = ( +/obj/structure/reagent_dispensers/beerkeg, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"imT" = ( +/obj/effect/spawner/random/misc/plant, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/obj/machinery/light, +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/habitationsouth) +"imU" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"inc" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north) +"inj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"ino" = ( +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/gym) +"inA" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast) +"inK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/misc/trash, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"inN" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"inQ" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/computer/security{ + network = list("PRISON") + }, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/cameras) +"inS" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"ioq" = ( +/obj/structure/table/mainship, +/obj/item/detective_scanner, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/secbreakroom) +"ios" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"iou" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"ioE" = ( +/obj/structure/bed/chair, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"ioH" = ( +/obj/structure/morgue{ + dir = 2 + }, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"ioP" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"ipg" = ( +/obj/machinery/door/airlock/hatch/cockpit/two, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"ipz" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/barracks) +"iqb" = ( +/obj/structure/barricade/metal{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"iqk" = ( +/obj/structure/cable, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"iql" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"iqw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"iqB" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"ira" = ( +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"irc" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 9 + }, +/area/daedalusprison/inside/habitationnorth) +"irn" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"irp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"irC" = ( +/obj/machinery/disposal, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationsouth) +"irL" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/engineering/engibelt, +/turf/open/floor/tile/dark/yellow2{ + dir = 8 + }, +/area/daedalusprison/inside/engineering) +"isl" = ( +/turf/open/floor/rustyplating, +/area/daedalusprison/caves/nukestorage) +"isn" = ( +/obj/structure/toilet{ + dir = 1 + }, +/turf/open/floor/prison/cellstripe, +/area/daedalusprison/inside/habitationnorth) +"isq" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"isD" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"isT" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/effect/ai_node, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/interrogation) +"isW" = ( +/obj/machinery/power/smes/buildable/empty{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"itt" = ( +/obj/effect/turf_decal/warning_stripes/thick/corner{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"iuh" = ( +/obj/structure/table/mainship, +/obj/structure/prop/computer/broken/twelve, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"iuq" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southwest) +"iuu" = ( +/obj/effect/decal/cleanable/greenglow, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"iuK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"ivc" = ( +/obj/item/reagent_containers/spray/plantbgone, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"ivm" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"ivx" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bar) +"ivA" = ( +/obj/machinery/atmospherics/pipe/manifold4w/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"ivP" = ( +/turf/open/floor/tile/green/greentaupecorner{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"iwv" = ( +/turf/open/floor/prison/whitegreen{ + dir = 6 + }, +/area/daedalusprison/inside/medical) +"iwG" = ( +/turf/open/floor/tile/dark/yellow2{ + dir = 1 + }, +/area/daedalusprison/inside/engineering) +"iwO" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/orange{ + dir = 5 + }, +/area/daedalusprison/caves/research) +"iwV" = ( +/obj/structure/curtain/medical, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"ixa" = ( +/obj/structure/bed/chair, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"ixk" = ( +/turf/closed/wall, +/area/daedalusprison/inside/cargo) +"ixl" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/darkred{ + dir = 10 + }, +/area/daedalusprison/inside/easternhalls) +"ixm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"ixI" = ( +/turf/open/floor/prison/green{ + dir = 10 + }, +/area/daedalusprison/inside/southclass) +"iyr" = ( +/obj/machinery/door/airlock/multi_tile/mainship/secdoor/glass{ + name = "\improper Central Bunker" + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/center) +"iys" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"iyC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"iyH" = ( +/obj/structure/closet/secure_closet/miner, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"iyM" = ( +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/habitationsouth) +"iyZ" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"izI" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"izW" = ( +/obj/structure/sink{ + pixel_y = 15 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"iAa" = ( +/turf/open/floor/prison/whitegreen{ + dir = 10 + }, +/area/daedalusprison/inside/medical) +"iAb" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"iAc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"iAi" = ( +/obj/structure/cable, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"iAo" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"iAN" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/computercircuit, +/turf/open/floor/tile/dark/yellow2{ + dir = 9 + }, +/area/daedalusprison/inside/engineering) +"iBe" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"iBg" = ( +/obj/structure/table/mainship, +/obj/structure/prop/computer/broken/eighteen, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"iBw" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"iCg" = ( +/obj/structure/filingcabinet/security, +/obj/machinery/light, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"iCv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"iCy" = ( +/turf/closed/wall/r_wall/prison, +/area/daedalusprison/inside/barracks) +"iDs" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/machinery/light, +/turf/open/floor/prison/darkbrown, +/area/daedalusprison/inside/mining) +"iDB" = ( +/obj/structure/sink{ + dir = 1 + }, +/obj/machinery/light, +/turf/open/floor/freezer, +/area/daedalusprison/inside/staffrestroom) +"iDW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"iEe" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitepurple, +/area/daedalusprison/inside/medical) +"iEx" = ( +/obj/structure/table/woodentable, +/turf/open/floor/prison/green, +/area/daedalusprison/inside/southclass) +"iED" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/mining) +"iET" = ( +/obj/machinery/door/poddoor/timed_late/containment/landing_zone{ + dir = 2 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"iEZ" = ( +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/barracks) +"iFl" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/easternhalls) +"iFn" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"iFy" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/heal_pack, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"iFB" = ( +/obj/effect/landmark/patrol_point/som/som_21, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast) +"iFK" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red/corner, +/area/daedalusprison/inside/security/office) +"iFS" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"iGd" = ( +/obj/structure/table, +/obj/item/clothing/gloves/botanic_leather, +/obj/item/clothing/gloves/botanic_leather, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"iGt" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/obj/item/clothing/mask/cigarette, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"iGv" = ( +/turf/open/floor/prison/red{ + dir = 9 + }, +/area/daedalusprison/inside/gym) +"iGD" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"iGH" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"iHc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/gibs/xeno, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"iHE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/turf/open/floor/tile/dark/brown2{ + dir = 4 + }, +/area/daedalusprison/inside/cargo) +"iHL" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/northmeetingroom) +"iHM" = ( +/obj/effect/landmark/corpsespawner/pmc, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"iIQ" = ( +/obj/machinery/computer/body_scanconsole, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"iIV" = ( +/obj/machinery/door/airlock/multi_tile/mainship/medidoor{ + dir = 2; + name = "Infirmary Foyer" + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"iIW" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/northclass) +"iIZ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"iJj" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"iJt" = ( +/obj/structure/bed/chair{ + dir = 4; + pixel_x = 1; + pixel_y = 3 + }, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"iJw" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/ai_node, +/turf/open/floor/mainship/purple{ + dir = 8 + }, +/area/daedalusprison/caves/research) +"iJy" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"iJO" = ( +/obj/structure/rack, +/obj/item/lightreplacer, +/turf/open/floor/tile/dark/yellow2{ + dir = 10 + }, +/area/daedalusprison/inside/engineering) +"iKg" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"iKj" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"iKN" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + name = "\improper Staff Bathrooms" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffrestroom) +"iKU" = ( +/obj/machinery/optable, +/obj/item/tank/anesthetic, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"iLe" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/effect/landmark/weed_node, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"iLz" = ( +/obj/item/ammo_casing/bullet, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/easternhalls) +"iLU" = ( +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"iLW" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"iMa" = ( +/obj/machinery/miner/damaged/platinum, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north/garbledradio) +"iMb" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 9 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"iMp" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/cable, +/turf/open/floor/prison/darkyellow{ + dir = 4 + }, +/area/daedalusprison/inside/mechanicshop) +"iMy" = ( +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"iMz" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/effect/spawner/random/machinery/random_broken_computer/small, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"iMC" = ( +/obj/effect/turf_decal/tracks/wheels/bloody, +/obj/effect/landmark/weed_node, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"iMK" = ( +/obj/structure/window/reinforced, +/obj/structure/table/woodentable, +/obj/item/flashlight/lamp/green, +/turf/open/floor/wood, +/area/daedalusprison/inside/habitationsouth) +"iMU" = ( +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonyauxstorage) +"iMY" = ( +/obj/machinery/door/airlock/mainship/generic{ + dir = 1; + name = "\improper Toilet Unit" + }, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"iNc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/obj/item/shard, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"iNP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"iOu" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"iOz" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"iOA" = ( +/obj/machinery/door/airlock/multi_tile/mainship/comdoor/free_access{ + dir = 2; + name = "Chief Warden's Office" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"iOD" = ( +/obj/effect/landmark/xeno_tunnel_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"iOG" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic/garden{ + name = "\improper Hydroponics" + }, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"iON" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/rustyplating, +/area/daedalusprison/caves/nukestorage) +"iPc" = ( +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast/garbledradio) +"iPy" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"iPF" = ( +/obj/structure/rack, +/obj/effect/spawner/random/weaponry/explosive/plastiqueexplosive/multiple, +/turf/open/floor/tile/dark2, +/area/daedalusprison/caves/nukestorage) +"iPY" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"iQm" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"iQO" = ( +/obj/structure/rack, +/obj/item/storage/box/gloves, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"iRg" = ( +/obj/item/tool/mop, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"iRi" = ( +/obj/structure/curtain/medical, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"iRr" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"iRV" = ( +/obj/structure/janitorialcart, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"iSu" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"iSx" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/freezer, +/area/daedalusprison/inside/staffrestroom) +"iSG" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/barracks) +"iSK" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"iSP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"iTd" = ( +/obj/machinery/bioprinter, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"iTh" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic/canteen{ + name = "\improper Colony Warehouse"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"iTJ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/outside/east) +"iTM" = ( +/obj/structure/bed/bunkbed, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationsouth) +"iTN" = ( +/obj/structure/table/gamblingtable, +/obj/item/toy/dice, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"iTO" = ( +/obj/effect/ai_node, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"iTP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"iUE" = ( +/obj/structure/prop/mainship/gelida/miner, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"iVz" = ( +/obj/effect/turf_decal/tracks/wheels/bloody, +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"iVY" = ( +/obj/structure/barricade/metal, +/turf/open/floor/prison/darkred{ + dir = 10 + }, +/area/daedalusprison/inside/centralhalls) +"iWd" = ( +/obj/effect/landmark/corpsespawner/bridgeofficer, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"iWe" = ( +/obj/effect/spawner/random/misc/structure/crate, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bar) +"iWf" = ( +/obj/effect/acid_hole, +/turf/closed/wall/prison, +/area/daedalusprison/inside/habitationsouth) +"iWh" = ( +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/cameras) +"iWs" = ( +/obj/machinery/gibber, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/freezer) +"iWw" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 2; + id = "DPgarage"; + name = "\improper Garage Shutters" + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/garage) +"iWV" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkyellow{ + dir = 1 + }, +/area/daedalusprison/inside/mechanicshop) +"iXr" = ( +/obj/structure/filingcabinet, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/brown/full, +/area/daedalusprison/inside/engineering) +"iXE" = ( +/obj/structure/table/mainship, +/obj/item/tool/pen/blue{ + pixel_x = 5 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/studyroom) +"iXS" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"iXV" = ( +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"iYg" = ( +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/barracks) +"iYD" = ( +/obj/machinery/power/smes/buildable/empty{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"iYJ" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"iZf" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + name = "Recreation" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/recreation) +"iZr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"jan" = ( +/obj/structure/hoop, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"jaB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"jbb" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"jbi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"jbA" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/kitchen) +"jca" = ( +/obj/structure/sink{ + pixel_y = 15 + }, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"jcb" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 4 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"jcg" = ( +/obj/item/ammo_casing/bullet, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"jch" = ( +/obj/structure/table/reinforced/weak, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"jcq" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/centralhalls) +"jcQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"jcZ" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"jdc" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"jdg" = ( +/obj/item/paper, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"jdm" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/east) +"jdn" = ( +/turf/closed/shuttle/dropship2/finright{ + dir = 1 + }, +/area/daedalusprison/inside/pmcdropship) +"jdu" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/yellow2{ + dir = 1 + }, +/area/daedalusprison/inside/engineering) +"jef" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"jfc" = ( +/obj/item/ammo_casing/shell, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"jfd" = ( +/obj/item/tool/scythe, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"jfw" = ( +/obj/structure/bookcase, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"jfE" = ( +/obj/structure/table/mainship, +/obj/item/detective_scanner, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/office) +"jfU" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"jfX" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"jfZ" = ( +/obj/structure/rack, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/darkred{ + dir = 5 + }, +/area/daedalusprison/inside/security/easternbooth) +"jgd" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/security/warden) +"jgk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"jgq" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"jgw" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"jgJ" = ( +/obj/structure/bed/chair/office/dark/west, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"jgT" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"jho" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/red/corner{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"jit" = ( +/obj/structure/cable, +/turf/open/floor/podhatch/floor, +/area/daedalusprison/inside/engineering) +"jiu" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/janitorial) +"jiL" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/recharger, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"jjz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"jjF" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"jjR" = ( +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/secbreakroom) +"jjU" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/east) +"jkh" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/daedalusprison/inside/medical) +"jkn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"jkx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"jkz" = ( +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/outside/south) +"jkJ" = ( +/obj/structure/bed/chair/dropship/passenger{ + dir = 8 + }, +/obj/item/ammo_casing/bullet, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"jkX" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"jkZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"jlg" = ( +/turf/open/floor/tile/dark/brown2/corner, +/area/daedalusprison/inside/cargo) +"jlh" = ( +/obj/machinery/floodlight/colony, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"jlk" = ( +/obj/item/weapon/gun/shotgun/double/derringer, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"jmi" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"jmw" = ( +/obj/structure/rack, +/obj/effect/spawner/random/weaponry/ammo/shotgun, +/obj/effect/spawner/random/weaponry/ammo/shotgun, +/obj/effect/spawner/random/weaponry/ammo/shotgun, +/obj/effect/spawner/random/weaponry/ammo/shotgun, +/obj/effect/spawner/random/weaponry/ammo/shotgun, +/obj/effect/spawner/random/weaponry/ammo/shotgun, +/obj/effect/spawner/random/weaponry/ammo/shotgun, +/obj/effect/spawner/random/weaponry/ammo/shotgun, +/obj/effect/spawner/random/weaponry/ammo/shotgun, +/obj/effect/spawner/random/weaponry/ammo/shotgun, +/obj/effect/spawner/random/weaponry/ammo/shotgun, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"jmy" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/prisongarden) +"jmF" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"jmL" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained{ + dir = 1 + }, +/turf/open/floor/mainship/orange, +/area/daedalusprison/caves/research) +"jnK" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/turf/open/floor/tile/chapel{ + dir = 4 + }, +/area/daedalusprison/inside/chapel) +"jnL" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"jnS" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"job" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"jof" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 6 + }, +/area/daedalusprison/inside/barracks) +"joz" = ( +/obj/structure/table/mainship, +/obj/machinery/reagentgrinder, +/obj/machinery/light, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"joJ" = ( +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"jpn" = ( +/obj/structure/table/woodentable, +/obj/machinery/faxmachine, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/corporateoffice) +"jpw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/tile/dark/brown2/corner, +/area/daedalusprison/inside/cargo) +"jpF" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/turf/open/floor/tile/dark/green2, +/area/daedalusprison/inside/colonydorms) +"jqd" = ( +/turf/closed/shuttle/dropship2/finback{ + dir = 1 + }, +/area/daedalusprison/inside/pmcdropship) +"jqs" = ( +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/habitationsouth) +"jqy" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/food_or_drink/packagedbar, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"jqE" = ( +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"jqR" = ( +/turf/closed/shuttle/dropship2/enginefive, +/area/daedalusprison/inside/pmcdropship) +"jrd" = ( +/obj/machinery/door/poddoor/timed_late/containment/landing_zone, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/daedalusprison/inside/colonyauxstorage) +"jrf" = ( +/obj/item/reagent_containers/glass/rag, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/gym) +"jrt" = ( +/obj/structure/table/reinforced/weak, +/obj/item/storage/surgical_tray, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical/treatment) +"jsq" = ( +/obj/structure/table/woodentable, +/obj/effect/spawner/random/misc/trash, +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"jsu" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"jtb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/shell, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"jtd" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"jto" = ( +/obj/machinery/computer/intel_computer, +/turf/open/floor/tile/dark/brown2/corner, +/area/daedalusprison/inside/cargo) +"jts" = ( +/obj/structure/window_frame/prison/reinforced, +/obj/item/shard, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"jtC" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/machinery/random_broken_computer/small, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"jtE" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"jtH" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/tile/green/greentaupe{ + dir = 5 + }, +/area/daedalusprison/inside/hydroponics) +"jtJ" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained{ + dir = 8 + }, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"jtX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"jud" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"juh" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest) +"jum" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/garage) +"juC" = ( +/obj/structure/closet/crate/hydroponics, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"jvf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"jvh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"jvp" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/garage) +"jwe" = ( +/obj/item/robot_parts/l_arm, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"jwh" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"jwU" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"jxn" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"jxu" = ( +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast) +"jxU" = ( +/obj/structure/cable, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/power/apc/drained, +/turf/open/floor/plating, +/area/daedalusprison/caves/nukestorage) +"jxY" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"jyM" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/sportstorage) +"jyY" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"jze" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 1 + }, +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 8 + }, +/obj/structure/prop/mainship/gelida/lightstick{ + pixel_x = 7; + pixel_y = 17 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"jzf" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering{ + name = "\improper Engineering Tool Storage" + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"jzq" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupe{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"jzv" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"jzL" = ( +/obj/machinery/air_alarm{ + dir = 4 + }, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"jzW" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark/brown2{ + dir = 4 + }, +/area/daedalusprison/inside/cargo) +"jAd" = ( +/obj/structure/closet/wardrobe/chaplain_black, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"jAk" = ( +/obj/effect/landmark/sensor_tower, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"jAn" = ( +/obj/effect/spawner/random/misc/plant, +/obj/machinery/light, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"jAv" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"jBa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/bullet, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/darkred/corners{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"jBm" = ( +/turf/open/floor/prison/cellstripe{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"jBt" = ( +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"jBv" = ( +/obj/item/ammo_casing, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/barracks) +"jBD" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/effect/ai_node, +/turf/open/floor/tile/green/greentaupe{ + dir = 6 + }, +/area/daedalusprison/inside/hydroponics) +"jCc" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 9 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/whitegreen{ + dir = 4 + }, +/area/daedalusprison/inside/medical/treatment) +"jCr" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/tile/dark/red2{ + dir = 4 + }, +/area/daedalusprison/inside/seccheckpoint) +"jCt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/disposal, +/turf/open/floor/prison/darkred{ + dir = 10 + }, +/area/daedalusprison/inside/easternhalls) +"jCA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/reinforced/weak, +/obj/item/bodybag/cryobag, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"jCH" = ( +/obj/machinery/door/airlock/multi_tile/mainship/secdoor/glass{ + dir = 1; + name = "\improper Security Checkpoint Offices" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/secoffices) +"jCI" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"jCU" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/daedalusprison/inside/southmeetingroom) +"jDi" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/machinery/light/small, +/obj/effect/landmark/weed_node, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"jDF" = ( +/obj/structure/bed/chair/office/dark, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"jDI" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/darkred/corners{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"jDJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/obj/effect/ai_node, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"jDZ" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"jEN" = ( +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"jEO" = ( +/obj/effect/spawner/random/engineering/shovel, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/northeast) +"jET" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/east) +"jEV" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + name = "Central Halls" + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"jFh" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/habitationsouth) +"jFB" = ( +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/mining) +"jFO" = ( +/obj/structure/cable, +/turf/open/floor/prison/whitepurple{ + dir = 1 + }, +/area/daedalusprison/inside/medical/chemistry) +"jFQ" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/effect/spawner/random/misc/paperbin{ + pixel_x = -3; + pixel_y = 7 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"jFS" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"jGD" = ( +/obj/effect/landmark/weed_node, +/obj/structure/table/reinforced/weak, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/westernbooth) +"jGF" = ( +/obj/structure/bed/chair/office/dark, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"jHF" = ( +/obj/item/tool/kitchen/rollingpin, +/obj/structure/table/mainship, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"jHM" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"jHN" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/easternhalls) +"jHV" = ( +/obj/structure/table, +/obj/item/tool/lighter/zippo, +/obj/item/clothing/mask/cigarette, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"jHX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"jIf" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"jIi" = ( +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"jIk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"jIL" = ( +/obj/effect/ai_node, +/turf/open/floor/podhatch/floor, +/area/daedalusprison/inside/engineering) +"jJc" = ( +/obj/machinery/hydroponics, +/obj/effect/landmark/weed_node, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"jJi" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/turf/open/floor/prison/green{ + dir = 8 + }, +/area/daedalusprison/inside/northclass) +"jJj" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"jJz" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/daedalusprison/inside/southmeetingroom) +"jJB" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"jJV" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"jKj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/daedalusprison/inside/cargo) +"jKs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"jKB" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"jKL" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitegreen/corner{ + dir = 1 + }, +/area/daedalusprison/inside/medical/treatment) +"jLz" = ( +/obj/machinery/iv_drip, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"jMj" = ( +/obj/structure/cable, +/obj/machinery/power/geothermal, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"jMm" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/security/warden) +"jMO" = ( +/obj/effect/spawner/random/clothing/darkgloves, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"jMX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/gym) +"jNN" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"jOr" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/effect/landmark/corpsespawner/prisoner/burst, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"jOL" = ( +/obj/structure/table/mainship, +/obj/item/storage/box/donkpockets, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/barracks) +"jOU" = ( +/obj/machinery/miner/damaged, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/north) +"jPp" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"jPE" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison, +/area/daedalusprison/inside/gym) +"jPF" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/purple, +/area/daedalusprison/caves/research) +"jQj" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/darkred{ + dir = 6 + }, +/area/daedalusprison/inside/security/easternbooth) +"jQA" = ( +/obj/machinery/light, +/turf/open/floor/tile/dark/red2, +/area/daedalusprison/inside/seccheckpoint) +"jQJ" = ( +/obj/structure/table/mainship, +/obj/item/clothing/head/chefhat, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"jQS" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"jQT" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"jRm" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/obj/item/ammo_casing, +/obj/item/ammo_casing, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/barracks) +"jRr" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"jRu" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating, +/area/daedalusprison/inside/centralhalls) +"jRA" = ( +/obj/structure/table/reinforced/weak, +/obj/item/reagent_containers/glass/beaker/cryomix{ + name = "cryo beaker" + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"jSo" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/item/weapon/gun/shotgun/pump/cmb, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/centralhalls) +"jSt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"jSy" = ( +/obj/structure/bed/chair/office/dark/east, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"jSU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"jTf" = ( +/obj/effect/spawner/random/engineering/structure/random_tank_holder, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"jTk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"jTp" = ( +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/northclass) +"jTI" = ( +/obj/structure/barricade/wooden{ + dir = 8 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"jTJ" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/food_or_drink/packagedbar, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"jUJ" = ( +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"jUK" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic/garden{ + name = "\improper Hydroponics Break Room" + }, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"jVj" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/habitationnorth) +"jVr" = ( +/obj/item/shard, +/obj/effect/landmark/weed_node, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/whitepurple{ + dir = 4 + }, +/area/daedalusprison/inside/medical/chemistry) +"jVv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"jVC" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/whitepurple{ + dir = 6 + }, +/area/daedalusprison/inside/medical/chemistry) +"jVD" = ( +/obj/item/ammo_magazine/rifle/m16, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"jVF" = ( +/obj/machinery/vending/security, +/turf/open/floor/tile/dark/red2{ + dir = 4 + }, +/area/daedalusprison/inside/seccheckpoint) +"jVH" = ( +/obj/machinery/miner/damaged, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"jVK" = ( +/obj/structure/table/reinforced/weak, +/obj/item/defibrillator, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"jWh" = ( +/obj/structure/dropship_piece/two/engine/rightbottom, +/turf/closed/shuttle/dropship2/engineone{ + dir = 8 + }, +/area/daedalusprison/inside/pmcdropship) +"jWC" = ( +/turf/closed/shuttle/dropship2/finleft{ + dir = 8 + }, +/area/daedalusprison/inside/pmcdropship) +"jWF" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"jWT" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"jXp" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/structure/cargo_container/ch_green{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"jXr" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/medical) +"jXI" = ( +/obj/machinery/shower{ + dir = 8 + }, +/obj/effect/ai_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"jXV" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"jXW" = ( +/obj/machinery/conveyor{ + dir = 5 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"jYe" = ( +/obj/machinery/computer/intel_computer, +/obj/machinery/light, +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/habitationsouth) +"jYf" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 5 + }, +/area/daedalusprison/inside/centralhalls) +"jYo" = ( +/obj/structure/bed/chair/office/dark/east, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"jYq" = ( +/turf/closed/wall, +/area/daedalusprison/caves/research) +"jYz" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/darkred{ + dir = 6 + }, +/area/daedalusprison/inside/centralhalls) +"jYY" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red/corner{ + dir = 1 + }, +/area/daedalusprison/inside/security/office) +"jZb" = ( +/obj/structure/table/mainship, +/obj/item/storage/pouch/surgery, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"jZt" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue, +/area/daedalusprison/inside/southmeetingroom) +"jZT" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/secbreakroom) +"kac" = ( +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/daedalusprison/inside/cargo) +"kaT" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"kbj" = ( +/obj/machinery/griddle, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"kbt" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/ground/grass/weedable, +/area/daedalusprison/inside/hydroponics) +"kbA" = ( +/obj/structure/table, +/obj/item/clothing/suit/storage/apron, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"kbJ" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/barber, +/area/daedalusprison/inside/corporateoffice) +"kbK" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/green/greentaupe{ + dir = 10 + }, +/area/daedalusprison/inside/hydroponics) +"kbO" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationsouth) +"kbV" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"kci" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic/canteen{ + name = "\improper Colony Warehouse" + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"kcw" = ( +/obj/structure/table/mainship, +/obj/item/paper, +/obj/item/tool/pen/blue{ + pixel_x = 5 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"kcC" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/green/greentaupe{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"kcK" = ( +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"kcM" = ( +/obj/structure/platform{ + dir = 4 + }, +/turf/closed/shuttle/dropship2/walltwo/alt, +/area/daedalusprison/inside/pmcdropship) +"kcY" = ( +/turf/open/floor/tile/dark/green2/corner{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"kdk" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"kdZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/darkred{ + dir = 6 + }, +/area/daedalusprison/inside/centralhalls) +"keo" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/interrogation) +"keu" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/closed/shuttle/dropship2/wallthree/alt, +/area/daedalusprison/inside/pmcdropship) +"keX" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/security/cameras) +"keZ" = ( +/obj/effect/ai_node, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationsouth) +"kfd" = ( +/obj/machinery/disposal, +/turf/open/floor/tile/green/greentaupe{ + dir = 9 + }, +/area/daedalusprison/inside/hydroponics) +"kfj" = ( +/obj/machinery/door_control{ + id = "UD6"; + name = "Cargo Shutter Control" + }, +/turf/closed/shuttle/dropship2/aisle{ + dir = 8 + }, +/area/daedalusprison/inside/pmcdropship) +"kfq" = ( +/obj/item/tool/mop, +/turf/open/floor/tile/chapel{ + dir = 8 + }, +/area/daedalusprison/inside/chapel) +"kfN" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"kfV" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"kga" = ( +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"kgs" = ( +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/shuttle/dropship/five, +/area/daedalusprison/inside/pmcdropship) +"kgY" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/tile/dark/green2{ + dir = 4 + }, +/area/daedalusprison/inside/colonydorms) +"khg" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/gym) +"khC" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/daedalusprison/inside/southmeetingroom) +"khN" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"khV" = ( +/obj/machinery/computer/forensic_scanning, +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/security/office) +"kij" = ( +/obj/structure/bed/chair/comfy/black, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"kir" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"kiE" = ( +/obj/effect/spawner/random/misc/plant, +/obj/effect/landmark/weed_node, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/habitationsouth) +"kiG" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"kiJ" = ( +/obj/effect/decal/cleanable/blood/oil, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"kiM" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"kiW" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/barracks) +"kji" = ( +/obj/effect/landmark/start/job/xenomorph, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"kjI" = ( +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/dark/green2, +/area/daedalusprison/inside/colonydorms) +"kjO" = ( +/obj/machinery/vending/snack, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"kjY" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"kkg" = ( +/obj/item/ammo_casing/bullet, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/secbreakroom) +"kkz" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 2; + id = "DPgarage"; + name = "\improper Garage Shutters" + }, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/garage) +"klg" = ( +/obj/structure/table, +/obj/effect/spawner/random/misc/seeds, +/obj/machinery/light, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"kmi" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"kmp" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"kmw" = ( +/turf/open/floor/mainship/purple{ + dir = 4 + }, +/area/daedalusprison/caves/research) +"kmS" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"kmU" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/red/corner{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"kna" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"kns" = ( +/obj/machinery/light/small, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/habitationnorth) +"knE" = ( +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/sportstorage) +"kon" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark/green2{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"koT" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"koX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"kpe" = ( +/obj/machinery/door/airlock/multi_tile/mainship/secdoor/glass{ + name = "\improper Prison Security Office"; + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"kpH" = ( +/obj/structure/bed/chair, +/turf/open/floor/wood, +/area/daedalusprison/inside/centralhalls) +"kqj" = ( +/obj/item/lightstick/red/anchored, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/northeast) +"kqm" = ( +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/structure/window/reinforced/tinted, +/obj/structure/table/reinforced/weak, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"kqD" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/east) +"kqV" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"krj" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"krx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"krB" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"krJ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"krN" = ( +/obj/effect/landmark/corpsespawner/scientist, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"kse" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/easternhalls) +"ksy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"ksz" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisongarden) +"ksN" = ( +/obj/effect/decal/cleanable/blood, +/obj/item/ammo_casing/shell, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"ksT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"ktc" = ( +/obj/structure/table/reinforced/weak, +/obj/item/phone, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"ktd" = ( +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"kte" = ( +/obj/structure/prison_sign, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"ktk" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/centralhalls) +"kts" = ( +/obj/machinery/shower{ + dir = 8 + }, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"ktu" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"ktX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"kuD" = ( +/obj/structure/bed/bunkbed, +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/barracks) +"kuN" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"kuZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"kvg" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"kvp" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"kvA" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/lobby) +"kvF" = ( +/obj/item/clothing/gloves/latex, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"kvN" = ( +/obj/structure/table/mainship, +/obj/item/tool/pen/blue{ + pixel_x = 5 + }, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"kwt" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/barracks) +"kwE" = ( +/obj/effect/ai_node, +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"kxl" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"kxn" = ( +/obj/structure/cable, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/medsec) +"kxp" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"kyj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"kyB" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + dir = 1; + name = "Sports Storage" + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/sportstorage) +"kza" = ( +/turf/closed/wall, +/area/daedalusprison/inside/hydroponicstesting) +"kzh" = ( +/obj/effect/landmark/corpsespawner/colonist, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"kzl" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/sportstorage) +"kzn" = ( +/obj/machinery/shower, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"kzo" = ( +/obj/structure/table/mainship, +/obj/machinery/chem_master/condimaster, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"kzq" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"kzw" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"kzx" = ( +/obj/structure/table/mainship, +/obj/item/stack/sheet/metal, +/turf/open/floor/prison/darkyellow{ + dir = 4 + }, +/area/daedalusprison/inside/mechanicshop) +"kzG" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/blue/whiteblue{ + dir = 10 + }, +/area/daedalusprison/inside/southmeetingroom) +"kAe" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"kAz" = ( +/turf/open/floor/tile/barber, +/area/daedalusprison/inside/corporateoffice) +"kAD" = ( +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/northeast) +"kAE" = ( +/obj/structure/table/mainship, +/obj/machinery/light, +/obj/item/storage/pill_bottle/tramadol, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/gym) +"kAX" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"kBa" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/closet/secure_closet/security, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"kBm" = ( +/obj/machinery/door/airlock/mainship/security/glass/free_access{ + name = "Prison Camera Station" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"kCn" = ( +/obj/structure/sink{ + dir = 1 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"kCB" = ( +/obj/structure/table/reinforced/weak, +/obj/item/tool/pen, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"kCO" = ( +/turf/closed/shuttle/dropship2/enginefive{ + dir = 1 + }, +/area/daedalusprison/inside/pmcdropship) +"kDk" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/red/full, +/area/daedalusprison/inside/security/office) +"kDL" = ( +/obj/structure/cable, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"kDS" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 4 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"kEp" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/east) +"kEx" = ( +/obj/item/clothing/suit/storage/apron, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"kEG" = ( +/obj/item/lightstick/red/anchored, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/north) +"kEH" = ( +/obj/item/shard, +/obj/structure/window_frame/prison/reinforced, +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"kFj" = ( +/obj/machinery/disposal, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"kFx" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic/canteen{ + name = "\improper Colony Bar"; + dir = 1 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"kFE" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/closed/wall/prison, +/area/daedalusprison/inside/kitchen) +"kGo" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/structure/cargo_container/gorg, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"kGu" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/freezer) +"kGE" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/east) +"kGQ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"kHc" = ( +/obj/structure/table, +/obj/item/storage/box/botanydisk, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"kHl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"kHo" = ( +/obj/structure/prop/mainship/gelida/smallwire, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"kHM" = ( +/obj/item/clothing/suit/storage/RO{ + name = "\improper UA jacket" + }, +/obj/effect/ai_node, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/turf/open/shuttle/dropship/three, +/area/daedalusprison/inside/pmcdropship) +"kIc" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"kIn" = ( +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southwest) +"kID" = ( +/obj/effect/spawner/random/misc/structure/flavorvending, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"kIH" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark/green2{ + dir = 5 + }, +/area/daedalusprison/inside/colonydorms) +"kIV" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"kJn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical/treatment) +"kJs" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"kJz" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/closed/wall/prison, +/area/daedalusprison/inside/library) +"kJE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 2 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"kJF" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/westcomputerlab) +"kJW" = ( +/obj/machinery/atmospherics/pipe/manifold4w/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"kKe" = ( +/obj/structure/table/reinforced/weak, +/obj/item/ashtray/bronze, +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/west) +"kKm" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 10 + }, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"kKt" = ( +/obj/structure/cable, +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/center) +"kLw" = ( +/obj/structure/table/mainship/nometal, +/obj/item/reagent_containers/glass/beaker/large, +/turf/open/floor/prison/whitepurple{ + dir = 1 + }, +/area/daedalusprison/inside/medical/chemistry) +"kLT" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"kMf" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/obj/structure/cable, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"kMA" = ( +/obj/machinery/space_heater, +/turf/open/ground/grass/weedable, +/area/daedalusprison/inside/hydroponics) +"kMZ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/security/easternbooth) +"kNe" = ( +/obj/machinery/space_heater, +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"kNt" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/turf/open/floor/tile/dark/brown2, +/area/daedalusprison/inside/cargo) +"kNu" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/security/warden) +"kNw" = ( +/obj/effect/ai_node, +/turf/open/floor/plating, +/area/daedalusprison/inside/colonyauxstorage) +"kNG" = ( +/obj/structure/filingcabinet/medical, +/turf/open/floor/tile/blue/whiteblue{ + dir = 6 + }, +/area/daedalusprison/inside/southmeetingroom) +"kNO" = ( +/obj/effect/landmark/weed_node, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/darkyellow{ + dir = 4 + }, +/area/daedalusprison/inside/mechanicshop) +"kNX" = ( +/obj/machinery/vending/cola, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/secbreakroom) +"kOb" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/mainship/purple{ + dir = 6 + }, +/area/daedalusprison/caves/research) +"kOm" = ( +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast) +"kOs" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"kOL" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4 + }, +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"kPm" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/east) +"kPp" = ( +/obj/item/tool/wet_sign, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"kPu" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/green/greentaupe{ + dir = 5 + }, +/area/daedalusprison/inside/hydroponics) +"kPv" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/red/full, +/area/daedalusprison/inside/security/office) +"kPw" = ( +/obj/effect/landmark/corpsespawner/colonist, +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"kPy" = ( +/obj/machinery/vending/sovietsoda, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"kPP" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor/tile/chapel{ + dir = 8 + }, +/area/daedalusprison/inside/chapel) +"kPT" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"kQE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/gym) +"kQL" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"kQS" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"kQU" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"kQX" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/effect/ai_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"kRH" = ( +/obj/structure/table/reinforced/weak, +/obj/item/cell/lasgun/lasrifle, +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/west) +"kRL" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"kSm" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"kSn" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/effect/spawner/random/misc/paperbin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"kSA" = ( +/obj/machinery/computer/intel_computer, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/office) +"kSB" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"kSF" = ( +/obj/structure/closet/firecloset/full, +/obj/effect/decal/cleanable/cobweb{ + dir = 8 + }, +/obj/machinery/light/small, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"kSX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"kTg" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/tile/dark/yellow2{ + dir = 1 + }, +/area/daedalusprison/inside/engineering) +"kTn" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/green{ + dir = 4 + }, +/area/daedalusprison/inside/northmeetingroom) +"kTS" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/daedalusprison/inside/colonydorms) +"kTW" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/red/corner, +/area/daedalusprison/inside/security/office) +"kUu" = ( +/turf/open/floor/prison/green{ + dir = 8 + }, +/area/daedalusprison/inside/northmeetingroom) +"kUH" = ( +/obj/effect/decal/cleanable/blood, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"kUP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/xenoautopsy/jar_shelf, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"kVa" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"kVd" = ( +/turf/open/floor/prison/red{ + dir = 6 + }, +/area/daedalusprison/inside/habitationnorth) +"kVp" = ( +/obj/structure/sink{ + dir = 4 + }, +/obj/structure/mirror{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"kVE" = ( +/obj/structure/cable, +/obj/machinery/floodlight/landing, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"kVY" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/easternhalls) +"kWe" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"kWl" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"kWq" = ( +/obj/structure/filingcabinet, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/security/easternbooth) +"kWs" = ( +/obj/machinery/light, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"kWA" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"kWS" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"kXc" = ( +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"kXA" = ( +/obj/machinery/door/airlock/multi_tile/mainship/medidoor{ + name = "Medical Storage" + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"kYc" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"kYd" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"kYg" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/outside/east) +"kYx" = ( +/obj/effect/landmark/weed_node, +/obj/machinery/miner/damaged/platinum, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north) +"kYS" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north) +"kYX" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"kZf" = ( +/obj/machinery/space_heater, +/obj/machinery/light, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"kZm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"kZn" = ( +/turf/open/floor/prison/red/corner{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"kZx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/studyroom) +"kZF" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"laj" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/cellstripe{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"law" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green{ + dir = 4 + }, +/area/daedalusprison/inside/northclass) +"laF" = ( +/obj/structure/rack, +/obj/item/weapon/gun/rifle/m16, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"lbz" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/cellstripe, +/area/daedalusprison/inside/habitationnorth) +"lbQ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"lcl" = ( +/obj/effect/landmark/start/job/xenomorph, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north) +"lcA" = ( +/obj/structure/table/mainship, +/obj/machinery/processor, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"lcB" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"lcQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"lcZ" = ( +/obj/structure/cable, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/obj/machinery/power/apc/drained, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"ldf" = ( +/obj/structure/rack, +/obj/item/stack/sheet/mineral/tritium, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/mining) +"ldo" = ( +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/shuttle/dropship/three, +/area/daedalusprison/inside/pmcdropship) +"ldp" = ( +/obj/machinery/door/poddoor/mainship{ + dir = 2; + id = "checkpoint1" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"ldq" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/north) +"ldN" = ( +/obj/machinery/door/poddoor/timed_late/containment/landing_zone, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/daedalusprison/inside/bunker) +"lee" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"leH" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"leI" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"leS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"leW" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/item/weapon/twohanded/spear, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"lfm" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"lfJ" = ( +/obj/structure/table, +/obj/item/tool/hatchet{ + pixel_x = 6; + pixel_y = 4 + }, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"lfK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"lfZ" = ( +/obj/machinery/space_heater, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"lgc" = ( +/obj/effect/turf_decal/warning_stripes/thick/corner, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"lgg" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"lhk" = ( +/obj/structure/bed/chair, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"lhM" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"lhW" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"lie" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/darkred/corners{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"liI" = ( +/turf/closed/mineral/smooth/darkfrostwall, +/area/daedalusprison/caves/rock) +"lja" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"ljo" = ( +/obj/structure/cable, +/obj/machinery/power/apc{ + dir = 1 + }, +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 6 + }, +/area/daedalusprison/inside/westernbooth) +"ljp" = ( +/obj/effect/acid_hole, +/turf/closed/wall/prison, +/area/daedalusprison/inside/medical) +"ljq" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"ljr" = ( +/obj/structure/table/woodentable, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"ljP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/gym) +"lkc" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/tile/green/greentaupe{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"lkz" = ( +/obj/structure/bed/chair/sofa/right, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitepurple{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"lkE" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/turf_decal/tracks/wheels/bloody, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"lkJ" = ( +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"lkN" = ( +/obj/effect/decal/cleanable/blood, +/obj/item/shard, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/secbreakroom) +"lkU" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"lll" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"lmx" = ( +/turf/closed/shuttle/dropship2/interiormisc{ + dir = 8 + }, +/area/daedalusprison/inside/pmcdropship) +"lmN" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/green/greentaupe{ + dir = 10 + }, +/area/daedalusprison/inside/hydroponics) +"lne" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/sportstorage) +"lnq" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/security/medsec) +"lnx" = ( +/obj/effect/spawner/random/engineering/shovel, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"lnD" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"lnJ" = ( +/obj/effect/decal/cleanable/blood, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"los" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"loT" = ( +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"loW" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisongarden) +"loZ" = ( +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"lpb" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"lpj" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"lpk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"lps" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/whitepurple{ + dir = 10 + }, +/area/daedalusprison/inside/medical) +"lpP" = ( +/obj/machinery/disposal, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"lpV" = ( +/obj/structure/flora/ausbushes/genericbush, +/turf/open/ground/grass/weedable, +/area/daedalusprison/inside/hydroponics) +"lpY" = ( +/obj/structure/closet/wardrobe/medic_white, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"lpZ" = ( +/obj/structure/window_frame/prison/reinforced, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"lqf" = ( +/obj/effect/turf_decal/tracks/wheels/bloody, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"lqs" = ( +/obj/structure/table/reinforced/weak, +/obj/structure/prop/computer/broken/ten, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationsouth) +"lqX" = ( +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"lrh" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red/corner, +/area/daedalusprison/inside/habitationnorth) +"lrq" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/machinery/random_broken_computer/small, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"lry" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison, +/area/daedalusprison/inside/studyroom) +"lrI" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/dark/green2{ + dir = 5 + }, +/area/daedalusprison/inside/colonydorms) +"lrN" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering{ + name = "\improper Engineering"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"lsb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light, +/turf/open/floor/prison/darkred{ + dir = 6 + }, +/area/daedalusprison/inside/easternhalls) +"lsj" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/item/ammo_casing/shell, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/centralhalls) +"lss" = ( +/obj/machinery/disposal, +/turf/open/floor/prison/red{ + dir = 6 + }, +/area/daedalusprison/inside/habitationsouth) +"lsI" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"lsK" = ( +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/interrogation) +"lsM" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"lsN" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"ltc" = ( +/turf/open/floor/prison/green{ + dir = 8 + }, +/area/daedalusprison/inside/northclass) +"lth" = ( +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/gym) +"lts" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/warden) +"ltB" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"ltH" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"ltM" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"ltX" = ( +/obj/item/toy/plush/rouny, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/rock) +"luz" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/staffbreakroom) +"luG" = ( +/obj/structure/table/mainship, +/obj/item/coin/iron, +/turf/open/floor/prison/darkyellow{ + dir = 4 + }, +/area/daedalusprison/inside/mechanicshop) +"luQ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/northeast) +"luZ" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"lve" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"lvf" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/northeast) +"lvs" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"lvy" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/east) +"lvC" = ( +/obj/structure/cable, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"lvG" = ( +/obj/structure/rack, +/obj/item/toy/beach_ball, +/turf/open/floor/prison, +/area/daedalusprison/inside/sportstorage) +"lvN" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"lvT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"lvU" = ( +/obj/effect/turf_decal/tracks/wheels/bloody, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/red/corner{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"lwV" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/obj/structure/barricade/metal, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"lxp" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"lxu" = ( +/obj/structure/sink, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationsouth) +"lxA" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/secbreakroom) +"lyw" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/green, +/area/daedalusprison/inside/northclass) +"lyE" = ( +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"lyO" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"lyV" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue, +/area/daedalusprison/inside/southmeetingroom) +"lzc" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/cellstripe{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"lze" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/prison/darkred{ + dir = 6 + }, +/area/daedalusprison/inside/easternhalls) +"lzi" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/southeast) +"lzy" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"lzM" = ( +/obj/structure/platform/rockcliff/icycliff/nondense{ + dir = 10 + }, +/obj/structure/fence/broken, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"lAz" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"lAN" = ( +/obj/effect/landmark/weed_node, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"lBt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"lBz" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/item/ammo_casing, +/obj/item/ammo_casing, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/barracks) +"lBR" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"lBV" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"lCj" = ( +/obj/structure/closet/wardrobe/white, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"lCK" = ( +/obj/item/ammo_casing/shell, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"lCZ" = ( +/obj/machinery/computer/intel_computer, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/security/warden) +"lDa" = ( +/obj/structure/window/framed/colony, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bar) +"lEZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"lFe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/line_nexter{ + dir = 1 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"lFp" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/habitationnorth) +"lFE" = ( +/obj/machinery/constructable_frame/state_2, +/turf/open/floor/prison/darkyellow{ + dir = 1 + }, +/area/daedalusprison/inside/mechanicshop) +"lFG" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 9 + }, +/area/daedalusprison/inside/centralhalls) +"lFK" = ( +/obj/effect/spawner/random/misc/plant, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"lGp" = ( +/obj/structure/closet/crate, +/turf/open/floor/prison, +/area/daedalusprison/inside/auxstorage) +"lGJ" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/green/greentaupe{ + dir = 6 + }, +/area/daedalusprison/inside/hydroponics) +"lGY" = ( +/obj/structure/rack, +/obj/item/weapon/shield/riot, +/obj/item/weapon/shield/riot, +/obj/item/weapon/shield/riot, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/barracks) +"lHk" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkyellow{ + dir = 1 + }, +/area/daedalusprison/inside/sportstorage) +"lHo" = ( +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"lHv" = ( +/obj/structure/table/reinforced/weak, +/obj/structure/prop/computer/broken/twelve, +/turf/open/floor/tile/dark/red2{ + dir = 8 + }, +/area/daedalusprison/inside/seccheckpoint) +"lHy" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"lHz" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"lHH" = ( +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/northeast) +"lHO" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"lHR" = ( +/obj/machinery/light/small, +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"lIh" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/office) +"lIi" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/obj/structure/cable, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"lID" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark/brown2{ + dir = 8 + }, +/area/daedalusprison/inside/cargo) +"lJl" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"lJr" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"lJL" = ( +/obj/machinery/computer/intel_computer, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/westernbooth) +"lJM" = ( +/obj/machinery/washing_machine, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"lJT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/obj/machinery/air_alarm, +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/prisongarden) +"lKh" = ( +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north) +"lKJ" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 1 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"lLi" = ( +/obj/structure/curtain/shower, +/obj/effect/landmark/weed_node, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"lLj" = ( +/obj/effect/spawner/random/misc/structure/flavorvending, +/turf/open/floor/tile/blue/whiteblue{ + dir = 5 + }, +/area/daedalusprison/inside/southmeetingroom) +"lLq" = ( +/obj/structure/table/mainship, +/obj/item/clothing/suit/storage/snow_suit/engineer, +/turf/open/floor/tile/dark/yellow2{ + dir = 4 + }, +/area/daedalusprison/inside/engineering) +"lLC" = ( +/turf/open/floor/wood, +/area/daedalusprison/inside/habitationsouth) +"lLJ" = ( +/obj/structure/cable, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"lMk" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"lMJ" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north/garbledradio) +"lMW" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/northeast) +"lNa" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"lNr" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"lNK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"lNW" = ( +/obj/item/lightstick/red/anchored, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/northeast) +"lOe" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison/darkyellow{ + dir = 5 + }, +/area/daedalusprison/inside/mechanicshop) +"lOr" = ( +/obj/structure/sink{ + dir = 1 + }, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"lQD" = ( +/obj/effect/spawner/random/misc/plant, +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green{ + dir = 10 + }, +/area/daedalusprison/inside/northmeetingroom) +"lQH" = ( +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"lQJ" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"lRa" = ( +/obj/structure/bed/chair/dropship/passenger{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"lRi" = ( +/obj/machinery/miner/damaged/platinum, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest/garbledradio) +"lRs" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/computercircuit, +/turf/open/floor/tile/dark/yellow2{ + dir = 5 + }, +/area/daedalusprison/inside/engineering) +"lRC" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"lRF" = ( +/obj/structure/fence/broken, +/obj/structure/platform/rockcliff/icycliff/nondense, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"lRR" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"lRX" = ( +/obj/machinery/door/poddoor/timed_late/containment/landing_zone, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/daedalusprison/inside/seccheckpoint) +"lSE" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"lTh" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"lTj" = ( +/obj/structure/bed/chair/comfy, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"lTs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"lTt" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"lTv" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"lTI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"lUk" = ( +/obj/machinery/iv_drip, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/whitegreen{ + dir = 5 + }, +/area/daedalusprison/inside/medical) +"lUG" = ( +/obj/structure/rack, +/obj/item/stack/sheet/mineral/silver, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/mining) +"lUX" = ( +/obj/machinery/door/airlock/mainship/security/glass/free_access{ + dir = 2; + name = "Habitation Officer Quarters" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"lVu" = ( +/obj/structure/table/mainship, +/obj/item/stack/sheet/metal, +/turf/open/floor/prison/darkyellow{ + dir = 6 + }, +/area/daedalusprison/inside/mechanicshop) +"lVv" = ( +/obj/machinery/miner/damaged, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/southwest) +"lVE" = ( +/obj/structure/bed/chair/comfy, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"lVH" = ( +/obj/machinery/air_alarm{ + dir = 4 + }, +/turf/open/floor/prison/green{ + dir = 8 + }, +/area/daedalusprison/inside/northmeetingroom) +"lVS" = ( +/obj/item/ammo_casing, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"lWe" = ( +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"lWm" = ( +/obj/machinery/computer/sleep_console, +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"lWo" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/powercell, +/turf/open/floor/tile/dark/yellow2{ + dir = 8 + }, +/area/daedalusprison/inside/engineering) +"lXd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"lXp" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison/green{ + dir = 8 + }, +/area/daedalusprison/inside/northclass) +"lXs" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/centralhalls) +"lXY" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/medbelt, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"lXZ" = ( +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"lYh" = ( +/obj/structure/janitorialcart, +/turf/open/floor/prison/darkpurple{ + dir = 1 + }, +/area/daedalusprison/inside/janitorial) +"lYl" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall/prison, +/area/daedalusprison/inside/laundromat) +"lYv" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationsouth) +"lZd" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/green/greentaupe{ + dir = 9 + }, +/area/daedalusprison/inside/hydroponics) +"lZm" = ( +/turf/closed/shuttle/dropship2/engineone, +/area/daedalusprison/inside/pmcdropship) +"lZA" = ( +/turf/closed/shuttle/dropship2/window{ + dir = 1 + }, +/area/daedalusprison/inside/pmcdropship) +"lZQ" = ( +/obj/structure/bed/chair, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/interrogation) +"maf" = ( +/obj/structure/window/framed/colony, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"maj" = ( +/obj/structure/table/mainship, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"maw" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"maY" = ( +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/northeast) +"mbf" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"mbK" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"mbN" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"mbP" = ( +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"mcp" = ( +/obj/structure/closet/crate/trashcart, +/obj/effect/spawner/random/clothing/general, +/obj/effect/ai_node, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"mcE" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/whitegreen{ + dir = 9 + }, +/area/daedalusprison/inside/medical) +"mdG" = ( +/obj/structure/table/reinforced/weak, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/toxin, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"mdI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkpurple/corner{ + dir = 4 + }, +/area/daedalusprison/inside/janitorial) +"mdX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/mining) +"meR" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"meT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"meZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"mfb" = ( +/obj/machinery/space_heater, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 5 + }, +/area/daedalusprison/inside/easternhalls) +"mft" = ( +/obj/item/alien_embryo, +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"mfQ" = ( +/obj/machinery/vending/security, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/westernbooth) +"mfR" = ( +/obj/effect/landmark/patrol_point/tgmc_23, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"mfS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"mgw" = ( +/obj/machinery/space_heater, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"mgy" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/easternhalls) +"mgB" = ( +/obj/item/reagent_containers/syringe/dylovene, +/turf/open/floor/prison/whitepurple, +/area/daedalusprison/inside/medical/chemistry) +"mgR" = ( +/obj/structure/table/reinforced/weak, +/obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_rifle, +/obj/item/cell/lasgun/lasrifle, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/center) +"mgW" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"mhx" = ( +/obj/structure/cable, +/turf/open/floor/rustyplating, +/area/daedalusprison/inside/substation) +"mhC" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/corporateoffice) +"mik" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"mil" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"miv" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north/garbledradio) +"miz" = ( +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"miM" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"miT" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"mjy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"mjU" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"mkc" = ( +/obj/structure/table/reinforced/weak, +/obj/item/storage/firstaid/o2, +/obj/item/storage/firstaid/o2, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"mkj" = ( +/obj/structure/closet/crate/trashcart, +/obj/effect/spawner/random/clothing/sunglasses, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"mkw" = ( +/obj/structure/bed/chair, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"mkx" = ( +/obj/effect/ai_node, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/turf/open/shuttle/dropship/three, +/area/daedalusprison/inside/pmcdropship) +"mkU" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"mkX" = ( +/obj/structure/rack, +/obj/item/weapon/baseballbat, +/turf/open/floor/prison, +/area/daedalusprison/inside/sportstorage) +"mkY" = ( +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast) +"mlH" = ( +/obj/machinery/miner/damaged/platinum, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"mmw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/xeno, +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue{ + dir = 5 + }, +/area/daedalusprison/inside/corporateoffice) +"mno" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"mnz" = ( +/obj/effect/spawner/random/misc/plant, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"mnB" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/laundromat) +"mnR" = ( +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"mod" = ( +/obj/machinery/space_heater, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"mog" = ( +/obj/structure/table/mainship, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/structure/cable, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"moX" = ( +/obj/structure/bed/chair/comfy, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"mpa" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison/darkyellow{ + dir = 6 + }, +/area/daedalusprison/inside/mechanicshop) +"mpA" = ( +/obj/machinery/air_alarm, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"mpC" = ( +/obj/structure/table/reinforced/weak, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"mpS" = ( +/obj/machinery/vending/hydronutrients, +/turf/open/floor/prison/green{ + dir = 4 + }, +/area/daedalusprison/inside/prisongarden) +"mqf" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/north) +"mqi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"mqn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"mqr" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"mqC" = ( +/obj/structure/platform_decoration{ + dir = 8 + }, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"mqE" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/green/greentaupe{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"mra" = ( +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"mrA" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"msl" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"msp" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"mta" = ( +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"mtC" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker) +"mtF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/brown2{ + dir = 4 + }, +/area/daedalusprison/inside/cargo) +"mtO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/obj/structure/cable, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"mtR" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/garage) +"mua" = ( +/obj/structure/table/reinforced/weak, +/obj/item/storage/firstaid/fire, +/obj/item/storage/firstaid/fire, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"mul" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 1 + }, +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 4 + }, +/obj/structure/prop/mainship/gelida/lightstick{ + pixel_x = -7; + pixel_y = 27 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"muI" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4 + }, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"muP" = ( +/obj/structure/table/mainship/nometal, +/obj/item/storage/box/syringes, +/turf/open/floor/prison/whitepurple{ + dir = 4 + }, +/area/daedalusprison/inside/medical/chemistry) +"muX" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"muY" = ( +/obj/structure/sign/securearea, +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"mva" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"mvb" = ( +/obj/structure/table/mainship, +/obj/item/storage/donut_box, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"mvx" = ( +/obj/structure/platform_decoration{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"mvI" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/daedalusprison/inside/cargo) +"mwf" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"mwt" = ( +/obj/item/weapon/gun/revolver/small, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"mwD" = ( +/obj/structure/window/framed/prison/reinforced, +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"mwO" = ( +/obj/structure/table/mainship, +/obj/item/toy/deck/kotahi, +/turf/open/floor/wood, +/area/daedalusprison/inside/centralhalls) +"mwX" = ( +/obj/effect/spawner/random/misc/plant, +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen{ + dir = 6 + }, +/area/daedalusprison/inside/medical) +"mxb" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"mxu" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/yellow2, +/area/daedalusprison/inside/engineering) +"mxI" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/machinery/random_broken_computer/small, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"mxN" = ( +/obj/effect/decal/cleanable/blood/gibs/limb, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"mxZ" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/mainship/purple, +/area/daedalusprison/caves/research) +"myy" = ( +/obj/machinery/disposal, +/obj/machinery/light, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/corporateoffice) +"myL" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisongarden) +"myV" = ( +/obj/structure/cable, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"mze" = ( +/obj/item/weapon/gun/rifle/m16, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"mzh" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"mzt" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"mzu" = ( +/obj/structure/table/mainship, +/obj/item/reagent_containers/spray/cleaner, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"mzU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"mAn" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/cellstripe{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"mAQ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"mBa" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"mBc" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"mBd" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/centralhalls) +"mBe" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"mBH" = ( +/obj/structure/bed/chair, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"mBJ" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + name = "Showers"; + dir = 1 + }, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/prisonshower) +"mBU" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/garage) +"mCo" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/open/floor/plating, +/area/daedalusprison/inside/colonydorms) +"mCy" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationsouth) +"mCz" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest/garbledradio) +"mCM" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"mDa" = ( +/obj/structure/table/mainship, +/obj/item/paper, +/obj/item/tool/pen/blue{ + pixel_x = 5 + }, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"mDd" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/handcuffs, +/obj/machinery/light, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/office) +"mDU" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/computer/secure_data, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 6 + }, +/area/daedalusprison/inside/habitationsouth) +"mEt" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"mEw" = ( +/obj/machinery/gibber, +/obj/machinery/light, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/freezer) +"mEN" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"mFp" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/darkred{ + dir = 10 + }, +/area/daedalusprison/inside/lobby) +"mFs" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/mining) +"mFt" = ( +/obj/machinery/smartfridge/seeds, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"mFA" = ( +/obj/structure/table/mainship, +/obj/item/reagent_containers/food/snacks/burger/plain, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"mFB" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north/garbledradio) +"mFN" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"mFR" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/engineering/computercircuit, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"mFZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/interrogation) +"mGM" = ( +/obj/structure/table/mainship, +/obj/item/coin/iron, +/turf/open/floor/prison/darkyellow{ + dir = 1 + }, +/area/daedalusprison/inside/mechanicshop) +"mGY" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"mHe" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/machinery/firealarm, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical/treatment) +"mHn" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic/canteen{ + name = "\improper Dormitories"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"mHI" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/green/greentaupe{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"mHO" = ( +/obj/machinery/light/small, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/habitationnorth) +"mHX" = ( +/obj/effect/ai_node, +/turf/open/floor/plating, +/area/daedalusprison/caves/research) +"mIb" = ( +/obj/structure/table/reinforced/weak, +/obj/item/healthanalyzer, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"mIc" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/yellow2{ + dir = 8 + }, +/area/daedalusprison/inside/engineering) +"mIz" = ( +/obj/structure/filingcabinet/medical, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/corporateoffice) +"mIJ" = ( +/obj/item/ammo_casing/bullet, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"mIL" = ( +/obj/effect/landmark/corpsespawner/bridgeofficer, +/turf/open/floor/tile/blue/whiteblue{ + dir = 9 + }, +/area/daedalusprison/inside/southmeetingroom) +"mIT" = ( +/obj/effect/decal/cleanable/blood/xeno, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/barber, +/area/daedalusprison/inside/corporateoffice) +"mJc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/obj/machinery/light, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"mJl" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"mJy" = ( +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/east) +"mJA" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisongarden) +"mJF" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/machinery/random_broken_computer/small, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"mJH" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/tile/dark/brown2{ + dir = 10 + }, +/area/daedalusprison/inside/cargo) +"mJL" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/closed/shuttle/dropship2/cornersalt{ + dir = 1 + }, +/area/daedalusprison/inside/pmcdropship) +"mKa" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + dir = 1; + name = "\improper Canteen" + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"mKq" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"mKM" = ( +/obj/structure/filingcabinet, +/turf/open/floor/tile/dark/brown2/corner, +/area/daedalusprison/inside/cargo) +"mKX" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/closet/secure_closet/security, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"mLl" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/snacks/grown/wheat, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"mLv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"mLL" = ( +/obj/structure/table/woodentable, +/obj/effect/spawner/random/misc/table_lighting, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"mLO" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/daedalusprison/inside/cargo) +"mLS" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 9 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"mLW" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/obj/structure/cable, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/medsec) +"mLZ" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/effect/ai_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"mMs" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/item/tool/pen{ + pixel_y = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"mMA" = ( +/obj/structure/table/mainship, +/obj/item/taperecorder, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/interrogation) +"mMF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"mMJ" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/tile/chapel, +/area/daedalusprison/inside/chapel) +"mMY" = ( +/obj/structure/filingcabinet, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/secbreakroom) +"mNG" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"mNR" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"mNV" = ( +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"mOt" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/xeno_silo_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest/garbledradio) +"mOK" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"mOT" = ( +/turf/open/floor/rustyplating, +/area/daedalusprison/inside/substation) +"mPc" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained{ + dir = 1 + }, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/corporateoffice) +"mPp" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"mPP" = ( +/obj/machinery/conveyor/inverted{ + dir = 6 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"mPR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"mQd" = ( +/obj/item/tool/mop, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"mQj" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/daedalusprison/inside/colonydorms) +"mQo" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/corporateoffice) +"mQw" = ( +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"mQy" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/easternhalls) +"mQI" = ( +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"mRi" = ( +/obj/item/ammo_casing/bullet, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"mRp" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"mRv" = ( +/obj/structure/table/reinforced/weak, +/obj/item/bodybag, +/obj/item/bodybag, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"mRB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"mRK" = ( +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/sportstorage) +"mRS" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"mRW" = ( +/obj/effect/landmark/corpsespawner/chef, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"mSb" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/northeast) +"mSk" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"mSE" = ( +/obj/structure/table/reinforced/weak, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"mSL" = ( +/obj/effect/landmark/xeno_silo_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/east) +"mTh" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"mTG" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"mTJ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest) +"mTT" = ( +/turf/open/floor/rustyplating, +/area/daedalusprison/inside/laundromat) +"mTY" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"mUr" = ( +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/northmeetingroom) +"mUP" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationnorth) +"mVl" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/cameras) +"mVq" = ( +/obj/structure/bed/chair/comfy, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"mVv" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"mVD" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/cellstripe, +/area/daedalusprison/inside/habitationnorth) +"mVP" = ( +/obj/machinery/iv_drip, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"mVQ" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"mVR" = ( +/obj/item/weapon/gun/revolver/judge, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"mVW" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"mWa" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"mWd" = ( +/obj/machinery/chem_dispenser, +/turf/open/floor/prison/whitepurple{ + dir = 8 + }, +/area/daedalusprison/inside/medical/chemistry) +"mWh" = ( +/obj/effect/landmark/weed_node, +/obj/machinery/light, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/mining) +"mWi" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume{ + dir = 1 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/freezer) +"mXh" = ( +/obj/structure/filingcabinet, +/obj/machinery/light, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"mXj" = ( +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/secbreakroom) +"mXo" = ( +/obj/item/clothing/under/rank/prisoner, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"mXL" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/secbreakroom) +"mYp" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"mYq" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"mYu" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"mYC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"mYO" = ( +/obj/structure/table, +/turf/open/floor/tile/green/greentaupe{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"mYW" = ( +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/daedalusprison/inside/landingzoneone) +"mZv" = ( +/obj/structure/table/mainship, +/obj/machinery/processor, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"nah" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast) +"naC" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"naI" = ( +/obj/structure/cable, +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/east) +"nbc" = ( +/obj/machinery/disposal, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"nbH" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"nbV" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/tile/green/greentaupe{ + dir = 9 + }, +/area/daedalusprison/inside/hydroponics) +"ncm" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/medical/chemistry) +"ncK" = ( +/obj/structure/closet/secure_closet/personal, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisonshower) +"ncR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"ncX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 2 + }, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"ncY" = ( +/obj/machinery/light, +/turf/open/floor/prison/darkred{ + dir = 10 + }, +/area/daedalusprison/inside/centralhalls) +"ndd" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/centralhalls) +"ndZ" = ( +/obj/effect/ai_node, +/turf/open/floor/mainship/purple{ + dir = 4 + }, +/area/daedalusprison/caves/research) +"neE" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/machinery/miner/damaged, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"neQ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"nfb" = ( +/obj/machinery/door/airlock/prison/open, +/turf/open/floor/prison/red/full, +/area/daedalusprison/inside/habitationnorth) +"nfB" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/gym) +"nfF" = ( +/obj/effect/spawner/random/misc/trash, +/obj/structure/cable, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"nfN" = ( +/turf/open/floor/prison/red{ + dir = 6 + }, +/area/daedalusprison/inside/habitationsouth) +"nfT" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 5 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"ngg" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/chapel, +/area/daedalusprison/inside/chapel) +"ngk" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"ngw" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/structure/table/reinforced/weak, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"ngx" = ( +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"ngY" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"nip" = ( +/obj/effect/ai_node, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"nix" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"niB" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"niK" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"niP" = ( +/obj/effect/spawner/random/misc/structure/crate, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bar) +"njh" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/obj/effect/landmark/corpsespawner/prison_security, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"njo" = ( +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"njK" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"njP" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/darkred/corners{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"njU" = ( +/obj/machinery/optable, +/obj/machinery/light, +/obj/effect/landmark/corpsespawner/prisoner/burst, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"nkL" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained{ + dir = 8 + }, +/obj/effect/mapping_helpers/broken_apc/highchance, +/turf/open/floor/prison/whitegreen{ + dir = 4 + }, +/area/daedalusprison/inside/medical/treatment) +"nls" = ( +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/south) +"nlt" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/staffrestroom) +"nlz" = ( +/turf/open/floor/prison/green{ + dir = 4 + }, +/area/daedalusprison/inside/northclass) +"nlG" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"nlR" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/obj/effect/spawner/random/medical/beaker, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"nlT" = ( +/turf/closed/shuttle/dropship2/front{ + dir = 1 + }, +/area/daedalusprison/inside/pmcdropship) +"nlX" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"nma" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/gym) +"nmg" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/southwest) +"nmt" = ( +/obj/effect/spawner/random/misc/plant, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitegreen{ + dir = 5 + }, +/area/daedalusprison/inside/medical/treatment) +"nmF" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"nmO" = ( +/obj/structure/fence/broken, +/obj/structure/platform/rockcliff/icycliff/nondense{ + dir = 1 + }, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/southwest) +"nmV" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"nmY" = ( +/obj/machinery/miner/damaged, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest/garbledradio) +"nnh" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"nnk" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"nnq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"nol" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/security/warden) +"noB" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"noG" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"npj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"npo" = ( +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/security/medsec) +"nqc" = ( +/obj/effect/landmark/xeno_tunnel_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest) +"nqg" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"nqk" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"nql" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"nqm" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/item/shard, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"nqn" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/hydroponics) +"nqO" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"nqW" = ( +/turf/open/floor/tile/white, +/area/daedalusprison/inside/corporateoffice) +"nsb" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/studyroom) +"nsz" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 10 + }, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/security/warden) +"nsV" = ( +/obj/item/weapon/gun/revolver/standard_revolver, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"ntm" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"ntn" = ( +/obj/machinery/disposal, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"ntF" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/darkpurple{ + dir = 4 + }, +/area/daedalusprison/inside/janitorial) +"ntN" = ( +/obj/structure/table/woodentable, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"nuk" = ( +/obj/machinery/disposal, +/obj/machinery/light, +/turf/open/floor/tile/blue/whiteblue{ + dir = 10 + }, +/area/daedalusprison/inside/southmeetingroom) +"nun" = ( +/obj/machinery/air_alarm, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"nuB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"nuE" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"nuQ" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"nvg" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationnorth) +"nvR" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/trash, +/obj/item/shard, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"nvY" = ( +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/item/stack/sheet/metal, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"nwh" = ( +/turf/open/floor/prison/darkred{ + dir = 10 + }, +/area/daedalusprison/inside/sportstorage) +"nwk" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/barracks) +"nwr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"nwt" = ( +/obj/structure/table/mainship, +/obj/item/paper, +/obj/item/tool/pen/blue{ + pixel_x = 5 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"nwv" = ( +/obj/structure/cable, +/obj/machinery/power/apc{ + dir = 1 + }, +/obj/machinery/light, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/east) +"nwL" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 8 + }, +/obj/structure/prop/mainship/gelida/smallwire, +/obj/structure/prop/mainship/gelida/lightstick{ + pixel_x = 6; + pixel_y = 7 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"nxa" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/darkyellow, +/area/daedalusprison/inside/sportstorage) +"nxe" = ( +/obj/structure/rack, +/obj/item/weapon/gun/rifle/m16, +/obj/item/weapon/gun/rifle/m16, +/obj/item/weapon/gun/rifle/m16, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/pmcdropship) +"nxj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"nxo" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"nxz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/paper, +/turf/open/floor/prison/whitepurple, +/area/daedalusprison/inside/medical/chemistry) +"nxI" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"nxP" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/food_or_drink/burger/normal, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"nyk" = ( +/obj/structure/table/mainship, +/obj/item/phone, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"nyx" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisongarden) +"nyO" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest) +"nzk" = ( +/obj/structure/bed/chair, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"nzr" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"nzt" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"nzG" = ( +/obj/item/weapon/gun/shotgun/pump/cmb, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"nzP" = ( +/obj/machinery/washing_machine, +/obj/item/clothing/under/rank/prisoner, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"nzQ" = ( +/obj/effect/landmark/corpsespawner/chef, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/ai_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"nAf" = ( +/obj/structure/sign/nosmoking_1{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/daedalusprison/inside/southmeetingroom) +"nAw" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"nAA" = ( +/obj/machinery/chem_master, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"nAV" = ( +/turf/open/floor/prison/red, +/area/daedalusprison/inside/centralhalls) +"nBd" = ( +/obj/structure/sign/hydro{ + dir = 1 + }, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/northeast) +"nBg" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"nBr" = ( +/obj/structure/table/woodentable, +/obj/effect/spawner/random/food_or_drink/beer, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"nBx" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"nBL" = ( +/obj/machinery/air_alarm, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/mining) +"nCe" = ( +/obj/machinery/vending/boozeomat, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"nCf" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/janitorial) +"nCg" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"nDK" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"nDL" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"nDT" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/flora/ausbushes/genericbush, +/turf/open/ground/grass/weedable, +/area/daedalusprison/inside/hydroponics) +"nDX" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/east) +"nDY" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/faxmachine, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/security/warden) +"nEb" = ( +/obj/machinery/shower{ + dir = 4; + pixel_y = -3 + }, +/obj/effect/ai_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"nEd" = ( +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"nFc" = ( +/obj/machinery/door/airlock/mainship/medical/glass/free_access{ + name = "\improper Dormitories" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"nFk" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"nFx" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/sportstorage) +"nFG" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/item/ammo_casing/bullet, +/obj/item/shard, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"nHi" = ( +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"nHn" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/south) +"nHs" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/sportstorage) +"nHu" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/darkred{ + dir = 9 + }, +/area/daedalusprison/inside/sportstorage) +"nHz" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"nHM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/easternhalls) +"nHO" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/sportstorage) +"nHP" = ( +/turf/closed/wall/r_wall, +/area/daedalusprison/caves/nukestorage) +"nHX" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"nIb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"nIh" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red/corner{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"nIs" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"nIV" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/substation) +"nIZ" = ( +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"nJT" = ( +/obj/machinery/light, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"nJV" = ( +/obj/structure/bed/chair/comfy, +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"nKu" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 1 + }, +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 4 + }, +/obj/structure/prop/mainship/gelida/lightstick{ + pixel_x = -7; + pixel_y = 27 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"nKy" = ( +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"nKR" = ( +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/east) +"nLq" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/tile/green/greentaupe{ + dir = 6 + }, +/area/daedalusprison/inside/hydroponics) +"nLt" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/food_or_drink/drink_cans, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"nMf" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast) +"nMm" = ( +/obj/structure/bed/stool, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"nMx" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/turf/open/floor/prison/darkred{ + dir = 5 + }, +/area/daedalusprison/inside/centralhalls) +"nMF" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"nMU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/mainship, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/gym) +"nNj" = ( +/obj/structure/fence/broken, +/obj/structure/platform/rockcliff/icycliff/nondense{ + dir = 6 + }, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"nNx" = ( +/obj/structure/prop/vehicle/truck/destructible, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/outside/east) +"nNB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"nNZ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"nOt" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/red/full, +/area/daedalusprison/inside/security/office) +"nOE" = ( +/obj/machinery/door/airlock/mainship/medical/glass{ + name = "\improper Hydroponics Husbandry"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"nON" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"nOS" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"nPC" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/open/floor/mainship/orange{ + dir = 9 + }, +/area/daedalusprison/caves/research) +"nPE" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/light, +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/center) +"nPH" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"nPL" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/effect/landmark/weed_node, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"nPM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed/chair/comfy/black{ + dir = 8 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"nPS" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood/gibs/xeno, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"nQa" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/mainship/medical/or/free_access{ + name = "\improper CMO's Office" + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"nQd" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/mainship/orange{ + dir = 4 + }, +/area/daedalusprison/caves/research) +"nQl" = ( +/obj/machinery/hydroponics, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"nQS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"nRf" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/food_or_drink/burger/normal, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"nRY" = ( +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"nSa" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/whitegreen{ + dir = 5 + }, +/area/daedalusprison/inside/medical) +"nSd" = ( +/obj/structure/table/woodentable, +/obj/effect/spawner/random/misc/book, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"nSz" = ( +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"nTi" = ( +/obj/structure/table/woodentable, +/obj/item/paper, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"nTn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/prison/red/corner{ + dir = 1 + }, +/area/daedalusprison/inside/security/office) +"nTr" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"nTA" = ( +/obj/structure/closet/wardrobe/medic_white, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"nUu" = ( +/obj/machinery/computer/sleep_console, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"nUB" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"nUH" = ( +/obj/structure/platform/nondense{ + dir = 4 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"nUX" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/southeast) +"nVy" = ( +/obj/machinery/door/poddoor/four_tile_ver{ + name = "Auxillary Storage" + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonyauxstorage) +"nVG" = ( +/obj/structure/bed/roller, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"nWh" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"nWk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupe{ + dir = 6 + }, +/area/daedalusprison/inside/hydroponics) +"nWz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkyellow{ + dir = 1 + }, +/area/daedalusprison/inside/mechanicshop) +"nWL" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"nXv" = ( +/obj/effect/spawner/random/misc/plant, +/obj/effect/landmark/weed_node, +/obj/machinery/light, +/turf/open/floor/prison/red{ + dir = 6 + }, +/area/daedalusprison/inside/habitationsouth) +"nXN" = ( +/obj/machinery/space_heater, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"nYA" = ( +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationsouth) +"nYN" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic/garden, +/turf/open/floor, +/area/daedalusprison/inside/garden) +"nYR" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"nYW" = ( +/obj/structure/table/woodentable, +/obj/item/paper, +/obj/item/tool/pen/blue{ + pixel_x = 5 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/northclass) +"nZf" = ( +/obj/effect/landmark/xeno_silo_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast) +"nZt" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"nZu" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"oac" = ( +/obj/machinery/disposal, +/turf/open/floor/tile/dark/red2{ + dir = 9 + }, +/area/daedalusprison/inside/seccheckpoint) +"obh" = ( +/turf/open/floor/prison/red{ + dir = 6 + }, +/area/daedalusprison/inside/mining) +"obo" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"obN" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"obZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"ocu" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"ocI" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"ocT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"ocY" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"odi" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/execution) +"odu" = ( +/obj/machinery/disposal, +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/lobby) +"odS" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/tile/dark/brown2/corner, +/area/daedalusprison/inside/cargo) +"oeb" = ( +/turf/open/floor/prison/darkyellow{ + dir = 6 + }, +/area/daedalusprison/inside/sportstorage) +"oep" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"oeO" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"oeT" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast) +"ofT" = ( +/obj/structure/table/mainship, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"oge" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"ogz" = ( +/obj/structure/bed/roller, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical/treatment) +"ogD" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"ogS" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green, +/area/daedalusprison/inside/westcomputerlab) +"ogW" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"ogY" = ( +/obj/structure/filingcabinet, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/office) +"oha" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"ohs" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"ohx" = ( +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast/garbledradio) +"ohV" = ( +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/machinery/random_broken_computer/small, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"oia" = ( +/obj/structure/table/mainship, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"oib" = ( +/obj/item/tool/kitchen/utensil/pknife, +/turf/open/floor/tile/chapel, +/area/daedalusprison/inside/chapel) +"oiP" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationsouth) +"oiU" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/secure_data, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationsouth) +"oiZ" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/machinery/random_broken_computer/small, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"ojo" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"ojz" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/security/warden) +"ojR" = ( +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/north) +"ojY" = ( +/obj/structure/table/reinforced/weak, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"okb" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"okm" = ( +/turf/closed/shuttle/dropship2/fins{ + dir = 8 + }, +/area/daedalusprison/inside/pmcdropship) +"oky" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/basketball) +"okK" = ( +/obj/item/ammo_casing/bullet, +/turf/open/shuttle/dropship/three, +/area/daedalusprison/inside/pmcdropship) +"okR" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red/corner, +/area/daedalusprison/inside/mining) +"ola" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/security/medsec) +"olj" = ( +/obj/structure/table/mainship, +/obj/item/tool/kitchen/tray, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"oly" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/sportstorage) +"olA" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"omk" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"omB" = ( +/obj/structure/table/woodentable, +/obj/item/storage/briefcase, +/turf/open/floor/tile/blue/whiteblue{ + dir = 5 + }, +/area/daedalusprison/inside/corporateoffice) +"omE" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/bloodpack, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"omU" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/chapel) +"omV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"onz" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"oog" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"ooV" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southwest) +"opq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"opr" = ( +/turf/closed/mineral/smooth/darkfrostwall, +/area/daedalusprison/caves/northwest) +"opN" = ( +/turf/open/floor/tile/green/greentaupe{ + dir = 5 + }, +/area/daedalusprison/inside/hydroponics) +"opQ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/northmeetingroom) +"oqc" = ( +/turf/open/floor/prison/darkyellow{ + dir = 4 + }, +/area/daedalusprison/inside/sportstorage) +"oqf" = ( +/obj/machinery/vending/snack, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"oqp" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/east) +"oqs" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"oqu" = ( +/obj/structure/filingcabinet, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"ord" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationsouth) +"orQ" = ( +/obj/machinery/bodyscanner, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"osl" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/office) +"oso" = ( +/obj/structure/rack, +/obj/item/stack/sheet/mineral/sandstone, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/mining) +"osr" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"osQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"oty" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"otC" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"otF" = ( +/obj/structure/table/reinforced/weak, +/obj/item/reagent_containers/spray/cleaner, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"otI" = ( +/obj/structure/table/reinforced/weak, +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/east) +"otK" = ( +/obj/structure/table/reinforced/weak, +/obj/item/flashlight/lamp, +/obj/effect/landmark/weed_node, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 5 + }, +/area/daedalusprison/inside/westernbooth) +"otZ" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/prison, +/area/daedalusprison/inside/auxstorage) +"ouw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"ouR" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"ouZ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"ovc" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic/canteen{ + name = "\improper Dormitories Computer Lab"; + dir = 1 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"ove" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"ovh" = ( +/obj/structure/filingcabinet, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/lobby) +"ovj" = ( +/obj/structure/bed/chair/office/dark/east, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"ovt" = ( +/obj/structure/fence/broken, +/obj/structure/platform/rockcliff/icycliff/nondense, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/southwest) +"ovu" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4 + }, +/obj/effect/landmark/corpsespawner/prisoner, +/obj/effect/decal/cleanable/blood, +/obj/item/tool/kitchen/knife/shiv, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"ovA" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"ovW" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/medical/pillbottle, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"owe" = ( +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"owg" = ( +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"owM" = ( +/obj/structure/window_frame/prison/reinforced, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"owW" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/northclass) +"oxi" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained{ + dir = 4 + }, +/turf/open/floor/plating, +/area/daedalusprison/inside/hydroponics) +"oxw" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north) +"oxH" = ( +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/southeast) +"oxV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"oym" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"oyq" = ( +/obj/effect/landmark/nuke_spawn, +/turf/open/floor/tile/dark2, +/area/daedalusprison/caves/nukestorage) +"oyr" = ( +/turf/open/floor/tile/green/greentaupe{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"oyI" = ( +/obj/machinery/power/apc/drained, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/gym) +"oyP" = ( +/obj/machinery/door/airlock/mainship/medical/glass{ + name = "\improper Hydroponics Garden" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor, +/area/daedalusprison/inside/hydroponicstesting) +"oyV" = ( +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/westcomputerlab) +"ozs" = ( +/obj/machinery/floodlight/colony, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/north) +"ozJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"ozV" = ( +/obj/structure/table/reinforced/weak, +/obj/item/flashlight/lamp, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"oAg" = ( +/obj/effect/landmark/xeno_silo_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"oAx" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkpurple{ + dir = 8 + }, +/area/daedalusprison/inside/janitorial) +"oAz" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/habitationsouth) +"oAH" = ( +/obj/structure/window_frame/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/cameras) +"oAP" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/item/tool/pen{ + pixel_y = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"oBh" = ( +/obj/structure/table/mainship, +/obj/item/tool/lighter/zippo, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"oBj" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"oBJ" = ( +/turf/closed/shuttle/dropship2/fins{ + dir = 5 + }, +/area/daedalusprison/inside/pmcdropship) +"oBK" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/effect/landmark/corpsespawner/commander, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/cameras) +"oBR" = ( +/turf/open/floor/plating, +/area/daedalusprison/inside/centralhalls) +"oBU" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"oCh" = ( +/obj/machinery/space_heater, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/red{ + dir = 9 + }, +/area/daedalusprison/inside/habitationsouth) +"oCj" = ( +/obj/item/robot_parts/r_arm, +/obj/effect/landmark/weed_node, +/obj/item/stack/tile, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"oCP" = ( +/obj/effect/landmark/corpsespawner/bridgeofficer, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/daedalusprison/inside/southmeetingroom) +"oDv" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"oDx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"oDK" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/daedalusprison/caves/research) +"oDN" = ( +/obj/structure/cable, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"oEi" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"oEj" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/food_or_drink/burger/normal, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"oEk" = ( +/obj/item/shard, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"oEN" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/mining) +"oFp" = ( +/obj/machinery/power/geothermal, +/obj/structure/cable, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"oFt" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north) +"oFH" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"oFL" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"oFS" = ( +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/east) +"oGh" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/tile/dark/red2{ + dir = 1 + }, +/area/daedalusprison/inside/seccheckpoint) +"oGi" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/dark/green2, +/area/daedalusprison/inside/colonydorms) +"oGj" = ( +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"oGl" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical/treatment) +"oGn" = ( +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"oGo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"oGS" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"oGT" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"oHw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"oHT" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"oIn" = ( +/obj/machinery/vending/snack, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"oIy" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"oJd" = ( +/obj/structure/table/mainship, +/obj/item/trash/snack_bowl{ + pixel_y = 9 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"oJf" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"oJn" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"oJo" = ( +/obj/machinery/door/poddoor/timed_late/containment/landing_zone, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/daedalusprison/inside/southmeetingroom) +"oJt" = ( +/obj/structure/toilet{ + pixel_y = 8 + }, +/turf/open/floor/prison/cellstripe{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"oJw" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/darkpurple, +/area/daedalusprison/inside/janitorial) +"oJP" = ( +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisongarden) +"oJZ" = ( +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/north) +"oKe" = ( +/turf/open/floor/plating, +/area/daedalusprison/caves/nukestorage) +"oKo" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/plushie, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"oKA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"oKE" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark/yellow2, +/area/daedalusprison/inside/engineering) +"oLg" = ( +/obj/structure/nuke_disk_candidate{ + set_associations = list("set4") + }, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"oLr" = ( +/obj/effect/landmark/corpsespawner/doctor{ + corpsebelt = /obj/item/storage/belt/lifesaver/full; + corpsegloves = /obj/item/clothing/gloves/latex; + corpsepocket2 = /obj/item/storage/pouch/medkit/firstaid; + corpseradio = /obj/item/radio/headset/survivor; + corpseshoes = /obj/item/clothing/shoes/snow; + corpsesuit = /obj/item/clothing/suit/storage/snow_suit/doctor; + name = "Dr. Micheal Hwang" + }, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"oLJ" = ( +/obj/effect/spawner/random/engineering/structure/tank/fuelweighted, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"oLR" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/southwest) +"oLT" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"oLX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"oMa" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"oMz" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/weaponry/gun, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/security/warden) +"oMQ" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/food_or_drink/drink_cans, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"oMZ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"oNb" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison/darkyellow{ + dir = 9 + }, +/area/daedalusprison/inside/mechanicshop) +"oNd" = ( +/turf/closed/shuttle/dropship2/glassfive, +/area/daedalusprison/inside/pmcdropship) +"oNg" = ( +/obj/structure/cable, +/obj/machinery/power/geothermal, +/turf/open/floor/rustyplating, +/area/daedalusprison/inside/substation) +"oNi" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"oNm" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"oND" = ( +/turf/open/floor/prison/whitegreen{ + dir = 4 + }, +/area/daedalusprison/inside/medical) +"oOb" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/recharger, +/obj/structure/sign/safety/autodoc, +/obj/machinery/light, +/turf/open/floor/prison/whitegreen{ + dir = 10 + }, +/area/daedalusprison/inside/medical) +"oOc" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/mechanicshop) +"oOt" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/secbreakroom) +"oOP" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/garage) +"oOY" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"oOZ" = ( +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationsouth) +"oPk" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/landmark/weed_node, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"oPo" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"oPp" = ( +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"oPy" = ( +/obj/structure/table/mainship, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"oPK" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical/treatment) +"oQn" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"oQr" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"oQw" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"oQE" = ( +/obj/item/ammo_casing, +/obj/structure/cable, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/westernbooth) +"oQW" = ( +/obj/structure/bed/roller, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"oRi" = ( +/obj/machinery/conveyor{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"oRm" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"oRx" = ( +/obj/structure/bed, +/obj/effect/landmark/corpsespawner/colonist, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"oRH" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/green2{ + dir = 6 + }, +/area/daedalusprison/inside/colonydorms) +"oRU" = ( +/obj/machinery/iv_drip, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"oSf" = ( +/obj/effect/decal/cleanable/blood/oil, +/turf/open/floor/tile/dark/brown2, +/area/daedalusprison/inside/cargo) +"oSl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"oSp" = ( +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"oSB" = ( +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"oSF" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"oSI" = ( +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/garage) +"oSS" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"oTh" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/southwest) +"oTq" = ( +/obj/machinery/disposal, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"oTt" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"oTz" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/turf/open/floor/tile/dark/yellow2{ + dir = 4 + }, +/area/daedalusprison/inside/engineering) +"oTF" = ( +/obj/machinery/air_alarm{ + dir = 8 + }, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/easternhalls) +"oUd" = ( +/obj/machinery/disposal, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/green{ + dir = 9 + }, +/area/daedalusprison/inside/prisongarden) +"oUq" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"oUD" = ( +/obj/machinery/shower{ + dir = 8 + }, +/obj/machinery/light/small, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"oUJ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"oVa" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/chapel{ + dir = 4 + }, +/area/daedalusprison/inside/chapel) +"oVo" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"oVv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/brown/full, +/area/daedalusprison/inside/engineering) +"oVE" = ( +/obj/machinery/griddle, +/obj/item/reagent_containers/food/snacks/meatsteak, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"oVJ" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic/canteen{ + name = "\improper Dormitories Computer Lab" + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"oVO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/interrogation) +"oWh" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/hydroponics) +"oWq" = ( +/obj/machinery/botany/extractor, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"oWx" = ( +/obj/structure/rack, +/obj/item/explosive/grenade/m15, +/turf/open/floor/tile/dark2, +/area/daedalusprison/caves/nukestorage) +"oWy" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/ai_node, +/turf/open/floor/plating, +/area/daedalusprison/inside/hydroponics) +"oWD" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"oWG" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/darkred/corners{ + dir = 8 + }, +/area/daedalusprison/inside/easternhalls) +"oXj" = ( +/obj/structure/table/reinforced/weak, +/obj/item/defibrillator, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"oXx" = ( +/obj/structure/prop/mainship/gelida/smallwire, +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 4 + }, +/obj/structure/prop/mainship/gelida/lightstick{ + pixel_x = -8; + pixel_y = 7 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"oXD" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"oXX" = ( +/obj/effect/landmark/excavation_site_spawner, +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north) +"oYf" = ( +/obj/structure/window/framed/colony/reinforced, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/west) +"oYr" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"oYx" = ( +/obj/machinery/vending/security, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"oYS" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/janitorial) +"oZv" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/paperbin, +/obj/item/tool/pen/blue, +/turf/open/floor/prison/whitepurple{ + dir = 4 + }, +/area/daedalusprison/inside/medical) +"oZJ" = ( +/obj/item/ammo_casing, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"oZR" = ( +/obj/item/clothing/glasses/sunglasses, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"pag" = ( +/obj/effect/decal/cleanable/blood/gibs, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/freezer) +"pak" = ( +/obj/structure/table/mainship, +/obj/item/clothing/glasses/eyepatch, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"pas" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"paD" = ( +/obj/item/tool/kitchen/knife/butcher, +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"paL" = ( +/obj/effect/spawner/random/medical/beaker, +/obj/effect/turf_decal/tracks/wheels/bloody, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/decal/cleanable/greenglow, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"paM" = ( +/obj/structure/table/mainship, +/obj/item/tool/lighter/zippo, +/obj/item/clothing/mask/cigarette, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"paP" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/prisongarden) +"pbc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light, +/obj/item/reagent_containers/food/drinks/sillycup, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/gym) +"pbg" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"pbo" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/clothing/general, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"pbP" = ( +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric{ + name = "\improper Morgue" + }, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"pbV" = ( +/obj/machinery/door/airlock/multi_tile/ice{ + name = "Cargo Hold" + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"pbW" = ( +/obj/structure/bed/chair{ + dir = 4; + pixel_x = 1; + pixel_y = 3 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"pcf" = ( +/obj/effect/landmark/corpsespawner/engineer, +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"pcA" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/effect/decal/cleanable/blood, +/obj/effect/ai_node, +/turf/open/floor/prison/whitegreen/corner{ + dir = 8 + }, +/area/daedalusprison/inside/medical/treatment) +"pcJ" = ( +/obj/structure/table/mainship, +/obj/item/tool/pickaxe/hammer, +/turf/open/floor/prison/darkyellow{ + dir = 4 + }, +/area/daedalusprison/inside/mechanicshop) +"pcM" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic/garden{ + name = "\improper Hydroponics Storage"; + dir = 1 + }, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"pdg" = ( +/obj/structure/table/reinforced/weak, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"pdu" = ( +/obj/effect/landmark/weed_node, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"pdA" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"pel" = ( +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"per" = ( +/obj/machinery/vending/security, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/westernbooth) +"pes" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/daedalusprison/inside/colonydorms) +"peJ" = ( +/obj/structure/table/woodentable, +/obj/machinery/chem_dispenser/soda{ + dir = 8 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"peK" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southwest) +"pfa" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/green/full, +/area/daedalusprison/inside/colonydorms) +"pfb" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/closed/wall/prison, +/area/daedalusprison/inside/habitationnorth) +"pfG" = ( +/obj/machinery/space_heater, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"pfH" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"pfK" = ( +/obj/structure/ore_box, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/mining) +"pfN" = ( +/turf/closed/shuttle/dropship2/front, +/area/daedalusprison/inside/pmcdropship) +"pfP" = ( +/obj/structure/closet/crate/freezer, +/turf/open/floor/mainship/purple{ + dir = 6 + }, +/area/daedalusprison/caves/research) +"pfW" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/janitorial) +"pgd" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/studyroom) +"pgA" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"pgJ" = ( +/obj/machinery/computer/intel_computer, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/security/medsec) +"phr" = ( +/obj/structure/filingcabinet, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/secbreakroom) +"phS" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"pil" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/weapon/twohanded/spear, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/gym) +"piy" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"piI" = ( +/obj/structure/fence/broken, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"piO" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"piQ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"pjy" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 8 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"pjY" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/freezer, +/area/daedalusprison/inside/staffrestroom) +"pkc" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/security/secbreakroom) +"pkd" = ( +/turf/open/floor/prison/darkred{ + dir = 6 + }, +/area/daedalusprison/inside/centralhalls) +"pki" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"pkj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"pkA" = ( +/obj/machinery/hydroponics/slashable, +/turf/open/floor/prison/green{ + dir = 9 + }, +/area/daedalusprison/inside/prisongarden) +"pkZ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/turf/open/floor/prison/green{ + dir = 8 + }, +/area/daedalusprison/inside/southclass) +"plC" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisongarden) +"plI" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/plating, +/area/daedalusprison/inside/colonydorms) +"plN" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/obj/machinery/light, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"plO" = ( +/obj/structure/table/woodentable, +/turf/open/floor/prison/green{ + dir = 8 + }, +/area/daedalusprison/inside/southclass) +"plU" = ( +/obj/structure/cable, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/power/apc/drained, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"pmh" = ( +/turf/open/floor/prison/green, +/area/daedalusprison/inside/prisongarden) +"pmk" = ( +/obj/structure/table/mainship, +/obj/item/paper, +/obj/item/tool/pen, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"pmw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"pmQ" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"pmT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"png" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"pnh" = ( +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"pnF" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/mining) +"poj" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"pop" = ( +/obj/structure/table/mainship, +/obj/machinery/faxmachine, +/turf/open/floor/tile/dark/brown2/corner, +/area/daedalusprison/inside/cargo) +"poO" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"ppb" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red/corner{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"pph" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/structure/cargo_container/red{ + dir = 1 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"ppx" = ( +/obj/effect/spawner/random/misc/plant, +/obj/machinery/light, +/turf/open/floor/tile/green/greentaupe{ + dir = 6 + }, +/area/daedalusprison/inside/hydroponics) +"ppC" = ( +/obj/structure/table/reinforced/weak, +/obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_mlaser, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/west) +"ppD" = ( +/turf/closed/shuttle/dropship2/rearcorner/alt{ + dir = 1 + }, +/area/daedalusprison/inside/pmcdropship) +"pqv" = ( +/obj/structure/bed/chair, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/green{ + dir = 4 + }, +/area/daedalusprison/inside/southclass) +"pqR" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"pqS" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"prf" = ( +/obj/item/shard, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical/treatment) +"prk" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/auxstorage) +"prx" = ( +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"prH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"prJ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/prisongarden) +"prV" = ( +/turf/closed/wall/r_wall, +/area/daedalusprison/inside/engineering) +"prY" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/office) +"psa" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"psc" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"psm" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/janitorial) +"psn" = ( +/obj/structure/bed/bunkbed, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"pst" = ( +/turf/open/floor/prison/green, +/area/daedalusprison/inside/westcomputerlab) +"psx" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/darkred/corners{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"psP" = ( +/obj/structure/bed/chair/office/dark, +/obj/effect/ai_node, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/daedalusprison/inside/southmeetingroom) +"psR" = ( +/obj/structure/bed/chair/office/dark/east, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"psT" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/mining) +"pta" = ( +/obj/machinery/griddle, +/obj/item/reagent_containers/food/snacks/bearmeat, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"ptc" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"ptH" = ( +/obj/item/ammo_casing/bullet, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/machinery/power/apc/drained{ + dir = 1 + }, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/secbreakroom) +"ptL" = ( +/obj/machinery/air_alarm{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupe{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"puj" = ( +/obj/structure/bed/chair, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"pul" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing, +/obj/item/ammo_casing, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/barracks) +"puv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/sportstorage) +"puQ" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"puR" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison/cellstripe{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"puZ" = ( +/obj/structure/table/reinforced/weak, +/obj/item/storage/box/gloves, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"pvi" = ( +/obj/structure/cable, +/obj/machinery/power/apc{ + dir = 4 + }, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"pvv" = ( +/obj/machinery/colony_floodlight_switch, +/turf/closed/wall/r_wall, +/area/daedalusprison/inside/engineering) +"pvH" = ( +/obj/machinery/space_heater, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"pvM" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"pwo" = ( +/obj/effect/landmark/corpsespawner/commander, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/security/easternbooth) +"pws" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupe{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"pxe" = ( +/obj/effect/ai_node, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"pxq" = ( +/obj/structure/closet/crate/hydroponics/prespawned, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"pxG" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/barracks) +"pxW" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"pyw" = ( +/obj/effect/spawner/random/misc/structure/curtain/medical, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"pyB" = ( +/obj/structure/closet/firecloset/full, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"pyI" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast) +"pyL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"pzf" = ( +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"pzx" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/table/reinforced/weak, +/obj/item/storage/pill_bottle/tramadol, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"pzD" = ( +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/easternhalls) +"pzO" = ( +/obj/structure/table/mainship/nometal, +/obj/item/storage/box/gloves, +/turf/open/floor/prison/whitepurple{ + dir = 4 + }, +/area/daedalusprison/inside/medical/chemistry) +"pAa" = ( +/turf/open/floor/tile/chapel{ + dir = 8 + }, +/area/daedalusprison/inside/chapel) +"pAk" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"pAu" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/whitepurple{ + dir = 10 + }, +/area/daedalusprison/inside/medical/chemistry) +"pAF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker) +"pBk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/janitorial) +"pBx" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/beaker/regularweighted, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"pBz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"pCo" = ( +/obj/structure/table/mainship, +/obj/item/toy/deck, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"pCq" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitegreen{ + dir = 4 + }, +/area/daedalusprison/inside/medical) +"pCr" = ( +/obj/effect/landmark/patrol_point/tgmc_22, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"pCw" = ( +/obj/machinery/sleeper{ + dir = 8 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"pCP" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"pDR" = ( +/obj/structure/sink, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationsouth) +"pEa" = ( +/obj/structure/bed/chair/office/dark, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/daedalusprison/inside/southmeetingroom) +"pEb" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/studyroom) +"pEO" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"pES" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"pEW" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/effect/spawner/random/misc/structure/supplycrate, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonyauxstorage) +"pFl" = ( +/obj/structure/table/woodentable, +/obj/structure/prop/computer/broken/fifteen, +/turf/open/floor/prison/green, +/area/daedalusprison/inside/southclass) +"pFx" = ( +/obj/effect/landmark/xeno_silo_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest/garbledradio) +"pFz" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"pGk" = ( +/obj/effect/decal/cleanable/blood/oil, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/garage) +"pGs" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/machinery/power/apc/drained{ + dir = 8 + }, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"pHe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"pHp" = ( +/obj/machinery/door/airlock/dropship_hatch/right/two, +/turf/open/shuttle/dropship/three, +/area/daedalusprison/inside/pmcdropship) +"pHx" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/dark/brown2/corner, +/area/daedalusprison/inside/cargo) +"pHL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"pHP" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"pHS" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/daedalusprison/inside/cargo) +"pIm" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"pIt" = ( +/obj/structure/window_frame/prison/reinforced, +/obj/item/shard, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"pID" = ( +/obj/structure/table/reinforced/weak, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"pIH" = ( +/obj/effect/decal/cleanable/blood/oil, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"pIT" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/corporateoffice) +"pJh" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + dir = 1; + name = "Staff Breakroom" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"pJI" = ( +/obj/effect/landmark/corpsespawner/colonist, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"pKp" = ( +/obj/machinery/atmospherics/pipe/manifold4w/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"pKu" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/freezer, +/area/daedalusprison/inside/staffrestroom) +"pLw" = ( +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/misc/paperbin, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"pLH" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/daedalusprison/inside/hydroponics) +"pLZ" = ( +/obj/structure/prop/mainship/brokengen, +/obj/structure/cable, +/turf/open/floor/mainship/orange{ + dir = 1 + }, +/area/daedalusprison/caves/research) +"pMc" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/cellstripe{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"pMG" = ( +/obj/structure/filingcabinet, +/obj/machinery/light, +/turf/open/floor/tile/dark/red2, +/area/daedalusprison/inside/seccheckpoint) +"pMN" = ( +/turf/open/floor/prison/red/corner{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"pMV" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/centralbooth) +"pNi" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/engineering/toolbox, +/obj/machinery/light, +/turf/open/floor/prison/darkyellow{ + dir = 10 + }, +/area/daedalusprison/inside/mechanicshop) +"pNo" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/red/full, +/area/daedalusprison/inside/security/office) +"pNq" = ( +/obj/effect/landmark/corpsespawner/bridgeofficer, +/turf/open/floor/tile/barber, +/area/daedalusprison/inside/corporateoffice) +"pNJ" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"pNL" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred/corners, +/area/daedalusprison/inside/centralhalls) +"pNT" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/machinery/light/small, +/obj/effect/spawner/random/misc/soap/regularweighted, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"pOP" = ( +/obj/effect/landmark/xeno_silo_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest/garbledradio) +"pPh" = ( +/obj/machinery/power/apc/drained, +/obj/effect/mapping_helpers/broken_apc/lowchance, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/studyroom) +"pPi" = ( +/obj/machinery/door/airlock/vault{ + name = "\improper Armory" + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"pPz" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/daedalusprison/inside/cargo) +"pPI" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"pPL" = ( +/obj/structure/bed/chair/office/dark/west, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"pQN" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"pQR" = ( +/obj/structure/window/framed/colony, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"pQV" = ( +/obj/machinery/door/airlock/multi_tile/mainship/secdoor/glass{ + name = "\improper Infimary Security" + }, +/obj/structure/cable, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/security/medsec) +"pRV" = ( +/obj/item/reagent_containers/glass/bucket/janibucket, +/obj/item/tool/mop, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/darkpurple{ + dir = 5 + }, +/area/daedalusprison/inside/janitorial) +"pSe" = ( +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"pSv" = ( +/turf/closed/shuttle/dropship2/fins{ + dir = 6 + }, +/area/daedalusprison/inside/pmcdropship) +"pSw" = ( +/obj/structure/table/mainship, +/obj/item/clothing/suit/storage/chef/classic, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"pSy" = ( +/turf/open/floor/prison/cellstripe, +/area/daedalusprison/inside/habitationsouth) +"pTC" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"pTG" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"pTM" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/turf/open/floor/prison/whitegreen{ + dir = 4 + }, +/area/daedalusprison/inside/medical) +"pUN" = ( +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisonshower) +"pVk" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"pVZ" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"pWs" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"pWv" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 2 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"pWF" = ( +/obj/structure/prop/mainship/gelida/smallwire, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"pWG" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/decal/cleanable/blood, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"pWM" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/lobby) +"pXq" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"pXH" = ( +/obj/item/storage/bible, +/turf/open/floor/tile/chapel{ + dir = 1 + }, +/area/daedalusprison/inside/chapel) +"pXZ" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/hydroponics) +"pYa" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"pYp" = ( +/obj/structure/bed/chair/janicart, +/turf/open/floor/prison/darkpurple{ + dir = 9 + }, +/area/daedalusprison/inside/janitorial) +"pYq" = ( +/obj/structure/rack, +/obj/item/toy/plush/gnome, +/turf/open/floor/prison, +/area/daedalusprison/inside/sportstorage) +"pYC" = ( +/obj/structure/table/mainship, +/obj/item/reagent_containers/food/drinks/coffee, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"pZh" = ( +/obj/structure/sink{ + dir = 4 + }, +/obj/structure/mirror{ + dir = 8 + }, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"pZn" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/effect/ai_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"pZp" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/obj/machinery/light, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"pZJ" = ( +/obj/machinery/door/airlock/mainship/generic{ + name = "\improper Toilet Unit" + }, +/turf/open/floor/freezer, +/area/daedalusprison/inside/staffrestroom) +"qad" = ( +/obj/item/ammo_casing/bullet, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"qai" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"qaO" = ( +/turf/closed/shuttle/dropship2/enginethree{ + dir = 1 + }, +/area/daedalusprison/inside/pmcdropship) +"qbd" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/green{ + dir = 8 + }, +/area/daedalusprison/inside/northmeetingroom) +"qbz" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/green, +/area/daedalusprison/inside/northmeetingroom) +"qcb" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/faxmachine, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"qcB" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 6 + }, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"qcV" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"qdd" = ( +/obj/structure/table, +/obj/item/tool/analyzer/plant_analyzer, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"qdf" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/faxmachine, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"qdt" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"qdv" = ( +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/inside/laundromat/collapsedroof) +"qdF" = ( +/obj/structure/rack, +/obj/effect/spawner/random/medical/heal_pack, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"qdG" = ( +/obj/effect/turf_decal/warning_stripes/thick/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"qdL" = ( +/obj/structure/table/mainship, +/obj/item/reagent_containers/food/snacks/sliceable/sandwiches/meatbread, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"qea" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 1 + }, +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 8 + }, +/obj/structure/prop/mainship/gelida/lightstick{ + pixel_x = 7; + pixel_y = 17 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"qel" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"qer" = ( +/obj/machinery/door/airlock/multi_tile/mainship/comdoor/free_access{ + name = "\improper Meeting Hall" + }, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"qeC" = ( +/turf/open/floor/tile/dark/green2{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"qeG" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"qfj" = ( +/obj/structure/rack, +/obj/item/weapon/shield/riot, +/obj/item/weapon/shield/riot, +/turf/open/floor/tile/dark2, +/area/daedalusprison/caves/nukestorage) +"qft" = ( +/obj/structure/table/reinforced/weak, +/obj/item/storage/surgical_tray, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"qfz" = ( +/obj/structure/table/reinforced/weak, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"qfK" = ( +/obj/structure/table/mainship, +/obj/item/explosive/grenade/flare/civilian, +/obj/item/explosive/grenade/flare/civilian, +/obj/item/explosive/grenade/flare/civilian, +/obj/item/explosive/grenade/flare/civilian, +/obj/item/explosive/grenade/flare/civilian, +/turf/open/floor/tile/dark/yellow2{ + dir = 10 + }, +/area/daedalusprison/inside/engineering) +"qfP" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/sportstorage) +"qfX" = ( +/obj/structure/table/woodentable, +/obj/effect/spawner/random/clothing/sunglasses, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/habitationsouth) +"qfZ" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/ai_node, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"qgt" = ( +/obj/structure/window_frame/prison/reinforced, +/obj/item/shard, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"qgu" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/darkred/corners{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"qgK" = ( +/obj/machinery/vending/cola, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"qgO" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/office) +"qhk" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"qhn" = ( +/obj/structure/closet/crate/freezer, +/turf/open/floor/mainship/purple, +/area/daedalusprison/caves/research) +"qhz" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/office) +"qhX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"qik" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4 + }, +/turf/open/floor/tile/dark/red2{ + dir = 8 + }, +/area/daedalusprison/inside/seccheckpoint) +"qix" = ( +/obj/effect/decal/cleanable/blood, +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"qjg" = ( +/obj/effect/decal/cleanable/blood/oil/streak, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonyauxstorage) +"qjj" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/flora/ausbushes/pointybush, +/turf/open/ground/grass/weedable, +/area/daedalusprison/inside/hydroponics) +"qjk" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"qjV" = ( +/obj/structure/table/mainship, +/obj/item/book, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"qjZ" = ( +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"qkc" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/mining) +"qkt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/mainship, +/obj/effect/spawner/random/clothing/sunglasses, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/office) +"qkZ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor, +/area/daedalusprison/inside/garden) +"qlt" = ( +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisonshower) +"qlA" = ( +/turf/open/floor/prison/red/corner{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"qlF" = ( +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/west) +"qlH" = ( +/turf/closed/shuttle/dropship2/enginetwo{ + dir = 8 + }, +/area/daedalusprison/inside/pmcdropship) +"qlR" = ( +/obj/machinery/disposal, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"qlS" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"qlW" = ( +/obj/machinery/disposal, +/turf/open/floor/tile/green/greentaupe{ + dir = 10 + }, +/area/daedalusprison/inside/hydroponics) +"qme" = ( +/obj/machinery/door/airlock/multi_tile/mainship/medidoor{ + name = "Sick Ward" + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"qmm" = ( +/obj/structure/filingcabinet, +/obj/machinery/light, +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/habitationsouth) +"qms" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"qmP" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"qmY" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"qnf" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisongarden) +"qnT" = ( +/turf/open/floor/tile/dark/brown2, +/area/daedalusprison/inside/cargo) +"qnY" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"qoa" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/structure/cargo_container/horizontal{ + dir = 1 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonyauxstorage) +"qow" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"qox" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/computer/intel_computer, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"qoP" = ( +/obj/structure/largecrate/random, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/auxstorage) +"qoX" = ( +/obj/structure/curtain/shower, +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"qpC" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"qpD" = ( +/obj/effect/spawner/random/engineering/ore_box, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/northeast) +"qpK" = ( +/obj/machinery/space_heater, +/obj/effect/landmark/weed_node, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"qqa" = ( +/obj/structure/table/mainship, +/obj/item/tool/stamp/ce, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"qqb" = ( +/obj/structure/filingcabinet/security, +/obj/machinery/light, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"qqc" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest) +"qqi" = ( +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"qqs" = ( +/obj/structure/table, +/obj/effect/spawner/random/misc/trash, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupe{ + dir = 6 + }, +/area/daedalusprison/inside/hydroponics) +"qqy" = ( +/obj/structure/table/mainship, +/obj/item/tool/stamp/qm, +/turf/open/floor/tile/dark/brown2/corner, +/area/daedalusprison/inside/cargo) +"qqW" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"qrc" = ( +/obj/effect/spawner/random/misc/plant, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupe{ + dir = 5 + }, +/area/daedalusprison/inside/hydroponics) +"qrE" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/interrogation) +"qrU" = ( +/obj/structure/table/mainship, +/obj/machinery/faxmachine, +/turf/open/floor/prison/whitepurple{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"qsr" = ( +/turf/open/floor/prison/green{ + dir = 9 + }, +/area/daedalusprison/inside/southclass) +"qsH" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/table/reinforced/weak, +/obj/item/trash/burger, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"qta" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/misc/paperbin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/tool/pen{ + pixel_x = 9; + pixel_y = 8 + }, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/easternbooth) +"qtj" = ( +/obj/structure/window/framed/colony, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/secoffices) +"qtE" = ( +/turf/closed/shuttle/dropship2/enginetwo, +/area/daedalusprison/inside/pmcdropship) +"qtZ" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/computer/intel_computer, +/turf/open/floor/tile/green/full, +/area/daedalusprison/inside/colonydorms) +"qui" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"quv" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"quw" = ( +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"quy" = ( +/obj/effect/decal/cleanable/blood, +/obj/item/tool/kitchen/knife/shiv, +/turf/open/floor/tile/chapel{ + dir = 8 + }, +/area/daedalusprison/inside/chapel) +"quA" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/machinery/air_alarm, +/obj/effect/ai_node, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical/treatment) +"quG" = ( +/obj/structure/toilet{ + dir = 1 + }, +/turf/open/floor/prison/cellstripe, +/area/daedalusprison/inside/habitationsouth) +"quO" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison/bright_clean/two, +/area/daedalusprison/inside/sportstorage) +"qvj" = ( +/obj/structure/fence/broken, +/obj/structure/platform/rockcliff/icycliff/nondense, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"qvZ" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"qwj" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"qwy" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/cameras) +"qwB" = ( +/obj/structure/prop/mainship/hangar_stencil, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 10 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"qwC" = ( +/obj/effect/spawner/random/misc/structure/crate, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/daedalusprison/inside/cargo) +"qxm" = ( +/obj/structure/prop/computer/broken, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark/red2{ + dir = 4 + }, +/area/daedalusprison/inside/seccheckpoint) +"qxq" = ( +/obj/item/ammo_casing, +/obj/item/ammo_casing, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"qxs" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/east) +"qyk" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/southeast) +"qyn" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bar) +"qyq" = ( +/obj/item/ammo_casing/shell, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/centralhalls) +"qys" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"qyw" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"qyG" = ( +/obj/structure/rack, +/obj/item/tool/wrench, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"qyS" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"qyZ" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/daedalusprison/inside/engineering) +"qzj" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"qzO" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"qzU" = ( +/obj/structure/sink{ + dir = 8 + }, +/obj/structure/mirror{ + dir = 4 + }, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"qzZ" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"qAO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"qBs" = ( +/obj/structure/window_frame/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"qBU" = ( +/obj/structure/table/woodentable, +/obj/effect/spawner/random/misc/book, +/turf/open/floor/prison, +/area/daedalusprison/inside/northclass) +"qCK" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/centralhalls) +"qDm" = ( +/obj/structure/table/reinforced/weak, +/obj/item/tool/hand_labeler, +/obj/machinery/door/poddoor/shutters{ + id = "DPsec" + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"qDE" = ( +/obj/structure/bed/chair/comfy/black, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"qDK" = ( +/obj/machinery/door/airlock/multi_tile/mainship/secdoor/glass{ + name = "\improper Landing Zone Bunker" + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker) +"qDY" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"qEm" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/easternhalls) +"qEn" = ( +/obj/machinery/vending/hydroseeds, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"qEo" = ( +/obj/machinery/power/terminal, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"qEE" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"qFa" = ( +/obj/item/ammo_casing/bullet, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"qFg" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"qFB" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"qFR" = ( +/obj/machinery/door/airlock/prison/horizontal/open, +/turf/open/floor/prison/red/full, +/area/daedalusprison/inside/habitationsouth) +"qGc" = ( +/mob/living/simple_animal/cow, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/freezer) +"qGK" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/structure/cargo_container/gorg{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonyauxstorage) +"qGL" = ( +/obj/machinery/space_heater, +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 6 + }, +/area/daedalusprison/inside/barracks) +"qHg" = ( +/obj/machinery/shower{ + dir = 4; + pixel_y = -3 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"qHh" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"qHy" = ( +/obj/effect/landmark/xeno_tunnel_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/east) +"qIj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/gym) +"qIl" = ( +/obj/structure/table/mainship, +/obj/item/toy/dice/d20, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"qIr" = ( +/obj/effect/landmark/weed_node, +/obj/machinery/air_alarm, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"qIH" = ( +/obj/machinery/light, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"qIM" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north/garbledradio) +"qIZ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"qJi" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/daedalusprison/inside/colonydorms) +"qJx" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"qJK" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"qJQ" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/green/greentaupe{ + dir = 10 + }, +/area/daedalusprison/inside/hydroponics) +"qLA" = ( +/obj/structure/table/reinforced/weak, +/obj/item/storage/box/gloves, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"qLC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"qLK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"qLN" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/computer/security{ + network = list("PRISON") + }, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/cameras) +"qMc" = ( +/obj/machinery/air_alarm, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"qMe" = ( +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"qMk" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"qMB" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/whitegreen/corner{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"qME" = ( +/obj/structure/bed/chair, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"qNn" = ( +/obj/structure/prop/vehicle/truck/truckcargo/destructible{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"qOl" = ( +/obj/item/stack/tile, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"qOx" = ( +/obj/structure/filingcabinet/security, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"qOK" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"qOV" = ( +/obj/structure/bookcase, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"qPv" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"qPN" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"qPQ" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/computer/secure_data, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/cameras) +"qPY" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"qQi" = ( +/obj/structure/largecrate/random, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/auxstorage) +"qQG" = ( +/obj/machinery/vending/cola, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"qRW" = ( +/obj/structure/table/mainship, +/obj/item/weapon/classic_baton, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/barracks) +"qRX" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"qTg" = ( +/obj/structure/window/framed/prison/cell, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"qTk" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/chapel{ + dir = 1 + }, +/area/daedalusprison/inside/chapel) +"qTU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"qUi" = ( +/obj/machinery/disposal, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/habitationsouth) +"qUq" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/food_or_drink/drink_cans, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"qUH" = ( +/obj/structure/table/reinforced/weak, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"qVp" = ( +/obj/structure/curtain/medical, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"qVr" = ( +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/northeast) +"qVN" = ( +/obj/structure/table/woodentable, +/obj/item/tool/pen/blue{ + pixel_x = 5 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"qWc" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"qWv" = ( +/obj/machinery/shower{ + dir = 4; + pixel_y = -3 + }, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"qWH" = ( +/obj/structure/fence/broken, +/obj/effect/landmark/weed_node, +/obj/structure/platform/rockcliff/icycliff/nondense{ + dir = 9 + }, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"qWM" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green, +/area/daedalusprison/inside/northmeetingroom) +"qWN" = ( +/obj/structure/bed/chair/comfy, +/obj/effect/ai_node, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"qWX" = ( +/obj/machinery/door/airlock/multi_tile/mainship/comdoor/free_access{ + name = "\improper Meeting Hall" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"qXg" = ( +/obj/effect/ai_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"qXn" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"qXp" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/turf/open/floor/prison/darkred{ + dir = 5 + }, +/area/daedalusprison/inside/centralhalls) +"qXt" = ( +/obj/structure/bed/chair/comfy, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"qXu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"qYn" = ( +/obj/structure/table/mainship, +/obj/item/book/manual/marine_law, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/office) +"qYt" = ( +/obj/machinery/door/airlock/mainship/secure/free_access{ + name = "Execution Chamber" + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"qYN" = ( +/obj/item/lightstick/red/anchored, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/northeast) +"qZB" = ( +/obj/structure/table/woodentable, +/obj/item/paper, +/turf/open/floor/prison/green{ + dir = 4 + }, +/area/daedalusprison/inside/southclass) +"qZE" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"qZK" = ( +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/medsec) +"rad" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"rao" = ( +/obj/effect/decal/cleanable/blood/gibs/body, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"rbi" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/east) +"rbn" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/interrogation) +"rbA" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/sportstorage) +"rcH" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"rdh" = ( +/obj/machinery/door/airlock/multi_tile/mainship/secdoor/glass{ + name = "\improper Guard Barracks" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"rdo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"rdC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"ree" = ( +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"reF" = ( +/obj/machinery/vending/snack, +/turf/open/floor/tile/green/greentaupe{ + dir = 10 + }, +/area/daedalusprison/inside/hydroponics) +"reJ" = ( +/obj/item/reagent_containers/pill/happy, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/gym) +"reP" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/wood, +/area/daedalusprison/inside/habitationsouth) +"reU" = ( +/obj/machinery/space_heater, +/obj/machinery/light, +/turf/open/floor/tile/dark/yellow2{ + dir = 6 + }, +/area/daedalusprison/inside/engineering) +"rff" = ( +/obj/structure/filingcabinet, +/turf/open/floor/tile/dark/red2{ + dir = 1 + }, +/area/daedalusprison/inside/seccheckpoint) +"rfn" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/obj/effect/landmark/corpsespawner/commander, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/security/warden) +"rfq" = ( +/obj/structure/barricade/metal{ + dir = 8 + }, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"rfH" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/interrogation) +"rfJ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"rfR" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"rgm" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"rgs" = ( +/turf/open/floor/prison/whitepurple{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"rgv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/darkred{ + dir = 5 + }, +/area/daedalusprison/inside/centralhalls) +"rgH" = ( +/obj/effect/landmark/corpsespawner/colonist, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"rgK" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/power/geothermal, +/obj/structure/cable, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"rgO" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/north) +"rgW" = ( +/turf/open/floor/prison/red/corner{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"rhd" = ( +/obj/structure/table/woodentable, +/obj/item/paper, +/obj/item/tool/pen/blue{ + pixel_x = 5 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/northclass) +"rhF" = ( +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"ria" = ( +/obj/structure/closet/secure_closet/personal, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/barracks) +"rik" = ( +/obj/machinery/space_heater, +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green{ + dir = 6 + }, +/area/daedalusprison/inside/northmeetingroom) +"rin" = ( +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/northeast) +"rit" = ( +/obj/effect/acid_hole, +/turf/closed/wall/prison, +/area/daedalusprison/inside/habitationnorth) +"riG" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/habitationsouth) +"riX" = ( +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north/garbledradio) +"rjf" = ( +/obj/machinery/button/door/open_only/landing_zone, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"rjo" = ( +/obj/item/stack/barbed_wire, +/turf/open/floor/prison/darkred{ + dir = 6 + }, +/area/daedalusprison/inside/centralhalls) +"rjD" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/daedalusprison/inside/southmeetingroom) +"rjH" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/ai_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"rjL" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/westernbooth) +"rjN" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"rjQ" = ( +/obj/structure/table, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"rjR" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"rkk" = ( +/obj/effect/landmark/patrol_point/som/som_24, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast) +"rkp" = ( +/obj/effect/turf_decal/tracks/wheels/bloody, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"rkw" = ( +/obj/machinery/disposal, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"rky" = ( +/obj/structure/table/mainship, +/obj/machinery/microwave, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"rkX" = ( +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/recreation) +"rlt" = ( +/obj/structure/table/mainship, +/obj/item/tool/soap, +/turf/open/floor/prison/darkpurple, +/area/daedalusprison/inside/janitorial) +"rlC" = ( +/obj/item/stack/rods, +/turf/open/floor/prison/red/corner{ + dir = 4 + }, +/area/daedalusprison/inside/gym) +"rlD" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 4 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"rlF" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"rlP" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"rmp" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained{ + dir = 8 + }, +/turf/open/floor/prison/darkpurple{ + dir = 4 + }, +/area/daedalusprison/inside/janitorial) +"rmF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"rmP" = ( +/obj/structure/sink, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationnorth) +"rmZ" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"rnc" = ( +/obj/structure/filingcabinet/medical, +/obj/machinery/light, +/turf/open/floor/tile/blue/whiteblue, +/area/daedalusprison/inside/southmeetingroom) +"rnl" = ( +/obj/item/ammo_casing, +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/tile/dark/red2{ + dir = 1 + }, +/area/daedalusprison/inside/seccheckpoint) +"rnr" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"rnA" = ( +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"rog" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"roj" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/bloodpack, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"roD" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"rpe" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonyauxstorage) +"rpv" = ( +/obj/structure/toilet{ + pixel_y = 8 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/cellstripe{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"rpx" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/darkred{ + dir = 5 + }, +/area/daedalusprison/inside/centralhalls) +"rqb" = ( +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"rqe" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 8 + }, +/obj/structure/prop/mainship/gelida/smallwire, +/obj/structure/prop/mainship/gelida/lightstick{ + pixel_x = 6; + pixel_y = 7 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"rqq" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"rqO" = ( +/turf/closed/shuttle/dropship2/finleft, +/area/daedalusprison/inside/pmcdropship) +"rqQ" = ( +/turf/closed/shuttle/dropship2/corners, +/area/daedalusprison/inside/pmcdropship) +"rqR" = ( +/obj/machinery/air_alarm{ + dir = 8 + }, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"rrg" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"rru" = ( +/obj/machinery/space_heater, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/darkyellow{ + dir = 5 + }, +/area/daedalusprison/inside/mechanicshop) +"rsg" = ( +/obj/effect/landmark/xeno_tunnel_spawn, +/turf/open/floor/plating, +/area/daedalusprison/inside/hydroponics) +"rsN" = ( +/obj/machinery/space_heater, +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/barracks) +"rsQ" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/westcomputerlab) +"rtq" = ( +/obj/item/weapon/gun/revolver/judge, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"rtA" = ( +/obj/item/weapon/gun/rifle/m16, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"rtB" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/east) +"rtG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"rtH" = ( +/obj/structure/table/mainship, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"rtQ" = ( +/obj/item/tool/mop, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"rua" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/whitegreen{ + dir = 9 + }, +/area/daedalusprison/inside/medical) +"ruD" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"ruI" = ( +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"rvc" = ( +/obj/structure/table/reinforced/weak, +/obj/item/detective_scanner, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"rvd" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"rvI" = ( +/obj/structure/table/mainship, +/obj/item/storage/fancy/cigar, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"rvL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/daedalusprison/inside/colonydorms) +"rvS" = ( +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"rwg" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"rwl" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"rwp" = ( +/obj/structure/window/framed/colony, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"rwH" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"rwZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/barracks) +"rxG" = ( +/obj/machinery/telecomms/relay/preset/telecomms, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/daedalusprison/inside/telecomms) +"rxH" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/machinery/light, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"rxM" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"rxS" = ( +/obj/machinery/washing_machine, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"ryA" = ( +/obj/machinery/door/poddoor/mainship{ + dir = 2; + id = "checkpoint1" + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"ryE" = ( +/obj/effect/spawner/random/engineering/pickaxe, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/northeast) +"ryH" = ( +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"ryW" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/ai_node, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"rzf" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"rzB" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/east) +"rzS" = ( +/obj/structure/window_frame/prison/reinforced, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"rzU" = ( +/obj/structure/table/mainship, +/obj/structure/prop/computer/broken/twelve, +/turf/open/floor/tile/brown/full, +/area/daedalusprison/inside/engineering) +"rAg" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/medbottle, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"rAN" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"rAO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"rBk" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"rBD" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"rBE" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/daedalusprison/caves/nukestorage) +"rBH" = ( +/obj/structure/table/mainship, +/obj/item/paper, +/obj/item/tool/pen/blue{ + pixel_x = 5 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"rBO" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"rCj" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/closet/secure_closet/security, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"rCl" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/corporateoffice) +"rCw" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/chapel{ + dir = 4 + }, +/area/daedalusprison/inside/chapel) +"rCG" = ( +/obj/structure/bed/roller, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"rCV" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"rCZ" = ( +/obj/machinery/light, +/obj/machinery/computer/intel_computer, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"rDi" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"rDq" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/barricade/metal{ + dir = 8 + }, +/turf/open/floor/prison/whitegreen{ + dir = 4 + }, +/area/daedalusprison/inside/medical) +"rDu" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/janitorial) +"rDw" = ( +/obj/structure/table/woodentable, +/obj/effect/spawner/random/misc/book, +/turf/open/floor/prison/green{ + dir = 4 + }, +/area/daedalusprison/inside/southclass) +"rDA" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"rDQ" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"rDR" = ( +/obj/machinery/griddle, +/obj/item/reagent_containers/food/snacks/rawcutlet, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"rEo" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/machinery/light/small, +/obj/effect/spawner/random/misc/soap/regularweighted, +/obj/effect/landmark/corpsespawner/colonist, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"rEs" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"rEK" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"rFc" = ( +/obj/machinery/power/smes/buildable/empty{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/cobweb{ + dir = 1 + }, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"rFn" = ( +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"rFW" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/prison/darkyellow{ + dir = 1 + }, +/area/daedalusprison/inside/sportstorage) +"rGk" = ( +/obj/structure/cable, +/obj/machinery/power/apc{ + dir = 1 + }, +/obj/machinery/light, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/center) +"rGO" = ( +/obj/machinery/vending/snack, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"rHh" = ( +/obj/structure/stairs/seamless, +/obj/effect/ai_node, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"rHx" = ( +/obj/structure/platform_decoration{ + dir = 4 + }, +/obj/item/ammo_casing/bullet, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"rHz" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/daedalusprison/inside/bar) +"rHM" = ( +/obj/effect/landmark/weed_node, +/obj/structure/barricade/wooden{ + dir = 8 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"rHQ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationnorth) +"rHS" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"rHV" = ( +/obj/structure/bed/chair/office/dark/west, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"rHX" = ( +/obj/effect/landmark/weed_node, +/obj/machinery/firealarm, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/westernbooth) +"rIj" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"rIs" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"rIx" = ( +/obj/structure/bed/chair/sofa/left, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"rIB" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"rIG" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/studyroom) +"rII" = ( +/obj/machinery/iv_drip, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical/treatment) +"rIP" = ( +/turf/open/floor/prison/darkpurple{ + dir = 8 + }, +/area/daedalusprison/inside/janitorial) +"rJc" = ( +/obj/machinery/space_heater, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 9 + }, +/area/daedalusprison/inside/habitationnorth) +"rJe" = ( +/obj/item/shard, +/turf/open/floor/prison/darkred{ + dir = 10 + }, +/area/daedalusprison/inside/centralhalls) +"rJv" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4 + }, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"rJL" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"rJN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/weapon/gun/revolver/standard_revolver, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"rJT" = ( +/obj/structure/bed/chair, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"rJU" = ( +/obj/structure/table/mainship, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"rKc" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"rKk" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"rKJ" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"rKV" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"rLe" = ( +/obj/effect/landmark/patrol_point/som/som_13, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest/garbledradio) +"rLi" = ( +/obj/item/tool/wet_sign, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"rLx" = ( +/obj/effect/landmark/xeno_resin_wall, +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest/garbledradio) +"rMf" = ( +/obj/structure/cable, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/auxstorage) +"rMx" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"rMB" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"rMH" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"rMV" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"rNh" = ( +/obj/machinery/door/airlock/multi_tile/mainship/secdoor/glass{ + name = "\improper Western Bunker" + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/west) +"rNP" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"rOc" = ( +/obj/structure/filingcabinet, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/secbreakroom) +"rOz" = ( +/obj/structure/filingcabinet/security, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"rOL" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"rOQ" = ( +/obj/structure/window/framed/colony/reinforced, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/east) +"rOS" = ( +/obj/structure/closet/secure_closet/security, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"rPD" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"rPG" = ( +/obj/structure/table, +/obj/item/storage/bag/plants, +/obj/item/storage/bag/plants, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"rPU" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/darkred/corners{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"rQj" = ( +/obj/machinery/air_alarm{ + dir = 4 + }, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/westernbooth) +"rQl" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/east) +"rQT" = ( +/obj/structure/stairs/seamless, +/turf/open/shuttle/dropship/three, +/area/daedalusprison/inside/pmcdropship) +"rRb" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"rRl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bookcase, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"rRn" = ( +/obj/structure/cable, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/power/apc/drained, +/turf/open/floor/plating, +/area/daedalusprison/inside/centralhalls) +"rRp" = ( +/obj/effect/spawner/random/misc/structure/crate, +/turf/open/floor/tile/dark/brown2, +/area/daedalusprison/inside/cargo) +"rSd" = ( +/obj/machinery/door/airlock/science{ + name = "\improper Examination Room" + }, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"rSi" = ( +/turf/closed/shuttle/dropship2/finback, +/area/daedalusprison/inside/pmcdropship) +"rSk" = ( +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"rSs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/obj/effect/ai_node, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"rSE" = ( +/obj/machinery/vending/sovietsoda, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"rSI" = ( +/obj/machinery/photocopier, +/obj/machinery/power/apc, +/obj/structure/cable, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/security/warden) +"rSL" = ( +/obj/effect/landmark/corpsespawner/engineer, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"rSM" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"rSQ" = ( +/obj/structure/cable, +/obj/structure/prop/mainship/brokengen, +/turf/open/floor/podhatch/floor, +/area/daedalusprison/inside/engineering) +"rSU" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/north) +"rTc" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"rTn" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/computer/intel_computer, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/lobby) +"rTY" = ( +/obj/machinery/door/poddoor/timed_late/containment/landing_zone, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/daedalusprison/inside/landingzoneone) +"rTZ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"rUc" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"rUG" = ( +/obj/machinery/door/airlock/multi_tile/secure{ + dir = 2 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/caves/nukestorage) +"rUL" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"rUO" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"rUP" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/prisonshower) +"rVn" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 4 + }, +/turf/open/floor/tile/chapel{ + dir = 1 + }, +/area/daedalusprison/inside/chapel) +"rVy" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/daedalusprison/caves/research) +"rVI" = ( +/obj/machinery/microwave, +/obj/structure/table/mainship, +/obj/machinery/light, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"rVM" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"rVS" = ( +/obj/structure/sink{ + pixel_y = 15 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"rVV" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"rXB" = ( +/obj/machinery/power/monitor, +/obj/structure/cable, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"rXC" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/turf/open/floor/freezer, +/area/daedalusprison/inside/staffrestroom) +"rXI" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"rXL" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/sportstorage) +"rYD" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"rZI" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/computer/intel_computer, +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/barracks) +"rZU" = ( +/obj/structure/table/mainship, +/obj/machinery/microwave, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/barracks) +"rZW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/shell, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/barracks) +"sak" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"sat" = ( +/obj/item/shard, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"saF" = ( +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/burger/normal, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"saQ" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"saR" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"saX" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker) +"sbN" = ( +/obj/structure/prop/vehicle/truck/truckcargo/destructible{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/outside/south) +"sbQ" = ( +/obj/machinery/computer/body_scanconsole{ + dir = 8 + }, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"sbR" = ( +/obj/item/weapon/gun/revolver/small, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"scx" = ( +/obj/vehicle/train/cargo/engine, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/brown2{ + dir = 5 + }, +/area/daedalusprison/inside/cargo) +"scy" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"sdk" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/green/greentaupe{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"sdt" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/secbreakroom) +"sdP" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"seb" = ( +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"sec" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/habitationnorth) +"seg" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"sel" = ( +/obj/item/weapon/gun/shotgun/pump/cmb, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"seu" = ( +/obj/machinery/door/airlock/mainship/generic{ + name = "\improper Quartermaster's Office" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"seQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"seR" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark/red2, +/area/daedalusprison/inside/seccheckpoint) +"sfa" = ( +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"sfg" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"sfo" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/sportstorage) +"sfR" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/purple/corner, +/area/daedalusprison/caves/research) +"sfS" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"sgj" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/structure/cargo_container/nt{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"sgp" = ( +/obj/structure/table/mainship, +/obj/item/reagent_containers/food/snacks/donkpocket, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"sgF" = ( +/obj/item/shard, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/east) +"sgN" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bar) +"sgQ" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/flora/ausbushes/pointybush, +/turf/open/ground/grass/weedable, +/area/daedalusprison/inside/hydroponics) +"sha" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/security/secbreakroom) +"shm" = ( +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"shx" = ( +/obj/machinery/vending/security, +/obj/machinery/light, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"shQ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/lobby) +"sik" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"siv" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"siO" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/corpsespawner/prison_security, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"siU" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/item/stack/sheet/metal, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"skY" = ( +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationnorth) +"skZ" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"slc" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"sll" = ( +/obj/structure/bed/chair/office/dark/east, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"slr" = ( +/obj/structure/bed/chair/sofa, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"sls" = ( +/obj/structure/filingcabinet, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/office) +"slu" = ( +/obj/machinery/disposal, +/turf/open/floor/tile/dark/green2{ + dir = 9 + }, +/area/daedalusprison/inside/colonydorms) +"sme" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"smp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/brown/full, +/area/daedalusprison/inside/engineering) +"smF" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"smP" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"snd" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast) +"sno" = ( +/obj/item/ammo_casing/shell, +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"sns" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"snx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"snL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"snO" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"snP" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"snR" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"soa" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -11 + }, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"sol" = ( +/obj/mecha_wreckage/ripley, +/turf/open/floor/mech_bay_recharge_floor, +/area/daedalusprison/inside/cargo) +"sou" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/whitegreen{ + dir = 5 + }, +/area/daedalusprison/inside/medical) +"soT" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/sportstorage) +"spj" = ( +/obj/machinery/space_heater, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"spn" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/north) +"spD" = ( +/obj/machinery/vending/coffee, +/obj/machinery/light, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"spH" = ( +/obj/effect/landmark/corpsespawner/doctor, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"spL" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"sqb" = ( +/obj/machinery/door/poddoor/timed_late/containment/landing_zone, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/inside/landingzoneone) +"sql" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/gym) +"sqA" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"srk" = ( +/obj/structure/table/reinforced/weak, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"srA" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"srH" = ( +/obj/structure/table/mainship, +/obj/item/reagent_containers/food/snacks/burger/plain, +/obj/structure/cable, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"sse" = ( +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/centralhalls) +"ssj" = ( +/obj/machinery/light, +/turf/open/floor/prison/green{ + dir = 6 + }, +/area/daedalusprison/inside/prisongarden) +"ssm" = ( +/obj/structure/barricade/metal{ + dir = 8 + }, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"ssM" = ( +/obj/structure/bed/chair, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"stu" = ( +/obj/effect/landmark/weed_node, +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"stv" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/machinery/random_broken_computer/small, +/turf/open/floor/prison/green, +/area/daedalusprison/inside/westcomputerlab) +"stw" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"stE" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"stK" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/security/medsec) +"stN" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"sua" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/daedalusprison/inside/southmeetingroom) +"sui" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/studyroom) +"sum" = ( +/obj/structure/table/mainship, +/obj/structure/paper_bin{ + pixel_y = 8 + }, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"suJ" = ( +/obj/structure/table/woodentable, +/obj/effect/spawner/random/misc/paperbin, +/obj/item/tool/pen/blue{ + pixel_x = 5 + }, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/corporateoffice) +"svs" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"svM" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/barricade/metal{ + dir = 8 + }, +/obj/machinery/line_nexter{ + dir = 1 + }, +/turf/open/floor/prison/whitegreen{ + dir = 4 + }, +/area/daedalusprison/inside/medical) +"svY" = ( +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/janitorial) +"swk" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"swm" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 1 + }, +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 4 + }, +/obj/structure/prop/mainship/gelida/lightstick{ + pixel_x = -7; + pixel_y = 27 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"swJ" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"swY" = ( +/obj/structure/filingcabinet, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/westernbooth) +"sxb" = ( +/obj/machinery/disposal, +/turf/open/floor/prison/whitepurple{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"sxj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"sxx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"sxE" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/engineering/shovel, +/turf/open/floor/prison/green{ + dir = 8 + }, +/area/daedalusprison/inside/prisongarden) +"syf" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"syg" = ( +/obj/machinery/miner/damaged, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest) +"syy" = ( +/obj/structure/closet/secure_closet/medical3, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"syH" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"syI" = ( +/obj/structure/rack, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/head/helmet/riot, +/turf/open/floor/tile/dark2, +/area/daedalusprison/caves/nukestorage) +"szc" = ( +/obj/machinery/door/poddoor/timed_late/containment/landing_zone{ + dir = 2 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"szj" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"szz" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"szC" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"szD" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"szJ" = ( +/obj/item/stack/sheet/metal, +/obj/effect/decal/cleanable/greenglow, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"szO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"szU" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"sAp" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/secbreakroom) +"sAA" = ( +/obj/structure/rack, +/obj/item/explosive/grenade/smokebomb, +/obj/item/explosive/grenade/smokebomb, +/obj/item/explosive/grenade/smokebomb, +/obj/item/explosive/grenade/smokebomb, +/obj/item/explosive/grenade/smokebomb, +/turf/open/floor/tile/dark2, +/area/daedalusprison/caves/nukestorage) +"sAG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/filingcabinet, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/secbreakroom) +"sAI" = ( +/turf/open/floor/tile/dark/green2/corner{ + dir = 1 + }, +/area/daedalusprison/inside/colonydorms) +"sAV" = ( +/obj/structure/table/mainship, +/obj/item/tool/pen/blue{ + pixel_x = 5 + }, +/turf/open/floor/tile/blue/whiteblue, +/area/daedalusprison/inside/southmeetingroom) +"sBa" = ( +/obj/effect/landmark/xeno_tunnel_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/south) +"sBo" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/tile/dark/yellow2{ + dir = 6 + }, +/area/daedalusprison/inside/engineering) +"sBu" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"sBF" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"sBI" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"sBQ" = ( +/obj/machinery/computer/intel_computer, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"sBW" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/daedalusprison/inside/southmeetingroom) +"sCr" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"sCy" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/item/stack/sheet/metal, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"sCM" = ( +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/janitorial) +"sCN" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/obj/machinery/light, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"sDb" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"sDt" = ( +/obj/item/trash/cigbutt/cigarbutt, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/west) +"sDB" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"sDJ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"sDN" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/freezer) +"sEa" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"sEf" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southwest) +"sEO" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"sFl" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/cellstripe, +/area/daedalusprison/inside/habitationnorth) +"sFq" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/daedalusprison/inside/southmeetingroom) +"sFw" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest/garbledradio) +"sFA" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/northeast) +"sFL" = ( +/obj/machinery/light, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/interrogation) +"sFO" = ( +/turf/open/floor/prison/red{ + dir = 6 + }, +/area/daedalusprison/inside/centralhalls) +"sGa" = ( +/obj/effect/landmark/weed_node, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"sGg" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + name = "\improper Chapel"; + dir = 1 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"sGi" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/open/floor/plating, +/area/daedalusprison/inside/hydroponics) +"sGj" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"sGv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"sGF" = ( +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"sGK" = ( +/obj/effect/landmark/excavation_site_spawner, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/north) +"sGR" = ( +/obj/structure/nuke_disk_candidate{ + set_associations = list("set1", "set2") + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"sGS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"sHp" = ( +/obj/effect/spawner/random/misc/structure/stool, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"sHC" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/sportstorage) +"sHQ" = ( +/turf/open/floor/plating, +/area/daedalusprison/inside/landingzoneone) +"sHR" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"sHT" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/centralhalls) +"sHU" = ( +/obj/machinery/space_heater, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/daedalusprison/inside/southmeetingroom) +"sHV" = ( +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/daedalusprison/inside/colonydorms) +"sIc" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"sIk" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"sIr" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"sIt" = ( +/obj/item/tool/kitchen/utensil/knife, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"sIK" = ( +/obj/item/shard, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"sIL" = ( +/obj/structure/bed/chair/sofa/right, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"sIY" = ( +/obj/effect/spawner/random/engineering/ore_box, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/southeast) +"sJl" = ( +/obj/structure/table/woodentable, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_x = -2; + pixel_y = 4 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"sJA" = ( +/obj/effect/landmark/patrol_point/tgmc_24, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"sJI" = ( +/obj/structure/table/reinforced/weak, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/reagent_containers/spray/cleaner, +/turf/open/floor/prison/whitegreen{ + dir = 9 + }, +/area/daedalusprison/inside/medical) +"sJJ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen/corner{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"sKd" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/engineering/insulatedgloves, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"sKo" = ( +/obj/item/detective_scanner, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"sKu" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupe{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"sKH" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"sKN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"sKO" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bar) +"sKS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"sLx" = ( +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/daedalusprison/caves/rock) +"sLC" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"sLM" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"sLV" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"sMc" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"sMu" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"sMM" = ( +/obj/structure/prop/tgbrokenvendor/janidrobe, +/obj/machinery/light, +/turf/open/floor/prison/darkpurple{ + dir = 6 + }, +/area/daedalusprison/inside/janitorial) +"sMR" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"sNf" = ( +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"sNr" = ( +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"sNC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/bullet, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"sNG" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/east) +"sNH" = ( +/obj/structure/filingcabinet, +/turf/open/floor/tile/dark/red2, +/area/daedalusprison/inside/seccheckpoint) +"sOf" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"sOC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"sOR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"sPu" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"sPT" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"sPW" = ( +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/inside/laundromat/collapsedroof) +"sQc" = ( +/obj/structure/filingcabinet, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"sQe" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"sQi" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 6 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"sQl" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"sQM" = ( +/obj/structure/bed/chair{ + dir = 4; + pixel_x = 2; + pixel_y = 6 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"sQU" = ( +/obj/effect/landmark/corpsespawner/engineer, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"sRa" = ( +/turf/closed/wall, +/area/daedalusprison/inside/seccheckpoint) +"sRr" = ( +/obj/effect/decal/cleanable/glass, +/obj/structure/cable, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"sRI" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"sSD" = ( +/obj/structure/nuke_disk_candidate{ + set_associations = list("set1", "set2", "set3", "set4") + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/medsec) +"sSG" = ( +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/lobby) +"sSZ" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/basketball) +"sTb" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/bloodpack, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"sTo" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/prison/darkred/corners{ + dir = 4 + }, +/area/daedalusprison/inside/easternhalls) +"sTv" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"sTw" = ( +/obj/structure/sink{ + dir = 1 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationsouth) +"sTx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"sTy" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/secbreakroom) +"sTP" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/northeast) +"sUx" = ( +/obj/effect/spawner/random/medical/beaker, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"sUN" = ( +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"sUX" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 6 + }, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/security/warden) +"sVl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/ai_node, +/obj/structure/cable, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"sVn" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/daedalusprison/inside/centralhalls) +"sVv" = ( +/turf/closed/shuttle/dropship2/corners{ + dir = 8 + }, +/area/daedalusprison/inside/pmcdropship) +"sVB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"sVL" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/lobby) +"sWa" = ( +/obj/structure/sign/hydro{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/northeast) +"sWd" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall/r_wall/prison, +/area/daedalusprison/inside/barracks) +"sWn" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"sWx" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/mining) +"sWG" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"sWZ" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/security/warden) +"sXd" = ( +/obj/structure/bed/chair/dropship/passenger{ + dir = 8 + }, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"sXe" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/food_or_drink/packagedbar/candyweighted, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"sXr" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"sXE" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"sXI" = ( +/obj/effect/landmark/corpsespawner/colonist, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/daedalusprison/inside/colonydorms) +"sXK" = ( +/obj/item/tool/pen/blue, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"sXN" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/security/warden) +"sXZ" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"sYv" = ( +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"sYE" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/daedalusprison/inside/cargo) +"sYN" = ( +/obj/item/stack/cable_coil, +/turf/open/floor/prison/darkyellow{ + dir = 8 + }, +/area/daedalusprison/inside/mechanicshop) +"taw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"taF" = ( +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"taN" = ( +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/mining) +"taU" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 8 + }, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/southeast) +"tbp" = ( +/obj/structure/table/woodentable, +/obj/item/reagent_containers/food/drinks/bottle/holywater, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"tbt" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + dir = 1; + name = "Basketball Court" + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/sportstorage) +"tby" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/chapel{ + dir = 4 + }, +/area/daedalusprison/inside/chapel) +"tbD" = ( +/obj/structure/rack, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/suit/armor/riot, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"tcl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/bullet, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"tcn" = ( +/obj/structure/cable, +/turf/open/floor/prison/darkyellow{ + dir = 4 + }, +/area/daedalusprison/inside/sportstorage) +"tcw" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic/canteen{ + name = "\improper Mineral Processing"; + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"tcz" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/structure/cargo_container/ch_green{ + dir = 1 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"tcJ" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/computer/security{ + network = list("PRISON") + }, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"tdd" = ( +/obj/machinery/sleeper, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"tdg" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark/green2{ + dir = 4 + }, +/area/daedalusprison/inside/colonydorms) +"tdm" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"tdL" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"tdM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"tec" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"tey" = ( +/turf/closed/shuttle/dropship2/finright, +/area/daedalusprison/inside/pmcdropship) +"teI" = ( +/obj/effect/decal/cleanable/blood, +/obj/item/ammo_casing, +/obj/item/ammo_casing, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"teP" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"teT" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkbrown, +/area/daedalusprison/inside/mining) +"tfD" = ( +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/secoffices) +"tfU" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"tgi" = ( +/turf/open/floor/tile/dark/brown2{ + dir = 4 + }, +/area/daedalusprison/inside/cargo) +"tgl" = ( +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker) +"thg" = ( +/obj/machinery/light, +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"thj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/janitorialcart, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"thG" = ( +/turf/open/floor/prison/whitegreen/corner{ + dir = 4 + }, +/area/daedalusprison/inside/medical) +"thW" = ( +/obj/structure/mopbucket, +/turf/open/floor/tile/chapel{ + dir = 4 + }, +/area/daedalusprison/inside/chapel) +"thZ" = ( +/obj/machinery/mineral/unloading_machine, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"tia" = ( +/obj/machinery/shower{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"tin" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/daedalusprison/inside/colonydorms) +"tiw" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"tiy" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green{ + dir = 9 + }, +/area/daedalusprison/inside/northmeetingroom) +"tiK" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/secbreakroom) +"tjn" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/northclass) +"tju" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/easternhalls) +"tjE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bar) +"tjO" = ( +/obj/structure/sink{ + dir = 1 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationnorth) +"tjQ" = ( +/obj/structure/sink{ + pixel_y = 15 + }, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"tkd" = ( +/obj/machinery/light/small, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"tkB" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"tkK" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"tkR" = ( +/obj/effect/acid_hole, +/turf/closed/wall, +/area/daedalusprison/inside/hydroponicstesting) +"tli" = ( +/obj/machinery/door/airlock/mainship/security/glass/free_access{ + name = "Security Booth" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"tlO" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"tlY" = ( +/obj/structure/bed/chair/comfy, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"tmj" = ( +/obj/machinery/door/airlock/mainship/medical/glass/free_access{ + name = "\improper Prison Kitchen"; + dir = 1 + }, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"tmt" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"tmA" = ( +/obj/item/stack/cable_coil, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/northeast) +"tmQ" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"tnA" = ( +/obj/item/ammo_casing/bullet, +/obj/item/weapon/gun/revolver/standard_revolver, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"tnD" = ( +/turf/open/floor/prison/darkyellow{ + dir = 8 + }, +/area/daedalusprison/inside/sportstorage) +"tnI" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/gym) +"tog" = ( +/obj/item/clothing/mask/facehugger/dead, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"tpJ" = ( +/obj/machinery/door/poddoor/timed_late/containment/landing_zone{ + dir = 2 + }, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/inside/landingzoneone) +"tpV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/shard, +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"tqa" = ( +/obj/structure/curtain/medical, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"tqE" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -11 + }, +/obj/effect/landmark/corpsespawner/colonist, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"tqQ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"tqW" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/west) +"tre" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/prison/darkred{ + dir = 9 + }, +/area/daedalusprison/inside/centralhalls) +"trH" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/red{ + dir = 9 + }, +/area/daedalusprison/inside/habitationsouth) +"tsa" = ( +/obj/machinery/door/airlock/maintenance, +/turf/open/floor/plating, +/area/daedalusprison/caves/nukestorage) +"tsc" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/ai_node, +/turf/open/floor/tile/dark/red2, +/area/daedalusprison/inside/seccheckpoint) +"tsx" = ( +/obj/effect/turf_decal/warning_stripes/thick/corner{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"tsG" = ( +/obj/structure/fence/broken, +/obj/effect/landmark/weed_node, +/obj/structure/platform/rockcliff/icycliff/nondense, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"tsN" = ( +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/northeast) +"ttq" = ( +/obj/item/clothing/mask/bandanna/black, +/obj/structure/table/reinforced/weak, +/obj/machinery/light, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"ttt" = ( +/obj/structure/rack, +/obj/item/weapon/gun/shotgun/pump/cmb, +/turf/open/floor/tile/dark2, +/area/daedalusprison/caves/nukestorage) +"tuC" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"tvd" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"tvj" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/northclass) +"tvs" = ( +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/centralhalls) +"tvu" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/mining) +"tvG" = ( +/obj/machinery/mineral/processing_unit_console, +/turf/closed/wall/prison, +/area/daedalusprison/inside/mining) +"twa" = ( +/obj/effect/turf_decal/tracks/wheels/bloody, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/security/warden) +"twe" = ( +/obj/effect/landmark/corpsespawner/scientist, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"twu" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer, +/turf/open/floor/prison/whitegreen{ + dir = 5 + }, +/area/daedalusprison/inside/medical/treatment) +"twH" = ( +/obj/effect/landmark/weed_node, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"txc" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + name = "Gym" + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/gym) +"txn" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/dark/yellow2{ + dir = 5 + }, +/area/daedalusprison/inside/engineering) +"txq" = ( +/obj/structure/bed/chair/comfy, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"txz" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisonshower) +"txL" = ( +/obj/effect/spawner/random/misc/book, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"txN" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/engineering/shovel{ + pixel_x = 4; + pixel_y = 4 + }, +/turf/open/floor/tile/dark/yellow2{ + dir = 8 + }, +/area/daedalusprison/inside/engineering) +"tyh" = ( +/turf/closed/shuttle/dropship2/finright{ + dir = 8 + }, +/area/daedalusprison/inside/pmcdropship) +"tyv" = ( +/obj/effect/turf_decal/warning_stripes/box, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonyauxstorage) +"tyK" = ( +/obj/structure/table/mainship, +/obj/item/storage/donut_box, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"tyT" = ( +/obj/structure/filingcabinet, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/barracks) +"tyV" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/south) +"tza" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 5 + }, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"tzn" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"tzu" = ( +/obj/structure/table/mainship/nometal, +/obj/item/reagent_containers/dropper, +/obj/machinery/light, +/turf/open/floor/prison/whitepurple{ + dir = 10 + }, +/area/daedalusprison/inside/medical/chemistry) +"tzC" = ( +/turf/open/floor/tile/blue/whiteblue, +/area/daedalusprison/inside/southmeetingroom) +"tzF" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/machinery/power/apc/drained, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"tAA" = ( +/turf/open/floor/mainship/orange{ + dir = 2 + }, +/area/daedalusprison/caves/research) +"tAH" = ( +/obj/structure/table/mainship, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"tAJ" = ( +/obj/structure/table/mainship, +/obj/item/reagent_containers/spray/pepper, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/barracks) +"tBs" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"tBS" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"tBV" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/effect/ai_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"tCl" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"tCn" = ( +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north/garbledradio) +"tCL" = ( +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/south) +"tDr" = ( +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"tDP" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"tEe" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north/garbledradio) +"tFc" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/wood, +/area/daedalusprison/inside/centralhalls) +"tFv" = ( +/obj/structure/bed/chair{ + dir = 4; + pixel_x = 1; + pixel_y = 3 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"tFx" = ( +/obj/item/shard, +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"tFA" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/whitegreen{ + dir = 10 + }, +/area/daedalusprison/inside/medical) +"tFG" = ( +/obj/structure/table/mainship, +/obj/item/reagent_containers/food/drinks/coffee, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/secbreakroom) +"tFP" = ( +/obj/structure/sink{ + pixel_y = 15 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"tGi" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall/prison, +/area/daedalusprison/inside/northclass) +"tGA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"tGI" = ( +/turf/open/floor/prison/green, +/area/daedalusprison/inside/northclass) +"tGN" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"tHF" = ( +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric{ + name = "Interrogation"; + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/interrogation) +"tHH" = ( +/turf/open/floor/prison/darkred{ + dir = 9 + }, +/area/daedalusprison/inside/centralhalls) +"tHI" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/secbreakroom) +"tHK" = ( +/obj/effect/spawner/random/misc/soap/regularweighted, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"tHX" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"tIf" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"tIu" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/daedalusprison/inside/habitationsouth) +"tIv" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"tII" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"tIN" = ( +/obj/effect/landmark/patrol_point/tgmc_11, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"tIQ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"tJD" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/tile/dark/red2{ + dir = 5 + }, +/area/daedalusprison/inside/seccheckpoint) +"tJE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/easternhalls) +"tJP" = ( +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"tKo" = ( +/obj/machinery/space_heater, +/obj/machinery/light, +/turf/open/floor/prison/red{ + dir = 6 + }, +/area/daedalusprison/inside/security/office) +"tKr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/weapon/gun/rifle/m16, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"tKL" = ( +/obj/structure/table/mainship, +/obj/item/tool/kitchen/rollingpin, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"tKM" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"tKR" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"tKX" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bar) +"tLc" = ( +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"tLl" = ( +/obj/effect/landmark/corpsespawner/colonist, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"tLB" = ( +/obj/machinery/power/terminal, +/obj/structure/cable, +/turf/open/floor/mainship/orange{ + dir = 8 + }, +/area/daedalusprison/caves/research) +"tLD" = ( +/turf/open/floor/prison/darkred/corners{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"tMe" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/podhatch/floor, +/area/daedalusprison/inside/engineering) +"tMn" = ( +/obj/machinery/iv_drip, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"tMq" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"tMu" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"tMF" = ( +/obj/effect/decal/cleanable/blood, +/obj/structure/cable, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"tMP" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/obj/effect/landmark/corpsespawner/pmc, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"tMV" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/cellstripe, +/area/daedalusprison/inside/habitationnorth) +"tNA" = ( +/obj/structure/platform{ + dir = 4 + }, +/turf/closed/shuttle/dropship2/cornersalt, +/area/daedalusprison/inside/pmcdropship) +"tNB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"tNK" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"tNX" = ( +/obj/structure/rack, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"tOA" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + dir = 1; + name = "Janitorial Room" + }, +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/janitorial) +"tOL" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"tPe" = ( +/obj/structure/xenoautopsy/tank/alien, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"tPf" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/northclass) +"tPp" = ( +/obj/effect/decal/cleanable/blood/oil, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonyauxstorage) +"tPB" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkyellow{ + dir = 8 + }, +/area/daedalusprison/inside/sportstorage) +"tPF" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/security/interrogation) +"tPY" = ( +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisonshower) +"tQh" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/east) +"tQt" = ( +/obj/machinery/vending/security, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/cameras) +"tQS" = ( +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/gym) +"tRf" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/secbreakroom) +"tRj" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"tRr" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"tRJ" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/structure/cargo_container/horizontal{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonyauxstorage) +"tRU" = ( +/obj/effect/landmark/corpsespawner/pmc, +/turf/open/shuttle/dropship/three, +/area/daedalusprison/inside/pmcdropship) +"tSk" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"tSq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"tTb" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/item/storage/firstaid/adv, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"tTd" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/centralhalls) +"tTh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkpurple{ + dir = 4 + }, +/area/daedalusprison/inside/janitorial) +"tTr" = ( +/obj/structure/table/mainship, +/obj/machinery/chem_master/condimaster, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"tTw" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/effect/landmark/weed_node, +/obj/machinery/light, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"tTL" = ( +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"tTO" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"tUZ" = ( +/obj/structure/bed/chair, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green{ + dir = 4 + }, +/area/daedalusprison/inside/southclass) +"tVw" = ( +/obj/structure/table/mainship, +/obj/item/tool/kitchen/utensil/knife, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"tVX" = ( +/turf/open/floor/prison/red/corner{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"tVY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"tWg" = ( +/obj/structure/rack, +/obj/item/tool/soap, +/obj/item/tool/soap, +/obj/item/tool/soap, +/obj/item/tool/soap, +/obj/item/tool/soap, +/obj/item/tool/soap, +/obj/item/tool/soap, +/obj/item/tool/soap, +/obj/item/tool/soap, +/obj/item/tool/soap, +/obj/machinery/light, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"tWj" = ( +/obj/vehicle/ridden/wheelchair, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/whitegreen{ + dir = 5 + }, +/area/daedalusprison/inside/medical) +"tWy" = ( +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"tWQ" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/syringe, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"tWS" = ( +/obj/structure/table/reinforced/weak, +/obj/item/storage/toolbox/emergency, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"tWW" = ( +/obj/effect/turf_decal/warning_stripes/thick/corner{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"tXJ" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/daedalusprison/caves/rock) +"tYs" = ( +/obj/structure/table/mainship, +/obj/item/storage/donut_box, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"tYw" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"tYQ" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"tYR" = ( +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"tZx" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/cameras) +"tZF" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/cigarettes, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"tZK" = ( +/obj/structure/table/reinforced/weak, +/obj/item/storage/fancy/cigar, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/west) +"tZY" = ( +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/sportstorage) +"tZZ" = ( +/obj/structure/cable, +/turf/open/floor/prison/green, +/area/daedalusprison/inside/northclass) +"uaa" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"uai" = ( +/obj/structure/prop/vehicle/crane/cranecargo/destructible, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"uak" = ( +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/mining) +"uaI" = ( +/obj/effect/spawner/random/misc/structure/crate, +/obj/machinery/light, +/turf/open/floor/tile/dark/brown2{ + dir = 6 + }, +/area/daedalusprison/inside/cargo) +"uaQ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"ubw" = ( +/obj/machinery/optable, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"ucn" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"ucx" = ( +/obj/machinery/shower{ + dir = 8 + }, +/obj/machinery/light/small, +/obj/effect/spawner/random/misc/soap/regularweighted, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"ucZ" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/turf/open/floor/tile/barber, +/area/daedalusprison/inside/corporateoffice) +"udn" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitepurple{ + dir = 4 + }, +/area/daedalusprison/inside/medical) +"udz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"udH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"udW" = ( +/obj/structure/nuke_disk_candidate{ + set_associations = list("set2", "set3", "set4") + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"uea" = ( +/obj/effect/landmark/patrol_point/som/som_23, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast) +"uee" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"ueq" = ( +/obj/effect/turf_decal/tracks/wheels/bloody, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"ues" = ( +/obj/structure/closet/crate/hydroponics, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"uev" = ( +/turf/closed/shuttle/dropship2/finleft{ + dir = 4 + }, +/area/daedalusprison/inside/pmcdropship) +"ueA" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/lobby) +"ueB" = ( +/obj/structure/table/woodentable, +/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"ueD" = ( +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/red/corner{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"ueG" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/daedalusprison/inside/southmeetingroom) +"ufs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/weapon/gun/revolver/judge, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/corporateoffice) +"ufU" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"ugr" = ( +/turf/open/ground/grass/weedable, +/area/daedalusprison/inside/hydroponics) +"ugv" = ( +/obj/structure/table, +/obj/item/storage/donut_box, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"ugA" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"ugI" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 9 + }, +/area/daedalusprison/inside/habitationsouth) +"uhc" = ( +/obj/structure/bookcase, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"uhm" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/excavation_site_spawner, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"uht" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/barricade/wooden{ + dir = 8 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"uhJ" = ( +/obj/structure/kitchenspike, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/freezer) +"uhN" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"uhT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"uhV" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"uig" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/air_alarm, +/turf/open/floor/prison/whitepurple{ + dir = 1 + }, +/area/daedalusprison/inside/medical/chemistry) +"uij" = ( +/obj/structure/bed/roller, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"uiA" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"ujj" = ( +/obj/structure/bed/chair, +/turf/open/floor/prison/green{ + dir = 8 + }, +/area/daedalusprison/inside/southclass) +"ujx" = ( +/obj/structure/rack, +/obj/item/weapon/gun/shotgun/pump/cmb, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"ujK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/lobby) +"ujS" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 1 + }, +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 4 + }, +/obj/structure/prop/mainship/gelida/lightstick{ + pixel_x = -7; + pixel_y = 27 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"ujY" = ( +/obj/structure/cable, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/freezer) +"ukc" = ( +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/southclass) +"uke" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"uko" = ( +/obj/item/weapon/gun/rifle/m16, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"ukQ" = ( +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"ulc" = ( +/obj/machinery/chem_master, +/turf/open/floor/prison/whitepurple{ + dir = 8 + }, +/area/daedalusprison/inside/medical/chemistry) +"ulj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/gym) +"ulJ" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"ulV" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"umG" = ( +/obj/machinery/disposal, +/obj/machinery/light, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"umS" = ( +/obj/structure/table/mainship, +/obj/machinery/microwave, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"unf" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"unB" = ( +/obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"unE" = ( +/turf/open/floor/prison/darkred/corners{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"unS" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/weaponry/melee, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"uoi" = ( +/obj/structure/table/reinforced/weak, +/obj/structure/prop/computer/broken/ten, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/security/warden) +"uoj" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"uoJ" = ( +/obj/effect/landmark/corpsespawner/doctor, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"uoK" = ( +/obj/item/tool/mop, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/darkpurple, +/area/daedalusprison/inside/janitorial) +"uoS" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"uoT" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/tile/dark/red2{ + dir = 10 + }, +/area/daedalusprison/inside/seccheckpoint) +"upe" = ( +/turf/closed/wall, +/area/daedalusprison/inside/corporateoffice) +"ups" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"upR" = ( +/turf/open/floor/prison/green{ + dir = 4 + }, +/area/daedalusprison/inside/northmeetingroom) +"uqx" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"uqL" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"uqT" = ( +/obj/machinery/light, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"urE" = ( +/obj/effect/spawner/random/misc/plant, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen{ + dir = 5 + }, +/area/daedalusprison/inside/medical) +"urO" = ( +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/west) +"usB" = ( +/obj/structure/cable, +/obj/effect/ai_node, +/obj/machinery/power/apc/drained, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"usJ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"usV" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/multi_tile/mainship/medidoor{ + dir = 2; + name = "Medical Offices" + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"uti" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 10 + }, +/turf/open/floor/tile/chapel{ + dir = 1 + }, +/area/daedalusprison/inside/chapel) +"utq" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/obj/effect/mapping_helpers/broken_apc/lowchance, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"utB" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"utK" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/green{ + dir = 6 + }, +/area/daedalusprison/inside/southclass) +"utO" = ( +/obj/structure/table/mainship, +/obj/item/coin/iron, +/turf/open/floor/prison/darkyellow{ + dir = 8 + }, +/area/daedalusprison/inside/mechanicshop) +"utS" = ( +/obj/item/weapon/gun/revolver/upp, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"uuy" = ( +/obj/machinery/door/airlock/multi_tile/mainship/medidoor{ + name = "Chemistry" + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"uuA" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/centralhalls) +"uuP" = ( +/obj/machinery/door/airlock/multi_tile/mainship/comdoor/free_access{ + dir = 1; + name = "\improper Nanotrasen Liason Office" + }, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"uuR" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"uvj" = ( +/obj/machinery/vending/MarineMed/Blood, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"uvk" = ( +/obj/machinery/disposal, +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"uvl" = ( +/obj/structure/window_frame/prison/reinforced, +/obj/item/shard, +/turf/open/floor/prison, +/area/daedalusprison/inside/laundromat) +"uvy" = ( +/obj/item/ammo_casing, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"uvW" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"uwC" = ( +/obj/structure/table/reinforced/weak, +/obj/item/book/manual/chef_recipes, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"uwF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"uwI" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"uwJ" = ( +/turf/open/floor/prison/bright_clean/two, +/area/daedalusprison/inside/prisongarden) +"uwQ" = ( +/obj/machinery/door/airlock/prison/open, +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison/red/full, +/area/daedalusprison/inside/habitationnorth) +"uxu" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/east) +"uxN" = ( +/obj/structure/table, +/obj/effect/spawner/random/medical/beaker, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"uxP" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonyauxstorage) +"uxW" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/engineering/engibelt, +/turf/open/floor/tile/dark/yellow2{ + dir = 10 + }, +/area/daedalusprison/inside/engineering) +"uye" = ( +/obj/structure/table/reinforced/weak, +/obj/item/storage/surgical_tray, +/obj/machinery/light, +/turf/open/floor/prison/whitegreen{ + dir = 6 + }, +/area/daedalusprison/inside/medical/treatment) +"uyg" = ( +/obj/structure/benchpress, +/turf/open/floor/prison, +/area/daedalusprison/inside/gym) +"uyk" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"uyu" = ( +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/table/reinforced/weak, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"uyE" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"uyX" = ( +/obj/machinery/bodyscanner{ + dir = 8 + }, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"uzt" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/bloodpack, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/whitegreen{ + dir = 9 + }, +/area/daedalusprison/inside/medical) +"uzZ" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/darkred{ + dir = 6 + }, +/area/daedalusprison/inside/sportstorage) +"uAB" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"uAE" = ( +/obj/effect/spawner/random/misc/book, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"uAI" = ( +/obj/machinery/disposal, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"uAY" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationsouth) +"uBn" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor, +/area/daedalusprison/inside/garden) +"uBy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/disposal, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"uCn" = ( +/obj/structure/table/woodentable, +/obj/item/storage/bible, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"uCq" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationsouth) +"uCz" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"uCB" = ( +/obj/structure/bed/chair/wood/normal, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"uCI" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"uCL" = ( +/obj/structure/closet/secure_closet/chemical, +/turf/open/floor/prison/whitepurple{ + dir = 5 + }, +/area/daedalusprison/inside/medical/chemistry) +"uCO" = ( +/obj/structure/table/mainship, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"uCU" = ( +/obj/structure/filingcabinet, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitepurple, +/area/daedalusprison/inside/medical) +"uCY" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"uDs" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"uDP" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/computer/secure_data, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"uDV" = ( +/obj/effect/spawner/random/misc/structure/curtain/medical, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"uDW" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"uEq" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/prison/darkyellow{ + dir = 8 + }, +/area/daedalusprison/inside/mechanicshop) +"uEv" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/closed/wall/prison, +/area/daedalusprison/inside/mining) +"uEH" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/turf/open/floor/prison/darkbrown, +/area/daedalusprison/inside/mining) +"uEM" = ( +/turf/open/floor/tile/dark/red2, +/area/daedalusprison/inside/seccheckpoint) +"uET" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"uFd" = ( +/turf/open/floor/prison/green{ + dir = 8 + }, +/area/daedalusprison/inside/westcomputerlab) +"uFi" = ( +/obj/machinery/air_alarm, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/gym) +"uFB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/secbreakroom) +"uFO" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"uGq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/air_alarm{ + dir = 1 + }, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"uGG" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric{ + name = "Execution"; + dir = 1 + }, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/execution) +"uGT" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkyellow, +/area/daedalusprison/inside/mechanicshop) +"uGX" = ( +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"uHE" = ( +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"uHF" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/table/reinforced/weak, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"uHQ" = ( +/obj/machinery/air_alarm, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"uIp" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + dir = 1; + name = "\improper Canteen" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/easternhalls) +"uIu" = ( +/obj/effect/landmark/corpsespawner/colonist, +/obj/effect/decal/cleanable/blood, +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"uIK" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark/green2, +/area/daedalusprison/inside/colonydorms) +"uJK" = ( +/obj/structure/stairs/seamless{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/easternhalls) +"uJL" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"uKd" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"uKh" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/effect/ai_node, +/turf/open/floor/tile/dark/brown2/corner, +/area/daedalusprison/inside/cargo) +"uKB" = ( +/obj/item/weapon/gun/rifle/m16, +/turf/open/floor/tile/green/greentaupe{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"uKW" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"uLC" = ( +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"uLT" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/toolbox, +/obj/machinery/light, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/garage) +"uMQ" = ( +/obj/machinery/air_alarm, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/security/warden) +"uNd" = ( +/obj/machinery/shower{ + dir = 4; + pixel_y = -3 + }, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"uNi" = ( +/turf/open/floor/prison/darkred/corners, +/area/daedalusprison/inside/centralhalls) +"uNw" = ( +/obj/structure/rack, +/obj/item/weapon/gun/shotgun/pump/cmb, +/obj/item/weapon/gun/shotgun/pump/cmb, +/obj/item/weapon/gun/shotgun/pump/cmb, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/pmcdropship) +"uNN" = ( +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/execution) +"uNW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"uOa" = ( +/obj/effect/landmark/weed_node, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"uOf" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"uOg" = ( +/obj/machinery/computer/intel_computer, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green{ + dir = 5 + }, +/area/daedalusprison/inside/northclass) +"uOh" = ( +/obj/effect/landmark/corpsespawner/doctor/burst, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"uOK" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 1 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"uOM" = ( +/obj/structure/table/mainship, +/obj/item/clothing/gloves/botanic_leather, +/turf/open/floor/prison/green{ + dir = 8 + }, +/area/daedalusprison/inside/prisongarden) +"uON" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"uOO" = ( +/obj/effect/turf_decal/warning_stripes/thick/corner, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"uOS" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/medhud, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"uPN" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"uPX" = ( +/turf/open/floor/tile/green/greentaupecorner{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"uQA" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/cable, +/turf/open/floor/tile/dark/yellow2{ + dir = 4 + }, +/area/daedalusprison/inside/engineering) +"uQM" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"uRb" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"uRc" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"uRl" = ( +/obj/structure/table/woodentable, +/obj/effect/spawner/random/food_or_drink/drink_cans, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"uRs" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"uRA" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/security/office) +"uRM" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/freezer) +"uSd" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/chapel{ + dir = 8 + }, +/area/daedalusprison/inside/chapel) +"uSi" = ( +/turf/closed/shuttle/dropship2/fins{ + dir = 4 + }, +/area/daedalusprison/inside/pmcdropship) +"uSn" = ( +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north/garbledradio) +"uSz" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + dir = 1; + name = "Storage" + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/auxstorage) +"uSN" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"uSS" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisonshower) +"uTu" = ( +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"uTK" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"uTV" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"uUt" = ( +/obj/machinery/seed_extractor, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"uUC" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"uUF" = ( +/obj/structure/bed/bunkbed, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/barracks) +"uUH" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"uUJ" = ( +/obj/effect/landmark/corpsespawner/colonist, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"uUS" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/cameras) +"uUX" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"uVn" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"uVM" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"uVO" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/auxstorage) +"uWe" = ( +/obj/effect/spawner/random/misc/plant, +/obj/machinery/light, +/turf/open/floor/tile/blue/whiteblue, +/area/daedalusprison/inside/southmeetingroom) +"uWI" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/start/job/xenomorph, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast) +"uWM" = ( +/obj/structure/prop/mainship/gelida/smallwire, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"uWZ" = ( +/obj/machinery/disposal, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"uXk" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"uXq" = ( +/obj/machinery/door/airlock/multi_tile/mainship/secdoor/glass{ + name = "\improper Prison Security" + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"uXy" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/medsec) +"uXS" = ( +/obj/structure/toilet{ + pixel_y = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/cellstripe{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"uYt" = ( +/obj/effect/spawner/random/misc/trash, +/turf/closed/wall/prison, +/area/daedalusprison/inside/laundromat) +"uYz" = ( +/obj/structure/table/reinforced/weak, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/security/warden) +"uYA" = ( +/obj/machinery/door/poddoor/timed_late/containment/landing_zone, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/daedalusprison/outside/southeast) +"uYD" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/daedalusprison/inside/habitationsouth) +"uYH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"uYR" = ( +/obj/machinery/photocopier, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"uZt" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/computer/secure_data, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/medsec) +"uZB" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"uZH" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"uZY" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/lobby) +"vaM" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"vaO" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationsouth) +"vaQ" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"vaT" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"vbd" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"vbf" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"vbw" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/item/tool/surgery/bonesetter, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical/treatment) +"vbY" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/security/easternbooth) +"vdj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark/green2/corner{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"vdp" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/north) +"vdP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"vdT" = ( +/obj/machinery/air_alarm, +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/northclass) +"vec" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/obj/effect/ai_node, +/turf/open/floor/tile/blue/whiteblue{ + dir = 5 + }, +/area/daedalusprison/inside/corporateoffice) +"vel" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/shuttle/dropship/four, +/area/daedalusprison/inside/pmcdropship) +"veV" = ( +/obj/item/weapon/gun/revolver/standard_revolver, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"vfc" = ( +/obj/structure/cable, +/obj/machinery/power/apc{ + dir = 4 + }, +/turf/open/floor/freezer, +/area/daedalusprison/inside/staffrestroom) +"vfl" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/daedalusprison/caves/nukestorage) +"vfm" = ( +/obj/structure/table/mainship, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"vfC" = ( +/obj/structure/window_frame/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"vfS" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green{ + dir = 9 + }, +/area/daedalusprison/inside/northclass) +"vgg" = ( +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"vgj" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"vgE" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"vgM" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/daedalusprison/inside/colonydorms) +"vhh" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/item/tool/pen{ + pixel_y = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"vhx" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"vhQ" = ( +/turf/open/floor/prison/darkred/corners{ + dir = 8 + }, +/area/daedalusprison/inside/easternhalls) +"vid" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold4w/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"vip" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"viA" = ( +/obj/effect/landmark/patrol_point/tgmc_21, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"viJ" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/east) +"viO" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"vjc" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/laundromat) +"vjf" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"vji" = ( +/obj/structure/prop/mainship/suit_storage_prop, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/mining) +"vjr" = ( +/obj/structure/morgue{ + dir = 2 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"vjG" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/effect/spawner/random/misc/structure/crate, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonyauxstorage) +"vkh" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"vku" = ( +/obj/machinery/power/smes/buildable/empty{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/light/small, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"vkz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/ai_node, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"vkB" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"vkC" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"vkT" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"vlj" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"vln" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/mining) +"vly" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"vlE" = ( +/obj/structure/table/mainship, +/obj/item/weapon/gun/revolver/judge, +/obj/item/ammo_magazine/revolver/judge, +/obj/item/ammo_magazine/revolver/judge, +/obj/item/ammo_magazine/revolver/judge, +/obj/machinery/light, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/barracks) +"vlK" = ( +/obj/structure/prop/mainship/suit_storage_prop, +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/mining) +"vlM" = ( +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"vmj" = ( +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"vmq" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/janitorial) +"vmT" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"vnh" = ( +/obj/machinery/disposal, +/turf/open/floor/prison/red{ + dir = 9 + }, +/area/daedalusprison/inside/security/secbreakroom) +"vnr" = ( +/obj/machinery/door/poddoor/timed_late/containment/landing_zone, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"vnz" = ( +/obj/machinery/disposal, +/turf/open/floor/prison/whitegreen{ + dir = 6 + }, +/area/daedalusprison/inside/medical) +"voq" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/barracks) +"vos" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"vox" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/secbreakroom) +"vpb" = ( +/obj/structure/bookcase, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"vpj" = ( +/obj/structure/table/mainship, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"vpk" = ( +/obj/structure/table/mainship, +/obj/item/clothing/shoes/jackboots, +/obj/machinery/light, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"vpx" = ( +/obj/structure/table/reinforced/weak, +/obj/item/tool/pen, +/obj/item/paper{ + pixel_x = 5 + }, +/obj/machinery/door/poddoor/shutters{ + id = "DPsec" + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"vpC" = ( +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/showcase, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"vpT" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/light, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"vqg" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"vqo" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"vqv" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"vqy" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/security/secbreakroom) +"vrQ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/east) +"vsc" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"vsD" = ( +/obj/machinery/disposal, +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"vtv" = ( +/obj/machinery/disposal, +/turf/open/floor/prison/red{ + dir = 6 + }, +/area/daedalusprison/inside/security/secbreakroom) +"vtw" = ( +/obj/structure/rack, +/obj/item/toy/plush/lizard, +/turf/open/floor/prison, +/area/daedalusprison/inside/sportstorage) +"vtC" = ( +/obj/structure/cable, +/obj/machinery/light/small, +/obj/machinery/power/apc/drained{ + dir = 1 + }, +/obj/effect/mapping_helpers/broken_apc/lowchance, +/turf/open/floor/plating, +/area/daedalusprison/inside/colonydorms) +"vtQ" = ( +/turf/closed/shuttle/dropship2/enginetwo{ + dir = 1 + }, +/area/daedalusprison/inside/pmcdropship) +"vuN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"vuV" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"vvA" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"vvJ" = ( +/obj/effect/spawner/random/misc/plant, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/security/easternbooth) +"vvV" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"vwZ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"vxg" = ( +/obj/structure/cable, +/obj/item/reagent_containers/food/drinks/sillycup, +/turf/open/floor/prison, +/area/daedalusprison/inside/gym) +"vxj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"vxk" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"vxP" = ( +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/barracks) +"vxU" = ( +/obj/structure/closet/crate/trashcart, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"vyr" = ( +/turf/open/floor/prison/red/corner{ + dir = 1 + }, +/area/daedalusprison/inside/security/office) +"vyx" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"vyC" = ( +/obj/structure/window_frame/prison/reinforced, +/obj/item/shard, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/mechanicshop) +"vyW" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"vzy" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"vAt" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison/red/corner, +/area/daedalusprison/inside/habitationsouth) +"vAx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"vAB" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/darkbrown{ + dir = 9 + }, +/area/daedalusprison/inside/mining) +"vBb" = ( +/obj/structure/table/mainship, +/obj/machinery/light, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/secbreakroom) +"vBd" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/west) +"vBE" = ( +/obj/machinery/conveyor/inverted, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"vBI" = ( +/obj/structure/filingcabinet, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"vBS" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest/garbledradio) +"vCe" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest/garbledradio) +"vCz" = ( +/obj/effect/landmark/corpsespawner/colonist, +/obj/structure/cable, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"vCY" = ( +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"vDj" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/computer/secure_data, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"vDk" = ( +/obj/machinery/vending/cola, +/turf/open/floor/prison, +/area/daedalusprison/inside/studyroom) +"vDX" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"vEh" = ( +/obj/structure/table/mainship, +/obj/item/storage/box/handcuffs, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/security/secbreakroom) +"vEp" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"vEA" = ( +/turf/closed/shuttle/dropship2/engine_sidealt, +/area/daedalusprison/inside/pmcdropship) +"vEP" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/red/corner{ + dir = 8 + }, +/area/daedalusprison/inside/mining) +"vEX" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north) +"vFr" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"vFz" = ( +/turf/closed/shuttle/dropship2/enginefive{ + dir = 4 + }, +/area/daedalusprison/inside/pmcdropship) +"vFC" = ( +/obj/docking_port/stationary/marine_dropship/lz1, +/obj/docking_port/stationary/crashmode, +/turf/open/floor/plating, +/area/daedalusprison/inside/landingzoneone) +"vFH" = ( +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast/garbledradio) +"vFY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"vGu" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"vGR" = ( +/obj/machinery/light, +/turf/closed/wall/prison, +/area/daedalusprison/inside/northmeetingroom) +"vHn" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/structure/cargo_container/nt{ + dir = 8 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"vHW" = ( +/obj/machinery/disposal, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 6 + }, +/area/daedalusprison/inside/security/warden) +"vIc" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/tile/dark/brown2{ + dir = 6 + }, +/area/daedalusprison/inside/cargo) +"vIw" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"vIy" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/engineering/toolbox, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/yellow2{ + dir = 1 + }, +/area/daedalusprison/inside/engineering) +"vIA" = ( +/turf/open/floor/prison/cellstripe{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"vIF" = ( +/obj/machinery/shower{ + dir = 4; + pixel_x = 6 + }, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"vIG" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/darkred{ + dir = 9 + }, +/area/daedalusprison/inside/lobby) +"vJi" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/lobby) +"vJk" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/outside/east) +"vJy" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/northeast) +"vJQ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/item/stack/barbed_wire, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"vKl" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"vKv" = ( +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/centralhalls) +"vKA" = ( +/turf/open/floor/plating, +/area/daedalusprison/inside/colonydorms) +"vKF" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/machinery/light, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"vKJ" = ( +/turf/open/floor/tile/dark/green2{ + dir = 9 + }, +/area/daedalusprison/inside/colonydorms) +"vKM" = ( +/obj/structure/table/reinforced/weak, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"vKN" = ( +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/lobby) +"vLl" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + dir = 1; + name = "\improper Classroom" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/southclass) +"vLn" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"vLx" = ( +/obj/effect/landmark/corpsespawner/scientist, +/obj/structure/cable, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"vLF" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/mainship/purple{ + dir = 4 + }, +/area/daedalusprison/caves/research) +"vLI" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/northclass) +"vLQ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"vMc" = ( +/turf/open/floor/plating, +/area/daedalusprison/inside/medical) +"vMi" = ( +/obj/structure/table/mainship, +/turf/open/floor/tile/dark/yellow2{ + dir = 1 + }, +/area/daedalusprison/inside/engineering) +"vMq" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/structure/cargo_container/red, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"vMy" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/ai_node, +/turf/open/floor/prison/red/corner{ + dir = 8 + }, +/area/daedalusprison/inside/security/secbreakroom) +"vMA" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"vNf" = ( +/obj/structure/fence/broken, +/obj/effect/landmark/weed_node, +/obj/structure/platform/rockcliff/icycliff/nondense{ + dir = 1 + }, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"vNi" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/misc/paperbin, +/obj/item/tool/pen/blue, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"vNs" = ( +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/security/warden) +"vNA" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"vOn" = ( +/turf/closed/shuttle/dropship2/enginethree, +/area/daedalusprison/inside/pmcdropship) +"vOw" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/tile/blue/whiteblue{ + dir = 10 + }, +/area/daedalusprison/inside/corporateoffice) +"vOG" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/obj/item/stack/sheet/metal, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"vPI" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/darkred{ + dir = 5 + }, +/area/daedalusprison/inside/centralhalls) +"vPJ" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"vQc" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"vQd" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/mechanicshop) +"vQh" = ( +/obj/machinery/space_heater, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 9 + }, +/area/daedalusprison/inside/security/warden) +"vQm" = ( +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"vQD" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/west) +"vQF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"vQI" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted, +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/misc/paperbin, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"vQU" = ( +/obj/structure/table/mainship, +/obj/item/restraints/handcuffs, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/security/interrogation) +"vRs" = ( +/obj/machinery/light, +/turf/open/floor/tile/dark/green2, +/area/daedalusprison/inside/colonydorms) +"vRA" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/computer/secure_data, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/westernbooth) +"vRQ" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 4 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"vSt" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"vSM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"vSN" = ( +/obj/structure/closet/secure_closet/medical2, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"vTn" = ( +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"vTp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/gym) +"vTX" = ( +/obj/structure/table/woodentable, +/obj/structure/paper_bin, +/obj/item/tool/pen/blue{ + pixel_x = 5 + }, +/turf/open/floor/prison/green, +/area/daedalusprison/inside/southclass) +"vUG" = ( +/obj/machinery/air_alarm{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisonshower) +"vUH" = ( +/obj/machinery/mineral/processing_unit, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"vVh" = ( +/obj/structure/table/mainship, +/obj/item/book, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"vWs" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"vWw" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/ai_node, +/turf/open/floor/tile/dark/green2{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"vXb" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"vXd" = ( +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest/garbledradio) +"vXm" = ( +/obj/effect/spawner/random/misc/trash, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"vXp" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 8 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"vXI" = ( +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/southwest) +"vXN" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"vZh" = ( +/obj/structure/bed/chair/office/dark/east, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"vZC" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast/garbledradio) +"vZF" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"vZK" = ( +/obj/effect/spawner/random/engineering/structure/tank/fuelweighted, +/turf/open/floor/plating, +/area/daedalusprison/inside/centralhalls) +"vZT" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"vZW" = ( +/obj/machinery/door/airlock/mainship/medical/glass/free_access{ + name = "\improper Prison Kitchen"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"waf" = ( +/obj/effect/landmark/weed_node, +/obj/item/shard, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"way" = ( +/obj/machinery/power/terminal, +/obj/structure/cable, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"waz" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/northclass) +"waP" = ( +/obj/machinery/hydroponics, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"waT" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/turf/open/floor/plating, +/area/daedalusprison/inside/hydroponics) +"waV" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/item/stack/sheet/metal, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"wbh" = ( +/obj/structure/table/mainship, +/obj/item/stack/sheet/metal, +/turf/open/floor/prison/darkyellow, +/area/daedalusprison/inside/mechanicshop) +"wbt" = ( +/obj/structure/toilet{ + pixel_y = 8 + }, +/turf/open/floor/prison/cellstripe{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"wbG" = ( +/obj/effect/decal/cleanable/blood, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/red/corner{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"wcn" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/item/stack/sheet/metal, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"wcB" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"wcC" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"wcJ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/office) +"wdA" = ( +/obj/machinery/space_heater, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"wdD" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/northmeetingroom) +"wdI" = ( +/obj/structure/showcase/coinpress, +/turf/open/floor/prison/darkyellow{ + dir = 1 + }, +/area/daedalusprison/inside/mechanicshop) +"wdQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark, +/area/daedalusprison/inside/medical) +"wej" = ( +/obj/machinery/cic_maptable, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/pmcdropship) +"weu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/lobby) +"weJ" = ( +/obj/machinery/vending/snack, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"weO" = ( +/turf/open/floor/prison/green, +/area/daedalusprison/inside/northmeetingroom) +"weR" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northeast/garbledradio) +"weS" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"wfw" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"wfy" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/turf/open/floor/tile/green/greentaupe{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"wfG" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"wfL" = ( +/obj/effect/decal/cleanable/blood, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"wfT" = ( +/turf/closed/shuttle/dropship2/enginetwo{ + dir = 4 + }, +/area/daedalusprison/inside/pmcdropship) +"wgc" = ( +/obj/machinery/hydroponics/slashable, +/turf/open/floor/prison/green{ + dir = 10 + }, +/area/daedalusprison/inside/prisongarden) +"wgy" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic/noglass{ + name = "\improper Men's Restroom" + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"wgL" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/closed/wall/prison, +/area/daedalusprison/inside/security/office) +"wgM" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/structure/cargo_container/red{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"wgP" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitegreen/corner, +/area/daedalusprison/inside/medical) +"wgU" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/gym) +"whc" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall/prison, +/area/daedalusprison/inside/medical/treatment) +"whz" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"whQ" = ( +/obj/structure/table/woodentable, +/obj/effect/spawner/random/misc/plushie, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"whX" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"wia" = ( +/obj/structure/hoop{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"wiP" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"wiU" = ( +/obj/machinery/vending/cola, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"wjl" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer1, +/area/daedalusprison/outside/southeast) +"wjt" = ( +/turf/open/floor/prison/darkred{ + dir = 9 + }, +/area/daedalusprison/inside/easternhalls) +"wjH" = ( +/obj/vehicle/train/cargo/trolley, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/daedalusprison/inside/cargo) +"wjK" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/flora/ausbushes/stalkybush, +/turf/open/ground/grass/weedable, +/area/daedalusprison/inside/hydroponics) +"wjM" = ( +/obj/machinery/scoreboard{ + id = "basketball"; + pixel_y = 30 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"wjN" = ( +/obj/effect/spawner/random/engineering/ore_box, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/northeast) +"wjT" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"wjW" = ( +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"wka" = ( +/obj/structure/table/mainship, +/obj/machinery/light, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"wkd" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"wke" = ( +/obj/structure/table, +/obj/effect/spawner/random/misc/seeds, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"wkE" = ( +/obj/machinery/door/airlock/mainship/generic{ + dir = 1; + name = "\improper Dormitory Unit" + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/colonydorms) +"wkJ" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/mining) +"wkN" = ( +/obj/structure/table/woodentable, +/obj/effect/spawner/random/misc/book, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/northclass) +"wkR" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 1 + }, +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 4 + }, +/obj/structure/prop/mainship/gelida/lightstick{ + pixel_x = -7; + pixel_y = 27 + }, +/obj/item/stack/cable_coil, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"wla" = ( +/obj/machinery/disposal, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"wle" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/effect/ai_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"wlq" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 1 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"wlv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"wlC" = ( +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/burger/normal, +/turf/open/floor/tile/green/greentaupe{ + dir = 8 + }, +/area/daedalusprison/inside/hydroponics) +"wlV" = ( +/obj/structure/table/reinforced/weak, +/obj/item/paper, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"wmd" = ( +/obj/machinery/vending/boozeomat, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"wmq" = ( +/obj/machinery/door/airlock/mainship/security/glass/free_access{ + name = "Prison Security" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"wms" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/lobby) +"wmt" = ( +/obj/effect/spawner/random/engineering/shovel, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/southeast) +"wmw" = ( +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"wmz" = ( +/obj/structure/table/reinforced/weak, +/obj/item/storage/box/syringes, +/obj/item/storage/box/syringes, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"wmB" = ( +/turf/open/floor/plating, +/area/daedalusprison/caves/research) +"wmM" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"wna" = ( +/obj/structure/bed/chair/office/dark/east, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"wnh" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"wns" = ( +/obj/structure/table/mainship/nometal, +/obj/item/tool/hand_labeler, +/turf/open/floor/prison/whitepurple, +/area/daedalusprison/inside/medical/chemistry) +"wnu" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"wnx" = ( +/obj/machinery/vending/dinnerware, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"wnD" = ( +/obj/effect/landmark/corpsespawner/doctor/burst, +/obj/effect/ai_node, +/turf/open/floor/mainship/purple{ + dir = 8 + }, +/area/daedalusprison/caves/research) +"wnI" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/daedalusprison/inside/southmeetingroom) +"wnV" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/daedalusprison/inside/colonydorms) +"woo" = ( +/obj/structure/table, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/green/greentaupe{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"wop" = ( +/obj/effect/decal/cleanable/blood, +/obj/structure/table/mainship, +/turf/open/floor/prison/darkyellow{ + dir = 9 + }, +/area/daedalusprison/inside/mechanicshop) +"woD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/item/weapon/gun/rifle/m16, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"wpc" = ( +/obj/structure/table/mainship, +/obj/item/tool/soap, +/obj/machinery/light, +/turf/open/floor/prison/darkpurple{ + dir = 10 + }, +/area/daedalusprison/inside/janitorial) +"wpd" = ( +/obj/structure/sink{ + dir = 4 + }, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"wpE" = ( +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/obj/item/shard, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/easternhalls) +"wpF" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating, +/area/daedalusprison/inside/easternhalls) +"wpG" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/northclass) +"wpJ" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"wpW" = ( +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/structure/table/reinforced/weak, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"wqd" = ( +/obj/machinery/door/airlock/multi_tile/mainship/secdoor/glass{ + name = "\improper Prison Lobby"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"wqf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/photocopier, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"wql" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"wqt" = ( +/obj/machinery/door/poddoor/timed_late/containment/landing_zone{ + dir = 2 + }, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/daedalusprison/inside/landingzoneone) +"wqR" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/lobby) +"wrB" = ( +/obj/structure/bed/chair/office/dark, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"wrE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"wrJ" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"wrM" = ( +/obj/structure/rack, +/obj/effect/spawner/random/weaponry/ammo/shotgun, +/obj/effect/spawner/random/weaponry/ammo/shotgun, +/obj/effect/spawner/random/weaponry/ammo/shotgun, +/turf/open/floor/tile/dark2, +/area/daedalusprison/caves/nukestorage) +"wrV" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"wsK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"wsX" = ( +/obj/structure/table/mainship, +/obj/machinery/microwave, +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/security/secbreakroom) +"wth" = ( +/obj/structure/bed/chair{ + dir = 4; + pixel_x = 2; + pixel_y = 6 + }, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"wtj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing, +/obj/item/ammo_casing, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"wtx" = ( +/obj/structure/bed/bunkbed, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/habitationnorth) +"wtz" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/cameras) +"wtO" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"wun" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest/garbledradio) +"wuz" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"wuB" = ( +/turf/closed/shuttle/dropship2/engine_sidealt{ + dir = 1 + }, +/area/daedalusprison/inside/pmcdropship) +"wuP" = ( +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/security/easternbooth) +"wvg" = ( +/obj/effect/decal/cleanable/blood/xeno, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"wvq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"wvC" = ( +/turf/closed/shuttle/dropship2/fins{ + dir = 9 + }, +/area/daedalusprison/inside/pmcdropship) +"wvX" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"wwb" = ( +/obj/effect/turf_decal/warning_stripes/nscenter{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"wwr" = ( +/obj/effect/landmark/xeno_tunnel_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north) +"wwP" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/purple{ + dir = 9 + }, +/area/daedalusprison/caves/research) +"wxc" = ( +/obj/machinery/door/airlock/mainship/medical/glass/free_access{ + name = "\improper Dormitories Kitchen"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"wxj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark/red2{ + dir = 8 + }, +/area/daedalusprison/inside/seccheckpoint) +"wxZ" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"wyu" = ( +/turf/open/floor/plating, +/area/daedalusprison/inside/barracks) +"wyO" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/whitegreen{ + dir = 4 + }, +/area/daedalusprison/inside/medical) +"wyR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"wzd" = ( +/obj/machinery/floodlight/colony, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"wzz" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/engineering/shovel{ + pixel_x = 4; + pixel_y = 4 + }, +/turf/open/floor/tile/dark/yellow2{ + dir = 4 + }, +/area/daedalusprison/inside/engineering) +"wzL" = ( +/obj/structure/table/reinforced/weak, +/obj/structure/prop/computer/broken/ten, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/westernbooth) +"wzO" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/sportstorage) +"wAa" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 4 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"wAf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"wAs" = ( +/obj/structure/table/reinforced/weak, +/obj/item/reagent_containers/spray/cleaner, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"wAx" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 8 + }, +/turf/open/floor/tile/dark/red2{ + dir = 8 + }, +/area/daedalusprison/inside/seccheckpoint) +"wAD" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"wBc" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/obj/effect/spawner/random/food_or_drink/drink_cans, +/turf/open/floor/prison/whitegreen{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"wBz" = ( +/obj/structure/closet/crate/trashcart, +/obj/item/clothing/under/rank/prisoner, +/obj/effect/ai_node, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"wBW" = ( +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/freezer) +"wCL" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"wCZ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/daedalusprison/inside/substation) +"wDn" = ( +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"wDz" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/daedalusprison/inside/southmeetingroom) +"wDO" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/structure/cargo_container/gorg{ + dir = 8 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonyauxstorage) +"wDQ" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/security/easternbooth) +"wDW" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"wEe" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/chapel{ + dir = 1 + }, +/area/daedalusprison/inside/chapel) +"wEw" = ( +/turf/closed/shuttle/dropship2/enginethree{ + dir = 4 + }, +/area/daedalusprison/inside/pmcdropship) +"wEx" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"wEL" = ( +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest) +"wFr" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitepurple{ + dir = 8 + }, +/area/daedalusprison/inside/medical/chemistry) +"wGs" = ( +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/security/office) +"wGH" = ( +/obj/structure/closet/crate/freezer, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/freezer) +"wGS" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/item/ammo_casing, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"wGV" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"wHq" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"wHv" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"wHB" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonyauxstorage) +"wIx" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southeast) +"wIJ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical/treatment) +"wIQ" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"wIV" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"wJq" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"wJr" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"wJx" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison/darkyellow{ + dir = 4 + }, +/area/daedalusprison/inside/mechanicshop) +"wJE" = ( +/obj/structure/fence/broken, +/obj/structure/platform/rockcliff/icycliff/nondense{ + dir = 1 + }, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/south) +"wKg" = ( +/obj/effect/spawner/random/misc/structure/stool, +/obj/effect/landmark/weed_node, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"wKH" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"wKQ" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/westcomputerlab) +"wLy" = ( +/obj/structure/cable, +/obj/structure/table/mainship, +/turf/open/floor/prison/darkyellow{ + dir = 10 + }, +/area/daedalusprison/inside/mechanicshop) +"wLK" = ( +/turf/open/floor/prison/red/corner{ + dir = 4 + }, +/area/daedalusprison/inside/security/secbreakroom) +"wLV" = ( +/obj/structure/rack, +/turf/open/floor/prison, +/area/daedalusprison/inside/sportstorage) +"wMT" = ( +/obj/structure/table/mainship, +/obj/item/clothing/head/beret/jan, +/turf/open/floor/prison, +/area/daedalusprison/inside/janitorial) +"wNb" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"wNd" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/book, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"wNH" = ( +/obj/structure/table/mainship, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"wNL" = ( +/obj/machinery/vending/security, +/turf/open/floor/prison/darkred{ + dir = 9 + }, +/area/daedalusprison/inside/westernbooth) +"wNM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/easternhalls) +"wNT" = ( +/obj/structure/table/reinforced/weak, +/obj/item/storage/firstaid/rad, +/obj/item/storage/firstaid/rad, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"wNZ" = ( +/turf/open/floor/prison/darkred{ + dir = 10 + }, +/area/daedalusprison/inside/centralhalls) +"wOa" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 8 + }, +/obj/structure/prop/mainship/gelida/smallwire, +/obj/structure/prop/mainship/gelida/lightstick{ + pixel_x = 6; + pixel_y = 7 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"wOl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"wOp" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"wOB" = ( +/turf/closed/shuttle/dropship2/aisle, +/area/daedalusprison/inside/pmcdropship) +"wOJ" = ( +/obj/structure/prop/oresilo, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"wPC" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 1 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"wPM" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"wQa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/lobby) +"wQq" = ( +/obj/effect/landmark/patrol_point/som/som_14, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/southwest/garbledradio) +"wQs" = ( +/obj/machinery/shower, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"wQz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/bullet, +/obj/effect/ai_node, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/secbreakroom) +"wQF" = ( +/turf/closed/shuttle/dropship2/walltwo/alt, +/area/daedalusprison/inside/pmcdropship) +"wRe" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"wRt" = ( +/obj/effect/landmark/xeno_resin_wall, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north/garbledradio) +"wRR" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"wRW" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"wRX" = ( +/obj/structure/flora/ausbushes/ywflowers, +/turf/open/ground/grass/weedable, +/area/daedalusprison/inside/hydroponics) +"wRY" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark/green2{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"wSa" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood, +/obj/item/ammo_casing/bullet, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/centralhalls) +"wSr" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"wSC" = ( +/obj/item/ammo_casing/bullet, +/obj/item/ammo_casing/bullet, +/turf/open/shuttle/dropship/floor, +/area/daedalusprison/inside/pmcdropship) +"wSQ" = ( +/obj/structure/table/reinforced/weak, +/obj/item/book/manual/barman_recipes, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"wSS" = ( +/obj/item/reagent_containers/syringe/dylovene, +/turf/open/floor/prison/whitepurple/corner{ + dir = 1 + }, +/area/daedalusprison/inside/medical/chemistry) +"wSV" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"wTf" = ( +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"wTh" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"wTj" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"wTu" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"wTR" = ( +/obj/structure/table/woodentable, +/obj/structure/prop/computer/broken/eleven, +/turf/open/floor/prison, +/area/daedalusprison/inside/northclass) +"wUo" = ( +/obj/structure/filingcabinet, +/turf/open/floor/prison/whitepurple, +/area/daedalusprison/inside/medical) +"wUC" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/brown/full, +/area/daedalusprison/inside/engineering) +"wUH" = ( +/obj/effect/acid_hole, +/turf/closed/wall/prison, +/area/daedalusprison/inside/staffbreakroom) +"wVk" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/closed/wall/prison, +/area/daedalusprison/inside/habitationnorth) +"wVo" = ( +/obj/structure/table/mainship, +/turf/open/floor/mainship/floor, +/area/daedalusprison/caves/research) +"wVt" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 8 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"wVy" = ( +/obj/vehicle/ridden/wheelchair, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"wVL" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/computer/secure_data, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"wVN" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"wVU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"wWf" = ( +/obj/item/paper, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"wWI" = ( +/obj/machinery/disposal, +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 6 + }, +/area/daedalusprison/inside/easternhalls) +"wWN" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker/east) +"wWU" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/inside/landingzoneone) +"wWV" = ( +/obj/structure/table/mainship, +/obj/item/t_scanner, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"wXk" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"wXs" = ( +/obj/machinery/vending/medical, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"wXv" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"wXC" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/chemistry) +"wXG" = ( +/obj/machinery/conveyor{ + dir = 8 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"wXJ" = ( +/obj/structure/closet/secure_closet/personal, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/barracks) +"wXR" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/caves/nukestorage) +"wYl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/bullet, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"wYP" = ( +/obj/item/healthanalyzer, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"wZn" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"wZy" = ( +/obj/machinery/disposal, +/turf/open/floor/plating/plating_catwalk/prison, +/area/daedalusprison/inside/cafeteria) +"wZA" = ( +/obj/structure/table/reinforced/weak, +/obj/structure/prop/computer/broken/fourteen, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"wZE" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/freezer, +/area/daedalusprison/inside/staffrestroom) +"wZX" = ( +/turf/open/floor/mainship/purple{ + dir = 10 + }, +/area/daedalusprison/caves/research) +"xaD" = ( +/obj/effect/spawner/random/misc/trash, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"xaQ" = ( +/obj/structure/table/reinforced/weak, +/obj/effect/spawner/random/medical/heal_pack, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical/treatment) +"xaU" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/handcuffs, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/barracks) +"xbe" = ( +/obj/effect/ai_node, +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"xbi" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/dark/green2{ + dir = 1 + }, +/area/daedalusprison/inside/colonydorms) +"xbn" = ( +/obj/machinery/autodoc, +/obj/machinery/light, +/turf/open/floor/prison/whitegreen{ + dir = 10 + }, +/area/daedalusprison/inside/medical/treatment) +"xbH" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/garage) +"xbT" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"xca" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/basketball) +"xcl" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/easternhalls) +"xcC" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"xcZ" = ( +/obj/structure/cable, +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/daedalusprison/inside/westcomputerlab) +"xdc" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"xdg" = ( +/obj/machinery/space_heater, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"xdi" = ( +/obj/structure/table/reinforced/weak, +/obj/item/weapon/gun/revolver/judge, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"xds" = ( +/obj/machinery/disposal, +/turf/open/floor/tile/dark/green2, +/area/daedalusprison/inside/colonydorms) +"xdx" = ( +/obj/effect/landmark/corpsespawner/prisoner, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/janitorial) +"xdB" = ( +/obj/structure/table/mainship, +/obj/item/tool/kitchen/tray, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"xdR" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/interrogation) +"xea" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"xee" = ( +/obj/effect/landmark/corpsespawner/colonist, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"xeq" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"xeu" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/ai_node, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"xew" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4 + }, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/corporateoffice) +"xeM" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"xeY" = ( +/turf/open/floor/tile/chapel{ + dir = 4 + }, +/area/daedalusprison/inside/chapel) +"xfe" = ( +/turf/closed/wall/r_wall, +/area/daedalusprison/inside/landingzoneone) +"xfr" = ( +/obj/effect/turf_decal/warning_stripes/box, +/obj/structure/cargo_container/gorg{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"xfw" = ( +/obj/structure/table, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/green/greentaupe{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"xfA" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"xfC" = ( +/obj/machinery/vending/MarineMed/Blood, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"xfI" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/barracks) +"xfK" = ( +/obj/structure/filingcabinet, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"xga" = ( +/obj/structure/closet/secure_closet/hydroponics, +/turf/open/floor/prison/green{ + dir = 4 + }, +/area/daedalusprison/inside/prisongarden) +"xgk" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/shuttle/dropship/three, +/area/daedalusprison/inside/pmcdropship) +"xgA" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4 + }, +/turf/open/floor/prison/darkred{ + dir = 4 + }, +/area/daedalusprison/inside/centralhalls) +"xgE" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"xhJ" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/flora/ausbushes/ywflowers, +/turf/open/ground/grass/weedable, +/area/daedalusprison/inside/hydroponics) +"xhU" = ( +/obj/effect/spawner/random/misc/structure/crate, +/turf/open/floor/tile/dark/brown2{ + dir = 4 + }, +/area/daedalusprison/inside/cargo) +"xhW" = ( +/obj/item/ammo_casing, +/obj/item/ammo_casing, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/barracks) +"xic" = ( +/obj/docking_port/stationary/crashmode, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"xiw" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"xja" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"xjg" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison, +/area/daedalusprison/inside/southclass) +"xjo" = ( +/obj/structure/rack, +/obj/item/ammo_magazine/rifle/m16, +/obj/item/ammo_magazine/rifle/m16, +/obj/item/ammo_magazine/rifle/m16, +/obj/item/ammo_magazine/rifle/m16, +/obj/item/ammo_magazine/rifle/m16, +/obj/item/ammo_magazine/rifle/m16, +/obj/item/ammo_magazine/rifle/m16, +/obj/item/ammo_magazine/rifle/m16, +/obj/item/ammo_magazine/rifle/m16, +/obj/item/ammo_magazine/rifle/m16, +/obj/item/ammo_magazine/rifle/m16, +/obj/item/ammo_magazine/rifle/m16, +/obj/item/ammo_magazine/rifle/m16, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"xjB" = ( +/obj/structure/table/woodentable, +/obj/effect/spawner/random/food_or_drink/beer, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"xjF" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/machinery/random_broken_computer/small, +/turf/open/floor/prison, +/area/daedalusprison/inside/studyroom) +"xjM" = ( +/obj/effect/decal/cleanable/blood, +/obj/structure/cable, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"xkt" = ( +/obj/structure/prop/mainship/gelida/smallwire, +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 4 + }, +/obj/structure/prop/mainship/gelida/lightstick{ + pixel_x = -8; + pixel_y = 7 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/south) +"xkC" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"xkH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/janitorial) +"xkT" = ( +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"xkW" = ( +/obj/structure/table/mainship, +/obj/effect/spawner/random/misc/book, +/obj/item/tool/pen/blue{ + pixel_x = 5 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/studyroom) +"xle" = ( +/obj/structure/table, +/turf/open/floor/tile/green/greentaupe{ + dir = 6 + }, +/area/daedalusprison/inside/hydroponics) +"xlJ" = ( +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"xlO" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/easternhalls) +"xlS" = ( +/obj/machinery/door/airlock/mainship/security/glass/free_access{ + dir = 2; + name = "Security Booth" + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralbooth) +"xlU" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/security/office) +"xmh" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"xmq" = ( +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/east) +"xmN" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"xnk" = ( +/obj/item/ammo_casing/bullet, +/obj/item/stack/sheet/metal, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/centralhalls) +"xnH" = ( +/obj/structure/bookcase, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 9 + }, +/area/daedalusprison/inside/habitationsouth) +"xnX" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"xom" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"xot" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/tile/green/greentaupe{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"xoE" = ( +/obj/effect/landmark/corpsespawner/colonist, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/cargo) +"xpm" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"xpH" = ( +/obj/structure/sink{ + dir = 1 + }, +/turf/open/floor, +/area/daedalusprison/inside/colonydorms) +"xqC" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/button, +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/daedalusprison/inside/security/cameras) +"xqI" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/ground/grass/weedable, +/area/daedalusprison/inside/hydroponics) +"xqJ" = ( +/obj/machinery/miner/damaged/platinum, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/north) +"xqM" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralhalls) +"xrn" = ( +/obj/structure/rack, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/suit/armor/riot, +/turf/open/floor/tile/dark2, +/area/daedalusprison/caves/nukestorage) +"xrB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"xrD" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/mining) +"xrP" = ( +/obj/structure/platform/nondense{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southwest) +"xrW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/weapon/gun/revolver/upp, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"xsp" = ( +/obj/structure/cable, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"xsU" = ( +/obj/structure/bed/roller, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitegreen{ + dir = 4 + }, +/area/daedalusprison/inside/medical) +"xty" = ( +/turf/open/floor/prison/darkyellow, +/area/daedalusprison/inside/sportstorage) +"xtH" = ( +/obj/structure/table/reinforced/weak, +/turf/open/floor/prison/whitegreen{ + dir = 4 + }, +/area/daedalusprison/inside/medical) +"xtR" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/bunker) +"xtT" = ( +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/freezer) +"xtV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 8; + pixel_y = 16 + }, +/turf/open/floor/tile/dark/red2{ + dir = 8 + }, +/area/daedalusprison/inside/seccheckpoint) +"xuq" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisongarden) +"xuN" = ( +/obj/machinery/space_heater, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/mining) +"xvs" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/daedalusprison/inside/colonyauxstorage) +"xvE" = ( +/obj/effect/landmark/corpsespawner/colonist, +/turf/open/floor/tile/green/greentaupecorner, +/area/daedalusprison/inside/garden) +"xvF" = ( +/obj/structure/nuke_disk_candidate{ + set_associations = list("set3") + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 5 + }, +/area/daedalusprison/inside/security/cameras) +"xvR" = ( +/obj/machinery/space_heater, +/turf/open/floor/tile/red/full, +/area/daedalusprison/inside/bunker/east) +"xwo" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + name = "Library" + }, +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/wood, +/area/daedalusprison/inside/library) +"xwZ" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 8 + }, +/obj/effect/landmark/excavation_site_spawner, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"xxe" = ( +/obj/structure/cable, +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"xxk" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"xxz" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/mining) +"xxA" = ( +/obj/structure/table/mainship, +/turf/open/floor/tile/blue/whiteblue, +/area/daedalusprison/inside/southmeetingroom) +"xxK" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering{ + name = "\improper Chief Engineer's Office"; + dir = 1 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/engineering) +"xxV" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"xxZ" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood, +/obj/effect/ai_node, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/colonydorms) +"xyf" = ( +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"xyr" = ( +/obj/effect/ai_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/north) +"xys" = ( +/obj/structure/filingcabinet, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/security/office) +"xyL" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"xzh" = ( +/obj/structure/window/framed/colony, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonyauxstorage) +"xzI" = ( +/obj/structure/table/reinforced/weak, +/obj/item/defibrillator, +/obj/item/defibrillator, +/obj/item/defibrillator, +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"xAx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"xAR" = ( +/obj/structure/largecrate/chick, +/obj/effect/landmark/weed_node, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"xAS" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/tile/chapel{ + dir = 1 + }, +/area/daedalusprison/inside/chapel) +"xBi" = ( +/obj/structure/window_frame/prison/reinforced, +/obj/item/shard, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"xBl" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"xBo" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/habitationsouth) +"xBx" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"xBD" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/barracks) +"xBG" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/prison/darkred{ + dir = 1 + }, +/area/daedalusprison/inside/centralhalls) +"xCi" = ( +/turf/open/floor/prison/darkred{ + dir = 5 + }, +/area/daedalusprison/inside/centralhalls) +"xCs" = ( +/obj/machinery/vending/tool, +/turf/open/floor/tile/dark/yellow2{ + dir = 1 + }, +/area/daedalusprison/inside/engineering) +"xCx" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green{ + dir = 10 + }, +/area/daedalusprison/inside/westcomputerlab) +"xCS" = ( +/obj/item/shard, +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/prison/whitepurple{ + dir = 1 + }, +/area/daedalusprison/inside/medical/chemistry) +"xDD" = ( +/obj/structure/bed/chair/dropship/passenger{ + dir = 4 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/item/ammo_casing/bullet, +/turf/open/shuttle/dropship/seven, +/area/daedalusprison/inside/pmcdropship) +"xDZ" = ( +/obj/effect/decal/cleanable/blood/gibs/limb, +/turf/open/floor/prison/darkred{ + dir = 8 + }, +/area/daedalusprison/inside/centralhalls) +"xEc" = ( +/turf/open/floor/prison/whitegreen/corner{ + dir = 8 + }, +/area/daedalusprison/inside/medical) +"xEi" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/studyroom) +"xEn" = ( +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffrestroom) +"xEt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"xEu" = ( +/obj/structure/table/mainship, +/obj/structure/window/reinforced/tinted, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/effect/spawner/random/misc/paperbin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/tool/pen{ + pixel_y = 4 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"xFM" = ( +/obj/structure/table/woodentable, +/obj/item/reagent_containers/food/drinks/shaker, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"xGe" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/dark/red2, +/area/daedalusprison/inside/seccheckpoint) +"xGm" = ( +/obj/structure/table/reinforced/weak, +/obj/machinery/button, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/execution) +"xGq" = ( +/obj/effect/turf_decal/tracks/wheels/bloody, +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"xGB" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/green/greentaupe{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"xGF" = ( +/turf/open/floor/prison/red/full, +/area/daedalusprison/inside/security/office) +"xGH" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/snacks/grown/wheat, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/green/greentaupe, +/area/daedalusprison/inside/hydroponics) +"xHc" = ( +/obj/structure/platform/nondense{ + dir = 8 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/southwest) +"xHY" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/corporateoffice) +"xIc" = ( +/obj/structure/table/mainship, +/obj/item/reagent_containers/food/drinks/coffee, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"xIk" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"xIv" = ( +/obj/machinery/iv_drip, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"xID" = ( +/obj/item/ammo_casing/shell, +/turf/open/floor/prison/darkred{ + dir = 9 + }, +/area/daedalusprison/inside/centralhalls) +"xIE" = ( +/obj/effect/ai_node, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/daedalusprison/inside/southmeetingroom) +"xIF" = ( +/turf/open/floor/prison/whitegreen, +/area/daedalusprison/inside/medical) +"xIT" = ( +/obj/structure/table/woodentable, +/obj/effect/spawner/random/food_or_drink/burger/normal, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"xIV" = ( +/obj/structure/table/gamblingtable, +/turf/open/floor/wood, +/area/daedalusprison/inside/bar) +"xJl" = ( +/obj/item/shard, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/purple/taupepurple, +/area/daedalusprison/inside/hydroponicstesting) +"xJq" = ( +/obj/machinery/space_heater, +/obj/machinery/light, +/turf/open/floor/prison/whitegreen{ + dir = 10 + }, +/area/daedalusprison/inside/medical) +"xJy" = ( +/obj/structure/table/mainship, +/obj/structure/paper_bin{ + pixel_y = 8 + }, +/obj/item/tool/pen/red, +/turf/open/floor/tile/dark/brown2/corner, +/area/daedalusprison/inside/cargo) +"xJD" = ( +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/east) +"xJO" = ( +/obj/structure/prop/tgbrokenvendor/chefdrobe, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"xKv" = ( +/obj/effect/decal/cleanable/blood, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"xKA" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/easternhalls) +"xKF" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark/green2{ + dir = 10 + }, +/area/daedalusprison/inside/colonydorms) +"xKY" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red/corner{ + dir = 1 + }, +/area/daedalusprison/inside/habitationnorth) +"xLe" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/daedalusprison/inside/chapel) +"xLh" = ( +/obj/structure/filingcabinet, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationsouth) +"xLo" = ( +/obj/effect/turf_decal/tracks/wheels/bloody{ + dir = 4 + }, +/turf/open/floor/tile/dark/purple2/corner, +/area/daedalusprison/inside/secoffices) +"xLt" = ( +/obj/structure/table/mainship, +/obj/structure/prop/computer/broken/ten, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"xLv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"xLO" = ( +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/chapel{ + dir = 4 + }, +/area/daedalusprison/inside/chapel) +"xLQ" = ( +/obj/machinery/disposal, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/westernbooth) +"xLX" = ( +/obj/structure/table/reinforced/weak, +/obj/structure/prop/computer/broken/nineteen, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"xMd" = ( +/obj/item/reagent_containers/hypospray/autoinjector/synaptizine_expired, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/gym) +"xMn" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"xMr" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"xMP" = ( +/obj/structure/table/mainship, +/turf/open/floor/tile/brown/full, +/area/daedalusprison/inside/engineering) +"xMY" = ( +/obj/structure/rack, +/obj/item/stack/sheet/mineral/gold, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/mining) +"xNe" = ( +/obj/effect/ai_node, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/habitationnorth) +"xNg" = ( +/turf/closed/wall/prison, +/area/daedalusprison/inside/habitationsouth) +"xNm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"xNo" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4 + }, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"xNG" = ( +/obj/item/ammo_casing, +/turf/open/floor/prison, +/area/daedalusprison/inside/centralbooth) +"xOb" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"xOs" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/machinery/light, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"xOt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"xOU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"xPk" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/daedalusprison/caves/rock) +"xPJ" = ( +/obj/structure/platform_decoration{ + dir = 4 + }, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/northeast) +"xPU" = ( +/obj/structure/closet/secure_closet/personal, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/barracks) +"xQp" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"xQD" = ( +/obj/structure/bed/chair/comfy{ + dir = 1 + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/wood, +/area/daedalusprison/inside/recreation) +"xQI" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 1 + }, +/area/daedalusprison/inside/hydroponics) +"xQU" = ( +/obj/item/clothing/under/rank/prisoner, +/obj/effect/ai_node, +/turf/open/floor/tile/green/whitegreencorner{ + dir = 8 + }, +/area/daedalusprison/inside/laundromat) +"xRu" = ( +/obj/machinery/optable, +/obj/item/tank/anesthetic, +/obj/effect/landmark/corpsespawner/prisoner/burst, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"xRT" = ( +/obj/machinery/shower{ + dir = 1 + }, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/prisonshower) +"xSb" = ( +/turf/closed/wall/r_wall, +/area/daedalusprison/inside/bunker/east) +"xSE" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"xTh" = ( +/obj/effect/ai_node, +/turf/open/floor/prison/darkred/full, +/area/daedalusprison/inside/centralhalls) +"xTx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"xTK" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/red{ + dir = 9 + }, +/area/daedalusprison/inside/barracks) +"xTL" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/green/greentaupecorner{ + dir = 4 + }, +/area/daedalusprison/inside/hydroponics) +"xTR" = ( +/obj/effect/decal/cleanable/greenglow, +/obj/item/stack/sheet/metal, +/turf/open/floor/plating/ground/snow/layer0, +/area/daedalusprison/outside/east) +"xTS" = ( +/obj/structure/table/mainship, +/obj/item/reagent_containers/food/snacks/burger/crazy, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"xUa" = ( +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"xUb" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete, +/area/daedalusprison/inside/garage) +"xUm" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/corpsespawner/prisoner, +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"xUD" = ( +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/daedalusprison/inside/lobby) +"xUL" = ( +/obj/structure/table/mainship, +/turf/open/floor/tile/white, +/area/daedalusprison/inside/southmeetingroom) +"xUU" = ( +/obj/effect/landmark/weed_node, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red, +/area/daedalusprison/inside/habitationnorth) +"xVc" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/prison/darkyellow{ + dir = 4 + }, +/area/daedalusprison/inside/mechanicshop) +"xVp" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/tile/dark/yellow2/corner, +/area/daedalusprison/inside/engineering) +"xWg" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"xWk" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green{ + dir = 5 + }, +/area/daedalusprison/inside/westcomputerlab) +"xWq" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"xWs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"xWv" = ( +/turf/open/floor/prison/whitegreen{ + dir = 1 + }, +/area/daedalusprison/inside/medical) +"xXi" = ( +/obj/structure/curtain/shower, +/turf/open/floor/freezer, +/area/daedalusprison/inside/colonydorms) +"xXz" = ( +/obj/structure/table/mainship, +/turf/open/floor/prison/darkyellow, +/area/daedalusprison/inside/mechanicshop) +"xYt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/seccheckpoint) +"xYw" = ( +/obj/structure/prop/mainship/gelida/lightstick, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/southeast) +"xYJ" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/brown2{ + dir = 1 + }, +/area/daedalusprison/inside/cargo) +"xZb" = ( +/obj/structure/filingcabinet, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/medical) +"xZn" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/turf/open/floor/prison, +/area/daedalusprison/inside/westernbooth) +"xZt" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/daedalusprison/inside/hydroponics) +"xZz" = ( +/obj/structure/closet/secure_closet/personal, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisonshower) +"xZR" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/tile/dark/green2{ + dir = 8 + }, +/area/daedalusprison/inside/colonydorms) +"xZV" = ( +/obj/structure/filingcabinet/medical, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/daedalusprison/inside/southmeetingroom) +"yas" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkpurple, +/area/daedalusprison/inside/janitorial) +"yaA" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/item/weapon/gun/rifle/m16, +/turf/open/floor/prison/darkred, +/area/daedalusprison/inside/centralhalls) +"yaP" = ( +/obj/item/shard, +/turf/open/floor/plating/ground/snow/layer2, +/area/daedalusprison/outside/east) +"ybM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"ydf" = ( +/obj/machinery/space_heater, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/staffbreakroom) +"ydL" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/lobby) +"ydR" = ( +/obj/structure/table/reinforced/weak, +/obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_rifle, +/obj/item/cell/lasgun/lasrifle, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"ydS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/habitationsouth) +"yej" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationnorth) +"yes" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/interrogation) +"yew" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/mechanicshop) +"yeF" = ( +/obj/effect/landmark/weed_node, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/habitationsouth) +"yeH" = ( +/obj/structure/table/mainship, +/obj/machinery/faxmachine, +/turf/open/floor/tile/dark/red2/corner, +/area/daedalusprison/inside/cargo) +"yeO" = ( +/obj/effect/landmark/patrol_point/tgmc_13, +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/open/floor/plating/ground/ice, +/area/daedalusprison/caves/northwest) +"yfZ" = ( +/obj/structure/window/framed/prison/reinforced, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/interrogation) +"ygU" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/daedalusprison/inside/freezer) +"yhj" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic/canteen{ + name = "\improper Dormitories Laundromat" + }, +/turf/open/floor/tile/dark2, +/area/daedalusprison/inside/colonydorms) +"yhD" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"yhR" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/xeno_resin_door, +/turf/open/floor/prison/plate, +/area/daedalusprison/inside/centralhalls) +"yip" = ( +/turf/open/floor/prison, +/area/daedalusprison/inside/cafeteria) +"yiy" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/red{ + dir = 1 + }, +/area/daedalusprison/inside/barracks) +"yiZ" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/secbreakroom) +"yji" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/ai_node, +/turf/open/floor, +/area/daedalusprison/inside/hydroponics) +"yjO" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/red/corner{ + dir = 8 + }, +/area/daedalusprison/inside/habitationsouth) +"yjU" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/daedalusprison/inside/habitationnorth) +"yjW" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/westcomputerlab) +"ykk" = ( +/obj/structure/table/mainship, +/obj/item/clothing/suit/storage/chef/classic, +/turf/open/floor/prison/kitchen, +/area/daedalusprison/inside/kitchen) +"ykE" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison/whitegreen/full, +/area/daedalusprison/inside/medical) +"ykG" = ( +/obj/machinery/light, +/turf/open/floor/prison/darkyellow{ + dir = 10 + }, +/area/daedalusprison/inside/sportstorage) +"ylp" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison/cellstripe{ + dir = 4 + }, +/area/daedalusprison/inside/habitationnorth) +"ylx" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/daedalusprison/inside/security/office) +"ylD" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + name = "Showers" + }, +/turf/open/floor/prison, +/area/daedalusprison/inside/prisonshower) +"ylQ" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/effect/landmark/corpsespawner/colonist, +/turf/open/floor/tile/dark/brown2/corner, +/area/daedalusprison/inside/cargo) +"ylV" = ( +/obj/effect/landmark/corpsespawner/prison_security, +/obj/effect/ai_node, +/turf/open/floor/prison, +/area/daedalusprison/inside/security/office) +"ylX" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/daedalusprison/inside/habitationsouth) + +(1,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +rxG +"} +(2,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(3,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(4,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +hoO +hoO +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(5,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +ira +ira +ira +ira +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(6,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +ira +kji +mEN +tIN +ira +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +wEL +mTJ +nqc +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(7,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +mEN +ira +kji +ira +ira +ira +ira +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +liI +liI +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(8,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +ira +ira +hUv +ngx +wTh +kji +eIU +hoO +sLx +sLx +liI +liI +liI +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +nyO +wEL +wEL +wEL +nyO +mTJ +wEL +wEL +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(9,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +ira +kji +ira +ira +oAg +mEN +ira +hoO +liI +liI +liI +miz +miz +kzq +miz +miz +miz +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +wEL +wEL +wEL +mTJ +wEL +wEL +wEL +dBv +wEL +wEL +wEL +nyO +wEL +wEL +mTJ +wEL +wEL +nyO +wEL +wEL +nyO +liI +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(10,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +ira +mEN +ira +ira +ira +kji +iys +ira +wTh +ira +ira +ira +ira +ira +wTh +ira +ira +ira +wTh +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +hoO +hoO +hoO +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +wEL +mTJ +wEL +nyO +wEL +wEL +wEL +wEL +nyO +wEL +wEL +wEL +wEL +wEL +mTJ +liI +liI +liI +wEL +wEL +wEL +wEL +nyO +wEL +wEL +wEL +wEL +wEL +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(11,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +ira +ira +ira +ira +ira +iys +ira +ira +mEN +ira +ira +ira +ira +ngx +wTh +miz +kzq +ira +wTh +miz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +hoO +avY +vXd +vXd +vXd +vXd +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +liI +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +liI +liI +liI +liI +sLx +liI +liI +liI +wEL +wEL +mTJ +nyO +wEL +wEL +mTJ +nyO +wEL +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(12,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +yeO +iys +iys +iys +rfR +ira +ira +ira +ira +ira +ira +mEN +ira +ira +miz +miz +ira +ira +miz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +chJ +avY +vXd +dXG +vXd +vXd +avY +vXd +dXG +hoO +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +mTJ +wEL +wEL +mTJ +wEL +wEL +wEL +mTJ +wEL +syg +wEL +mTJ +wEL +liI +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +nyO +wEL +mTJ +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(13,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +mEN +ira +ira +ira +ira +ira +ira +miz +miz +miz +liI +liI +liI +ira +ira +ira +ira +ira +miz +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +vXd +dXG +vXd +vXd +agG +agG +vXd +vXd +dXG +vXd +hoO +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(14,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +miz +miz +ira +wTh +ira +ira +miz +miz +kwE +miz +liI +liI +liI +sLx +liI +liI +ira +mEN +ira +ira +miz +kzq +miz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +vXd +vXd +avY +vXd +agG +agG +vXd +vXd +vXd +dXG +vXd +dXG +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +liI +liI +wEL +wEL +wEL +wEL +wEL +nyO +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +nyO +wEL +wEL +wEL +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +wEL +mTJ +wEL +wEL +nyO +mTJ +wEL +wEL +nyO +wEL +wEL +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(15,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +miz +miz +ira +ira +ira +ira +ira +kzq +liI +liI +liI +liI +sLx +sLx +sLx +sLx +liI +liI +liI +ira +ira +ira +ira +miz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +mEN +vXd +vXd +vXd +vXd +vXd +vXd +vXd +pFx +avY +vXd +vXd +vXd +vXd +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +wEL +mTJ +wEL +wEL +wEL +mTJ +wEL +wEL +nyO +dBv +wEL +wEL +wEL +mTJ +wEL +wEL +wEL +mTJ +wEL +wEL +wEL +mTJ +wEL +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +liI +liI +wEL +wEL +wEL +wEL +mTJ +wEL +wEL +wEL +mTJ +wEL +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(16,1,1) = {" +sLx +sLx +sLx +sLx +sLx +liI +liI +miz +miz +ira +ira +mEN +ira +ira +ira +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +vbd +ira +ira +miz +miz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +ira +vXd +vXd +aeT +vXd +vXd +avY +vXd +vXd +vXd +vXd +vXd +avY +vXd +vXd +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +wEL +wEL +wEL +wEL +wEL +nyO +wEL +wEL +nyO +wEL +wEL +wEL +wEL +wEL +liI +liI +liI +liI +liI +wEL +wEL +wEL +wEL +wEL +wEL +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +mTJ +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(17,1,1) = {" +sLx +sLx +sLx +sLx +sLx +liI +kzq +miz +miz +wTf +wTf +miz +miz +wTf +wTf +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +ira +wTh +ira +ira +kzq +miz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +ira +ira +vXd +vXd +vXd +vXd +vXd +vXd +vXd +vXd +vXd +agG +agG +vXd +vXd +vXd +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +nyO +wEL +wEL +nyO +wEL +wEL +wEL +nyO +wEL +wEL +wEL +mTJ +wEL +liI +liI +liI +liI +liI +sLx +sLx +sLx +liI +wEL +wEL +wEL +wEL +wEL +wEL +wEL +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(18,1,1) = {" +sLx +sLx +sLx +sLx +sLx +liI +miz +ira +ira +ira +ira +miz +miz +ira +ira +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +ira +ira +ira +wTh +ira +ira +miz +miz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +hoO +ira +ira +vXd +dXG +avY +vXd +vXd +vXd +vXd +vXd +vXd +agG +agG +vXd +vXd +vXd +avY +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +wEL +wEL +mTJ +wEL +wEL +wEL +mTJ +wEL +wEL +wEL +mTJ +wEL +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +nyO +wEL +wEL +nyO +wEL +wEL +wEL +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +wEL +wEL +dBv +wEL +wEL +wEL +mTJ +wEL +wEL +nyO +mTJ +wEL +wEL +wEL +mTJ +wEL +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(19,1,1) = {" +sLx +sLx +sLx +sLx +liI +liI +miz +ira +wTh +mEN +ira +ira +wTh +ira +ira +ira +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +mEN +ira +ira +vbd +ira +ira +ira +ira +kzq +miz +liI +liI +sLx +sLx +sLx +sLx +sLx +hoO +ira +mEN +dXG +vXd +vXd +rLx +agG +mCz +agG +vXd +sFw +vXd +vXd +vXd +wun +dXG +vXd +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +mTJ +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +wEL +mTJ +wEL +nyO +wEL +mTJ +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +wEL +wEL +nyO +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +nyO +wEL +wEL +wEL +wEL +wEL +nyO +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(20,1,1) = {" +sLx +sLx +sLx +sLx +liI +kzq +ira +ira +ira +ira +ira +ira +ira +ira +ira +ira +ira +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +ira +ira +miz +miz +ira +ira +ira +miz +miz +liI +sLx +sLx +sLx +sLx +sLx +hoO +ira +wTh +agG +agG +vXd +agG +liI +liI +agG +agG +vXd +vXd +vXd +vXd +vXd +vXd +vXd +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +wEL +wEL +wEL +wEL +wEL +wEL +wEL +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +wEL +wEL +wEL +wEL +wEL +liI +liI +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +liI +liI +liI +liI +liI +liI +wEL +wEL +mTJ +wEL +wEL +wEL +wEL +liI +liI +liI +liI +liI +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(21,1,1) = {" +sLx +sLx +sLx +sLx +liI +miz +ira +ira +ira +ira +liI +liI +wTh +mEN +ira +ira +vbd +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +mEN +ira +miz +miz +ira +mEN +ira +ira +kzq +liI +sLx +sLx +sLx +sLx +sLx +hoO +ira +ira +agG +agG +avY +liI +liI +liI +liI +mCz +agG +agG +vXd +vXd +vXd +vXd +vXd +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +wEL +wEL +wEL +wEL +wEL +wEL +dBv +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +wEL +wEL +wEL +wEL +wEL +liI +liI +sLx +sLx +sLx +liI +liI +mTJ +wEL +wEL +wEL +wEL +wEL +wEL +wEL +mTJ +wEL +wEL +wEL +wEL +wEL +liI +liI +liI +sLx +sLx +sLx +liI +liI +liI +wEL +mTJ +wEL +wEL +wEL +mTJ +wEL +wEL +wEL +wEL +mTJ +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(22,1,1) = {" +sLx +sLx +sLx +sLx +liI +miz +ira +ira +ira +ira +liI +liI +liI +liI +miz +wTf +wTf +miz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +ira +mEN +ira +ira +ira +ira +ira +miz +liI +liI +sLx +sLx +sLx +liI +hoO +ira +mEN +vXd +vXd +vXd +liI +sLx +sLx +liI +liI +liI +agG +avY +vXd +vXd +vXd +vXd +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +qqc +juh +juh +juh +qqc +juh +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +wEL +dBv +wEL +wEL +wEL +mTJ +liI +sLx +liI +liI +liI +wEL +wEL +wEL +mTJ +wEL +nyO +mTJ +wEL +wEL +wEL +wEL +wEL +wEL +wEL +dBv +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(23,1,1) = {" +sLx +sLx +sLx +sLx +liI +kzq +wTf +miz +miz +uAB +liI +sLx +sLx +liI +ira +ira +ira +ira +ira +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +ira +ira +ira +svs +ira +ira +ira +ira +liI +sLx +sLx +sLx +liI +hoO +ira +ira +vXd +vXd +vXd +liI +sLx +sLx +sLx +sLx +liI +liI +vXd +vXd +vXd +avY +vXd +vXd +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +hoO +hoO +hoO +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +wEL +nyO +wEL +wEL +wEL +liI +liI +liI +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +mTJ +wEL +wEL +wEL +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +wEL +nyO +wEL +wEL +mTJ +wEL +nyO +wEL +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(24,1,1) = {" +sLx +sLx +sLx +sLx +liI +miz +ngx +ira +ira +ira +liI +sLx +sLx +liI +liI +ira +ira +ira +ira +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +mEN +ira +ira +ira +ira +ira +miz +miz +mEN +liI +sLx +sLx +liI +liI +hoO +iys +iys +fXM +dvi +vCe +hoO +tXJ +tXJ +tXJ +tXJ +tXJ +hoO +dvi +dvi +dvi +dvi +dvi +dvi +hoO +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +juh +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +wEL +wEL +wEL +wEL +wEL +wEL +wEL +mTJ +wEL +wEL +dBv +wEL +wEL +wEL +dBv +wEL +wEL +wEL +liI +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +wEL +wEL +wEL +wEL +wEL +wEL +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(25,1,1) = {" +sLx +sLx +sLx +sLx +liI +miz +ira +ira +wTh +ira +liI +sLx +sLx +sLx +liI +mEN +ira +ira +ira +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +ira +miz +miz +ira +ira +miz +miz +ira +liI +liI +liI +liI +ira +ira +ira +ira +vXd +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +liI +liI +vXd +vXd +vXd +vXd +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +wEL +juh +wEL +wEL +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +mTJ +wEL +nyO +mTJ +wEL +wEL +wEL +wEL +wEL +wEL +wEL +nyO +wEL +wEL +liI +liI +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +wEL +wEL +mTJ +wEL +wEL +mTJ +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(26,1,1) = {" +sLx +sLx +sLx +sLx +liI +miz +miz +vbd +ira +ira +liI +liI +sLx +sLx +liI +ira +wTh +ira +ira +vbd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +wTh +ira +miz +kzq +ira +ira +ira +ira +ira +ira +liI +liI +ira +ira +wTh +mEN +wTh +dXG +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +avY +vXd +vXd +agG +mCz +vXd +liI +liI +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +vBS +dLg +dVz +nmY +vBS +dLg +dVz +dVz +dVz +dLg +bvc +vBS +dVz +dLg +dVz +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dLg +dVz +dVz +dVz +dVz +dVz +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +dVz +dVz +dVz +dVz +dtB +dVz +dVz +dVz +dLg +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(27,1,1) = {" +sLx +sLx +sLx +sLx +liI +liI +miz +ira +ira +ira +iOD +liI +sLx +sLx +liI +liI +ira +ira +ira +ira +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +wTh +ira +ira +ira +mEN +ira +wTh +vbd +ira +ira +ira +mEN +wTh +ira +ira +ira +vXd +vXd +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +vXd +dXG +agG +agG +dXG +vXd +arR +arR +vXd +dXG +vXd +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +dVz +dVz +dVz +vBS +dVz +dVz +dVz +dVz +dVz +dVz +bvc +dVz +dVz +dVz +dVz +dVz +dLg +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +dLg +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dLg +dVz +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(28,1,1) = {" +sLx +sLx +sLx +sLx +sLx +liI +miz +ira +ira +ira +vbd +liI +sLx +sLx +sLx +liI +ira +ngx +ira +ira +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +mEN +ira +ira +ira +ira +ira +ira +miz +miz +wTh +ira +ira +ira +ira +ira +miz +miz +vXd +avY +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +avY +dXG +dXG +vXd +avY +agG +agG +vXd +avY +vXd +vXd +avY +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +bvc +vBS +dVz +dVz +dVz +dVz +vBS +dVz +liI +liI +liI +sLx +sLx +sLx +liI +liI +dVz +dVz +dVz +dVz +dLg +dVz +vBS +dVz +dLg +dVz +dVz +dVz +dVz +dVz +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +dVz +dVz +dVz +rLe +dVz +dVz +dVz +dVz +dVz +dVz +dVz +vBS +dVz +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(29,1,1) = {" +sLx +sLx +sLx +sLx +sLx +liI +miz +ira +ira +ira +ira +liI +sLx +sLx +liI +liI +ira +ira +ira +mEN +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +ira +ira +ira +ira +ira +ira +miz +miz +ira +ira +miz +miz +ira +ira +miz +miz +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +vXd +vXd +aeT +vXd +arR +arR +vXd +vXd +vXd +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +dVz +dVz +dVz +dVz +dVz +dVz +hoO +hoO +hoO +hoO +chJ +liI +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +liI +liI +liI +liI +liI +dVz +vBS +dVz +dVz +dVz +dVz +vBS +dVz +dVz +dVz +dVz +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +liI +dVz +dLg +vBS +dVz +dVz +dLg +dVz +vBS +dVz +dVz +dLg +dVz +vBS +dVz +dLg +dVz +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(30,1,1) = {" +sLx +sLx +sLx +sLx +sLx +liI +kzq +ira +ira +ira +ira +liI +sLx +sLx +liI +ira +mEN +ira +ira +ira +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +ira +ira +ira +ira +ira +ira +ira +ira +ira +ngx +miz +miz +ira +ira +ira +ira +vXd +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +vXd +avY +vXd +liI +liI +liI +dXG +vXd +dXG +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +dVz +dLg +dVz +dVz +dLg +hoO +hoO +sLx +sLx +sLx +sLx +liI +liI +dLg +dVz +dVz +dVz +dLg +dVz +dVz +dVz +dVz +dLg +dVz +dVz +dVz +dLg +dVz +dLg +dVz +dVz +dVz +dVz +dVz +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +vBS +dLg +dVz +dVz +dVz +vBS +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +gzV +dVz +dVz +dVz +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(31,1,1) = {" +sLx +sLx +sLx +sLx +sLx +liI +miz +ira +ira +ira +ira +liI +sLx +liI +ira +ira +wTh +ira +ira +wTh +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +mEN +ira +ira +hKb +mEN +ira +ira +mEN +ira +ira +ira +mEN +ira +ira +ira +mEN +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +vXd +vXd +vXd +liI +sLx +liI +liI +vXd +vXd +avY +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +dVz +dVz +dVz +dVz +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +dVz +dVz +vBS +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +vBS +dVz +dVz +dVz +dVz +dVz +dLg +dVz +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +liI +liI +liI +liI +dVz +dVz +dVz +dVz +dVz +dVz +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(32,1,1) = {" +sLx +sLx +sLx +sLx +sLx +liI +miz +wTh +ira +ira +vbd +liI +liI +liI +mEN +ira +ira +ira +ira +mEN +liI +sLx +sLx +sLx +sLx +sLx +liI +liI +miz +ira +ira +miz +wTf +wTf +wTf +wTf +miz +ira +ira +ira +ira +ira +ira +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +vXd +vXd +vXd +avY +liI +sLx +sLx +liI +vXd +vXd +vXd +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +dVz +dVz +dVz +dVz +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dVz +dVz +dVz +vBS +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +liI +liI +liI +dVz +dVz +dVz +dVz +dVz +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +dVz +dVz +dLg +dVz +dVz +dVz +dLg +dVz +liI +liI +liI +liI +sLx +sLx +liI +liI +liI +dVz +dVz +dVz +wQq +dVz +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(33,1,1) = {" +sLx +sLx +sLx +sLx +sLx +liI +ira +ira +ira +ira +ira +liI +liI +miz +wTf +miz +miz +wTf +miz +liI +liI +sLx +sLx +sLx +sLx +sLx +liI +miz +miz +ira +ira +wTf +ira +ira +ira +ira +wTf +ira +ira +ira +ira +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +vXd +vXd +vXd +vXd +liI +liI +sLx +sLx +liI +vXd +vXd +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +vBS +dVz +dVz +vBS +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +dVz +dLg +dVz +dLg +dVz +dVz +dVz +dLg +dVz +dLg +liI +liI +liI +sLx +liI +dVz +dVz +dVz +dVz +dVz +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +dVz +dLg +dVz +dVz +dVz +dVz +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +dVz +dVz +dVz +dVz +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(34,1,1) = {" +sLx +sLx +sLx +sLx +sLx +liI +liI +wTh +ira +ira +ira +ira +mEN +ira +ira +ira +ira +ira +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +miz +ira +ira +ira +wTf +ira +ira +ira +ira +wTf +ira +ira +mEN +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +vXd +vXd +vXd +avY +vXd +liI +liI +sLx +sLx +sLx +liI +avY +vXd +vXd +avY +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +chJ +bvc +dYH +bvc +bvc +chJ +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dVz +dVz +dVz +dVz +dVz +liI +liI +liI +liI +liI +liI +sLx +sLx +sLx +liI +liI +dVz +vBS +dVz +dVz +dVz +dVz +dVz +dLg +dVz +dVz +dVz +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +vBS +dVz +dVz +dVz +vBS +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +dVz +dLg +dVz +dVz +dLg +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(35,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +liI +mEN +wTh +ira +ira +ira +ira +wTh +ira +ira +vbd +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +kzq +ira +ira +vbd +wTf +ira +ira +mEN +ira +wTf +vbd +wTh +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +vXd +vXd +dXG +vXd +liI +liI +liI +sLx +sLx +sLx +sLx +liI +liI +dXG +aeT +dXG +vXd +vXd +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dVz +dVz +dVz +dVz +dVz +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dVz +dVz +dLg +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +dLg +vBS +dVz +dVz +dLg +dVz +dVz +dVz +dVz +dVz +vBS +dVz +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dLg +vBS +dVz +dVz +dLg +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dVz +dVz +dVz +dVz +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(36,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +ira +ira +ira +ira +ira +ira +wTh +ira +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +miz +ira +ira +ira +wTf +ira +ira +ira +ira +wTf +ira +ira +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +vXd +sFw +vXd +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +vXd +vXd +vXd +dXG +vXd +avY +avY +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +dVz +dVz +dLg +dVz +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +rUP +rUP +rUP +rUP +rUP +rUP +aGY +rUP +rUP +rUP +rUP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dLg +dVz +dVz +dVz +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dVz +vBS +dVz +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +dVz +vBS +dVz +dVz +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(37,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +ira +ira +kzq +miz +ira +ira +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +miz +ira +ira +ira +wTf +ira +ira +ira +ira +wTf +ira +ira +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +vXd +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +avY +vXd +vXd +sFw +vXd +vXd +dXG +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dVz +dVz +dVz +dVz +dVz +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +rUP +ghx +qWv +qWv +qWv +uNd +qWv +nEb +qHg +cag +rUP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +prV +prV +prV +hzW +qyZ +prV +prV +pvv +prV +prV +prV +prV +prV +prV +prV +prV +sLx +sLx +sLx +liI +liI +dVz +dVz +dVz +vBS +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(38,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +ira +ira +miz +miz +ira +mEN +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +miz +ira +ira +ira +miz +wTf +wTf +wTf +wTf +miz +ira +ira +wTf +ira +liI +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +vXd +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +vXd +vXd +vXd +vXd +vXd +vXd +dXG +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dVz +dLg +dVz +dVz +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +rUP +kzn +tDr +tDr +tHK +tDr +tDr +tDr +tDr +xRT +rUP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dVz +dVz +dVz +liI +liI +sLx +sLx +dVz +dVz +vBS +dLg +dVz +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +prV +iXr +jIk +cvj +oqs +prV +tNX +quw +eGQ +eGQ +tMe +eGQ +eGQ +jIk +aTh +prV +sLx +sLx +sLx +liI +dLg +dVz +dVz +dVz +dLg +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(39,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +ira +ira +ira +ira +ira +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +kzq +ira +ira +mEN +ira +ira +ira +mEN +ira +ira +mEN +ira +wTf +ira +mEN +ira +ira +ira +mEN +liI +liI +sLx +sLx +sLx +sLx +liI +liI +liI +vXd +vXd +avY +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +vXd +avY +vXd +vXd +dXG +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +vBS +dVz +dVz +vBS +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +rUP +kzn +qPv +tDr +tDr +tDr +tDr +tDr +tHK +xRT +rUP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +dVz +dVz +vBS +dVz +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +prV +fLS +wUC +bTF +eQn +unB +quw +quw +eGQ +rSQ +rSQ +rSQ +eGQ +quw +oLJ +prV +sLx +sLx +liI +liI +dVz +dVz +dVz +dVz +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(40,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +mEN +ira +ngx +ira +ira +liI +liI +sLx +liI +liI +liI +liI +sLx +sLx +liI +liI +miz +miz +ira +ira +ngx +ira +ira +ira +ira +wTh +wTh +wTh +ira +wTf +ira +ira +miz +miz +ira +wTh +avY +vXd +liI +liI +liI +liI +liI +vXd +vXd +avY +vXd +dXG +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +vXd +avY +vXd +dXG +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +tXJ +tXJ +tXJ +tXJ +xPk +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +vBS +dVz +dVz +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +rUP +kzn +tDr +tDr +tDr +tDr +qPv +tDr +tDr +xRT +rUP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +dVz +dVz +dVz +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +prV +smp +dqQ +xMP +jIk +unB +qai +fNy +jIL +jit +eGQ +eGQ +eGQ +xea +fNy +prV +liI +liI +liI +dVz +dVz +dVz +dVz +vBS +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(41,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +mEN +ira +ira +ira +mEN +liI +liI +liI +mEN +ira +liI +liI +liI +liI +kwE +ira +ira +ira +ira +wTh +ira +ira +ira +wTh +liI +liI +liI +ira +wTf +ira +ira +miz +miz +ira +ira +vXd +vXd +vXd +vXd +vXd +vXd +vXd +vXd +avY +vXd +dXG +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +vXd +vXd +aeT +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +tXJ +tXJ +vXd +avY +vXd +tXJ +tXJ +tXJ +tXJ +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dVz +dLg +dVz +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +rUP +kzn +tDr +tDr +jXI +kts +kts +tDr +tDr +xRT +rUP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +dVz +dLg +dVz +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +prV +qqa +rzU +dYk +wUC +unB +fNy +quw +eGQ +rSQ +rSQ +rSQ +eGQ +quw +quw +prV +dVz +dVz +dVz +dVz +dVz +dVz +vBS +dVz +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(42,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +miz +miz +ira +ira +ira +ira +ira +ira +ira +ira +ira +mEN +ira +ira +ira +ira +ira +ira +mEN +ira +liI +liI +liI +liI +sLx +liI +liI +liI +ira +ira +ira +ira +ira +wTh +vXd +vXd +vXd +vXd +vXd +avY +dXG +vXd +vXd +vXd +dXG +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +agG +arR +arR +mCz +liI +sLx +sLx +liI +liI +liI +liI +vXd +vXd +vXd +dvi +vXd +vXd +vXd +vXd +vXd +vXd +mOt +tXJ +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dVz +dVz +dVz +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +rUP +kzn +tDr +mLZ +rUP +rUP +rUP +kzn +tDr +inN +rUP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +dVz +dVz +dVz +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +prV +fnc +cKo +cAG +fNy +unB +quw +quw +tMe +jit +eGQ +eGQ +eGQ +iFn +qai +bEv +dVz +vBS +dLg +dVz +dVz +eZo +dVz +dVz +dLg +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(43,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ira +ira +miz +miz +wTh +ira +miz +miz +ira +ira +ira +miz +miz +ira +ira +ira +ira +mEN +ira +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +mEN +ira +ira +aTg +avY +vXd +avY +vXd +vXd +dXG +vXd +vXd +vXd +vXd +avY +vXd +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +avY +vXd +vXd +vXd +liI +liI +liI +liI +vXd +vXd +vXd +dXG +vXd +avY +dvi +dXG +vXd +vXd +vXd +vXd +vXd +vXd +tXJ +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dVz +dVz +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +rUP +wQs +qPv +xRT +rUP +rUP +rUP +kzn +tDr +rxH +rUP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +dVz +dVz +dVz +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +prV +iql +oVv +fNy +bJM +prV +isW +lRR +jit +rSQ +rSQ +rSQ +eGQ +fNy +quw +qyZ +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(44,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ira +ira +ira +wTh +ira +ira +miz +miz +ira +ira +wTh +miz +miz +ira +ira +wTh +ira +ira +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +ira +ira +liI +liI +liI +liI +liI +vXd +sFw +liI +vXd +vXd +vXd +vXd +vXd +vXd +vXd +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +vXd +vXd +dXG +vXd +vXd +vXd +vXd +arR +vXd +vXd +sFw +vXd +aeT +vXd +dvi +vXd +dXG +avY +vXd +vXd +avY +dXG +tXJ +tXJ +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +vBS +eZo +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +rUP +kzn +tDr +xRT +rUP +rUP +rUP +kzn +tDr +xRT +rUP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +fir +dmP +dmP +hIy +kIn +kIn +iuq +nmO +dVz +dVz +dVz +sLx +prV +prV +prV +prV +prV +prV +prV +prV +prV +prV +prV +prV +prV +unB +xpm +xxK +unB +prV +isW +lRR +eGQ +jit +eGQ +eGQ +tMe +gCD +fNy +qyZ +dVz +vBS +dVz +dVz +dVz +dVz +dVz +vBS +dVz +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(45,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +mEN +ira +ira +ira +mEN +ira +ira +ira +mEN +ira +ira +ira +ira +ira +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +ira +ira +liI +sLx +sLx +sLx +liI +liI +liI +liI +vXd +vXd +vXd +dXG +vXd +dXG +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +vXd +vXd +vXd +dXG +vXd +vXd +vXd +arR +vXd +dXG +vXd +vXd +vXd +vXd +dvi +vXd +vXd +vXd +vXd +vXd +aeT +vXd +vXd +tXJ +tXJ +sLx +sLx +sLx +sLx +sLx +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +rit +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +rUP +kzn +tDr +tDr +vIF +vIF +vIF +tDr +qPv +xRT +rUP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +dmP +dmP +dmP +ovt +kIn +kIn +kIn +nmO +dmP +dLg +dVz +sLx +prV +iAN +lWo +lWo +iJO +prV +bPG +rky +cAr +sKd +csB +sQc +bKg +xUa +abR +uON +sQU +prV +isW +lRR +eGQ +rSQ +rSQ +rSQ +eGQ +quw +fNy +prV +liI +liI +liI +liI +liI +dVz +dVz +dVz +vBS +dVz +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(46,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +ira +ira +ira +hKb +ira +ira +ira +ira +ira +mEN +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +mEN +ira +ira +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +vXd +vXd +avY +vXd +vXd +vXd +avY +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +vXd +vXd +vXd +avY +vXd +vXd +avY +arR +vXd +liI +liI +avY +vXd +liI +hoO +liI +liI +liI +vXd +vXd +vXd +vXd +vXd +vXd +tXJ +sLx +sLx +sLx +sLx +sLx +eFJ +deo +fOb +eFJ +deo +fOb +eFJ +deo +fOb +eFJ +deo +fOb +eFJ +deo +fOb +eFJ +deo +fOb +eFJ +deo +fOb +rUP +kzn +tDr +qPv +tDr +tDr +kPp +tDr +tDr +xRT +rUP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +dmP +dmP +nmg +ovt +kIn +kIn +sEf +nmO +dmP +nmg +dVz +sLx +prV +ckp +quw +xea +quw +cDy +xUa +uhN +jHX +nQS +hqW +uhN +hqW +ptc +efN +cYf +tMF +dir +mTG +mTG +ckM +jit +eGQ +eGQ +eGQ +rtG +ivm +prV +sLx +sLx +sLx +sLx +liI +liI +dLg +dVz +dVz +dVz +dLg +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(47,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +ira +ira +ira +ira +ira +ira +ira +ngx +ira +ira +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +ira +ira +ira +ira +avY +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +vXd +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +vXd +vXd +dXG +vXd +liI +liI +liI +liI +liI +liI +liI +liI +liI +hoO +hoO +liI +liI +liI +vXd +vXd +vXd +vXd +vXd +tXJ +sLx +sLx +sLx +sLx +sLx +eFJ +nvg +mHO +eFJ +eff +kns +eFJ +cta +mHO +eFJ +eff +kns +eFJ +cta +kns +eFJ +cta +kns +eFJ +cta +kns +rUP +kzn +tHK +tDr +tDr +haB +tDr +haB +tDr +xRT +rUP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +dmP +dmP +dmP +ovt +kIn +kIn +kIn +nmO +dmP +dmP +sLx +sLx +prV +lRs +uQA +ikJ +sBo +prV +xUa +hqW +iLW +sEO +xVp +xUa +mkw +xIc +tAH +scy +xUa +quw +gQM +fNy +eGQ +rSQ +rSQ +rSQ +eGQ +qai +ivm +prV +sLx +sLx +sLx +sLx +sLx +liI +liI +dVz +dVz +dVz +dVz +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(48,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +ira +ira +ira +ira +ira +miz +miz +ira +ira +ira +ira +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +wTh +ira +ira +ira +ira +wTh +vXd +vXd +vXd +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +avY +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +vXd +dXG +avY +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +liI +liI +liI +vXd +avY +dXG +vXd +avY +tXJ +sLx +sLx +sLx +sLx +sLx +eFJ +eOu +vIA +eFJ +laj +eOu +eFJ +vIA +eOu +eFJ +laj +eOu +eFJ +vIA +eOu +eFJ +vIA +eOu +eFJ +vIA +ylp +rUP +kzn +tDr +tDr +haB +tDr +tDr +tDr +tHK +xRT +rUP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +dmP +dmP +dmP +hIy +kIn +kIn +iuq +nmO +dmP +dmP +fir +sLx +prV +prV +prV +prV +prV +prV +hcH +bER +bLp +pYC +vFr +ekV +mkw +tZF +tAH +xUa +xUa +prV +tNX +rSL +ibh +eGQ +tMe +eGQ +eGQ +quw +gsw +prV +sLx +sLx +sLx +sLx +sLx +sLx +liI +dVz +dVz +dVz +dVz +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(49,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +ira +mEN +ira +ira +ira +mEN +miz +miz +ira +mEN +ira +ira +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +mEN +ira +mEN +ira +ira +ira +ira +dXG +vXd +vXd +dXG +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +dXG +vXd +avY +dXG +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dXG +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +uEv +hMy +hMy +hMy +eFB +hMy +eFB +eFB +wVk +wVk +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +nfb +eFJ +nfb +qTg +eFJ +nfb +qTg +eFJ +nfb +qTg +eFJ +nfb +qTg +eFJ +nfb +qTg +eFJ +uwQ +eFJ +rUP +fDS +tDr +tDr +qPv +tDr +kts +tia +tia +tWg +rUP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +dmP +dmP +dmP +ovt +kIn +kIn +kIn +nmO +dmP +dmP +dmP +sLx +prV +dGb +hym +irL +uxW +prV +bAe +bER +unS +tAH +vFr +sQU +hcH +uON +abR +xUa +hcH +prV +prV +prV +prV +prV +prV +prV +prV +prV +prV +prV +sLx +sLx +sLx +sLx +sLx +sLx +liI +dVz +dVz +dVz +dVz +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(50,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +wTh +ira +ira +wTh +ira +ira +ira +ira +ira +ira +wTh +ira +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +ira +ira +ira +miz +miz +liI +liI +vXd +avY +vXd +vXd +vXd +liI +liI +sLx +sLx +sLx +sLx +sLx +liI +vXd +vXd +vXd +vXd +vXd +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +vXd +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +xxz +drs +jFB +jFB +gsG +jFB +cyI +wkJ +gQC +jBm +cAj +deo +eFJ +deo +cAj +dEU +gQC +irc +xNe +dpR +iqb +rVV +xyf +xxk +ovu +xyf +xyf +xyf +xyf +cYw +jQS +dpR +xyf +cWv +agf +rUP +rUP +rUP +rUP +del +mBJ +rUP +rUP +rUP +rUP +rUP +rUP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +dmP +dmP +dmP +ovt +kIn +kIn +kIn +nmO +dmP +dmP +dmP +sLx +prV +xCs +vTn +fNy +fjP +prV +xUa +hqW +vQc +rHS +xrB +iLW +iLW +xVp +bpw +xUa +wqf +prV +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dLg +dVz +dVz +dLg +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(51,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +ira +ira +ira +ira +liI +liI +ira +ira +ira +ira +ira +ira +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +ira +ira +miz +miz +liI +liI +liI +liI +vXd +vXd +vXd +avY +vXd +liI +liI +liI +sLx +sLx +sLx +liI +avY +vXd +vXd +vXd +vXd +avY +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +vXd +vXd +avY +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +xxz +dIV +qyw +sfg +qyw +sfg +qyw +cOM +qTg +oJt +fNQ +gLX +eFJ +rmP +fNQ +isn +qTg +dCv +bdJ +wRe +isq +leW +eUx +baV +cUM +oMZ +isq +isq +oMZ +isq +isq +oMZ +isq +kGQ +jnL +ylD +uSS +vUG +txz +pUN +pUN +eHS +rUP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +dmP +dmP +dmP +ovt +kIn +kIn +kIn +nmO +dmP +dmP +dmP +nmg +prV +vIy +kiJ +quw +quw +jzf +xUa +uhN +xrB +eSo +mkw +dhQ +bLp +vFr +tBs +bKg +rCZ +prV +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dVz +vBS +dVz +dVz +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(52,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +ira +ira +ira +liI +liI +liI +liI +ira +ira +ira +ira +ira +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +mEN +ira +ira +kzq +liI +liI +sLx +sLx +liI +vXd +vXd +aeT +vXd +vXd +vXd +avY +liI +liI +sLx +sLx +liI +liI +vXd +vXd +vXd +vXd +vXd +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +vXd +vXd +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +xxz +xxz +xxz +xxz +xxz +xxz +aEk +jUJ +iyH +iyH +iyH +qyw +mFs +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +lHo +eid +aoJ +dDL +wrV +qJK +wrV +fHX +qlA +lrh +jxn +bxq +bxq +bxq +bxq +qlA +bql +ree +qlt +qlt +qlt +tPY +uSS +fmH +xZz +rUP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +dmP +fir +dmP +dmP +hIy +kIn +kIn +iuq +nmO +dmP +dmP +fir +dmP +unB +kTg +quw +acI +fNy +quw +xUa +gWk +png +wlv +ssM +cLH +sgp +hEL +pcf +png +haV +prV +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dVz +dVz +dVz +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(53,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +mEN +ira +liI +liI +sLx +sLx +liI +liI +uAB +wTf +wTf +uAB +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +ira +ira +ira +miz +liI +sLx +sLx +sLx +liI +liI +avY +vXd +vXd +avY +vXd +vXd +vXd +liI +liI +sLx +sLx +liI +liI +vXd +dXG +dXG +vXd +avY +liI +sLx +sLx +sLx +sLx +sLx +liI +liI +vXd +vXd +aeT +vXd +liI +liI +sLx +sLx +sLx +sLx +sLx +xxz +vAB +erg +erg +ded +xxz +xuN +jUJ +vmT +qyw +qyw +npj +sWx +gQC +jBm +cAj +deo +eFJ +deo +cAj +dEU +gQC +dCv +jmi +nJT +nsb +nsb +nsb +nsb +nsb +dCv +igY +eFJ +eFJ +eFJ +eFJ +eFJ +lHo +xQp +igY +rUP +rUP +fmH +fmH +fmH +fmH +ncK +rUP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +xNg +iTM +oOZ +pSy +qFR +ugI +dTW +xNg +dmP +dmP +dmP +dmP +ovt +kIn +kIn +kIn +nmO +dmP +dmP +dmP +dmP +unB +vMi +jIk +kiJ +oKE +prV +iuK +uhN +sQU +tBs +xUa +vQc +vQc +xUa +vip +vbf +haV +prV +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +dVz +dVz +dVz +dVz +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(54,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +ira +ngx +ira +liI +sLx +sLx +sLx +sLx +liI +ira +ira +ira +ira +ira +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +wTh +ira +ira +ira +wTh +liI +liI +sLx +sLx +sLx +sLx +liI +liI +dXG +vXd +vXd +vXd +avY +dXG +vXd +liI +liI +liI +liI +liI +liI +avY +vXd +vXd +vXd +liI +sLx +sLx +sLx +sLx +liI +liI +vXd +vXd +vXd +avY +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +xxz +goR +fbw +dGz +teT +xxz +nBL +qyw +iyH +iyH +iyH +kZm +cOM +qTg +oJt +fNQ +tjO +yjU +rmP +fNQ +isn +qTg +lHo +eid +igY +nsb +frw +gIL +pEb +nsb +lHo +igY +eFJ +deo +mUP +mVD +gQC +lHo +dxa +hNa +rUP +rUP +aDY +xZz +ncK +ncK +ncK +rUP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +xNg +lxu +riG +quG +hVR +qRX +wnh +xNg +dmP +dmP +dmP +dmP +ovt +ijy +ijy +ijy +nmO +dmP +dmP +dmP +dmP +unB +txn +oTz +oTz +cwy +prV +hRR +ixm +pbg +bdd +rlF +xUa +hcH +uON +huf +mFR +mFR +prV +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +dVz +dLg +dVz +dVz +dLg +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(55,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +wTf +wTf +wTf +wTf +liI +sLx +sLx +sLx +sLx +liI +ira +ira +ngx +ira +ira +ira +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +ira +ngx +wTh +ira +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +avY +vXd +vXd +vXd +vXd +vXd +avY +vXd +vXd +liI +liI +liI +liI +vXd +vXd +vXd +liI +sLx +sLx +sLx +liI +liI +vXd +vXd +vXd +vXd +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +xxz +goR +fXJ +fXJ +fXJ +cuy +sfg +qyw +qyw +qyw +qyw +xrD +dDT +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +lHo +vXm +igY +nsb +pgd +xkW +frw +nsb +pVk +foR +eFJ +rmP +jVj +isn +qTg +lHo +sRI +nJT +rUP +rUP +rUP +rUP +rUP +rUP +rUP +rUP +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +iLU +ikS +puQ +dmP +fir +dmP +dmP +cGY +oYf +oYf +oYf +cGY +dmP +dmP +dmP +dmP +prV +prV +prV +prV +prV +prV +prV +mTG +lrN +prV +prV +prV +prV +prV +prV +prV +prV +prV +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +dVz +dVz +dVz +dVz +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(56,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +ira +ira +ira +liI +sLx +sLx +sLx +sLx +liI +ira +ira +ira +miz +miz +ira +ira +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +mEN +ira +ira +ira +mEN +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +vXd +vXd +vXd +vXd +vXd +vXd +vXd +avY +vXd +liI +liI +vXd +vXd +avY +liI +sLx +liI +liI +liI +vXd +avY +vXd +mCz +agG +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +xxz +goR +pfK +pfK +fXJ +qyw +qyw +qyw +iyH +iyH +iyH +xrD +esg +gQC +pMc +mUP +deo +eFJ +deo +mUP +mVD +gQC +lHo +jmi +hNa +nsb +rIG +rIG +rIG +nsb +hpj +tCl +eFJ +eFJ +eFJ +eFJ +eFJ +lHo +xQp +hNa +qFR +buk +oiP +iTM +xNg +iTM +oOZ +pSy +qFR +ugI +pdu +jqs +qFR +buk +oOZ +iTM +xNg +iTM +gBf +ehY +qFR +nWh +ikS +puQ +dmP +dmP +dmP +nmg +oYf +cvh +tZK +urO +cGY +dmP +dmP +fir +nmg +dmP +dmP +fir +dmP +prV +cTL +mIc +mTG +rAO +txN +azF +qfK +prV +dmP +dmP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +bvc +bvc +bvc +bvc +bvc +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(57,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +ira +ira +mEN +opr +liI +sLx +sLx +sLx +sLx +liI +liI +vbd +ira +miz +miz +vbd +ira +liI +liI +sLx +sLx +sLx +sLx +sLx +liI +ira +ira +ira +miz +miz +ira +ira +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +avY +vXd +vXd +vXd +vXd +vXd +vXd +dXG +vXd +vXd +dXG +avY +vXd +liI +liI +vXd +vXd +vXd +vXd +vXd +vXd +agG +agG +vXd +dXG +liI +sLx +sLx +sLx +sLx +sLx +sLx +xxz +ceo +fXJ +fXJ +tvu +qyw +jSt +qyw +vmT +qyw +sfg +krB +vln +qTg +oJt +sec +tjO +eFJ +rmP +fNQ +isn +qTg +lHo +acX +aQq +aTA +ciq +lry +pEb +nsb +mbK +rtQ +eFJ +wtx +rHQ +dEU +gQC +lHo +dxa +igY +hVR +wbt +fkQ +sTw +xNg +lxu +riG +quG +hVR +iLU +lAz +ikS +hVR +wbt +riG +sTw +xNg +lxu +jFh +quG +hVR +iLU +mqi +xNg +dmP +dmP +dmP +dmP +oYf +qlF +urO +dGk +cGY +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +prV +iwG +kiJ +mTG +xpm +fNy +quw +mxu +prV +fir +dmP +dmP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +dVz +dVz +dVz +dVz +dVz +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(58,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +wTh +ira +opr +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +ira +ira +ira +ira +ira +ira +liI +liI +liI +sLx +sLx +liI +liI +ira +ira +ira +miz +miz +ira +ira +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +dXG +vXd +avY +aeT +vXd +dXG +vXd +vXd +agG +agG +dXG +aeT +vXd +vXd +vXd +dXG +avY +vXd +vXd +vXd +vXd +vXd +sFw +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +xxz +goR +fbw +oso +psT +gzt +jRr +qyw +iyH +iyH +iyH +xrD +cOM +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +lHo +mRS +wVN +xEi +sui +xjF +pgd +nsb +iRV +bRU +eFJ +rmP +fNQ +isn +qTg +lHo +lja +igY +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +iLU +lAz +efe +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +snO +ikS +xNg +dmP +fir +dmP +dmP +oYf +kRH +gqp +vQD +rNh +dmP +dmP +dmP +nmg +dmP +dmP +dmP +dmP +prV +jdu +fNy +mTG +imU +xea +fNy +fjP +prV +dmP +nmg +dmP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +dLg +dVz +dVz +dLg +dVz +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(59,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +ira +ira +opr +liI +sLx +sLx +sLx +sLx +sLx +liI +liI +ira +ira +ira +ira +ira +ira +mEN +ira +liI +liI +liI +liI +ira +ira +ira +ira +ira +ira +ira +ira +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +liI +vXd +vXd +vXd +vXd +vXd +lRi +vXd +vXd +vXd +agG +agG +vXd +vXd +vXd +vXd +vXd +vXd +vXd +vXd +liI +liI +liI +vXd +vXd +vXd +liI +liI +sLx +sLx +sLx +sLx +sLx +xxz +ceo +fXJ +fXJ +cHx +tvG +edO +qdG +hmI +hmI +hmI +fKV +vEP +aSd +cYw +sBu +xyf +kOs +xyf +cYw +xyf +sBu +pMN +pqS +igY +nsb +kZx +afL +rIG +nsb +dCv +xxV +eFJ +eFJ +eFJ +eFJ +eFJ +xaD +azO +bUR +cxj +tMu +cxj +cxj +lcB +sIr +cxj +fZC +cxj +gxH +szD +lsI +qFR +buk +oOZ +iTM +xNg +iTM +oOZ +pSy +qFR +nWh +ikS +xNg +dmP +dmP +dmP +dmP +oYf +ppC +vBd +dzZ +dzZ +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +prV +cpo +lLq +wzz +ekH +fNy +hMS +reU +prV +dmP +dmP +dmP +dmP +dmP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +dVz +vBS +dVz +dVz +vBS +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(60,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +iys +iys +iys +iys +hoO +hoO +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +ira +ira +ira +ira +ira +ira +ira +ira +wTf +ira +ira +ira +ira +mEN +ira +ira +ira +mEN +liI +sLx +sLx +sLx +sLx +sLx +liI +liI +vXd +vXd +vXd +vXd +vXd +agG +agG +vXd +vXd +vXd +avY +vXd +vXd +avY +vXd +vXd +vXd +vXd +vXd +avY +liI +liI +liI +liI +sLx +liI +vXd +vXd +vXd +vXd +liI +liI +liI +liI +sLx +sLx +xxz +goR +xMY +pfK +iDs +dAP +aEk +hcT +thZ +haT +dla +lfm +okR +jKB +ggV +poj +qPY +jKB +poj +ggV +jKB +poj +xKY +hiC +igY +nsb +pPh +xjF +pEb +nsb +lHo +igY +eFJ +wtx +skY +dEU +gQC +lHo +xQp +aoJ +uCq +dmi +uCq +nYA +nYA +mCy +uCq +nYA +nYA +bpR +mjU +ikS +hVR +wbt +riG +sTw +ylX +lxu +riG +quG +hVR +iLU +ikS +xNg +dmP +dmP +dmP +dmP +oYf +urO +sDt +ijP +cGY +dmP +dmP +fir +dmP +dmP +dmP +fir +dmP +prV +prV +prV +prV +wOp +dDz +prV +prV +prV +dmP +fir +dmP +dmP +dmP +fir +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +dVz +dVz +dVz +dVz +dVz +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(61,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +ira +ira +mEN +ira +ira +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +vbd +ira +ira +ira +mEN +ira +ira +wTf +mEN +ira +ira +ira +ira +ira +ira +ira +liI +liI +sLx +sLx +sLx +sLx +liI +liI +vXd +vXd +vXd +vXd +avY +vXd +agG +agG +vXd +vXd +vXd +vXd +vXd +vXd +liI +liI +liI +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +liI +vXd +aeT +vXd +avY +vXd +vXd +vXd +liI +liI +sLx +xxz +goR +mdX +iED +uEH +xxz +cwH +rzf +vmT +qyw +eYa +ehh +mWh +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +pfb +lHo +xQp +hNa +nsb +vDk +iXE +pgd +nsb +lHo +xUU +eFJ +rmP +dFe +isn +qTg +lHo +sRI +hNa +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +iLU +oQw +qIH +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +wOl +wnh +xNg +dmP +fir +dmP +dmP +oYf +tqW +kKe +gqp +cGY +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +fir +vXI +ooV +kIn +oTh +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +fir +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +dVz +dVz +dVz +dVz +dVz +dLg +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(62,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +ira +ira +ira +kji +ira +ira +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +wTh +ira +ngx +ira +ira +ira +wTf +wTh +ira +ira +ira +wTh +ira +ira +wTh +liI +sLx +sLx +sLx +sLx +liI +liI +vXd +vXd +avY +dXG +vXd +vXd +vXd +dXG +vXd +avY +vXd +vXd +vXd +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +vXd +avY +vXd +vXd +vXd +vXd +avY +vXd +liI +sLx +xxz +goR +enR +xMY +pnF +cuy +qyw +rzf +jXW +vBE +vUH +ehh +esg +gQC +jBm +cAj +deo +eFJ +deo +mUP +tMV +gQC +dCv +azT +nJT +nsb +nsb +nsb +gGH +nsb +dCv +igY +eFJ +eFJ +eFJ +eFJ +eFJ +lHo +dxa +igY +qFR +buk +oOZ +iTM +iWf +iTM +oOZ +pSy +qFR +nWh +obN +kmU +tMu +nnk +cxj +cxj +lcB +vDX +mbN +ckP +ckP +aKn +ikS +xNg +dmP +dmP +dmP +dmP +cGY +oYf +oYf +oYf +cGY +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +vXI +vXI +ooV +kIn +vXI +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +dVz +dVz +dVz +pOP +dVz +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(63,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +ira +ira +ira +ira +ira +ira +ira +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +ira +ira +ira +ira +ira +wTf +ira +ira +ira +mEN +ira +ira +wTh +mEN +liI +liI +liI +liI +liI +liI +avY +vXd +vXd +dXG +vXd +vXd +vXd +vXd +vXd +vXd +liI +liI +liI +vXd +vXd +vXd +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +dXG +vXd +vXd +vXd +vXd +dXG +vXd +liI +sLx +xxz +ceo +fXJ +fXJ +tvu +qyw +sfg +rzf +eYa +qyw +qyw +ehh +cOM +qTg +oJt +fNQ +tjO +eFJ +rmP +sec +isn +qTg +lHo +xQp +hNa +xyf +xyf +cYw +muI +xyf +pMN +tVX +eEa +xxk +hrd +cYw +xyf +pMN +xQp +igY +hVR +wbt +riG +sTw +xNg +lxu +riG +quG +hVR +iLU +tTO +bIA +ord +uAY +fmP +nYA +nYA +mCy +nYA +fmP +nYA +rgW +ikS +xNg +dmP +dmP +dmP +dmP +ovt +xHc +xHc +xHc +nmO +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +vXI +kIn +ooV +vXI +vXI +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +sLx +sLx +sLx +sLx +sLx +sLx +hoO +dVz +vBS +dLg +vBS +dVz +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(64,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +ira +ira +ngx +ira +ira +ira +mEN +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +wTf +wTf +wTf +wTf +nHP +nHP +nHP +nHP +nHP +ira +ira +ngx +ira +ira +ira +ira +ira +liI +liI +ira +ira +avY +vXd +vXd +aeT +vXd +vXd +avY +vXd +liI +liI +liI +sLx +liI +vXd +vXd +avY +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +vXd +vXd +vXd +dXG +vXd +sLx +xxz +goR +pfK +lUG +fXJ +qyw +qyw +ihy +wOJ +qyw +qyw +mqr +mFs +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +omk +gyf +kmp +rkp +rkp +lqf +icd +iVz +lvU +foQ +rkp +qlS +fuY +wNb +jKB +xKY +hPH +lfK +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +cZE +mjU +lsI +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +iLU +ikS +xNg +dmP +fir +dmP +fLA +ovt +kIn +iuq +kIn +nmO +fir +dmP +fir +nmg +dmP +dmP +fir +dmP +dmP +vXI +oTh +kIn +ooV +sEf +oTh +oLR +dmP +dmP +fLA +dmP +dmP +dmP +fir +dmP +fir +nmg +dmP +sLx +sLx +sLx +sLx +sLx +hoO +hoO +dVz +dVz +dVz +dVz +dVz +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(65,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +mEN +ira +ira +mEN +wTh +ira +ira +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +mEN +ira +ira +mEN +nHP +isl +oKe +foA +nHP +ira +ira +mEN +ira +ira +ira +ira +ira +ira +mEN +ira +ira +vXd +vXd +vXd +avY +vXd +vXd +vXd +liI +liI +sLx +sLx +liI +liI +vXd +aeT +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +avY +vXd +vXd +vXd +sLx +xxz +goR +fXJ +fXJ +tvu +qyw +vmT +rzf +oRi +qyw +qyw +kQU +sWx +gQC +jBm +cAj +deo +eFJ +deo +cAj +dEU +gQC +dCv +azT +igY +eFJ +eFJ +eFJ +eFJ +eFJ +lHo +rjR +eFJ +eFJ +eFJ +eFJ +eFJ +lHo +rwg +hNa +qFR +gIY +oOZ +iTM +xNg +iTM +gUS +ehY +qFR +nWh +sXE +ikS +qFR +buk +oOZ +iTM +xNg +iTM +oOZ +pSy +qFR +nWh +efe +xNg +dmP +dmP +dmP +nmg +ovt +kIn +kIn +kIn +nmO +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +vXI +vXI +fbs +gMk +kIn +vXI +vXI +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +fir +sLx +sLx +hoO +hoO +chJ +dVz +dLg +dVz +dVz +dVz +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(66,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +ira +ira +wTh +ira +ira +wTh +ira +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ira +ira +ira +ira +nHP +jxU +rBE +foA +nHP +ira +ira +ira +ira +ira +miz +miz +ira +wTh +ira +ira +ira +vXd +vXd +vXd +dXG +vXd +liI +liI +liI +sLx +sLx +sLx +liI +vXd +dXG +vXd +vXd +vXd +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +vXd +aeT +vXd +sLx +xxz +goR +ldf +lUG +teT +xxz +uak +hcT +mPP +vBE +dla +ehh +esg +qTg +oJt +fNQ +tjO +rit +rmP +fNQ +isn +qTg +lHo +tNK +igY +gQC +lzc +cAj +deo +eFJ +lHo +bEI +eFJ +deo +eff +dEU +gQC +dCv +tiw +igY +hVR +wbt +fkQ +sTw +xNg +pDR +riG +quG +hVR +gsr +tTO +ikS +hVR +wbt +riG +sTw +iWf +lxu +riG +quG +hVR +twH +ikS +xNg +dmP +dmP +dmP +dmP +ovt +kIn +kIn +kIn +nmO +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +vXI +vXI +vXI +ooV +kIn +kIn +vXI +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +sLx +hoO +dVz +dVz +dVz +dVz +dVz +dVz +dVz +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(67,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +kji +ira +ira +ira +kji +ira +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +wTh +ira +ira +ira +nHP +eEQ +oKe +oKe +nHP +ira +ira +ira +ira +mEN +miz +miz +ira +mEN +ira +ira +ira +avY +vXd +vXd +avY +liI +liI +sLx +sLx +sLx +sLx +liI +liI +vXd +vXd +vXd +vXd +avY +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +vXd +vXd +vXd +sLx +xxz +ebp +dZR +dZR +dPT +xxz +akQ +rzf +qyw +qyw +wXG +ehh +cOM +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +eFJ +lHo +rjN +igY +qTg +oJt +fNQ +tjO +rit +lHo +lHy +yjU +rmP +dFe +isn +qTg +lHo +ltH +nJT +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +saQ +neE +ikS +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +iLU +lsI +xNg +dmP +fir +dmP +dmP +ovt +kIn +kIn +kIn +nmO +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +vXI +vXI +ooV +kIn +kIn +vXI +vXI +dmP +dmP +dmP +dmP +dmP +dmP +dmP +nmg +dmP +dmP +vXI +vXI +bvc +dVz +eZo +dVz +dVz +vBS +dVz +dLg +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(68,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +fvb +fvb +fvb +dOu +oFt +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +fvb +fvb +fvb +nHP +nHP +tsa +nHP +nHP +nHP +nHP +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +vXd +vXd +liI +liI +liI +sLx +sLx +sLx +sLx +liI +liI +uSn +uSn +miv +miv +uSn +liI +liI +liI +liI +liI +liI +sLx +sLx +liI +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +liI +uSn +miv +uSn +sLx +xxz +xxz +xxz +xxz +xxz +xxz +akQ +uDW +thZ +haT +vUH +avg +esg +gQC +jBm +cAj +deo +eFJ +deo +cAj +dEU +gQC +lHo +azT +igY +eFJ +eFJ +eFJ +eFJ +eFJ +lHo +rjR +eFJ +eFJ +eFJ +eFJ +eFJ +dCv +tiw +hNa +qFR +buk +oiP +iTM +xNg +iTM +oOZ +pSy +qFR +nWh +wRR +ikS +qFR +mAn +gBf +iTM +xNg +iTM +oOZ +pSy +qFR +nWh +qIH +xNg +dmP +dmP +dmP +dmP +ovt +kIn +iuq +kIn +nmO +dmP +dmP +fir +dmP +dmP +dmP +fir +dmP +dmP +dmP +fir +dmP +vXI +fbs +peK +gMk +kIn +vXI +fLA +dmP +dmP +dmP +fir +dmP +dmP +fLA +dmP +dmP +dmP +vXI +dYH +dVz +dVz +dVz +dVz +dVz +dVz +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(69,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +oFt +fvb +fvb +fvb +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +oFt +fvb +fvb +oFt +nHP +wXR +chB +chB +oKe +rBE +nHP +fvb +fvb +fvb +fvb +fvb +fvb +hch +fvb +fvb +fvb +vXd +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +miv +uSn +uSn +uSn +uSn +uSn +liI +liI +liI +wRt +wRt +liI +liI +liI +liI +wRt +wRt +liI +liI +liI +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +sLx +sLx +sLx +sLx +sLx +sLx +xxz +vji +tsx +pqR +vaT +vaT +uOO +sWx +qTg +oJt +fNQ +tjO +eFJ +rmP +fNQ +isn +qTg +dCv +xQp +hNa +gQC +jBm +cAj +deo +eFJ +lHo +bEI +eFJ +deo +cAj +dEU +gQC +dCv +rad +igY +hVR +wbt +fkQ +sTw +iWf +lxu +riG +quG +hVR +iLU +mjU +lsI +hVR +wbt +jFh +sTw +xNg +lxu +riG +quG +hVR +qRX +wnh +puQ +dmP +dmP +dmP +dmP +ovt +kIn +kIn +kIn +nmO +dmP +dmP +dmP +dmP +dmP +aok +aok +aok +aok +aok +aok +aok +aok +aok +cdG +nFc +cdG +aok +aok +aok +aok +aok +aok +aok +aok +aok +nmg +fir +dmP +vXI +bvc +dVz +dVz +dVz +dVz +hoO +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(70,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +fvb +fvb +fvb +oFt +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +fvb +fvb +fvb +fvb +oKe +chB +isl +chB +oKe +chB +nHP +fvb +fvb +fvb +fvb +eHi +eHi +fvb +fvb +fvb +fvb +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +uSn +uSn +uSn +uSn +uSn +liI +uSn +uSn +uSn +miv +uSn +uSn +uSn +uSn +uSn +miv +uSn +uSn +liI +sLx +sLx +sLx +sLx +liI +uSn +miv +uSn +sLx +sLx +sLx +sLx +sLx +sLx +xxz +vlK +taN +sfg +qyw +qkc +oEN +obh +eZX +eZX +eZX +eZX +eZX +eZX +eZX +eZX +eZX +lHo +xQp +igY +qTg +oJt +dFe +tjO +eFJ +omk +tTw +eFJ +rmP +fNQ +sFl +qTg +lHo +pqS +igY +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +uAI +mjU +efe +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +iLU +ikS +puQ +dmP +fir +dmP +dmP +ovt +kIn +kIn +kIn +nmO +dmP +dmP +dmP +dmP +dmP +aok +sDb +aok +pNT +aok +jDi +aok +sDb +aok +slu +gnq +fjM +aok +sDb +aok +rEo +aok +sDb +aok +sDb +aok +dmP +dmP +vXI +vXI +bvc +dVz +dLg +hoO +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(71,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +lcl +fvb +fvb +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +fvb +fvb +fvb +fvb +vfl +chB +chB +oyq +wXR +chB +cwT +fvb +fvb +oFt +fvb +eHi +eHi +oFt +fvb +fvb +oFt +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +uSn +uSn +uSn +uSn +miv +uSn +uSn +uSn +uSn +qIM +uSn +wRt +wRt +riX +uSn +uSn +qIM +uSn +uSn +uSn +sLx +sLx +sLx +sLx +liI +uSn +qIM +uSn +uSn +liI +sLx +sLx +sLx +sLx +xxz +xxz +xxz +qyw +tcw +xxz +xxz +xxz +eZX +wNL +ald +fXz +eXF +fXz +rQj +dQO +eZX +lHo +pqS +nJT +eFJ +eFJ +eFJ +eFJ +eFJ +dCv +rjR +eFJ +eFJ +eFJ +eFJ +eFJ +lHo +xQp +igY +qFR +buk +oOZ +iTM +xNg +iTM +oOZ +pSy +qFR +nWh +wRR +ikS +xNg +xnH +vBI +qmm +xNg +iTM +gBf +ehY +qFR +nWh +lsI +xNg +dmP +dmP +dmP +fir +ovt +kIn +iuq +kIn +nmO +fir +dmP +dmP +nmg +fir +aok +xXi +aok +xXi +aok +xXi +aok +lLi +aok +sHV +xeM +aXz +aok +xXi +aok +qoX +aok +xXi +aok +xXi +aok +dmP +dmP +dmP +vXI +hoO +hoO +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(72,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +inc +fvb +inc +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +fvb +fvb +fvb +fvb +nHP +oKe +chB +chB +chB +chB +nHP +fvb +fvb +inc +fvb +fvb +inc +fvb +eHi +eHi +fvb +fvb +liI +sLx +sLx +sLx +sLx +liI +liI +liI +qIM +uSn +uSn +uSn +qIM +uSn +uSn +uSn +miv +qIM +uSn +uSn +wRt +wRt +miv +uSn +uSn +uSn +uSn +uSn +miv +sLx +sLx +sLx +sLx +liI +uSn +uSn +qIM +uSn +uSn +liI +sLx +sLx +sLx +sLx +sLx +sLx +uSn +uSn +uSn +sLx +sLx +eZX +mfQ +ajK +ajK +ajK +tqQ +ajK +jGD +eZX +lHo +xQp +hNa +gQC +jBm +eff +deo +eFJ +lHo +rjR +eFJ +deo +cAj +lbz +gQC +lHo +rwg +igY +hVR +uXS +fkQ +sTw +xNg +lxu +riG +quG +hVR +qRX +mjU +qIH +xNg +qRX +lAz +lsI +xNg +lxu +riG +quG +hVR +oAz +lss +xNg +dmP +dmP +dmP +dmP +ovt +kIn +kIn +kIn +nmO +dmP +dmP +dmP +dmP +dmP +aok +pIm +qzU +fYV +dEj +dEj +qzU +fCy +aok +pes +ahX +aXz +aok +pIm +qzU +nYR +gPP +dEj +qzU +fCy +aok +dmP +dmP +dmP +dmP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(73,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +hoO +fvb +oFt +lcl +fvb +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +fvb +oFt +fvb +fvb +oFt +nHP +wXR +chB +oKe +chB +iON +nHP +fvb +fvb +fvb +fvb +fvb +xqJ +inc +eHi +eHi +fvb +fvb +liI +sLx +sLx +sLx +liI +liI +wRt +tEe +uSn +uSn +riX +uSn +uSn +uSn +uSn +uSn +uSn +uSn +liI +liI +liI +tEe +wRt +liI +liI +uSn +uSn +miv +liI +sLx +sLx +sLx +sLx +liI +miv +uSn +uSn +miv +uSn +liI +sLx +sLx +sLx +sLx +liI +uSn +uSn +riX +uSn +miv +sLx +eZX +per +htU +oZJ +rtq +ocY +jDF +vRA +aCm +lHo +rjN +igY +qTg +oJt +dFe +tjO +eFJ +iPy +jWT +eFJ +rmP +jVj +isn +qTg +lHo +pqS +hNa +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +ncX +vsc +ikS +xNg +jzv +tSk +ikS +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +dmP +dmP +dmP +ovt +kIn +kIn +kIn +nmO +dmP +dmP +dmP +dmP +dmP +aok +mod +dEj +dEj +dEj +fYV +dEj +dEj +wgy +vQm +gnq +vQm +bmE +ueq +iMC +qcB +dEj +dEj +dEj +mod +aok +dmP +fir +dmP +dmP +dmP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(74,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +hoO +fvb +fvb +fvb +oFt +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +oFt +lKh +inc +inc +fvb +fvb +inc +nHP +nHP +nHP +nHP +nHP +nHP +nHP +nHP +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +liI +sLx +sLx +sLx +liI +tEe +wRt +uSn +uSn +uSn +uSn +miv +uSn +liI +liI +liI +liI +liI +liI +sLx +liI +liI +liI +liI +liI +uSn +wRt +wRt +liI +sLx +sLx +sLx +sLx +liI +liI +uSn +uSn +uSn +uSn +liI +sLx +sLx +sLx +sLx +liI +uSn +miv +uSn +uSn +uSn +sLx +eZX +swY +jwU +cgr +mrA +ajK +jGF +vRA +aCm +lHo +pqS +igY +eFJ +eFJ +eFJ +eFJ +eFJ +lHo +rjR +eFJ +eFJ +eFJ +eFJ +eFJ +lHo +tiw +igY +qFR +puR +keZ +hsQ +xNg +iTM +oOZ +pSy +qFR +nWh +wRR +oGT +fVK +hlH +fGk +fUs +fyL +imT +xNg +aFf +lLC +trH +mbN +jYe +xNg +fir +dmP +dmP +ovt +kIn +kIn +kIn +nmO +dmP +dmP +dmP +dmP +dmP +aok +mod +imG +dEj +dEj +dEj +imG +dEj +vQm +vQm +xeM +vQm +vQm +dEj +dEj +qfZ +hIX +dEj +gvJ +mod +aok +dmP +dmP +dmP +dmP +dmP +fir +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(75,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +hoO +fvb +fvb +hch +fvb +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +fvb +fvb +lKh +fvb +fvb +fvb +fvb +fvb +nHP +chB +xrn +qfj +syI +gPC +chB +nHP +fvb +oFt +fvb +fvb +fvb +oFt +hch +fvb +oFt +liI +liI +sLx +sLx +sLx +liI +wRt +uSn +uSn +miv +uSn +uSn +wRt +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +miv +wRt +wRt +liI +sLx +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +uSn +liI +liI +sLx +sLx +liI +liI +uSn +uSn +uSn +miv +liI +sLx +eZX +lJL +dLM +mSE +bDu +cfI +tqQ +xLQ +eZX +lHo +xQp +gck +xyf +xyf +xyf +cYw +xyf +pMN +dQm +xyf +xyf +cYw +xyf +xyf +csX +xQp +igY +hVR +rpv +riG +sTw +ylX +lxu +riG +quG +hVR +cZE +uTV +lbQ +lbQ +nzt +rPD +fGk +cMb +tcJ +xNg +lLC +gnH +saQ +lAz +cUD +xNg +dmP +dmP +fir +ovt +kIn +iuq +kIn +nmO +fir +dmP +dmP +nmg +fir +aok +pIm +kVp +dEj +dEj +gPP +pZh +erA +aok +dNJ +job +aXz +aok +pIm +pZh +dEj +dEj +dEj +pZh +fCy +aok +dmP +dmP +dmP +dmP +dmP +dmP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(76,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +hoO +gwg +eXq +eXq +eXq +hoO +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +fvb +fvb +fvb +lKh +hch +fvb +fvb +fvb +fvb +nHP +gow +chB +wXR +chB +chB +chB +nHP +fvb +eHi +eHi +fvb +fvb +fvb +fvb +fvb +fvb +liI +liI +sLx +sLx +liI +liI +wRt +uSn +uSn +uSn +uSn +wRt +wRt +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +uSn +sLx +sLx +sLx +liI +liI +liI +uSn +riX +miv +uSn +uSn +liI +liI +liI +liI +uSn +uSn +qIM +uSn +liI +liI +sLx +eZX +brO +ajK +eCq +fET +ajK +qyS +xLQ +eZX +lHo +cqt +wVN +wVN +ulV +wVN +wVN +unf +cwP +rJL +unf +wVN +wVN +unf +eAU +wVN +wCL +vFY +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +iLU +mjU +ikS +xNg +ydS +jfc +hrh +bXR +tcJ +xNg +reP +gqX +xee +aMU +whQ +xNg +dmP +dmP +dmP +ovt +kIn +kIn +kIn +nmO +dmP +dmP +nmg +dmP +dmP +aok +xXi +aok +xXi +aok +xXi +aok +xXi +aok +sHV +ahX +aXz +aok +xXi +aok +xXi +aok +lLi +aok +xXi +aok +nmg +dmP +dmP +nmg +dmP +dmP +dmP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(77,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +fvb +fvb +oFt +liI +sLx +sLx +sLx +sLx +liI +liI +liI +oFt +fvb +fvb +oFt +lKh +fvb +oFt +fvb +fvb +oFt +nHP +chB +oWx +oWx +sAA +sAA +wXR +nHP +fvb +eHi +eHi +fvb +fvb +eHi +eHi +fvb +fvb +fvb +liI +liI +liI +liI +uSn +miv +uSn +uSn +uSn +tEe +wRt +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +uSn +uSn +miv +uSn +sLx +liI +liI +liI +uSn +miv +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +qIM +uSn +miv +liI +sLx +sLx +eZX +rjL +pES +xZn +fhM +dlx +jDF +vRA +aCm +lHo +ltH +aoJ +mNG +jxn +bxq +bxq +bxq +tNK +bxq +jxn +bxq +sGv +bxq +bxq +qlA +rjN +tVX +kQL +uHE +uHE +ncY +xNg +iTM +oOZ +pSy +qFR +auD +wcC +dZv +xNg +kiE +uCq +irC +oiU +mDU +xNg +aUi +iMK +iLU +lAz +lHz +puQ +fir +dmP +dmP +ovt +kIn +kIn +kIn +nmO +dmP +dmP +dmP +dmP +dmP +aok +oUD +aok +oUD +aok +crX +aok +ucx +aok +sHV +gnq +aXz +aok +oUD +aok +oUD +aok +oUD +aok +ucx +aok +dmP +fir +dmP +dmP +dmP +fir +dmP +dmP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(78,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +fvb +eHi +fvb +fvb +liI +sLx +sLx +sLx +liI +fvb +inc +fvb +fvb +fvb +fvb +lKh +inc +fvb +fvb +fvb +inc +nHP +bWW +chB +chB +chB +chB +chB +nHP +fvb +fvb +fvb +fvb +fvb +eHi +eHi +fvb +fvb +fvb +miv +liI +liI +miv +uSn +uSn +uSn +uSn +qIM +wRt +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +qIM +uSn +qIM +uSn +liI +liI +qIM +uSn +uSn +uSn +uSn +qIM +uSn +uSn +uSn +uSn +miv +uSn +uSn +qIM +miv +uSn +liI +liI +sLx +sLx +eZX +rHX +rMx +cfI +mVR +cgr +jDF +vRA +aCm +lHo +xQp +igY +eFJ +eFJ +kJF +kJF +kJF +hHD +kJF +huF +kJF +nIV +nIV +nIV +lHo +cqt +wVN +dRs +xeq +cEc +dnO +xNg +lxu +riG +quG +hVR +iLU +wRR +lsI +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +xNg +vpC +oXD +xLh +puQ +dmP +dmP +dmP +ovt +kIn +kIn +kIn +nmO +dmP +dmP +dmP +aok +aok +aok +aok +aok +aok +aok +aok +aok +aok +aok +sHV +gnq +vRs +aok +aok +aok +aok +aok +aok +aok +aok +aok +aok +dmP +dmP +dmP +dmP +dmP +dmP +dmP +fir +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(79,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +fvb +eHi +eHi +fvb +liI +liI +sLx +liI +liI +inc +eHi +eHi +fvb +fvb +fvb +liI +liI +eHi +eHi +fvb +fvb +nHP +chB +ttt +ttt +wrM +iPF +chB +nHP +fvb +oFt +fvb +fvb +fvb +oFt +fvb +oFt +fvb +fvb +uSn +qIM +uSn +uSn +uSn +miv +uSn +ikq +uSn +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +qIM +liI +uSn +miv +uSn +uSn +uSn +uSn +miv +uSn +uSn +miv +uSn +uSn +riX +uSn +uSn +liI +liI +liI +sLx +sLx +sLx +eZX +otK +wzL +hgT +giM +oQE +dWT +ljo +eZX +iPy +xQp +tVX +xyf +aFY +kJF +aRQ +uFd +uCY +uFd +xCx +kJF +eWB +eWB +nIV +lFp +kmi +bxq +sIk +lie +vqo +aLV +xNg +xNg +xNg +xNg +xNg +saQ +mjU +yjO +ckP +ckP +huW +mbN +nqg +dDq +ckP +haJ +xNg +iLU +oGT +xLh +puQ +dmP +dmP +fir +ovt +kIn +iuq +kIn +nmO +fir +dmP +dmP +aok +nXN +rSk +cDB +fDl +wnx +pta +kbj +rVI +aok +vKJ +sAI +jtX +vQm +oVJ +sCr +dbL +cNr +dmw +aok +mCo +vKA +ePD +aok +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(80,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +inc +oFt +inc +fvb +oFt +liI +liI +liI +oFt +inc +eHi +eHi +fvb +fvb +liI +liI +liI +liI +eHi +fvb +fvb +nHP +chB +chB +chB +wXR +chB +chB +nHP +fvb +inc +fvb +fvb +fvb +inc +fvb +fvb +fvb +fvb +uSn +qIM +uSn +uSn +uSn +riX +uSn +uSn +uSn +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +uSn +uSn +uSn +uSn +uSn +uSn +uSn +liI +liI +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +liI +liI +sLx +sLx +sLx +sLx +sLx +eZX +eZX +eZX +eZX +tli +eZX +eZX +eZX +eZX +lHo +yej +wVN +ebD +igY +kJF +oyV +oqf +iYJ +wxZ +pst +kJF +hIr +mOT +nIV +nIV +nIV +nIV +nIV +lqX +tJP +esP +xNg +iTM +oOZ +pSy +qFR +nWh +uTV +vAt +vaO +kbO +vaO +lYv +vaO +kbO +jho +fxO +lUX +fsm +xiw +oDx +xNg +fir +dmP +dmP +ovt +kIn +kIn +kIn +nmO +dmP +dmP +dmP +aok +dom +vQm +szO +vQm +pxe +dxg +brZ +bWA +wxc +ngk +bWA +ftw +ngk +ngk +opq +rMB +wKH +adM +aok +vKA +kTS +plI +aok +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(81,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +fvb +fvb +inc +fvb +fvb +oFt +fvb +fvb +fvb +inc +oFt +fvb +oFt +liI +sLx +sLx +liI +eHi +fvb +oFt +nHP +nHP +nHP +chB +rUG +nHP +nHP +nHP +fvb +fvb +eHi +eHi +fvb +inc +fvb +fvb +hch +fvb +miv +uSn +miv +uSn +uSn +uSn +uSn +uSn +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +miv +uSn +uSn +uSn +uSn +uSn +uSn +liI +liI +liI +uSn +uSn +qIM +uSn +uSn +uSn +miv +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +eFJ +rJc +xyf +xyf +xNm +ddL +qms +xyf +bcA +ppb +fIP +fIP +pqS +hNa +kJF +oyV +eVO +iYJ +emh +pst +aVv +stE +fLW +pvi +rXB +way +iYD +nIV +quv +tJP +dkK +xNg +lxu +riG +quG +hVR +iLU +wRR +efe +xNg +xNg +lAz +ffj +xNg +xNg +iLU +ikS +xNg +qfX +dkZ +diE +xNg +dmP +dmP +dmP +ovt +kIn +kIn +kIn +nmO +vXI +vXI +vXI +cdG +cDB +pxe +vQm +djL +uXk +sDB +vQm +rSk +aok +kIH +okb +vQm +oRH +aok +aBC +noG +uUJ +pCP +dsQ +mQj +mQj +vtC +aok +fir +dmP +dmP +lVv +fir +dmP +dmP +dmP +fir +dmP +dmP +dmP +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(82,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +fvb +fvb +fvb +inc +fvb +fvb +fvb +fvb +inc +fvb +fvb +fvb +liI +liI +sLx +liI +liI +eHi +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +eHi +eHi +fvb +fvb +fvb +fvb +fvb +fvb +liI +liI +liI +liI +uSn +uSn +uSn +miv +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +uSn +uSn +miv +uSn +qIM +uSn +liI +sLx +liI +uSn +uSn +miv +uSn +uSn +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +eFJ +hTS +fIP +sqA +kJs +ajT +rDi +jnL +fIP +fIP +fIP +tNB +xQp +plN +kJF +eSK +rvS +fly +sGj +fnz +kJF +jMj +fLW +mhx +aMl +qEo +rFc +nIV +lNa +dju +pkj +xNg +xNg +xNg +xNg +xNg +iLU +mjU +iAc +xNg +oCh +gbY +mjU +qUi +xNg +qRX +ikS +xNg +xNg +xNg +xNg +xNg +dmP +dmP +dmP +ovt +kIn +kIn +kIn +nmO +kIn +kIn +sEf +haE +rSk +okb +wNH +pSw +wNH +gnq +iSP +kCn +aok +aok +bVB +aok +aok +aok +aLe +tWy +prH +cdV +aok +vKA +vKA +vKA +aok +dmP +dmP +nmg +dmP +dmP +dmP +dmP +nmg +dmP +dmP +dmP +nmg +fir +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(83,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +fvb +fvb +fvb +hch +fvb +fvb +fvb +fvb +fvb +fvb +liI +liI +sLx +sLx +liI +eHi +eHi +fvb +eHi +eHi +oFt +fvb +fvb +fvb +oFt +fvb +fvb +fvb +oFt +fvb +fvb +fvb +oFt +fvb +fvb +fvb +liI +liI +sLx +sLx +liI +uSn +miv +uSn +qIM +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +qIM +uSn +qIM +uSn +miv +liI +sLx +liI +liI +uSn +uSn +uSn +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +eFJ +nun +fIP +vqv +jTJ +jfX +wtO +hTo +fIP +fIP +fIP +fIP +qXt +fqJ +kJF +xcZ +xmh +lvs +xmh +pst +kJF +oNg +fke +rqb +fke +way +vku +nIV +tza +gTx +xGq +xNg +eXs +aZk +aZk +xNg +iLU +mjU +ikS +puQ +mpC +mva +mMF +oYx +puQ +snO +kZn +ckP +whz +hdd +xNg +dmP +fir +dmP +fir +ovt +ijy +xrP +ijy +nmO +gUI +fqx +fqx +dwR +nmV +dlI +faA +fdz +jHF +xcC +brn +xpH +aok +dkB +vQm +hbO +aok +iBg +tWy +tWy +tDP +cmd +aok +aok +aok +aok +aok +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(84,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +oFt +fvb +kYx +fvb +fvb +fvb +oFt +fvb +fvb +liI +liI +sLx +sLx +sLx +liI +eHi +oFt +fvb +eHi +eHi +fvb +fvb +eHi +eHi +fvb +fvb +fvb +fvb +fvb +hch +fvb +fvb +eHi +eHi +fvb +fvb +liI +sLx +sLx +sLx +liI +uSn +uSn +qIM +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +liI +liI +sLx +sLx +liI +uSn +uSn +uSn +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +eFJ +lHo +fIP +vqv +jfX +nLt +wtO +fIP +fIP +jnL +fIP +fIP +xQp +bii +kJF +xcZ +mxI +lrq +mxI +pst +kJF +jMj +aMl +stE +mOT +way +iYD +nIV +lqX +cEc +dkK +xNg +tIu +eMj +hYm +uYD +pzf +cAi +ikS +puQ +ydR +rUc +yeF +ghq +puQ +weJ +nHi +cMb +mzU +kQX +xNg +dmP +dmP +dmP +dmP +ihW +gjK +gjK +gjK +ihW +tCL +tCL +tCL +cdG +rSk +dwR +wNH +oJd +qdL +jjz +rSk +dJo +cdG +vQm +pfa +sDJ +cdG +fya +xxZ +sMu +jDJ +mgW +eLO +ngk +xZR +fjM +aok +aok +maf +maf +maf +aok +aok +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(85,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +liI +liI +liI +sLx +sLx +sLx +sLx +liI +liI +fvb +fvb +kYS +fvb +hch +fvb +eHi +eHi +fvb +inc +fvb +fvb +fvb +fvb +fvb +fvb +eHi +eHi +fvb +liI +liI +sLx +sLx +sLx +liI +uSn +riX +uSn +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +uSn +uSn +liI +liI +sLx +sLx +liI +uSn +uSn +uSn +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +eFJ +jPp +jnL +fIP +jNN +ffa +xQp +fIP +nAw +fIP +fIP +fIP +pqS +hNa +dlw +rsQ +bZU +jtC +mJF +pst +kJF +rgK +fke +fLW +fLW +nIV +nIV +nIV +hvJ +xeq +dkK +xNg +bLJ +eXs +dxQ +xNg +cZE +nMF +ikS +xNg +eYR +eOa +lqs +gwh +xNg +qgK +lAz +nxo +nxo +efe +puQ +dmP +dmP +dmP +dmP +gjK +bVQ +dtu +bVQ +ihW +tCL +qqi +qqi +aok +vQm +usJ +ngk +tKR +ngk +uCI +vQm +uBy +cdG +boI +luZ +boI +cdG +rgH +tWy +sCr +rnr +tWy +vQm +vQm +gnq +eFX +aok +jMO +lJM +lJM +lJM +fPf +aok +qqi +qqi +kaT +qqi +qqi +qqi +kaT +qqi +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(86,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +eHi +eHi +fvb +fvb +oFt +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +eHi +eHi +eHi +fvb +fvb +fvb +fvb +fvb +inc +fvb +inc +fvb +fvb +fvb +inc +fvb +fvb +liI +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +liI +sLx +sLx +liI +miv +uSn +uSn +uSn +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +eFJ +lHo +sqA +aQq +fIP +tVY +rJL +bAw +wVN +wVN +mRB +eAU +hiC +lMk +dlw +xcZ +skZ +rog +skZ +ogS +kJF +oFp +aMl +mOT +fLW +nIV +lFG +uHE +tLD +tJP +xOs +xNg +xNg +xNg +xNg +xNg +iyM +xBo +nfN +xNg +xNg +puQ +puQ +xNg +xNg +oAz +bpR +bOk +rNP +gWb +puQ +dmP +fir +dmP +fir +gjK +cqH +fIf +rGk +ihW +qqi +qqi +qqi +aok +nCe +pBz +rSk +kzo +lcA +uuR +rSk +kNe +aok +adl +qtZ +adl +aok +cdV +tWy +fyy +pmk +sGR +aok +sHV +gnq +vRs +aok +lzy +sNf +stw +lzy +sNf +maf +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(87,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +eHi +eHi +fvb +fvb +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +gdW +eHi +fvb +fvb +oFt +fvb +fvb +fvb +oFt +fvb +fvb +fvb +oFt +fvb +fvb +liI +sLx +sLx +sLx +liI +liI +miv +uSn +uSn +miv +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +uSn +miv +uSn +liI +sLx +sLx +liI +liI +uSn +uSn +miv +uSn +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +eFJ +gzH +fIP +fIP +ajT +ajT +fIP +sqA +jnL +fIP +fIP +fIP +xQp +hNa +kJF +xcZ +vyx +yjW +oLX +pst +kJF +oFp +baa +rUL +stE +ctI +tJP +xeq +tJP +cEc +njP +uHE +wnu +wnu +kjY +uHE +aCJ +wkd +xDZ +wnu +uHE +irn +uHE +uHE +uHE +rJe +qui +rNP +qUq +lee +puQ +dmP +dmP +dmP +dmP +gjK +hzR +fFs +kKt +iyr +kaT +qqi +bUI +aok +aok +eXT +aok +aok +aok +ayr +aok +aok +aok +aok +aok +aok +aok +vQm +ovc +aok +aok +aok +aok +sHV +qcV +vQm +yhj +sNf +mcp +bOo +cXA +sNf +maf +gmu +gmu +qqi +gmu +gmu +qqi +gmu +gmu +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(88,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +fvb +oFt +fvb +fvb +fvb +oFt +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +eHi +eHi +eHi +fvb +fvb +fvb +fvb +eHi +eHi +fvb +fvb +fvb +fvb +fvb +liI +sLx +sLx +sLx +liI +uSn +uSn +uSn +uSn +uSn +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +uSn +qIM +uSn +liI +liI +liI +liI +liI +liI +qIM +uSn +uSn +uSn +uSn +uSn +uSn +uSn +sLx +sLx +sLx +sLx +sLx +eFJ +rGO +fIP +vqv +nLt +sXe +pAk +jVH +fIP +hTo +aQq +jnL +xQp +lpP +kJF +wKQ +vyx +uGX +ibE +stv +kJF +fpf +wCZ +uCz +cRx +cRx +rxM +oym +rxM +vqo +hbo +rxM +vqo +rxM +rxM +xWs +bUg +leH +kmS +kYc +vqo +rxM +vXb +rxM +qIZ +uvy +dMW +xSE +bEs +kuZ +xNg +dmP +dmP +dmP +dmP +gjK +mgR +bVQ +cqH +cqH +qqi +qqi +qqi +aok +vKJ +xeM +xKF +wkE +cYz +pgA +fvS +aok +fvS +vCY +qmP +wkE +okb +uuR +aXz +aok +soa +qhk +aok +rvL +gnq +vQm +vQm +sNf +bgM +pbo +bOo +sNf +maf +gmu +gmu +kaT +gmu +gmu +qqi +bHC +gmu +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(89,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +inc +fvb +fvb +inc +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +eHi +eHi +eHi +eHi +fvb +eHi +eHi +fvb +fvb +fvb +hch +fvb +liI +sLx +sLx +sLx +liI +miv +uSn +uSn +uSn +uSn +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +miv +uSn +uSn +liI +liI +liI +miv +uSn +qIM +uSn +uSn +uSn +uSn +riX +miv +qIM +uSn +liI +liI +sLx +sLx +sLx +eFJ +rSE +jnL +vqv +oPy +jfX +pAk +fIP +nOS +fIP +fIP +aQq +pqS +nJT +kJF +xWk +eVT +eVT +hUV +anT +kJF +dMn +tWS +kSF +fLW +nIV +cZl +pNL +iFS +wjW +wjW +wjW +vxj +duG +wjW +nyk +nyk +nyk +nyk +koX +wjW +duG +iFS +jDI +ozJ +hLk +iyM +uCq +nYA +nXv +xNg +dmP +fir +dmP +fir +gjK +evq +aMx +nPE +ihW +qqi +qqi +qqi +cdG +wnV +gnq +kjI +aok +rJU +hZO +fmc +aok +fmc +hZO +rJU +aok +vgM +vQm +cjX +iMY +imG +xdc +aok +bRq +meR +aXz +aok +lzy +sNf +jMO +lzy +stw +maf +qqi +bUI +qqi +qqi +qqi +bUI +qqi +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(90,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +fvb +fvb +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +eHi +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +liI +sLx +sLx +sLx +liI +liI +uSn +miv +uSn +uSn +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +liI +liI +liI +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +liI +sLx +sLx +sLx +eFJ +lHo +hTo +jnL +hrW +hrW +fIP +hTo +fIP +jnL +aoJ +bxq +uPN +kVd +kJF +kJF +dlw +dlw +dlw +kJF +kJF +nIV +nIV +nIV +nIV +nIV +hqt +hDU +mnB +mnB +mnB +mnB +mnB +vjc +aNv +uvl +mnB +mnB +vjc +vjc +vjc +mnB +mnB +lqX +wGS +rVM +fWP +xNg +xNg +xNg +xNg +dmP +dmP +dmP +dmP +gjK +cqH +ftS +bYr +ihW +qqi +qqi +qqi +cdG +sHV +qcV +xds +aok +aok +aok +aok +aok +aok +aok +aok +aok +sHV +gZC +xds +aok +aok +aok +aok +bRq +gnq +aXz +aok +aMp +lJM +lJM +lJM +sNf +aok +bUI +gmu +gmu +qqi +gmu +gmu +qqi +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(91,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +oFt +fvb +hch +fvb +oFt +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +fvb +oFt +fvb +fvb +fvb +oFt +fvb +inc +liI +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +miv +uSn +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +riX +uSn +uSn +uSn +liI +uSn +uSn +uSn +miv +uSn +miv +liI +liI +liI +uSn +uSn +uSn +miv +liI +liI +sLx +sLx +eFJ +dCv +wTu +fIP +sKN +fIP +fIP +fIP +fIP +fIP +igY +tHH +wkd +uHE +uHE +jzL +uHE +uHE +sKS +kjY +uHE +szC +wnu +uHE +uHE +oGj +imt +dkK +mnB +uyk +wJr +dSE +dSE +dSE +waf +wJr +iBw +dSE +wJr +dSE +dSE +hqw +mnB +mxN +dSz +tGA +fWP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +ihW +gjK +gjK +gjK +ihW +kaT +qqi +qqi +cdG +sHV +xeM +aXz +wkE +qmP +vCY +fvS +aok +fvS +uIu +cYz +wkE +vQm +bAV +aXz +aok +tqE +nIZ +aok +bRq +ahX +cbi +aok +aok +maf +maf +maf +aok +aok +qqi +gmu +gmu +qqi +gmu +qqi +qqi +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(92,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +fvb +fvb +fvb +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +liI +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +riX +uSn +uSn +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +uSn +uSn +miv +uSn +uSn +uSn +miv +uSn +uSn +liI +liI +liI +sLx +liI +liI +qIM +uSn +uSn +qIM +liI +sLx +sLx +eFJ +iPy +fIP +hTo +ajT +ajT +sqA +fIP +jnL +aQq +igY +lqX +eZJ +nnq +tJP +tJP +cEc +xNo +tJP +tJP +tJP +tJP +tJP +tJP +xeq +cEc +uTu +yaA +mnB +dSE +dSE +rxS +rxS +rxS +bcz +mXo +rxS +rxS +rxS +dSE +dSE +wJr +mnB +lqX +jdc +bSq +fWP +fir +dmP +fir +dmP +dmP +fir +dmP +fir +qvj +daH +daH +daH +wJE +qqi +qqi +qqi +aok +xbi +gnq +uIK +aok +rJU +hZO +fmc +aok +fmc +ojo +eYn +aok +hQW +ocu +vQm +cAo +imG +xdc +aok +sXI +dvo +jpF +aok +kaT +qqi +bUI +qqi +kaT +qqi +bUI +qqi +kaT +qqi +qqi +kaT +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(93,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +fvb +fvb +fvb +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +eHi +eHi +fvb +inc +fvb +fvb +fvb +fvb +fvb +inc +liI +liI +liI +liI +sLx +sLx +liI +miv +qIM +uSn +uSn +uSn +qIM +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +miv +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +liI +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +miv +liI +sLx +sLx +eFJ +jPp +jnL +vqv +jqy +jfX +pAk +fIP +sHR +fIP +fmi +lqX +fbM +coH +kVa +vgE +kMf +xbe +nqm +sVl +dcF +fLN +vgE +vgE +lIi +rPU +rxM +xBl +mnB +dSE +dSE +xQU +dSE +dSE +dSE +rMH +rMH +wJr +dSE +dSE +wBz +dSE +mnB +azf +eZJ +aBN +ntm +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +lRF +prx +prx +prx +wJE +qqi +qqi +qqi +aok +hQW +job +oGi +aok +aok +aok +aok +aok +aok +aok +aok +aok +pes +hFu +aXz +aok +aok +aok +aok +wnV +gnq +aXz +cdG +qqi +qqi +qqi +qqi +qqi +qqi +gmu +gmu +qqi +qqi +qqi +qqi +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(94,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +lKh +lKh +lKh +gTE +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +eHi +fvb +inc +hch +fvb +fvb +fvb +fvb +fvb +fvb +miv +uSn +uSn +liI +sLx +sLx +sLx +liI +liI +uSn +uSn +uSn +uSn +wRt +tEe +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +miv +uSn +uSn +uSn +qIM +uSn +uSn +uSn +uSn +uSn +uSn +qIM +liI +sLx +sLx +sLx +sLx +liI +liI +uSn +uSn +uSn +liI +sLx +sLx +eFJ +axs +bxq +iqB +ofT +oMQ +mOK +jxn +bxq +aTu +kVd +lqX +eZJ +fDX +oOc +hgm +oOc +oOc +yew +vyC +oOc +oOc +oOc +hgm +oOc +lqX +tJP +dkK +lYl +dSE +sdP +geF +sPW +mTT +sdP +rJv +rxS +nzP +rxS +wJr +mkj +rMH +vjc +lqX +jHM +fDX +ntm +dmP +dmP +dmP +dmP +nmg +dmP +dmP +dmP +lRF +prx +prx +prx +wJE +qqi +qqi +bUI +cdG +sXI +qcV +uIK +bNd +rBO +paD +fvS +aok +fvS +pgA +cYz +wkE +okb +xyL +aXz +aok +bVX +nIZ +aok +qJi +sLV +aXz +cdG +qqi +qqi +qqi +gmu +gmu +qqi +gmu +gmu +qqi +gmu +gmu +qqi +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(95,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +oFt +fvb +fvb +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +gdW +fvb +fvb +oFt +fvb +fvb +fvb +oFt +fvb +fvb +uSn +riX +miv +uSn +liI +sLx +sLx +sLx +liI +liI +wRt +tCn +mFB +wRt +wRt +liI +sLx +sLx +sLx +sLx +liI +liI +liI +liI +liI +liI +liI +qIM +uSn +uSn +uSn +qIM +uSn +uSn +miv +uSn +uSn +uSn +miv +uSn +liI +liI +sLx +sLx +sLx +sLx +liI +uSn +uSn +miv +liI +sLx +sLx +eFJ +eFJ +eFJ +ijq +ijq +myL +myL +myL +ijq +ijq +ijq +hvJ +eZJ +ejG +oOc +eIZ +gkl +hgB +sYN +uEq +hgB +fqd +gkl +eRt +oOc +boi +yhR +uqx +mnB +dSE +geF +sPW +qdv +sPW +geF +qqW +dSE +dSE +dSE +dSE +gCS +dSE +vjc +asd +eZJ +fDX +fWP +fir +dmP +fir +dmP +dmP +fir +dmP +fir +lRF +dqa +prx +prx +wJE +kaT +qqi +qqi +cdG +sHV +gnq +aXz +aok +ePs +beL +oRx +aok +fmc +hZO +rJU +aok +sHV +iIZ +vQm +iMY +imG +xdc +aok +sHV +ahX +aXz +cdG +qqi +qqi +qqi +gmu +gmu +qqi +qqi +qqi +qqi +gmu +gmu +qqi +tCL +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(96,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +inc +fvb +inc +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +eHi +eHi +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +inc +uSn +uSn +uSn +qIM +uSn +liI +liI +sLx +sLx +liI +tEe +uSn +uSn +uSn +uSn +liI +liI +sLx +liI +liI +liI +uSn +uSn +miv +uSn +uSn +uSn +uSn +uSn +uSn +uSn +miv +uSn +uSn +liI +liI +uSn +uSn +riX +uSn +uSn +liI +sLx +sLx +sLx +sLx +liI +miv +uSn +uSn +liI +liI +sLx +sLx +sLx +spn +ijq +oUd +eRN +sxE +uOM +erf +gYm +ijq +lqX +eZJ +dnO +oOc +iWV +hCA +oCj +rIB +vQd +rRb +iMy +rRb +pNi +oOc +lqX +tJP +pkj +uYt +dSE +sPW +qdv +qdv +qdv +sPW +sCy +nzP +rxS +rxS +dSE +dSE +dSE +vjc +lqX +jdc +fDX +fWP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +lRF +prx +prx +prx +wJE +qqi +qqi +qqi +cdG +tin +jtX +kjI +aok +aok +aok +aok +aok +aok +aok +aok +aok +vgM +xyL +aXz +aok +aok +aok +aok +sHV +jtX +vRs +aok +kaT +qqi +qqi +qqi +kaT +qqi +gmu +gmu +syf +qqi +bUI +qqi +aiF +tCL +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(97,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +fvb +fvb +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +eHi +eHi +eHi +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +uSn +uSn +uSn +uSn +qIM +uSn +miv +liI +sLx +liI +liI +liI +uSn +uSn +uSn +uSn +liI +liI +liI +miv +uSn +uSn +uSn +uSn +wRt +wRt +miv +uSn +uSn +uSn +uSn +liI +liI +liI +liI +liI +liI +uSn +uSn +uSn +miv +liI +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +uSn +liI +sLx +dXL +dXL +dXL +ijq +ats +oJP +nyx +oJP +oJP +fSP +ijq +hvJ +jdc +fDX +oOc +hoc +jwe +wop +ilP +utO +ilP +wLy +gzg +rRb +ibP +xeq +tJP +gxU +lYl +uyk +bwj +sPW +sPW +sPW +geF +qqW +dSE +gxh +gPf +dSE +dSE +wJr +vjc +ifK +ozJ +aBN +fWP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +lRF +prx +prx +prx +bui +bqd +bqd +bqd +aok +sHV +gnq +kcY +qeC +qeC +qeC +qeC +kon +wRY +qeC +qeC +qeC +sAI +xWq +vdj +qeC +ada +vWw +qeC +sAI +xeM +aXz +cdG +qqi +qqi +qqi +gmu +gmu +qqi +gmu +gmu +qqi +gmu +fBv +bUI +tCL +tCL +tyV +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(98,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +fvb +hch +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +eHi +eHi +fvb +fvb +fvb +fvb +fvb +oFt +liI +liI +liI +oFt +fvb +fvb +liI +liI +uSn +miv +uSn +qIM +uSn +liI +sLx +sLx +sLx +liI +miv +uSn +uSn +uSn +uSn +uSn +uSn +uSn +riX +uSn +uSn +qIM +tEe +wRt +uSn +qIM +uSn +uSn +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +miv +uSn +uSn +liI +sLx +sLx +sLx +sLx +liI +liI +uSn +lMJ +qIM +feX +feX +dXL +dXL +dXL +myL +hLi +pkA +dow +wgc +oJP +pmh +ijq +ifK +eZJ +aBN +oOc +wdI +nBx +oNb +rRb +rRb +rRb +acA +oVo +gfR +gfR +rxM +rxM +eeG +mnB +mnB +mnB +mnB +mnB +mnB +plU +qqW +dSE +bcz +dSE +dSE +xQU +wla +mnB +lqX +eZJ +fDX +fWP +fir +dmP +fir +dmP +dmP +fir +dmP +fir +lRF +prx +prx +prx +prx +prx +prx +prx +aok +sHV +wDW +bWA +vgj +ngk +faH +pTC +uRs +ngk +ngk +bwV +ngk +ngk +ftw +bWA +ngk +ngk +uRs +bWA +ngk +vkB +eum +cdG +qqi +qqi +qqi +gmu +gmu +qqi +qqi +qqi +qqi +gmu +gmu +qqi +tCL +nls +nls +nls +nls +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(99,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +oFt +fvb +inc +oFt +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +oFt +fvb +fvb +fvb +oFt +fvb +fvb +liI +liI +sLx +liI +liI +liI +fvb +sLx +liI +liI +liI +uSn +uSn +uSn +liI +sLx +sLx +liI +liI +qIM +wRt +wRt +miv +uSn +qIM +uSn +uSn +uSn +uSn +qIM +liI +liI +liI +uSn +uSn +miv +uSn +liI +sLx +jXr +jXr +jXr +jXr +jXr +jXr +tOL +tOL +tOL +jXr +jXr +jXr +jXr +jXr +jXr +dXL +dXL +feX +ozs +xyr +feX +ewM +dXL +dXL +myL +jmy +eqC +paP +gPV +plC +loW +hBB +rxM +wSr +dnO +oOc +wdI +rRb +mGM +ePM +rRb +rRb +xXz +rSM +uGT +oOc +azf +tJP +njP +uHE +uHE +vLn +wnu +tJP +aCY +bou +qqW +xQU +dSE +dSE +los +dSE +pak +mnB +elT +wSr +ejG +fWP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +lRF +dqa +prx +prx +prx +dqa +prx +prx +aok +lrI +gmt +tdg +vQm +kgY +gmt +vQm +ahu +vQm +vQm +jtX +vQm +vQm +vQm +okb +gmt +gmt +leS +tdg +gmt +vQm +eIo +cdG +qqi +qqi +qqi +qqi +qqi +qqi +gmu +gmu +qqi +qqi +qqi +tCL +tCL +nls +nls +nls +nls +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +"} +(100,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jYq +jYq +wmB +rVy +rVy +jYq +jYq +jYq +jYq +jYq +jYq +jYq +jYq +jYq +jYq +jYq +jYq +fvb +fvb +inc +fvb +fvb +fvb +fvb +inc +liI +sLx +sLx +sLx +sLx +liI +liI +sLx +sLx +sLx +liI +uSn +riX +miv +liI +sLx +sLx +liI +uSn +uSn +wRt +wRt +uSn +uSn +uSn +uSn +uSn +miv +uSn +liI +liI +sLx +liI +uSn +uSn +uSn +liI +liI +sLx +jXr +vjr +lkJ +mRv +jch +jXr +mcE +roD +iAa +jXr +sJI +mua +mdG +cjT +jXr +spn +ewM +feX +feX +ldq +feX +dXL +dXL +spn +myL +prJ +eqC +mJA +gPV +ksz +paP +uwJ +tJP +lHO +jwh +qeG +lFE +rRb +lOe +wJx +luG +hxA +lVu +lSE +xXz +oOc +hvJ +tJP +oBU +rKV +rxM +rxM +psc +rxM +hBw +hge +fNb +gnV +cce +gnV +gnV +dSE +vpk +mnB +lqX +jdc +aBN +fWP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +lRF +prx +prx +prx +prx +prx +prx +prx +aok +aok +aok +aok +fUE +aok +aok +fUE +aok +fch +vQm +gnq +cYz +ioP +ioP +slc +aok +aok +fUE +aok +aok +fUE +aok +aok +kaT +qqi +qqi +gmu +bHC +qqi +gmu +gmu +kaT +gmu +gmu +qqi +nHn +nls +nls +nls +bFq +nls +liI +liI +sLx +sLx +sLx +sLx +sLx +"} +(101,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jYq +vSN +ery +ery +ery +jYq +wwP +ftT +wnD +hdP +ftT +ftT +ftT +ftT +iJw +wZX +jYq +fvb +fvb +hch +fvb +fvb +fvb +fvb +liI +liI +sLx +sLx +sLx +sLx +sLx +liI +sLx +sLx +liI +liI +uSn +uSn +uSn +liI +sLx +sLx +liI +uSn +miv +uSn +uSn +uSn +miv +uSn +uSn +uSn +uSn +liI +liI +sLx +sLx +liI +liI +uSn +uSn +liI +sLx +sLx +jXr +lkJ +sQl +lkJ +kUP +jXr +lTv +xsp +jCA +jXr +mkc +jEN +jEN +srk +jXr +dXL +dXL +dXL +feX +dXL +ewM +dXL +dXL +dXL +myL +hLi +hGA +hWe +bMk +ksz +pmh +ijq +lqX +pHe +fDX +qeG +nWz +ltB +teP +teP +qOl +eWZ +oog +mRp +wbh +oOc +erd +tJP +meT +cEc +tJP +saR +eZJ +fDX +mnB +mnB +mnB +mnB +mnB +mnB +mnB +mnB +mnB +mnB +lqX +eZJ +fDX +fWP +fir +dmP +fir +dmP +dmP +fir +dmP +fir +piI +dCb +dCb +dCb +lzM +prx +prx +prx +wJE +qqi +aok +rJU +cYz +aok +rJU +cYz +aok +gzR +vQm +ahX +fem +hpl +rJU +jcZ +aok +vVh +rBO +aok +rJU +qmP +aok +qqi +qqi +qqi +qqi +gmu +gmu +qqi +qqi +qqi +qqi +gmu +qqi +bUI +liI +liI +nls +nls +nls +dKa +nls +liI +sLx +sLx +sLx +sLx +sLx +"} +(102,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jYq +nTA +lnD +ery +wVo +jYq +dQa +ery +lnD +aYX +ery +ery +lnD +ery +ery +glU +jYq +fvb +fvb +fvb +fvb +fvb +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +uSn +liI +sLx +sLx +liI +liI +uSn +uSn +uSn +uSn +uSn +wRt +wRt +uSn +liI +liI +sLx +sLx +sLx +sLx +liI +uSn +miv +liI +liI +sLx +jXr +ioH +lkJ +wdQ +lkJ +jXr +xWv +xsp +oXj +jXr +wNT +jEN +qhX +xzI +jXr +dXL +dXL +ewM +dXL +dXL +dXL +dXL +dXL +dXL +ijq +lJT +cGy +qnf +cGy +xuq +pmh +ijq +nzr +eZJ +fDX +oOc +rru +xVc +xVc +iMp +iMp +kNO +pcJ +kzx +mpa +oOc +qXp +wjW +duG +wjW +cTm +tJP +eZJ +bJP +wNZ +prk +qQi +hFv +qoP +lGp +prk +tre +uHE +uHE +psx +eZJ +aBN +ntm +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +qqi +qqi +qqi +qqi +lRF +prx +prx +prx +wJE +qqi +aok +qmP +lHR +aok +qmP +lHR +aok +eMt +vQm +xeM +fem +rJU +rJU +lJl +aok +tLl +tkd +aok +cYz +lHR +aok +qqi +qqi +qqi +qqi +qqi +qqi +qqi +gmu +gmu +qqi +qqi +qqi +liI +liI +liI +nls +nls +nls +nls +nls +liI +liI +sLx +sLx +sLx +sLx +"} +(103,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jYq +mzu +ery +nip +ery +rSd +nip +hSM +ery +tPe +ery +bLT +ery +bLT +ery +mxZ +jYq +fvb +oFt +fvb +fvb +oFt +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +miv +uSn +uSn +miv +liI +liI +sLx +liI +liI +uSn +uSn +iMa +uSn +uSn +wRt +tEe +uSn +liI +sLx +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +liI +liI +jXr +lkJ +lkJ +gQR +lkJ +jXr +xWv +rmF +xIF +jXr +bZX +jEN +jEN +wmz +jXr +dXL +dXL +dXL +dXL +dXL +dXL +dXL +dXL +dXL +ijq +bbV +gpe +mpS +eou +xga +ssj +ijq +hvJ +eZJ +fDX +oOc +oOc +oOc +oOc +oOc +oOc +oOc +oOc +luz +luz +luz +luz +luz +luz +luz +nzr +uRc +bRA +tJP +fDX +prk +lGp +fyk +atk +qQi +prk +lqX +aoM +rxM +epa +vaM +fDX +ntm +dmP +dmP +dmP +dmP +nmg +dmP +dmP +fir +qqi +kaT +qqi +bUI +lRF +dqa +prx +tmQ +wJE +kaT +aok +fvS +fmc +aok +fvS +fmc +aok +kjO +vQm +jtX +vCY +mTh +eOs +gEf +aok +fvS +dOT +aok +fvS +fmc +aok +qqi +qqi +qqi +qqi +gmu +gmu +qqi +gmu +gmu +qqi +qqi +liI +liI +sLx +liI +liI +nls +nls +nls +nls +nls +liI +sLx +sLx +sLx +sLx +"} +(104,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jYq +ery +ery +mft +lOr +jYq +dQa +ery +ery +ery +tog +ery +ery +ery +ery +dLt +jYq +fvb +fvb +fvb +fvb +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +uSn +uSn +uSn +uSn +liI +liI +liI +miv +uSn +uSn +miv +riX +uSn +uSn +uSn +uSn +liI +sLx +sLx +sLx +sLx +sLx +liI +qIM +riX +uSn +miv +uSn +jXr +ioH +lkJ +sQl +lkJ +pbP +jEN +ufU +jEN +kXA +jEN +jEN +jEN +srA +jXr +bBf +dXL +dXL +dXL +bBf +dXL +dXL +dXL +spn +ijq +ijq +ijq +ijq +ijq +ijq +ijq +ijq +fwd +eZJ +bJP +nwr +wNZ +nlt +pjY +nlt +pjY +nlt +pjY +luz +udW +qys +glD +dzt +ydf +luz +lqX +cEc +jdc +uRc +lpk +prk +qQi +atk +qQi +lGp +prk +cZl +ozJ +uNi +wjW +drS +kdZ +fWP +fir +dmP +fir +dmP +dmP +fir +dmP +dmP +qqi +qqi +qqi +qqi +lRF +prx +prx +prx +wJE +qqi +aok +aok +aok +aok +aok +aok +aok +aok +vQm +mHn +aok +aok +aok +aok +aok +aok +aok +aok +aok +aok +aok +qqi +kaT +qqi +qqi +gmu +bHC +bUI +qqi +qqi +syf +liI +liI +sLx +sLx +sLx +liI +liI +tyV +nls +nls +tyV +liI +sLx +sLx +sLx +sLx +"} +(105,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jYq +jZb +ubw +ubw +jZb +jYq +dQa +bLT +ery +fgD +ery +hSM +ery +hSM +nip +ery +ery +oxw +fvb +fvb +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +wRt +wRt +uSn +uSn +uSn +uSn +uSn +liI +liI +sLx +sLx +sLx +sLx +liI +miv +qIM +uSn +uSn +qIM +jkh +lkJ +eEF +ouZ +vkh +vkh +tkK +mLS +lkE +lkE +hAM +kKm +glb +xIF +ljp +dXL +dXL +dXL +dXL +dXL +oJZ +dXL +dXL +dXL +dXL +dXL +fWP +vZK +oBR +fCn +oBR +fWP +lqX +smF +vXb +oFH +fDX +nlt +pZJ +nlt +pZJ +nlt +pZJ +luz +eJC +aaO +sNr +eKE +cbp +luz +hvJ +tJP +eZJ +tJP +fDX +prk +otZ +rMf +uVO +hfi +prk +nzr +jdc +fDX +apf +apf +ebw +fWP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +dmP +qqi +qqi +qqi +qqi +lRF +prx +prx +prx +wJE +qqi +qqi +qqi +qqi +qqi +qqi +qqi +aok +hDt +vQm +gnq +sDJ +aok +dqa +prx +prx +dqa +prx +tCL +aiF +qqi +qqi +qqi +qqi +qqi +bUI +qqi +bUI +qqi +qqi +liI +liI +liI +sLx +sLx +sLx +sLx +liI +liI +nls +dKa +nls +nls +liI +sLx +sLx +sLx +sLx +"} +(106,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jYq +jYq +jYq +jYq +jYq +jYq +ifh +ery +iKg +ery +ery +nip +lnD +ery +ery +nip +lnD +fvb +fvb +inc +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +miv +qIM +miv +riX +uSn +uSn +uSn +uSn +qIM +wRt +wRt +uSn +miv +qIM +uSn +uSn +miv +liI +sLx +sLx +sLx +sLx +liI +liI +uSn +liI +liI +liI +jXr +ioH +sQl +uoS +qUH +jXr +tIf +bCq +xIF +jXr +syy +spH +sWn +eSz +jXr +ncm +evh +vKl +ncm +ncm +dXL +dXL +dXL +dXL +dXL +dXL +fWP +rRn +jRu +sVn +sVn +sPT +cpC +hNT +tJP +miM +rxM +iKN +hvx +iSx +wZE +vfc +iDB +luz +eKE +sNr +vjf +sNr +sNr +luz +ssm +tJP +dDH +rfq +iKj +prk +prk +gUJ +uSz +prk +prk +elT +wSr +fDX +apf +vpb +vpb +apf +apf +apf +iSK +iSK +iSK +apf +apf +apf +qqi +qqi +qqi +bUI +lRF +prx +prx +tmQ +wJE +qqi +tCL +qqi +tCL +qqi +bUI +qqi +cdG +sDJ +uuR +xeM +vQm +cdG +prx +tmQ +prx +prx +prx +prx +bTE +qqi +qqi +qqi +qqi +qqi +bUI +qqi +gRu +gRu +gRu +gRu +gRu +gRu +gRu +gRu +sLx +sLx +sLx +liI +liI +nls +dKa +nls +liI +sLx +sLx +sLx +sLx +"} +(107,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jYq +nPC +eCd +tLB +gwS +jYq +dQa +hSM +ery +mlH +ery +hSM +ery +fgD +tog +hXk +jYq +fvb +oFt +fvb +oFt +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +uSn +uSn +uSn +uSn +uSn +uSn +miv +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +liI +liI +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +sLx +sLx +jXr +lkJ +lkJ +oNi +fRA +jXr +xWv +lvT +mzh +jXr +syy +wfw +uke +eSz +jXr +bBo +mWd +ulc +tzu +ncm +dXL +dXL +dXL +dXL +dXL +dXL +fWP +oBR +cAp +cAp +oBR +fWP +jYf +wjW +cVe +eZJ +xeq +xEn +hQl +rXC +hQl +hQl +iDB +wUH +uNW +pas +paM +eos +uNW +luz +cRu +waV +tYQ +kSX +kvg +tkB +wcB +ffx +wcB +owg +wcn +lqX +ozJ +iKj +apf +gmx +muX +kQS +muX +dgX +tBS +muX +uAE +xjg +bbz +apf +qqi +kaT +qqi +qqi +lRF +dqa +prx +prx +wJE +kaT +prx +prx +prx +aiF +qqi +qqi +cdG +nqO +sDJ +jtX +nqO +cdG +prx +prx +prx +prx +prx +prx +tCL +tCL +qqi +qqi +qqi +qqi +qqi +qqi +gRu +sgN +ivx +qyn +iWe +ivx +qyn +gRu +sLx +sLx +sLx +sLx +liI +nls +tyV +nls +liI +sLx +sLx +sLx +sLx +"} +(108,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jYq +pLZ +lvC +ery +tAA +jYq +dQa +ery +ery +ery +ery +ery +tog +ery +ery +jPF +jYq +fvb +fvb +fvb +fvb +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +uSn +miv +uSn +liI +liI +liI +liI +liI +uSn +uSn +uSn +uSn +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +ioH +lkJ +piO +uwF +jXr +xWv +lTh +xIF +jXr +syy +ksT +rBk +cac +jXr +kLw +bLo +izI +wns +ncm +ncm +ncm +ncm +bBf +dXL +dXL +dqk +dqk +dqk +dqk +dqk +dqk +dqk +dqk +lqX +pHe +ejG +nlt +pZJ +nlt +pZJ +nlt +pZJ +luz +kJE +tlY +tYs +lJr +sNr +luz +hqt +saR +jdc +uTu +fDX +tTL +rao +ffx +tTL +ukQ +btJ +lqX +jHM +fDX +iSK +xjg +qsr +dkP +dXs +pkZ +ujj +plO +bPK +ixI +dtU +apf +qqi +qqi +qqi +qqi +lRF +prx +prx +prx +wJE +tCL +prx +bnV +prx +tCL +qqi +qqi +aok +oia +vQm +spL +wka +aok +prx +prx +prx +apS +prx +prx +vMA +tCL +tCL +qqi +kaT +qqi +bUI +kaT +lDa +ivx +iWe +tKX +dpL +qyn +ivx +gRu +sLx +sLx +sLx +liI +liI +nls +nls +nls +liI +sLx +sLx +sLx +sLx +"} +(109,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jYq +pLZ +lvC +nip +lnD +gRr +nip +fgD +ery +bLT +ery +tPe +aYX +bLT +ery +qhn +jYq +fvb +fvb +fvb +fvb +fvb +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +liI +sLx +sLx +sLx +liI +liI +wRt +tEe +uSn +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +lkJ +lkJ +dLr +lkJ +jXr +dDl +mCM +xIF +jXr +wVy +jEN +qFB +idq +jXr +uig +iuu +hRh +eLL +wFr +hEa +pAu +ncm +dXL +dXL +dXL +dqk +vfS +ltc +jJi +lXp +fof +dCh +dqk +lqX +lHO +jwh +nlt +pKu +nlt +pKu +nlt +pKu +luz +apB +kga +wmM +wiP +sNr +luz +ect +kSX +eZJ +hLb +aui +aMD +dnu +fcE +aMq +bim +fmV +ifK +jdc +fDX +iSK +muX +cAV +ioE +nSd +muX +gYN +nSd +kQS +cmh +jdg +apf +qqi +qqi +qqi +qqi +lRF +prx +prx +prx +wJE +tCL +prx +prx +prx +prx +tCL +qqi +cdG +bnC +vQm +gnq +vPJ +cdG +prx +prx +prx +prx +prx +prx +prx +prx +tCL +tCL +tCL +qqi +qqi +qqi +gRu +qyn +hIg +ivx +ivx +sKO +iWe +gRu +sLx +liI +liI +liI +nls +nls +nls +nls +liI +sLx +sLx +sLx +sLx +"} +(110,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jYq +pLZ +lvC +lvC +jmL +jYq +dQa +nip +cjr +ery +ery +uOh +sfR +kmw +kmw +pfP +jYq +fvb +fvb +fvb +fvb +fvb +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +wRt +wRt +uSn +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +ioH +rTZ +otF +njU +jXr +jXV +vSM +xIF +jXr +tWj +oND +fNE +fqU +jXr +xCS +sXK +auY +fjK +dcH +auY +nxz +ncm +dXL +dXL +dXL +dqk +eFP +bcc +wTR +iko +wpG +byz +tGi +lqX +eZJ +fDX +pMV +pMV +pMV +pMV +pMV +pMV +luz +glm +qys +sNr +dsm +cJB +luz +aCC +tJP +eZJ +swJ +fDX +nMx +lCK +szU +xgA +etR +rjo +lqX +eZJ +iKj +iSK +muX +cAV +ioE +gJX +muX +gYN +nTi +muX +iEx +muX +iSK +qqi +qqi +qqi +bUI +lRF +prx +prx +tmQ +wJE +qqi +prx +tCL +qqi +tCL +bUI +qqi +cdG +cPN +uXk +hzr +vQm +cdG +prx +tmQ +prx +prx +prx +prx +tmQ +prx +prx +prx +tCL +gRu +gRu +gRu +gRu +gRu +gRu +gRu +hIg +ivx +dBB +gRu +liI +liI +nls +dKa +nls +nls +dKa +sBa +liI +sLx +sLx +sLx +sLx +"} +(111,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jYq +iwO +fiX +nQd +axS +oDK +aRe +kmw +ndZ +vLF +kmw +kmw +kOb +jYq +jYq +jYq +jYq +fvb +oFt +inc +oFt +fvb +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +uSn +uSn +miv +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ola +ola +ola +ola +ola +ola +epd +koT +xIF +jXr +jXr +jXr +jXr +jXr +jXr +jFO +gVh +qAO +krN +paL +cJU +fcm +vKl +cyC +dXL +dXL +dqk +vdT +jTp +wpG +gbG +jTp +lyw +dqk +lqX +eZJ +fDX +miT +vDj +xMr +oqu +xLv +shx +luz +dja +dzt +sNr +sLM +cLb +luz +kiG +mfS +nPS +epa +olA +mBd +sHT +jSo +lsj +mBd +wSa +iSu +meZ +fDX +apf +qIr +cAV +ioE +ntN +xjg +qME +qVN +jtd +pFl +uRb +iSK +qqi +kaT +qqi +qqi +lRF +dqa +prx +prx +wJE +aiF +qqi +qqi +qqi +kaT +qqi +qqi +aok +sDJ +vQm +gnq +sDJ +aok +dqa +prx +prx +prx +prx +prx +prx +prx +prx +prx +prx +gRu +uCB +dFi +tKM +lyE +efO +gRu +qyn +tjE +ivx +gRu +liI +nls +dKa +tyV +nls +nls +tyV +liI +liI +sLx +sLx +sLx +sLx +"} +(112,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jYq +jYq +jYq +wmB +rVy +mHX +rVy +jYq +jYq +jYq +jYq +jYq +jYq +jYq +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +miv +uSn +uSn +uSn +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ola +sSD +lnq +qZK +haN +ola +xfC +wrJ +cXs +aXI +lve +lve +tRr +fnq +cRb +rDA +dYX +fnd +nAA +hWu +oTq +mgB +evh +sGK +dXL +dXL +owW +eFP +wpG +wpG +tvj +eSx +tGI +dqk +lqX +oxV +aBN +miT +xdi +xLv +diJ +dOi +oqu +luz +luz +luz +sNr +pJh +luz +luz +qMc +tJP +jdc +hLb +dPS +hkv +qyq +sse +uuA +efS +ibl +lqX +eZJ +ejG +apf +qzj +hTd +lhk +nSd +kQS +gYN +ntN +muX +vTX +lWe +iSK +qqi +qqi +qqi +bUI +lRF +prx +prx +prx +wJE +qqi +qqi +qqi +qqi +qqi +qqi +ixk +ixk +ixk +oSp +iTh +ixk +ixk +ixk +ixk +ixk +dqa +prx +prx +dqa +prx +prx +prx +dqa +gRu +lyE +gLb +lyE +lyE +jsq +gRu +qyn +hIg +niP +gRu +liI +tyV +nls +nls +nls +nls +liI +liI +sLx +sLx +sLx +sLx +sLx +"} +(113,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +oFt +fvb +fvb +fvb +liI +sLx +sLx +sLx +sLx +sLx +liI +fvb +oFt +fvb +fvb +fvb +fvb +fvb +fvb +oFt +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +uSn +uSn +miv +uSn +uSn +uSn +miv +uSn +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ola +aGo +mLW +gri +kxn +pQV +jEN +jgw +spH +qFB +cep +wyO +oYr +jEN +nRY +wXC +jVr +wSS +wXC +dfW +nRY +his +ncm +dXL +rSU +dXL +owW +eFP +nYW +nYW +wkN +iko +wpG +dTg +tJP +eZJ +fDX +pMV +aOh +dTZ +dXk +uUC +oqu +pMV +hgQ +uHE +tJP +jHM +vLQ +uHE +qgu +tJP +vJQ +sno +fDX +tTd +hkv +vKv +xTh +xnk +sse +lqX +rwl +fDX +iSK +muX +cAV +mBH +ntN +muX +gYN +nTi +muX +iEx +kQS +iSK +qqi +qqi +qqi +qqi +lRF +prx +prx +prx +wJE +qqi +qqi +qqi +qqi +qqi +qqi +ixk +gJA +fvO +oSp +pFz +cMq +cMq +fvO +mJH +pQR +prx +prx +prx +prx +prx +prx +prx +prx +gRu +lyE +lyE +qFg +atg +gLb +gRu +gRu +dyU +gRu +gRu +gRu +gRu +rHz +rHz +gRu +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +"} +(114,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +fvb +fvb +fvb +liI +sLx +sLx +sLx +sLx +sLx +liI +liI +fvb +fvb +fvb +fvb +fvb +fvb +fvb +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +miv +qIM +uSn +uSn +uSn +uSn +uSn +qIM +miv +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ola +qZK +stK +dxO +npo +npo +jEN +aac +dhL +eEP +aOR +ibH +uqL +emS +ibH +ibH +ibH +uCL +bsG +muP +pzO +jVC +ncm +mqf +dXL +dXL +owW +waz +iIW +iIW +vLI +eFI +tjn +tPf +rxM +kJW +rxM +xlS +iDW +guS +oKA +rwH +xNG +miT +lqX +saR +cEc +eZJ +tJP +cdc +eMN +tJP +pki +xMn +wfL +xID +kxp +nUB +kxp +oGj +iVY +lqX +ozJ +fDX +iSK +kQS +cAV +mBH +qVN +kQS +gYN +qVN +muX +cmh +muX +apf +qqi +qqi +qqi +qqi +lRF +prx +prx +prx +wJE +qqi +qqi +qqi +tCL +tCL +tCL +ixk +pHS +oSp +pIH +jgq +oSp +jbb +pIH +deg +pQR +prx +prx +prx +prx +prx +prx +prx +prx +gRu +vRQ +qXu +fOk +lyE +hjN +lyE +lyE +hjN +lyE +lyE +hNF +lyE +hjN +qFg +gRu +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(115,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +fvb +hch +fvb +oFt +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +fvb +fvb +vEX +fvb +oFt +fvb +fvb +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +uSn +uSn +miv +uSn +uSn +uSn +miv +uSn +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ola +pgJ +uZt +cww +uXy +ola +qdF +kYd +jEN +jEN +tdd +ibH +pdA +ruI +jRA +eri +ibH +ibH +ibH +ibH +ncm +ncm +ncm +dXL +dXL +dXL +owW +eFP +wpG +wpG +gbG +wpG +tZZ +dqk +hvJ +eZJ +aBN +pMV +smP +dTZ +xNG +wrB +wVL +miT +lqX +yhD +rxM +leH +rxM +rxM +vQF +qMk +iGD +oHw +rVM +ukQ +oEi +oEi +wHv +oEi +fmV +kAe +eZJ +fDX +iSK +tBS +cZf +pqv +qZB +eZU +tUZ +rDw +bmN +utK +cFQ +apf +qqi +kaT +qqi +qqi +lRF +dqa +prx +prx +wJE +kaT +qqi +tCL +tCL +dqa +prx +pQR +kac +oSp +qNn +nix +oSp +uai +oSp +ciY +ixk +prx +prx +prx +prx +bnV +prx +prx +prx +gRu +uRl +uOK +lyE +kzh +fOk +vRQ +vRQ +vAx +qFg +lyE +vRQ +vRQ +nWL +fOk +gRu +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(116,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +fvb +fvb +fvb +fvb +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +fvb +fvb +fvb +eHi +eHi +fvb +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +uSn +uSn +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ola +ola +ola +ola +ola +ola +iQO +aac +kvF +qFB +nUu +ibH +quA +dnJ +cQQ +pcA +oPK +drw +xbn +ibH +feX +feX +feX +rgO +dXL +dXL +dqk +emF +qBU +nYW +rhd +iko +tZZ +dqk +lqX +jdc +fDX +miT +dXk +uUC +dTM +elS +iNP +miT +lqX +jHM +tJP +nlX +tJP +cdc +saR +nlX +nlX +tKr +fDX +lVE +kiM +nxP +kxl +kiM +lwV +lqX +eZJ +kvg +apf +jjF +muX +msl +muX +jdg +kQS +muX +muX +muX +qqb +apf +qqi +qqi +qqi +qqi +lRF +prx +prx +prx +wJE +qqi +qqi +tCL +prx +prx +prx +kci +gJu +oSp +oSp +cve +oSp +oSp +dVi +deg +pQR +dqa +prx +prx +dqa +prx +prx +prx +dqa +gRu +gLb +lyE +lyE +lyE +gPZ +nBr +dFi +uOK +lyE +gPZ +dFi +xjB +uOK +kzh +gRu +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(117,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +fvb +fvb +oFt +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +fvb +fvb +fvb +fvb +eHi +eHi +fvb +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +miv +uSn +uSn +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +xkT +qFB +jJV +bAQ +jXr +xWv +aac +vKM +jEN +leI +hzF +gQg +uKW +uoJ +vwZ +rDQ +ltM +dgV +ibH +feX +ozs +feX +dXL +dXL +dXL +dqk +eFP +iIW +iIW +iIW +iIW +gaE +dqk +lqX +eZJ +oMa +miT +fBp +iXS +pYa +fBp +fBp +pMV +mAQ +eZJ +uNi +wjW +duG +wjW +wjW +fIn +tFx +wjW +jYz +xqM +nvR +ckJ +ckJ +nxP +nmF +xBG +pHe +fDX +apf +apf +ukc +vLl +apf +apf +apf +apf +apf +apf +apf +apf +qqi +qqi +qqi +tCL +lRF +prx +prx +tmQ +wJE +qqi +qqi +bTE +awf +awf +bDn +nlG +nlG +uVM +nlG +piy +dVi +pIH +gyY +vIc +pQR +prx +prx +prx +prx +prx +prx +prx +prx +gRu +wdA +lyE +qEE +vAx +gPZ +dFi +xIT +uOK +lyE +gPZ +dFi +dFi +uOK +fOk +gRu +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(118,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +oFt +fvb +fvb +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +oFt +fvb +fvb +fvb +inc +fvb +fvb +fvb +inc +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +xIv +rvd +iPY +xkT +qme +jEN +bra +hoW +xkC +mzh +owM +hUb +ovW +nNZ +ocI +jrt +aHB +eHs +ibH +feX +feX +ewM +dXL +dXL +dXL +dqk +uOg +nlz +nlz +nlz +law +ilh +dqk +lqX +eZJ +ejG +pMV +mnz +dTZ +wVL +iXS +gbb +pMV +hvJ +ozJ +fDX +hmB +hmB +hmB +mFN +rzS +mFN +pIt +hmB +mFN +pIt +rzS +mFN +hmB +hmB +lqX +bRA +bJP +wnu +uHE +tJP +eZJ +irn +uHE +uHE +grY +uHE +jzL +wNZ +ntm +qqi +qqi +qqi +prx +qvj +nUH +nUH +nUH +wJE +tCL +tCL +awf +awf +bTE +tCL +pQR +kac +udz +vvV +afA +cCU +oSp +cqk +ixk +ixk +prx +prx +prx +prx +prx +prx +prx +prx +gRu +lyE +vAx +lyE +lyE +lyE +gLb +gLb +lyE +atg +lyE +gLb +gLb +lyE +boH +gRu +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(119,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +fvb +inc +fvb +inc +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +fvb +fvb +oFt +fvb +oFt +oFt +fvb +fvb +oFt +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +uSn +riX +miv +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +aoO +spH +bBE +jEN +jEN +qhX +aac +vKM +jEN +srA +owM +hUb +iGt +kyj +vbw +rII +ogz +kJn +owM +dXL +ewM +dXL +dXL +dXL +dXL +dqk +dqk +dqk +dqk +dqk +dqk +dqk +dqk +lqX +ozJ +fDX +pMV +pMV +miT +miT +miT +pMV +pMV +lqX +eZJ +fDX +hmB +eqW +eas +eas +spj +oEk +eas +eas +mjy +kqV +aKw +iNc +vpT +hmB +lqX +miM +rxM +rxM +vqo +xWs +buo +rxM +gBI +epa +rxM +vuN +nlX +fDX +ntm +qqi +kaT +tmQ +bnV +xSb +rOQ +rOQ +rOQ +xSb +aiF +prx +awf +tCL +aiF +qqi +ixk +mvI +itt +dzz +exu +niK +hla +bAE +ixk +prx +prx +prx +prx +prx +prx +prx +prx +prx +gRu +lyE +gPZ +dFi +sXr +hjN +lyE +lyE +lyE +lyE +lyE +atg +qFg +vAx +lyE +gRu +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(120,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +chJ +hoO +hoO +hoO +hoO +hoO +liI +liI +fvb +fvb +oFt +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +fvb +fvb +fvb +fvb +fvb +eHi +eHi +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +uSn +uSn +uSn +liI +liI +sLx +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +wfw +bBE +wfw +ePK +jXr +wXs +mNR +jEN +dhL +tdd +ibH +twu +jCc +ihw +jKL +dGf +kyj +prf +hzF +dXL +dXL +dXL +dXL +dXL +dXL +fWP +czL +eJB +uUX +ebN +lvN +kAX +tvs +lqX +jdc +tJP +jEV +tJP +vLQ +uHE +uHE +uHE +vLQ +tLD +eZJ +fDX +hmB +dcM +eas +lTt +eas +uwI +lTt +wIQ +exh +pCo +gCy +xQD +eas +aaI +tJP +pHe +tJP +uNi +wjW +wjW +wjW +wjW +koX +wjW +tJP +vIw +vxj +pkd +ntm +qqi +qqi +tCL +prx +rOQ +xvR +rQl +geX +xSb +tCL +prx +awf +tCL +qqi +qqi +ixk +sYE +wEx +bmI +vHn +cPR +gES +qnT +ixk +dqa +prx +prx +prx +dqa +prx +prx +prx +dqa +gRu +gRu +gRu +gRu +gRu +gaR +gDy +qFg +lyE +vRQ +vRQ +lyE +lyE +lyE +eOb +gRu +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(121,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +eHi +eHi +eHi +eHi +hoO +hoO +liI +liI +lKh +lKh +lKh +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +fvb +fvb +fvb +eHi +eHi +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +uSn +uSn +miv +uSn +liI +sLx +sLx +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +tqa +iwV +qVp +iRi +jXr +sbQ +aac +qFB +jEN +nUu +ibH +ibH +ibH +ibH +oGl +xaQ +pCw +aTd +hzF +dXL +aaP +dXL +spn +dXL +dXL +fWP +edx +tTL +oEi +oEi +wcB +iTO +bkP +hvJ +miM +rxM +epa +rxM +rxM +rxM +rxM +rxM +aVs +rxM +vaM +aBN +hmB +dcM +eas +byI +kqV +kqV +eas +byI +exh +gCy +iQm +tdL +uwI +rkX +eNA +wSr +cEc +fDX +qCK +htV +duS +dxK +dxK +dxK +svY +tOA +dxK +dxK +dxK +qqi +qqi +qqi +qqi +rOQ +cGT +xmq +nwv +xSb +awf +awf +bDn +tCL +qqi +qqi +ixk +mLO +aKG +bmI +cjw +cPR +gES +bKa +ixk +prx +prx +prx +prx +prx +tCL +tCL +prx +prx +prx +prx +prx +bnV +gRu +iAi +atg +lyE +gPZ +uRl +dFi +uOK +oHT +lyE +gLb +gRu +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(122,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +hoO +eHi +gdW +lcl +fvb +gdW +eHi +hoO +hoO +liI +fvb +fvb +fvb +oFt +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +fvb +fvb +fvb +fvb +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +miv +uSn +qIM +uSn +uSn +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +jEN +xkT +qFB +xkT +jXr +orQ +aac +hSN +mIb +xEc +iFy +jiL +oOb +ibH +mHe +roj +lWm +wIJ +aBc +dXL +dXL +dXL +dXL +dXL +dXL +rgm +edx +xqM +kiM +gef +iOz +qWc +ktk +rpx +cGA +pkd +fWP +vPI +wjW +rqR +duG +wjW +koX +wjW +iFS +kdZ +hmB +dcM +uwI +exh +iTN +doJ +cTj +eas +eas +tmt +tmt +uwI +eas +hmB +lqX +jHM +nlX +fDX +kpH +mwO +lXs +dxK +pYp +oAx +oYS +nCf +rIP +wpc +dxK +qqi +qqi +qqi +qqi +rOQ +bkc +kEp +naI +foG +awf +tmQ +tCL +tCL +qqi +qqi +ixk +kac +fSL +bmI +sgj +cPR +psa +jbb +pbV +prx +prx +prx +tCL +tCL +qqi +qqi +prx +prx +prx +prx +prx +prx +gRu +iAi +kdk +lyE +gPZ +dFi +xIT +uOK +fOk +hjN +lyE +gRu +gRu +gRu +gRu +sLx +sLx +sLx +sLx +sLx +"} +(123,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +hoO +eHi +wwr +hch +fvb +lcl +fvb +oFt +hoO +gTE +hch +fvb +fvb +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +fvb +fvb +oFt +hch +fvb +oFt +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +uSn +uSn +qIM +uSn +uSn +qIM +uSn +uSn +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +hUg +wfw +xkT +bpM +jXr +uyX +krj +dcC +jVK +rKk +wYP +jEN +qhX +uuy +dur +lyO +ruI +fMf +ibH +dXL +dXL +dXL +dXL +dXL +oJZ +rgm +edx +xqM +wNd +kiM +iOz +tzn +nAV +jbA +jbA +jbA +jbA +jbA +jbA +jbA +jbA +jbA +uRM +uRM +efq +uRM +uRM +uRM +msp +mVq +doJ +avf +cTj +eas +uwI +eas +uwI +wIQ +rkw +hmB +lqX +ozJ +tJP +fDX +tFc +jcq +duS +dxK +lYh +clW +vmq +psm +iam +rlt +dxK +qqi +kaT +qqi +qqi +rOQ +ays +xmq +cGT +cGT +dqa +tCL +tCL +qqi +kaT +qqi +ixk +kac +aKG +cPR +fQT +cPR +gES +dVi +oSp +prx +prx +prx +prx +tCL +qqi +qqi +tCL +prx +prx +prx +prx +prx +gRu +iAi +lyE +lyE +lyE +gLb +gLb +kzh +qFg +qFg +lyE +lyE +lyE +atg +gRu +sLx +sLx +sLx +sLx +sLx +"} +(124,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +hoO +eHi +lcl +fvb +dOu +fvb +fvb +fvb +eXq +lKh +fvb +oFt +fvb +fvb +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +fvb +lKh +inc +fvb +fvb +fvb +inc +fvb +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +uSn +uSn +uSn +uSn +miv +uSn +qIM +riX +miv +uSn +qIM +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +jOr +xkT +pHL +xkT +jXr +iIQ +nlR +jtE +jtE +jtE +jtE +kIc +qHh +oUq +bun +gYQ +uij +emm +ibH +dXL +dXL +dXL +dXL +dXL +dXL +rgm +edx +glQ +kiM +blY +iOz +tzn +nAV +jbA +dgS +rMV +ykk +tTr +umS +umS +umS +joz +uRM +wGH +aVl +aVl +cCb +uRM +eas +lTj +doJ +iTN +cTj +eas +mbP +kqV +kqV +mbP +eas +hmB +lqX +eZJ +tJP +fDX +dxK +dxK +dxK +dxK +lYh +oYS +wMT +gmB +pBk +yas +rDu +qqi +qqi +tCL +qqi +rOQ +xmq +cGT +cqK +xSb +tCL +tCL +qqi +qqi +qqi +qqi +ixk +bpt +aKG +kGo +bmI +vMq +jWF +qZE +qZE +kLT +wHq +wHq +mGY +aiF +tCL +tCL +prx +dqa +prx +prx +prx +dqa +gRu +iAi +kFx +gRu +lyE +lyE +fOk +lyE +atg +lyE +nWL +lyE +vRQ +lyE +gRu +sLx +sLx +sLx +sLx +sLx +"} +(125,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +hoO +eHi +fvb +fvb +fvb +inc +fvb +fvb +eXq +lKh +inc +fvb +fvb +inc +liI +sLx +sLx +sLx +sLx +sLx +liI +liI +fvb +oFt +fvb +lKh +fvb +fvb +fvb +fvb +fvb +inc +fvb +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +miv +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +gwr +qFB +gdj +xgE +jXr +urE +eAp +xtH +sJJ +qFB +xIv +jEN +dMl +ibH +nmt +nkL +cRM +uye +ibH +dXL +mqf +dXL +bBf +dXL +dXL +fWP +kir +wcB +bts +bts +aMD +bTg +nAV +jbA +jca +rMV +oTt +xOt +goT +piQ +rhF +fdO +uRM +aCg +ujY +ygU +kGu +uRM +sPu +kSB +xBx +xBx +oge +nON +fGR +qIl +kcw +eoA +aGj +iZf +vqo +wSr +nlX +fDX +dxK +bKA +rIP +hNg +mdI +ajt +aQX +dHm +fSW +oJw +rDu +qqi +qqi +bUI +prx +rOQ +cGT +otI +wWN +xSb +qqi +qqi +qqi +qqi +qqi +qqi +ixk +pHS +aKG +xfr +bmI +pph +cyy +bdW +oSp +prx +prx +prx +biZ +lhM +wHq +wHq +wHq +wHq +wHq +wHq +oBj +awf +awf +awf +vMA +gRu +nBg +atg +lyE +lyE +lyE +lyE +lyE +gPZ +xIV +eAn +gRu +sLx +sLx +sLx +sLx +sLx +"} +(126,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +hoO +eHi +oFt +fvb +inc +oFt +fvb +fvb +eXq +gTE +fvb +fvb +fvb +oFt +liI +liI +sLx +sLx +liI +liI +oFt +fvb +fvb +fvb +fvb +lKh +oFt +fvb +liI +eXq +eXq +eXq +eXq +eXq +hoO +hoO +sLx +sLx +sLx +sLx +sLx +liI +liI +miv +uSn +uSn +uSn +uSn +miv +liI +liI +liI +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +liI +liI +liI +liI +liI +liI +sLx +jXr +jXr +jXr +jXr +jXr +jXr +jXr +jXr +jXr +jXr +jXr +jXr +jXr +xWv +iIV +feW +jEN +gpi +whc +ibH +hzF +hzF +ibH +ibH +dXL +dXL +dXL +dXL +dXL +dXL +fWP +noB +wcB +wcB +wcB +wcB +tzn +nAV +jbA +izW +sIt +rMV +piQ +rhF +rMV +rhF +oTt +uRM +sDN +qGc +gEp +sDN +uRM +wIQ +eas +uwI +eas +uwI +oGo +exh +rBH +rBH +cTj +eas +rkX +cEc +eZJ +tJP +fDX +dxK +gXB +sCM +vmq +oYS +pfW +jiu +xkH +xdx +uoK +dxK +qqi +qqi +prx +bnV +xSb +rOQ +rOQ +rOQ +xSb +qqi +qqi +qqi +qqi +qqi +qqi +ixk +qwC +aKG +cPR +bmI +wgM +vGu +cqk +ixk +prx +prx +prx +prx +prx +tmQ +tmQ +prx +prx +prx +prx +cda +prx +prx +prx +prx +dpC +lyE +lyE +qXu +lyE +lyE +kdk +lyE +lyE +gLb +lyE +gRu +sLx +sLx +sLx +sLx +sLx +"} +(127,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +hoO +eHi +eHi +fvb +fvb +fvb +lcl +fvb +eXq +lKh +fvb +fvb +fvb +fvb +fvb +liI +sLx +liI +liI +fvb +fvb +fvb +inc +fvb +fvb +lKh +inc +liI +liI +hoO +fvb +oFt +fvb +fvb +oFt +hoO +liI +sLx +sLx +sLx +liI +liI +uSn +uSn +uSn +riX +uSn +uSn +liI +liI +sLx +liI +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +liI +liI +jXr +uDV +hJP +uDV +hJP +uDV +hJP +uDV +iou +uDV +hJP +uDV +jXr +aKD +dJy +dhL +jEN +qMB +wiU +stu +wBc +eGw +xJq +jXr +rgm +rgm +fWP +fWP +rgm +rgm +fWP +ndd +qMe +qMe +qMe +qMe +wZn +sFO +jbA +xJO +lCj +lCj +oTt +tKL +jQJ +rDR +rhF +uRM +uhJ +xtT +wBW +sDN +uRM +qox +eas +mgw +eas +eas +oGo +eas +gjz +tmt +eas +vpT +hmB +xCi +eZJ +tJP +aBN +dxK +pRV +fIU +eam +tTh +exm +exm +ntF +rmp +sMM +dxK +qqi +kaT +tCL +prx +qvj +aKH +daH +daH +wJE +kaT +bUI +qqi +qqi +syf +qqi +ixk +kac +wEx +cPR +fQT +cPR +ieG +kNt +ixk +prx +prx +prx +prx +prx +prx +prx +prx +prx +prx +prx +cda +prx +prx +prx +prx +dpC +wKg +sHp +sHp +sHp +sHp +sHp +lyE +lyE +lyE +wdA +gRu +sLx +sLx +sLx +sLx +sLx +"} +(128,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +eHi +eHi +fvb +hch +fvb +eHi +hoO +liI +liI +lKh +lKh +lKh +gTE +liI +liI +liI +fvb +fvb +fvb +fvb +hch +fvb +fvb +liI +liI +liI +sLx +hoO +fvb +fvb +fvb +lcl +fvb +eXq +hoO +hoO +hoO +hoO +liI +uSn +uSn +uSn +uSn +uSn +uSn +liI +liI +sLx +sLx +liI +liI +uSn +miv +uSn +uSn +miv +uSn +uSn +uSn +miv +uSn +uSn +uSn +miv +uSn +jkh +pyw +clM +pyw +uDV +pyw +clM +pyw +uDV +pyw +clM +pyw +jXr +glg +dhL +qFB +dhL +aac +lXZ +sxx +sbR +dJy +leI +jXr +tHH +uHE +bDY +uHE +uHE +uHE +uHE +uHE +wnu +uHE +sKS +wnu +wkd +wNZ +jbA +jbA +jbA +jbA +rhF +tVw +gAD +gqK +rMV +uRM +uhJ +pag +ujY +iWs +uRM +hmB +mFN +mFN +mFN +mFN +hmB +mFN +mFN +mFN +mFN +hmB +hmB +fWP +eZJ +mKa +fWP +dxK +dxK +dxK +dxK +dxK +dxK +dxK +dxK +dxK +dxK +dxK +qqi +qqi +qqi +qqi +lRF +prx +prx +prx +wJE +qqi +qqi +qqi +qqi +qqi +qqi +ixk +pPz +fSL +bmI +dDW +cPR +bMJ +bAE +ixk +dqa +prx +prx +prx +dqa +prx +prx +prx +dqa +bnV +prx +cda +dqa +prx +prx +dqa +gRu +dFi +xjB +ueB +xjB +dFi +sJl +atg +gRu +gRu +gRu +gRu +sLx +sLx +sLx +sLx +sLx +"} +(129,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +eHi +fvb +eHi +eHi +gdW +hoO +sLx +liI +oFt +fvb +fvb +fvb +fvb +fvb +oFt +fvb +fvb +oFt +fvb +fvb +oFt +liI +liI +sLx +sLx +sLx +hoO +hoO +fvb +hch +fvb +inc +fvb +fvb +fvb +fvb +eXq +fvb +uSn +qIM +uSn +uSn +lMJ +liI +liI +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +jkh +uvj +qFB +uOf +tkK +goQ +ftC +goQ +fFI +hCo +tkK +goQ +fxk +tkK +siU +nxI +qsH +pKp +cvn +njh +nSz +dhL +jEN +fWe +tJP +cEc +sVB +nlX +tJP +tJP +tJP +nlX +tJP +tJP +tJP +dsY +eZJ +bJP +uHE +sGa +wNZ +jbA +fTS +gAD +aQC +oVE +goT +uRM +aJl +mWi +ujY +mEw +uRM +wql +kYX +wth +wth +jJB +deu +kYX +wth +hTf +mbf +pel +deu +ejW +kWl +pel +pel +bkX +daj +dpW +tnD +tnD +tnD +tnD +tPB +ykG +daj +qqi +qqi +qqi +qqi +qqi +lRF +prx +prx +prx +wJE +qqi +qqi +qqi +qqi +qqi +qqi +ixk +jKj +jCI +bmI +tcz +cPR +bMJ +qnT +ixk +jkz +jkz +jkz +jkz +ixk +ixk +pQR +pQR +pQR +ixk +ixk +cda +prx +prx +prx +prx +gRu +atg +jlk +lyE +fOk +lyE +qEE +lyE +gRu +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(130,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +gdW +eHi +gdW +hoO +hoO +hoO +sLx +liI +fvb +fvb +inc +fvb +fvb +fvb +fvb +inc +fvb +fvb +fvb +inc +liI +liI +sLx +sLx +sLx +sLx +sLx +hoO +inc +fvb +oFt +fvb +inc +oFt +fvb +fvb +eXq +fvb +lMJ +uSn +uSn +uSn +liI +liI +sLx +sLx +sLx +sLx +sLx +liI +liI +uSn +uSn +qIM +uSn +uSn +uSn +riX +uSn +uSn +uSn +qIM +uSn +riX +vMc +eAF +xkT +sMR +xkT +dhL +ykE +spH +xkT +sMR +xkT +qFB +jEN +jEN +qFB +pzx +loT +uhT +dhL +xIk +jtE +kIc +mil +jtE +rxM +vXb +ace +vXb +rxM +epa +uSN +rxM +vXb +vXb +rxM +rxM +hbo +rxM +epa +fVj +fDX +jbA +gal +kDL +oDN +xKv +rhF +uRM +uRM +uRM +ePZ +uRM +uRM +cTh +puj +jgT +uCO +kbV +pel +puj +nRf +uCO +hPm +fQf +puj +vpj +jgT +kbV +pel +uCO +daj +avQ +wLV +mkX +gwR +vtw +hYc +xty +daj +qqi +qqi +qqi +qqi +qqi +lRF +prx +prx +prx +wJE +aZi +qqi +qqi +qqi +lnx +qqi +ixk +xYJ +nIs +bmI +jXp +cPR +bMJ +hOl +ixk +jkz +sbN +jkz +sbN +ixk +qOx +ktd +ktd +eyg +vWs +ixk +cda +prx +prx +prx +prx +gRu +qad +fOk +kzh +gCq +dhB +sQi +lyE +gRu +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(131,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +hoO +hoO +hoO +sLx +sLx +sLx +liI +liI +fvb +oFt +fvb +oFt +fvb +fvb +fvb +fvb +fvb +fvb +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +tXJ +chJ +fvb +fvb +fvb +fvb +xqJ +fvb +fvb +eXq +fvb +uSn +uSn +uSn +uSn +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +uSn +qIM +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +uSn +miv +jkh +omE +jEN +ngY +jEN +xkT +oYr +xkT +wfw +aBY +jEN +fNC +jXr +xWv +jEN +sWn +jEN +jEN +sxx +jEN +wfG +jEN +oIn +jXr +rgv +wjW +pSe +wjW +wjW +wjW +jkn +wjW +duG +wjW +oLT +iFS +wjW +wjW +cVe +eZJ +fDX +jbA +gAE +rjH +nzQ +eQZ +mJc +jbA +qvZ +rhF +oDN +rMV +olj +pel +nzk +nRf +jgT +kbV +lpb +puj +jgT +nRf +kbV +pel +puj +aOZ +nRf +kbV +lpb +fae +daj +lHk +afI +afI +lne +afI +afI +xty +anb +qqi +qqi +dvf +bqd +bqd +nNj +dqa +prx +prx +wJE +kaT +qqi +qqi +qqi +kaT +qqi +ixk +eZg +tWW +eSp +ios +eSp +lgc +fjp +ixk +jkz +jkz +jkz +jkz +ixk +uWZ +kRL +kij +xLt +ktd +pQR +ajr +prx +prx +prx +bnV +gRu +peJ +guj +xFM +imI +ciV +wmd +wmd +gRu +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(132,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +fvb +fvb +fvb +hch +fvb +fvb +oFt +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +fvb +lcl +fvb +fvb +fvb +fvb +oXX +fvb +uSn +uSn +uSn +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +miv +uSn +uSn +uSn +miv +uSn +uSn +miv +uSn +uSn +miv +liI +liI +jXr +sTb +xkT +szz +xkT +jEN +wrE +jEN +xkT +wAD +rvd +aFk +jXr +dSK +jEN +wgP +oND +svM +rDq +rDq +rDq +aWo +mwX +jXr +rgm +rgm +fWP +fWP +rgm +rgm +eJE +eJE +eJE +jxY +jxY +eJE +eJE +eJE +lqX +ozJ +uZB +jbA +jQJ +sTv +rhF +sTv +nDL +vZW +eQZ +iyC +eQZ +dop +evD +onz +xUm +vkT +mkU +yip +fpK +yip +fae +fae +dqy +pel +eJm +uoj +fae +dqy +pel +pbW +daj +avQ +hYc +pYq +blT +mkX +wLV +nxa +anb +qqi +qqi +lRF +tmQ +prx +prx +prx +prx +prx +wJE +qqi +swm +wAa +xkt +qqi +qqi +ixk +sol +oSp +pIH +oSp +dVi +hkX +oSf +ixk +ixk +pQR +pQR +ixk +ixk +eyg +awu +ktd +mDa +ktd +pQR +cda +dqa +prx +prx +dqa +gRu +gRu +gRu +gRu +gRu +gRu +gRu +gRu +gRu +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(133,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +fvb +fvb +oFt +fvb +fvb +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +fvb +lcl +fvb +fvb +fvb +fvb +gwg +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +uSn +uSn +uSn +uSn +uSn +liI +liI +liI +liI +liI +liI +liI +sLx +jXr +cmU +dhL +aBY +jEN +bUX +lXY +fNC +qhX +aBY +jEN +hOg +jXr +xWv +dJy +ohs +vKM +cEp +vKM +mIb +vNi +jXr +jXr +jXr +dXL +dXL +dXL +spn +dXL +dXL +eJE +tiy +kUu +kUu +qbd +lVH +lQD +eJE +sUN +cxt +ryH +jbA +mZv +rMV +piQ +rMV +osr +jbA +rhF +vfm +mFA +rhF +vfm +wql +pel +mBe +jJj +dqz +jIf +uJL +pel +jJB +kYX +pel +mBe +tec +pel +pel +pel +oEj +daj +rFW +wzO +qfP +jyM +mRK +afI +aLJ +anb +qqi +qqi +lRF +prx +tmQ +prx +prx +prx +prx +wJE +qqi +lKJ +dxq +kHo +qqi +qqi +ixk +sol +oSp +oSp +gJu +ovA +mVv +qnT +ixk +lID +eXR +fvO +fvO +ixk +iuh +bFw +mDa +sum +vWs +pQR +cda +prx +prx +prx +prx +prx +tCL +aiF +qqi +qqi +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(134,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +fvb +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +oFt +fvb +fvb +oFt +fvb +fvb +hoO +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +uSn +uSn +uSn +uSn +uSn +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +jXr +tOL +iif +tOL +jXr +jXr +jXr +tOL +iif +tOL +jXr +jXr +qLA +jEN +byr +ktc +xWg +spH +naC +jEN +jXr +dXL +spn +dXL +dXL +dXL +dXL +dXL +dXL +jxY +hnf +wdD +iAb +rEs +isD +weO +jxY +sUN +rCV +ryH +jbA +gAD +rhF +rhF +rhF +kFj +jbA +rhF +xTS +gwK +rMV +olj +pel +yip +mVW +mVW +yip +pel +fml +pbW +pbW +jAk +lpb +dqy +tFv +iJt +yip +pel +cZt +daj +avQ +lvG +wLV +hbE +awG +wLV +xty +daj +qqi +qqi +lRF +prx +prx +prx +prx +prx +prx +wJE +qqi +qea +vXp +rqe +qqi +qqi +ixk +erJ +lQJ +ovA +qmY +pIH +aNi +oSp +kci +dVi +oSp +xoE +eDn +dPl +vWs +ktd +rdC +tvd +esl +pQR +cda +prx +prx +prx +prx +tCL +tCL +qqi +qqi +qqi +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(135,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +fvb +fvb +inc +fvb +hoO +hoO +chJ +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +qIM +uSn +uSn +uSn +uSn +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +ach +qFB +aBY +jEN +ePK +jXr +ach +jEN +aBY +jEN +ePK +jXr +avR +rKk +ohs +vKM +wfw +dhL +jEN +wfw +tOL +dXL +dXL +dXL +ojR +ojR +mqf +dXL +dXL +jxY +mUr +esy +iGH +nHz +oDv +qbz +qgt +iBe +vkz +aHK +jbA +rVS +sTv +rhF +xOt +kFj +jbA +rhF +gAD +mog +oTt +vfm +pel +puj +uCO +jgT +kbV +pel +ixa +nRf +jgT +kbV +pel +puj +aOZ +jgT +kbV +pel +pbW +daj +ewu +tcn +tcn +oly +lne +oqc +oeb +daj +qqi +qqi +tsG +prx +prx +prx +qWH +dCb +dCb +piI +kaT +bUI +qqi +qqi +syf +qqi +ixk +wjH +oSp +hno +ljq +alK +kfN +eJQ +ljq +ljq +tdm +eHh +ljq +ljq +tvd +uKd +nZt +yeH +iCg +ixk +ajr +prx +prx +prx +prx +tCL +qqi +qqi +bUI +qqi +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(136,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +hoO +hoO +mkY +mkY +mkY +mkY +mkY +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +uSn +uSn +miv +uSn +uSn +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +iTd +qdt +dXo +bBE +qft +jXr +iTd +wRW +oUJ +xkT +qft +jXr +nSa +qFB +sMR +lFe +jEN +xfK +qdf +nuQ +jXr +dXL +dXL +dXL +ojR +ojR +dXL +dXL +dXL +jxY +mUr +edt +oKo +nwt +vEp +qWM +qBs +aqS +rCV +wpE +jbA +jca +mRW +oTt +oTt +rMV +jbA +rMV +aWE +srH +rhF +xdB +pel +puj +nRf +jgT +kbV +mBe +ixa +jgT +uCO +kbV +pel +puj +cEt +jgT +kbV +mBe +uCO +daj +daj +daj +daj +sfo +kyB +daj +daj +daj +qqi +qqi +lRF +prx +prx +prx +wJE +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +ixk +dgz +oSp +evy +dVi +ruD +qmY +rRp +ixk +cmt +tgi +iHE +mtF +ixk +whX +ktd +eyg +ixk +ixk +ixk +cda +prx +prx +prx +prx +tCL +tCL +qqi +qqi +qqi +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(137,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +hoO +mkY +mkY +mkY +bce +mkY +mkY +mkY +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +riX +uSn +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +tFP +oYr +xRu +wfw +puZ +jXr +cHs +oYr +iKU +qFB +puZ +jXr +feW +jEN +usV +jXr +jXr +tOL +tOL +jts +jXr +dXL +dXL +dXL +dXL +oJZ +spn +dXL +dXL +eJE +iHL +txq +ckW +mEt +vEp +weO +eJE +vdP +iLe +ryH +jbA +aIr +rhF +uQM +rMV +rhF +tmj +goT +rhF +oDN +rhF +vfm +jJB +yip +fae +fae +dRF +mbf +clV +iiH +ikv +pfH +diZ +pfH +vid +mkU +bXH +mbf +eVL +daj +nHu +cBU +soT +sfo +tZY +cBU +nwh +quO +qqi +qqi +lRF +prx +prx +prx +wJE +qqi +qqi +qqi +qqi +qqi +lnx +qqi +qqi +qqi +ixk +scx +jzW +mVv +hBp +tgi +xhU +uaI +ixk +ixk +pQR +pQR +ixk +ixk +jDZ +eyg +ktd +dPl +qqi +tCL +cda +prx +prx +prx +prx +prx +tCL +qqi +qqi +qqi +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(138,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +nMf +mkY +nMf +mkY +mkY +mkY +snd +mkY +mkY +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +qIM +uSn +uSn +qIM +uSn +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +xIv +ugA +dqo +gNw +wAs +jXr +xIv +ykE +dqo +rvd +wAs +jXr +rlP +jEN +wAD +xIF +tOL +dXL +spn +aaP +dXL +dXL +spn +dXL +dXL +dXL +spn +dXL +dXL +eJE +opQ +txq +rtH +mEt +vEp +weO +eJE +sUN +rCV +uGq +jbA +byG +afM +sBI +sBI +vKF +jbA +wpd +eld +gWm +myV +cgO +gSz +fKE +fKE +fKE +fKE +fKE +fKE +hdi +fKE +fKE +iqw +fKE +hdi +dIo +pVZ +uET +duD +fre +rXL +rXL +sHC +rbA +cyD +puv +nFx +cEK +qqi +qqi +tsG +prx +tmQ +prx +vNf +qqi +qqi +qqi +kaT +qqi +qqi +qqi +kaT +qqi +ixk +ixk +pQR +seu +pQR +ixk +ixk +ixk +ixk +qqi +qqi +qqi +qqi +ixk +ehG +der +bvC +oSp +qqi +tCL +cLU +wHq +wHq +wHq +wHq +mGY +tCL +qqi +qqi +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(139,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +mkY +mkY +cqx +mkY +mkY +nZf +mkY +cqx +mkY +mkY +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +uSn +uSn +uSn +uSn +uSn +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +lpY +uhT +fdV +qFB +hRl +jXr +lpY +uhT +fdV +jEN +hvj +jXr +xWv +spH +uhm +nVG +jXr +dXL +dXL +dXL +dXL +dXL +dXL +dXL +dXL +dXL +ojR +ojR +dXL +jxY +mUr +txq +nwt +ckW +vEp +weO +jxY +sUN +rCV +aHK +jbA +jbA +jbA +jbA +kFE +kFE +kFE +kFE +kFE +kFE +kFE +kFE +usB +yip +mVW +mVW +yip +pel +cNW +gEi +yip +sQM +pel +yip +dUT +inK +yip +pel +jef +daj +exk +nHs +nHO +knE +tZY +kzl +uzZ +quO +qqi +qqi +lRF +prx +tmQ +prx +wJE +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +ixk +odS +jpw +uKh +dYO +dpx +ixk +qqi +qqi +qqi +qqi +qqi +qqi +ixk +ixk +ixk +ixk +ixk +qqi +qqi +tCL +prx +prx +prx +prx +cda +tCL +tCL +qqi +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(140,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ohx +ohx +vZC +ohx +ohx +vZC +ohx +liI +liI +liI +liI +liI +liI +liI +jXr +jXr +jXr +jXr +jXr +jXr +jXr +jXr +jXr +jXr +jXr +jXr +jXr +jXr +xWv +dJy +oYr +tMn +jXr +dXL +dXL +dXL +ojR +ojR +dXL +dXL +dXL +dXL +ojR +ojR +dXL +qgt +mUr +tGN +qOK +rKc +jIi +weO +jxY +sUN +ame +vhQ +cKe +cQM +iLz +jCt +kJz +iAo +kXc +sGS +hko +kXc +lNr +kJz +pfG +puj +uCO +nRf +jnS +stN +yip +nuE +rJT +uCO +cHg +yip +sTx +nbc +nbc +wZy +uvk +daj +daj +daj +daj +knE +tbt +daj +daj +daj +qqi +qqi +lRF +prx +prx +tmQ +wJE +qqi +qqi +qqi +qqi +bUI +qqi +qqi +bUI +qqi +ixk +jto +jlg +qqy +xJy +pHx +ixk +qqi +qqi +bUI +qqi +qqi +qqi +qqi +qqi +qqi +bUI +qqi +qqi +qqi +tCL +prx +prx +prx +prx +cda +prx +tCL +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(141,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +bce +mkY +mkY +mkY +mkY +mkY +bce +mkY +mkY +bce +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +liI +jXr +rua +bZZ +nqk +bZZ +bZZ +gsE +uOS +rAg +bZZ +rCG +jLz +tFA +jXr +oQr +jEN +kuN +gZr +jts +dXL +dXL +oJZ +ojR +ojR +dXL +dXL +dXL +dXL +dXL +dXL +aaP +jxY +mUr +hAK +oDv +isD +rEs +qbz +jxY +mLv +rdo +cEQ +cEQ +pWG +fCO +mze +kJz +vZF +qOV +krx +qOV +vgg +kXc +kJz +kJz +kJz +kJz +kJz +kJz +hCI +kcK +faN +hCI +hCI +hCI +xKA +uIp +hCI +oky +oky +oky +oky +bsR +bsR +bsR +gZV +hWD +bsR +bsR +oky +upe +upe +upe +upe +upe +upe +upe +upe +upe +qqi +qqi +qqi +qqi +qqi +qqi +qqi +ixk +mKM +dYO +gGM +ylQ +pHx +ixk +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +tCL +tCL +prx +prx +prx +cda +prx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(142,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +nMf +mkY +mkY +nMf +mkY +mkY +mkY +nMf +mkY +mkY +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +jkh +xWv +jEN +jEN +jEN +qFB +jEN +jEN +jEN +jEN +jEN +qFB +jEN +eXu +qFB +sIK +oYr +srA +tOL +dXL +bBf +dXL +dXL +dXL +vdp +ewM +dXL +dXL +bBf +dXL +dXL +eJE +dGG +oGS +jIi +upR +kTn +rik +eJE +dCk +pzD +pzD +pzD +jBa +nFG +mIJ +mwD +kXc +qOV +txL +qOV +kXc +ulJ +wlV +kXc +kXc +iAo +uYR +kJz +wjt +vvA +rCV +hCI +gyi +ibG +kcK +rCV +ixl +oky +lcZ +gZV +gZV +sXZ +sXZ +dHG +kWS +qwj +qwj +qwj +dUp +upe +mIz +xew +mQo +xHY +ufs +xHY +pIT +upe +qqi +qqi +qqi +qqi +qqi +qqi +qqi +ixk +dje +jlg +pop +dYO +mKM +ixk +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +tCL +prx +prx +prx +cda +prx +prx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(143,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +mkY +mkY +kOm +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +vZC +weR +ohx +vZC +ohx +ohx +ohx +vZC +ohx +ohx +weR +vZC +vMc +jXV +jEN +jEN +idb +tkK +xwZ +tkK +jfU +tkK +tkK +tkK +jfU +tkK +bac +oPo +pPI +egs +tOL +dXL +dXL +dXL +dXL +ewM +feX +feX +dXL +dXL +dXL +dXL +dXL +eJE +eJE +bsz +ieL +vGR +odi +odi +odi +odi +odi +odi +odi +njo +ame +feY +kEH +vgg +uhc +kXc +qOV +iAo +kXc +kCB +xom +jkx +kXc +mXh +kJz +sUN +kcK +oWD +hCI +kPT +kcK +rlD +esT +ryH +oky +bSZ +uFO +cqG +cqG +cqG +wwb +cqG +cqG +uFO +cqG +cqG +upe +nqW +hnJ +gUT +gje +pNq +kbJ +mQo +upe +qqi +qqi +qqi +qqi +qqi +qqi +qqi +ixk +ixk +pQR +pQR +pQR +ixk +ixk +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +tCL +prx +prx +prx +cda +prx +prx +bnV +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(144,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +pyI +mkY +mkY +mkY +mkY +cqx +bce +mkY +mkY +mkY +mkY +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ohx +ohx +vFH +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +vMc +lUk +xsU +oND +oND +oND +oYr +oND +pTM +eFT +pCq +oND +iwv +jXr +xWv +jEN +oYr +aqf +jXr +dXL +dXL +dXL +ewM +feX +ozs +feX +feX +ewM +dXL +dXL +dXL +hCI +eDj +rCV +kcK +odi +xGm +wXk +wXk +wXk +wXk +ttq +odi +njo +aSu +kWs +mwD +kXc +vgg +kXc +kXc +vgg +sGS +ojY +ozV +ojY +kXc +kJz +kJz +sUN +pWv +kHl +hCI +sUN +kcK +pdg +ngw +ryH +sSZ +cqG +cqG +xca +uFO +cqG +wwb +cqG +xca +hWD +cqG +cqG +upe +nqW +ikt +omB +cVf +deA +hUj +nqW +upe +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +liI +liI +liI +liI +liI +liI +qqi +qqi +qqi +tCL +prx +prx +prx +cda +prx +prx +prx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(145,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +hoO +mkY +mkY +mkY +mkY +bce +mkY +mkY +mkY +mkY +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +liI +liI +jXr +jXr +jXr +jXr +jXr +tOL +nQa +tOL +jXr +jXr +jXr +jXr +jXr +jXr +rXI +jEN +wAD +aAN +jXr +kEG +dXL +dXL +dXL +feX +eJo +eJo +dNI +dNI +eJo +eJo +eJo +eJo +ksy +rCV +ryH +odi +mno +wXk +bpU +gYf +bpU +mNV +odi +oJn +udH +aXu +kJz +jkx +qOV +kXc +qOV +vgg +kXc +vos +cIR +vgg +kXc +kJz +wjt +goE +kcK +oWD +hCI +arf +hCI +dzO +vhx +bIT +sSZ +jan +cqG +cqG +hWD +cqG +aMr +cqG +cqG +cqG +cqG +wia +upe +mQo +mhC +vOw +ucZ +vec +nqW +mQo +upe +qqi +qqi +qqi +bUI +qqi +bUI +qqi +qqi +qqi +qqi +bUI +qqi +qqi +qqi +qqi +qqi +bUI +liI +liI +liI +sLx +sLx +sLx +sLx +liI +liI +qqi +bUI +tCL +prx +prx +prx +ajr +prx +prx +prx +prx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(146,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +nMf +mkY +cqx +mkY +nMf +mkY +kOm +nMf +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +liI +liI +liI +liI +liI +liI +sLx +sLx +sLx +jXr +xdg +jEN +xkT +oYr +xkT +jEN +sak +jXr +uzt +tWQ +bZZ +thG +jEN +oYr +xIF +tOL +dXL +spn +dXL +ewM +spn +eJo +hFw +lth +tnI +gfL +gfL +vTp +eJo +vdP +irp +ryH +odi +nKy +nKy +wXk +wXk +wXk +wXk +odi +sUN +mqn +ryH +kJz +lNr +qOV +wWf +qOV +bAx +qOV +iAo +qOV +lNr +kXc +kJz +sUN +kcK +vvA +oWD +cXm +sUN +kcK +pdg +uHF +ryH +sSZ +cqG +cqG +cqG +uFO +cqG +wwb +uFO +cqG +cqG +cqG +cqG +upe +suJ +nqW +nqW +bdH +bbm +mmw +mPc +upe +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +aZi +qqi +qqi +qqi +qqi +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +shm +shm +shm +rAN +bLb +shm +shm +shm +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(147,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +hoO +hoO +nah +nah +nah +hfh +nah +hoO +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +vZC +ohx +ohx +ohx +vZC +ohx +ohx +vZC +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +jEN +qzZ +qdf +dLO +jfU +dNV +xZb +jXr +pBx +qhX +spH +xEt +jEN +sWn +bKc +lpZ +dXL +ojR +ojR +dXL +dXL +eJo +aEN +uyg +cMG +reJ +fhl +pbc +hMi +sUN +rCV +ryH +odi +odi +gbt +ups +ups +ups +qYt +odi +eeh +goz +ryH +mwD +kXc +uhc +kXc +kXc +iAo +qOV +bAH +qOV +iAo +kXc +kJz +sUN +hFn +dCT +wjT +hCI +kPT +eJd +nPM +oJf +lNK +oky +wjM +cqG +cqG +cqG +hWD +wwb +cqG +uFO +cqG +hWD +cqG +upe +jpn +kAz +gUT +mIT +kAz +kAz +dqX +upe +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qqi +swm +wAa +xkt +qqi +qqi +qqi +qqi +qqi +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +shm +shm +rAN +shm +shm +shm +shm +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(148,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +mkY +mkY +mkY +mkY +bce +mkY +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +weR +ohx +ohx +ohx +ohx +ohx +weR +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +oLr +niB +xLX +nFk +xkT +uhT +sBQ +jXr +mVP +wfw +fPp +tTb +tkK +oUJ +xIF +tOL +dXL +ojR +ojR +dXL +dXL +eJo +khg +cOB +ino +fEa +hHk +ccv +hMi +sUN +rCV +aHK +ups +cpA +nKy +nKy +dgM +wXk +bpU +ups +sUN +rCV +ryH +mwD +ulJ +kXc +lNr +kXc +kXc +kXc +lNr +kXc +ulJ +kXc +kJz +sUN +rCV +doq +fsq +hCI +evX +bwN +kcK +eGz +lsb +oky +jmF +cqG +tSq +cqG +cqG +wwb +cqG +xca +cqG +cqG +dUp +upe +eVm +nqW +nqW +rCl +mQo +nqW +myy +upe +qqi +qqi +qqi +qqi +qqi +qqi +lnx +qqi +qqi +lKJ +dxq +kHo +qqi +qqi +qqi +qqi +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +wzd +rAN +shm +shm +shm +shm +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(149,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +mkY +mkY +mkY +mkY +mkY +mkY +mkY +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +ohx +ohx +ohx +ohx +ohx +ohx +ohx +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +bGc +qzZ +wZA +rOL +jEN +xkT +umG +jXr +tIf +wfw +qel +bKj +oND +pCq +czM +jXr +dXL +dXL +dXL +dXL +dXL +eJo +dNI +dNI +eJo +uFi +qIj +nma +hMi +sUN +rCV +gMD +ups +wXk +pmT +oNm +aDe +kIV +tMq +ups +vdP +egI +aHK +mwD +kXc +qOV +kXc +qOV +kXc +kXc +bPz +qOV +kXc +kXc +xwo +sUN +rCV +ryH +wqR +wqR +wqR +wqR +vqg +wqd +wqR +oky +oky +oky +sSZ +sSZ +sSZ +oky +oky +sSZ +sSZ +sSZ +oky +bSf +bSf +bSf +bSf +tfU +uuP +bSf +bSf +bSf +bSf +bSf +qqi +qqi +qqi +qqi +qqi +qqi +qqi +qea +vXp +rqe +qqi +lnx +qqi +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +rAN +shm +shm +shm +shm +shm +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(150,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +mkY +nMf +mkY +mkY +nMf +mkY +mkY +nMf +liI +sLx +sLx +sLx +sLx +sLx +liI +liI +ohx +ohx +ohx +ohx +vZC +ohx +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +jXr +jXr +jXr +jXr +jXr +jXr +jXr +jXr +oQW +jEN +qel +xIF +jXr +jXr +jXr +jXr +dXL +spn +jOU +dXL +spn +cAe +spn +dXL +dNI +ige +jMX +ulj +txc +eJd +eGz +ryH +ups +wXk +wXk +wXk +dgM +mNV +mNV +ups +sUN +hnv +aHK +kJz +iAo +qOV +bAH +kXc +kXc +kXc +kXc +kXc +mBa +mWa +dVH +ncR +tYw +uOa +wqR +bzF +kvA +vKN +axj +jbi +vKN +odu +wqR +vIG +hPP +pWM +hPP +hPP +hPP +hPP +hPP +hPP +mFp +bSf +aNr +sBW +wnI +bEf +oGn +rjD +cXM +cXM +nuk +bSf +qqi +qqi +qqi +liI +liI +qqi +qqi +qqi +qqi +qqi +qqi +qqi +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +rAN +shm +shm +shm +shm +shm +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(151,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +liI +liI +sLx +sLx +sLx +sLx +liI +vZC +ohx +ohx +vZC +ohx +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +dNP +aAc +aAc +lps +jXr +mVP +dJy +utB +xIF +jXr +spn +dXL +dXL +dXL +dXL +dXL +aaP +dXL +dNI +dXL +dXL +dNI +emM +hhg +wgU +adP +cEQ +egI +ryH +ups +wXk +kIV +pNJ +fEd +kIV +wXk +ups +sUN +rCV +uqT +kJz +aNW +uhc +kXc +jfw +jkx +kXc +iAo +qOV +tuC +kXc +kJz +fWC +pvM +tLc +wqR +dfA +fVm +eAB +taF +wuz +vqg +axj +aKu +dVP +cqA +baI +cqA +wQa +cqA +baI +cqA +dVP +cqA +qer +oGn +kZF +hdI +sEa +hdI +oGn +oGn +oGn +fYQ +bSf +qqi +qqi +qqi +liI +liI +liI +liI +liI +qqi +qqi +qqi +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +shm +shm +rAN +bLb +shm +shm +shm +bLb +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(152,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +liI +liI +sLx +sLx +liI +liI +ohx +ohx +ohx +ohx +ohx +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +sxb +qhX +jEN +uCU +jXr +moX +dhL +fLe +pZp +jXr +dXL +dXL +dXL +dXL +dXL +ojR +ojR +dXL +eJo +dNI +dNI +eJo +oyI +vxg +chp +hMi +sUN +rCV +ryH +odi +bpU +gHb +uVn +bQs +bpU +wXk +odi +sUN +rCV +ryH +mwD +gYA +gYA +gYA +qLC +qLC +gYA +nfF +gYA +rBD +kXc +kJz +sUN +mqn +thg +wqR +anl +uDP +gZR +pID +jud +lll +lll +lll +dPQ +weu +weu +dPQ +sVL +dPQ +dPQ +weu +dPQ +dPQ +ils +ils +wvq +mIL +cXM +sua +xIE +kzG +xeu +alV +dhk +ewq +ewq +ewq +liI +liI +sLx +sLx +liI +nUX +ewq +ewq +ewq +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +shm +shm +shm +rAN +shm +shm +shm +shm +shm +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(153,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +bce +mkY +bce +mkY +mkY +mkY +mkY +bce +mkY +ohx +liI +liI +liI +liI +weR +ohx +ohx +weR +ohx +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +maY +maY +maY +sLx +sLx +sLx +sLx +sLx +sLx +sLx +jXr +qrU +jEN +qFB +wUo +jXr +cnA +qFB +oYr +leI +jXr +dXL +dXL +dXL +dXL +mqf +ojR +ojR +dXL +eJo +iGv +lth +ljP +rlC +pil +nfB +hMi +sUN +mqn +ryH +odi +wXk +kIV +pNJ +uiA +kIV +wXk +odi +mLv +mqn +ryH +mwD +rRl +lNr +kXc +kXc +kXc +kXc +bWV +obZ +rfJ +qOV +kJz +hUT +dOb +lNK +wqR +gsL +lgg +mYC +bfk +wuz +axj +ueA +wqR +gpG +sSG +sSG +sSG +ujK +vJi +sSG +sSG +sSG +bPO +bSf +oGn +tfU +aIX +sEa +wSV +oGn +tzC +oGn +xxA +dhk +ewq +ewq +ewq +ewq +liI +sLx +sLx +liI +liI +nUX +ewq +nUX +ewq +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +shm +wzd +shm +shm +shm +shm +rAN +shm +shm +shm +shm +shm +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(154,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +ohx +ohx +liI +liI +ohx +ohx +ohx +ohx +ohx +ohx +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +luQ +maY +maY +luQ +lNW +vJy +sLx +sLx +sLx +sLx +sLx +sLx +jXr +rgs +jEN +sQe +tkK +fEj +tkK +tkK +oUJ +nVG +jXr +spn +dXL +dXL +dXL +dXU +dXL +dXL +spn +eJo +aEN +uyg +xMd +jPE +sql +kAE +hMi +sUN +eGz +aHK +odi +wXk +bpU +wXk +kfV +wXk +dGC +odi +sUN +rCV +ryH +mwD +hFl +iAo +nMm +bTf +bTf +nMm +nxj +kXc +xmN +ean +kJz +vlj +rCV +bBr +wqR +rTn +xbT +qDE +uDP +eUT +ydL +ieH +wqR +wqR +wms +wms +wms +wqR +wqR +wms +wms +wms +wqR +bSf +hFk +dFg +jJz +xUL +bXA +xUL +coG +iWd +eBU +dhk +ewq +ewq +ewq +ewq +liI +liI +sLx +sLx +liI +ewq +ewq +ewq +ewq +ewq +liI +liI +sLx +sLx +sLx +sLx +liI +liI +liI +shm +shm +shm +shm +shm +shm +shm +rAN +shm +shm +shm +wzd +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(155,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +mkY +mkY +nMf +mkY +mkY +nMf +mkY +kOm +nMf +mkY +ohx +ohx +vZC +ohx +ohx +ohx +vZC +ohx +ohx +vZC +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +maY +maY +maY +maY +maY +maY +sLx +sLx +sLx +sLx +sLx +sLx +jXr +iax +jqE +xgE +iEe +jXr +tIf +jEN +jEN +oRU +jXr +dXL +dXL +dXL +dXL +dXL +dXL +dXL +dXL +eJo +kQE +tQS +jrf +hCs +nMU +amz +eJo +sUN +rCV +ryH +odi +qow +wXk +wXk +kfV +wXk +drb +odi +sUN +cxt +ryH +kJz +qOV +qzO +ojY +uwC +wSQ +ojY +qzO +qOV +qOV +qOV +kJz +iRg +lTI +eTs +wqR +fOx +vqg +vqg +gZR +wuz +vqg +ueA +wqR +aif +aif +aif +aif +aif +nKR +oFS +oFS +oFS +oFS +bSf +sHU +tfU +pEa +faD +oGn +hws +lyV +vuV +sAV +dhk +ewq +ewq +ewq +ewq +ewq +liI +liI +sLx +liI +liI +ewq +ewq +ewq +ewq +ewq +liI +liI +liI +sLx +liI +liI +ewq +oxH +oxH +shm +shm +shm +shm +shm +shm +rAN +shm +shm +shm +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(156,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +bce +mkY +ohx +ohx +ohx +ohx +ohx +ohx +vFH +ohx +ohx +ohx +liI +sLx +sLx +sLx +sLx +sLx +sLx +maY +maY +maY +maY +maY +maY +luQ +maY +maY +sLx +sLx +sLx +sLx +jXr +lkz +jEN +qjV +foU +jXr +kID +dhL +dJy +xIF +jXr +dXL +dXL +dXL +oJZ +dXL +dXL +dXL +dXL +eJo +eJo +eJo +eJo +dNI +dNI +eJo +eJo +sUN +rCV +ryH +odi +odi +odi +uNN +uGG +odi +odi +odi +sUN +mqn +oOY +kJz +kJz +kJz +mwD +mwD +mwD +mwD +kJz +kJz +kJz +kJz +kJz +sUN +rCV +thj +wqR +byJ +vqg +sIc +pID +apX +axj +vqg +aKu +aif +aif +ehH +aif +aif +nKR +tQh +nKR +nKR +nKR +eUF +sFq +ivA +ueG +maj +iOu +maj +huH +gVy +tzC +bSf +ewq +ewq +ewq +ewq +ewq +ewq +liI +liI +liI +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +liI +liI +liI +ewq +ewq +oxH +oxH +shm +shm +shm +shm +shm +shm +rAN +shm +shm +shm +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(157,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +bce +ohx +ohx +weR +ohx +ohx +weR +ohx +ohx +weR +ohx +liI +sLx +sLx +sLx +sLx +sLx +maY +maY +maY +maY +tsN +maY +maY +maY +maY +maY +maY +maY +sLx +sLx +jXr +hLl +udn +oZv +blW +jXr +kID +jEN +qFB +xIF +jXr +dXL +ojR +ojR +dXL +dXL +dXL +ojR +dXL +dXL +dXL +dXL +dXL +dXL +dXL +dXL +hCI +sUN +mqn +oWG +ibG +ibG +ibG +kcK +rCV +eTn +ibG +ibG +goE +rCV +vhQ +mQy +mQy +ibG +mQy +ibG +ibG +ibG +ibG +ibG +bNI +ibG +ibG +sTo +rCV +rLi +wqR +ovh +uZY +xUD +uZY +shQ +eaT +ouw +lll +iTJ +kYg +iTJ +iTJ +iTJ +uxu +fhm +nDX +iaJ +jjU +qWX +avV +sOC +psP +bXA +oGn +kvN +lyV +nTr +uWe +bSf +ewq +ewq +ewq +ewq +ewq +ewq +ewq +liI +ewq +ewq +ewq +ewq +nUX +ewq +ewq +ewq +ewq +nUX +ewq +ewq +ewq +ewq +oxH +shm +shm +shm +shm +shm +shm +shm +rAN +shm +shm +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(158,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +ohx +ohx +vZC +ohx +ohx +ohx +vZC +ohx +ohx +vZC +liI +liI +sLx +sLx +sLx +luQ +maY +kqj +maY +maY +maY +hpf +maY +kAD +maY +luQ +maY +maY +luQ +sLx +jXr +jXr +jXr +jXr +jXr +jXr +xOb +qFB +jEN +xIF +jXr +spn +ojR +ojR +dXL +spn +dXL +ojR +ojR +spn +dXL +dXL +dXL +spn +dXL +dXL +hCI +adi +ktX +dCT +pTG +bnm +cEQ +wyR +pEO +dms +dCT +pTG +cEQ +bxB +dCT +dCT +cEQ +bnm +pTG +lsN +cEQ +bnm +lsN +cEQ +pTG +lXd +dCT +dCT +xcl +mnR +wqR +wqR +wqR +wqR +wqR +wqR +wqR +wqR +wqR +afh +aif +aif +aif +aif +mJy +qxs +mJy +mJy +mJy +oGn +cHN +sEa +aIX +xUL +oGn +tyK +tzC +nTr +fYQ +bSf +ewq +nUX +ewq +ewq +ewq +ewq +ewq +ewq +nUX +ewq +ewq +nUX +liI +liI +ewq +ewq +ewq +ewq +nUX +ewq +ewq +ewq +oxH +shm +bLb +shm +shm +shm +shm +bLb +rAN +bLb +shm +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(159,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +nMf +mkY +mkY +nMf +mkY +bce +nMf +mkY +mkY +pyI +mkY +liI +liI +liI +liI +ohx +ohx +ohx +ohx +ohx +ohx +ohx +liI +liI +sLx +sLx +maY +maY +maY +maY +maY +kAD +ujS +jcb +cAS +maY +maY +maY +maY +maY +sLx +sLx +sLx +sLx +sLx +sLx +jXr +sou +oND +fNE +vnz +jXr +kEG +dXL +dXL +dXL +dXL +ewM +dXL +ewM +dXL +hEM +ojR +kEG +dXL +dXL +dXL +hCI +dCk +pzD +pzD +bzl +pzD +pzD +iFl +pzD +nHM +unE +eHk +kcK +kcK +vlM +doq +pzD +oTF +jHN +gRn +ibj +pzD +pzD +pzD +tJE +gRn +pzD +pzD +pzD +lze +oOP +htF +oSI +pGk +oSI +oSI +htF +uLT +oOP +afh +aif +nNx +aif +aif +mJy +jdm +mJy +mJy +nKR +bSf +wDz +oGn +pEa +gMl +gNl +xUL +lyV +nTr +fYQ +dhk +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +liI +liI +liI +liI +ewq +ewq +ewq +ewq +ewq +ewq +ewq +oxH +shm +shm +shm +shm +shm +shm +shm +vyW +shm +oxH +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(160,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +mkY +mkY +mkY +mkY +bce +mkY +bce +mkY +mkY +mkY +mkY +liI +liI +liI +sLx +sLx +liI +liI +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +kAD +maY +maY +maY +maY +maY +maY +maY +wPC +iUE +uWM +kAD +maY +maY +maY +maY +maY +maY +maY +sLx +sLx +sLx +jXr +tOL +tOL +tOL +tOL +jXr +maY +maY +maY +maY +maY +maY +kAD +maY +loZ +rin +rin +maY +maY +maY +fjx +fjx +fjx +fjx +fjx +fjx +fjx +uJK +fWI +uJK +hCI +nCg +wAf +kcK +vvA +hxg +mnR +gLx +gLx +seg +sGg +gLx +fzY +sGg +gLx +gLx +gLx +hCI +kVY +kVY +hCI +oOP +oSI +eeH +oSI +oSI +bLB +oSI +das +oOP +afh +aif +aif +aif +aif +mJy +jdm +mJy +nKR +nKR +bSf +nAf +oGn +aIX +xUL +xUL +xUL +tzC +kna +jZt +dhk +ewq +ewq +ewq +ewq +ewq +ewq +drI +drI +kNw +xvs +xvs +drI +drI +drI +drI +drI +drI +drI +ewq +ewq +ewq +ewq +oxH +oxH +shm +shm +shm +shm +shm +shm +rAN +oxH +oxH +ewq +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(161,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +pyI +mkY +jxu +jxu +bce +mkY +mkY +mkY +mkY +mkY +mkY +liI +liI +sLx +sLx +sLx +sLx +sLx +liI +ohx +ohx +ohx +weR +ohx +ohx +ohx +kAD +kAD +vJy +maY +kAD +maY +maY +maY +kAD +jze +dbI +wOa +maY +maY +lHH +lHH +lNW +maY +maY +vJy +maY +maY +maY +maY +maY +maY +vJy +maY +kAD +maY +tmA +kAD +maY +vJy +maY +loZ +loZ +loZ +loZ +kAD +maY +vJy +maY +fjx +hro +cZZ +cKz +aDQ +fqe +iaP +qEm +mgy +xKA +hCI +oJn +eHk +kcK +eJd +vlM +gGK +gLx +gEt +uht +jTI +fzY +rHM +fzY +lQH +gEt +gLx +jET +oFS +oFS +jET +oOP +oSI +oSI +oSI +oSI +oSI +oSI +oSI +kkz +afh +vJk +aif +aif +aif +sNG +jdm +nKR +oFS +jET +bSf +gHr +oGn +aIX +gjh +nPH +vuV +tzC +oGn +tzC +dhk +ewq +ewq +ewq +ewq +ewq +ewq +drI +rpe +iMU +iMU +wHB +iMU +iMU +iMU +qjg +cfo +iMU +drI +ewq +ewq +ewq +ewq +oxH +oxH +qjk +wIx +wIx +wIx +wIx +wIx +bsf +oxH +ewq +ewq +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(162,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +mkY +mkY +jxu +jxu +mkY +mkY +kOm +mkY +mkY +mkY +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +vZC +ohx +ohx +vZC +vFH +kAD +kAD +luQ +maY +maY +maY +luQ +kAD +maY +maY +luQ +kAD +maY +kAD +luQ +lHH +lHH +maY +luQ +kAD +tsN +maY +luQ +kAD +kAD +lNW +mSb +maY +maY +maY +luQ +maY +gOC +maY +luQ +loZ +loZ +jlh +vSt +maY +maY +maY +luQ +maY +fjx +kWq +wDQ +pwo +eoJ +bQa +iaP +xKA +tju +xKA +hCI +kPT +eHk +qJx +djT +vlM +ryH +gLx +fKn +qTk +gKO +rVn +quy +wEe +gKO +fzY +gLx +oFS +oFS +oFS +oFS +oOP +jum +xbH +xbH +xUb +bVT +mBU +xUb +iWw +afh +aif +ehH +aif +aif +mJy +hfT +nKR +oFS +oFS +bSf +cKF +oGn +fmx +aOo +oCP +jCU +gnl +hdI +tzC +dhk +ewq +ewq +ewq +ewq +ewq +ewq +drI +iMU +wDO +pEW +tyv +iMU +qoa +tRJ +agH +tyv +iMU +xzh +ewq +ewq +ewq +ewq +oxH +shm +rAN +shm +shm +shm +shm +shm +oxH +ewq +ewq +ewq +ewq +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(163,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +hoO +hoO +hoO +sLx +sLx +sLx +sLx +liI +mkY +mkY +mkY +mkY +mkY +nMf +mkY +mkY +mkY +nMf +mkY +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +ohx +ohx +ohx +kAD +kAD +maY +maY +loZ +loZ +loZ +loZ +maY +maY +maY +wjN +maY +maY +maY +ryE +maY +maY +maY +maY +loZ +kAD +maY +sFA +loZ +jqR +vOn +qtE +lZm +gOC +wkR +jcb +fPL +kAD +maY +maY +kAD +loZ +loZ +loZ +maY +maY +lHH +lHH +maY +fjx +bDH +fWG +wuP +jQj +qta +iaP +fPM +kse +wNM +hCI +sUN +bju +coT +guG +oep +ryH +gLx +pxW +oVa +eDa +dwq +mMJ +tby +hWR +pxW +gLx +oFS +oFS +oFS +oFS +oOP +oSI +bLB +oSI +oSI +eeH +oSI +oSI +kkz +aif +aif +aif +nNx +aif +mJy +jdm +nKR +nKR +oFS +bSf +eQN +gNl +enq +oGn +sEa +htp +vuV +sEa +rnc +bSf +ewq +ewq +ewq +ewq +ewq +ewq +drI +iMU +qGK +tyv +vjG +iMU +tyv +tyv +tyv +pEW +rpe +xzh +nUX +ewq +ewq +oxH +oxH +shm +rAN +shm +shm +shm +shm +shm +oxH +ewq +ewq +ewq +ewq +ewq +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(164,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +mkY +uWI +mkY +hoO +sLx +sLx +sLx +sLx +liI +mkY +nMf +mkY +mkY +mkY +nMf +mkY +mkY +mkY +mkY +mkY +mkY +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +sLx +kAD +maY +maY +maY +kAD +loZ +jlh +loZ +kAD +lNW +maY +maY +maY +maY +maY +maY +kAD +kAD +vSt +loZ +oBJ +jWC +rSi +loZ +gyW +kCO +qaO +qlH +bqD +jqR +vOn +qtE +lZm +dpB +maY +maY +rin +oPp +loZ +kAD +kAD +maY +lHH +lHH +maY +fjx +vvJ +kMZ +fjx +fjx +fjx +fjx +cTb +wmq +cTb +hCI +xlO +gjZ +oeO +edE +clm +bBr +gLx +fzY +xAS +kfq +awp +gKO +rVn +kPP +fzY +gLx +oFS +oFS +oFS +oFS +oOP +oSI +oSI +oSI +oSI +oSI +htF +das +oOP +aif +aif +aif +aif +aif +mJy +jdm +mJy +nKR +oFS +bSf +lLj +jCU +jCU +jCU +jCU +khC +xZV +xZV +kNG +bSf +ewq +ewq +ewq +ewq +ewq +ewq +drI +iMU +wHB +iMU +iMU +wHB +iMU +uxP +iMU +iMU +iMU +drI +ewq +ewq +ewq +oxH +shm +shm +rAN +shm +shm +shm +shm +shm +oxH +ewq +ewq +ewq +ewq +ewq +ewq +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(165,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +mkY +mkY +mkY +mkY +hoO +sLx +sLx +sLx +sLx +liI +mkY +mkY +bce +kOm +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +maY +maY +maY +maY +maY +loZ +loZ +loZ +maY +maY +maY +maY +maY +maY +maY +maY +kAD +loZ +loZ +ppD +uev +gld +rqO +dZz +dZz +wQF +vEA +cWT +eBo +kCO +qaO +qlH +bqD +bOX +loZ +maY +lHH +oPp +kAD +maY +maY +maY +tsN +maY +maY +fjx +fmw +kMZ +fjx +vnh +sAG +mMY +jjR +fRE +vqy +hCI +sUN +kcK +lRC +lRC +hxg +ryH +gLx +tzF +eaw +mMJ +thW +gUt +rCw +igU +xLe +gLx +jET +oFS +tQh +jET +oOP +mtR +oSI +pGk +oSI +oSI +oSI +das +oOP +aif +vJk +aif +aif +aif +sNG +jdm +mJy +nKR +rzB +bSf +bSf +bSf +bSf +dhk +dhk +dhk +bSf +bSf +bSf +bSf +cbX +taU +taU +taU +taU +cbX +drI +iMU +iMU +iMU +iMU +iMU +iMU +iMU +wHB +iMU +wHB +drI +ewq +ewq +oxH +oxH +shm +shm +rAN +shm +shm +shm +shm +oxH +oxH +ewq +ewq +ewq +ewq +ewq +ewq +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(166,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +mkY +mkY +bce +mkY +mkY +chJ +hoO +sLx +sLx +liI +liI +mkY +bce +mkY +mkY +mkY +mkY +mkY +mkY +mkY +bce +mkY +mkY +mkY +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +luQ +maY +maY +lNW +luQ +maY +maY +kAD +vSt +kAD +maY +maY +luQ +maY +maY +lNW +luQ +loZ +loZ +deL +lmx +aar +wej +tMP +jVD +cQj +dSD +cKS +cKS +tNA +wQF +vEA +cWT +kcM +pSv +loZ +luQ +maY +kAD +maY +luQ +maY +maY +maY +luQ +maY +fjx +bif +vbY +eBW +fgX +fgX +eSh +fgX +iJj +hKz +hCI +wVU +kcK +kcK +kcK +vlM +aHK +gLx +sxj +uti +gKO +rVn +uSd +pXH +gKO +fKn +gLx +oFS +oFS +oFS +oFS +oOP +oOP +oOP +jvp +jvp +jvp +oOP +oOP +oOP +aif +aif +aif +aif +aif +mJy +jdm +mJy +mJy +mJy +mKq +shm +shm +shm +shm +shm +shm +shm +shm +shm +ryA +shm +oxH +oxH +ewq +ewq +ewq +drI +iMU +pEW +tyv +wDO +iMU +vjG +pEW +tyv +vjG +iMU +xzh +ewq +ewq +oxH +shm +shm +shm +rAN +shm +shm +shm +oxH +oxH +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(167,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +mkY +mkY +mkY +mkY +mkY +mkY +hoO +sLx +sLx +liI +mkY +mkY +mkY +mkY +mkY +mkY +mkY +nMf +mkY +mkY +nMf +bce +mkY +mkY +pyI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +maY +maY +maY +maY +maY +tsN +kAD +maY +kAD +kAD +maY +bKf +maY +maY +maY +qVr +maY +pfN +rqQ +cHH +aGF +eSN +mkx +eqx +ldo +eEG +okK +fJr +vel +rHh +rHx +rtA +iHM +ebl +xPJ +loZ +vJy +maY +maY +maY +maY +maY +maY +maY +maY +maY +fjx +jfZ +gcT +fjx +gRx +bNA +eEm +eEm +ogD +gCp +hCI +mfb +bxP +pzD +blI +vlM +wWI +gLx +cEg +jnK +hWR +dwq +eJp +xLO +oib +sLC +gLx +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +nKR +nKR +nKR +nKR +mJy +mJy +mJy +hfT +mJy +mJy +xTR +shm +shm +shm +shm +bLb +shm +shm +shm +shm +shm +ryA +shm +shm +oxH +oxH +oxH +ewq +drI +wHB +vjG +tyv +qGK +tPp +pEW +vjG +tyv +pEW +rpe +xzh +nUX +ewq +oxH +shm +shm +shm +vyW +shm +shm +oxH +oxH +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(168,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +nMf +kOm +mkY +uWI +mkY +nMf +hoO +hoO +sLx +liI +mkY +mkY +nMf +mkY +mkY +nMf +liI +liI +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +maY +maY +maY +ryE +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +kAD +kAD +nlT +lZA +bmq +ipg +kgs +cQj +wmw +wOB +kfj +eOQ +wSC +kgs +rQT +okK +xgk +okK +ebl +loZ +gyW +maY +maY +maY +lNW +maY +maY +lHH +lHH +maY +maY +fjx +fjx +fjx +fjx +bMy +rqq +kvp +hLR +lsM +gCp +hCI +hCI +hCI +hCI +hCI +rYD +hCI +gLx +sel +agd +gKO +rVn +gKO +rVn +pAa +ogW +gLx +oFS +oFS +oFS +nKR +nKR +nKR +nKR +nKR +nKR +nKR +nKR +nKR +nKR +mJy +mJy +mJy +mJy +mJy +mJy +jdm +mJy +mJy +mJy +ryA +shm +shm +shm +shm +hBE +shm +shm +shm +shm +ryA +shm +shm +shm +shm +oxH +oxH +drI +rpe +iMU +iMU +iMU +wHB +iMU +iMU +iMU +cfo +iMU +drI +ewq +ewq +oxH +shm +shm +shm +rAN +shm +oxH +oxH +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(169,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +mkY +cqx +mkY +mkY +mkY +mkY +mkY +mkY +hoO +hoO +liI +mkY +mkY +mkY +mkY +liI +liI +liI +liI +liI +mkY +mkY +mkY +jxu +jxu +mkY +mkY +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +maY +vJy +maY +maY +maY +fAk +kAD +maY +maY +maY +maY +maY +maY +kAD +ktu +loZ +kAD +eNF +hsO +oNd +lmx +xDD +kHM +ddW +eEG +xgk +eBm +tRU +hwA +rHh +mqC +jcg +vmj +ebl +mvx +loZ +tsN +maY +maY +maY +maY +kAD +lHH +lHH +kAD +maY +cTb +bsB +jZT +jjR +wLK +rqq +mvb +snR +lsM +vMy +vox +fXg +wsX +hCI +fLR +hzQ +hCG +gLx +xLe +dKv +aUP +xLO +gUt +xeY +ngg +xLe +gLx +jET +nKR +oqp +rzB +mJy +mJy +mJy +sNG +nKR +oqp +mJy +sNG +mJy +mJy +sNG +mJy +mJy +mJy +sNG +viJ +iaJ +iaJ +jjU +ldp +wIx +wIx +wIx +syH +wIx +wIx +wIx +wIx +wIx +wIx +wIx +syH +wIx +gbA +shm +oxH +drI +drI +drI +drI +drI +drI +drI +iMU +iMU +iMU +nVy +drI +ewq +ewq +oxH +shm +shm +shm +rAN +shm +oxH +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(170,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +mkY +mkY +mkY +mkY +mkY +nZf +mkY +mkY +mkY +hoO +liI +mkY +mkY +mkY +liI +liI +sLx +sLx +sLx +liI +liI +mkY +mkY +jxu +jxu +mkY +mkY +mkY +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +luQ +maY +maY +maY +nKu +jcb +cAS +maY +qpD +maY +maY +maY +hpf +maY +loZ +jlh +vSt +loZ +loZ +eBn +aGF +nxe +uNw +fwO +wSC +gsR +jkJ +lRa +sXd +mJL +ccx +wuB +bqa +keu +cMo +loZ +luQ +maY +maY +kAD +hpf +kAD +kAD +kAD +hpf +kAD +rrg +mXj +gHu +bNA +jKs +rqq +kvp +kvp +fSm +kWe +pyL +tHX +cII +hCI +fLR +wpF +hCG +gLx +igX +bkv +uCn +mLL +tbp +ljr +fzY +fzY +gLx +oFS +nKR +mJy +mJy +mJy +mJy +mJy +mJy +mJy +mJy +mJy +mJy +mJy +mJy +mJy +mJy +mJy +mJy +mJy +jdm +mJy +mJy +mJy +ryA +shm +shm +shm +shm +shm +shm +shm +shm +shm +szJ +shm +shm +bLb +rAN +shm +oxH +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +oxH +nUX +ewq +ewq +ewq +ewq +oxH +shm +shm +shm +rAN +oxH +oxH +ewq +ewq +ewq +nUX +ewq +ewq +nUX +ewq +ewq +ewq +nUX +ewq +ewq +ewq +sLx +sLx +sLx +sLx +sLx +sLx +"} +(171,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +mkY +mkY +mkY +bce +mkY +mkY +mkY +pyI +mkY +nah +mkY +nMf +mkY +mkY +liI +sLx +sLx +sLx +sLx +sLx +liI +nMf +mkY +mkY +mkY +nMf +mkY +mkY +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +maY +maY +maY +maY +kAD +wPC +iUE +gFR +kAD +maY +maY +maY +maY +maY +maY +loZ +loZ +loZ +loZ +loZ +loZ +cKB +ccx +jdn +tey +pHp +pHp +ccx +wuB +bqa +sVv +vFz +eaV +wfT +bcU +uSi +loZ +maY +maY +kAD +kAD +loZ +loZ +loZ +loZ +loZ +loZ +uXq +bNA +rTc +bNA +bNA +bln +rIs +oSS +nDK +tYR +utS +rTc +vBb +hCI +aQF +fEg +hCG +gLx +cZP +fzY +ewP +wVt +jAv +fzY +ewP +jAd +gLx +nKR +nKR +mJy +mJy +mJy +nKR +nKR +mJy +mJy +mJy +mJy +mJy +mJy +mJy +mJy +mJy +mJy +mJy +nKR +jdm +mJy +mJy +mJy +sRa +sRa +sRa +sRa +qDm +vpx +aMO +sRa +sRa +sRa +sRa +oxH +shm +shm +rAN +shm +oxH +ewq +ewq +ewq +ewq +ewq +ewq +xYw +ewq +ewq +ewq +oxH +xYw +ewq +oxH +oxH +shm +shm +shm +rAN +oxH +ewq +ewq +ewq +sLx +ewq +ewq +nUX +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +sLx +sLx +sLx +sLx +sLx +sLx +"} +(172,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ltX +liI +liI +liI +liI +liI +liI +liI +hoO +mkY +uWI +mkY +mkY +nMf +mkY +mkY +nMf +bce +nah +mkY +mkY +mkY +bce +liI +sLx +sLx +sLx +sLx +sLx +liI +mkY +mkY +mkY +mkY +mkY +mkY +mkY +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +maY +maY +maY +maY +kAD +jze +pjy +wOa +maY +maY +lNW +maY +maY +maY +maY +kAD +kAD +kAD +hpf +loZ +loZ +loZ +wvC +tyh +jqd +loZ +gyW +vFz +eaV +wfT +bcU +kCO +wEw +vtQ +jWh +okm +maY +vJy +kAD +viO +ftW +ftW +ftW +lvf +ftW +bLV +ftW +fgX +sOR +elc +eSh +mBc +uvW +tnA +vxk +jaB +eHc +gHu +bNA +eJV +hCI +hCI +hCI +hCI +gLx +gLx +omU +omU +omU +omU +omU +omU +gLx +gLx +nKR +mJy +lvy +nKR +nKR +nKR +nKR +rzB +nKR +oqp +nKR +rzB +nKR +nKR +rzB +nKR +nKR +nKR +rzB +jdm +mJy +mJy +sNG +sRa +oac +qik +xtV +ifQ +wAx +lHv +efF +wxj +uoT +rwp +oxH +oxH +shm +siv +wIx +qyk +hsG +hsG +hsG +hsG +hsG +hsG +hsG +hsG +hsG +qyk +qyk +hsG +hsG +qyk +wIx +wIx +wIx +wIx +bsf +oxH +ewq +ewq +sLx +sLx +sLx +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +sLx +sLx +sLx +sLx +sLx +sLx +"} +(173,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +mkY +mkY +mkY +iFB +mkY +mkY +mkY +mkY +mkY +nah +mkY +mkY +mkY +mkY +liI +sLx +sLx +sLx +sLx +sLx +liI +liI +mkY +mkY +mkY +kOm +mkY +mkY +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +maY +maY +lNW +maY +maY +maY +kAD +maY +kAD +maY +maY +maY +maY +maY +maY +kAD +maY +maY +kAD +loZ +loZ +vSt +loZ +loZ +vSt +ktu +vSt +kCO +wEw +vtQ +jWh +loZ +loZ +ktu +loZ +loZ +maY +maY +kAD +nHX +loZ +loZ +kAD +kAD +fAk +kAD +maY +rrg +bNA +bNA +eEm +sNC +szj +bln +mPp +hJM +rTc +bNA +xrW +sTy +cTb +kPm +nKR +rzB +nKR +oFS +oFS +jET +oFS +oFS +jET +oFS +nKR +nKR +rzB +mJy +mJy +rzB +iCy +iCy +iCy +vly +vly +vly +iCy +vly +vly +iCy +iCy +nKR +nKR +nKR +nKR +viJ +iaJ +iaJ +iaJ +bnZ +hSR +wpJ +xja +kUH +xnX +lcQ +wvg +seb +xGe +rwp +ewq +oxH +shm +sKH +shm +oxH +ewq +ewq +ewq +ewq +ewq +ewq +ewq +oxH +ewq +ewq +ewq +ewq +ewq +oxH +shm +shm +sKH +shm +oxH +oxH +ewq +ewq +sLx +sLx +sLx +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +sLx +sLx +sLx +sLx +sLx +"} +(174,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +mkY +mkY +mkY +mkY +mkY +gDm +jxu +jxu +mkY +oeT +kOm +mkY +mkY +nMf +liI +sLx +sLx +sLx +sLx +sLx +sLx +liI +mkY +mkY +mkY +mkY +mkY +mkY +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +maY +luQ +maY +maY +maY +luQ +maY +maY +maY +luQ +maY +maY +maY +luQ +maY +maY +maY +luQ +lNW +maY +maY +qpD +maY +maY +kAD +luQ +maY +maY +maY +luQ +maY +maY +maY +luQ +gOC +maY +maY +luQ +kAD +nHX +loZ +hpf +maY +maY +vJy +luQ +maY +cTb +pkc +sdt +tFG +oOt +phr +rOc +bZg +fRE +eEm +glI +szj +tiK +xBi +mJy +mJy +mJy +nKR +nKR +nKR +oFS +oFS +oFS +oFS +nKR +nKR +mJy +mJy +mJy +nKR +nKR +iCy +gzn +iYg +iYg +iYg +dgq +iYg +fsW +iYg +fiV +iCy +nKR +nKR +nKR +mJy +jdm +mJy +mJy +mJy +seb +seb +wvg +cLn +dvG +gRE +xnX +gLZ +qfz +jQA +sRa +ewq +oxH +shm +sKH +shm +shm +oxH +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +oxH +oxH +ewq +oxH +oxH +shm +shm +sKH +shm +oxH +ewq +ewq +ewq +sLx +sLx +sLx +sLx +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +sLx +sLx +sLx +"} +(175,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +mkY +mkY +mkY +mkY +mkY +cqx +jxu +jxu +mkY +nah +mkY +mkY +mkY +mkY +liI +liI +sLx +sLx +sLx +sLx +sLx +liI +pyI +mkY +mkY +pyI +mkY +mkY +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +maY +maY +vJy +maY +maY +maY +qYN +vJy +maY +maY +maY +maY +maY +maY +maY +vJy +maY +maY +maY +maY +maY +maY +maY +jEO +maY +maY +lHH +lHH +maY +vJy +lHH +ghP +maY +tsN +maY +maY +maY +fAk +loZ +nHX +hUa +hUa +lts +lts +lts +lts +hUa +keX +keX +eey +eYY +eey +keX +keX +mXL +cKU +rvI +kvp +wvX +wQz +hGZ +mJy +mJy +lvy +mJy +mJy +nKR +nKR +oFS +tQh +oFS +nKR +mJy +mJy +lvy +nKR +oqp +tQh +iCy +dAO +otC +hyX +otC +fTR +dGe +dGe +jSU +iSG +iCy +aLl +iaJ +jjU +iaJ +vrQ +mJy +nKR +rzB +sRa +oGh +nIb +jQT +jgk +veV +eRd +qfz +rvc +seR +sRa +ewq +oxH +bLb +sKH +shm +shm +oxH +nUX +ewq +ewq +ewq +oxH +ewq +nUX +oxH +ewq +ewq +oxH +nUX +oxH +shm +shm +sKH +shm +ata +ewq +ewq +sLx +sLx +sLx +sLx +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +sLx +sLx +sLx +"} +(176,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +mkY +nMf +uea +cqx +nMf +mkY +mkY +mkY +nMf +nah +mkY +nMf +mkY +mkY +mkY +liI +liI +liI +liI +sLx +sLx +liI +jxu +mkY +mkY +jxu +jxu +mkY +liI +sLx +sLx +sLx +sLx +sLx +sLx +eeZ +eeZ +vaQ +vaQ +vaQ +eeZ +eeZ +vaQ +vaQ +vaQ +eeZ +eeZ +eeZ +eeZ +eeZ +vaQ +vaQ +vaQ +eeZ +eeZ +eeZ +eeZ +maY +maY +maY +maY +maY +lHH +lHH +maY +maY +lHH +lHH +maY +maY +maY +maY +maY +rin +oPp +nHX +hUa +vQh +aky +sXN +adH +lCZ +ccN +keX +gHx +inQ +inQ +qPQ +xqC +keX +sAp +nJV +oBh +kvp +wvX +lkN +rrg +mJy +sgF +rzB +mJy +mJy +mJy +rzB +nKR +nKR +rzB +mJy +mJy +mJy +sNG +nKR +oFS +jET +vly +dAO +weS +iaa +fdf +ckA +fdf +kuD +oIy +ewY +rdh +vrQ +mJy +mJy +mJy +oqp +nKR +nKR +oFS +sRa +btM +seb +xYt +jVF +jCr +hFK +lVS +uTK +uEM +rwp +ewq +ata +shm +sKH +shm +shm +oxH +ewq +ewq +ewq +ewq +shm +oxH +ewq +ewq +ewq +oxH +ewq +ewq +oxH +shm +shm +sKH +shm +oxH +ewq +sLx +sLx +sLx +sLx +sLx +ewq +ewq +ewq +ewq +ewq +ewq +nUX +ewq +ewq +ewq +ewq +ewq +nUX +ewq +sLx +sLx +"} +(177,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +hoO +liI +mkY +mkY +mkY +mkY +mkY +mkY +mkY +liI +sLx +sLx +liI +jxu +mkY +mkY +jxu +mkY +mkY +liI +sLx +sLx +sLx +sLx +sLx +sLx +eeZ +xAR +gAL +sns +gVc +kbt +ihO +ugr +hAO +kMA +eeZ +kfd +aPP +kOL +oSB +ocT +oSB +kPw +nnh +aaW +reF +eeZ +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +kAD +rin +oPp +nHX +hUa +uMQ +vNs +rfn +twa +twa +nsz +keX +qwy +wtz +oBK +hhT +eqA +eey +lxA +tIQ +qPN +yiZ +aIm +ptH +cTb +nKR +nKR +nKR +nKR +mJy +mJy +mJy +mJy +mJy +mJy +mJy +mJy +nKR +nKR +nKR +oFS +oFS +vly +wXJ +otC +dAO +uko +eoH +teI +jBv +cZj +otC +otC +mJy +mJy +mJy +nKR +nKR +caI +caI +caI +caI +caI +tfD +jCH +caI +caI +rnl +wtj +dvG +tsc +rwp +ewq +oxH +shm +sKH +shm +shm +oxH +ewq +ewq +oxH +shm +shm +shm +oxH +ewq +ewq +ewq +ewq +oxH +oxH +shm +shm +sKH +shm +oxH +ewq +sLx +sLx +sLx +sLx +sLx +ewq +ewq +ewq +ewq +sLx +sLx +sLx +sLx +ewq +ewq +ewq +ewq +ewq +ewq +sLx +sLx +"} +(178,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +mkY +bce +mkY +rkk +cqx +nMf +hoO +tXJ +liI +mkY +mkY +pyI +mkY +mkY +nMf +mkY +liI +sLx +sLx +liI +mkY +mkY +mkY +mkY +mkY +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +eeZ +sns +elH +lmN +gAL +kbt +ugr +wRX +gNO +hCF +eeZ +oQn +qXg +nZu +uaa +njK +lkU +uaa +oSF +jFS +kPy +eeZ +eeZ +eeZ +eeZ +eeZ +luQ +maY +maY +maY +luQ +maY +maY +maY +luQ +maY +maY +kAD +vSt +loZ +nHX +lts +oMz +uYz +uoi +fwe +nDY +sWZ +keX +tQt +hhT +fng +tZx +qLN +eey +tHI +hJM +xTx +nsV +bln +ecx +cTb +nKR +nKR +nKR +nKR +mJy +mJy +mJy +mJy +mJy +mJy +mJy +mJy +nKR +oFS +oFS +oFS +tQh +vly +wXJ +uLC +uUF +psn +hFj +psn +bmu +kzw +kiW +iCy +mJy +nKR +nKR +nKR +oFS +caI +lfZ +mta +dpH +fLo +mta +dsw +bEJ +caI +rff +uTK +fPW +sNH +sRa +ewq +ata +shm +sKH +shm +shm +oxH +ewq +ewq +ewq +shm +wzd +shm +ewq +ewq +ewq +ewq +ewq +oxH +shm +shm +shm +sKH +oxH +ewq +ewq +sLx +sLx +sLx +sLx +sLx +ewq +nUX +ewq +sLx +sLx +sLx +sLx +sLx +sLx +ewq +ewq +ewq +ewq +ewq +sLx +sLx +"} +(179,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +nMf +mkY +mkY +mkY +mkY +hoO +hoO +sLx +liI +mkY +mkY +mkY +bce +mkY +mkY +bce +liI +liI +liI +liI +nMf +mkY +mkY +nMf +mkY +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +eeZ +gAL +mLl +hpT +mQw +kbt +lpV +hCF +ugr +fPO +eeZ +hjv +mQw +fkG +lkc +mYO +xfw +wfy +xlJ +wIV +wTj +ijB +kPw +nnh +kbK +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +maY +maY +lHH +lHH +maY +kAD +loZ +loZ +loZ +mSk +lts +bGE +jgd +fMj +dLh +vNs +nol +keX +dfZ +hhT +dQv +hhT +qLN +oAH +ioq +aOY +tYR +gOI +bNA +kNX +rrg +mJy +mJy +mJy +mJy +mJy +mJy +mJy +mJy +mJy +nKR +nKR +nKR +nKR +oFS +oFS +oFS +oFS +iCy +ria +weS +xfI +hjB +khN +qxq +pul +kzw +gnN +iCy +oFS +oFS +jET +oFS +tQh +qtj +mta +mta +wna +ovj +wJq +oty +qpC +qtj +rff +seb +seb +pMG +sRa +ewq +oxH +shm +sKH +shm +shm +oxH +ewq +ewq +shm +shm +shm +shm +oxH +ewq +ewq +ewq +tpJ +sqb +aud +aud +aud +vnr +sqb +sqb +dxi +rTY +rTY +rTY +rTY +rTY +dxi +dxi +dxi +rTY +rTY +rTY +rTY +rTY +rTY +rTY +tpJ +ewq +ewq +ewq +sLx +sLx +"} +(180,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +chJ +hoO +mkY +nMf +mkY +hoO +hoO +sLx +sLx +liI +nMf +mkY +mkY +mkY +mkY +mkY +bce +mkY +liI +liI +mkY +bce +mkY +mkY +bce +mkY +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +eeZ +mQw +gcb +rjQ +mQw +xqI +kMA +ugr +ihO +ugr +eeZ +xGB +mQw +uhV +aUx +aUx +aUx +aUx +owe +lBt +uaa +mYu +akF +njK +rEK +eeZ +gxa +oWy +oxi +rsg +eeZ +vJy +maY +lHH +rin +kAD +kAD +loZ +ktu +loZ +lMW +hUa +rSI +jMm +dQI +aHc +twa +sUX +keX +dfZ +hhT +mVl +uUS +acs +keX +vEh +bYi +bln +bln +cBY +tRf +xBi +mJy +mJy +hGF +mJy +mJy +nKR +rzB +nKR +oqp +rzB +oFS +oFS +oFS +kGE +oFS +oFS +jET +iCy +xPU +otC +uUF +psn +xic +aHM +bmu +cZj +kiW +iCy +tQh +oFS +oFS +oFS +tQh +qtj +mta +wpW +ohV +ohV +kqm +snL +xAx +qtj +rff +seb +fPW +sNH +rwp +ewq +oxH +shm +sKH +shm +shm +oxH +ewq +ewq +ewq +oxH +oxH +oxH +oxH +ewq +ewq +ewq +tpJ +mYW +mYW +gfH +gfH +tRj +gfH +gfH +mYW +mYW +mYW +mYW +mYW +mYW +gfH +gfH +gfH +mYW +mYW +mYW +mYW +mYW +mYW +mYW +tpJ +ewq +ewq +ewq +sLx +sLx +"} +(181,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +hoO +fCq +hoO +sLx +sLx +sLx +liI +liI +mkY +mkY +mkY +mkY +bce +mkY +mkY +mkY +mkY +mkY +mkY +mkY +bce +mkY +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +eeZ +jVv +gcb +xGH +tII +eeZ +eeZ +vaQ +vaQ +eeZ +eeZ +oQn +wTj +mQd +aUx +jJc +waP +aUx +qrc +oyr +jzq +oyr +xlJ +gAL +uaQ +eeZ +fyR +dBD +pLH +aqj +eeZ +maY +sTP +lvf +lvf +lvf +ftW +ftW +ftW +lvf +fyj +hUa +hFm +kNu +vNs +ojz +fpd +vHW +keX +xvF +iWh +mVl +iWh +bVE +keX +sha +uFB +bNA +rTc +kkg +vtv +rrg +mJy +mJy +nKR +nKR +nKR +nKR +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +iCy +wXJ +otC +dAO +weS +otC +otC +gnN +taw +fJl +iCy +oFS +oFS +oFS +oFS +oFS +qtj +lxp +uyu +oiZ +oiZ +vQI +vLx +qcb +caI +tJD +qxm +ejE +aMB +rwp +ewq +oxH +shm +sKH +shm +shm +oxH +oxH +ewq +ewq +ewq +oxH +ewq +ewq +ewq +ewq +ewq +wqt +mYW +mYW +gfH +gfH +tRj +gfH +gfH +mYW +mYW +mYW +mYW +mYW +gfH +gfH +gfH +gfH +gfH +gfH +gfH +mYW +mYW +mYW +mYW +tpJ +ewq +ewq +ewq +sLx +sLx +"} +(182,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +hoO +sLx +sLx +sLx +sLx +liI +liI +nMf +mkY +mkY +nMf +mkY +mkY +mkY +nMf +mkY +nMf +mkY +mkY +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +eeZ +mQw +epm +rjQ +jVv +eeZ +lZd +gWd +idg +inS +oSB +xTL +hOV +aLv +aUx +hdp +iXV +aUx +aUx +aUx +aUx +aUx +sIL +sns +iJy +eeZ +fyR +dBD +aqj +sGi +eeZ +luQ +asY +kAD +vSt +loZ +loZ +loZ +hpf +kAD +uRA +uRA +uRA +uRA +oFL +iOA +uRA +uRA +uRA +uRA +uRA +kBm +uRA +uRA +uRA +uRA +wgL +oFL +kpe +uRA +uRA +uRA +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +iCy +iCy +iCy +iCy +sWd +iCy +iCy +iCy +wXJ +otC +uUF +aHM +otC +psn +bmu +kzw +gnN +iCy +oFS +oFS +oFS +oFS +oFS +caI +mta +mta +jgJ +jgJ +qpC +fHT +mwf +caI +sRa +sRa +sRa +sRa +sRa +ewq +oxH +shm +sKH +shm +shm +bLb +ata +ewq +ewq +ewq +ewq +ewq +nUX +ewq +ewq +sLx +wqt +mYW +mYW +gfH +gfH +tRj +gfH +gfH +gfH +mYW +mYW +mYW +gfH +gfH +gfH +wWU +wWU +gfH +gfH +gfH +gfH +mYW +mYW +gfH +tpJ +ewq +ewq +ewq +sLx +sLx +"} +(183,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +mkY +mkY +kOm +mkY +mkY +mkY +mkY +mkY +mkY +mkY +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +eeZ +wTj +opN +jBD +tdM +nOE +neQ +gKW +sme +uaa +njK +aUR +hCT +hYZ +aUx +krJ +jyY +jfd +iXV +bVb +sCN +aUx +slr +mQw +iJy +eeZ +eeZ +waT +eeZ +eeZ +eeZ +maY +asY +kAD +loZ +oPp +rin +kAD +kAD +kAD +uRA +hCC +jBt +qnY +fhY +kWA +bNN +iHc +dbk +qnY +jBt +kWA +jBt +jBt +cfC +lhW +gsi +fhY +oFL +jBt +wGs +uRA +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +iCy +xTK +iYg +fsW +iYg +iYg +rsN +iCy +gjy +hjB +dAO +otC +hyX +aHM +gnN +kzw +iSG +iCy +oFS +oFS +jET +oFS +oFS +caI +oha +lxp +mta +lxp +mta +hAI +hry +caI +ewq +ewq +ewq +ewq +ewq +ewq +oxH +oxH +sKH +shm +shm +shm +oxH +ewq +ewq +ewq +ewq +ewq +ewq +ewq +sLx +sLx +wqt +mYW +mYW +gfH +gfH +tRj +gfH +gfH +gfH +gfH +mYW +mYW +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +tpJ +ewq +ewq +ewq +sLx +sLx +"} +(184,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +mkY +mkY +mkY +jxu +jxu +mkY +mkY +mkY +mkY +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +eeZ +hOV +wTj +iZr +kZf +eeZ +owe +wIV +nqn +sdk +sKu +oyr +oyr +lGJ +aUx +ivc +iXV +waP +iXV +waP +iXV +aUx +rIx +vZT +jsu +oSB +oRm +mQI +hnN +qJQ +eeZ +maY +lMW +kAD +loZ +rin +rin +maY +maY +maY +vNA +kSA +kTW +aAJ +jSy +hna +dBO +dwX +vZh +dwX +wXv +vzy +eqt +hqp +tcl +uZH +psR +aAJ +nTn +ham +mDd +uRA +oFS +oFS +jET +oFS +oFS +oFS +jET +oFS +oFS +jET +iCy +dAO +rOS +bBG +bBG +otC +tyT +iCy +jRm +qxq +psn +psn +otC +psn +gnN +kzw +gnN +voq +oFS +oFS +oFS +oFS +tQh +qtj +jkZ +mta +sll +sll +mta +fxl +cmg +caI +ewq +ewq +ewq +ewq +ewq +ewq +ewq +oxH +sKH +shm +shm +shm +shm +oxH +ewq +ewq +ewq +ewq +rTY +rTY +rTY +rTY +wqt +mYW +gfH +gfH +gfH +tRj +gfH +gfH +gfH +gfH +mYW +gfH +gfH +gfH +gfH +gfH +wWU +gfH +gfH +gfH +gfH +gfH +gfH +gfH +tpJ +ewq +nUX +sLx +sLx +sLx +"} +(185,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +mkY +mkY +bce +jxu +jxu +mkY +bce +mkY +mkY +liI +liI +liI +liI +liI +sLx +sLx +sLx +liI +sLx +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +gto +ybM +qXn +aUx +aUx +uBn +uBn +aUx +aUx +qdd +krJ +waP +pHP +waP +iXV +uBn +poO +mQw +wIV +nDT +xhJ +qjj +cuO +xxe +eeZ +maY +lMW +loZ +loZ +loZ +kAD +maY +maY +maY +vNA +gQX +wcJ +cfU +cmw +all +xGF +cfU +cmw +bVs +dxp +cfU +cmw +vhh +avi +cfU +cmw +vhh +gQX +oFL +qYn +vNA +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +iCy +rwZ +bMu +otC +otC +hSL +dGe +dWz +woD +siO +ipz +lBz +gro +gro +jof +vOG +kiW +voq +oFS +oFS +oFS +oFS +tQh +qtj +xLo +wpW +ohV +ohV +kqm +fHT +mta +qtj +ewq +ewq +ewq +ewq +ewq +ewq +ewq +oxH +sKH +shm +shm +shm +shm +oxH +ewq +ewq +ewq +sLx +wqt +mYW +mYW +mYW +mYW +mYW +gfH +gfH +gfH +mra +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +tpJ +ewq +sLx +sLx +sLx +sLx +"} +(186,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +nMf +mkY +mkY +mkY +nMf +mkY +bce +mkY +vZC +ohx +ohx +weR +liI +liI +liI +liI +liI +liI +eeZ +fLa +oSB +cZU +vsD +qlW +eeZ +owe +czG +joJ +aUx +pyB +iXV +iXV +oPk +fEo +kbA +hJm +waP +avU +waP +phS +uBn +rmZ +snx +sBF +sgQ +dbb +wjK +czd +iqk +eeZ +sWa +lMW +loZ +vSt +loZ +kAD +maY +luQ +maY +vNA +gQX +aAe +mMs +iMz +fjf +fzb +maw +iMz +xEu +kDk +sMc +gXS +dRC +xGF +maw +iMz +fjf +hAt +ham +qgO +atT +oFS +oFS +tQh +oFS +oFS +oFS +oFS +oFS +tQh +oFS +vly +dAO +btm +emE +emE +nuB +gnN +iCy +pxG +hyX +cug +otC +idx +otC +otC +idx +gnN +iCy +oFS +oFS +oFS +oFS +oFS +qtj +uee +pLw +oiZ +oiZ +eem +sfa +lxp +qtj +ewq +nUX +ewq +ewq +ewq +ewq +nUX +oxH +sKH +shm +shm +shm +shm +oxH +ewq +ewq +sLx +sLx +wqt +mYW +mYW +gfH +mra +tRj +tRj +tRj +tRj +mra +gfH +gfH +wWU +gfH +gfH +gfH +gfH +gfH +gfH +gfH +wWU +gfH +gfH +gfH +gfH +gfH +gfH +gfH +tpJ +sLx +sLx +sLx +sLx +sLx +"} +(187,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +ohx +ohx +ohx +ohx +vZC +ohx +ohx +ohx +vZC +ohx +eeZ +xGB +jVv +mTY +gAL +mxb +eeZ +owe +wIV +anI +aUx +jvh +cbR +phS +krJ +iXV +phS +pHP +xvE +pmQ +pHP +eQM +aUx +qQG +hOV +czG +mQw +sns +mQw +mQw +dPX +iOG +loZ +nHX +loZ +loZ +kAD +maY +maY +maY +maY +uRA +qkt +ueD +jBt +aEB +bNN +jBt +jBt +aEB +nql +cDR +mYp +rHV +nql +bNN +sKo +aEB +fbB +amu +sat +ogY +vfC +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +vly +nwk +dGe +xBD +dGe +aiP +xaU +iCy +rZI +xhW +vxP +rZU +rZU +jOL +jOL +vxP +qGL +iCy +oFS +oFS +jET +oFS +oFS +caI +aKB +twe +jgJ +bdl +fHT +fHT +mta +qtj +ewq +ewq +ewq +oxH +oxH +ewq +ewq +oxH +sKH +shm +shm +shm +shm +oxH +oxH +sLx +sLx +sLx +wqt +mYW +gfH +gfH +tRj +iMb +dxr +qwB +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +iMb +dxr +qwB +gfH +mYW +mYW +rTY +rTY +rTY +rTY +wqt +sLx +"} +(188,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +jxu +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +iPc +iPc +ohx +ohx +ohx +ohx +ohx +weR +ohx +ohx +xZt +xfA +ugv +saF +dRn +gAL +jUK +gAL +bwL +spD +aUx +tjQ +waP +iXV +waP +iXV +waP +avU +aUx +aUx +aUx +aUx +aUx +vXN +mQw +pXZ +xot +fAs +pws +fAs +mHI +uaa +bLV +hgg +oPp +rin +kAD +maY +maY +vJy +maY +uRA +jfE +vkC +oFL +oFL +oFL +lAN +aqT +fhY +fhY +wYl +aqT +aqT +ham +gxX +oFL +cUa +pmw +eGh +nNB +sls +uRA +oFS +oFS +jET +oFS +oFS +oFS +jET +oFS +oFS +jET +vly +dAO +rCj +kBa +kBa +nuB +xaU +iCy +iCy +iCy +iCy +iCy +iCy +iCy +iCy +iCy +iCy +iCy +oFS +oFS +oFS +oFS +oFS +caI +lfZ +mta +qpC +jtJ +rOz +rOz +jAn +caI +ewq +oxH +oxH +shm +shm +ewq +ewq +oxH +sKH +shm +shm +shm +shm +shm +oxH +sLx +sLx +sLx +wqt +gfH +gfH +gfH +tRj +swk +gfH +mVQ +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gju +gfH +gfH +gfH +gfH +swk +gfH +mVQ +gfH +gfH +mYW +mYW +mYW +mYW +mYW +wqt +sLx +"} +(189,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +jxu +jxu +bce +mkY +mkY +mkY +mkY +bce +mkY +mkY +iPc +iPc +ohx +ohx +ohx +ohx +weR +ohx +ohx +ohx +gxa +qWN +dRn +dRn +dRn +tlO +neQ +ics +sBF +pQN +aUx +eQM +nQl +gIi +waP +iXV +waP +krJ +aUx +kfd +oRm +oSB +oSB +gNR +mQw +iJy +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +nBd +kAD +rin +lHH +maY +maY +maY +maY +maY +uRA +dnY +iFK +aAJ +jSy +qjZ +mYq +rnA +jYo +dOh +mwt +oZR +jSy +aAJ +rnA +qjZ +jSy +aAJ +vyr +oFL +ogY +uRA +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +iCy +yiy +bMu +hyX +otC +nuB +vlE +iCy +fcu +otC +iEZ +bBt +bqV +otC +iCy +jET +oFS +oFS +oFS +oFS +oFS +oFS +oFS +caI +caI +caI +caI +caI +caI +caI +caI +caI +ewq +ewq +shm +wzd +shm +oxH +ewq +oxH +sKH +shm +shm +shm +shm +shm +oxH +sLx +sLx +sLx +wqt +gfH +gfH +gfH +kVE +nfT +dQc +ehP +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +nfT +dQc +ehP +gfH +gfH +gfH +gju +mYW +mYW +mYW +wqt +sLx +"} +(190,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +jxu +mkY +nMf +mkY +mkY +mkY +nMf +mkY +mkY +mkY +vZC +ohx +ohx +vFH +vZC +ohx +ohx +ohx +vZC +ohx +xZt +rKJ +dRn +jHV +byX +wGV +eeZ +xfA +wIV +joJ +aUx +qix +waP +iXV +waP +hdp +nQl +phS +nYN +sns +iTP +uaa +chZ +uaa +uaa +obo +eeZ +ryW +xlJ +kEx +frY +eeZ +luQ +maY +maY +luQ +maY +maY +maY +luQ +maY +vNA +gQX +aAe +cmn +cmw +iyZ +kPv +cfU +nvY +vhh +nOt +cfU +cmw +tIv +kPv +epN +cmw +jFQ +aFM +oFL +xlU +atT +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +vly +dAO +mKX +gVo +gVo +hFF +qRW +iCy +otC +cGC +laF +cGC +xjo +aeD +iCy +oFS +oFS +oFS +oFS +oFS +oFS +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ewq +ewq +ewq +ewq +ewq +oxH +shm +shm +oxH +oxH +ewq +oxH +sKH +shm +shm +shm +shm +shm +aud +rTY +rTY +rTY +wqt +kte +gfH +gfH +tRj +gfH +gfH +gfH +gfH +gfH +gfH +gfH +wWU +gfH +gfH +gfH +gfH +gfH +gfH +gfH +wWU +gfH +gfH +gfH +gfH +gfH +gfH +gfH +wWU +mYW +mYW +mYW +wqt +sLx +"} +(191,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +jxu +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +mkY +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +ohx +xZt +dKe +pZn +ove +ics +osQ +eeZ +jtH +wIV +nWk +aUx +vCz +pnh +xjM +ucn +mtO +mJl +fSV +qkZ +uaa +sik +oWh +oyr +oyr +lkc +qqs +eeZ +mpA +eHf +eHf +pJI +vaQ +maY +maY +maY +maY +maY +maY +tsN +maY +maY +vNA +eKr +aAe +maw +iMz +oAP +xGF +wPM +iMz +kSn +pNo +mMs +iMz +dRC +xGF +sMc +rIj +oAP +lIh +dwe +xlU +vNA +oFS +oFS +tQh +oFS +oFS +oFS +oFS +oFS +tQh +oFS +vly +nwk +fMS +omV +kSm +fIg +fFn +iCy +iEZ +otC +aeD +otC +iEZ +otC +iCy +oFS +oFS +jET +oFS +oFS +jET +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ewq +ewq +ewq +ewq +ewq +ewq +oxH +oxH +oxH +ewq +oxH +sKH +shm +shm +bLb +shm +shm +szc +mYW +mYW +mYW +mYW +gfH +gfH +gfH +tRj +gfH +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +bsT +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +gfH +gfH +gfH +gfH +mYW +wqt +sLx +"} +(192,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +inA +jxu +mkY +mkY +kOm +jxu +jxu +mkY +mkY +bce +mkY +ohx +ohx +ohx +weR +ohx +ohx +ohx +vZC +liI +liI +eeZ +kPu +jkX +sdk +sdk +ppx +kza +kza +oyP +kza +kza +avU +qEn +mFt +uUt +fYh +fYh +klg +aUx +owe +sfS +fhT +eeZ +eeZ +eeZ +eeZ +eeZ +iCv +eHf +eHf +frY +vaQ +vJy +maY +maY +maY +maY +maY +maY +maY +maY +vNA +dnM +nIh +jBt +bXu +mik +fQb +ylx +pPL +ylx +qTU +cuP +arX +mzt +jBt +jBt +aEB +sGF +wbG +lnJ +prY +vNA +oFS +oFS +jET +oFS +oFS +oFS +jET +oFS +oFS +jET +vly +dAO +bVg +bBG +bBG +seQ +jtb +pPi +ahM +fBx +ujx +fBx +jmw +iEZ +iCy +oFS +oFS +oFS +oFS +oFS +oFS +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ewq +ewq +ewq +sIY +ewq +ewq +ewq +ewq +ewq +oxH +sKH +shm +shm +shm +shm +shm +szc +gfH +mYW +mYW +mYW +gfH +gfH +gfH +tRj +gfH +sHQ +sHQ +bsT +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +bsT +sHQ +sHQ +gfH +wWU +gfH +gfH +mYW +wqt +sLx +"} +(193,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +jxu +mkY +bce +mkY +jxu +jxu +mkY +bce +mkY +mkY +ohx +ohx +ohx +ohx +ohx +ohx +ohx +liI +liI +sLx +eeZ +eeZ +eUp +eeZ +kza +kza +kza +dAR +rUO +lFK +kza +aUx +aUx +aUx +aUx +aUx +aUx +aUx +aUx +jTf +jkX +gGe +eeZ +qlR +jTk +xlJ +iCv +xlJ +eHf +eHf +xlJ +vaQ +maY +maY +maY +maY +maY +lHH +lHH +maY +maY +uRA +cuE +mPR +lBR +aAL +xOU +ham +qjZ +aAJ +cdJ +pGs +aAJ +wsK +aAL +jYY +baz +jvf +ham +ylV +rJN +eHA +uRA +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +iCy +dAO +bMu +hyX +nzG +eoH +kwt +iCy +bqV +uLC +iEZ +weS +fcu +otC +deK +kGE +oFS +oFS +tQh +oFS +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ewq +ewq +ewq +ewq +wmt +ewq +ewq +ewq +ewq +oxH +wjl +shm +shm +shm +shm +shm +szc +gfH +gfH +gfH +gfH +gfH +gfH +gfH +tRj +gfH +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +gfH +gfH +gfH +gfH +mYW +wqt +sLx +"} +(194,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +jxu +jxu +nMf +bce +mkY +mkY +nMf +mkY +mkY +mkY +vZC +ohx +ohx +ohx +vZC +liI +liI +liI +sLx +sLx +eeZ +nbV +dor +kbK +kza +tpV +gRq +ccL +fqt +uxN +kza +hde +pXq +nEd +ocT +ouR +nEd +oSB +nEd +ivP +tBV +tdM +cGh +xQI +xQI +iRr +fcS +rSs +xlJ +uDs +gCs +eeZ +luQ +maY +maY +luQ +maY +lHH +lHH +luQ +sLx +uRA +uRA +uRA +tPF +tPF +qrE +tHF +tPF +tPF +tPF +tPF +tPF +tPF +tPF +hAt +fhY +aqT +oSl +aqT +aqT +osl +uRA +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +iCy +dCl +aID +emE +emE +ksN +tAJ +iCy +otC +cjV +tbD +lGY +bur +bqV +wyu +oFS +oFS +jET +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ewq +ewq +ewq +ewq +ewq +mul +kDS +oXx +ewq +ewq +wjl +shm +shm +shm +shm +shm +szc +gfH +gfH +gfH +gfH +gfH +gfH +gfH +tRj +gfH +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +gfH +gfH +gfH +gfH +mYW +wqt +sLx +"} +(195,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +jxu +jxu +jxu +mkY +mkY +mkY +liI +liI +liI +ohx +ohx +liI +liI +liI +liI +sLx +sLx +sLx +sLx +eeZ +xfA +sfS +nbH +kza +uHQ +bCA +oWq +lLJ +fBr +kza +xfA +lBV +tdM +aaF +uUH +mRi +wle +neQ +lpj +dcs +muY +eeZ +dDX +vxU +lfJ +juC +ues +wke +wke +pvH +eeZ +maY +maY +maY +maY +maY +maY +maY +maY +sLx +sLx +sLx +sLx +tPF +lsK +dMO +fgm +guR +fgm +keo +isT +xdR +rfH +tPF +hhz +oFL +wWV +bzt +pWs +rFn +aAe +vNA +yaP +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +iCy +faU +vxP +vxP +rZW +vxP +gfi +iCy +fcu +weS +iEZ +lEZ +bqV +hyX +iCy +oFS +oFS +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ewq +ewq +ewq +ewq +ewq +wlq +fmA +pWF +ewq +ewq +lzi +oxH +shm +shm +shm +shm +szc +gfH +gfH +gfH +gfH +gfH +gfH +gfH +tRj +gfH +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +gfH +gfH +gfH +gfH +mYW +wqt +sLx +"} +(196,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +jxu +nMf +mkY +liI +liI +sLx +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +eeZ +qDY +jkX +joJ +kza +lTs +dsx +sRr +aqE +ntn +kza +owe +sfS +bTz +uKB +mqE +sdk +uyE +qFa +sKu +lkc +xle +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +vJy +lHH +lHH +maY +maY +maY +maY +vJy +sLx +sLx +sLx +sLx +tPF +yes +bVN +dTw +yfZ +xdR +lZQ +mMA +lsK +xdR +tPF +aqd +ham +bzt +bzt +bzt +ham +dWd +vfC +oFS +oFS +jET +oFS +oFS +oFS +jET +oFS +oFS +jET +iCy +iCy +iCy +iCy +iCy +iCy +iCy +iCy +iCy +iCy +iCy +iCy +iCy +iCy +iCy +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ewq +ewq +ewq +fJB +eUj +nwL +ewq +ewq +lzi +ewq +oxH +shm +shm +shm +szc +gfH +gfH +gfH +gfH +gfH +gfH +gfH +tRj +gfH +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +vFC +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +gfH +gfH +gfH +gfH +mYW +wqt +sLx +"} +(197,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +liI +liI +liI +liI +liI +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +eeZ +xGB +uYH +pQN +tkR +sUx +cji +oLg +flP +gMQ +kza +owe +uYH +wDn +eeZ +eeZ +eeZ +sfS +pcM +eeZ +eeZ +eeZ +eeZ +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +lHH +lHH +maY +maY +maY +maY +maY +sLx +sLx +sLx +sLx +tPF +ejr +hvu +bbM +yfZ +rfH +hvu +vQU +geq +sFL +tPF +hUZ +qLK +pWs +bzt +clG +aqT +prY +vNA +oFS +oFS +tQh +oFS +tQh +oFS +oFS +oFS +tQh +oFS +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ewq +nUX +ewq +ewq +ewq +ewq +nUX +ewq +lzi +ewq +oxH +ata +oxH +shm +szc +wWU +gfH +gfH +gfH +gfH +gfH +gfH +mra +gfH +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +gfH +gfH +gfH +gfH +mYW +wqt +sLx +"} +(198,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +eeZ +qQG +sfS +pQN +kza +xJl +sYv +flP +sOf +kHc +kza +owe +jkX +pQN +eeZ +nPL +cIq +bCS +ivP +ivP +ivP +gNR +eeZ +maY +luQ +maY +maY +maY +luQ +maY +maY +maY +luQ +maY +maY +luQ +maY +maY +maY +luQ +sLx +sLx +sLx +sLx +tPF +enh +lsK +dTw +yfZ +enh +lsK +rbn +oVO +enh +tPF +hAt +oFL +oFL +aqT +oFL +oFL +qhz +uRA +oFS +oFS +oFS +oFS +oFS +oFS +oFS +oFS +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ewq +ewq +ewq +ewq +ewq +ewq +ewq +ewq +lzi +lzi +lzi +lzi +wjl +wjl +iET +tRj +tRj +tRj +tRj +tRj +tRj +tRj +tRj +gfH +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +gfH +gfH +gfH +gfH +mYW +wqt +sLx +"} +(199,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +eeZ +rmZ +sfS +joJ +kza +kza +fAl +fAl +fAl +kza +kza +xfA +sfS +euC +eeZ +snP +bEA +iGd +chS +pxq +dci +ivP +eeZ +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +dpv +hoO +hoO +hoO +tPF +rfH +xdR +mFZ +tPF +lsK +xdR +bFN +xdR +mFZ +tPF +khV +sWG +xys +xys +fTz +aAJ +tKo +uRA +oFS +oFS +oFS +oFS +oFS +oFS +oFS +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ewq +ewq +ewq +dPa +dPa +gIb +gIb +dPa +dPa +lzi +ewq +ewq +ewq +ewq +szc +gfH +gfH +gfH +gfH +gfH +gfH +gfH +tRj +gfH +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +gfH +pCr +gfH +gfH +mYW +wqt +sLx +"} +(200,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +eeZ +owe +jcQ +uPX +ijB +oSB +gWd +wlC +inS +ijB +oRm +ivP +bIJ +anI +eeZ +inj +ivP +ekb +gNR +ivP +ekb +ivP +eeZ +vJy +maY +maY +maY +maY +maY +maY +maY +maY +vJy +maY +maY +maY +maY +maY +maY +fAk +dpv +xJD +xJD +hoO +tPF +tPF +tPF +tPF +tPF +tPF +tPF +tPF +tPF +tPF +tPF +uRA +uRA +uRA +uRA +uRA +uRA +uRA +uRA +oFS +oFS +jET +oFS +oFS +oFS +jET +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ewq +ewq +ewq +dPa +xtR +cWx +auq +fyE +dPa +lzi +ewq +ewq +ewq +ewq +szc +gfH +gfH +mYW +mYW +gfH +gfH +gfH +tRj +gfH +sHQ +sHQ +bsT +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +bsT +sHQ +sHQ +gfH +gfH +gfH +gfH +mYW +wqt +sLx +"} +(201,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +eeZ +dKe +rcH +lpj +neQ +ics +neQ +neQ +yji +neQ +neQ +neQ +dcs +mxb +eeZ +ivP +idh +qyG +rPG +hBX +xTL +ivP +eeZ +maY +maY +maY +maY +maY +tsN +maY +maY +maY +luQ +maY +maY +maY +maY +maY +vJy +kAD +dpv +xJD +xJD +hoO +hoO +hoO +hoO +hoO +hoO +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +chJ +hoO +hoO +hoO +oFS +oFS +tQh +oFS +tQh +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ewq +ewq +dPa +mtC +hjK +saX +pAF +qDK +lzi +ewq +nUX +ewq +ewq +szc +gfH +mYW +mYW +mYW +xfe +gfH +gfH +tRj +gfH +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +bsT +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +sHQ +gfH +gfH +gfH +gfH +mYW +wqt +sLx +"} +(202,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +eeZ +bkt +sdk +oyr +grM +oyr +sdk +oyr +ptL +lkc +woo +kcC +grM +nLq +eeZ +gNR +xTL +ivP +ivP +xTL +ivP +qpK +eeZ +maY +luQ +maY +maY +maY +luQ +sLx +sLx +sLx +sLx +maY +maY +luQ +maY +maY +maY +mSb +dpv +xJD +xJD +rtB +xJD +xJD +rbi +rtB +xJD +xJD +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +xJD +xJD +evi +nKR +oFS +oFS +oFS +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +ewq +ewq +dPa +tgl +xtR +xtR +tgl +tgl +ewq +ewq +ewq +ewq +ewq +szc +mYW +mYW +mYW +xfe +xfe +gfH +gfH +mra +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +wWU +gfH +sJA +mYW +wqt +sLx +"} +(203,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +eeZ +vaQ +vaQ +vaQ +vaQ +eeZ +eeZ +eeZ +maY +maY +maY +maY +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +maY +tsN +maY +maY +maY +dpv +xJD +xJD +xJD +xJD +xJD +xJD +xJD +xJD +xJD +qHy +hoO +hoO +sLx +sLx +sLx +sLx +hoO +hoO +hoO +xJD +xJD +kqD +nKR +oFS +oFS +oFS +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +nUX +ewq +dPa +agT +tgl +auq +eIf +dPa +ewq +ewq +ewq +ewq +ewq +wqt +mYW +mYW +xfe +rjf +wWU +gfH +wWU +kVE +wWU +gfH +gfH +gfH +gfH +gfH +gfH +wWU +gfH +gfH +gfH +gfH +gfH +gfH +gfH +wWU +gfH +gfH +gfH +gfH +viA +gfH +wWU +gju +gfH +gfH +mYW +wqt +sLx +"} +(204,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +luQ +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +maY +maY +sLx +tXJ +xJD +xJD +xJD +xJD +xJD +xJD +xJD +xJD +xJD +xJD +xJD +hoO +hoO +hoO +hoO +hoO +hoO +xJD +xJD +xJD +xJD +evi +nKR +oFS +oFS +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +dPa +dPa +dPa +dPa +dPa +dPa +sLx +ewq +ewq +ewq +sLx +wqt +mYW +mYW +xfe +gfH +tRj +tRj +tRj +tRj +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gju +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +mfR +gfH +gfH +mYW +wqt +sLx +"} +(205,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +maY +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +mSb +sLx +tXJ +hoO +hoO +hoO +rtB +xJD +rbi +rtB +xJD +xJD +xJD +gLv +xJD +xJD +xJD +rtB +xJD +xJD +xJD +rtB +rbi +xJD +evi +nKR +oFS +kGE +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +wqt +mYW +mYW +xfe +utq +mra +gfH +mYW +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +gfH +mYW +mYW +wqt +sLx +"} +(206,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +maY +luQ +vJy +maY +vJy +luQ +maY +maY +vJy +luQ +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +hoO +hoO +hoO +liI +xJD +xJD +xJD +rbi +xJD +xJD +mSL +xJD +xJD +xJD +rbi +xJD +xJD +evi +nKR +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +wqt +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +wqt +sLx +"} +(207,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +maY +maY +tsN +maY +maY +maY +maY +maY +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +xJD +rtB +xJD +xJD +xJD +rtB +xJD +xJD +xJD +rtB +xJD +xJD +kqD +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +wqt +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +mYW +wqt +sLx +"} +(208,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +maY +maY +sLx +sLx +maY +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +hoO +hoO +xJD +xJD +xJD +xJD +xJD +hoO +hoO +hoO +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +wqt +rTY +rTY +rTY +rTY +rTY +rTY +rTY +rTY +rTY +rTY +hOW +lRX +uYA +ldN +oJo +eXX +jrd +rTY +rTY +rTY +rTY +rTY +rTY +rTY +rTY +rTY +rTY +rTY +rTY +rTY +rTY +rTY +rTY +rTY +rTY +rTY +sLx +"} +(209,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +hoO +hoO +hoO +hoO +hoO +hoO +hoO +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} +(210,1,1) = {" +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +sLx +"} diff --git a/_maps/map_files/Fort_Phobos/Fort_Phobos.dmm b/_maps/map_files/Fort_Phobos/Fort_Phobos.dmm index f726e04f19bcd..b368b7e7dc1ab 100644 --- a/_maps/map_files/Fort_Phobos/Fort_Phobos.dmm +++ b/_maps/map_files/Fort_Phobos/Fort_Phobos.dmm @@ -266,6 +266,15 @@ dir = 8 }, /area/mainship/patrol_base/som/hanger) +"cT" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/oil/armorblood, +/turf/open/floor/mainship/red{ + dir = 4 + }, +/area/mainship/patrol_base/som/hanger) "cY" = ( /obj/machinery/light{ dir = 1 @@ -409,6 +418,12 @@ /obj/structure/bed/chair/dropship/passenger, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/som/hanger) +"ew" = ( +/obj/structure/bed/chair/nometal{ + dir = 4 + }, +/turf/open/floor/mainship/purple/full, +/area/mainship/patrol_base/som/prep) "ey" = ( /obj/machinery/shower{ dir = 8 @@ -516,6 +531,9 @@ /turf/closed/shuttle/dropship2/window, /area/mainship/patrol_base/som) "gk" = ( +/obj/structure/bed/chair/nometal{ + dir = 8 + }, /turf/open/floor/mainship/green/full, /area/mainship/patrol_base/som/prep) "gl" = ( @@ -854,10 +872,10 @@ /turf/open/floor/mainship_hull/gray, /area/mainship/patrol_base/som) "kH" = ( -/obj/machinery/quick_vendor/som, /obj/machinery/camera/autoname/mainship/somship{ dir = 4 }, +/obj/structure/table/mainship/nometal, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/som/prep) "kN" = ( @@ -985,6 +1003,7 @@ "mt" = ( /obj/effect/landmark/reward_spawn_location/som, /obj/effect/turf_decal/warning_stripes/box/empty, +/obj/structure/closet/crate, /turf/open/floor/plating/ground/concrete, /area/mainship/patrol_base/som) "mB" = ( @@ -1091,7 +1110,7 @@ /turf/open/floor/mainship/som/nw, /area/mainship/patrol_base/som/barracks) "nQ" = ( -/obj/machinery/quick_vendor/som, +/obj/structure/table/mainship/nometal, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/som/prep) "nR" = ( @@ -1225,6 +1244,10 @@ dir = 8 }, /area/mainship/patrol_base/som/hanger) +"pN" = ( +/obj/structure/closet/crate, +/turf/open/floor/plating/ground/concrete, +/area/mainship/patrol_base/som) "pR" = ( /obj/structure/benchpress, /turf/open/floor/plating/ground/concrete, @@ -1356,8 +1379,15 @@ /turf/open/floor/freezer, /area/mainship/patrol_base/som/barracks) "qB" = ( +/obj/structure/bed/chair/nometal{ + dir = 8 + }, /turf/open/floor/mainship/purple/full, /area/mainship/patrol_base/som/prep) +"qI" = ( +/obj/effect/decal/cleanable/blood/oil/streak, +/turf/open/floor/mainship_hull/gray, +/area/mainship/patrol_base/som/hanger) "qJ" = ( /obj/structure/table/black, /obj/machinery/prop/computer/communications, @@ -1416,6 +1446,13 @@ "rE" = ( /turf/open/floor/plating/ground/concrete, /area/mainship/patrol_base/som/barracks) +"rG" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/vending/engivend, +/turf/open/floor/plating/ground/concrete, +/area/mainship/patrol_base/som) "rI" = ( /obj/effect/decal/cleanable/blood/oil/streak{ dir = 8 @@ -1519,6 +1556,12 @@ "tc" = ( /turf/open/floor/mainship/red/corner, /area/mainship/patrol_base/som/prep) +"tf" = ( +/obj/structure/bed/chair/nometal{ + dir = 4 + }, +/turf/open/floor/mainship/orange/full, +/area/mainship/patrol_base/som/prep) "tj" = ( /obj/machinery/light{ dir = 4 @@ -2076,6 +2119,14 @@ }, /turf/open/floor/plating/ground/concrete, /area/mainship/patrol_base/som) +"yP" = ( +/obj/structure/bed/chair/nometal{ + dir = 8 + }, +/turf/open/floor/mainship/red{ + dir = 1 + }, +/area/mainship/patrol_base/som/prep) "yY" = ( /turf/closed/mineral/smooth/indestructible, /area/mainship/patrol_base/som/barracks) @@ -2188,6 +2239,12 @@ /obj/effect/turf_decal/warning_stripes/thick/autosmooth, /turf/open/floor/plating/ground/concrete, /area/mainship/patrol_base/som) +"Ab" = ( +/obj/structure/bed/chair/nometal{ + dir = 4 + }, +/turf/open/floor/mainship/green/full, +/area/mainship/patrol_base/som/prep) "Ac" = ( /turf/open/floor/mainship/white/corner{ dir = 4 @@ -2201,6 +2258,10 @@ dir = 4 }, /area/mainship/patrol_base/som/barracks) +"Ai" = ( +/obj/vehicle/ridden/powerloader, +/turf/open/floor/plating/ground/concrete, +/area/mainship/patrol_base/som) "Ap" = ( /turf/closed/wall/r_wall/unmeltable, /area/mainship/patrol_base/som) @@ -2415,6 +2476,12 @@ }, /turf/open/floor/mainship/office, /area/mainship/patrol_base/som/prep) +"CJ" = ( +/obj/structure/bed/chair/nometal{ + dir = 4 + }, +/turf/open/floor/mainship/blue/full, +/area/mainship/patrol_base/som/prep) "CK" = ( /obj/effect/turf_decal/trimline/blue/line{ dir = 8 @@ -2593,6 +2660,12 @@ dir = 8 }, /area/mainship/patrol_base/som) +"Eq" = ( +/obj/effect/decal/cleanable/blood/oil/armorblood{ + dir = 8 + }, +/turf/open/floor/mainship_hull/gray, +/area/mainship/patrol_base/som/hanger) "Es" = ( /obj/effect/turf_decal/siding{ dir = 1 @@ -2710,6 +2783,9 @@ /turf/open/floor/mainship/office, /area/mainship/patrol_base/som/prep) "FK" = ( +/obj/structure/bed/chair/nometal{ + dir = 8 + }, /turf/open/floor/mainship/orange/full, /area/mainship/patrol_base/som/prep) "FR" = ( @@ -3008,6 +3084,10 @@ dir = 4 }, /area/mainship/patrol_base/som/barracks) +"Jy" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/mainship/red, +/area/mainship/patrol_base/som/prep) "JA" = ( /obj/effect/turf_decal/trimline/blue/arrow_cw{ dir = 8 @@ -3185,6 +3265,12 @@ dir = 1 }, /area/mainship/patrol_base/som) +"LN" = ( +/obj/effect/decal/cleanable/blood/oil/armorblood{ + dir = 4 + }, +/turf/open/floor/mainship_hull/gray, +/area/mainship/patrol_base/som/hanger) "LR" = ( /obj/structure/stairs/seamless/platform{ dir = 8 @@ -3295,10 +3381,10 @@ /turf/open/floor/mainship/blue/full, /area/mainship/patrol_base/som/prep) "MZ" = ( -/obj/machinery/quick_vendor/som, /obj/machinery/camera/autoname/mainship/somship{ dir = 8 }, +/obj/structure/table/mainship/nometal, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/som/prep) "Nd" = ( @@ -3500,6 +3586,12 @@ /obj/structure/largecrate/supply/weapons, /turf/open/floor/plating/ground/concrete/lines, /area/mainship/patrol_base/som) +"OO" = ( +/obj/effect/decal/cleanable/blood/oil/streak{ + dir = 8 + }, +/turf/open/floor/mainship_hull/gray, +/area/mainship/patrol_base/som/hanger) "OP" = ( /turf/closed/shuttle/dropship2/wallthree, /area/mainship/patrol_base/som) @@ -3608,6 +3700,12 @@ }, /turf/open/shuttle/dropship/seven, /area/mainship/patrol_base/som) +"PM" = ( +/obj/effect/decal/cleanable/blood/oil/armorblood{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/mainship/patrol_base/som/hanger) "PS" = ( /obj/effect/turf_decal/trimline/blue/line{ dir = 8 @@ -3615,6 +3713,9 @@ /turf/open/floor/mainship/office, /area/mainship/patrol_base/som/prep) "PZ" = ( +/obj/structure/bed/chair/nometal{ + dir = 8 + }, /turf/open/floor/mainship/blue/full, /area/mainship/patrol_base/som/prep) "Qg" = ( @@ -3835,10 +3936,10 @@ /turf/open/floor/wood, /area/mainship/patrol_base/som/barracks) "SZ" = ( -/obj/machinery/quick_vendor/som, /obj/machinery/light{ dir = 4 }, +/obj/structure/table/mainship/nometal, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/som/prep) "Ta" = ( @@ -4317,10 +4418,10 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/som) "Yt" = ( -/obj/machinery/quick_vendor/som, /obj/machinery/light{ dir = 8 }, +/obj/structure/table/mainship/nometal, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/som/prep) "Yy" = ( @@ -6075,7 +6176,7 @@ ua Ud Yy Yy -Yy +OO Yy Yy Yy @@ -6195,10 +6296,10 @@ Iu ua ua Ud +Eq +qI Yy -Yy -Yy -Yy +LN Yy Yy Iu @@ -7776,7 +7877,7 @@ iY ei ei GV -Yy +Eq Iu ua ua @@ -8132,7 +8233,7 @@ QC TA Rq bk -Rq +PM AU kY kY @@ -8375,7 +8476,7 @@ an St zF RN -tj +cT NA NA NA @@ -9858,7 +9959,7 @@ Aw Aw Aw BG -nQ +gS kH Yt MJ @@ -9983,7 +10084,7 @@ Uz la FK FK -bF +yP hX ye gS @@ -10347,8 +10448,8 @@ ac Aw Uz Bd -FK -FK +tf +tf bF vd PH @@ -10468,7 +10569,7 @@ sx LF mt BG -nQ +gS nQ nQ PK @@ -10590,12 +10691,12 @@ sx LF mt BG -nQ +gS nQ nQ PK JD -ye +Jy gS We Bo @@ -11079,8 +11180,8 @@ LF Aw cx lZ -qB -qB +ew +ew bF JD hX @@ -11200,7 +11301,7 @@ sB ve mt Sq -nQ +gS nQ nQ PK @@ -11322,7 +11423,7 @@ oA ac mt BG -nQ +gS nQ nQ PK @@ -11547,7 +11648,7 @@ Uk Uk Uk vz -zj +rG Aw Aw Aw @@ -11669,7 +11770,7 @@ Uk Uk Uk vz -Aw +pN Aw Aw Aw @@ -11811,8 +11912,8 @@ ac Aw Uz cG -PZ -PZ +CJ +CJ bF CH ki @@ -11932,7 +12033,7 @@ To LF mt BG -nQ +gS nQ nQ PK @@ -12035,7 +12136,7 @@ Uk Uk Uk vz -Aw +pN Aw Aw Aw @@ -12054,12 +12155,12 @@ To LF mt BG -nQ +gS nQ nQ uh CH -ye +Jy gS We Bo @@ -12279,7 +12380,7 @@ Uk Uk Uk vz -Aw +Ai Aw Aw Aw @@ -12543,8 +12644,8 @@ Aw Aw Uz yg -gk -gk +Ab +Ab bF tc Yl @@ -12664,7 +12765,7 @@ Aw Aw Aw BG -nQ +gS MZ SZ qg diff --git a/_maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm b/_maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm index 75f42e19bdbeb..aa7477fb1d2e7 100644 --- a/_maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm +++ b/_maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm @@ -9324,7 +9324,7 @@ }, /area/ice_colony/underground/medical/treatment/garbledradio) "beE" = ( -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/underground/caves/ice_w) "beK" = ( /obj/machinery/chem_dispenser, @@ -12150,13 +12150,13 @@ }, /area/ice_colony/underground/medical/storage) "bzn" = ( -/obj/structure/bed/chair/wheelchair, +/obj/vehicle/ridden/wheelchair, /turf/open/floor/tile/red/whitered{ dir = 1 }, /area/ice_colony/underground/medical/storage) "bzo" = ( -/obj/structure/bed/chair/wheelchair, +/obj/vehicle/ridden/wheelchair, /turf/open/floor/tile/red/whitered{ dir = 5 }, @@ -17416,7 +17416,7 @@ /turf/open/floor/plating/icefloor/warnplate, /area/ice_colony/exterior/surface/landing_pad) "bXS" = ( -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/underground/caves/ice_se) "bXT" = ( /obj/structure/table, @@ -19093,7 +19093,7 @@ /turf/open/floor/plating/ground/ice, /area/ice_colony/exterior/surface/landing_pad) "dSq" = ( -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/underground/caves) "dTb" = ( /obj/effect/spawner/random/misc/plant, @@ -20528,7 +20528,7 @@ /area/ice_colony/underground/requesition) "ghx" = ( /obj/effect/turf_underlay/icefloor, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/underground/caves/rock) "ghG" = ( /obj/structure/table, @@ -21354,10 +21354,6 @@ dir = 8 }, /area/ice_colony/surface/storage_unit/power) -"hqp" = ( -/obj/machinery/miner/damaged, -/turf/open/floor/plating/ground/snow/layer1, -/area/ice_colony/exterior/surface/valley/southeast) "hqr" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -22775,7 +22771,7 @@ "jyc" = ( /obj/effect/landmark/lv624/fog_blocker/xeno_spawn, /obj/effect/landmark/lv624/fog_blocker/xeno_spawn, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/underground/caves/rock) "jyU" = ( /obj/machinery/light{ @@ -23397,10 +23393,6 @@ dir = 8 }, /area/ice_colony/underground/requesition) -"kqC" = ( -/obj/machinery/miner/damaged, -/turf/open/floor/plating/ground/snow/layer0, -/area/ice_colony/exterior/surface/valley/south) "kqN" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -24972,10 +24964,6 @@ /obj/item/lightstick/anchored, /turf/open/floor/plating/ground/snow/layer0, /area/ice_colony/exterior/surface/landing_pad2) -"mxl" = ( -/obj/machinery/miner/damaged, -/turf/open/floor/plating/ground/snow/layer1, -/area/ice_colony/exterior/surface/clearing/south) "mxE" = ( /turf/open/floor/plating/ground/ice, /area/ice_colony/exterior/surface/landing_pad_external) @@ -26991,7 +26979,7 @@ /obj/machinery/door/poddoor/timed_late/containment/landing_zone{ dir = 2 }, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/underground/caves/rock) "ppt" = ( /obj/effect/spawner/random/misc/structure/closet/welding, @@ -27301,7 +27289,7 @@ /area/ice_colony/underground/medical/hallway) "pPK" = ( /obj/effect/landmark/weed_node, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/underground/caves) "pQh" = ( /obj/effect/spawner/random/engineering/structure/atmospherics_portable/icecolony, @@ -27608,7 +27596,7 @@ /turf/open/floor/tile/dark2, /area/ice_colony/surface/dorms) "qlb" = ( -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/surface/landing_pad2) "qlJ" = ( /obj/machinery/door/poddoor/timed_late/containment/landing_zone, @@ -29074,7 +29062,7 @@ /obj/machinery/door/poddoor/timed_late/containment/landing_zone/lz2{ dir = 2 }, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/underground/caves/rock) "scU" = ( /obj/structure/bed/chair{ @@ -29233,7 +29221,7 @@ /area/ice_colony/underground/maintenance/east) "snG" = ( /obj/effect/landmark/lv624/fog_blocker/xeno_spawn, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/underground/caves) "sox" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -29343,7 +29331,7 @@ /area/ice_colony/underground/hallway/north_west) "svd" = ( /obj/machinery/door/poddoor/timed_late/containment/landing_zone/lz2, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/underground/caves/rock) "svt" = ( /obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, @@ -29728,7 +29716,7 @@ /obj/effect/landmark/lv624/fog_blocker, /obj/effect/landmark/lv624/fog_blocker/xeno_spawn, /obj/machinery/door/poddoor/timed_late/containment/landing_zone/lz2, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/underground/caves/rock) "sUw" = ( /obj/structure/cable, @@ -30169,7 +30157,7 @@ /area/ice_colony/surface/engineering/generator) "tvD" = ( /obj/effect/landmark/lv624/fog_blocker, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/underground/caves) "tvQ" = ( /obj/effect/spawner/random/misc/plant, @@ -30255,7 +30243,7 @@ /area/ice_colony/underground/hallway/south_east/garbledradio) "tzo" = ( /obj/machinery/door/poddoor/timed_late/containment/landing_zone, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/underground/caves/rock) "tzI" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden{ @@ -30854,7 +30842,7 @@ /obj/effect/landmark/lv624/fog_blocker, /obj/effect/landmark/lv624/fog_blocker/xeno_spawn, /obj/effect/landmark/lv624/fog_blocker/xeno_spawn, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/underground/caves/rock) "uwf" = ( /obj/structure/rack, @@ -31410,7 +31398,7 @@ /obj/machinery/door/poddoor/timed_late/containment/landing_zone/lz2{ dir = 2 }, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/underground/caves/rock) "vdL" = ( /obj/effect/landmark/weed_node, @@ -31794,10 +31782,6 @@ /obj/effect/ai_node, /turf/open/floor/tile/dark, /area/ice_colony/underground/westroadtunnel) -"vGy" = ( -/obj/machinery/miner/damaged, -/turf/open/floor/plating/ground/snow/layer2, -/area/ice_colony/exterior/surface/valley/north) "vGO" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 5 @@ -31911,7 +31895,7 @@ /area/ice_colony/exterior/surface/clearing/south) "vQg" = ( /obj/effect/landmark/lv624/fog_blocker, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/underground/caves/rock) "vRq" = ( /obj/structure/disposalpipe/segment{ @@ -32498,7 +32482,7 @@ "wFT" = ( /obj/effect/landmark/lv624/fog_blocker, /obj/effect/landmark/lv624/fog_blocker/xeno_spawn, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/underground/caves/rock) "wGa" = ( /obj/effect/spawner/random/engineering/structure/tank/fuelweighted, @@ -33478,7 +33462,7 @@ /turf/open/floor/tile/dark/yellow2, /area/ice_colony/underground/engineering) "xJX" = ( -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/underground/caves/rock) "xKA" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -33822,7 +33806,7 @@ /area/ice_colony/underground/medical/lobby/garbledradio) "yeX" = ( /obj/effect/landmark/lv624/fog_blocker/xeno_spawn, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/ice_colony/exterior/underground/caves/rock) "yfG" = ( /obj/structure/bed/chair/wood/normal{ @@ -49100,7 +49084,7 @@ xJX hKV vCr eAl -kqC +eAl bVW eAl eAl @@ -54808,7 +54792,7 @@ aKC aKC vPZ aXE -mxl +aKC aKC aKC exj @@ -59626,7 +59610,7 @@ nsF nsF nsF wkf -mTO +wkf wkf wkf hlm @@ -60427,7 +60411,7 @@ uSg uSg hKV fIm -vGy +fIm fIm fIm fIm @@ -67441,7 +67425,7 @@ wkf xCs wkf mqj -jPw +mqj wkf wkf xCs @@ -70255,7 +70239,7 @@ fIR uXx xnK uUO -hqp +xnK xnK sZv sZv @@ -70653,7 +70637,7 @@ xnK xnK pdQ sZv -hqp +xnK oYT bqg xnK @@ -71899,7 +71883,7 @@ aiX aiX wkf wkf -wkf +mTO cZy nsF wkf diff --git a/_maps/map_files/Iteron/Iteron.dmm b/_maps/map_files/Iteron/Iteron.dmm index 72a866b659041..5909e0e067cdb 100644 --- a/_maps/map_files/Iteron/Iteron.dmm +++ b/_maps/map_files/Iteron/Iteron.dmm @@ -8,6 +8,10 @@ }, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/hanger) +"an" = ( +/obj/structure/reagent_dispensers/fueltank/barrel, +/turf/open/floor/plating, +/area/mainship/patrol_base/hanger) "ao" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 6 @@ -31,16 +35,10 @@ dir = 1 }, /obj/effect/turf_decal/warning_stripes/thin{ - dir = 10 + dir = 6 }, /turf/open/floor/prison/plate, /area/mainship/patrol_base) -"aJ" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/orange, -/area/mainship/patrol_base) "aL" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 10 @@ -59,11 +57,17 @@ }, /area/space) "aU" = ( -/obj/effect/turf_decal/warning_stripes/thin{ +/obj/machinery/photocopier, +/turf/open/floor/mainship/blue{ dir = 4 }, -/turf/open/floor/prison/plate, -/area/mainship/patrol_base/hanger) +/area/mainship/patrol_base) +"aX" = ( +/obj/structure/bed/chair/nometal{ + dir = 4 + }, +/turf/open/floor/mainship/blue, +/area/mainship/patrol_base/prep) "ba" = ( /turf/open/floor/plating, /area/mainship/patrol_base/hanger) @@ -74,52 +78,56 @@ /turf/open/floor/mainship/mono, /area/mainship/patrol_base/command) "bi" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 +/obj/structure/dropship_piece/tadpole/tadpole_nose/right{ + dir = 1; + pixel_y = 32 }, -/turf/open/floor/plating, -/area/mainship/patrol_base/hanger) -"bm" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 +/obj/structure/dropship_piece/tadpole/cockpit/right{ + dir = 1 }, /turf/open/floor/plating, /area/mainship/patrol_base/hanger) "bo" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 +/obj/structure/dropship_piece/two/weapon/rightright{ + dir = 1; + pixel_y = 32 + }, +/obj/effect/attach_point/weapon/minidropship{ + equipment_offset_y = 25 + }, +/obj/structure/dropship_piece/tadpole/engine{ + dir = 1; + pixel_x = 23 + }, +/turf/closed/shuttle/dropship2/rearcorner{ + dir = 1 }, -/turf/open/floor/prison/plate, /area/mainship/patrol_base/hanger) "bu" = ( /turf/closed/wall/mainship/outer/reinforced, /area/mainship/patrol_base) "bG" = ( -/obj/structure/drop_pod_launcher, -/obj/structure/droppod/nonmob/supply_pod, -/turf/open/floor/prison/cleanmarked, -/area/mainship/patrol_base/hanger) -"bH" = ( -/obj/structure/closet/crate/bravo, -/obj/structure/closet/crate/bravo, -/obj/structure/closet/crate/bravo, -/obj/structure/closet/crate/bravo, -/obj/structure/closet/crate/bravo, -/obj/structure/closet/crate/bravo, -/obj/structure/closet/crate/bravo, -/obj/structure/closet/crate/bravo, -/turf/open/floor/prison/plate, +/obj/structure/largecrate, +/turf/open/floor/mainship/orange{ + dir = 5 + }, /area/mainship/patrol_base) -"bI" = ( +"bH" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 }, -/obj/machinery/light/mainship{ - dir = 1 +/turf/open/floor/plating, +/area/mainship/patrol_base/hanger) +"bI" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 }, /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 }, +/obj/machinery/light/mainship{ + dir = 1 + }, /turf/open/floor/prison/arrow/clean{ dir = 8 }, @@ -139,6 +147,7 @@ /obj/machinery/light/mainship{ dir = 1 }, +/obj/machinery/vending/nanomed, /turf/open/floor/prison/arrow/clean{ dir = 8 }, @@ -153,9 +162,9 @@ /obj/machinery/light/mainship{ dir = 1 }, -/obj/machinery/vending/nanomed, +/obj/item/radio/intercom/general, /turf/open/floor/prison/arrow/clean{ - dir = 8 + dir = 4 }, /area/mainship/patrol_base/hanger) "bX" = ( @@ -168,24 +177,15 @@ /obj/machinery/light/mainship{ dir = 1 }, -/obj/item/radio/intercom/general, /turf/open/floor/prison/arrow/clean{ dir = 4 }, /area/mainship/patrol_base/hanger) "bZ" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/prison/arrow/clean{ - dir = 4 - }, +/obj/structure/droppod, +/obj/structure/drop_pod_launcher, +/obj/machinery/camera/autoname/mainship, +/turf/open/floor/prison/cleanmarked, /area/mainship/patrol_base/hanger) "cc" = ( /obj/structure/window/framed/mainship/hull, @@ -212,15 +212,16 @@ /turf/open/floor/mainship/mono, /area/mainship/patrol_base/barracks) "ct" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 +/obj/structure/prop/mainship/mission_planning_system, +/turf/open/floor/mainship/blue{ + dir = 6 }, -/turf/open/floor/prison/plate, -/area/mainship/patrol_base/hanger) -"cF" = ( +/area/mainship/patrol_base) +"cG" = ( +/obj/structure/window/framed/mainship/hull, +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base/prep) +"cI" = ( /obj/structure/dropship_piece/tadpole/tadpole_nose/left{ dir = 1; pixel_y = 32 @@ -230,126 +231,70 @@ }, /turf/open/floor/plating, /area/mainship/patrol_base/hanger) -"cG" = ( -/obj/structure/dropship_piece/tadpole/tadpole_nose{ - dir = 1; - pixel_y = 32 - }, -/turf/closed/shuttle/dropship2/singlewindow{ - dir = 1 +"cQ" = ( +/obj/effect/attach_point/crew_weapon/minidropship, +/obj/machinery/door/poddoor/mainship/open{ + id = "minidropship_podlock" }, +/turf/open/floor/mainship/mono, /area/mainship/patrol_base/hanger) -"cI" = ( -/obj/structure/dropship_piece/tadpole/tadpole_nose/right{ - dir = 1; - pixel_y = 32 +"da" = ( +/obj/structure/dropship_piece/tadpole/rearright{ + dir = 1 }, -/obj/structure/dropship_piece/tadpole/cockpit/right{ +/obj/structure/dropship_piece/tadpole/rearright{ dir = 1 }, /turf/open/floor/plating, /area/mainship/patrol_base/hanger) -"da" = ( +"dc" = ( /obj/machinery/light{ dir = 4 }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/turf/open/floor/prison/plate, -/area/mainship/patrol_base/hanger) -"db" = ( -/obj/structure/reagent_dispensers/fueltank/barrel, -/turf/open/floor/mainship/orange{ - dir = 9 +/turf/open/floor/mainship/purple{ + dir = 4 }, -/area/mainship/patrol_base) -"dc" = ( -/obj/effect/landmark/reward_spawn_location, -/obj/effect/turf_decal/warning_stripes/box/empty, -/turf/open/floor/prison/plate, -/area/mainship/patrol_base) +/area/mainship/patrol_base/prep) "do" = ( +/obj/machinery/telecomms/relay/preset/telecomms, /turf/open/floor/mainship/orange{ - dir = 1 + dir = 9 }, /area/mainship/patrol_base) -"du" = ( +"dC" = ( /obj/structure/largecrate/packed, /turf/open/floor/mainship/orange{ dir = 1 }, /area/mainship/patrol_base) -"dw" = ( -/obj/structure/sign/directions/supply{ - dir = 1 - }, -/turf/closed/wall/mainship/outer/reinforced, -/area/mainship/patrol_base/prep) -"dC" = ( -/obj/structure/largecrate, -/turf/open/floor/mainship/orange{ - dir = 5 - }, -/area/mainship/patrol_base) "dE" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/turf/open/floor/prison/arrow/clean{ - dir = 8 - }, +/obj/structure/drop_pod_launcher/sentry, +/obj/structure/droppod/nonmob/turret_pod, +/turf/open/floor/prison/cleanmarked, /area/mainship/patrol_base/hanger) "dL" = ( -/obj/machinery/vending/mech_vendor, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 +/turf/open/floor/mainship/green{ + dir = 6 }, -/obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/prison/plate, /area/mainship/patrol_base) "dP" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/turf/open/floor/prison/arrow/clean{ - dir = 4 - }, -/area/mainship/patrol_base/hanger) -"dT" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 +/obj/structure/dropship_piece/tadpole/tadpole_nose{ + dir = 1; + pixel_y = 32 }, -/turf/open/floor/prison/arrow/clean{ - dir = 4 +/turf/closed/shuttle/dropship2/singlewindow{ + dir = 1 }, /area/mainship/patrol_base/hanger) "dU" = ( -/obj/effect/turf_decal/warning_stripes/box/arrow{ - dir = 4 - }, -/turf/open/floor/mainship/black{ - dir = 1 - }, -/area/mainship/patrol_base) -"dW" = ( -/obj/machinery/telecomms/relay/preset/telecomms, +/obj/machinery/camera/autoname/mainship, /turf/open/floor/mainship/orange{ - dir = 9 + dir = 1 }, /area/mainship/patrol_base) "dX" = ( /turf/open/floor/mainship/orange{ - dir = 5 + dir = 1 }, /area/mainship/patrol_base) "dY" = ( @@ -382,23 +327,30 @@ /turf/open/floor/mainship/mono, /area/mainship/patrol_base/barracks) "ec" = ( -/obj/structure/shuttle/engine/heater{ +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/effect/turf_decal/warning_stripes/thin{ dir = 4 }, -/turf/open/floor/mainship_hull/gray/dir{ +/turf/open/floor/prison/arrow/clean{ dir = 4 }, -/area/space) +/area/mainship/patrol_base/hanger) "ef" = ( /turf/open/space/basic, /area/space) "eo" = ( -/obj/structure/shuttle/engine/propulsion/burst/right{ +/obj/effect/turf_decal/warning_stripes/thin{ dir = 4 }, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space) +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/turf/open/floor/prison/arrow/clean{ + dir = 4 + }, +/area/mainship/patrol_base/hanger) "eu" = ( /turf/open/floor/mainship_hull/gray/dir{ dir = 8 @@ -407,15 +359,6 @@ "ev" = ( /turf/closed/wall/mainship/outer/reinforced, /area/mainship/patrol_base/command) -"ey" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/machinery/camera/autoname/mainship{ - dir = 8 - }, -/turf/open/floor/prison/plate, -/area/mainship/patrol_base/hanger) "eA" = ( /obj/structure/window/framed/mainship/hull, /turf/open/floor/mainship/mono, @@ -428,10 +371,14 @@ /turf/closed/wall/mainship/outer/reinforced, /area/mainship/patrol_base/prep) "eN" = ( -/obj/structure/window/framed/mainship/hull, -/turf/open/floor/mainship/mono, +/obj/structure/bed/chair/nometal{ + dir = 4 + }, +/turf/open/floor/mainship/red{ + dir = 1 + }, /area/mainship/patrol_base/prep) -"eP" = ( +"ff" = ( /obj/structure/dropship_piece/two/weapon/leftleft{ dir = 1; pixel_y = 32 @@ -447,52 +394,18 @@ dir = 1 }, /area/mainship/patrol_base/hanger) -"eW" = ( -/turf/closed/shuttle/dropship2/glassone{ - dir = 1 - }, -/area/mainship/patrol_base/hanger) -"ff" = ( +"fk" = ( /obj/machinery/prop/computer/tadpole, /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/hanger) -"fj" = ( -/turf/closed/shuttle/dropship2/glasstwo{ - dir = 1 - }, -/area/mainship/patrol_base/hanger) -"fk" = ( -/obj/structure/dropship_piece/two/weapon/rightright{ - dir = 1; - pixel_y = 32 - }, -/obj/effect/attach_point/weapon/minidropship{ - equipment_offset_y = 25 - }, -/obj/structure/dropship_piece/tadpole/engine{ - dir = 1; - pixel_x = 23 - }, -/turf/closed/shuttle/dropship2/rearcorner{ - dir = 1 - }, -/area/mainship/patrol_base/hanger) -"fq" = ( -/obj/structure/largecrate/random/barrel, -/obj/machinery/light{ - dir = 8 - }, +"fz" = ( /turf/open/floor/mainship/orange{ - dir = 8 + dir = 5 }, /area/mainship/patrol_base) -"fz" = ( -/obj/structure/reagent_dispensers/fueltank/barrel, -/turf/open/floor/prison/plate, -/area/mainship/patrol_base) "fA" = ( /obj/effect/turf_decal/warning_stripes/thin, -/obj/effect/turf_decal/warning_stripes/thin{ +/obj/effect/turf_decal/warning_stripes/box/arrow{ dir = 1 }, /turf/open/floor/prison/plate, @@ -501,45 +414,53 @@ /turf/open/floor/prison/plate, /area/mainship/patrol_base) "fI" = ( -/obj/structure/sign/pods, -/turf/open/floor/mainship/black, -/area/mainship/patrol_base) -"fL" = ( -/obj/structure/prop/mainship/prop_tech{ +/obj/structure/shuttle/engine/heater{ dir = 4 }, -/turf/open/floor/prison/plate, -/area/mainship/patrol_base) -"fP" = ( -/obj/structure/largecrate, -/obj/machinery/light{ +/turf/open/floor/mainship_hull/gray/dir{ dir = 4 }, -/turf/open/floor/mainship/orange{ +/area/space) +"fL" = ( +/obj/structure/shuttle/engine/propulsion/burst/right{ dir = 4 }, -/area/mainship/patrol_base) -"fT" = ( -/turf/open/floor/mainship/orange{ - dir = 8 +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) +"fP" = ( +/turf/open/floor/mainship/red{ + dir = 9 }, -/area/mainship/patrol_base) +/area/mainship/patrol_base/prep) +"fT" = ( +/obj/structure/drop_pod_launcher/supply, +/obj/structure/droppod/nonmob/supply_pod, +/turf/open/floor/prison/cleanmarked, +/area/mainship/patrol_base/hanger) "fV" = ( /turf/open/floor/mainship/mono, /area/mainship/patrol_base) "gb" = ( -/obj/machinery/power/smes/buildable/empty, -/turf/open/floor/mainship/orange{ - dir = 4 +/obj/structure/table/mainship/nometal, +/turf/open/floor/mainship/red{ + dir = 1 }, -/area/mainship/patrol_base) +/area/mainship/patrol_base/prep) "gc" = ( -/obj/structure/shuttle/engine/propulsion/burst{ - dir = 4 +/obj/structure/bed/chair/nometal{ + dir = 8 }, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space) +/turf/open/floor/mainship/red{ + dir = 1 + }, +/area/mainship/patrol_base/prep) +"gl" = ( +/obj/structure/ship_ammo/cas/rocket/napalm, +/turf/open/floor/mainship/orange{ + dir = 8 + }, +/area/mainship/patrol_base) "gx" = ( /obj/structure/bookcase, /turf/open/floor/mainship/mono, @@ -561,6 +482,19 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/command) +"gP" = ( +/obj/machinery/holopad{ + active_power_usage = 130; + desc = "It's a floor-mounted device for projecting holographic images. This one appears to have a larger lense."; + holo_range = 7; + name = "modfied holopad" + }, +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/patrol_base/hanger) "gQ" = ( /obj/structure/bed/nometal, /turf/open/floor/mainship/mono, @@ -605,12 +539,13 @@ /turf/open/floor/freezer, /area/mainship/patrol_base) "hm" = ( -/obj/effect/landmark/campaign/mech_spawner/heavy, -/obj/effect/turf_decal/warning_stripes/box/empty, +/obj/vehicle/ridden/powerloader, /turf/open/floor/prison/plate, /area/mainship/patrol_base) "hA" = ( -/turf/open/floor/mainship/black/corner, +/turf/open/floor/mainship/black/corner{ + dir = 8 + }, /area/mainship/patrol_base) "hI" = ( /obj/effect/landmark/start/job/squadcorpsman, @@ -621,85 +556,70 @@ /turf/open/floor/mainship/mono, /area/mainship/patrol_base/barracks) "hP" = ( -/obj/machinery/quick_vendor, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/red{ + dir = 8 + }, /area/mainship/patrol_base/prep) +"hR" = ( +/obj/machinery/light/mainship{ + dir = 1 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 9 + }, +/turf/open/floor/prison/bright_clean, +/area/mainship/patrol_base/hanger) "hX" = ( /obj/structure/table/mainship/nometal, /turf/open/floor/mainship/blue{ dir = 1 }, /area/mainship/patrol_base/command) -"hZ" = ( -/turf/open/floor/mainship/red{ - dir = 9 - }, -/area/mainship/patrol_base/prep) "ia" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/camera/autoname/mainship{ +/obj/machinery/light/mainship{ dir = 1 }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/prep) -"if" = ( /turf/open/floor/mainship/red{ - dir = 1 + dir = 5 }, /area/mainship/patrol_base/prep) -"ik" = ( -/turf/open/floor/mainship/red{ - dir = 5 +"ii" = ( +/turf/open/floor/mainship/orange{ + dir = 8 }, /area/mainship/patrol_base/prep) "il" = ( -/obj/machinery/quick_vendor, -/obj/machinery/light/mainship{ - dir = 1 +/turf/open/floor/mainship/red{ + dir = 4 }, -/turf/open/floor/mainship/mono, /area/mainship/patrol_base/prep) "im" = ( +/obj/machinery/light/mainship{ + dir = 1 + }, /turf/open/floor/mainship/purple{ dir = 9 }, /area/mainship/patrol_base/prep) -"in" = ( +"iv" = ( +/obj/structure/bed/chair/nometal{ + dir = 4 + }, /turf/open/floor/mainship/purple{ dir = 1 }, /area/mainship/patrol_base/prep) -"ir" = ( +"iy" = ( +/obj/structure/table/mainship/nometal, /turf/open/floor/mainship/purple{ - dir = 5 + dir = 1 }, /area/mainship/patrol_base/prep) -"iv" = ( +"iE" = ( +/obj/structure/table/mainship/nometal, +/turf/open/floor/mainship/blue, +/area/mainship/patrol_base/command) +"iF" = ( /obj/machinery/computer/security/marinemainship{ pixel_y = 18 }, @@ -708,7 +628,7 @@ dir = 9 }, /area/mainship/patrol_base) -"iy" = ( +"iG" = ( /obj/structure/bed/chair/office/dark{ dir = 8 }, @@ -716,24 +636,8 @@ dir = 1 }, /area/mainship/patrol_base) -"iE" = ( -/obj/structure/table/mainship/nometal, -/turf/open/floor/mainship/blue, -/area/mainship/patrol_base/command) -"iF" = ( -/obj/structure/prop/mainship/sensor_computer1, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/mainship/mono, -/area/mainship/patrol_base) -"iG" = ( -/obj/structure/prop/mainship/sensor_computer3, -/obj/machinery/camera/autoname/mainship, -/turf/open/floor/mainship/mono, -/area/mainship/patrol_base) "iI" = ( -/obj/structure/prop/mainship/sensor_computer2, +/obj/structure/prop/mainship/sensor_computer1, /obj/machinery/light{ dir = 1 }, @@ -744,66 +648,98 @@ dir = 1 }, /area/mainship/patrol_base) -"iN" = ( -/obj/structure/bed/chair/office/dark, -/obj/machinery/computer/security/marinemainship{ - pixel_y = 18 +"iL" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 }, -/turf/open/floor/mainship/blue{ - dir = 5 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 10 }, -/area/mainship/patrol_base) -"iV" = ( -/obj/machinery/door/poddoor/mainship/open{ - id = "minidropship_podlock" +/turf/open/floor/prison/arrow/clean{ + dir = 4 + }, +/area/mainship/patrol_base/hanger) +"iM" = ( +/obj/machinery/light/mainship, +/turf/open/floor/mainship/blue{ + dir = 10 }, +/area/mainship/patrol_base/prep) +"iN" = ( +/obj/structure/prop/mainship/sensor_computer2, /obj/machinery/light{ dir = 1 }, /turf/open/floor/mainship/mono, -/area/mainship/patrol_base/hanger) +/area/mainship/patrol_base) "iX" = ( /turf/open/floor/mainship/mono, /area/mainship/patrol_base/hanger) "iY" = ( -/obj/docking_port/mobile/marine_dropship/minidropship, -/obj/structure/bed/chair/dropship/pilot{ +/obj/machinery/door/poddoor/mainship/open{ + id = "minidropship_podlock" + }, +/obj/machinery/light{ dir = 1 }, -/turf/open/floor/plating/plating_catwalk, +/turf/open/floor/mainship/mono, /area/mainship/patrol_base/hanger) "iZ" = ( -/obj/structure/largecrate/random/barrel, -/turf/open/floor/mainship/orange{ +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/machinery/camera/autoname/mainship{ dir = 8 }, -/area/mainship/patrol_base) -"jk" = ( -/obj/structure/largecrate/random/case/double, /turf/open/floor/prison/plate, -/area/mainship/patrol_base) -"jn" = ( -/obj/structure/largecrate, +/area/mainship/patrol_base/hanger) +"ja" = ( +/obj/structure/table/mainship/nometal, +/turf/open/floor/mainship/orange, +/area/mainship/patrol_base/prep) +"jk" = ( +/obj/structure/largecrate/random/barrel, +/turf/open/floor/mainship/orange{ + dir = 8 + }, +/area/mainship/patrol_base) +"jn" = ( +/obj/structure/largecrate/random/case/double, /turf/open/floor/prison/plate, /area/mainship/patrol_base) "jq" = ( +/obj/structure/bed/chair/nometal{ + dir = 8 + }, +/turf/open/floor/mainship/purple{ + dir = 1 + }, +/area/mainship/patrol_base/prep) +"jr" = ( +/obj/structure/ship_ammo/cas/minirocket, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/mainship/orange{ + dir = 8 + }, +/area/mainship/patrol_base) +"js" = ( /obj/structure/largecrate, /turf/open/floor/mainship/orange{ dir = 4 }, /area/mainship/patrol_base) -"js" = ( -/obj/structure/drop_pod_launcher, -/obj/machinery/light/mainship{ +"jy" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/turf/open/floor/prison/arrow/clean{ dir = 8 }, -/obj/structure/droppod/nonmob/mech_pod, -/turf/open/floor/prison/cleanmarked, -/area/mainship/patrol_base/hanger) -"jy" = ( -/obj/structure/drop_pod_launcher, -/obj/structure/droppod, -/turf/open/floor/prison/cleanmarked, /area/mainship/patrol_base/hanger) "jI" = ( /obj/structure/drop_pod_launcher/leader, @@ -811,39 +747,48 @@ /turf/open/floor/prison/cleanmarked, /area/mainship/patrol_base/hanger) "jK" = ( -/obj/machinery/camera/autoname/mainship, +/obj/structure/reagent_dispensers/fueltank/barrel, /turf/open/floor/mainship/orange{ - dir = 1 + dir = 9 }, /area/mainship/patrol_base) "jL" = ( /obj/structure/drop_pod_launcher, -/obj/structure/droppod/nonmob/turret_pod, +/obj/structure/droppod, /turf/open/floor/prison/cleanmarked, /area/mainship/patrol_base/hanger) +"jP" = ( +/obj/structure/dropship_piece/tadpole/rearleft{ + dir = 4 + }, +/obj/structure/dropship_piece/tadpole/engine{ + pixel_x = -23 + }, +/turf/open/floor/plating, +/area/mainship/patrol_base/hanger) "jU" = ( -/obj/structure/drop_pod_launcher, +/turf/open/floor/mainship/purple{ + dir = 5 + }, +/area/mainship/patrol_base/prep) +"ka" = ( /obj/machinery/light/mainship{ dir = 4 }, +/obj/structure/drop_pod_launcher/mech, /obj/structure/droppod/nonmob/mech_pod, /turf/open/floor/prison/cleanmarked, /area/mainship/patrol_base/hanger) -"ka" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/mainship/orange{ - dir = 8 - }, -/area/mainship/patrol_base) "kb" = ( -/obj/structure/shuttle/engine/propulsion/burst/left{ - dir = 4 +/obj/structure/window/framed/mainship/hull, +/turf/open/floor/prison/plate, +/area/mainship/patrol_base) +"ke" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 10 }, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space) +/turf/open/floor/prison/bright_clean, +/area/mainship/patrol_base/hanger) "kf" = ( /obj/structure/ship_rail_gun, /turf/closed/wall/mainship/outer/reinforced, @@ -880,6 +825,15 @@ }, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/command) +"ku" = ( +/obj/machinery/light/mainship{ + dir = 1 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 5 + }, +/turf/open/floor/prison/bright_clean, +/area/mainship/patrol_base/hanger) "kx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 10 @@ -913,56 +867,43 @@ /turf/open/floor/freezer, /area/mainship/patrol_base) "kM" = ( -/obj/effect/turf_decal/warning_stripes/box/arrow{ - dir = 4 +/turf/closed/shuttle/dropship2/glasstwo{ + dir = 1 }, -/turf/open/floor/mainship/mono, /area/mainship/patrol_base/hanger) -"kN" = ( -/turf/open/floor/mainship/red{ - dir = 8 - }, -/area/mainship/patrol_base/prep) "kP" = ( /turf/open/floor/mainship/mono, /area/mainship/patrol_base/prep) -"kV" = ( -/turf/open/floor/mainship/red{ - dir = 4 - }, -/area/mainship/patrol_base/prep) "la" = ( /turf/open/floor/mainship/purple{ dir = 8 }, /area/mainship/patrol_base/prep) -"lh" = ( -/turf/open/floor/mainship/purple{ - dir = 4 - }, -/area/mainship/patrol_base/prep) "ln" = ( -/obj/structure/table/mainship/nometal, -/turf/open/floor/mainship/blue{ +/obj/structure/largecrate/random/barrel, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/mainship/orange{ dir = 8 }, /area/mainship/patrol_base) "lu" = ( -/obj/structure/prop/mainship/prop_so{ - dir = 1 - }, -/obj/structure/bed/chair/office/dark{ - dir = 1 +/obj/structure/table/mainship/nometal, +/turf/open/floor/mainship/blue{ + dir = 8 }, -/turf/open/floor/mainship/mono, /area/mainship/patrol_base) "lI" = ( -/obj/structure/prop/mainship/prop_so, -/turf/open/floor/mainship/mono, +/obj/structure/reagent_dispensers/fueltank/barrel, +/turf/open/floor/prison/plate, /area/mainship/patrol_base) "lN" = ( -/obj/machinery/photocopier, -/turf/open/floor/mainship/blue{ +/obj/structure/largecrate, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/mainship/orange{ dir = 4 }, /area/mainship/patrol_base) @@ -997,88 +938,96 @@ }, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/barracks) -"lX" = ( -/obj/structure/window/framed/mainship/hull, -/turf/open/floor/mainship/mono, +"lU" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/item/radio/intercom/general, +/obj/machinery/light/mainship{ + light_color = "#da2f1b" + }, +/turf/open/floor/prison/arrow/clean{ + dir = 4 + }, /area/mainship/patrol_base/hanger) -"mn" = ( +"lX" = ( +/obj/machinery/power/smes/buildable/empty, +/turf/open/floor/mainship/orange{ + dir = 4 + }, +/area/mainship/patrol_base) +"mq" = ( +/obj/structure/shuttle/engine/propulsion/burst{ + dir = 4 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) +"mr" = ( /obj/machinery/door/poddoor/mainship/open{ id = "minidropship_podlock" }, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/hanger) -"mq" = ( -/obj/structure/patrol_point/tgmc_11, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/hanger) -"mr" = ( -/obj/effect/attach_point/crew_weapon/minidropship, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/hanger) -"mt" = ( -/obj/machinery/vending/tool, -/turf/open/floor/mainship/mono, -/area/mainship/patrol_base) "mw" = ( -/obj/structure/patrol_point/tgmc_13, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/hanger) -"mA" = ( -/obj/structure/patrol_point/tgmc_21, +/obj/structure/patrol_point/tgmc_11, /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/hanger) "mI" = ( -/obj/structure/sign/directions/supply, -/turf/closed/wall/mainship/outer/reinforced, +/obj/structure/bed/chair/nometal{ + dir = 8 + }, +/turf/open/floor/mainship/mono, /area/mainship/patrol_base/prep) "mL" = ( -/obj/structure/patrol_point/tgmc_23, +/obj/structure/patrol_point/tgmc_21, /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/hanger) "mU" = ( /obj/effect/turf_decal/warning_stripes/thin, /obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 + dir = 9 }, /turf/open/floor/prison/plate, /area/mainship/patrol_base) +"mZ" = ( +/obj/structure/table/mainship/nometal, +/turf/open/floor/mainship/blue, +/area/mainship/patrol_base/prep) "na" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, -/obj/vehicle/ridden/powerloader, -/turf/open/floor/mainship/orange{ +/obj/effect/turf_decal/warning_stripes/thin{ dir = 8 }, -/area/mainship/patrol_base) -"nl" = ( -/obj/structure/largecrate/random/case/double, +/turf/open/floor/prison/plate, +/area/mainship/patrol_base/hanger) +"nt" = ( +/turf/open/floor/mainship/purple{ + dir = 4 + }, +/area/mainship/patrol_base/prep) +"nz" = ( +/obj/structure/largecrate/packed, /turf/open/floor/mainship/orange{ - dir = 8 + dir = 4 }, /area/mainship/patrol_base) -"nt" = ( -/obj/structure/largecrate/packed, +"nA" = ( +/obj/structure/reagent_dispensers/fueltank, /turf/open/floor/mainship/orange{ dir = 4 }, /area/mainship/patrol_base) -"nz" = ( -/obj/structure/drop_pod_launcher, -/obj/structure/droppod/nonmob/mech_pod, -/turf/open/floor/prison/cleanmarked, -/area/mainship/patrol_base/hanger) "nB" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 - }, -/turf/open/floor/prison/arrow/clean{ - dir = 8 - }, -/area/mainship/patrol_base/hanger) +/obj/effect/landmark/campaign/mech_spawner/light, +/obj/effect/turf_decal/warning_stripes/box/empty, +/turf/open/floor/prison/plate, +/area/mainship/patrol_base) "nL" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -1093,54 +1042,46 @@ /turf/open/floor/mainship/blue, /area/mainship/patrol_base/command) "nZ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer1{ - dir = 4 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 }, /obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 + dir = 5 + }, +/turf/open/floor/prison/arrow/clean{ + dir = 8 }, -/turf/open/floor/prison/bright_clean, /area/mainship/patrol_base/hanger) "oe" = ( +/obj/machinery/vending/mech_vendor, /obj/effect/turf_decal/warning_stripes/thin, -/obj/effect/turf_decal/warning_stripes/box/arrow{ +/obj/effect/turf_decal/warning_stripes/thin{ dir = 1 }, /turf/open/floor/prison/plate, /area/mainship/patrol_base) "oj" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ +/obj/effect/landmark/campaign/mech_spawner, +/obj/effect/turf_decal/warning_stripes/box/empty, +/obj/machinery/camera/autoname/mainship, +/obj/machinery/camera/autoname/mainship, +/turf/open/floor/prison/plate, +/area/mainship/patrol_base) +"om" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer1{ dir = 4 }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/hanger) -"om" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, +/turf/open/floor/prison/bright_clean, /area/mainship/patrol_base/hanger) "or" = ( /obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 + dir = 1 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 6 + dir = 4 }, /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/hanger) @@ -1154,6 +1095,24 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/hanger) "oA" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/prison/plate, +/area/mainship/patrol_base) +"oD" = ( +/turf/open/floor/mainship/orange{ + dir = 6 + }, +/area/mainship/patrol_base) +"oK" = ( +/obj/structure/largecrate/random/barrel, +/turf/open/floor/plating, +/area/mainship/patrol_base/hanger) +"oL" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 9 }, @@ -1165,26 +1124,12 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/hanger) -"oL" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/turf/open/floor/prison/bright_clean, -/area/mainship/patrol_base/hanger) "oU" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 - }, -/turf/open/floor/prison/arrow/clean{ - dir = 4 - }, -/area/mainship/patrol_base/hanger) +/turf/open/floor/prison/plate, +/area/mainship/patrol_base) "pa" = ( /obj/machinery/cic_maptable, /turf/open/floor/mainship/blue{ @@ -1192,12 +1137,8 @@ }, /area/mainship/patrol_base/command) "pj" = ( -/obj/effect/landmark/campaign/mech_spawner, +/obj/effect/landmark/campaign/mech_spawner/heavy, /obj/effect/turf_decal/warning_stripes/box/empty, -/obj/machinery/light, -/obj/machinery/camera/autoname/mainship{ - dir = 1 - }, /turf/open/floor/prison/plate, /area/mainship/patrol_base) "pk" = ( @@ -1207,12 +1148,9 @@ }, /area/mainship/patrol_base/command) "pm" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/mainship/black{ - dir = 1 - }, +/obj/structure/prop/mainship/sensor_computer3, +/obj/machinery/camera/autoname/mainship, +/turf/open/floor/mainship/mono, /area/mainship/patrol_base) "py" = ( /obj/structure/platform{ @@ -1270,49 +1208,77 @@ }, /area/mainship/patrol_base/command) "qk" = ( -/obj/machinery/quick_vendor, /obj/machinery/light{ dir = 8 }, -/turf/open/floor/mainship/mono, -/area/mainship/patrol_base/prep) -"qq" = ( -/obj/machinery/quick_vendor, -/obj/machinery/light{ - dir = 4 +/turf/open/floor/mainship/red{ + dir = 8 }, -/turf/open/floor/mainship/mono, /area/mainship/patrol_base/prep) "qr" = ( -/obj/structure/bed/chair/office/dark, -/obj/structure/prop/mainship/prop_so, -/turf/open/floor/mainship/blue{ - dir = 8 +/obj/docking_port/mobile/marine_dropship/minidropship, +/obj/structure/bed/chair/dropship/pilot{ + dir = 1 }, -/area/mainship/patrol_base) +/turf/open/floor/plating/plating_catwalk, +/area/mainship/patrol_base/hanger) "qv" = ( -/obj/machinery/cic_maptable/drawable/big, -/turf/open/floor/mainship/mono, +/obj/structure/largecrate, +/turf/open/floor/prison/plate, /area/mainship/patrol_base) +"qw" = ( +/obj/structure/droppod, +/obj/structure/drop_pod_launcher, +/obj/machinery/light/mainship{ + dir = 8 + }, +/turf/open/floor/prison/cleanmarked, +/area/mainship/patrol_base/hanger) "qy" = ( -/obj/structure/largecrate/random/case/double, -/turf/open/floor/mainship/mono, +/obj/machinery/light/mainship{ + dir = 8 + }, +/obj/structure/drop_pod_launcher/mech, +/obj/structure/droppod/nonmob/mech_pod, +/turf/open/floor/prison/cleanmarked, /area/mainship/patrol_base/hanger) "qB" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/mainship/orange{ + dir = 8 + }, +/area/mainship/patrol_base) +"qJ" = ( /obj/structure/prop/mainship/prop_so{ dir = 8; pixel_x = 9 }, /turf/open/floor/mainship/mono, /area/mainship/patrol_base) -"qJ" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/computer/emails, -/turf/open/floor/mainship/blue{ +"qM" = ( +/obj/machinery/light/mainship, +/turf/open/floor/mainship/orange{ + dir = 6 + }, +/area/mainship/patrol_base/prep) +"ra" = ( +/obj/structure/shuttle/engine/propulsion/burst/left{ dir = 4 }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) +"rb" = ( +/obj/effect/landmark/campaign/mech_spawner/light, +/obj/effect/turf_decal/warning_stripes/box/empty, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/plate, /area/mainship/patrol_base) -"qS" = ( +"rf" = ( /obj/structure/dropship_piece/tadpole/engine{ dir = 1; pixel_x = -23; @@ -1324,27 +1290,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/hanger) -"ra" = ( -/obj/structure/patrol_point/tgmc_12, -/turf/open/floor/mainship/mono, -/area/mainship/patrol_base/hanger) -"rb" = ( -/obj/structure/rack, -/obj/item/tool/crowbar/red, -/obj/item/tool/crowbar/red, -/obj/item/tool/crowbar/red, -/obj/item/tool/crowbar/red, -/obj/item/tool/crowbar/red, -/obj/item/weapon/claymore/mercsword/machete, -/obj/item/weapon/claymore/mercsword/machete, -/obj/item/weapon/claymore/mercsword/machete, -/obj/item/weapon/claymore/mercsword/machete, -/obj/item/weapon/claymore/mercsword/machete, -/turf/open/floor/prison/bright_clean, -/area/mainship/patrol_base/hanger) -"rf" = ( -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/hanger) "rg" = ( /obj/machinery/light/mainship{ dir = 8 @@ -1355,95 +1300,67 @@ }, /area/mainship/patrol_base/command) "rp" = ( -/obj/structure/patrol_point/tgmc_14, +/obj/structure/patrol_point/tgmc_12, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/hanger) "rq" = ( -/obj/structure/dropship_piece/tadpole/engine{ - dir = 1; - pixel_x = 23; - pixel_y = -14 - }, -/obj/machinery/light, -/obj/machinery/door/poddoor/mainship/open{ - id = "minidropship_podlock" - }, -/turf/open/floor/mainship/mono, -/area/mainship/patrol_base/hanger) -"rs" = ( -/obj/structure/patrol_point/tgmc_22, -/turf/open/floor/mainship/mono, +/turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/hanger) "rB" = ( -/obj/structure/patrol_point/tgmc_24, +/obj/structure/patrol_point/tgmc_22, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/hanger) -"rF" = ( -/obj/structure/largecrate/random/case, -/turf/open/floor/mainship/orange{ - dir = 8 - }, -/area/mainship/patrol_base) "rJ" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/turf/open/floor/prison/arrow/clean{ - dir = 8 - }, -/area/mainship/patrol_base/hanger) +/obj/effect/landmark/campaign/mech_spawner, +/obj/effect/turf_decal/warning_stripes/box/empty, +/turf/open/floor/prison/plate, +/area/mainship/patrol_base) "rK" = ( -/turf/open/floor/prison/bright_clean, -/area/mainship/patrol_base/hanger) -"rP" = ( -/obj/machinery/light/mainship, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 6 - }, -/turf/open/floor/prison/bright_clean, +/obj/structure/drop_pod_launcher/mech, +/obj/structure/droppod/nonmob/mech_pod, +/turf/open/floor/prison/cleanmarked, /area/mainship/patrol_base/hanger) "rR" = ( /obj/effect/turf_decal/warning_stripes/thin, /turf/open/floor/prison/bright_clean, /area/mainship/patrol_base/hanger) "rU" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 1 +/obj/effect/landmark/campaign/mech_spawner/heavy, +/obj/effect/turf_decal/warning_stripes/box/empty, +/obj/machinery/light{ + dir = 4 }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/hanger) +/turf/open/floor/prison/plate, +/area/mainship/patrol_base) "rV" = ( -/obj/machinery/light/mainship, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 10 +/obj/structure/prop/mainship/prop_so{ + dir = 1 }, -/turf/open/floor/prison/bright_clean, -/area/mainship/patrol_base/hanger) +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base) "sb" = ( /obj/structure/table/mainship/nometal, /obj/machinery/computer/squad_changer, /turf/open/floor/mainship/blue, /area/mainship/patrol_base/command) "se" = ( -/obj/structure/largecrate/random/barrel, -/turf/open/floor/plating, -/area/mainship/patrol_base/hanger) +/obj/structure/prop/mainship/prop_so, +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base) "sk" = ( +/obj/machinery/light/mainship, /obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/turf/open/floor/prison/arrow/clean{ - dir = 4 + dir = 10 }, +/turf/open/floor/prison/bright_clean, /area/mainship/patrol_base/hanger) "sr" = ( -/obj/structure/prop/mainship/doorblocker/engi{ - dir = 4 - }, +/obj/structure/window/framed/mainship/hull, /turf/open/floor/mainship/mono, -/area/mainship/patrol_base) +/area/mainship/patrol_base/hanger) "sz" = ( /turf/open/floor/mainship/blue{ dir = 8 @@ -1515,54 +1432,86 @@ dir = 9 }, /area/mainship/patrol_base/barracks) -"tH" = ( -/obj/effect/landmark/start/latejoin, -/turf/open/floor/mainship/black{ - dir = 1 +"tv" = ( +/obj/machinery/door/poddoor/mainship/open{ + dir = 2; + id = "minidropship_podlock" + }, +/obj/structure/largecrate/packed, +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base/hanger) +"tC" = ( +/obj/structure/ship_ammo/cas/rocket/widowmaker, +/turf/open/floor/prison/plate, +/area/mainship/patrol_base) +"tH" = ( +/obj/effect/landmark/start/latejoin, +/turf/open/floor/mainship/black{ + dir = 1 }, /area/mainship/patrol_base/barracks) "tI" = ( +/obj/machinery/vending/tool, /turf/open/floor/mainship/black{ dir = 1 }, /area/mainship/patrol_base/barracks) "tJ" = ( +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/structure/table/mainship/nometal, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/prep) "tR" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/mainship/purple{ - dir = 8 +/obj/effect/attach_point/crew_weapon/minidropship, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/patrol_base/hanger) +"tZ" = ( +/obj/machinery/light{ + dir = 4 }, -/area/mainship/patrol_base/prep) -"ua" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/computer/emails, /turf/open/floor/mainship/blue{ - dir = 10 + dir = 4 }, +/area/mainship/patrol_base/prep) +"ua" = ( +/obj/machinery/vending/engivend, +/turf/open/floor/mainship/mono, /area/mainship/patrol_base) "uf" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/structure/sign/pods{ - dir = 4 - }, -/turf/open/floor/prison/plate, +/obj/structure/patrol_point/tgmc_13, +/turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/hanger) "ui" = ( +/obj/machinery/vending/mech_vendor, /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 }, -/obj/effect/turf_decal/warning_stripes/box/arrow, +/obj/effect/turf_decal/warning_stripes/thin, /turf/open/floor/prison/plate, /area/mainship/patrol_base) "um" = ( -/obj/machinery/cic_maptable, -/turf/open/floor/mainship/blue, -/area/mainship/patrol_base) +/obj/structure/patrol_point/tgmc_23, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/patrol_base/hanger) "ur" = ( /obj/machinery/light, /turf/open/floor/mainship/blue, @@ -1571,27 +1520,35 @@ /turf/open/floor/mainship/blue, /area/mainship/patrol_base) "uw" = ( -/obj/structure/bed/chair/office/dark{ - dir = 4 - }, -/obj/structure/prop/mainship/prop_so{ - dir = 4 +/obj/structure/largecrate/random/case/double, +/turf/open/floor/mainship/orange{ + dir = 8 }, -/turf/open/floor/mainship/blue, /area/mainship/patrol_base) "ux" = ( -/obj/structure/prop/mainship/mission_planning_system, -/turf/open/floor/mainship/blue{ - dir = 6 - }, +/obj/structure/closet/crate/alpha, +/obj/structure/closet/crate/alpha, +/obj/structure/closet/crate/alpha, +/obj/structure/closet/crate/alpha, +/obj/structure/closet/crate/alpha, +/obj/structure/closet/crate/alpha, +/obj/structure/closet/crate/alpha, +/obj/structure/closet/crate/alpha, +/turf/open/floor/prison/plate, /area/mainship/patrol_base) "uA" = ( -/obj/structure/droppod, -/obj/structure/drop_pod_launcher, -/obj/machinery/camera/autoname/mainship{ - dir = 1 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/machinery/light/mainship{ + light_color = "#da2f1b" + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/turf/open/floor/prison/arrow/clean{ + dir = 8 }, -/turf/open/floor/prison/cleanmarked, /area/mainship/patrol_base/hanger) "uD" = ( /obj/structure/platform{ @@ -1601,13 +1558,13 @@ /turf/open/floor/mainship/mono, /area/mainship/patrol_base/command) "uN" = ( -/obj/structure/dropship_piece/tadpole/rearleft{ - dir = 1 +/obj/machinery/light{ + dir = 8 }, -/obj/structure/dropship_piece/tadpole/rearleft{ - dir = 1 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 }, -/turf/open/floor/plating, +/turf/open/floor/prison/plate, /area/mainship/patrol_base/hanger) "uQ" = ( /obj/machinery/door/poddoor/mainship/open{ @@ -1617,69 +1574,87 @@ /turf/open/floor/mainship/mono, /area/mainship/patrol_base/hanger) "uS" = ( -/obj/machinery/door/poddoor/mainship/open{ - dir = 2; - id = "minidropship_podlock" - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/hanger) -"uU" = ( -/obj/structure/dropship_piece/tadpole/rearright{ +/obj/structure/dropship_piece/tadpole/rearleft{ dir = 1 }, -/obj/structure/dropship_piece/tadpole/rearright{ +/obj/structure/dropship_piece/tadpole/rearleft{ dir = 1 }, /turf/open/floor/plating, /area/mainship/patrol_base/hanger) "vb" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/mainship/orange{ - dir = 4 - }, +/obj/structure/closet/crate/charlie, +/obj/structure/closet/crate/charlie, +/obj/structure/closet/crate/charlie, +/obj/structure/closet/crate/charlie, +/obj/structure/closet/crate/charlie, +/obj/structure/closet/crate/charlie, +/obj/structure/closet/crate/charlie, +/obj/structure/closet/crate/charlie, +/turf/open/floor/prison/plate, /area/mainship/patrol_base) "vd" = ( -/obj/effect/turf_decal/warning_stripes/box/arrow{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 1 }, -/turf/open/floor/mainship/mono, +/turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/prep) "ve" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 9 }, -/turf/open/floor/prison/bright_clean, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/hanger) "vp" = ( /turf/open/floor/mainship/stripesquare, /area/mainship/patrol_base/hanger) "vr" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 5 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 10 + }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 1 + dir = 6 }, /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/hanger) "vx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, /obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 + dir = 1 }, /turf/open/floor/prison/bright_clean, /area/mainship/patrol_base/hanger) "vB" = ( -/obj/machinery/fuelcell_recycler, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/orange{ + dir = 8 + }, /area/mainship/patrol_base) "vC" = ( -/obj/machinery/power/fusion_engine{ - name = "\improper S-52 fusion reactor #4" +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 }, -/turf/open/floor/mainship/orange{ +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 9 + }, +/turf/open/floor/prison/arrow/clean{ dir = 4 }, -/area/mainship/patrol_base) +/area/mainship/patrol_base/hanger) "vF" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/mainship/mono, @@ -1725,6 +1700,14 @@ }, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/command) +"wh" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/mainship/orange{ + dir = 4 + }, +/area/mainship/patrol_base) "wm" = ( /obj/structure/sink{ dir = 1 @@ -1744,21 +1727,24 @@ /turf/open/floor/mainship/mono, /area/mainship/patrol_base/command) "wC" = ( -/turf/open/floor/mainship/green{ - dir = 9 +/obj/machinery/camera/autoname/mainship{ + dir = 8 }, -/area/mainship/patrol_base) +/turf/open/floor/mainship/purple{ + dir = 4 + }, +/area/mainship/patrol_base/prep) "xc" = ( -/obj/structure/table/mainship/nometal, +/obj/machinery/vending/cigarette, /turf/open/floor/mainship/black{ dir = 9 }, /area/mainship/patrol_base/barracks) "xm" = ( -/obj/structure/table/mainship/nometal, /obj/machinery/light{ dir = 1 }, +/obj/machinery/vending/coffee, /turf/open/floor/mainship/black{ dir = 1 }, @@ -1783,80 +1769,40 @@ /turf/open/floor/mainship/mono, /area/mainship/patrol_base/barracks) "xJ" = ( -/obj/structure/droppod, -/obj/structure/drop_pod_launcher, -/obj/machinery/camera/autoname/mainship, -/turf/open/floor/prison/cleanmarked, -/area/mainship/patrol_base/hanger) -"xO" = ( -/obj/machinery/vending/tool, -/turf/open/floor/mainship/black{ +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/machinery/light/mainship{ dir = 1 }, -/area/mainship/patrol_base/barracks) +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/turf/open/floor/prison/arrow/clean{ + dir = 8 + }, +/area/mainship/patrol_base/hanger) "xU" = ( -/obj/structure/table/mainship/nometal, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, /turf/open/floor/mainship/black{ - dir = 5 + dir = 1 }, /area/mainship/patrol_base/barracks) "xZ" = ( -/obj/structure/table/mainship/nometal, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 6 }, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 6 }, /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/prep) "yc" = ( -/obj/structure/bed/chair/nometal{ +/obj/structure/bed/chair/office/dark, +/obj/structure/prop/mainship/prop_so, +/turf/open/floor/mainship/blue{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/prep) +/area/mainship/patrol_base) "ye" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -1873,96 +1819,60 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/prep) -"yr" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 +"yn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/prep) +/obj/effect/turf_decal/warning_stripes/thin, +/turf/open/floor/prison/bright_clean, +/area/mainship/patrol_base/hanger) +"yr" = ( +/obj/machinery/cic_maptable/drawable/big, +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base) "yt" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ +/obj/structure/table/mainship/nometal, +/obj/machinery/computer/emails, +/turf/open/floor/mainship/blue{ dir = 4 }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/prep) +/area/mainship/patrol_base) "yu" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/structure/bed/chair/nometal{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 4 }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/prep) "yy" = ( +/obj/structure/patrol_point/tgmc_14, +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base/hanger) +"yC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 10 }, -/obj/structure/table/mainship/nometal, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 10 }, /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/prep) -"yC" = ( -/obj/machinery/light{ - dir = 1 +"yF" = ( +/obj/structure/dropship_piece/tadpole/engine{ + dir = 1; + pixel_x = 23; + pixel_y = -14 }, -/turf/open/floor/mainship/black{ - dir = 1 +/obj/machinery/light, +/obj/machinery/door/poddoor/mainship/open{ + id = "minidropship_podlock" }, -/area/mainship/patrol_base/prep) -"yF" = ( -/obj/structure/prop/mainship/doorblocker/patrol_base, /turf/open/floor/mainship/mono, -/area/mainship/patrol_base) +/area/mainship/patrol_base/hanger) "yH" = ( -/turf/open/floor/mainship/orange{ - dir = 4 - }, -/area/mainship/patrol_base) +/obj/structure/patrol_point/tgmc_24, +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base/hanger) "yJ" = ( /obj/machinery/door/poddoor/mainship/open{ dir = 2; @@ -1971,16 +1881,11 @@ /turf/open/floor/prison/bright_clean, /area/mainship/patrol_base/hanger) "yM" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/door/poddoor/mainship/open{ - dir = 2; - id = "minidropship_podlock" +/obj/structure/largecrate/random/case, +/turf/open/floor/mainship/orange{ + dir = 8 }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/hanger) +/area/mainship/patrol_base) "za" = ( /obj/structure/prop/mainship/mission_planning_system, /turf/open/floor/mainship/blue{ @@ -2015,12 +1920,14 @@ /turf/open/floor/mainship/mono, /area/mainship/patrol_base/command) "zA" = ( -/obj/effect/landmark/campaign/mech_spawner, -/obj/effect/turf_decal/warning_stripes/box/empty, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/camera/autoname/mainship, +/obj/structure/closet/crate/bravo, +/obj/structure/closet/crate/bravo, +/obj/structure/closet/crate/bravo, +/obj/structure/closet/crate/bravo, +/obj/structure/closet/crate/bravo, +/obj/structure/closet/crate/bravo, +/obj/structure/closet/crate/bravo, +/obj/structure/closet/crate/bravo, /turf/open/floor/prison/plate, /area/mainship/patrol_base) "zD" = ( @@ -2041,6 +1948,15 @@ dir = 1 }, /area/mainship/patrol_base) +"zT" = ( +/obj/structure/ship_ammo/cas/rocket/banshee, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/mainship/orange{ + dir = 8 + }, +/area/mainship/patrol_base) "zU" = ( /obj/machinery/light/mainship{ dir = 1 @@ -2050,65 +1966,82 @@ }, /area/mainship/patrol_base) "zY" = ( -/obj/structure/prop/mainship/hangar_stencil, -/turf/open/floor/mainship/mono, -/area/mainship/patrol_base/hanger) +/obj/structure/closet/crate/delta, +/obj/structure/closet/crate/delta, +/obj/structure/closet/crate/delta, +/obj/structure/closet/crate/delta, +/obj/structure/closet/crate/delta, +/obj/structure/closet/crate/delta, +/obj/structure/closet/crate/delta, +/obj/structure/closet/crate/delta, +/turf/open/floor/prison/plate, +/area/mainship/patrol_base) "Ab" = ( -/obj/structure/bed/chair/nometal{ - dir = 1 - }, /turf/open/floor/mainship/black/corner{ dir = 1 }, /area/mainship/patrol_base/barracks) -"Af" = ( -/obj/effect/turf_decal/warning_stripes/box/arrow{ - dir = 4 - }, -/turf/open/floor/mainship/black/corner{ - dir = 4 - }, -/area/mainship/patrol_base/barracks) "Am" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/prep) -"Aq" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 1 +"Ao" = ( +/obj/structure/dropship_piece/tadpole/engine{ + pixel_x = 23 }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/prep) +/turf/closed/shuttle/dropship2/rearcorner/alt, +/area/mainship/patrol_base/hanger) +"Aq" = ( +/turf/open/floor/prison/bright_clean, +/area/mainship/patrol_base/hanger) "AF" = ( -/obj/effect/turf_decal/warning_stripes/box/arrow{ +/obj/machinery/light/mainship, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 6 + }, +/turf/open/floor/prison/bright_clean, +/area/mainship/patrol_base/hanger) +"AL" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/mainship/orange{ dir = 4 }, -/turf/open/floor/mainship/mono, /area/mainship/patrol_base) "Bb" = ( -/turf/open/floor/mainship/black/corner{ +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/patrol_base/hanger) +"Bd" = ( +/obj/effect/turf_decal/warning_stripes/thin{ dir = 4 }, +/obj/machinery/light, +/turf/open/floor/prison/plate, /area/mainship/patrol_base) "Bh" = ( -/obj/machinery/light{ - dir = 1 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 }, -/obj/machinery/door/poddoor/campaign, -/turf/open/floor/mainship/black{ - dir = 1 +/turf/open/floor/prison/arrow/clean{ + dir = 4 }, /area/mainship/patrol_base/hanger) "Bl" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 +/obj/effect/turf_decal/warning_stripes/box/arrow{ + dir = 4 }, /turf/open/floor/mainship/black{ dir = 1 }, -/area/mainship/patrol_base/hanger) +/area/mainship/patrol_base) "Bn" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -2118,16 +2051,11 @@ }, /area/mainship/patrol_base/hanger) "Bp" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/obj/effect/turf_decal/warning_stripes/box/arrow{ - dir = 1 - }, -/turf/open/floor/mainship/black{ - dir = 1 +/obj/structure/prop/mainship/doorblocker/engi{ + dir = 4 }, -/area/mainship/patrol_base/hanger) +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base) "Br" = ( /obj/structure/bed/chair/comfy/black{ dir = 8 @@ -2144,32 +2072,50 @@ }, /area/mainship/patrol_base/command) "Bv" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 +/obj/machinery/camera/autoname/mainship{ + dir = 4 }, -/turf/open/floor/mainship/black{ - dir = 1 +/turf/open/floor/mainship/red{ + dir = 8 }, -/area/mainship/patrol_base/hanger) +/area/mainship/patrol_base/prep) "Bx" = ( /obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 + dir = 9 }, -/turf/open/floor/mainship/black/corner{ +/turf/open/floor/mainship/black{ dir = 1 }, -/area/mainship/patrol_base) +/area/mainship/patrol_base/hanger) "By" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/warning_stripes/box/arrow{ +/obj/structure/table/mainship/nometal, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, -/turf/open/floor/mainship/black{ - dir = 1 +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 }, -/area/mainship/patrol_base) +/turf/open/floor/plating/plating_catwalk, +/area/mainship/patrol_base/prep) "BA" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -2177,34 +2123,69 @@ /turf/open/floor/mainship/mono, /area/mainship/patrol_base) "BJ" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 +/obj/structure/bed/chair/nometal{ + dir = 4 }, -/turf/open/floor/mainship/black/corner{ +/obj/structure/bed/chair/nometal{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base/prep) +"BN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 4 }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/structure/table/mainship/nometal, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/patrol_base/prep) +"BO" = ( +/turf/open/floor/mainship/stripesquare, /area/mainship/patrol_base) -"BN" = ( +"BR" = ( /obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 - }, -/turf/open/floor/mainship/black{ dir = 1 }, -/area/mainship/patrol_base) -"BO" = ( -/turf/open/floor/mainship/stripesquare, -/area/mainship/patrol_base) -"Ck" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 1 }, /turf/open/floor/plating/plating_catwalk, +/area/mainship/patrol_base/hanger) +"Ck" = ( +/obj/effect/turf_decal/warning_stripes/box/arrow{ + dir = 1 + }, +/turf/open/floor/mainship/mono, /area/mainship/patrol_base) "Cl" = ( +/obj/structure/sign/pods{ + dir = 1 + }, /turf/open/floor/mainship/black{ - dir = 5 + dir = 1 }, /area/mainship/patrol_base) "Cn" = ( @@ -2232,6 +2213,30 @@ dir = 9 }, /area/mainship/patrol_base/command) +"Cx" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 6 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/patrol_base/hanger) +"CA" = ( +/obj/machinery/door/poddoor/mainship/open{ + dir = 2; + id = "minidropship_podlock" + }, +/obj/structure/reagent_dispensers/fueltank/barrel, +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base/hanger) +"CB" = ( +/obj/structure/ship_ammo/cas/rocket/widowmaker, +/turf/open/floor/mainship/orange, +/area/mainship/patrol_base) "CJ" = ( /turf/open/floor/mainship/terragov/west{ dir = 1 @@ -2262,16 +2267,17 @@ }, /area/mainship/patrol_base) "Dm" = ( -/turf/open/floor/mainship/green{ +/obj/structure/sign/directions/supply{ dir = 1 }, -/area/mainship/patrol_base) +/turf/closed/wall/mainship/outer/reinforced, +/area/mainship/patrol_base/prep) "Dn" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 }, /obj/effect/turf_decal/warning_stripes/thin{ - dir = 6 + dir = 10 }, /turf/open/floor/prison/plate, /area/mainship/patrol_base) @@ -2292,8 +2298,9 @@ /turf/open/floor/mainship/mono, /area/mainship/patrol_base) "Dw" = ( -/turf/open/floor/mainship/green, -/area/mainship/patrol_base) +/obj/structure/sign/directions/supply, +/turf/closed/wall/mainship/outer/reinforced, +/area/mainship/patrol_base/prep) "Dy" = ( /obj/machinery/vending/marineFood, /obj/item/reagent_containers/food/snacks/protein_pack, @@ -2323,13 +2330,30 @@ /turf/open/floor/mainship/mono, /area/mainship/patrol_base/barracks) "DC" = ( -/obj/effect/landmark/campaign/mech_spawner/light, -/obj/effect/turf_decal/warning_stripes/box/empty, -/obj/machinery/light{ - dir = 8 +/obj/structure/table/mainship/nometal, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 }, -/turf/open/floor/prison/plate, -/area/mainship/patrol_base) +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/patrol_base/prep) "DD" = ( /obj/machinery/computer/camera_advanced/overwatch/alpha, /turf/open/floor/mainship/blue{ @@ -2359,22 +2383,46 @@ /turf/open/floor/mainship/research, /area/mainship/patrol_base/prep) "DX" = ( -/obj/structure/window/framed/mainship/hull, -/turf/open/floor/prison/plate, +/turf/open/floor/mainship/green{ + dir = 1 + }, /area/mainship/patrol_base) "DY" = ( -/obj/machinery/door/poddoor/campaign, -/turf/open/floor/mainship/mono, +/obj/effect/turf_decal/warning_stripes/thin, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/turf/open/floor/prison/plate, +/area/mainship/patrol_base) +"Ec" = ( +/obj/effect/landmark/campaign/mech_spawner, +/obj/effect/turf_decal/warning_stripes/box/empty, +/obj/machinery/camera/autoname/mainship{ + dir = 1 + }, +/obj/machinery/camera/autoname/mainship{ + dir = 1 + }, +/turf/open/floor/prison/plate, +/area/mainship/patrol_base) +"Eq" = ( +/obj/structure/dropship_piece/tadpole/tadpole_nose/left{ + pixel_y = -32 + }, +/obj/structure/dropship_piece/tadpole/cockpit/left, +/turf/open/floor/plating, /area/mainship/patrol_base/hanger) "Er" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/mainship/mono, -/area/mainship/patrol_base/hanger) -"Es" = ( -/turf/open/floor/mainship/black{ - dir = 4 +/obj/structure/table/mainship/nometal, +/obj/machinery/computer/emails, +/turf/open/floor/mainship/blue{ + dir = 10 }, /area/mainship/patrol_base) +"Es" = ( +/obj/machinery/cic_maptable, +/turf/open/floor/mainship/blue, +/area/mainship/patrol_base) "Ex" = ( /obj/structure/table/mainship/nometal, /obj/machinery/prop/computer{ @@ -2406,6 +2454,12 @@ }, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/command) +"EQ" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 6 + }, +/turf/open/floor/prison/bright_clean, +/area/mainship/patrol_base/hanger) "EZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -2495,6 +2549,36 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/barracks) +"FU" = ( +/obj/structure/bed/chair/dropship/pilot, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/patrol_base/hanger) +"FV" = ( +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/structure/table/mainship/nometal, +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base/prep) "FX" = ( /obj/structure/platform{ dir = 8 @@ -2537,9 +2621,22 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/barracks) "Gp" = ( -/obj/machinery/light, -/turf/open/floor/mainship/black, +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/obj/structure/prop/mainship/prop_so{ + dir = 4 + }, +/turf/open/floor/mainship/blue, /area/mainship/patrol_base) +"Gw" = ( +/obj/machinery/camera/autoname/mainship{ + dir = 4 + }, +/turf/open/floor/mainship/orange{ + dir = 8 + }, +/area/mainship/patrol_base/prep) "Gz" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -2556,6 +2653,14 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/prep) +"GE" = ( +/obj/structure/droppod, +/obj/structure/drop_pod_launcher, +/obj/machinery/light/mainship{ + dir = 4 + }, +/turf/open/floor/prison/cleanmarked, +/area/mainship/patrol_base/hanger) "GF" = ( /turf/open/floor/mainship/terragov/north{ dir = 8 @@ -2571,67 +2676,68 @@ dir = 4 }, /area/mainship/patrol_base/prep) -"GK" = ( -/obj/effect/turf_decal/warning_stripes/box/arrow{ - dir = 1 - }, -/turf/open/floor/mainship/mono, +"GN" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/prison/plate, /area/mainship/patrol_base) "GR" = ( /obj/effect/landmark/start/job/fieldcommander/campaign, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/prep) "GV" = ( -/turf/open/floor/mainship/ntlogo, -/area/mainship/patrol_base/prep) +/obj/machinery/light{ + dir = 4 + }, +/obj/vehicle/ridden/powerloader, +/turf/open/floor/mainship/orange{ + dir = 4 + }, +/area/mainship/patrol_base) "GY" = ( -/turf/open/floor/mainship/ntlogo/nt2, +/turf/open/floor/mainship/ntlogo, /area/mainship/patrol_base/prep) "Ha" = ( -/turf/open/floor/mainship/ntlogo/nt3, +/turf/open/floor/mainship/ntlogo/nt2, /area/mainship/patrol_base/prep) "Hb" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/plating/plating_catwalk, +/turf/open/floor/mainship/ntlogo/nt3, /area/mainship/patrol_base/prep) "Ht" = ( -/obj/effect/landmark/campaign/mech_spawner/light, +/obj/effect/landmark/reward_spawn_location, /obj/effect/turf_decal/warning_stripes/box/empty, +/obj/structure/closet/crate, /turf/open/floor/prison/plate, /area/mainship/patrol_base) "Hz" = ( -/obj/structure/prop/mainship/mapping_computer, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 9 }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base) +/turf/open/floor/prison/bright_clean, +/area/mainship/patrol_base/hanger) "HD" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base) +/obj/structure/rack, +/obj/item/tool/crowbar/red, +/obj/item/tool/crowbar/red, +/obj/item/tool/crowbar/red, +/obj/item/tool/crowbar/red, +/obj/item/tool/crowbar/red, +/obj/item/weapon/claymore/mercsword/machete, +/obj/item/weapon/claymore/mercsword/machete, +/obj/item/weapon/claymore/mercsword/machete, +/obj/item/weapon/claymore/mercsword/machete, +/obj/item/weapon/claymore/mercsword/machete, +/turf/open/floor/prison/bright_clean, +/area/mainship/patrol_base/hanger) "HJ" = ( -/obj/machinery/cic_maptable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 4 }, +/obj/machinery/cic_maptable/drawable/big{ + pixel_x = -3 + }, /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base) "HK" = ( @@ -2642,13 +2748,10 @@ /turf/open/floor/mainship/mono, /area/mainship/patrol_base/barracks) "HP" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 + dir = 1 }, -/obj/machinery/door/poddoor/campaign, /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/hanger) "HQ" = ( @@ -2661,41 +2764,35 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/hanger) "Id" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2, -/turf/open/floor/plating/plating_catwalk, +/obj/structure/table/mainship/nometal, +/turf/open/floor/prison/bright_clean, /area/mainship/patrol_base/hanger) "Ig" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 1 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 5 }, -/turf/open/floor/plating/plating_catwalk, +/turf/open/floor/prison/bright_clean, /area/mainship/patrol_base/hanger) "Ii" = ( -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating/plating_catwalk, +/obj/machinery/fuelcell_recycler, +/turf/open/floor/mainship/mono, /area/mainship/patrol_base) "Im" = ( -/obj/structure/window/framed/mainship/hull, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 +/obj/machinery/power/fusion_engine{ + name = "\improper S-52 fusion reactor #4" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ +/turf/open/floor/mainship/orange{ dir = 4 }, -/turf/open/floor/mainship/mono, /area/mainship/patrol_base) "Ip" = ( -/turf/open/floor/mainship_hull/gray/dir{ - dir = 4 +/obj/machinery/light{ + dir = 1 }, -/area/space) +/turf/open/floor/mainship/black{ + dir = 1 + }, +/area/mainship/patrol_base/prep) "Is" = ( /turf/open/floor/mainship_hull/gray/dir{ dir = 10 @@ -2733,7 +2830,7 @@ /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 }, -/obj/effect/turf_decal/warning_stripes/thin, +/obj/effect/turf_decal/warning_stripes/box/arrow, /turf/open/floor/prison/plate, /area/mainship/patrol_base) "IO" = ( @@ -2744,6 +2841,20 @@ dir = 6 }, /area/mainship/patrol_base/command) +"IQ" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/machinery/light/mainship{ + light_color = "#da2f1b" + }, +/turf/open/floor/prison/arrow/clean{ + dir = 4 + }, +/area/mainship/patrol_base/hanger) "IT" = ( /turf/open/floor/mainship/blue{ dir = 10 @@ -2769,6 +2880,9 @@ }, /turf/open/floor/mainship/black, /area/mainship/patrol_base) +"Jj" = ( +/turf/closed/shuttle/dropship2/glassone, +/area/mainship/patrol_base/hanger) "Jm" = ( /obj/structure/platform{ dir = 8 @@ -2779,6 +2893,21 @@ }, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/command) +"Jn" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/machinery/vending/nanomed, +/obj/machinery/light/mainship{ + light_color = "#da2f1b" + }, +/turf/open/floor/prison/arrow/clean{ + dir = 8 + }, +/area/mainship/patrol_base/hanger) "Jp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -2786,7 +2915,7 @@ /area/mainship/patrol_base) "JB" = ( /obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 + dir = 8 }, /turf/open/floor/prison/plate, /area/mainship/patrol_base) @@ -2796,6 +2925,12 @@ }, /turf/open/floor/mainship/black, /area/mainship/patrol_base) +"JE" = ( +/obj/structure/bed/chair/nometal{ + dir = 8 + }, +/turf/open/floor/mainship/orange, +/area/mainship/patrol_base/prep) "JG" = ( /turf/open/floor/mainship/black/corner{ dir = 8 @@ -2821,17 +2956,19 @@ }, /area/mainship/patrol_base/prep) "JX" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer1{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 }, -/turf/open/floor/mainship/mono, -/area/mainship/patrol_base/hanger) +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/patrol_base/prep) "JY" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer1{ - dir = 1 +/turf/open/floor/mainship/black/corner{ + dir = 4 }, -/turf/open/floor/mainship/mono, -/area/mainship/patrol_base) +/area/mainship/patrol_base/prep) "Ka" = ( /obj/machinery/power/monitor{ name = "Core Power Monitoring" @@ -2861,10 +2998,14 @@ /obj/structure/stairs/seamless, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/command) +"Ky" = ( +/obj/structure/ship_ammo/cas/minirocket, +/turf/open/floor/prison/plate, +/area/mainship/patrol_base) "KB" = ( /obj/effect/turf_decal/warning_stripes/thin, /obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 + dir = 5 }, /turf/open/floor/prison/plate, /area/mainship/patrol_base) @@ -2886,7 +3027,6 @@ /turf/open/floor/prison/sterilewhite, /area/mainship/patrol_base) "KR" = ( -/obj/structure/bed/chair/nometal, /turf/open/floor/mainship/black{ dir = 8 }, @@ -2895,57 +3035,77 @@ /obj/effect/turf_decal/warning_stripes/box/arrow{ dir = 4 }, -/turf/open/floor/mainship/black/corner, +/turf/open/floor/mainship/mono, /area/mainship/patrol_base/barracks) "KW" = ( -/obj/machinery/light, -/turf/open/floor/mainship/black, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 9 + }, +/turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/prep) "Lh" = ( -/obj/machinery/light, -/obj/machinery/door/poddoor/campaign, -/turf/open/floor/mainship/black, -/area/mainship/patrol_base/hanger) +/turf/open/floor/mainship/black/corner{ + dir = 4 + }, +/area/mainship/patrol_base) "Ln" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 6 +/obj/effect/turf_decal/warning_stripes/box/arrow{ + dir = 4 }, /turf/open/floor/mainship/black, -/area/mainship/patrol_base/hanger) +/area/mainship/patrol_base) "LC" = ( /obj/effect/turf_decal/warning_stripes/thin, /turf/open/floor/mainship/black, /area/mainship/patrol_base/hanger) "LE" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mainship/black{ + dir = 1 + }, +/area/mainship/patrol_base) +"LF" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 10 }, /turf/open/floor/mainship/black, /area/mainship/patrol_base/hanger) -"LF" = ( +"LK" = ( /obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/mainship/black/corner{ +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base) +"LM" = ( +/obj/machinery/light{ dir = 8 }, -/area/mainship/patrol_base) -"LK" = ( +/turf/open/floor/mainship/orange{ + dir = 8 + }, +/area/mainship/patrol_base/prep) +"LP" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, /obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/mainship/mono, +/turf/open/floor/prison/plate, /area/mainship/patrol_base) "LR" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/mainship/black/corner, +/turf/open/floor/mainship/black{ + dir = 5 + }, /area/mainship/patrol_base) "LV" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 10 - }, -/turf/open/floor/mainship/black, +/obj/structure/prop/mainship/doorblocker/patrol_base, +/turf/open/floor/mainship/mono, /area/mainship/patrol_base) "LZ" = ( -/turf/open/floor/mainship/black{ - dir = 6 - }, +/obj/structure/sign/pods, +/turf/open/floor/mainship/black, /area/mainship/patrol_base) "Mm" = ( /obj/structure/bed/bunkbed, @@ -2964,6 +3124,11 @@ /obj/structure/table/mainship/nometal, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/command) +"Mu" = ( +/turf/open/floor/mainship/blue{ + dir = 6 + }, +/area/mainship/patrol_base/prep) "MA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -2975,6 +3140,10 @@ }, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/command) +"MC" = ( +/obj/structure/dropship_piece/two/weapon/leftleft, +/turf/open/floor/plating, +/area/mainship/patrol_base/hanger) "MM" = ( /obj/machinery/bioprinter/stocked, /turf/open/floor/prison/sterilewhite, @@ -3002,35 +3171,16 @@ /turf/open/floor/prison/sterilewhite, /area/mainship/patrol_base) "Nb" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/facepaint/green, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, -/obj/item/tool/hand_labeler, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 + dir = 1 + }, +/obj/machinery/door/poddoor/mainship/open{ + dir = 2; + id = "minidropship_podlock" }, -/obj/machinery/camera/autoname/mainship, /turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/prep) +/area/mainship/patrol_base/hanger) "Nd" = ( /obj/machinery/camera/autoname/mainship{ dir = 1 @@ -3044,9 +3194,11 @@ /turf/open/floor/prison/sterilewhite, /area/mainship/patrol_base) "Nj" = ( -/obj/structure/table/mainship/nometal, -/turf/open/floor/prison/bright_clean, -/area/mainship/patrol_base/hanger) +/obj/effect/turf_decal/warning_stripes/box/arrow{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base/prep) "Nm" = ( /obj/structure/table/mainship/nometal, /obj/item/roller, @@ -3054,15 +3206,15 @@ /turf/open/floor/prison/sterilewhite, /area/mainship/patrol_base) "Np" = ( -/obj/structure/closet/crate/alpha, -/obj/structure/closet/crate/alpha, -/obj/structure/closet/crate/alpha, -/obj/structure/closet/crate/alpha, -/obj/structure/closet/crate/alpha, -/obj/structure/closet/crate/alpha, -/obj/structure/closet/crate/alpha, -/obj/structure/closet/crate/alpha, -/turf/open/floor/prison/plate, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/warning_stripes/box/arrow{ + dir = 4 + }, +/turf/open/floor/mainship/black{ + dir = 1 + }, /area/mainship/patrol_base) "Nt" = ( /obj/structure/table/mainship/nometal, @@ -3076,16 +3228,22 @@ /turf/open/floor/prison/sterilewhite, /area/mainship/patrol_base) "Nx" = ( -/obj/structure/table/mainship/nometal, +/obj/machinery/vending/coffee, /turf/open/floor/mainship/black{ dir = 10 }, /area/mainship/patrol_base/barracks) "NJ" = ( -/obj/structure/table/mainship/nometal, /obj/machinery/light, +/obj/machinery/vending/cigarette, /turf/open/floor/mainship/black, /area/mainship/patrol_base/barracks) +"NO" = ( +/obj/structure/bed/chair/nometal{ + dir = 8 + }, +/turf/open/floor/mainship/blue, +/area/mainship/patrol_base/prep) "Ob" = ( /obj/effect/landmark/start/job/squadsmartgunner, /turf/open/floor/mainship/black/corner{ @@ -3094,54 +3252,28 @@ /area/mainship/patrol_base/barracks) "Oj" = ( /obj/machinery/light{ - dir = 4 + dir = 1 }, -/obj/vehicle/ridden/powerloader, -/turf/open/floor/mainship/orange{ - dir = 4 +/obj/machinery/door/poddoor/campaign, +/turf/open/floor/mainship/black{ + dir = 1 }, -/area/mainship/patrol_base) -"Ok" = ( -/obj/machinery/vending/cigarette, +/area/mainship/patrol_base/hanger) +"On" = ( /turf/open/floor/mainship/black, /area/mainship/patrol_base/barracks) -"On" = ( -/obj/machinery/vending/tool, +"Op" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 5 + }, /turf/open/floor/mainship/black{ - dir = 6 + dir = 1 }, -/area/mainship/patrol_base/barracks) -"Op" = ( -/obj/structure/closet/crate/delta, -/obj/structure/closet/crate/delta, -/obj/structure/closet/crate/delta, -/obj/structure/closet/crate/delta, -/obj/structure/closet/crate/delta, -/obj/structure/closet/crate/delta, -/obj/structure/closet/crate/delta, -/obj/structure/closet/crate/delta, -/turf/open/floor/prison/plate, -/area/mainship/patrol_base) +/area/mainship/patrol_base/hanger) "Oq" = ( -/obj/structure/table/mainship/nometal, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 5 }, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 5 }, @@ -3166,44 +3298,27 @@ /turf/open/floor/mainship/mono, /area/mainship/patrol_base/command) "Ox" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ +/obj/effect/turf_decal/warning_stripes/box/arrow{ dir = 1 }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/prep) -"OA" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 9 +/turf/open/floor/mainship/black{ + dir = 1 }, -/obj/structure/table/mainship/nometal, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/item/attachable/magnetic_harness, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 9 +/area/mainship/patrol_base/hanger) +"OA" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/prep) -"OD" = ( /turf/open/floor/mainship/black/corner{ - dir = 8 + dir = 1 }, /area/mainship/patrol_base) +"OD" = ( +/turf/open/floor/mainship/black/corner, +/area/mainship/patrol_base/prep) "OF" = ( /obj/structure/bed/chair/nometal{ dir = 1 @@ -3217,23 +3332,33 @@ /turf/open/floor/mainship/blue/full, /area/mainship/patrol_base) "OL" = ( -/obj/structure/bed/chair/nometal{ +/obj/effect/turf_decal/warning_stripes/thin{ dir = 1 }, -/obj/machinery/camera/autoname/mainship{ - dir = 8 +/turf/open/floor/mainship/black/corner{ + dir = 4 }, -/turf/open/floor/mainship/blue/full, /area/mainship/patrol_base) "OP" = ( -/obj/structure/ship_ammo/cas/minirocket, -/turf/open/floor/mainship/orange{ +/obj/effect/turf_decal/warning_stripes/thin{ dir = 8 }, -/area/mainship/patrol_base) -"OX" = ( -/obj/structure/ship_ammo/cas/minirocket, +/obj/structure/sign/pods{ + dir = 4 + }, /turf/open/floor/prison/plate, +/area/mainship/patrol_base/hanger) +"OX" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 9 + }, +/turf/open/floor/mainship/black{ + dir = 1 + }, +/area/mainship/patrol_base) +"Pc" = ( +/obj/machinery/vending/tool, +/turf/open/floor/mainship/mono, /area/mainship/patrol_base) "Pp" = ( /obj/machinery/cic_maptable/drawable/big{ @@ -3282,136 +3407,161 @@ /turf/open/floor/mainship/black, /area/mainship/patrol_base/barracks) "Qq" = ( +/obj/machinery/vending/tool, /turf/open/floor/mainship/black, /area/mainship/patrol_base/barracks) "Qt" = ( -/obj/structure/closet/crate/charlie, -/obj/structure/closet/crate/charlie, -/obj/structure/closet/crate/charlie, -/obj/structure/closet/crate/charlie, -/obj/structure/closet/crate/charlie, -/obj/structure/closet/crate/charlie, -/obj/structure/closet/crate/charlie, -/obj/structure/closet/crate/charlie, -/turf/open/floor/prison/plate, -/area/mainship/patrol_base) -"QJ" = ( -/turf/open/floor/mainship/orange{ - dir = 8 - }, -/area/mainship/patrol_base/prep) +/obj/machinery/door/poddoor/campaign, +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base/hanger) "QP" = ( +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, +/obj/structure/table/mainship/nometal, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/prep) "QR" = ( -/turf/open/floor/mainship/orange{ - dir = 4 - }, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/item/attachable/magnetic_harness, +/obj/structure/table/mainship/nometal, +/turf/open/floor/mainship/mono, /area/mainship/patrol_base/prep) "QV" = ( /turf/open/floor/mainship/blue{ dir = 8 }, /area/mainship/patrol_base/prep) -"QW" = ( +"Rb" = ( +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/facepaint/green, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, +/obj/item/tool/hand_labeler, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, +/obj/item/facepaint/green, +/obj/structure/table/mainship/nometal, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/prep) -"Rb" = ( -/turf/open/floor/mainship/blue{ - dir = 4 - }, -/area/mainship/patrol_base/prep) "Rd" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 +/obj/structure/bed/chair/nometal{ + dir = 1 }, -/obj/machinery/light{ +/obj/machinery/camera/autoname/mainship{ dir = 8 }, -/turf/open/floor/prison/plate, -/area/mainship/patrol_base/hanger) +/turf/open/floor/mainship/blue/full, +/area/mainship/patrol_base) "Rj" = ( /obj/machinery/camera/autoname/mainship{ + dir = 8 + }, +/turf/open/floor/mainship/blue{ dir = 4 }, -/turf/open/floor/mainship/green{ +/area/mainship/patrol_base/prep) +"Rq" = ( +/turf/open/floor/mainship/orange{ dir = 10 }, -/area/mainship/patrol_base) -"Rr" = ( -/obj/structure/dropship_piece/tadpole/rearleft{ - dir = 4 - }, -/obj/structure/dropship_piece/tadpole/engine{ - pixel_x = -23 +/area/mainship/patrol_base/prep) +"Rt" = ( +/obj/machinery/door/poddoor/mainship/open{ + dir = 2; + id = "minidropship_podlock" }, -/turf/open/floor/plating, +/turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/hanger) -"Rt" = ( +"Rw" = ( /obj/structure/dropship_piece/tadpole/rearleft, /obj/structure/dropship_piece/tadpole/engine{ pixel_x = 23 }, /turf/open/floor/plating, /area/mainship/patrol_base/hanger) -"Rw" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/prison/plate, -/area/mainship/patrol_base/hanger) "Ry" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 6 - }, -/obj/machinery/camera/autoname/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/black, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/mainship/mono, /area/mainship/patrol_base/hanger) -"RJ" = ( -/obj/structure/ship_ammo/cas/minirocket, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/mainship/orange{ - dir = 8 - }, -/area/mainship/patrol_base) "RO" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/prison/plate, -/area/mainship/patrol_base) -"RQ" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/light{ +/obj/effect/turf_decal/warning_stripes/box/arrow{ dir = 4 }, -/turf/open/floor/mainship/orange{ +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base/hanger) +"RQ" = ( +/obj/effect/turf_decal/warning_stripes/box/arrow{ dir = 4 }, +/turf/open/floor/mainship/mono, /area/mainship/patrol_base) "RV" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 10 +/turf/open/floor/mainship/black{ + dir = 4 }, -/turf/open/floor/prison/bright_clean, -/area/mainship/patrol_base/hanger) +/area/mainship/patrol_base) "Sb" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 6 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 8 }, -/turf/open/floor/prison/bright_clean, -/area/mainship/patrol_base/hanger) +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/patrol_base/prep) "Sf" = ( /obj/machinery/cic_maptable, /turf/open/floor/mainship/blue, @@ -3427,6 +3577,12 @@ dir = 6 }, /area/mainship/patrol_base/command) +"Sn" = ( +/obj/structure/bed/chair/nometal{ + dir = 4 + }, +/turf/open/floor/mainship/orange, +/area/mainship/patrol_base/prep) "Sq" = ( /obj/structure/table/reinforced, /obj/machinery/computer/operating, @@ -3438,21 +3594,28 @@ /turf/open/floor/prison/sterilewhite, /area/mainship/patrol_base) "SB" = ( -/obj/structure/sign/pods{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 }, -/turf/open/floor/mainship/black{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 }, -/area/mainship/patrol_base) +/obj/machinery/door/poddoor/campaign, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/patrol_base/hanger) "SF" = ( -/obj/machinery/vending/mech_vendor, -/obj/effect/turf_decal/warning_stripes/thin, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 +/obj/machinery/camera/autoname/mainship{ + dir = 8 + }, +/turf/open/floor/mainship/green{ + dir = 5 }, -/turf/open/floor/prison/plate, /area/mainship/patrol_base) +"SH" = ( +/turf/open/floor/mainship/blue{ + dir = 4 + }, +/area/mainship/patrol_base/prep) "SI" = ( /obj/machinery/door/airlock/mainship/medical/or/or1{ dir = 1 @@ -3466,12 +3629,12 @@ /turf/open/floor/prison/sterilewhite, /area/mainship/patrol_base) "SR" = ( -/obj/machinery/light, -/obj/effect/turf_decal/warning_stripes/box/arrow{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, -/turf/open/floor/mainship/black, -/area/mainship/patrol_base) +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/patrol_base/hanger) "SY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 4 @@ -3479,8 +3642,13 @@ /turf/open/floor/prison/sterilewhite, /area/mainship/patrol_base) "SZ" = ( -/obj/structure/prop/mainship/hangar_stencil/two, -/turf/open/floor/mainship/mono, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 1 + }, +/turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/hanger) "Td" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -3506,55 +3674,37 @@ /turf/open/floor/mainship/mono, /area/mainship/patrol_base/barracks) "Tq" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/mainship/orange{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base) "Tr" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, /obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 + dir = 8 + }, +/turf/open/floor/prison/arrow/clean{ + dir = 8 }, -/turf/open/floor/prison/bright_clean, /area/mainship/patrol_base/hanger) "TA" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/structure/window/framed/mainship/hull, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 1 + dir = 4 }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/hanger) -"TD" = ( -/obj/machinery/door/poddoor/mainship/open{ - dir = 2; - id = "minidropship_podlock" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 }, -/obj/structure/reagent_dispensers/fueltank/barrel, /turf/open/floor/mainship/mono, -/area/mainship/patrol_base/hanger) +/area/mainship/patrol_base) "TF" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 - }, -/turf/open/floor/prison/bright_clean, -/area/mainship/patrol_base/hanger) -"TH" = ( -/obj/effect/landmark/campaign/mech_spawner/heavy, -/obj/effect/turf_decal/warning_stripes/box/empty, -/obj/machinery/light{ +/turf/open/floor/mainship_hull/gray/dir{ dir = 4 }, -/turf/open/floor/prison/plate, -/area/mainship/patrol_base) +/area/space) +"TH" = ( +/obj/structure/prop/mainship/hangar_stencil, +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base/hanger) "TO" = ( /obj/structure/bed/chair/sofa/right{ dir = 8 @@ -3565,11 +3715,8 @@ /turf/open/floor/mainship/mono, /area/mainship/patrol_base/command) "TQ" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 8 - }, /turf/open/floor/mainship/green{ - dir = 5 + dir = 9 }, /area/mainship/patrol_base) "Ug" = ( @@ -3593,24 +3740,27 @@ }, /turf/open/floor/mainship/purple/full, /area/mainship/patrol_base) -"UE" = ( -/obj/effect/attach_point/crew_weapon/minidropship, -/obj/machinery/door/poddoor/mainship/open{ - id = "minidropship_podlock" - }, -/turf/open/floor/mainship/mono, -/area/mainship/patrol_base/hanger) -"UG" = ( -/obj/structure/ship_ammo/cas/rocket/napalm, +"Uo" = ( +/obj/structure/ship_ammo/cas/minirocket, /turf/open/floor/mainship/orange{ dir = 8 }, /area/mainship/patrol_base) -"UL" = ( -/obj/structure/ship_ammo/cas/rocket/widowmaker, -/turf/open/floor/prison/plate, +"UH" = ( +/obj/machinery/light, +/turf/open/floor/mainship/mono, /area/mainship/patrol_base) +"UL" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer1{ + dir = 1 + }, +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base/hanger) "UM" = ( +/obj/structure/prop/mainship/hangar_stencil/two, +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base/hanger) +"UP" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 }, @@ -3621,13 +3771,6 @@ dir = 8 }, /area/mainship/patrol_base/hanger) -"UP" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer1{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/prison/bright_clean, -/area/mainship/patrol_base/hanger) "UQ" = ( /obj/machinery/camera/autoname/mainship, /turf/open/floor/mainship/black{ @@ -3635,31 +3778,30 @@ }, /area/mainship/patrol_base) "UR" = ( -/obj/effect/turf_decal/warning_stripes/box/arrow{ - dir = 4 +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer1{ + dir = 1 }, -/turf/open/floor/mainship/black, +/turf/open/floor/mainship/mono, /area/mainship/patrol_base) "UV" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 6 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ +/obj/effect/turf_decal/warning_stripes/box/arrow, +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base) +"UZ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer1{ dir = 4 }, -/turf/open/floor/plating/plating_catwalk, +/obj/effect/turf_decal/warning_stripes/thin, +/turf/open/floor/prison/bright_clean, /area/mainship/patrol_base/hanger) -"UZ" = ( +"Vo" = ( /obj/effect/turf_decal/warning_stripes/thin, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/hanger) -"Vm" = ( +"Vq" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 6 }, @@ -3674,27 +3816,7 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/hanger) -"Vo" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/hanger) -"Vq" = ( -/obj/machinery/holopad{ - active_power_usage = 130; - desc = "It's a floor-mounted device for projecting holographic images. This one appears to have a larger lense."; - holo_range = 7; - name = "modfied holopad" - }, -/obj/effect/turf_decal/warning_stripes/thin, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/hanger) -"VB" = ( +"VL" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 6 }, @@ -3706,23 +3828,12 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/hanger) -"VL" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/prison/bright_clean, -/area/mainship/patrol_base/hanger) "VM" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 10 - }, -/turf/open/floor/prison/arrow/clean{ +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 4 }, +/turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/hanger) "VN" = ( /obj/structure/bed/chair/sofa/right{ @@ -3749,9 +3860,7 @@ /turf/open/floor/prison/sterilewhite, /area/mainship/patrol_base) "VX" = ( -/obj/effect/landmark/campaign/mech_spawner, -/obj/effect/turf_decal/warning_stripes/box/empty, -/turf/open/floor/prison/plate, +/turf/open/floor/mainship/black/corner, /area/mainship/patrol_base) "Wd" = ( /obj/machinery/door_control{ @@ -3763,6 +3872,13 @@ }, /turf/open/floor/prison/sterilewhite, /area/mainship/patrol_base) +"Wk" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/machinery/light, +/turf/open/floor/prison/plate, +/area/mainship/patrol_base) "Wl" = ( /obj/machinery/bodyscanner, /obj/machinery/light/mainship{ @@ -3771,8 +3887,11 @@ /turf/open/floor/prison/sterilewhite, /area/mainship/patrol_base) "Wn" = ( +/obj/machinery/camera/autoname/mainship{ + dir = 4 + }, /turf/open/floor/mainship/green{ - dir = 6 + dir = 10 }, /area/mainship/patrol_base) "Wu" = ( @@ -3796,21 +3915,37 @@ }, /turf/open/floor/prison/sterilewhite, /area/mainship/patrol_base) +"WQ" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/machinery/light/mainship{ + light_color = "#da2f1b" + }, +/turf/open/floor/prison/arrow/clean{ + dir = 8 + }, +/area/mainship/patrol_base/hanger) "WU" = ( -/obj/structure/bed/chair/nometal, -/turf/open/floor/mainship/mono, -/area/mainship/patrol_base/barracks) +/obj/machinery/light, +/obj/effect/turf_decal/warning_stripes/box/arrow{ + dir = 4 + }, +/turf/open/floor/mainship/black, +/area/mainship/patrol_base) "WV" = ( /obj/structure/table/mainship/nometal, /obj/item/reagent_containers/glass/beaker/cryomix, /turf/open/floor/prison/sterilewhite, /area/mainship/patrol_base) "WX" = ( -/obj/structure/bed/chair/nometal{ - dir = 1 - }, -/turf/open/floor/mainship/mono, -/area/mainship/patrol_base/barracks) +/obj/machinery/light, +/obj/machinery/door/poddoor/campaign, +/turf/open/floor/mainship/black, +/area/mainship/patrol_base/hanger) "WY" = ( /obj/machinery/light/mainship{ light_color = "#da2f1b" @@ -3820,68 +3955,68 @@ }, /turf/open/floor/prison/sterilewhite, /area/mainship/patrol_base) -"Xc" = ( -/turf/open/floor/mainship/orange{ - dir = 10 - }, -/area/mainship/patrol_base/prep) -"Xf" = ( -/turf/open/floor/mainship/orange, -/area/mainship/patrol_base/prep) -"Xg" = ( +"Xl" = ( /turf/open/floor/mainship/orange{ - dir = 6 + dir = 4 }, /area/mainship/patrol_base/prep) -"Xl" = ( -/obj/machinery/quick_vendor, -/obj/machinery/light/mainship, -/turf/open/floor/mainship/mono, -/area/mainship/patrol_base/prep) "Xm" = ( -/turf/open/floor/mainship/blue{ - dir = 10 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 6 }, -/area/mainship/patrol_base/prep) +/turf/open/floor/mainship/black, +/area/mainship/patrol_base/hanger) "Xn" = ( -/turf/open/floor/mainship/blue, +/obj/structure/bed/chair/nometal{ + dir = 4 + }, +/turf/open/floor/mainship/mono, /area/mainship/patrol_base/prep) "Xo" = ( -/turf/open/floor/mainship/blue{ - dir = 6 - }, +/obj/structure/table/mainship/nometal, +/turf/open/floor/mainship/mono, /area/mainship/patrol_base/prep) "Xt" = ( -/obj/machinery/light, -/turf/open/floor/mainship/mono, -/area/mainship/patrol_base) +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 6 + }, +/obj/machinery/camera/autoname/mainship{ + dir = 1 + }, +/turf/open/floor/mainship/black, +/area/mainship/patrol_base/hanger) "Xy" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/machinery/camera/autoname/mainship{ + dir = 4 + }, +/turf/open/floor/prison/plate, +/area/mainship/patrol_base/hanger) +"XD" = ( /obj/machinery/door/poddoor/mainship/open{ id = "minidropship_podlock" }, /obj/machinery/light, /turf/open/floor/mainship/mono, /area/mainship/patrol_base/hanger) -"XD" = ( -/obj/structure/bed/chair/dropship/pilot, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/hanger) "XJ" = ( -/obj/structure/droppod, -/obj/structure/drop_pod_launcher, -/obj/machinery/light/mainship{ - dir = 8 +/turf/open/floor/mainship/orange{ + dir = 4 }, -/turf/open/floor/prison/cleanmarked, -/area/mainship/patrol_base/hanger) +/area/mainship/patrol_base) "XN" = ( -/obj/structure/droppod, -/obj/structure/drop_pod_launcher, -/obj/machinery/light/mainship{ - dir = 4 +/obj/effect/turf_decal/warning_stripes/thin, +/turf/open/floor/mainship/black/corner{ + dir = 8 }, -/turf/open/floor/prison/cleanmarked, -/area/mainship/patrol_base/hanger) +/area/mainship/patrol_base) +"XQ" = ( +/turf/open/floor/mainship/orange{ + dir = 10 + }, +/area/mainship/patrol_base) "XT" = ( /obj/machinery/holosign_switch{ id = "or1sign"; @@ -3895,7 +4030,10 @@ /area/space) "XY" = ( /obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 + dir = 4 + }, +/obj/machinery/light{ + dir = 1 }, /turf/open/floor/prison/plate, /area/mainship/patrol_base) @@ -3914,187 +4052,157 @@ /turf/open/floor/mainship/blue, /area/mainship/patrol_base/command) "Yh" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/turf/open/floor/prison/plate, +/area/mainship/patrol_base/hanger) +"Yn" = ( /obj/structure/dropship_piece/tadpole/engine{ pixel_x = -23 }, /turf/closed/shuttle/dropship2/rearcorner, /area/mainship/patrol_base/hanger) -"Yn" = ( -/obj/machinery/prop/computer/tadpole{ +"Ys" = ( +/turf/closed/shuttle/dropship2/glassone{ dir = 1 }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/patrol_base/hanger) -"Ys" = ( -/turf/closed/shuttle/dropship2/glassone, /area/mainship/patrol_base/hanger) "Yw" = ( -/obj/structure/dropship_piece/tadpole/engine{ - pixel_x = 23 +/obj/machinery/prop/computer/tadpole{ + dir = 1 }, -/turf/closed/shuttle/dropship2/rearcorner/alt, +/turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base/hanger) "YB" = ( -/obj/structure/ship_ammo/cas/rocket/banshee, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/mainship/orange{ +/obj/effect/turf_decal/warning_stripes/thin{ dir = 8 }, -/area/mainship/patrol_base) +/turf/open/floor/prison/plate, +/area/mainship/patrol_base/hanger) +"YC" = ( +/obj/structure/largecrate/random/case/double, +/turf/open/floor/mainship/mono, +/area/mainship/patrol_base/hanger) "YD" = ( /obj/structure/ship_rail_gun, /turf/open/space/basic, /area/space) "YG" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison/plate, +/area/mainship/patrol_base/hanger) +"YX" = ( /obj/structure/dropship_piece/two/weapon/rightright, /turf/open/floor/plating, /area/mainship/patrol_base/hanger) -"YM" = ( +"Za" = ( /obj/structure/dropship_piece/tadpole/tadpole_nose/right{ pixel_y = -32 }, /obj/structure/dropship_piece/tadpole/cockpit/right, /turf/open/floor/plating, /area/mainship/patrol_base/hanger) -"YX" = ( +"Zb" = ( /obj/structure/dropship_piece/tadpole/tadpole_nose{ pixel_y = -32 }, /turf/closed/shuttle/dropship2/singlewindow, /area/mainship/patrol_base/hanger) -"Za" = ( -/obj/structure/dropship_piece/tadpole/tadpole_nose/left{ - pixel_y = -32 - }, -/obj/structure/dropship_piece/tadpole/cockpit/left, -/turf/open/floor/plating, -/area/mainship/patrol_base/hanger) -"Zb" = ( -/obj/structure/dropship_piece/two/weapon/leftleft, -/turf/open/floor/plating, -/area/mainship/patrol_base/hanger) "Zc" = ( -/obj/structure/reagent_dispensers/fueltank/barrel, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, /turf/open/floor/plating, /area/mainship/patrol_base/hanger) "Zf" = ( -/obj/structure/ship_ammo/cas/rocket/banshee, -/turf/open/floor/mainship/orange{ - dir = 10 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 }, -/area/mainship/patrol_base) +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison/plate, +/area/mainship/patrol_base/hanger) "Zm" = ( -/obj/effect/turf_decal/warning_stripes/box/arrow, -/turf/open/floor/mainship/mono, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/plating/plating_catwalk, /area/mainship/patrol_base) "Zp" = ( -/turf/open/floor/mainship/orange, +/obj/structure/ship_ammo/cas/rocket/banshee, +/turf/open/floor/mainship/orange{ + dir = 10 + }, /area/mainship/patrol_base) "Zr" = ( -/obj/structure/ship_ammo/cas/rocket/widowmaker, /turf/open/floor/mainship/orange, /area/mainship/patrol_base) "Zx" = ( -/turf/open/floor/mainship/orange{ - dir = 6 +/obj/machinery/camera/autoname/mainship{ + dir = 1 }, +/turf/open/floor/mainship/orange, /area/mainship/patrol_base) "Zy" = ( -/turf/open/floor/mainship/orange{ - dir = 10 - }, +/obj/effect/turf_decal/warning_stripes/thin, +/turf/open/floor/mainship/black/corner, /area/mainship/patrol_base) "ZA" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 +/obj/structure/bed/chair/office/dark, +/obj/machinery/computer/security/marinemainship{ + pixel_y = 18 }, -/obj/machinery/camera/autoname/mainship{ - dir = 4 +/turf/open/floor/mainship/blue{ + dir = 5 }, -/turf/open/floor/prison/plate, -/area/mainship/patrol_base/hanger) +/area/mainship/patrol_base) "ZD" = ( /obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/machinery/light/mainship{ - light_color = "#da2f1b" - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/turf/open/floor/prison/arrow/clean{ - dir = 8 + dir = 10 }, -/area/mainship/patrol_base/hanger) +/turf/open/floor/mainship/black, +/area/mainship/patrol_base) "ZG" = ( -/obj/machinery/door/poddoor/mainship/open{ - dir = 2; - id = "minidropship_podlock" +/turf/open/floor/mainship/black{ + dir = 6 }, -/obj/structure/largecrate/packed, -/turf/open/floor/mainship/mono, -/area/mainship/patrol_base/hanger) +/area/mainship/patrol_base) "ZH" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/machinery/light/mainship{ - light_color = "#da2f1b" - }, -/turf/open/floor/prison/arrow/clean{ - dir = 8 - }, -/area/mainship/patrol_base/hanger) +/obj/machinery/light, +/turf/open/floor/mainship/black, +/area/mainship/patrol_base/prep) "ZJ" = ( -/obj/effect/turf_decal/warning_stripes/thin{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/machinery/vending/nanomed, -/obj/machinery/light/mainship{ - light_color = "#da2f1b" - }, -/turf/open/floor/prison/arrow/clean{ - dir = 8 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 1 }, -/area/mainship/patrol_base/hanger) +/turf/open/floor/plating/plating_catwalk, +/area/mainship/patrol_base/prep) "ZM" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/item/radio/intercom/general, -/obj/machinery/light/mainship{ - light_color = "#da2f1b" - }, -/turf/open/floor/prison/arrow/clean{ - dir = 4 - }, -/area/mainship/patrol_base/hanger) +/obj/machinery/light, +/turf/open/floor/mainship/black, +/area/mainship/patrol_base) "ZN" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/machinery/light/mainship{ - light_color = "#da2f1b" - }, -/turf/open/floor/prison/arrow/clean{ - dir = 4 +/obj/structure/droppod, +/obj/structure/drop_pod_launcher, +/obj/machinery/camera/autoname/mainship{ + dir = 1 }, +/turf/open/floor/prison/cleanmarked, /area/mainship/patrol_base/hanger) +"ZT" = ( +/turf/open/floor/mainship/green, +/area/mainship/patrol_base) "ZU" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -26482,11 +26590,11 @@ cn cn cn xm -WX +xt xt FS xt -WU +xt NJ cn cn @@ -28417,13 +28525,13 @@ ci ci cn cn -xO +xU xt xt FS xt xt -Ok +On cn cn ci @@ -28660,7 +28768,7 @@ ci ci cn xU -Af +KU xt FS xt @@ -28895,25 +29003,25 @@ ef ef ef ef -aQ eK eK eK eK eK eK -yC +Ip +kP kP yg kP -KW +kP +ZH eK eK eK eK eK eK -XV ef ef ef @@ -29137,12 +29245,12 @@ ef ef ef ef -aQ eK +fP hP hP qk -hP +Bv xZ Am Am @@ -29150,12 +29258,12 @@ GA Am Am Oq -hP -qk -hP -hP +Gw +LM +ii +ii +Rq eK -XV ef ef ef @@ -29379,25 +29487,25 @@ ef ef ef ef -aQ +cG eN -hZ -kN -kN -kN -yc +Xn +Xn +Xn +Xn +yg kP DO GF JJ kP -yc -QJ -QJ -QJ -Xc -eN -XV +yg +Xn +Xn +Xn +Xn +Sn +cG ef ef ef @@ -29621,11 +29729,11 @@ ef ef ef ef -aQ -eN -if -kP -kP +cG +gb +Xo +Xo +Xo tJ ye kP @@ -29635,11 +29743,11 @@ JV kP Ot QP -kP -kP -Xf -eN -XV +Xo +Xo +Xo +ja +cG ef ef ef @@ -29863,12 +29971,12 @@ ef ef ef ef -aQ -eN -ik -kV -kV -kV +cG +gb +Xo +Xo +Xo +By yg kP DR @@ -29877,11 +29985,11 @@ JW kP yg QR -QR -QR -Xg -eN -XV +Xo +Xo +Xo +ja +cG ef ef ef @@ -30105,25 +30213,25 @@ ef ef ef ef -aQ -eK -hP -hP -hP -hP -yr +cG +gc +mI +mI +mI +mI +yg kP kP GR kP kP -ia -hP -hP -hP -hP -eK -XV +yg +mI +mI +mI +mI +JE +cG ef ef ef @@ -30347,25 +30455,25 @@ ef ef ef ef -aQ eK +ia il -hP -hP -hP -Nb +il +il +il +yg kP kP kP kP kP -yr -hP -hP -hP +yg +Xl +Xl Xl +Xl +qM eK -XV ef ef ef @@ -30589,25 +30697,25 @@ ef ef ef ef -aQ -eN +eK im la la -tR -yt +la +la +yg +kP +kP +kP kP -DT -GV -DT kP yg QV QV QV -Xm -eN -XV +QV +iM +eK ef ef ef @@ -30831,25 +30939,25 @@ ef ef ef ef -aQ -eN -in -kP -kP -kP -yg +cG +iv +Xn +Xn +Xn +BJ +JX kP DT GY DT kP -Ox -QW -kP -kP +yg Xn -eN -XV +Xn +Xn +Xn +aX +cG ef ef ef @@ -31073,25 +31181,25 @@ ef ef ef ef -aQ -eN -ir -lh -lh -lh +cG +iy +Xo +Xo +Xo +BN yu kP DT Ha DT kP -yu -Rb -Rb +ZJ Rb Xo -eN -XV +Xo +Xo +mZ +cG ef ef ef @@ -31315,25 +31423,25 @@ ef ef ef ef -aQ -eK -hP -hP -qq -hP -yy -Aq -Aq +cG +iy +Xo +Xo +Xo +DC +yg +kP +DT Hb -Aq -Aq -OA -hP -qq -hP -hP -eK -XV +DT +kP +yg +FV +Xo +Xo +Xo +mZ +cG ef ef ef @@ -31557,25 +31665,25 @@ ef ef ef ef -aQ -eK -eK -eK -eK -dw +cG +jq +mI +mI +mI +mI yC vd -kP -yg -kP +vd +Sb +vd vd KW mI -eK -eK -eK -eK -XV +mI +mI +mI +NO +cG ef ef ef @@ -31799,53 +31907,53 @@ ef ef ef ef -aQ -ci -ci -bu -dc -wC -Dt -fV -fV -Ff -fV -fV -OD -Rj -dc -bu -ci -ci -XV -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef +eK +jU +nt +nt +dc +wC +JY +kP +kP +yg +kP +kP +OD +Rj +tZ +SH +SH +Mu +eK +ef +ef +ef +ef +ef +ef +ef +ef +ef +ef +ef +ef +ef +ef +ef +ef +ef +ef +ef +ef +ef +ef +ef +ef +ef +ef +ef +ef ef ef ef @@ -32041,25 +32149,25 @@ ef ef ef ef -aQ -ci -ci -cc -dc +eK +eK +eK +eK +eK Dm -fV -fV -fV -Ff -fV -fV -fV +Ip +Nj +kP +yg +kP +Nj +ZH Dw -dc -cc -ci -ci -XV +eK +eK +eK +eK +eK ef ef ef @@ -32287,9 +32395,9 @@ aQ ci ci bu -dc +Ht TQ -Bb +Dt fV fV Ff @@ -32297,7 +32405,7 @@ fV fV hA Wn -dc +Ht bu ci ci @@ -32526,23 +32634,23 @@ ef ef ef aQ -bu -bu -bu -bu -bu -pm +ci +ci +cc +Ht +DX +fV fV fV Ff fV fV -Gp -bu -bu -bu -bu -bu +fV +ZT +Ht +cc +ci +ci XV ef ef @@ -32768,23 +32876,23 @@ ef ef ef aQ +ci +ci bu Ht -DC -Ht SF -zS +Lh fV fV Ff fV fV -Jc +VX dL Ht -DC -Ht bu +ci +ci XV ef ef @@ -33011,21 +33119,21 @@ ef ef aQ bu -XY -XY -XY -KB -zS +bu +bu +bu +bu +LE fV fV Ff fV fV -Jc -aC -XY -XY -XY +ZM +bu +bu +bu +bu bu XV ef @@ -33252,10 +33360,10 @@ ef ef ef aQ -DX -fH -fH -fH +bu +nB +rb +nB oe zS fV @@ -33265,10 +33373,10 @@ fV fV Jc ui -fH -fH -fH -DX +nB +rb +nB +bu XV ef ef @@ -33736,10 +33844,10 @@ ef ef ef aQ -bu -zA -VX -VX +kb +fH +fH +fH fA zS fV @@ -33749,10 +33857,10 @@ fV fV Jc IK -VX -VX -pj -bu +fH +fH +fH +kb XV ef ef @@ -33980,8 +34088,8 @@ ef aQ bu XY -XY -XY +oU +oU KB zS fV @@ -33991,9 +34099,9 @@ fV fV Jc aC -XY -XY -XY +oU +oU +Bd bu XV ef @@ -34220,11 +34328,11 @@ ef ef ef aQ -DX -fH -fH -fH -oe +bu +oj +rJ +rJ +DY zS fV fV @@ -34232,11 +34340,11 @@ Ff fV fV Jc -ui -fH -fH -fH -DX +LP +rJ +rJ +Ec +bu XV ef ef @@ -34463,7 +34571,7 @@ ef ef aQ bu -JB +oA JB JB mU @@ -34477,7 +34585,7 @@ Jc Dn JB JB -JB +Wk bu XV ef @@ -34704,11 +34812,11 @@ ef ef ef aQ -bu -hm -TH -hm -SF +kb +fH +fH +fH +fA zS fV fV @@ -34716,11 +34824,11 @@ Ff fV fV Jc -dL -hm -TH +IK +fH +fH hm -bu +kb XV ef ef @@ -34947,21 +35055,21 @@ ef ef aQ bu -bu -bu -bu -bu -pm +oU +oU +oU +KB +zS fV fV Ff fV fV -Gp -bu -bu -bu -bu +Jc +aC +oU +oU +oU bu XV ef @@ -35188,23 +35296,23 @@ ef ef ef aQ -ci -ci -ci bu -mt -Cl -Bb +pj +rU +pj +oe +zS +fV fV Ff fV -hA -LZ -mt +fV +Jc +ui +pj +rU +pj bu -ci -ci -ci XV ef ef @@ -35435,13 +35543,13 @@ bu bu bu bu -bu -By +LE +fV fV Ff fV -SR -bu +fV +ZM bu bu bu @@ -35672,23 +35780,23 @@ ef ef ef aQ +ci +ci +ci bu -iv -ln -qr ua -cc -zS +LR +Lh fV Ff fV -Jc -OF -OF -fV -Uj -Uj +VX +ZG +Pc bu +ci +ci +ci XV ef ef @@ -35914,23 +36022,23 @@ ef ef ef aQ -cc -iy -fV -fV -um -cc -zS +bu +bu +bu +bu +bu +bu +Np fV Ff fV -Jc -OF -OF -fV -Uj -Uj -cc +WU +bu +bu +bu +bu +bu +bu XV ef ef @@ -36156,15 +36264,15 @@ ef ef ef aQ -cc +bu iF lu -fV -ur -ta +yc +Er +cc zS fV -Hz +Ff fV Jc OF @@ -36172,7 +36280,7 @@ OF fV Uj Uj -cc +bu XV ef ef @@ -36398,23 +36506,23 @@ ef ef ef aQ -bu +cc iG -lI -qv -us -yF -zS fV -HD -fV -Jc fV +Es +cc +zS fV +Ff fV +Jc +OF +OF fV -Xt -bu +Uj +Uj +cc XV ef ef @@ -36642,8 +36750,8 @@ ef aQ cc iI +rV fV -qB ur ta zS @@ -36651,11 +36759,11 @@ fV HJ fV Jc -OJ -OJ +OF +OF fV -Un -Un +Uj +Uj cc XV ef @@ -36882,23 +36990,23 @@ ef ef ef aQ -cc -iJ -fV -fV -uw -cc +bu +pm +se +yr +us +LV zS fV Ff fV Jc -OJ -OJ fV -Un -Un -cc +fV +fV +fV +UH +bu XV ef ef @@ -37124,23 +37232,23 @@ ef ef ef aQ -bu +cc iN -lN +fV qJ -ux -cc -dU +ur +ta +zS fV Ff fV -UR +Jc +OJ OJ -OL fV Un Un -bu +cc XV ef ef @@ -37363,29 +37471,29 @@ ef ef ef ef -ab -ab -ab -ab -ab -lX -lX -ab -ab -Bh -DY -HP -DY -Lh -ab -ab -lX -lX -ab -ab -ab -ab -ab +ef +ef +aQ +cc +iJ +fV +fV +Gp +cc +zS +fV +Ff +fV +Jc +OJ +OJ +fV +Un +Un +cc +XV +ef +ef ef ef ef @@ -37604,31 +37712,31 @@ ef ef ef ef -ab -ab -aU -ct -aU +ef +ef +ef +aQ +bu ZA aU -aU +yt ct -aU +cc Bl -iX -HQ -iX +fV +Ff +fV Ln -aU -Rd -aU -aU -ZA -aU +OJ Rd -aU -ab -ab +fV +Un +Un +bu +XV +ef +ef +ef ef ef ef @@ -37846,31 +37954,31 @@ ef ef ef ef -ak -ao -ba -ba -ba -ba -ba -ba -ba -ba -Bn -iX -HQ -iX -LC -ba -ba -ba -ba -ba -ba -ba -ba -ZU -ak +ef +ab +ab +ab +ab +ab +sr +sr +ab +ab +Oj +Qt +SB +Qt +WX +ab +ab +sr +sr +ab +ab +ab +ab +ab +ef ef ef ef @@ -38088,31 +38196,31 @@ ef ef ef ef -ak -ap -ba -ba -eP -iV -mn -qS +ab +ab +Yh uN -ba -Bn +Yh +Xy +Yh +Yh +uN +Yh +Op iX HQ iX -LC -ba -Rr -iV -UE +Xm +Yh +YG +Yh +Yh Xy Yh YG -ba -ZU -ak +Yh +ab +ab ef ef ef @@ -38331,27 +38439,27 @@ ef ef ef ak -ap +ao +ba +ba +ba +ba +ba +ba ba -cF -eW -iX -mq -ra -uQ ba Bn iX HQ -zY +iX LC ba -ZG -qy -iX -iX -eW -YM +ba +ba +ba +ba +ba +ba ba ZU ak @@ -38575,22 +38683,22 @@ ef ak ap ba -cG +ba ff iY mr rf uS ba -Bp +Bn iX HQ iX LC ba -uS -rf -rf +jP +iY +cQ XD Yn YX @@ -38818,7 +38926,7 @@ ak ap ba cI -fj +Ys iX mw rp @@ -38827,11 +38935,11 @@ ba Bn iX HQ -iX +TH LC ba -uQ -iX +tv +YC iX iX Ys @@ -39059,23 +39167,23 @@ ef ak ap ba -ba +dP fk -iV -mn +qr +tR rq -uU +Rt ba -Bn -Er -Id +Ox +iX +HQ iX LC -se +ba Rt -iV -UE -Xy +rq +rq +FU Yw Zb ba @@ -39299,28 +39407,28 @@ ef ef ef ak -aq -bi -bi -bi -bi -bi -bi -bi +ap +ba bi +kM +iX +uf +yy +uQ +ba Bn iX HQ iX LC -bi -bi -bi -bi -bi -bi -bi -bi +ba +uQ +iX +iX +iX +Jj +Eq +ba ZU ak ef @@ -39541,28 +39649,28 @@ ef ef ef ak -aq -bm -bm -bm -bm -bm -bm -bm -bm +ap +ba +ba +bo +iY +mr +yF +da +ba Bn -iX -HQ +Ry +SR iX LC -bm -bm -bm -bm -bm -bm -bm -bm +oK +Rw +iY +cQ +XD +Ao +MC +ba ZU ak ef @@ -39783,28 +39891,28 @@ ef ef ef ak -ap -ba -ba -eP -iV -mn -qS -uN -ba +aq +bH +bH +bH +bH +bH +bH +bH +bH Bn iX -Ig -JX +HQ +iX LC -ba -Rr -iV -UE -Xy -Yh -YG -ba +bH +bH +bH +bH +bH +bH +bH +bH ZU ak ef @@ -40025,28 +40133,28 @@ ef ef ef ak -ap -ba -cF -eW -iX -mA -rs -uQ -ba +aq +Zc +Zc +Zc +Zc +Zc +Zc +Zc +Zc Bn iX HQ -SZ +iX LC Zc -TD -iX -iX -iX -eW -YM -ba +Zc +Zc +Zc +Zc +Zc +Zc +Zc ZU ak ef @@ -40269,22 +40377,22 @@ ef ak ap ba -cG +ba ff iY mr rf uS ba -Bp -iX -HQ +Bn iX +SZ +UL LC ba -uS -rf -rf +jP +iY +cQ XD Yn YX @@ -40512,7 +40620,7 @@ ak ap ba cI -fj +Ys iX mL rB @@ -40521,10 +40629,10 @@ ba Bn iX HQ -iX +UM LC -ba -uQ +an +CA iX iX iX @@ -40753,23 +40861,23 @@ ef ak ap ba -ba +dP fk -iV -mn +qr +tR rq -uU +Rt ba -Bn +Ox iX HQ iX LC ba Rt -iV -UE -Xy +rq +rq +FU Yw Zb ba @@ -40993,14 +41101,14 @@ ef ef ef ak -aL -ba -ba -ba -ba -ba -ba +ap ba +bi +kM +iX +um +yH +uQ ba Bn iX @@ -41008,12 +41116,12 @@ HQ iX LC ba -ba -ba -ba -ba -ba -ba +uQ +iX +iX +iX +Jj +Eq ba ZU ak @@ -41234,31 +41342,31 @@ ef ef ef ef -ab -ab -bo -da -bo -ey -bo +ak +ap +ba +ba bo +iY +mr +yF da -uf -Bv +ba +Bn iX HQ iX -LE -uf -Rw -bo -bo -ey -bo +LC +ba Rw -bo -ab -ab +iY +cQ +XD +Ao +MC +ba +ZU +ak ef ef ef @@ -41476,31 +41584,31 @@ ef ef ef ef -ef -ab -ab -ab -ab -ab -ab -ab -ab -ab -Bl -kM +ak +aL +ba +ba +ba +ba +ba +ba +ba +ba +Bn +iX HQ -kM -Ry -ab -ab -ab -ab -ab -ab -ab -ab -ab -ef +iX +LC +ba +ba +ba +ba +ba +ba +ba +ba +ZU +ak ef ef ef @@ -41718,31 +41826,31 @@ ef ef ef ef -ef -ef -bu -db -fq +ab +ab +YB +na +YB iZ -nl -rF +YB +YB na -fT +OP Bx -fV -Fx -fV +iX +HQ +iX LF OP -RJ -OP -UG -UG +Zf +YB +YB +iZ YB Zf -bu -ef -ef +YB +ab +ab ef ef ef @@ -41961,29 +42069,29 @@ ef ef ef ef -ef -bu -do -fz -jk -Np -bH -fH -fH -BA -Dv -Fu -fV -LK -OX -OX -OX -fH -fH -fH -Zp -bu -ef +ab +ab +ab +ab +ab +ab +ab +ab +ab +Op +RO +HQ +RO +Xt +ab +ab +ab +ab +ab +ab +ab +ab +ab ef ef ef @@ -42206,23 +42314,23 @@ ef ef bu jK -fH +ln jk -fH -fH -fH -fH -BA +uw +yM +qB +vB +OA fV Fx fV -LK -fH -fH -fH -fH -fH -fH +XN +Uo +jr +Uo +gl +gl +zT Zp bu ef @@ -42447,25 +42555,25 @@ ef ef ef bu -du -fH -fH -fH -fH +dX +lI +jn +ux +zA fH fH BA -fV -Fx +Dv +Fu fV LK +Ky +Ky +Ky fH fH fH -fH -fH -fH -aJ +Zr bu ef ef @@ -42689,24 +42797,24 @@ ef ef ef bu -du -fL +dU +fH jn -Qt -Op +fH +fH fH fH BA fV -FL -JY +Fx +fV LK fH -RO -RO -UL -UL -UL +fH +fH +fH +fH +fH Zr bu ef @@ -42932,23 +43040,23 @@ ef ef bu dC -fP -jq -nt -nt -Oj -yH -BJ -AF +fH +fH +fH +fH +fH +fH +BA +fV Fx -AF -LR -yH -RQ -Tq -yH -yH -vb +fV +LK +fH +fH +fH +fH +fH +fH Zx bu ef @@ -43171,29 +43279,29 @@ ef ef ef ef -ab -ab -ab -ab -ab -ab -ab -ab -ab -BN -fV -Fx +ef +bu +dC +fH +qv +vb +zY +fH +fH +BA fV -LV -ab -ab -ab -ab -ab -ab -ab -ab -ab +FL +UR +LK +fH +GN +GN +tC +tC +tC +CB +bu +ef ef ef ef @@ -43413,29 +43521,29 @@ ef ef ef ef -ab -bG -bG +ef +bu bG +lN js nz nz -nL -ab -UQ -fV +GV +XJ +OL +RQ Fx -fV -Jc -ab -rR -bJ -bJ +RQ +Zy XJ -bJ -bJ -bJ -ab +AL +nA +XJ +XJ +wh +oD +bu +ef ef ef ef @@ -43656,28 +43764,28 @@ ef ef ef ab -bI -dE -dE -dE -nB -rJ -ve ab -zU +ab +ab +ab +ab +ab +ab +ab +OX fV Fx fV -Ji -ab -RV -rJ -UM -dE -dE -dE ZD ab +ab +ab +ab +ab +ab +ab +ab +ab ef ef ef @@ -43898,25 +44006,25 @@ ef ef ef ab -bJ -bJ -bJ -bJ -nL +fT +fT +fT +qy rK -rb +rK +nL ab -SB +UQ fV Fx fV -fI +Jc ab -rb -rK rR bJ bJ +qw +bJ bJ bJ ab @@ -44141,25 +44249,25 @@ ef ef ab xJ -bJ -bJ +jy +jy jy nZ -rP -ab +Tr +Hz ab -zS +zU fV Fx fV -Jc -ab +Ji ab +ke Tr UP jy -bJ -bJ +jy +jy uA ab ef @@ -44382,27 +44490,27 @@ ef ef ef ab -bP -dE -dE -dE -oj -rR -vp -yJ -BO +bJ +bJ +bJ +bJ +nL +Aq +HD +ab +Cl fV Fx fV -BO -yJ -vp -nL -UV -dE -dE -dE -ZH +LZ +ab +HD +Aq +rR +bJ +bJ +bJ +bJ ab ef ef @@ -44624,27 +44732,27 @@ ef ef ef ab -bJ +bZ bJ bJ jL om -rR -vp -yJ -BO -GK +AF +ab +ab +zS +fV Fx -Zm -BO -yJ -vp -nL +fV +Jc +ab +ab +ku UZ +jL bJ bJ -bJ -bJ +ZN ab ef ef @@ -44866,11 +44974,11 @@ ef ef ef ab -bJ -bJ -bJ -jI -om +bI +jy +jy +jy +ve rR vp yJ @@ -44882,11 +44990,11 @@ BO yJ vp nL -UZ -jI -bJ -bJ -bJ +Cx +jy +jy +jy +WQ ab ef ef @@ -45108,27 +45216,27 @@ ef ef ef ab -bQ -dE -dE +bJ +bJ +bJ dE or -rU -vr -yM -Ck -Ck -Ii -Ck +rR +vp +yJ +BO Ck -yM -vr -TA -Vm -dE -dE -dE -ZJ +Fx +UV +BO +yJ +vp +nL +Vo +bJ +bJ +bJ +bJ ab ef ef @@ -45354,7 +45462,7 @@ bJ bJ bJ jI -ov +or rR vp yJ @@ -45592,27 +45700,27 @@ ef ef ef ab -bJ -bJ -bJ -jL -ov -rR -vp -yJ -BO -GK -Fx +bP +jy +jy +jy +vr +Bb +HP +Nb Zm -BO -yJ -vp -nL +Zm +Tq +Zm +Zm +Nb +HP +BR Vq -bJ -bJ -bJ -bJ +jy +jy +jy +Jn ab ef ef @@ -45834,11 +45942,11 @@ ef ef ef ab -bX -dP -dP -dP -oA +bJ +bJ +bJ +jI +ov rR vp yJ @@ -45850,11 +45958,11 @@ BO yJ vp nL -VB -dP -dP -dP -ZM +VM +jI +bJ +bJ +bJ ab ef ef @@ -46076,27 +46184,27 @@ ef ef ef ab -xJ bJ bJ -jy +bJ +dE ov -rV -ab -ab -zS -fV +rR +vp +yJ +BO +Ck Fx -fV -Ct -ab -ab -TF -Vo -jy +UV +BO +yJ +vp +nL +gP +bJ +bJ bJ bJ -uA ab ef ef @@ -46318,27 +46426,27 @@ ef ef ef ab -bJ -bJ -bJ -bJ +bQ +ec +ec +ec oL -rK -Nj -ab -SB +rR +vp +yJ +BO fV Fx fV -fI -ab -Nj -rK +BO +yJ +vp +nL VL -bJ -bJ -bJ -bJ +ec +ec +ec +lU ab ef ef @@ -46561,25 +46669,25 @@ ef ef ab bZ -dT -dT -dT -oU +bJ +bJ +jL +ov sk -vx ab -zU +ab +zS fV Fx fV -Ji +Ct ab -Sb -sk +ab +hR VM -dT -dT -dT +jL +bJ +bJ ZN ab ef @@ -46802,24 +46910,24 @@ ef ef ef ab -bG -bG -bG -jU -nz -nz -nL +bJ +bJ +bJ +bJ +vx +Aq +Id ab Cl -Es +fV Fx -Es +fV LZ ab -rR -bJ +Id +Aq +yn bJ -XN bJ bJ bJ @@ -47044,27 +47152,27 @@ ef ef ef ab +bX +eo +eo +eo +vC +Bh +Ig ab +zU +fV +Fx +fV +Ji ab -ab -ab -ab -ab -ab -ab -bu -sr -Im -sr -bu -ab -ab -ab -ab -ab -ab -ab -ab +EQ +Bh +iL +eo +eo +eo +IQ ab ef ef @@ -47285,29 +47393,29 @@ ef ef ef ef -aQ -bu -dW -fT -ka -fT -bu -fT -fT -ka -fT -fT -fT -ka +ab fT fT -bu fT ka -fT -Zy -bu -XV +rK +rK +nL +ab +LR +RV +Fx +RV +ZG +ab +rR +bJ +bJ +GE +bJ +bJ +bJ +ab ef ef ef @@ -47527,29 +47635,29 @@ ef ef ef ef -aQ -cc -do -fV -fV -fV -sr -fV -fV -fV -fV -fV -fV -fV -fV -fV -sr -fV -fV -fV -Zp -cc -XV +ab +ab +ab +ab +ab +ab +ab +ab +ab +bu +Bp +TA +Bp +bu +ab +ab +ab +ab +ab +ab +ab +ab +ab ef ef ef @@ -47770,27 +47878,27 @@ ef ef ef aQ -cc +bu do -fV -fV -fV -cc vB -fV -fV -fV -fV -fV -fV -fV +qB vB -cc -fV -fV -fV -Zp -cc +bu +vB +vB +qB +vB +vB +vB +qB +vB +vB +bu +vB +qB +vB +XQ +bu XV ef ef @@ -48012,27 +48120,27 @@ ef ef ef aQ -bu +cc dX -gb -gb -gb -bu -vC -vC -vC -vC -bu -vC -vC -vC -vC -bu -gb -gb -gb -Zx -bu +fV +fV +fV +Bp +fV +fV +fV +fV +fV +fV +fV +fV +fV +Bp +fV +fV +fV +Zr +cc XV ef ef @@ -48254,27 +48362,27 @@ ef ef ef aQ -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu +cc +dX +fV +fV +fV +cc +Ii +fV +fV +fV +fV +fV +fV +fV +Ii +cc +fV +fV +fV +Zr +cc XV ef ef @@ -48496,27 +48604,27 @@ ef ef ef aQ -ci -ci -ci -ci -ci -ci -ci -ci -ci -ci -ci -ci -ci -ci -ci -ci -ci -ci -ci -ci -ci +bu +fz +lX +lX +lX +bu +Im +Im +Im +Im +bu +Im +Im +Im +Im +bu +lX +lX +lX +oD +bu XV ef ef @@ -48738,27 +48846,27 @@ ef ef ef aQ -ci -ec -ec -ec -ci -ci -ec -ec -ec -ci -ci -ci -ec -ec -ec -ci -ci -ec -ec -ec -ci +bu +bu +bu +bu +bu +bu +bu +bu +bu +bu +bu +bu +bu +bu +bu +bu +bu +bu +bu +bu +bu XV ef ef @@ -48979,29 +49087,29 @@ ef ef ef ef -aT -cl -eo -gc -kb -aT -cl -eo -gc -kb -aT -Ip -cl -eo -gc -kb -aT -cl -eo -gc -kb -aT -cl +aQ +ci +ci +ci +ci +ci +ci +ci +ci +ci +ci +ci +ci +ci +ci +ci +ci +ci +ci +ci +ci +ci +XV ef ef ef @@ -49221,29 +49329,29 @@ ef ef ef ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef +aQ +ci +fI +fI +fI +ci +ci +fI +fI +fI +ci +ci +ci +fI +fI +fI +ci +ci +fI +fI +fI +ci +XV ef ef ef @@ -49463,29 +49571,29 @@ ef ef ef ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef -ef +aT +cl +fL +mq +ra +aT +cl +fL +mq +ra +aT +TF +cl +fL +mq +ra +aT +cl +fL +mq +ra +aT +cl ef ef ef diff --git a/_maps/map_files/LV624/LV624.dmm b/_maps/map_files/LV624/LV624.dmm index c1525df887608..848ce6891ce52 100644 --- a/_maps/map_files/LV624/LV624.dmm +++ b/_maps/map_files/LV624/LV624.dmm @@ -5812,7 +5812,7 @@ /turf/open/floor/plating/ground/dirt, /area/lv624/ground/sand4) "eSp" = ( -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 30 }, /obj/structure/rack, @@ -7225,7 +7225,7 @@ /area/lv624/ground/river1) "gxL" = ( /obj/structure/table, -/obj/item/clothing/suit/apron, +/obj/item/clothing/suit/storage/apron, /turf/open/floor/tile/green/greentaupe{ dir = 5 }, @@ -10802,7 +10802,7 @@ /area/lv624/lazarus/atmos) "kyP" = ( /obj/structure/rack, -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 30 }, /turf/open/floor/plating/platebot, @@ -11451,7 +11451,7 @@ /area/lv624/lazarus/engineering) "lmd" = ( /obj/structure/table, -/obj/item/clothing/suit/chef/classic, +/obj/item/clothing/suit/storage/chef/classic, /turf/open/floor/freezer, /area/lv624/lazarus/kitchen) "lmI" = ( @@ -16680,7 +16680,7 @@ /area/lv624/ground/jungle9) "ruj" = ( /obj/structure/table, -/obj/item/clothing/suit/apron/overalls, +/obj/item/clothing/suit/storage/apron/overalls, /obj/item/clothing/under/colonist, /turf/open/floor/tile/green/greentaupe{ dir = 5 @@ -16850,7 +16850,7 @@ dir = 1 }, /obj/structure/table, -/obj/item/clothing/suit/apron, +/obj/item/clothing/suit/storage/apron, /turf/open/floor/tile/green/greentaupe{ dir = 5 }, @@ -17807,7 +17807,7 @@ "sDZ" = ( /obj/structure/table, /obj/item/clothing/gloves/botanic_leather, -/obj/item/clothing/suit/apron, +/obj/item/clothing/suit/storage/apron, /obj/item/clothing/under/colonist, /turf/open/floor/tile/green/whitegreen, /area/lv624/lazarus/hydroponics/aux) diff --git a/_maps/map_files/Lawanka_Outpost/LawankaOutpost.dmm b/_maps/map_files/Lawanka_Outpost/LawankaOutpost.dmm index 6103aed710f9b..c81af49b6e950 100644 --- a/_maps/map_files/Lawanka_Outpost/LawankaOutpost.dmm +++ b/_maps/map_files/Lawanka_Outpost/LawankaOutpost.dmm @@ -131,6 +131,15 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor/tile/dark2, /area/lawankaoutpost/caves/nanotrasen_lab) +"aeA" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth/buildable, +/area/lawankaoutpost/outside/southeast) "aeT" = ( /obj/structure/flora/ausbushes/grassybush{ pixel_y = -3 @@ -267,6 +276,11 @@ /obj/item/clothing/head/helmet/riot, /turf/open/floor/tile/dark, /area/lawankaoutpost/caves/nukestorage) +"alq" = ( +/obj/effect/ai_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/turf/open/ground/grass/weedable, +/area/lawankaoutpost/outside/northwest) "alw" = ( /obj/structure/table, /obj/item/trash/plate, @@ -520,6 +534,18 @@ dir = 6 }, /area/lawankaoutpost/colony/medbay) +"awR" = ( +/obj/machinery/landinglight/lz2{ + dir = 4 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/floor/plating, +/area/shuttle/drop2/lz2) "awT" = ( /obj/structure/sign/botany{ dir = 1 @@ -1098,6 +1124,7 @@ dir = 2 }, /obj/effect/landmark/weed_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, /turf/open/floor/tile/white, /area/lawankaoutpost/colony/operations_hall) "aVd" = ( @@ -1588,6 +1615,9 @@ /area/lawankaoutpost/colony/northdorms) "bso" = ( /obj/effect/decal/cleanable/blood, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, /turf/open/floor/tile/red/whitered, /area/lawankaoutpost/colony/operations_hall) "bsK" = ( @@ -1636,6 +1666,12 @@ /obj/effect/ai_node, /turf/open/ground/grass/weedable, /area/lawankaoutpost/colony/hydroponics) +"buU" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/ground/grass/weedable, +/area/lawankaoutpost/outside/northwest) "bvM" = ( /obj/effect/decal/cleanable/blood/oil/streak, /obj/machinery/atmospherics/components/unary/vent_scrubber{ @@ -1917,6 +1953,16 @@ dir = 8 }, /area/lawankaoutpost/colony/operations_storage) +"bFq" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/floor/tile/white, +/area/lawankaoutpost/colony/operations_hall) "bFS" = ( /obj/structure/flora/ausbushes/grassybush{ pixel_x = -8 @@ -1946,6 +1992,17 @@ }, /turf/open/floor/mainship/tcomms, /area/lawankaoutpost/colony/biologics) +"bGQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/ai_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/floor/tile/white, +/area/lawankaoutpost/colony/operations_hall) "bGR" = ( /obj/item/ammo_casing/shell, /obj/effect/landmark/dropship_start_location, @@ -2185,6 +2242,10 @@ /obj/effect/ai_node, /turf/open/floor/tile/dark2, /area/lawankaoutpost/colony/cargo) +"bTr" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/turf/open/floor/tile/red/whitered, +/area/lawankaoutpost/colony/operations_hall) "bTI" = ( /obj/machinery/light{ light_color = "#da2f1b" @@ -2909,6 +2970,10 @@ dir = 9 }, /obj/effect/ai_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, /turf/open/floor, /area/lawankaoutpost/colony/landingzonetwo) "cvR" = ( @@ -2936,6 +3001,16 @@ /obj/item/trash/pistachios, /turf/open/floor/tile/blue/taupeblue, /area/lawankaoutpost/colony/robotics) +"cyp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirt, +/area/lawankaoutpost/outside/northwest) "cyC" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /turf/open/floor/tile/dark/brown2{ @@ -3085,6 +3160,12 @@ /obj/item/tool/minihoe, /turf/open/floor/tile/green/full, /area/lawankaoutpost/colony/hydroponics) +"cEu" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/floor, +/area/lawankaoutpost/colony/landingzonetwo) "cEA" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/effect/landmark/weed_node, @@ -3149,6 +3230,12 @@ "cGs" = ( /turf/open/floor/mainship/tcomms, /area/lawankaoutpost/colony/biologics) +"cGD" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/plating, +/area/shuttle/drop2/lz2) "cGJ" = ( /obj/structure/flora/grass/tallgrass/hideable{ color = "#7a8c54" @@ -3333,6 +3420,10 @@ /obj/structure/cable, /turf/open/floor/plating, /area/lawankaoutpost/colony/biologics_storage) +"cQO" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/turf/open/floor/plating/ground/dirt, +/area/lawankaoutpost/caves/northwest/garbledradio) "cRx" = ( /obj/structure/closet/crate/hydroponics/prespawned, /turf/open/floor, @@ -3477,10 +3568,6 @@ }, /turf/open/floor/tile/darkgreen/darkgreen2/corner, /area/lawankaoutpost/colony/marshalls) -"cXI" = ( -/obj/effect/landmark/campaign_structure/asat_system, -/turf/open/floor/plating/ground/dirtgrassborder/autosmooth/buildable, -/area/lawankaoutpost/outside/west) "cXS" = ( /obj/effect/spawner/random/misc/plant, /turf/open/floor/tile/dark2, @@ -3561,6 +3648,14 @@ }, /turf/open/ground/grass/weedable, /area/lawankaoutpost/outside/northwest) +"daw" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/tile/red/whitered{ + dir = 8 + }, +/area/lawankaoutpost/colony/operations_hall) "daB" = ( /obj/docking_port/stationary/crashmode, /turf/open/floor/plating, @@ -3651,6 +3746,13 @@ /obj/effect/landmark/weed_node, /turf/open/ground/grass/weedable, /area/lawankaoutpost/outside/south) +"ddW" = ( +/obj/machinery/door/poddoor/timed_late/containment/landing_zone/lz2, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth/buildable, +/area/lawankaoutpost/outside/southeast) "dea" = ( /obj/machinery/light{ dir = 8 @@ -3750,6 +3852,14 @@ /obj/structure/flora/ausbushes/ppflowers, /turf/open/ground/grass/weedable, /area/lawankaoutpost/outside/northwest) +"dhZ" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/tile/red/whitered{ + dir = 9 + }, +/area/lawankaoutpost/colony/operations_hall) "dir" = ( /obj/effect/ai_node, /turf/open/floor/tile/blue/taupeblue, @@ -4017,6 +4127,12 @@ "dun" = ( /turf/closed/wall/cult, /area/lawankaoutpost/caves/southwest) +"duo" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/floor/plating, +/area/shuttle/drop2/lz2) "duN" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -4298,6 +4414,13 @@ "dJH" = ( /turf/open/floor/tile/white, /area/lawankaoutpost/colony/operations_kitchen) +"dJO" = ( +/obj/effect/ai_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirt, +/area/lawankaoutpost/outside/southeast) "dJU" = ( /turf/open/floor/tile/red/whitered{ dir = 9 @@ -4380,7 +4503,7 @@ /area/lawankaoutpost/caves/nanotrasen_lab) "dNa" = ( /obj/structure/table/reinforced, -/obj/item/trash/barcardine, +/obj/item/trash/barcaridine, /turf/open/floor/plating/ground/dirt, /area/lawankaoutpost/outside/central) "dND" = ( @@ -4520,6 +4643,14 @@ dir = 4 }, /area/lawankaoutpost/colony/mining) +"dTG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirt, +/area/lawankaoutpost/caves/northwest/garbledradio) "dUh" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/effect/ai_node, @@ -4632,6 +4763,14 @@ dir = 5 }, /area/lawankaoutpost/colony/operations_administration) +"eag" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/turf/open/floor/tile/red/whitered{ + dir = 10 + }, +/area/lawankaoutpost/colony/operations_hall) "eaq" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -5091,6 +5230,9 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, /turf/open/floor/tile/white, /area/lawankaoutpost/colony/operations_hall) "esN" = ( @@ -5396,6 +5538,7 @@ /area/lawankaoutpost/colony/medbay) "eHv" = ( /obj/structure/flora/ausbushes/ywflowers, +/obj/effect/landmark/campaign_structure/asat_system, /turf/open/ground/grass/weedable, /area/lawankaoutpost/colony/operations_hall) "eHy" = ( @@ -5835,6 +5978,12 @@ /obj/effect/landmark/weed_node, /turf/open/floor/tile/blue/taupebluecorner, /area/lawankaoutpost/colony/recdorms) +"eWC" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/floor/tile/white, +/area/lawankaoutpost/colony/operations_hall) "eWO" = ( /obj/structure/table, /obj/item/reagent_containers/dropper, @@ -6019,6 +6168,15 @@ /obj/effect/ai_node, /turf/open/ground/grass/weedable, /area/lawankaoutpost/outside/southwest) +"fhA" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirt, +/area/lawankaoutpost/outside/northwest) "fhC" = ( /obj/structure/flora/grass/tallgrass/hideable/tallgrasscorner{ color = "#7a8c54"; @@ -6291,6 +6449,15 @@ dir = 1 }, /area/lawankaoutpost/colony/operations_meeting) +"fsi" = ( +/obj/machinery/door/poddoor/timed_late/containment/landing_zone/lz2{ + dir = 2 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth/buildable, +/area/lawankaoutpost/outside/southeast) "fst" = ( /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/tile/dark2, @@ -6338,6 +6505,16 @@ }, /turf/open/floor/tile/dark2, /area/lawankaoutpost/colony/cargo) +"ftP" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth/buildable, +/area/lawankaoutpost/outside/southeast) "ftR" = ( /obj/structure/cargo_container/ch_red{ dir = 1 @@ -6694,6 +6871,14 @@ dir = 1 }, /area/lawankaoutpost/colony/southdorms) +"fHH" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/effect/landmark/weed_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/lawankaoutpost/outside/northwest) "fHP" = ( /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/dirt, @@ -6782,6 +6967,18 @@ /obj/effect/landmark/xeno_resin_wall, /turf/open/floor/plating/ground/dirt, /area/lawankaoutpost/caves/west/garbledradio) +"fKB" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/floor/tile/red/whitered{ + dir = 1 + }, +/area/lawankaoutpost/colony/operations_hall) "fKE" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -6796,6 +6993,13 @@ dir = 6 }, /area/lawankaoutpost/colony/cargo) +"fKM" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/lawankaoutpost/outside/northwest) "fKR" = ( /obj/structure/rack, /obj/item/stack/sheet/mineral/sandstone, @@ -7704,6 +7908,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor, /area/lawankaoutpost/colony/recdorms) +"gtR" = ( +/obj/item/stool, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/floor/tile/white, +/area/lawankaoutpost/colony/operations_hall) "gtS" = ( /obj/structure/flora/ausbushes/grassybush{ pixel_x = -11; @@ -7847,6 +8058,9 @@ /area/lawankaoutpost/caves/southwest) "gCQ" = ( /obj/effect/ai_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, /turf/open/floor/tile/red/whitered{ dir = 5 }, @@ -8465,6 +8679,9 @@ "hhr" = ( /obj/effect/landmark/weed_node, /obj/effect/ai_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, /turf/open/floor/plating/ground/dirt, /area/lawankaoutpost/outside/northwest) "hhw" = ( @@ -8904,6 +9121,13 @@ /obj/effect/ai_node, /turf/open/floor/plating/ground/dirt, /area/lawankaoutpost/colony/engineering) +"hGO" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/turf/open/floor/tile/red/whitered, +/area/lawankaoutpost/colony/operations_hall) "hHa" = ( /obj/structure/table, /obj/item/circuitboard/computer/powermonitor, @@ -9207,6 +9431,15 @@ /obj/machinery/atmospherics/pipe/manifold/green/hidden, /turf/open/floor/plating/ground/dirt, /area/lawankaoutpost/outside/west) +"hSj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/tile/red/whitered{ + dir = 4 + }, +/area/lawankaoutpost/colony/operations_hall) "hSl" = ( /obj/structure/flora/ausbushes/pointybush, /turf/open/ground/grass/weedable, @@ -9263,6 +9496,12 @@ }, /turf/open/floor, /area/lawankaoutpost/colony/recdorms) +"hTE" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/lawankaoutpost/outside/southeast) "hTN" = ( /obj/structure/window_frame/colony/reinforced, /turf/open/floor/tile/dark2, @@ -9294,10 +9533,23 @@ dir = 6 }, /area/lawankaoutpost/colony/robotics) +"hUA" = ( +/obj/effect/landmark/campaign_structure/asat_system, +/turf/open/floor/plating/icefloor/warnplate{ + dir = 8 + }, +/area/shuttle/drop2/lz2) "hUT" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor, /area/lawankaoutpost/colony/operations_kitchen) +"hVu" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/turf/open/floor, +/area/lawankaoutpost/colony/landingzonetwo) "hVC" = ( /obj/effect/landmark/weed_node, /turf/open/floor/tile/dark2, @@ -9330,6 +9582,16 @@ dir = 1 }, /area/lawankaoutpost/colony/cargo) +"hXl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/tile/red/whitered{ + dir = 8 + }, +/area/lawankaoutpost/colony/operations_hall) "hXN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood, @@ -9437,6 +9699,12 @@ }, /turf/open/ground/grass/weedable, /area/lawankaoutpost/outside/northeast) +"icW" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/floor, +/area/lawankaoutpost/colony/landingzonetwo) "idb" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/green/hidden, @@ -9800,6 +10068,13 @@ /obj/effect/ai_node, /turf/open/floor/plating/ground/dirt, /area/lawankaoutpost/outside/southeast) +"ivi" = ( +/obj/item/stool, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/floor/tile/white, +/area/lawankaoutpost/colony/operations_hall) "ivx" = ( /obj/structure/flora/ausbushes/grassybush{ pixel_x = -6; @@ -9862,6 +10137,11 @@ }, /turf/open/floor/tile/dark, /area/lawankaoutpost/caves/nanotrasen_lab) +"ixS" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/turf/open/ground/grass/weedable, +/area/lawankaoutpost/outside/northwest) "iya" = ( /obj/effect/spawner/random/misc/trash, /turf/open/floor/tile/green/greentaupe, @@ -10512,6 +10792,13 @@ /obj/effect/ai_node, /turf/open/floor/tile/green/full, /area/lawankaoutpost/colony/hydroponics) +"iYK" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth/buildable, +/area/lawankaoutpost/outside/southeast) "iZd" = ( /obj/machinery/door/airlock/mainship/research/free_access{ dir = 1; @@ -10716,6 +11003,12 @@ }, /turf/open/floor/tile/dark2, /area/lawankaoutpost/colony/engineering) +"jfZ" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/ground/grass/weedable, +/area/lawankaoutpost/outside/southeast) "jgh" = ( /obj/effect/decal/cleanable/dirt, /obj/item/ammo_casing, @@ -10826,12 +11119,18 @@ /obj/effect/decal/cleanable/blood, /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, /turf/open/floor/tile/red/whitered{ dir = 4 }, /area/lawankaoutpost/colony/operations_hall) "jjF" = ( /obj/docking_port/stationary/marine_dropship/lz2, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, /turf/open/floor/plating, /area/shuttle/drop2/lz2) "jjG" = ( @@ -10941,6 +11240,12 @@ }, /turf/open/floor/tile/dark2, /area/lawankaoutpost/colony/cargo) +"jnP" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth/buildable, +/area/lawankaoutpost/outside/southeast) "jnU" = ( /obj/effect/decal/cleanable/blood, /obj/effect/landmark/weed_node, @@ -10967,7 +11272,7 @@ /area/lawankaoutpost/colony/mining) "jpj" = ( /obj/structure/table, -/obj/item/clothing/suit/apron, +/obj/item/clothing/suit/storage/apron, /turf/open/floor, /area/lawankaoutpost/colony/hydroponics) "jpt" = ( @@ -11167,6 +11472,9 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1 }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, /turf/open/floor/tile/white, /area/lawankaoutpost/colony/operations_hall) "jAp" = ( @@ -11432,6 +11740,12 @@ /obj/effect/spawner/random/machinery/random_broken_computer/small, /turf/open/floor/tile/dark/red2, /area/lawankaoutpost/caves/nanotrasen_lab) +"jLe" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/ground/grass/weedable, +/area/lawankaoutpost/outside/northwest) "jLu" = ( /obj/machinery/door/airlock/mainship/medical/glass/free_access{ dir = 1; @@ -11822,6 +12136,12 @@ }, /turf/open/floor/freezer, /area/lawankaoutpost/colony/northdorms) +"khx" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/tile/white, +/area/lawankaoutpost/colony/operations_hall) "khB" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -12123,6 +12443,15 @@ /obj/effect/turf_decal/warning_stripes/box, /turf/open/floor/tile/dark2, /area/lawankaoutpost/colony/cargo) +"kwA" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/turf/open/floor/tile/red/whitered{ + dir = 4 + }, +/area/lawankaoutpost/colony/operations_hall) "kwI" = ( /turf/open/floor/tile/dark2, /area/lawankaoutpost/colony/atmos) @@ -12194,6 +12523,14 @@ /obj/effect/decal/cleanable/blood, /turf/open/floor/tile/blue/taupeblue, /area/lawankaoutpost/colony/biologics) +"kyD" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/tile/red/whitered{ + dir = 1 + }, +/area/lawankaoutpost/colony/operations_hall) "kyJ" = ( /obj/item/ammo_casing/shell, /turf/open/floor/wood, @@ -12386,6 +12723,15 @@ dir = 6 }, /area/lawankaoutpost/colony/mining) +"kHg" = ( +/obj/machinery/landinglight/lz2{ + dir = 4 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/floor/plating, +/area/shuttle/drop2/lz2) "kHz" = ( /obj/structure/flora/grass/tallgrass/hideable/tallgrasscorner{ color = "#7a8c54"; @@ -12931,6 +13277,12 @@ }, /turf/open/floor/wood, /area/lawankaoutpost/colony/bar) +"ldp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/turf/open/floor/plating/ground/dirt, +/area/lawankaoutpost/caves/northwest/garbledradio) "ldt" = ( /obj/structure/table/reinforced, /obj/structure/paper_bin{ @@ -12945,6 +13297,15 @@ /obj/structure/cable, /turf/open/floor/tile/blue/taupebluecorner, /area/lawankaoutpost/colony/recdorms) +"leg" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/ai_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/turf/open/floor/tile/red/whitered{ + dir = 4 + }, +/area/lawankaoutpost/colony/operations_hall) "lej" = ( /obj/structure/flora/grass/tallgrass/hideable/tallgrasscorner{ color = "#7a8c54"; @@ -12959,6 +13320,17 @@ }, /turf/open/ground/grass/weedable, /area/lawankaoutpost/outside/northeast) +"lfp" = ( +/obj/effect/spawner/random/misc/trash, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/floor/tile/white, +/area/lawankaoutpost/colony/operations_hall) "lfv" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor/tile/white, @@ -13975,6 +14347,13 @@ "lTQ" = ( /turf/open/floor/tile/dark, /area/lawankaoutpost/caves/nukestorage) +"lTX" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/turf/open/floor/plating/ground/dirt, +/area/lawankaoutpost/outside/southeast) "lUk" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -14323,6 +14702,12 @@ /obj/effect/landmark/weed_node, /turf/open/ground/grass/weedable, /area/lawankaoutpost/outside/northeast) +"mnp" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/lawankaoutpost/outside/northwest) "mnw" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/green/hidden, @@ -14469,6 +14854,12 @@ /obj/structure/window/framed/colony, /turf/open/floor, /area/lawankaoutpost/colony/mining) +"msB" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirt, +/area/lawankaoutpost/outside/southeast) "msI" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -15092,6 +15483,10 @@ /obj/machinery/landinglight/lz2{ dir = 4 }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, /turf/open/floor/mech_bay_recharge_floor, /area/shuttle/drop2/lz2) "mUm" = ( @@ -15443,6 +15838,13 @@ /obj/effect/spawner/random/misc/structure/supplycrate, /turf/open/floor/tile/dark2, /area/lawankaoutpost/colony/mining) +"niT" = ( +/obj/item/stool, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/turf/open/floor/tile/red/whitered, +/area/lawankaoutpost/colony/operations_hall) "njc" = ( /obj/effect/ai_node, /turf/open/floor, @@ -16050,6 +16452,12 @@ }, /turf/open/ground/grass/weedable, /area/lawankaoutpost/outside/northwest) +"nFO" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/turf/open/floor/tile/red/whitered{ + dir = 6 + }, +/area/lawankaoutpost/colony/operations_hall) "nFU" = ( /turf/open/floor, /area/lawankaoutpost/colony/landingzoneone) @@ -16178,6 +16586,19 @@ /obj/structure/cargo_container/ch_green, /turf/open/floor, /area/lawankaoutpost/colony/landingzonetwo) +"nKe" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirt, +/area/lawankaoutpost/caves/northwest/garbledradio) +"nKi" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth/buildable, +/area/lawankaoutpost/outside/southeast) "nKl" = ( /obj/structure/bed/chair/office/dark{ dir = 4 @@ -16378,6 +16799,14 @@ /obj/structure/flora/ausbushes/fullgrass, /turf/open/ground/grass/weedable, /area/lawankaoutpost/outside/northwest) +"nTK" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/turf/open/floor/tile/red/whitered{ + dir = 8 + }, +/area/lawankaoutpost/colony/operations_hall) "nTQ" = ( /obj/structure/flora/grass/tallgrass/hideable/tallgrasscorner{ color = "#7a8c54"; @@ -16385,6 +16814,11 @@ }, /turf/open/ground/grass/weedable, /area/lawankaoutpost/outside/southwest) +"nUc" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/turf/open/ground/grass/weedable, +/area/lawankaoutpost/outside/northwest) "nUh" = ( /obj/structure/window/reinforced, /turf/open/floor/tile/green/greentaupe, @@ -17016,6 +17450,13 @@ dir = 6 }, /area/lawankaoutpost/colony/biologics) +"otm" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirt, +/area/lawankaoutpost/caves/northwest/garbledradio) "otD" = ( /obj/machinery/door/airlock/maintenance{ dir = 1 @@ -17093,6 +17534,17 @@ /obj/effect/ai_node, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth/buildable, /area/lawankaoutpost/outside/west) +"oxk" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/ai_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/tile/red/whitered{ + dir = 1 + }, +/area/lawankaoutpost/colony/operations_hall) "oxl" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/effect/landmark/weed_node, @@ -17741,6 +18193,15 @@ dir = 8 }, /area/lawankaoutpost/colony/operations_hall) +"oXp" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/plating, +/area/shuttle/drop2/lz2) "oXI" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/tile/blue/whitebluecorner{ @@ -17798,10 +18259,6 @@ dir = 4 }, /area/lawankaoutpost/colony/northdorms) -"pbK" = ( -/obj/effect/landmark/campaign_structure/asat_system, -/turf/open/floor/plating/ground/dirt, -/area/lawankaoutpost/outside/central) "pcm" = ( /turf/open/floor/mainship/blue, /area/lawankaoutpost/colony/biologics) @@ -17959,6 +18416,13 @@ /obj/effect/ai_node, /turf/open/floor/plating/ground/dirt, /area/lawankaoutpost/outside/northeast) +"pia" = ( +/obj/structure/flora/ausbushes/ywflowers, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/lawankaoutpost/outside/northwest) "pic" = ( /obj/structure/table, /obj/item/laptop, @@ -18116,6 +18580,13 @@ /obj/effect/landmark/weed_node, /turf/open/floor, /area/lawankaoutpost/colony/northdorms) +"poD" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/floor/tile/white, +/area/lawankaoutpost/colony/operations_hall) "poI" = ( /obj/machinery/door/airlock/multi_tile/mainship/comdoor/free_access{ name = "\improper Operations Kitchen" @@ -18266,6 +18737,13 @@ dir = 1 }, /area/lawankaoutpost/colony/atmos) +"puk" = ( +/obj/structure/cable, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/floor, +/area/lawankaoutpost/colony/landingzonetwo) "puu" = ( /obj/structure/closet/coffin, /obj/item/grown/sunflower, @@ -18491,6 +18969,15 @@ /obj/effect/landmark/weed_node, /turf/open/floor/tile/dark2, /area/lawankaoutpost/colony/marshalls) +"pCE" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/floor, +/area/lawankaoutpost/colony/landingzonetwo) "pCN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/green/hidden, @@ -18704,6 +19191,9 @@ dir = 4 }, /obj/effect/landmark/corpsespawner/colonist, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, /turf/open/floor/tile/red/whitered{ dir = 4 }, @@ -18881,6 +19371,9 @@ pixel_y = -3 }, /obj/effect/landmark/weed_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, /turf/open/ground/grass/weedable, /area/lawankaoutpost/outside/northwest) "pUx" = ( @@ -19225,6 +19718,10 @@ /obj/structure/cargo_container/ch_green, /turf/open/floor/tile/dark2, /area/lawankaoutpost/colony/cargo) +"qjr" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/turf/open/ground/grass/weedable, +/area/lawankaoutpost/outside/northwest) "qju" = ( /obj/machinery/computer3/powermonitor, /turf/open/floor/tile/dark2, @@ -20070,6 +20567,13 @@ dir = 1 }, /area/lawankaoutpost/colony/recdorms) +"qWr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/turf/open/floor/tile/red/whitered{ + dir = 8 + }, +/area/lawankaoutpost/colony/operations_hall) "qWK" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -20092,6 +20596,14 @@ }, /turf/open/floor/tile/white, /area/lawankaoutpost/colony/operations_kitchen) +"qXJ" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/plating/icefloor/warnplate{ + dir = 8 + }, +/area/shuttle/drop2/lz2) "qXU" = ( /obj/structure/window/reinforced{ dir = 4 @@ -20207,6 +20719,15 @@ }, /turf/open/floor/freezer, /area/lawankaoutpost/colony/southdorms) +"rcl" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/ground/grass/weedable, +/area/lawankaoutpost/outside/northwest) "rcG" = ( /obj/structure/table, /obj/effect/spawner/random/food_or_drink/packagedbar, @@ -21036,6 +21557,13 @@ /obj/effect/decal/cleanable/blood, /turf/open/floor/wood, /area/lawankaoutpost/colony/bar) +"rGl" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth/buildable, +/area/lawankaoutpost/outside/northwest) "rGI" = ( /obj/machinery/optable, /obj/effect/landmark/corpsespawner/colonist/burst, @@ -21086,6 +21614,15 @@ /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor, /area/lawankaoutpost/colony/biologics) +"rJx" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/floor, +/area/lawankaoutpost/colony/landingzonetwo) "rJM" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor/tile/dark2, @@ -21246,6 +21783,7 @@ /area/lawankaoutpost/colony/cargo) "rSS" = ( /obj/machinery/camera/autoname/lz_camera, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, /turf/open/floor/plating/icefloor/warnplate{ dir = 8 }, @@ -21979,6 +22517,10 @@ pixel_x = -6; pixel_y = -5 }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, /turf/open/ground/grass/weedable, /area/lawankaoutpost/outside/northwest) "szb" = ( @@ -22096,6 +22638,13 @@ dir = 8 }, /area/lawankaoutpost/colony/operations_storage) +"sDp" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/ground/grass/weedable, +/area/lawankaoutpost/outside/northwest) "sDx" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/manifold4w/green/hidden, @@ -22309,7 +22858,7 @@ /area/lawankaoutpost/colony/medbay) "sMr" = ( /obj/structure/table, -/obj/item/clothing/suit/apron, +/obj/item/clothing/suit/storage/apron, /turf/open/floor/tile/green/full, /area/lawankaoutpost/colony/hydroponics) "sMJ" = ( @@ -22335,10 +22884,23 @@ }, /turf/open/floor/tile/white, /area/lawankaoutpost/colony/operations_hall) +"sNv" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/ground/grass/weedable, +/area/lawankaoutpost/outside/northwest) "sNB" = ( /obj/machinery/computer/telecomms/monitor, /turf/open/floor/bcircuit/anim, /area/lawankaoutpost/caves/nanotrasen_lab) +"sOi" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/floor/tile/white, +/area/lawankaoutpost/colony/operations_hall) "sOu" = ( /obj/structure/cargo_container, /turf/open/floor, @@ -22375,6 +22937,10 @@ /obj/effect/landmark/weed_node, /turf/open/ground/grass/weedable, /area/lawankaoutpost/outside/central) +"sPq" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/turf/open/floor/plating, +/area/shuttle/drop2/lz2) "sPu" = ( /obj/structure/bed/chair/comfy{ dir = 1 @@ -22425,6 +22991,14 @@ dir = 10 }, /area/lawankaoutpost/caves/nanotrasen_lab) +"sSO" = ( +/obj/effect/ai_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/lawankaoutpost/outside/northwest) "sSV" = ( /obj/effect/ai_node, /turf/open/ground/grass/weedable, @@ -22737,6 +23311,12 @@ dir = 4 }, /area/lawankaoutpost/colony/marshalls) +"tdZ" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirt, +/area/lawankaoutpost/caves/northwest/garbledradio) "ten" = ( /turf/open/floor/tile/dark/brown2, /area/lawankaoutpost/colony/mining) @@ -23572,6 +24152,14 @@ dir = 10 }, /area/lawankaoutpost/colony/operations_hall) +"tLs" = ( +/obj/structure/cable, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/floor/tile/red/whitered, +/area/lawankaoutpost/colony/operations_hall) "tLu" = ( /obj/machinery/light, /turf/open/floor/tile/dark/yellow2{ @@ -23585,6 +24173,12 @@ dir = 8 }, /area/lawankaoutpost/colony/marshalls) +"tLE" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor, +/area/lawankaoutpost/colony/landingzonetwo) "tMc" = ( /obj/effect/ai_node, /turf/open/floor/mainship/tcomms, @@ -24450,6 +25044,9 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, /turf/open/floor/tile/white, /area/lawankaoutpost/colony/operations_hall) "uBn" = ( @@ -24474,6 +25071,12 @@ }, /turf/open/floor/tile/green/full, /area/lawankaoutpost/colony/hydroponics) +"uCo" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/floor/tile/red/whitered, +/area/lawankaoutpost/colony/operations_hall) "uCz" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1 @@ -24979,6 +25582,17 @@ dir = 4 }, /area/lawankaoutpost/colony/medbay) +"uXH" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/floor/tile/red/whitered{ + dir = 1 + }, +/area/lawankaoutpost/colony/operations_hall) "uYc" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/weed_node, @@ -26241,7 +26855,6 @@ /area/lawankaoutpost/colony/medbay) "wca" = ( /obj/structure/flora/ausbushes/ppflowers, -/obj/effect/landmark/campaign_structure/asat_system, /turf/open/ground/grass/weedable, /area/lawankaoutpost/colony/operations_hall) "wce" = ( @@ -26488,6 +27101,12 @@ /obj/effect/landmark/weed_node, /turf/open/floor/tile/dark2, /area/lawankaoutpost/colony/atmos) +"wiv" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirt, +/area/lawankaoutpost/outside/southeast) "wiz" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light{ @@ -26624,6 +27243,15 @@ /obj/mecha_wreckage/phazon, /turf/open/floor/mech_bay_recharge_floor, /area/lawankaoutpost/colony/robotics) +"wnK" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/lawankaoutpost/outside/southeast) "wnM" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -26657,6 +27285,16 @@ }, /turf/open/floor, /area/lawankaoutpost/colony/northdorms) +"woK" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/tile/red/whitered{ + dir = 5 + }, +/area/lawankaoutpost/colony/operations_hall) "wpg" = ( /obj/machinery/power/apc/drained, /obj/structure/cable, @@ -26751,6 +27389,7 @@ /area/lawankaoutpost/colony/bar) "wuH" = ( /obj/structure/cable, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, /turf/open/floor/tile/red/whitered{ dir = 10 }, @@ -26844,6 +27483,13 @@ /obj/effect/landmark/weed_node, /turf/open/floor/wood, /area/lawankaoutpost/colony/bar) +"wxM" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, +/turf/open/floor/plating/ground/dirt, +/area/lawankaoutpost/caves/northwest/garbledradio) "wxY" = ( /obj/effect/landmark/weed_node, /obj/structure/fence, @@ -27312,6 +27958,15 @@ /obj/structure/flora/ausbushes/grassybush, /turf/open/floor/plating/ground/dirtgrassborder/autosmooth/buildable, /area/lawankaoutpost/outside/south) +"wVg" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirt, +/area/lawankaoutpost/caves/northwest/garbledradio) "wVs" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/green/hidden{ @@ -27335,6 +27990,7 @@ /area/lawankaoutpost/caves/west/garbledradio) "wXb" = ( /obj/effect/decal/cleanable/blood, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat, /turf/open/floor/tile/white, /area/lawankaoutpost/colony/operations_hall) "wXh" = ( @@ -27413,6 +28069,15 @@ /obj/structure/reagent_dispensers/beerkeg, /turf/open/floor/wood, /area/lawankaoutpost/colony/bar) +"xal" = ( +/obj/machinery/atmospherics/pipe/manifold/green/hidden{ + dir = 1 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/floor/tile/white, +/area/lawankaoutpost/colony/operations_hall) "xap" = ( /obj/structure/rack, /obj/machinery/light, @@ -27974,6 +28639,15 @@ /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/dirt, /area/lawankaoutpost/outside/northwest) +"xvl" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor, +/area/lawankaoutpost/colony/landingzonetwo) "xvx" = ( /obj/structure/closet/firecloset/full, /turf/open/floor/tile/red/whitered{ @@ -28028,6 +28702,12 @@ /obj/structure/flora/ausbushes/palebush, /turf/open/ground/grass/weedable, /area/lawankaoutpost/outside/south) +"xxD" = ( +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth/buildable, +/area/lawankaoutpost/outside/southeast) "xxH" = ( /obj/mecha_wreckage/seraph, /turf/open/floor/tile/dark/yellow2{ @@ -28284,6 +28964,13 @@ dir = 1 }, /area/lawankaoutpost/colony/marshalls) +"xIg" = ( +/obj/effect/landmark/weed_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/lawankaoutpost/outside/northwest) "xIh" = ( /obj/structure/flora/ausbushes/grassybush{ pixel_x = 2; @@ -28692,6 +29379,13 @@ dir = 4 }, /area/lawankaoutpost/colony/engineering) +"xYP" = ( +/obj/effect/ai_node, +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat{ + dir = 1 + }, +/turf/open/floor, +/area/lawankaoutpost/colony/landingzonetwo) "xYV" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -45749,14 +46443,14 @@ ruO vyl qQS fVT +tdZ +tdZ +tdZ knt knt -knt -knt -knt -knt -knt -knt +tdZ +tdZ +tdZ xGW xGW oqq @@ -45779,7 +46473,7 @@ xQt xQt hSX xQt -hSX +ixS xQt hSX xQt @@ -45996,7 +46690,7 @@ nQk kGD xQt tyS -nTr +nUc xQt xQt amB @@ -46210,10 +46904,10 @@ nTr hSX xQt xQt -nQk -xQt +alq xQt xQt +fKM xQt tJa qyn @@ -46403,9 +47097,9 @@ fVT knt knt knt -knt -rOj -knt +wVg +otm +wxM knt rrz xGW @@ -46427,7 +47121,7 @@ xQt xQt xQt noY -xQt +qjr xQt hSX xQt @@ -46620,9 +47314,9 @@ fVT knt knt knt +nKe knt -knt -knt +cQO knt knt knt @@ -46644,7 +47338,7 @@ xQt xQt xQt xQt -xQt +qjr nTr xQt xQt @@ -46837,9 +47531,9 @@ tbi aFw ybI fyS +dTG ybI -ybI -ybI +ldp ybI ybI kfY @@ -46861,7 +47555,7 @@ hSX nTr nTr xQt -xQt +qjr xQt xQt xQt @@ -47078,7 +47772,7 @@ xQt xQt xQt hSX -xQt +qjr xQt xQt syL @@ -47298,7 +47992,7 @@ xQt nQk xQt bzx -xQt +qjr dgc hSX xQt @@ -47515,7 +48209,7 @@ xQt kGD xQt xQt -xQt +qjr xQt xQt nTr @@ -47538,7 +48232,7 @@ vuj ewf qyR lNL -cXI +vuj oxj iJs ulZ @@ -47940,8 +48634,8 @@ xQt xQt xQt dhy -nTr -xQt +sNv +buU vXr wAJ xzM @@ -48156,7 +48850,7 @@ xQt nTr hSX xQt -xQt +pEo xQt xQt mHu @@ -49021,7 +49715,7 @@ oRz oRz xQt vrF -xQt +jLe xQt xQt hSX @@ -49235,10 +49929,10 @@ mdJ oRz oRz xQt -xQt +pEo hSX xQt -xQt +jLe amB qUy xQt @@ -49455,10 +50149,10 @@ xQt xQt hSX nTr -xQt -xQt -hSX -xQt +rcl +mnp +xIg +mnp xQt xQt vXr @@ -49885,7 +50579,7 @@ hhr mdJ oRz xQt -xQt +qjr xQt xQt xQt @@ -50095,14 +50789,14 @@ sBa xQt xQt qUy -xQt +jLe oRz oRz -pXs -mdJ -sqp -xQt -nQk +fhA +cyp +rGl +mnp +sSO nTr xQt vXr @@ -50312,7 +51006,7 @@ nTr xQt hSX xQt -xQt +jLe oRz pXs pXs @@ -50746,7 +51440,7 @@ nQk amB uPN xQt -pEo +xQt oRz xuZ sdr @@ -50963,16 +51657,16 @@ amB gRP nTr xQt -xQt +jLe oRz qlY tnv oRz oRz xQt -xQt -bzx -xQt +mnp +fHH +mnp vXr rYL uaK @@ -51180,7 +51874,7 @@ xQt nTr xQt xQt -hSX +sDp oRz qlY xiN @@ -52053,11 +52747,11 @@ iGM cey jUl aym -xQt +mnp pUp uOd xQt -amB +pia vXr wbB uaK @@ -54281,9 +54975,9 @@ oya oya tBQ ktu -tBQ -tBQ -tBQ +eWC +eWC +eWC ktu xdJ hlD @@ -54930,12 +55624,12 @@ hvT mtb cLk dwP -tBQ -sNn +eWC +xal wIu xGz rVp -eiK +poD bso ooU vcg @@ -57751,13 +58445,13 @@ wOY ppQ tBQ pUE -tle +uXH uBf -qPW +ivi tBQ qPW uBf -tib +tLs pUE tBQ ppQ @@ -57965,10 +58659,10 @@ wmd bpN lTO fOq -lkZ +daw mwR lkZ -dJU +dhZ taI bpN lkZ @@ -57977,7 +58671,7 @@ taI wuH lkZ lkZ -cDj +qWr lkZ lkZ fOq @@ -57989,7 +58683,7 @@ pnt tBQ ktu lkZ -cDj +qWr oQm poI wQV @@ -58182,7 +58876,7 @@ rPe oXj qKz rPe -rPe +hXl iXv hTU ykB @@ -58191,10 +58885,10 @@ pjG exi oQM giX -kif +niT xRS etk -rPe +nTK rPe rPe xmK @@ -58206,7 +58900,7 @@ rPe xmK soj rPe -iXv +eag hTU hTU ykk @@ -58388,7 +59082,7 @@ sDx wQV nXK tBQ -tle +kyD agr tBQ bws @@ -58399,7 +59093,7 @@ tBQ nsa jAe gfa -tBQ +khx cNE xka tle @@ -58423,7 +59117,7 @@ iTw tBQ agr xdJ -qUw +bTr tBQ nXK wQV @@ -58605,7 +59299,7 @@ wyD npJ smi qRW -qsb +woK aUq hNN avG @@ -58619,7 +59313,7 @@ pYj avG qnp hTU -ykB +oxk sVw uSr ifp @@ -58631,7 +59325,7 @@ qsb avG avG pLX -aUq +leg idR avG avG @@ -58822,7 +59516,7 @@ wQV wQV tBQ chf -pgp +hSj eXn xdJ bKO @@ -58842,13 +59536,13 @@ rIU rIU alw jgC -cvR +nFO bKO pgp bKO bKO bKO -kai +kwA bKO bKO bKO @@ -59053,13 +59747,13 @@ ach aaP pZK fom -atp -djN +fKB +bGQ tBQ tBQ -qPW +gtR esE -qUw +hGO eZL tBQ tpG @@ -62091,13 +62785,13 @@ ioK mAS fGC dJH -tBQ -oRu +sOi +lfp tle tBQ qUw -gKu -qUw +bFq +uCo pMi sWy hdr @@ -62527,9 +63221,9 @@ cgK cgK xdJ gKu -tBQ -tBQ -tBQ +sOi +sOi +sOi gKu tBQ wgw @@ -63426,7 +64120,7 @@ uJt dxV sUR hoS -pbK +wQV iBn wQV pCP @@ -69559,16 +70253,16 @@ sKP sKP sKP sKP -lYq -vjm -vjm +aeA +msB +lTX pdy vjm vjm -lYq -sKP -sKP -sKP +aeA +jfZ +jfZ +jfZ xGW oqq oqq @@ -69776,7 +70470,7 @@ sKP sKP tSX sSV -lYq +jnP vjm vjm gWW @@ -69993,7 +70687,7 @@ sKP sKP sKP sKP -ssU +iYK vjm eXA pdy @@ -70210,7 +70904,7 @@ xGW xGW sKP sKP -lYq +jnP vjm vjm vjm @@ -70427,7 +71121,7 @@ llj llj llj mhj -tWa +ddW cop cop cop @@ -71514,9 +72208,9 @@ lJa wEk wEk uWt -wEk -wEk -xHR +xvl +cEu +puk cvN sDW mSj @@ -71731,10 +72425,10 @@ wEk wEk wEk hYh -wEk +tLE wEk xHR -qip +hVu hYh ciA wEk @@ -71921,10 +72615,10 @@ vjm vjm lYq tZX -ssU -lYq -ssU -jlK +ftP +xxD +nKi +fsi uaC nuL cWF @@ -72138,15 +72832,15 @@ vjm vjm vjm vjm -vjm +wiv vjm vjm qDC vCz wEk wEk -wEk -wEk +pCE +cEu wEk wEk cDI @@ -72355,14 +73049,14 @@ eyS vjm vjm vjm -eyS +dJO vjm vjm qDC wEk wEk wEk -hYh +xYP wEk wEk wEk @@ -72579,7 +73273,7 @@ qDC sXl wEk wEk -wEk +tLE wEk wEk wEk @@ -72796,17 +73490,17 @@ qDC vCz wEk wEk -wEk +tLE wEk lTw fsf fsf fsf fsf -fsf -fsf -fsf -fsf +awR +kHg +kHg +kHg fsf fsf mTD @@ -73006,23 +73700,23 @@ lYq lYq lYq vjm -vjm +wiv vjm vjm qDC wEk wEk wEk -wEk -wEk +rJx +icW xiR apz rxQ rxQ rxQ +qXJ rxQ -rxQ -rxQ +hUA rxQ rxQ rxQ @@ -73223,7 +73917,7 @@ tSX sKP tZX lYq -lYq +jnP lYq lYq jlK @@ -73237,13 +73931,13 @@ ojM jsZ prl bhj +cGD jsZ jsZ jsZ jsZ jsZ -jsZ -jsZ +sPq jsZ jsZ jsZ @@ -73440,8 +74134,8 @@ sKP sKP sKP cDD -sKP -sKP +wnK +hTE sKP oHS uaC @@ -73460,7 +74154,7 @@ jsZ jsZ jsZ jsZ -jsZ +sPq jsZ jsZ jsZ @@ -73677,7 +74371,7 @@ jsZ jsZ jsZ jsZ -jsZ +sPq jsZ jsZ jsZ @@ -73888,7 +74582,7 @@ ojM jsZ jsZ jsZ -jsZ +cGD jsZ jsZ jsZ @@ -74105,12 +74799,12 @@ ojM jsZ jsZ jsZ +oXp jsZ jsZ -jsZ -jsZ -jsZ -jsZ +duo +duo +duo jjF jsZ jsZ diff --git a/_maps/map_files/Magmoor_Digsite_IV/Magmoor_Digsite_IV.dmm b/_maps/map_files/Magmoor_Digsite_IV/Magmoor_Digsite_IV.dmm index 094d7447bc2c4..1020cd6d08dc1 100644 --- a/_maps/map_files/Magmoor_Digsite_IV/Magmoor_Digsite_IV.dmm +++ b/_maps/map_files/Magmoor_Digsite_IV/Magmoor_Digsite_IV.dmm @@ -187,6 +187,12 @@ dir = 1 }, /area/magmoor/cave/north) +"age" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/arrival{ + dir = 8 + }, +/area/magmoor/civilian/pool) "agO" = ( /obj/structure/largecrate/random, /obj/effect/decal/cleanable/blood/oil, @@ -1119,6 +1125,13 @@ dir = 4 }, /area/magmoor/compound) +"aPR" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/magmoor/civilian/gambling) "aQh" = ( /obj/structure/closet/walllocker/hydrant/extinguisher{ dir = 1 @@ -1149,6 +1162,7 @@ dir = 4 }, /obj/structure/cable, +/obj/effect/landmark/weed_node, /turf/open/floor/mainship/mono, /area/magmoor/civilian/arrival/east) "aRq" = ( @@ -1383,6 +1397,19 @@ /obj/structure/fence, /turf/open/floor/plating/ground/concrete, /area/magmoor/medical/morgue) +"aYz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/green{ + dir = 1 + }, +/area/magmoor/civilian/rnr) "aYH" = ( /obj/machinery/power/apc/drained{ dir = 1 @@ -1741,6 +1768,7 @@ dir = 4 }, /obj/structure/cable, +/obj/effect/landmark/weed_node, /turf/open/floor/tile/arrival/corner{ dir = 4 }, @@ -2264,6 +2292,15 @@ dir = 6 }, /area/magmoor/compound/east) +"bCw" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/green{ + dir = 8 + }, +/area/magmoor/civilian/rnr) "bCK" = ( /obj/machinery/shower{ dir = 1 @@ -2443,6 +2480,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 10 }, +/obj/effect/landmark/weed_node, /turf/open/floor/mainship/mono, /area/magmoor/civilian/arrival/east) "bJd" = ( @@ -2673,11 +2711,17 @@ }, /area/magmoor/compound/southwest) "bOI" = ( -/obj/structure/nuke_disk_candidate, +/obj/structure/nuke_disk_candidate{ + set_associations = list("set2") + }, /turf/open/floor/mainship/purple{ dir = 9 }, /area/magmoor/research) +"bOU" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete/lines, +/area/magmoor/compound/southwest) "bPS" = ( /obj/structure/rock/basalt/alt, /turf/open/floor/plating/ground/mars/random/dirt, @@ -3334,6 +3378,12 @@ /obj/effect/ai_node, /turf/open/floor/plating/ground/concrete/lines, /area/magmoor/cave/north) +"cqe" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/mars/dirttosand{ + dir = 6 + }, +/area/magmoor/compound/southeast) "cqk" = ( /obj/effect/landmark/patrol_point/som/som_12, /turf/open/floor/plating/ground/mars/random/cave, @@ -3783,10 +3833,14 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/effect/ai_node, /obj/structure/cable, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/concrete/edge{ dir = 4 }, /area/magmoor/compound/south) +"cIl" = ( +/turf/closed/wall/r_wall, +/area/magmoor/civilian/arrival) "cIn" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 4 @@ -4179,6 +4233,7 @@ /turf/open/floor/wood, /area/magmoor/civilian/basket) "cXM" = ( +/obj/effect/landmark/weed_node, /turf/open/floor/mainship/red, /area/magmoor/civilian/arrival) "cYL" = ( @@ -4343,6 +4398,7 @@ dir = 4; on = 1 }, +/obj/effect/landmark/weed_node, /turf/open/floor/mainship/mono, /area/magmoor/civilian/cryostasis) "der" = ( @@ -4619,6 +4675,9 @@ /obj/machinery/computer/secure_data, /turf/open/floor/tile/red/redtaupe, /area/magmoor/security/lobby) +"doh" = ( +/turf/closed/wall/r_wall, +/area/magmoor/hydroponics/south) "dop" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -4825,6 +4884,7 @@ /obj/structure/bed/chair/sofa/corsat/verticaltop{ name = "bench" }, +/obj/effect/landmark/weed_node, /turf/open/floor/tile/white, /area/magmoor/civilian/pool) "duC" = ( @@ -5197,12 +5257,13 @@ }, /area/magmoor/mining) "dGv" = ( +/obj/effect/landmark/weed_node, /turf/open/floor/mainship/blue{ dir = 8 }, /area/magmoor/civilian/arrival/east) "dGw" = ( -/obj/structure/window/framed/colony, +/obj/structure/window/framed/colony/reinforced, /turf/open/floor/tile/dark2, /area/magmoor/hydroponics/north) "dGx" = ( @@ -5352,6 +5413,11 @@ /obj/item/storage/firstaid/adv, /turf/open/floor/mainship/sterile/side, /area/magmoor/medical/storage) +"dKY" = ( +/obj/effect/ai_node, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete/lines, +/area/magmoor/compound/east) "dLi" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ dir = 8; @@ -5376,6 +5442,9 @@ /obj/structure/rock/basalt/pile/alt, /turf/open/lavaland/basalt/dirt/autosmoothing, /area/magmoor/compound/north) +"dMi" = ( +/turf/closed/wall/r_wall, +/area/magmoor/civilian/basket) "dMQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -5423,6 +5492,10 @@ /obj/structure/cable, /turf/open/floor/plating/plating_catwalk, /area/magmoor/mining/storage) +"dOZ" = ( +/obj/effect/landmark/weed_node, +/turf/open/lavaland/basalt/dirt/autosmoothing, +/area/magmoor/compound/southwest) "dPd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -5541,6 +5614,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, +/obj/effect/landmark/weed_node, /turf/open/floor/mainship/green{ dir = 6 }, @@ -6135,6 +6209,10 @@ dir = 1 }, /area/magmoor/civilian/jani) +"etA" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/floor, +/area/magmoor/civilian/cryostasis) "etJ" = ( /obj/machinery/door/airlock/mainship/security{ dir = 8; @@ -6580,6 +6658,10 @@ "eFL" = ( /turf/open/floor/plating/ground/concrete/lines, /area/magmoor/compound/southeast) +"eFT" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete/edge, +/area/magmoor/compound/southwest) "eFU" = ( /obj/structure/window/framed/colony/reinforced, /obj/structure/platform{ @@ -6851,6 +6933,11 @@ dir = 8 }, /area/magmoor/medical/storage) +"eMg" = ( +/obj/structure/bed/chair/office/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/red, +/area/magmoor/security/arrivals/south) "eMj" = ( /obj/structure/cable, /turf/open/floor/mainship/mono, @@ -7285,7 +7372,9 @@ /turf/closed/wall/r_wall, /area/magmoor/research/containment) "feR" = ( -/obj/structure/nuke_disk_candidate, +/obj/structure/nuke_disk_candidate{ + set_associations = list("set1", "set3") + }, /turf/open/floor/carpet, /area/magmoor/command/office/main) "ffk" = ( @@ -7859,6 +7948,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 1 }, +/obj/effect/landmark/weed_node, /turf/open/floor/mainship/mono, /area/magmoor/civilian/arrival/east) "fCc" = ( @@ -8141,6 +8231,13 @@ dir = 8 }, /area/magmoor/cargo/processing/south) +"fKV" = ( +/obj/effect/turf_decal/sandedge{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/mars/random/dirt, +/area/magmoor/compound/southeast) "fLe" = ( /obj/effect/landmark/start/job/survivor, /obj/effect/ai_node, @@ -8202,6 +8299,14 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/green, /area/magmoor/civilian/rnr) +"fMs" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/magmoor/civilian/gambling) "fMt" = ( /turf/open/floor/wood, /area/magmoor/command/conference) @@ -8373,6 +8478,14 @@ dir = 8 }, /area/magmoor/engi/storage) +"fTY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/mono, +/area/magmoor/security/arrivals/south) "fUi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 9 @@ -8517,6 +8630,7 @@ }, /area/magmoor/hydroponics/north) "fZr" = ( +/obj/effect/landmark/weed_node, /turf/open/floor/tile/arrival/corner{ dir = 8 }, @@ -8643,6 +8757,9 @@ dir = 4 }, /area/magmoor/medical/treatment) +"gem" = ( +/turf/closed/wall/r_wall, +/area/magmoor/civilian/bar) "geH" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 5 @@ -8711,7 +8828,9 @@ }, /area/magmoor/civilian/clean/shower) "ght" = ( -/obj/structure/nuke_disk_candidate, +/obj/structure/nuke_disk_candidate{ + set_associations = list("set2", "set3") + }, /turf/open/floor/mainship/orange{ dir = 1 }, @@ -8824,6 +8943,12 @@ }, /turf/open/floor/mainship/sterile/dark, /area/magmoor/medical/treatment) +"glK" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 9 + }, +/area/magmoor/compound/east) "gmb" = ( /turf/open/floor/tile/blue/whitebluecorner, /area/magmoor/civilian/clean) @@ -9236,6 +9361,10 @@ }, /turf/open/floor/plating, /area/magmoor/compound/north) +"gBE" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/green, +/area/magmoor/civilian/rnr) "gBM" = ( /obj/structure/rack, /obj/machinery/light{ @@ -9761,6 +9890,13 @@ /obj/structure/cable, /turf/open/floor/prison/kitchen, /area/magmoor/civilian/cook) +"gXK" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/mono, +/area/magmoor/civilian/rnr) "gXO" = ( /obj/effect/landmark/patrol_point/som/som_23, /turf/open/floor/plating/ground/mars/random/cave, @@ -9831,6 +9967,12 @@ dir = 1 }, /area/magmoor/civilian/pool) +"hcp" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 8 + }, +/area/magmoor/compound/southeast) "hcR" = ( /obj/structure/barricade/wooden, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -10194,6 +10336,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/structure/cable, +/obj/effect/landmark/weed_node, /turf/open/floor/mainship/green/corner{ dir = 8 }, @@ -10290,6 +10433,10 @@ }, /turf/open/floor/wood, /area/magmoor/civilian/mosque) +"hvR" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/mono, +/area/magmoor/civilian/rnr) "hwn" = ( /obj/structure/table/mainship, /obj/item/tool/surgery/hemostat, @@ -10616,6 +10763,16 @@ dir = 10 }, /area/magmoor/engi/power) +"hKg" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/white, +/area/magmoor/civilian/pool) "hKM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -11018,6 +11175,10 @@ /obj/structure/largecrate/random/case, /turf/open/floor/mainship/floor, /area/magmoor/landing/two) +"iba" = ( +/obj/structure/window/framed/colony/reinforced, +/turf/open/floor/plating, +/area/magmoor/civilian/gambling) "ibg" = ( /obj/machinery/vending/coffee, /turf/open/floor/mainship/silver{ @@ -11062,6 +11223,14 @@ /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/mars/random/dirt, /area/magmoor/compound/west) +"ice" = ( +/obj/effect/landmark/weed_node, +/turf/open/lavaland/basalt/dirt/autosmoothing, +/area/magmoor/compound/east) +"icu" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/mars/dirttosand, +/area/magmoor/compound/southwest) "icI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -11105,6 +11274,10 @@ dir = 1 }, /area/magmoor/landing/two) +"idQ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/mars/random/cave, +/area/magmoor/cave/southwest) "iec" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -11414,6 +11587,12 @@ dir = 8 }, /area/magmoor/compound) +"ipl" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/neutral{ + dir = 8 + }, +/area/magmoor/civilian/pool) "ipm" = ( /turf/open/floor/plating/ground/concrete, /area/magmoor/compound/southeast) @@ -12023,6 +12202,14 @@ "iOa" = ( /turf/open/liquid/water/river, /area/magmoor/civilian/pool) +"iOc" = ( +/obj/structure/flora/ausbushes/brflowers, +/obj/structure/platform/metalplatform{ + dir = 7 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/grass, +/area/magmoor/civilian/rnr) "iOh" = ( /turf/open/floor/mainship/floor, /area/magmoor/hydroponics/north) @@ -12414,6 +12601,7 @@ dir = 1 }, /obj/structure/cable, +/obj/effect/landmark/weed_node, /turf/open/floor/mainship/floor, /area/magmoor/civilian/cryostasis) "jdR" = ( @@ -12475,6 +12663,12 @@ dir = 8 }, /area/magmoor/cargo/storage/secure/south) +"jfx" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 4 + }, +/area/magmoor/compound/east) "jfI" = ( /obj/machinery/door/airlock/mainship/security{ dir = 1; @@ -12634,6 +12828,10 @@ dir = 4 }, /area/magmoor/mining) +"jkw" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete/lines, +/area/magmoor/compound/southeast) "jkz" = ( /obj/effect/attach_point/weapon/dropship1, /turf/open/floor/plating, @@ -12687,11 +12885,17 @@ /turf/open/floor/carpet, /area/magmoor/command/conference) "jmq" = ( -/obj/structure/bed/chair/wheelchair, +/obj/vehicle/ridden/wheelchair, /turf/open/floor/mainship/sterile/side{ dir = 4 }, /area/magmoor/medical/treatment) +"jmw" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete/edge{ + dir = 4 + }, +/area/magmoor/compound/east) "jmX" = ( /obj/effect/ai_node, /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ @@ -12938,6 +13142,7 @@ "jtI" = ( /obj/structure/bed/chair/wood/normal, /obj/structure/closet/walllocker/hydrant/extinguisher, +/obj/effect/landmark/weed_node, /turf/open/floor/tile/neutral{ dir = 1 }, @@ -12957,6 +13162,17 @@ }, /turf/open/floor/plating/ground/concrete/lines, /area/magmoor/compound/east) +"jux" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/neutral, +/area/magmoor/civilian/pool) +"jvl" = ( +/obj/structure/window/framed/colony/reinforced, +/turf/open/floor/plating, +/area/magmoor/civilian/bar) "jvK" = ( /obj/machinery/light{ dir = 4 @@ -13609,6 +13825,7 @@ "jRN" = ( /obj/structure/flora/pottedplant/ten, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/effect/landmark/weed_node, /turf/open/floor/mainship/mono, /area/magmoor/civilian/arrival/east) "jRU" = ( @@ -13654,6 +13871,9 @@ /obj/effect/decal/cleanable/blood, /turf/open/floor/wood, /area/magmoor/civilian/bar) +"jTF" = ( +/turf/closed/wall/r_wall, +/area/magmoor/civilian/rnr) "jTN" = ( /turf/open/floor/mainship/blue/corner{ dir = 4 @@ -14073,6 +14293,14 @@ }, /turf/open/floor/mainship/floor, /area/magmoor/landing/two) +"kjk" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/mars/random/sand, +/area/magmoor/compound/southwest) +"kjA" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/mars/dirttosand, +/area/magmoor/compound/east) "kke" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 5 @@ -14717,6 +14945,12 @@ }, /turf/open/floor/plating, /area/magmoor/engi/atmos) +"kGL" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/mars/dirttosand{ + dir = 1 + }, +/area/magmoor/compound/southwest) "kGP" = ( /obj/effect/ai_node, /turf/open/floor/plating/ground/concrete/lines{ @@ -14724,6 +14958,7 @@ }, /area/magmoor/compound/east) "kHq" = ( +/obj/effect/landmark/weed_node, /turf/open/floor/mainship/silver{ dir = 8 }, @@ -14754,6 +14989,9 @@ dir = 4 }, /area/magmoor/landing) +"kJp" = ( +/turf/closed/wall/r_wall, +/area/magmoor/hydroponics/north) "kJy" = ( /obj/effect/ai_node, /obj/structure/cable, @@ -15147,6 +15385,7 @@ /turf/open/floor/mainship/mono, /area/magmoor/civilian/arrival/east) "kWW" = ( +/obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/concrete/lines{ dir = 5 }, @@ -15191,6 +15430,12 @@ }, /turf/open/floor/freezer, /area/magmoor/civilian/clean/toilet) +"kYE" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/mars/dirttosand{ + dir = 10 + }, +/area/magmoor/compound/southwest) "kZC" = ( /turf/open/floor/mainship/black{ dir = 10 @@ -15486,6 +15731,13 @@ }, /turf/open/floor/mainship/floor, /area/magmoor/hydroponics/north) +"lkg" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/magmoor/civilian/gambling) "lkh" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 10 @@ -15715,6 +15967,12 @@ dir = 4 }, /area/magmoor/engi/thermal) +"lto" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 4 + }, +/area/magmoor/compound/southwest) "ltu" = ( /obj/effect/ai_node, /turf/open/floor/plating/ground/mars/random/dirt, @@ -16027,7 +16285,9 @@ /turf/open/floor/plating/ground/concrete, /area/magmoor/compound) "lGP" = ( -/obj/structure/nuke_disk_candidate, +/obj/structure/nuke_disk_candidate{ + set_associations = list("set1", "set3") + }, /turf/open/floor/mainship/cargo, /area/magmoor/mining/storage) "lGS" = ( @@ -16214,6 +16474,11 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/mainship/cargo, /area/magmoor/engi/storage) +"lPo" = ( +/obj/effect/ai_node, +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/mono, +/area/magmoor/civilian/arrival) "lPH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -16798,6 +17063,12 @@ dir = 1 }, /area/magmoor/compound/north) +"mkw" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/green{ + dir = 4 + }, +/area/magmoor/civilian/rnr) "mkE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -16836,6 +17107,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/effect/landmark/weed_node, /turf/open/floor/wood, /area/magmoor/civilian/gambling) "mlB" = ( @@ -16970,6 +17242,7 @@ /obj/machinery/light{ dir = 4 }, +/obj/effect/landmark/weed_node, /turf/open/floor/mainship/mono, /area/magmoor/civilian/arrival/east) "msd" = ( @@ -17107,16 +17380,6 @@ dir = 1 }, /area/magmoor/civilian/arrival/east) -"mAx" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/wood, -/area/magmoor/civilian/bar) "mAB" = ( /obj/structure/bed/chair/sofa/corner{ dir = 1 @@ -17465,6 +17728,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/structure/cable, +/obj/effect/landmark/weed_node, /turf/open/floor/mainship/green{ dir = 8 }, @@ -17761,7 +18025,7 @@ }, /area/magmoor/medical/treatment) "mXY" = ( -/obj/structure/bed/chair/wheelchair, +/obj/vehicle/ridden/wheelchair, /turf/open/floor/mainship/sterile/side{ dir = 6 }, @@ -17884,6 +18148,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, +/obj/effect/landmark/weed_node, /turf/open/floor/mainship/floor, /area/magmoor/civilian/arrival/east) "ncw" = ( @@ -18263,6 +18528,10 @@ }, /turf/open/floor/mainship/mono, /area/magmoor/civilian/basket) +"nsr" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/silver, +/area/magmoor/civilian/arrival/east) "nsA" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -18288,6 +18557,11 @@ /obj/effect/landmark/weed_node, /turf/open/floor/mainship/mono, /area/magmoor/medical/morgue) +"nsK" = ( +/obj/effect/ai_node, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/mars/random/cave, +/area/magmoor/cave/southwest) "nsX" = ( /obj/structure/cable, /obj/structure/stairs/seamless{ @@ -18354,6 +18628,10 @@ /obj/structure/cable, /turf/open/floor/tile/white, /area/magmoor/civilian/pool) +"nvo" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete, +/area/magmoor/compound/southeast) "nvu" = ( /obj/structure/table/reinforced, /turf/open/floor/plating, @@ -18437,6 +18715,10 @@ /obj/structure/window/framed/colony/reinforced, /turf/open/floor/plating, /area/magmoor/engi/power) +"nBa" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/mono, +/area/magmoor/civilian/arrival/east) "nBm" = ( /obj/structure/bed/chair{ dir = 8 @@ -18613,7 +18895,7 @@ /turf/open/floor/plating/ground/mars/random/cave, /area/magmoor/volcano) "nHf" = ( -/obj/structure/window_frame/colony, +/obj/structure/window_frame/colony/reinforced, /obj/item/shard, /turf/open/floor/plating, /area/magmoor/civilian/basket) @@ -18868,6 +19150,10 @@ /obj/machinery/door/poddoor/timed_late/containment/landing_zone/lz2, /turf/closed/mineral/smooth, /area/magmoor/cave/rock) +"nUm" = ( +/obj/structure/window/framed/colony/reinforced, +/turf/open/floor/plating, +/area/magmoor/civilian/arrival) "nUp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -19221,7 +19507,7 @@ /turf/open/floor/mainship/mono, /area/magmoor/engi) "oin" = ( -/obj/structure/window/framed/colony, +/obj/structure/window/framed/colony/reinforced, /turf/open/floor/plating, /area/magmoor/hydroponics/south) "oiq" = ( @@ -19386,6 +19672,11 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/tile/white, /area/magmoor/civilian/pool) +"opd" = ( +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/mono, +/area/magmoor/civilian/rnr) "oqh" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -20134,7 +20425,7 @@ /turf/open/floor/tile/dark2, /area/magmoor/civilian/mosque) "oNd" = ( -/obj/structure/window_frame/colony, +/obj/structure/window_frame/colony/reinforced, /obj/item/shard, /turf/open/floor/plating, /area/magmoor/civilian/bar) @@ -20391,7 +20682,9 @@ /obj/machinery/light{ dir = 4 }, -/obj/structure/nuke_disk_candidate, +/obj/structure/nuke_disk_candidate{ + set_associations = list("set1", "set2") + }, /turf/open/floor/tile/blue/whiteblue{ dir = 4 }, @@ -20730,7 +21023,7 @@ /turf/open/floor/plating/plating_catwalk, /area/magmoor/engi/power) "piK" = ( -/obj/structure/window_frame/colony, +/obj/structure/window_frame/colony/reinforced, /obj/item/shard, /turf/open/floor/plating, /area/magmoor/civilian/rnr) @@ -23239,6 +23532,10 @@ }, /turf/open/floor/freezer, /area/magmoor/civilian/clean/toilet) +"qZC" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/magmoor/civilian/gambling) "rah" = ( /obj/effect/ai_node, /turf/open/floor/plating/ground/mars/random/dirt, @@ -23255,6 +23552,11 @@ /obj/structure/cable, /turf/open/floor/mainship/floor, /area/magmoor/research/containment) +"rax" = ( +/obj/structure/window_frame/colony/reinforced, +/obj/item/shard, +/turf/open/floor/plating, +/area/magmoor/civilian/gambling) "raC" = ( /obj/structure/closet/crate/trashcart, /obj/machinery/power/apc/drained, @@ -24186,6 +24488,10 @@ /obj/effect/landmark/corpsespawner/colonist, /turf/open/floor/mainship/mono, /area/magmoor/civilian/arrival/east) +"rMk" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete, +/area/magmoor/medical/morgue) "rMr" = ( /turf/open/floor/plating/ground/concrete/lines{ dir = 10 @@ -24206,6 +24512,10 @@ }, /turf/open/floor/plating, /area/magmoor/compound) +"rMX" = ( +/obj/structure/window/framed/colony/reinforced, +/turf/open/floor/plating, +/area/magmoor/civilian/rnr) "rNx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -24391,6 +24701,12 @@ }, /turf/open/floor/mainship/mono, /area/magmoor/command/lobby/east) +"rUw" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 1 + }, +/area/magmoor/compound/southwest) "rUC" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4 @@ -24479,6 +24795,13 @@ }, /turf/open/floor/plating, /area/magmoor/compound) +"rXy" = ( +/obj/effect/turf_decal/sandedge/corner2{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/mars/random/dirt, +/area/magmoor/compound/east) "rXL" = ( /turf/open/floor/mainship/black{ dir = 8 @@ -24789,6 +25112,10 @@ /obj/effect/ai_node, /turf/open/floor/plating/ground/concrete/lines, /area/magmoor/compound) +"skV" = ( +/obj/effect/landmark/weed_node, +/turf/open/lavaland/basalt/dirt/autosmoothing, +/area/magmoor/compound/southeast) "sle" = ( /obj/structure/bed/chair{ dir = 1 @@ -25445,6 +25772,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, +/obj/effect/landmark/weed_node, /turf/open/floor/mainship/mono, /area/magmoor/civilian/arrival/east) "sIM" = ( @@ -25477,6 +25805,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, +/obj/effect/landmark/weed_node, /turf/open/floor/mainship/mono, /area/magmoor/civilian/arrival/east) "sKS" = ( @@ -25605,6 +25934,11 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /turf/open/floor/mainship/mono, /area/magmoor/engi/atmos) +"sQv" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/floor, +/area/magmoor/civilian/cryostasis) "sQB" = ( /obj/machinery/prop/r_n_d/server, /turf/open/floor/bcircuit/off, @@ -25632,6 +25966,16 @@ "sRa" = ( /turf/closed/wall, /area/magmoor/medical/morgue) +"sRq" = ( +/obj/effect/turf_decal/tile/pink{ + dir = 4 + }, +/obj/effect/turf_decal/tile/pink{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/white, +/area/magmoor/civilian/pool) "sRD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -25855,6 +26199,9 @@ dir = 1 }, /area/magmoor/mining) +"sZv" = ( +/turf/closed/wall/r_wall, +/area/magmoor/civilian/gambling) "sZB" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 9 @@ -26138,6 +26485,19 @@ }, /turf/open/lavaland/basalt/dirt/autosmoothing, /area/magmoor/compound/north) +"tkt" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/green{ + dir = 1 + }, +/area/magmoor/civilian/rnr) "tky" = ( /turf/open/floor/plating/ground/mars/dirttosand, /area/magmoor/compound/west) @@ -27628,6 +27988,12 @@ /obj/effect/ai_node, /turf/open/floor/plating/ground/mars/random/sand, /area/magmoor/compound/north) +"uly" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/mars/dirttosand{ + dir = 4 + }, +/area/magmoor/compound/southwest) "ulA" = ( /obj/structure/closet/crate/internals, /turf/open/floor/mainship/floor, @@ -27637,6 +28003,12 @@ /obj/item/shard, /turf/open/floor/plating, /area/magmoor/mining) +"ulN" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 8 + }, +/area/magmoor/compound/southwest) "umc" = ( /turf/open/floor/freezer, /area/magmoor/civilian/cook) @@ -28794,6 +29166,13 @@ /obj/structure/cable, /turf/open/floor/freezer, /area/magmoor/cargo/freezer) +"vaa" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete/lines{ + dir = 1 + }, +/area/magmoor/compound/southwest) "vaD" = ( /turf/closed/wall/r_wall, /area/magmoor/medical/storage) @@ -29047,7 +29426,7 @@ }, /area/magmoor/compound/north) "vpI" = ( -/obj/structure/window/framed/colony, +/obj/structure/window/framed/colony/reinforced, /turf/open/floor/plating, /area/magmoor/civilian/cryostasis) "vqd" = ( @@ -29481,6 +29860,12 @@ /obj/effect/ai_node, /turf/open/floor/plating/ground/mars/random/dirt, /area/magmoor/compound) +"vIb" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/concrete/edge{ + dir = 1 + }, +/area/magmoor/compound/southeast) "vIc" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -29580,6 +29965,11 @@ dir = 10 }, /area/magmoor/compound) +"vMp" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/mars/random/sand, +/area/magmoor/compound/east) "vMK" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -30209,7 +30599,7 @@ /turf/open/floor/wood, /area/magmoor/medical/lobby) "wgR" = ( -/obj/structure/window_frame/colony, +/obj/structure/window_frame/colony/reinforced, /obj/item/shard, /turf/open/floor/plating, /area/magmoor/hydroponics/south) @@ -30663,7 +31053,7 @@ /turf/open/floor/mainship/mono, /area/magmoor/cargo/processing/south) "wAw" = ( -/obj/structure/window/framed/colony, +/obj/structure/window/framed/colony/reinforced, /turf/open/floor/plating, /area/magmoor/civilian/basket) "wAA" = ( @@ -30773,6 +31163,7 @@ /area/magmoor/civilian/pool) "wDs" = ( /obj/effect/ai_node, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/concrete, /area/magmoor/compound/southwest) "wDR" = ( @@ -30940,6 +31331,22 @@ /obj/structure/closet/crate/trashcart, /turf/open/floor/plating/ground/concrete, /area/magmoor/civilian/jani) +"wIX" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/white, +/area/magmoor/civilian/pool) "wJj" = ( /obj/structure/bed/chair, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -30958,6 +31365,9 @@ /obj/structure/lattice, /turf/open/floor/plating/ground/mars/random/dirt, /area/magmoor/compound/south) +"wJw" = ( +/turf/closed/wall/r_wall, +/area/magmoor/civilian/cook) "wJz" = ( /obj/effect/turf_decal/warning_stripes/thin, /obj/effect/landmark/weed_node, @@ -31017,6 +31427,9 @@ /obj/structure/cable, /turf/open/floor/mainship/floor, /area/magmoor/research) +"wMk" = ( +/turf/closed/wall/r_wall, +/area/magmoor/civilian/cryostasis) "wMW" = ( /obj/machinery/door/airlock/mainship/command/free_access{ name = "\improper Colony Administration Office" @@ -31339,6 +31752,12 @@ "wXM" = ( /turf/open/lavaland/basalt/dirt/autosmoothing, /area/magmoor/compound/southwest) +"wXO" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/mars/dirttosand{ + dir = 1 + }, +/area/magmoor/compound/southeast) "wXX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -31571,6 +31990,12 @@ "xep" = ( /turf/open/floor/tile/bar, /area/magmoor/civilian/clean/shower) +"xer" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/mars/dirttosand{ + dir = 4 + }, +/area/magmoor/compound/southeast) "xeB" = ( /obj/structure/window/framed/colony, /turf/open/floor/plating, @@ -31742,7 +32167,7 @@ /turf/open/liquid/lava/autosmoothing, /area/magmoor/compound/south) "xkp" = ( -/obj/structure/bed/chair/wheelchair, +/obj/vehicle/ridden/wheelchair, /turf/open/floor/mainship/sterile/side, /area/magmoor/medical/lobby) "xku" = ( @@ -32349,6 +32774,11 @@ }, /turf/open/floor/mainship/blue, /area/magmoor/civilian/arrival/east) +"xBS" = ( +/obj/structure/rack, +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/silver/full, +/area/magmoor/civilian/arrival/east) "xBX" = ( /obj/machinery/door/airlock/multi_tile/mainship/generic/rnr{ name = "\improper Basketball Arena" @@ -32624,6 +33054,12 @@ dir = 1 }, /area/magmoor/compound/northwest) +"xMA" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/mars/dirttosand{ + dir = 5 + }, +/area/magmoor/compound/east) "xMO" = ( /turf/open/liquid/lava/autosmoothing, /area/magmoor/compound/southwest) @@ -33053,6 +33489,14 @@ }, /turf/open/floor/plating, /area/magmoor/cargo/processing/south) +"ybn" = ( +/obj/structure/flora/ausbushes/grassybush, +/obj/structure/platform/metalplatform{ + dir = 11 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/grass, +/area/magmoor/civilian/rnr) "ybx" = ( /obj/structure/window/framed/colony/reinforced, /turf/open/floor/plating, @@ -33292,6 +33736,12 @@ /obj/structure/cable, /turf/open/floor/mainship/mono, /area/magmoor/mining) +"ykt" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/silver{ + dir = 8 + }, +/area/magmoor/civilian/arrival) "ykC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -36569,7 +37019,7 @@ dwS dwS dwS dwS -dwS +idQ dwS dwS dwS @@ -36807,12 +37257,12 @@ dwS dwS dwS dwS +idQ dwS dwS dwS dwS -dwS -lAc +nsK rxl rxl rxl @@ -37031,7 +37481,7 @@ rxl dwS dwS dwS -dwS +idQ dwS dwS dwS @@ -37492,7 +37942,7 @@ rxl rxl rxl dwS -dwS +idQ dwS dwS dwS @@ -37729,7 +38179,7 @@ dwS dwS dwS dwS -dwS +idQ dwS dwS dwS @@ -37743,11 +38193,11 @@ rxl rxl rxl rxl +idQ dwS dwS dwS -dwS -dwS +idQ dwS dwS rxl @@ -37967,7 +38417,7 @@ dwS dwS lAc dwS -dwS +idQ dwS dwS rxl @@ -38402,7 +38852,7 @@ xMO xMO wXM rgm -rgm +xmU rxl rxl rxl @@ -38429,7 +38879,7 @@ dwS dwS dwS dwS -dwS +idQ dwS dwS rxl @@ -38448,7 +38898,7 @@ dwS dwS dwS dwS -dwS +idQ dwS rxl rxl @@ -38657,7 +39107,7 @@ rxl dwS dwS dwS -dwS +idQ dwS dwS dwS @@ -38676,7 +39126,7 @@ dwS dwS dwS dwS -dwS +idQ dwS dwS dwS @@ -38870,7 +39320,7 @@ wXM rgm rgm rgm -rgm +xmU rgm rxl rxl @@ -38899,7 +39349,7 @@ dwS dwS lAc dwS -dwS +idQ dwS dwS dwS @@ -39119,7 +39569,7 @@ rxl rxl rxl rxl -dwS +idQ dwS dwS dwS @@ -39137,7 +39587,7 @@ dwS dwS dwS dwS -dwS +idQ dwS dwS rxl @@ -39340,7 +39790,7 @@ rgm rgm rgm rgm -rgm +xmU rxl rxl rxl @@ -39377,7 +39827,7 @@ rxl rxl rxl rxl -dwS +idQ dwS dwS dwS @@ -39614,7 +40064,7 @@ rxl dwS dwS dwS -dwS +idQ dwS dwS dwS @@ -39762,11 +40212,11 @@ dze dze dRz vzO -dff +kJp auq tva prG -dff +kJp ybU ybU eau @@ -39994,13 +40444,13 @@ pDq dze tky vzO -dff -dff -dff +kJp +kJp +kJp qVx -dff -dff -dff +kJp +kJp +kJp ybU vzO ybU @@ -40034,6 +40484,7 @@ wXM rgm rgm rgm +xmU rgm rgm rgm @@ -40042,13 +40493,12 @@ rgm rgm rgm rgm -rgm -rgm +xmU ltu rgm lQY vcB -dwS +idQ lAc rxl rxl @@ -40084,7 +40534,7 @@ dwS dwS dwS dwS -dwS +idQ dwS dwS rxl @@ -40227,13 +40677,13 @@ ibO pDq tky ybU -dff +kJp uVx kDI uQr lOM gaP -dff +kJp ybU ybU ybU @@ -40264,15 +40714,15 @@ xMO xMO wXM wXM +uly lWM -lWM -rgm rgm rgm rgm rgm rgm rgm +xmU rgm rgm rgm @@ -40460,13 +40910,13 @@ dze dze tky ybU -dff +kJp fVD hoy kiC iOh uvK -dff +kJp ybU ygU ybU @@ -40693,27 +41143,27 @@ dze dze caN vzO -dff +kJp ndK hpj pCR iOh lnZ -dff +kJp ybU ybU ybU -fme -fme -fme -fme -fme -fme -fme -fme -fme -fme -fme +doh +doh +doh +doh +doh +doh +doh +doh +doh +doh +doh ybU fkP dRz @@ -40724,17 +41174,18 @@ ybU ybU ygU ybU -fBc -fBc +wMk +wMk vpI -fBc +wMk vpI -fBc +wMk vpI -fBc -fBc +wMk +wMk eCB rgm +xmU rgm rgm rgm @@ -40745,8 +41196,7 @@ rgm rgm rgm rgm -rgm -rgm +xmU rgm rgm rgm @@ -40926,17 +41376,17 @@ dze dze tky ybU -dff +kJp fVD iOh cpe iOh quD -dff +kJp ybU vzO ybU -fme +doh cTq xTu xTu @@ -40946,18 +41396,18 @@ iui cZk rDU fGJ -bVz -bVz -aWz -aWz -bVz +jTF +jTF +rMX +rMX +jTF lCK ayv -bVz -aWz +jTF +rMX piK -bVz -bVz +jTF +jTF kTv kTv kTv @@ -40965,7 +41415,7 @@ kTv kTv kTv kTv -fBc +wMk xlX rgm eak @@ -40984,7 +41434,7 @@ rgm rgm rgm rgm -rgm +xmU rgm rxl rxl @@ -41015,12 +41465,12 @@ rxl rxl dwS dwS -dwS +idQ dwS lAc dwS dwS -dwS +idQ dwS rxl rxl @@ -41159,13 +41609,13 @@ pDq dze tky ybU -dff +kJp tNC fZp cpe enm gZR -dff +kJp ybU ygU ybU @@ -41190,7 +41640,7 @@ lCK tPJ lCK amd -bVz +jTF vji vji vji @@ -41198,17 +41648,17 @@ vji vji vji vji -fBc +wMk mQq eCB wSW hxc -sgM +bOU hxc sbg wSW rgm -rgm +xmU rgm rgm rgm @@ -41398,11 +41848,11 @@ qlq lRr eXn kDI -dff +kJp ybU ybU ybU -fme +doh cOn xTu elf @@ -41415,7 +41865,7 @@ xQq bVz lCK lCK -ebH +ybn lCK fgC oOH @@ -41423,15 +41873,15 @@ lCK ebH lCK uBC -bVz -fBc +jTF +wMk vpI -fBc +wMk vpI -fBc +wMk vpI -fBc -fBc +wMk +wMk mQq eCB wSW @@ -41446,7 +41896,7 @@ rgm rgm rgm rgm -rgm +xmU rgm rgm rgm @@ -41625,17 +42075,17 @@ dze dze tky ybU -dff +kJp fVD iOh pqI iOh uvK -dff -dff +kJp +kJp wwE -dff -fme +kJp +doh bfP xTu xTu @@ -41653,7 +42103,7 @@ lCK fgC oOH lCK -bpb +iOc lCK lCK bVz @@ -41664,7 +42114,7 @@ xoI uyh bbw odV -fBc +wMk mQq eCB wSW @@ -41858,7 +42308,7 @@ dze pDq caN ybU -dff +kJp fVD iOh leF @@ -41897,15 +42347,15 @@ nBm nBm dep tSL -fBc +wMk mQq -eCB +kGL wSW hxc hon cnx hon -pMh +ulN pMh pMh pMh @@ -42149,7 +42599,7 @@ rgm rgm rgm rgm -rgm +xmU kCQ iLH bss @@ -42324,7 +42774,7 @@ dze dze tky ybU -dff +kJp llg cbr csb @@ -42359,7 +42809,7 @@ lCK vlF vlF aAZ -sWI +sQv qhp vlF vlF @@ -42368,7 +42818,7 @@ avf eCB wSW hxc -gdG +eFT dXq gdG naZ @@ -42557,17 +43007,17 @@ dze dze tky ybU -dff -dff -dff -dff -dff -dff -dff -dff +kJp +kJp +kJp +kJp +kJp +kJp +kJp +kJp tEv -dff -fme +kJp +doh aXZ xTu aXZ @@ -42579,7 +43029,7 @@ xTu qDY bVz lCK -lCK +hvR gsA lCK ovG @@ -42596,7 +43046,7 @@ cul srz oEb ejQ -fBc +wMk mQq eyI wSW @@ -42611,7 +43061,7 @@ hxc sgM jyA rgm -rgm +xmU rgm rgm rgm @@ -42800,7 +43250,7 @@ ybU ybU ybU ygU -fme +doh ioE xTu ioE @@ -42819,7 +43269,7 @@ ovG oOH lCK lCK -lCK +hvR lCK aWz tyH @@ -42829,7 +43279,7 @@ tAW tAW efo sWI -fBc +wMk mQq eCB wSW @@ -43048,7 +43498,7 @@ sPr lCK ebH lCK -ovG +tkt oOH lCK ebH @@ -43062,8 +43512,8 @@ pwX tyH pwX jdI -fBc -mQq +wMk +kjk eCB wSW hxc @@ -43072,7 +43522,7 @@ hxc sgM wSW rgm -kVV +icu hxc sgM mQq @@ -43266,7 +43716,7 @@ jaT ibO dRz ybU -fme +doh wbx xTu ioE @@ -43289,13 +43739,13 @@ lCK lCK aWz tyH +etA tyH tyH tyH tyH tyH -tyH -fBc +wMk mQq eCB eak @@ -43314,7 +43764,7 @@ rgm rgm rgm rgm -rgm +xmU xJL rxl bss @@ -43498,8 +43948,8 @@ tWr dze tky ybU -eXi -eXi +dMi +dMi eXi eXi eXi @@ -43528,12 +43978,12 @@ xZj pwX fjI pwX -fBc +wMk mQq eCB rgm rgm -rgm +xmU rgm rgm rgm @@ -43731,7 +44181,7 @@ ybU dze tky ybU -eXi +dMi nrb cao crA @@ -43743,7 +44193,7 @@ gbk eXi eXi bVz -lCK +hvR lCK lCK lCK @@ -43752,7 +44202,7 @@ ezm lCK lCK lCK -amd +opd bVz fBc fBc @@ -43761,8 +44211,8 @@ fBc fBc fBc fBc -fBc -fBc +wMk +wMk eCB rgm rgm @@ -43775,7 +44225,7 @@ bOC hxc sgM mQq -mQq +kjk mQq mQq mQq @@ -43981,7 +44431,7 @@ lCK jxj nHJ dio -oOH +gBE sOy nTk lCK @@ -43995,7 +44445,7 @@ roE uXF roE anq -eNf +sZv xlX rgm rgm @@ -44227,17 +44677,17 @@ wuH xRt saX kfI -roE -eNf +qZC +iba mQq -eCB +kGL rgm rgm rgm rgm rgm kVV -mQq +kjk ojK mcS mcS @@ -44430,7 +44880,7 @@ mhS fkP dze alo -eXi +dMi euS nov lin @@ -44461,12 +44911,12 @@ roE kfI pLX jeO -eNf +iba mQq eCB rgm rgm -rgm +xmU rgm rgm kVV @@ -44477,7 +44927,7 @@ naZ naZ naZ naZ -naZ +lto naZ fMN kvj @@ -44663,7 +45113,7 @@ tDP ybU bGe caN -eXi +dMi tXn dVo dVo @@ -44677,7 +45127,7 @@ xBX ruF klI aAb -aAb +bCw ffk dCy ewW @@ -44694,7 +45144,7 @@ xRt kfI kfI roE -eNf +rax avf eCB rgm @@ -44896,7 +45346,7 @@ mhS ybU bGe tky -eXi +dMi cao dVo dVo @@ -44907,7 +45357,7 @@ eNz wCU wIH wCU -lCK +hvR hyz xOp xOp @@ -44916,7 +45366,7 @@ qHg beH ciK xOp -xOp +mkw uqV lCK ssf @@ -44927,7 +45377,7 @@ mSO agS agS roE -eNf +sZv jyA rgm rgm @@ -44939,7 +45389,7 @@ kVV mQq hxc hon -pMh +ulN pMh pMh pMh @@ -45160,7 +45610,7 @@ tbP gGK uQH roE -eNf +sZv xlX rgm rgm @@ -45377,31 +45827,31 @@ lCK lCK eYR azG -xRq +xOp dio oOH -xOp +xRq sfx xXN lCK lCK sac roE -uXF +aPR roE uXF roE -ucS +fMs roE -eNf +sZv mQq eCB +xmU rgm rgm rgm rgm -rgm -kVV +icu mQq tLs gdG @@ -45595,7 +46045,7 @@ tDP ybU bGe tky -eXi +dMi cao vVM lBX @@ -45626,7 +46076,7 @@ kfI roE ucS roE -eNf +iba mQq eCB rgm @@ -45643,7 +46093,7 @@ mQq mQq mQq mQq -mQq +kjk hxc kvj nio @@ -45828,7 +46278,7 @@ qNj ybU fkP dRz -eXi +dMi tXn dVo dVo @@ -45859,7 +46309,7 @@ bGT jeO ucS roE -eNf +iba mQq eCB rgm @@ -46061,7 +46511,7 @@ tDP ybU ybU ybU -eXi +dMi lsp tvO ovw @@ -46073,7 +46523,7 @@ nrP wIH nSr bVz -aRq +gXK lCK lCK lCK @@ -46081,23 +46531,23 @@ ceu oOH lCK lCK -lCK +hvR lCK bVz tmz roE -agS +lkg agS roE roE ucS roE -eNf +sZv mQq eCB rgm rgm -rgm +xmU rgm rgm rgm @@ -46105,7 +46555,7 @@ obs tLs sgM mQq -eCB +kGL rgm rgm kVV @@ -46309,7 +46759,7 @@ bVz lCK lCK ebH -lCK +hvR ceu oOH lCK @@ -46324,8 +46774,8 @@ qxc qxc roE csn -roE -eNf +qZC +sZv mQq eCB rgm @@ -46334,7 +46784,7 @@ rgm rgm rgm rgm -kVV +icu tLs sgM mQq @@ -46558,10 +47008,10 @@ tWO mSO gGn roE -eNf +sZv mQq eCB -rgm +xmU rgm rgm rgm @@ -46760,7 +47210,7 @@ kkl vto cJW hIT -eXi +dMi nrb cao crA @@ -46791,7 +47241,7 @@ qxc roE jrE euH -eNf +sZv mQq eCB rgm @@ -46808,7 +47258,7 @@ eCB rgm rgm kVV -mQq +kjk hxc kvj rxl @@ -46993,18 +47443,18 @@ cJW aje hIT hIT -eXi -eXi +dMi +dMi wAw -eXi -eXi -eXi +dMi +dMi +dMi wAw -eXi -eXi +dMi +dMi pbS -eXi -bVz +dMi +jTF liW lCK hCY @@ -47020,11 +47470,11 @@ wkW uhj rew jNn -qxc -eNf -eNf -eNf -eNf +wJw +sZv +sZv +sZv +sZv jyA rgm rgm @@ -47237,15 +47687,15 @@ aje fIr wph xmr -bVz -lCK +jTF lCK +hvR ebH lCK ceu oOH lCK -ebH +ybn lCK lCK bVz @@ -47253,8 +47703,8 @@ qxc gio kpz pRU -qxc -rgm +wJw +xmU lWM rgm rgm @@ -47262,7 +47712,7 @@ rgm rgm rgm rgm -rgm +xmU rgm ltu kVV @@ -47270,7 +47720,7 @@ mQq iaF sgM mQq -eCB +kGL rgm rgm kVV @@ -47470,12 +47920,12 @@ cax tmQ wph xmr -bVz +jTF kyy dJw bpb lCK -ceu +aYz ovJ lCK bpb @@ -47486,7 +47936,7 @@ gio gio tYY gio -qxc +wJw kVV pLo eCB @@ -47498,7 +47948,7 @@ rgm rgm rgm rgm -kVV +icu mQq tLs sgM @@ -47703,7 +48153,7 @@ hzB yhx kyT nuY -bVz +jTF aRq dJw dJw @@ -47719,11 +48169,11 @@ sci jIy gio ujS -qxc +wJw rgm rMC rgm -rgm +xmU rgm rgm rgm @@ -47936,7 +48386,7 @@ wyb wyb wyb kIw -ohT +gem ohT woH ohT @@ -47952,8 +48402,8 @@ qxc qxc qxc oJD -qxc -qxc +wJw +wJw rgm rgm rgm @@ -47974,7 +48424,7 @@ rgm rgm kVV mQq -hxc +rUw tpI ibo ibo @@ -48169,7 +48619,7 @@ rKd rKd ghU hIT -ohT +gem mOs ehQ vuR @@ -48186,7 +48636,7 @@ rMh eVt leY slj -qxc +wJw wXM wXM wXM @@ -48194,7 +48644,7 @@ wXM wXM rgm rgm -rgm +xmU rgm rgm oTk @@ -48222,7 +48672,7 @@ dyu naZ naZ naZ -naZ +lto qNu mQq eCB @@ -48402,12 +48852,12 @@ hiG hiG bgh ghU -woH +jvl oAR ehQ mlP ehQ -mAx +cnO ehQ ehQ oMm @@ -48419,7 +48869,7 @@ bzq cJq bTc ckk -qxc +wJw xMO xMO xMO @@ -48431,12 +48881,12 @@ wXM wXM rgm rgm -obs +kYE tLs sgM eCB rgm -rgm +xmU rgm rgm obs @@ -48450,7 +48900,7 @@ rMC rMC rMC obs -mQq +kjk mQq mQq mQq @@ -48635,12 +49085,12 @@ vFy vFy vFy vFy -woH +jvl cAw ehQ fLe ehQ -mAx +cnO dIR ehQ wYc @@ -48678,7 +49128,7 @@ rMC rMC rgm rgm -rgm +xmU rgm rgm rgm @@ -48693,7 +49143,7 @@ rMC rMC rgm rgm -rgm +xmU rgm rxl rxl @@ -48868,12 +49318,12 @@ syD syD syD syD -woH +jvl vSf ehQ ehQ ehQ -mAx +cnO mlP ehQ mAI @@ -48907,7 +49357,7 @@ wXM wXM wXM wXM -rgm +xmU rgm rgm rgm @@ -49101,12 +49551,12 @@ dSO mnY mnY mnY -woH +jvl aGz ehQ ehQ ehQ -mAx +cnO ehQ ehQ pNn @@ -49118,7 +49568,7 @@ dJd xjx abL sNp -qxc +wJw rgm rgm rgm @@ -49155,7 +49605,7 @@ rgm rgm rgm rgm -rgm +xmU rgm rgm rgm @@ -49334,12 +49784,12 @@ hiG hiG hiG hiG -ohT +gem tjh mlP tct lfP -mAx +cnO ehQ ehQ cSj @@ -49351,7 +49801,7 @@ bXb umc oLQ mbs -qxc +wJw rgm rgm rgm @@ -49364,7 +49814,7 @@ xMO wXM rgm kVV -tLs +vaa sgM eCB wXM @@ -49378,12 +49828,12 @@ wXM wXM wXM wXM -wXM +dOZ wXM rgm rgm rgm -rgm +xmU rgm rgm rgm @@ -49567,12 +50017,12 @@ hiG noo bgh hiG -ohT +gem lpK ehQ wEz bzj -mAx +cnO mlP ehQ nSi @@ -49584,7 +50034,7 @@ bXb umc sSX eyU -qxc +wJw rgm rgm rgm @@ -49594,7 +50044,7 @@ wXM wXM xMO xMO -wXM +dOZ rgm bOC tLs @@ -49602,7 +50052,7 @@ sgM xlX rgm rgm -rgm +xmU wXM wXM wXM @@ -49800,7 +50250,7 @@ cJW hIT pKb hiG -ohT +gem ehQ ehQ dIR @@ -49817,7 +50267,7 @@ ayS tHq umc oAE -qxc +wJw rgm rgm rgm @@ -49832,17 +50282,17 @@ bOC pLo ugT aQh -jpC -jpC -eAh -eAh -jpC -eAh -eAh -jpC -jpC -jpC -jpC +cIl +cIl +nUm +nUm +cIl +nUm +nUm +cIl +cIl +cIl +cIl wXM xMO xMO @@ -49857,7 +50307,7 @@ rgm rgm rgm rgm -rgm +xmU rgm rxl rxl @@ -50033,7 +50483,7 @@ hIT hIT hIT sgB -ohT +gem dRZ ujc ujc @@ -50050,7 +50500,7 @@ qxc qxc mpr qxc -qxc +wJw ngM eTo eTo @@ -50065,17 +50515,17 @@ nHH nHH kJy qne -jpC +cIl tdT qrQ -qrQ +ykt aKM fmw aKM qrQ -qrQ +ykt ylX -jpC +cIl wXM wXM wXM @@ -50085,7 +50535,7 @@ xMO xMO wXM wXM -rgm +xmU rgm rgm rgm @@ -50266,7 +50716,7 @@ hIT aje hIT bou -woH +jvl lXE ehQ mlP @@ -50283,7 +50733,7 @@ vsV pOW gYJ vsV -ohT +gem eTo eTo eTo @@ -50298,7 +50748,7 @@ rJI fhx ugT qne -eAh +nUm fcG pzo pzo @@ -50308,7 +50758,7 @@ pzo pzo pzo dhf -jpC +cIl rgm rgm rgm @@ -50516,7 +50966,7 @@ gYJ hkb gYJ vsV -ohT +gem eTo eTo eTo @@ -50530,8 +50980,8 @@ xaK gHV pbC ugT -qne -eAh +fok +nUm fcG pzo pzo @@ -50541,11 +50991,11 @@ bnK pzo pzo lrw -jpC -jpC -eAh -jpC -jpC +cIl +cIl +nUm +cIl +cIl eTo pUx ylo @@ -50749,7 +51199,7 @@ nng cOh imi xLQ -ohT +gem eTo eTo eTo @@ -50760,25 +51210,25 @@ pUx nHH iFF bLE -gHV +eMg pbC ugT qne -eAh +nUm fcG -rHt +lPo pzo eao rLV eao -pzo +jVi rHt lrw pSu pSu cvs pSu -jpC +cIl eTo pUx pUx @@ -50970,7 +51420,7 @@ qlY ehQ ehQ ehQ -mAx +cnO mlP hfz naO @@ -50997,7 +51447,7 @@ num fhx ugT qne -jpC +cIl rSQ pzo pzo @@ -51011,7 +51461,7 @@ pzo jVi rHt kyH -jpC +cIl eTo eTo pUx @@ -51198,12 +51648,12 @@ hIT hIT uRB pNC -ohT +gem lxq prR dIR ehQ -mAx +cnO ehQ hfz cZW @@ -51230,7 +51680,7 @@ num nHH ugT qne -eAh +nUm tsj ciw gER @@ -51244,7 +51694,7 @@ pzo pzo pzo ajC -jpC +cIl eTo eTo eTo @@ -51431,12 +51881,12 @@ hIT hIT hIT sgB -ohT +gem jdR mlP ehQ ehQ -mAx +cnO ehQ hfz jjQ @@ -51444,11 +51894,11 @@ thf quC xng ohT -ohT -ohT -ohT -ohT -ohT +gem +gem +gem +gem +gem eTo eTo pUx @@ -51458,7 +51908,7 @@ pUx eTo fhx ilk -rNx +fTY lGj aAH cCY @@ -51477,7 +51927,7 @@ jpC nrk jpC eAh -jpC +cIl eTo ngM eTo @@ -51664,12 +52114,12 @@ hIT rQD hIT sgB -ohT +gem inQ rVY ehQ ehQ -mAx +cnO ehQ ehQ hfz @@ -51677,7 +52127,7 @@ hfz hfz cBO wQy -ohT +gem dum dum dum @@ -51704,13 +52154,13 @@ dCD mMM dCD eAh -pzo +jVi vDp eAh xCd xYg xFo -jpC +cIl eTo eTo eTo @@ -51897,7 +52347,7 @@ ghU aje hIT sgB -woH +jvl lBH ctN dNv @@ -51929,7 +52379,7 @@ hBq nHH sEo qne -eAh +nUm tsj pzo eAh @@ -51943,7 +52393,7 @@ djh jlJ cfL cXM -jpC +cIl eTo eTo rxl @@ -52130,7 +52580,7 @@ cJW hIT hIT sgB -woH +jvl cFG gMI dIR @@ -52162,7 +52612,7 @@ nHH nHH sEo qne -jpC +cIl ibg pzo eAh @@ -52176,7 +52626,7 @@ eAh kyc lSA qnv -jpC +cIl ngM eTo rxl @@ -52363,7 +52813,7 @@ hIT hIT hIT lEa -woH +jvl inQ rVY ehQ @@ -52395,7 +52845,7 @@ eTo ngM sEo qne -eAh +nUm gbc pzo eAh @@ -52405,11 +52855,11 @@ dCD eAh pzo vgc -jpC -jpC -jpC -jpC -jpC +cIl +cIl +cIl +cIl +cIl eTo rxl rxl @@ -52596,7 +53046,7 @@ hIT hIT hIT sgB -woH +jvl mLY xng mlZ @@ -52628,7 +53078,7 @@ jCz eTo sEo qne -eAh +nUm gbc pzo jpC @@ -52638,7 +53088,7 @@ jpj jpC jVi bcN -jpC +cIl asm eTo eTo @@ -52829,7 +53279,7 @@ hIT hIT hIT tcA -ohT +gem nDT gMI tFK @@ -52842,7 +53292,7 @@ mlP nUH uhg jtd -ohT +gem wXy qne aXw @@ -52861,7 +53311,7 @@ eTo tvj sEo fok -eAh +nUm wVe rHt itn @@ -52871,7 +53321,7 @@ pzo itn pzo bDh -eAh +nUm pJc eTo eTo @@ -53062,20 +53512,20 @@ hIT aje hIT wzH -ohT -ohT -ohT +gem +gem +gem oNd -woH -woH +jvl +jvl oNd oNd sod khT -woH -woH -ohT -ohT +jvl +jvl +gem +gem baO qne pJc @@ -53094,7 +53544,7 @@ tvj dum sEo qne -jpC +cIl mxa dbe pjL @@ -53104,7 +53554,7 @@ dbe dbe mCB lUg -jpC +cIl pJc eTo eTo @@ -53327,17 +53777,17 @@ dum dum sEo qne -jpC -jpC +cIl +cIl pzo jXW -eAh -eAh -eAh +nUm +nUm +nUm pzo jXW -jpC -jpC +cIl +cIl pJc eTo eTo @@ -60740,7 +61190,7 @@ qfV cjH rBF cdr -cdr +nBa jPJ oeB mBs @@ -61209,7 +61659,7 @@ xup qXD ilS akM -amV +nsr bRC bso bso @@ -61431,7 +61881,7 @@ vqD bRC ama cQf -mQM +xBS mQM rBF jnk @@ -63084,7 +63534,7 @@ ays tQU rUH xHW -xHW +ipl rOa xHW xHW @@ -63329,7 +63779,7 @@ adW enL oMC enL -enL +hKg gET xEx yeD @@ -63566,7 +64016,7 @@ cJe cJe doZ pWk -enL +hKg lEj pSY wBN @@ -63792,7 +64242,7 @@ hcl cQo tQU oDp -vOo +wIX wCZ enL sea @@ -64255,7 +64705,7 @@ iOa iOa iOa hcl -bJd +jux tQU yip kxY @@ -64496,7 +64946,7 @@ duz xTY tQU otd -goi +sRq nXU xTY tQU @@ -64748,7 +65198,7 @@ xwh xwh xUd xUd -xUd +skV xUd xUd xwh @@ -64952,7 +65402,7 @@ wpg wpg wpg wpg -wpg +age jRU aWT tQU @@ -65434,7 +65884,7 @@ xwh xUd xUd uwv -eFL +jkw xUd xUd xUd @@ -65444,7 +65894,7 @@ jRL jRL jRL jRL -jRL +kua jRL jRL jRL @@ -65672,6 +66122,7 @@ jRL jRL jRL jRL +kua jRL jRL jRL @@ -65681,8 +66132,7 @@ jRL jRL jRL jRL -jRL -xUd +skV xUd xwh xUd @@ -66113,10 +66563,9 @@ otK nRk nRk nRk +ice nRk nRk -nRk -cOx cOx cOx cOx @@ -66124,11 +66573,12 @@ cOx cOx cOx cOx +hrp cOx cOx cOx cOx -jRL +kua jRL jRL vGi @@ -66141,11 +66591,11 @@ jRL jRL jRL jRL +kua jRL jRL jRL -jRL -jRL +kua jRL jRL jRL @@ -66336,12 +66786,12 @@ nRk nRk nRk cOx -cOx +hrp cOx cVH jCp hYy -vjP +dKY hSF cOx cOx @@ -66351,7 +66801,7 @@ cOx cOx cOx cOx -cOx +hrp cOx cOx cOx @@ -66367,7 +66817,7 @@ jRL vGi uwv eFL -cpt +wXO jRL jRL ggZ @@ -66597,7 +67047,7 @@ cOx jRL jRL jRL -hjA +cqe uwv eFL cpt @@ -66797,7 +67247,7 @@ rxl cOx cOx cOx -cOx +hrp cOx cOx cOx @@ -66837,7 +67287,7 @@ rBD jRL jRL pnC -jRL +kua kOZ uwv eFL @@ -66846,7 +67296,7 @@ eFL kOZ jRL jRL -jRL +kua jRL xUd xwh @@ -67026,8 +67476,7 @@ joR fet aXr rxl -hSF -cOx +ubr cOx cOx cOx @@ -67035,6 +67484,7 @@ cOx cOx cOx cOx +hrp rxl rxl cVH @@ -67042,11 +67492,12 @@ jCp hYy xyC hSF -cOx +hrp cOx iPD cOx cOx +hrp cOx cOx cOx @@ -67055,8 +67506,7 @@ cOx cOx cOx cOx -cOx -cOx +hrp cOx tzT tzT @@ -67285,7 +67735,7 @@ cOx cOx cOx cOx -cOx +hrp cOx cOx cOx @@ -67293,7 +67743,7 @@ cOx cVH eDy kGP -qKm +hcp qKm qKm qKm @@ -67307,7 +67757,7 @@ kTJ qKm ljO aeO -ljO +vIb eFL kOZ jRL @@ -67494,6 +67944,7 @@ aXr vqD hSF cOx +hrp cOx cOx cOx @@ -67502,8 +67953,7 @@ cOx cOx cOx cOx -cOx -cVH +kjA jCp hYy xyC @@ -67530,12 +67980,12 @@ ipm ipm ipm ipm +nvo ipm ipm ipm ipm -ipm -ipm +nvo ipm ipm ipm @@ -67732,7 +68182,7 @@ tzT tzT tzT tzT -tzT +wQq tzT tzT tzT @@ -67748,7 +68198,7 @@ tzT tzT tzT tzT -tzT +wQq tzT tzT tzT @@ -67776,7 +68226,7 @@ iOL htR eFL kOZ -jRL +kua jRL jRL jRL @@ -67948,7 +68398,7 @@ nIV sRa iIT hJL -hJL +rMk hmc aYw rxl @@ -67957,7 +68407,7 @@ kik kik kik kik -eDy +glK oGV oGV oGV @@ -67977,6 +68427,7 @@ oGV oGV oGV oGV +fCQ oGV oGV oGV @@ -67986,8 +68437,7 @@ oGV oGV oGV oGV -oGV -oGV +fCQ oGV oGV qNE @@ -68005,14 +68455,14 @@ pnC pnC wGL uwv -eFL +jkw uwv eFL kOZ jRL jRL jRL -jRL +kua xUd xwh xUd @@ -68185,7 +68635,7 @@ hJL cGh aYw vqD -eiA +xMA cOx cOx cOx @@ -68195,7 +68645,7 @@ ijc wOl wOl wOl -wOl +jfx wOl wOl wOl @@ -68205,7 +68655,7 @@ wOl wOl wOl eIW -wOl +jfx wOl wOl wOl @@ -68223,7 +68673,7 @@ ijc wOl wOl wOl -mcV +jmw vjP cpt jRL @@ -68433,7 +68883,7 @@ nfy mTX mTX mTX -mTX +vMp mTX hgM mTX @@ -68448,7 +68898,7 @@ mTX mTX mTX mTX -mTX +vMp mTX mTX bRd @@ -68459,7 +68909,7 @@ vqD jCp xyC rBD -ggZ +xer jRL jRL jRL @@ -68468,12 +68918,12 @@ jRL jRL vGi fJa -cpt +wXO kOZ uwv eFL uwv -eFL +jkw kOZ jRL jRL @@ -68658,7 +69108,7 @@ lHh tJg cjw der -vqD +ays xnL xnL xnL @@ -68697,7 +69147,7 @@ xnL xnL ugO uVv -jRL +kua jRL jRL pnC @@ -68887,7 +69337,7 @@ wOl wOl wOl wOl -wOl +jfx mcV ijc osT @@ -68947,7 +69397,7 @@ jRL jRL jRL jRL -xUd +skV rxl rxl xWF @@ -69113,11 +69563,11 @@ vqD vqD vqD vqD -gmf -kik +pjC kik kik kik +wIA kik kik lbq @@ -69176,7 +69626,7 @@ jRL jRL jRL jRL -jRL +kua jRL jRL jRL @@ -69404,7 +69854,7 @@ jRL jRL jRL jRL -jRL +kua jRL jRL jRL @@ -69632,7 +70082,7 @@ rxl rxl rxl uVv -jRL +kua jRL jRL jRL @@ -69808,14 +70258,14 @@ rxl rxl rxl rxl +hrp cOx cOx cOx cOx cOx cOx -cOx -cOx +hrp cOx cOx cOx @@ -70044,7 +70494,7 @@ rxl cOx cOx cOx -cOx +hrp cOx cOx cOx @@ -70053,7 +70503,7 @@ cOx cOx cOx cVH -jCp +iOV jtY rxl qGn @@ -70334,12 +70784,12 @@ thq jRL jRL jRL -jRL +kua jRL xqq eFY eFY -eFY +fKV rxl rxl rxl @@ -70516,7 +70966,7 @@ cOx cOx cOx cOx -cOx +hrp cOx cVH jCp @@ -70741,11 +71191,11 @@ rxl rxl rxl rxl +hrp cOx cOx cOx -cOx -cOx +hrp cOx cOx cOx @@ -70797,7 +71247,7 @@ vAK qGn rxl thq -eFY +fKV eFY mPu crp @@ -71217,7 +71667,7 @@ cOx cOx cOx cOx -cVH +kjA kBs tmw rtZ @@ -71679,7 +72129,7 @@ cOx cOx cOx cOx -cOx +hrp cOx cOx cOx @@ -71908,7 +72358,7 @@ rxl rxl cOx cOx -cOx +hrp cOx cOx cOx @@ -72383,7 +72833,7 @@ cOx cOx cOx cVH -jCp +iOV tmw rtZ qJU @@ -72612,7 +73062,7 @@ cOx cOx cOx cOx -cOx +hrp cOx cOx cVH @@ -73072,10 +73522,10 @@ rxl rxl rxl rxl +hrp cOx cOx -cOx -cOx +hrp cOx cOx cOx @@ -73547,7 +73997,7 @@ cOx cOx cOx cOx -cOx +hrp cOx hZJ rxl @@ -73773,10 +74223,10 @@ rxl rxl vew sWL -vNi -cOx +rXy cOx cOx +hrp cOx cOx cOx @@ -74003,7 +74453,7 @@ rxl rxl rxl rxl -pet +kbo pet pet sWL @@ -74472,7 +74922,7 @@ pet pet pet pet -pet +kbo pet rxl rxl diff --git a/_maps/map_files/Orion_Military_Outpost/orionoutpost.dmm b/_maps/map_files/Orion_Military_Outpost/orionoutpost.dmm index fabdf14b4cb0b..d85d6c5813ee7 100644 --- a/_maps/map_files/Orion_Military_Outpost/orionoutpost.dmm +++ b/_maps/map_files/Orion_Military_Outpost/orionoutpost.dmm @@ -2640,7 +2640,7 @@ /area/orion_outpost/ground/outpostsw) "nJ" = ( /obj/item/ammo_magazine/tank/ltb_cannon, -/obj/item/ammo_magazine/tank/ltaaap_minigun, +/obj/item/ammo_magazine/tank/ltaap_chaingun, /turf/open/floor/mainship/black{ dir = 8 }, @@ -3446,6 +3446,10 @@ /obj/structure/flora/pottedplant/twentytwo, /turf/open/floor/mainship/mono, /area/orion_outpost/surface/building/dorms) +"rD" = ( +/obj/effect/landmark/campaign_structure/sensor_tower, +/turf/open/floor/plating/ground/mars/random/cave/darker, +/area/orion_outpost/ground/outposts) "rE" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/open/floor/plating/ground/mars/random/cave/darker, @@ -4310,6 +4314,7 @@ /area/orion_outpost/ground/outpostsw) "vX" = ( /obj/effect/landmark/sensor_tower, +/obj/effect/landmark/campaign_structure/sensor_tower, /turf/open/floor/mainship/terragov{ dir = 1 }, @@ -6262,7 +6267,7 @@ /area/orion_outpost/ground/outpostcent) "Gr" = ( /obj/item/ammo_magazine/tank/ltb_cannon, -/obj/item/ammo_magazine/tank/ltaaap_minigun, +/obj/item/ammo_magazine/tank/ltaap_chaingun, /turf/open/floor/mainship/black/full, /area/orion_outpost/surface/building/ammodepot) "Gs" = ( @@ -7396,6 +7401,10 @@ /obj/effect/decal/cleanable/blood, /turf/open/floor/mainship/mono, /area/orion_outpost/surface/building/cargo) +"Me" = ( +/obj/effect/landmark/campaign_structure/sensor_tower, +/turf/open/floor/plating/ground/concrete, +/area/orion_outpost/ground/outpostse) "Mf" = ( /turf/closed/mineral/smooth, /area/orion_outpost/ground/outpostw) @@ -7715,13 +7724,6 @@ dir = 10 }, /area/orion_outpost/surface/building/tadpolepad) -"NF" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/bed/bunkbed, -/turf/open/floor/wood, -/area/orion_outpost/surface/building/barracks) "NG" = ( /obj/effect/decal/cleanable/blood, /turf/open/floor/plating/ground/concrete/lines{ @@ -9281,6 +9283,10 @@ dir = 1 }, /area/orion_outpost/surface/building/brig) +"VD" = ( +/obj/effect/landmark/campaign_structure/sensor_tower, +/turf/open/floor/mainship/mono, +/area/orion_outpost/surface/building/cargo) "VE" = ( /turf/open/floor/mainship/mono, /area/orion_outpost/surface/building/nebuilding) @@ -9872,6 +9878,7 @@ /area/orion_outpost/surface/building/vehicledepot) "YG" = ( /obj/effect/decal/cleanable/blood, +/obj/effect/landmark/campaign_structure/sensor_tower, /turf/open/floor/mainship/terragov{ dir = 1 }, @@ -18277,7 +18284,7 @@ Qp Qp Qp DU -DU +rD Qp Du Gp @@ -19336,7 +19343,7 @@ Zl xi Zl xi -NF +Zl Jd Qu VA @@ -19350,7 +19357,7 @@ Zl xi Zl xi -NF +Zl Jd tS hX @@ -20788,7 +20795,7 @@ Zl xi Zl xi -NF +Zl Jd in in @@ -20989,7 +20996,7 @@ Qw pW pW pW -Qw +VD Qw Qw pW @@ -22524,7 +22531,7 @@ yu Nk Nk cT -Nk +Me Nk hP Tm @@ -24218,7 +24225,7 @@ kb IQ Tm Tm -An +Tm Tm kb Tm @@ -24350,7 +24357,7 @@ kb cR Tm Tm -Tm +An cR kb Tm diff --git a/_maps/map_files/Pillar_of_Spring/TGS_Pillar_of_Spring.dmm b/_maps/map_files/Pillar_of_Spring/TGS_Pillar_of_Spring.dmm index a4fb1492145ee..2a5ad5a420382 100644 --- a/_maps/map_files/Pillar_of_Spring/TGS_Pillar_of_Spring.dmm +++ b/_maps/map_files/Pillar_of_Spring/TGS_Pillar_of_Spring.dmm @@ -9,13 +9,13 @@ /turf/open/floor/mainship, /area/mainship/squads/general) "abX" = ( -/obj/effect/ai_node, -/turf/open/floor/mainship/floor, +/obj/machinery/camera/autoname/mainship{ + dir = 1 + }, +/turf/open/floor/mainship/white{ + dir = 6 + }, /area/mainship/living/pilotbunks) -"abZ" = ( -/obj/structure/cable, -/turf/closed/wall/mainship/outer, -/area/mainship/hull/lower_hull) "acn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -32,10 +32,9 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "acv" = ( -/obj/structure/bed/chair/wood/wings, -/obj/effect/landmark/start/job/chiefshipengineer, -/turf/open/floor/wood, -/area/mainship/living/grunt_rnr) +/obj/structure/bed/chair/comfy/black, +/turf/open/floor/mainship/red/full, +/area/mainship/living/briefing) "acR" = ( /obj/machinery/power/monitor/grid, /obj/structure/cable, @@ -44,6 +43,19 @@ }, /turf/open/floor/mainship/mono, /area/mainship/engineering/upper_engineering) +"adg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/stack/conveyor/thirty, +/obj/structure/rack, +/obj/item/conveyor_switch_construct, +/obj/item/tool/crowbar, +/obj/item/paper/factoryhowto, +/obj/item/tool/wrench, +/obj/item/tool/screwdriver, +/turf/open/floor/mainship/green{ + dir = 8 + }, +/area/mainship/squads/req) "adk" = ( /obj/effect/decal/cleanable/blood/oil, /turf/open/floor/mainship, @@ -62,20 +74,6 @@ }, /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/stern_hallway) -"aeO" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ - dir = 8; - on = 1 - }, -/turf/open/floor/mainship/sterile/plain, -/area/mainship/living/tankerbunks) "afG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -87,21 +85,18 @@ /obj/machinery/door_control/mainship/ammo{ dir = 8 }, -/turf/open/floor/mainship/floor, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/turf/open/floor/mainship/cargo/arrow, /area/mainship/hallways/hangar) "aha" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/camera/autoname/mainship{ - dir = 8 - }, -/obj/machinery/door_control/unmeltable{ - dir = 8; - id = "s_umbilical"; - name = "Air Lock Door Control"; - pixel_x = 22 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 }, +/obj/effect/ai_node, /turf/open/floor/mainship/mono, -/area/mainship/hallways/port_umbilical) +/area/mainship/hallways/hangar) "ahe" = ( /obj/structure/closet/crate, /turf/open/floor/mainship/mono, @@ -157,6 +152,14 @@ }, /turf/open/floor/wood, /area/mainship/command/corporateliaison) +"amE" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 9 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/mainship/mono, +/area/mainship/hull/lower_hull) "amG" = ( /turf/open/floor/mainship/cargo/arrow, /area/mainship/hull/lower_hull) @@ -174,11 +177,6 @@ /obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/stern_hallway) -"anH" = ( -/obj/structure/bed, -/obj/item/bedsheet/captain, -/turf/open/floor/mainship/mono, -/area/mainship/living/bridgebunks) "anW" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -187,6 +185,12 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) +"aoJ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "aoQ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -201,26 +205,11 @@ /turf/open/floor/mainship/mono, /area/mainship/command/self_destruct) "apO" = ( -/obj/machinery/power/apc{ - dir = 8 - }, -/obj/structure/cable, +/obj/effect/spawner/random/misc/structure/flavorvending/coffeeweighted, /turf/open/floor/mainship/green{ dir = 4 }, /area/mainship/squads/req) -"apW" = ( -/obj/machinery/door/airlock/mainship/maint, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor/mainship, -/turf/open/floor/plating/mainship, -/area/mainship/shipboard/weapon_room) "aql" = ( /obj/machinery/floodlight/landing, /obj/effect/turf_decal/warning_stripes/thick{ @@ -228,10 +217,20 @@ }, /turf/open/floor/plating, /area/mainship/hallways/hangar) +"aqn" = ( +/obj/structure/prop/mainship/ship_memorial, +/turf/open/floor/grass, +/area/mainship/living/starboard_garden) "aqp" = ( -/obj/machinery/light/mainship, -/turf/open/floor/mainship/floor, -/area/crew_quarters/toilet) +/obj/effect/turf_decal/warning_stripes/thick/corner{ + dir = 1 + }, +/obj/effect/ai_node, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/turf/open/floor/mainship/yellow_cargo/arrow{ + dir = 1 + }, +/area/mainship/hallways/hangar/droppod) "aqx" = ( /obj/machinery/floodlight/landing, /obj/effect/turf_decal/warning_stripes/thick{ @@ -247,6 +246,7 @@ /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 }, +/obj/structure/reagent_dispensers/fueltank, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "atc" = ( @@ -274,51 +274,21 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 10 }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, -/turf/open/floor/mainship/cargo/arrow{ - dir = 1 - }, -/area/mainship/hallways/hangar/droppod) -"atK" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/mainship/mono, -/area/mainship/living/bridgebunks) +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "atN" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, /turf/open/floor/wood, /area/mainship/living/cryo_cells) -"atU" = ( -/obj/structure/cable, -/turf/open/floor/mainship/cargo/arrow{ - dir = 8 - }, -/area/mainship/engineering/engine_core) "avi" = ( /obj/machinery/telecomms/server/presets/bravo, /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) -"avq" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/power/apc{ - dir = 4 - }, -/turf/open/floor/mainship/mono, -/area/mainship/living/briefing) "avK" = ( /obj/structure/table/mainship, /obj/item/ashtray/bronze, @@ -341,10 +311,16 @@ /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) "axK" = ( -/obj/machinery/camera/autoname/mainship{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/effect/turf_decal/warning_stripes/thick{ dir = 8 }, -/turf/open/floor/mainship/mono, +/turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) "ayg" = ( /obj/structure/bed/stool{ @@ -353,19 +329,8 @@ /obj/machinery/camera/autoname{ dir = 8 }, -/obj/structure/cable, /turf/open/floor/grass, /area/mainship/living/starboard_garden) -"aym" = ( -/obj/machinery/door_control/mainship/mech, -/turf/open/floor/mainship/black{ - dir = 1 - }, -/area/mainship/living/pilotbunks) -"ayR" = ( -/obj/structure/table/woodentable, -/turf/open/floor/wood, -/area/mainship/living/chapel) "azw" = ( /obj/structure/rack, /obj/item/reagent_containers/glass/bucket/janibucket, @@ -375,20 +340,27 @@ /obj/item/storage/bag/trash, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) +"azH" = ( +/obj/structure/sink{ + dir = 4 + }, +/turf/open/floor/mainship/floor, +/area/mainship/shipboard/brig) "aAu" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, /turf/open/floor/mainship/sterile, /area/mainship/medical/lower_medical) "aBm" = ( -/obj/machinery/vending/nanomed{ - dir = 4 +/obj/effect/turf_decal/warning_stripes/thick/corner{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/mainship/black{ - dir = 8 +/obj/effect/turf_decal/warning_stripes/thick/corner, +/obj/effect/ai_node, +/turf/open/floor/mainship/yellow_cargo/arrow{ + dir = 1 }, -/area/mainship/living/tankerbunks) +/area/mainship/hallways/hangar/droppod) "aBY" = ( /obj/structure/flora/pottedplant/ten, /obj/machinery/light/mainship{ @@ -400,13 +372,17 @@ /obj/effect/soundplayer, /turf/closed/wall/mainship, /area/mainship/command/cic) +"aCn" = ( +/obj/effect/ai_node, +/obj/machinery/holopad, +/turf/open/floor/mainship/mono, +/area/mainship/living/chapel) "aCB" = ( /obj/machinery/holopad, /turf/open/floor/carpet, /area/mainship/living/commandbunks) "aCM" = ( -/obj/structure/table/mainship/nometal, -/obj/item/storage/box/bodybags, +/obj/effect/spawner/random/misc/structure/flavorvending/snackweighted, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "aDc" = ( @@ -420,15 +396,9 @@ dir = 1 }, /area/mainship/squads/general) -"aDC" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/closed/wall/mainship, -/area/mainship/living/tankerbunks) "aDG" = ( -/turf/open/floor/mainship/terragov/north{ - dir = 6 - }, +/obj/structure/bed/chair/comfy/black, +/turf/open/floor/mainship/orange/full, /area/mainship/living/briefing) "aDZ" = ( /obj/structure/table/mainship/nometal, @@ -436,11 +406,9 @@ /turf/open/floor/mainship/mono, /area/mainship/command/cic) "aEk" = ( -/obj/effect/ai_node, -/obj/machinery/light/mainship, -/obj/structure/cable, -/turf/open/floor/mainship/floor, -/area/crew_quarters/toilet) +/obj/machinery/door_control/mainship/droppod, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "aEu" = ( /obj/machinery/disposal, /obj/machinery/light/mainship{ @@ -461,23 +429,18 @@ /area/mainship/shipboard/firing_range) "aFn" = ( /obj/effect/turf_decal/warning_stripes/thin, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, /obj/machinery/landinglight/cas{ - dir = 4; - pixel_x = -4 + pixel_y = 4 }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "aFJ" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/obj/machinery/light/mainship, +/obj/effect/turf_decal/warning_stripes/thin, /obj/machinery/landinglight/cas{ - dir = 1; - pixel_y = -4 + pixel_y = 4 + }, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) @@ -498,32 +461,27 @@ /obj/machinery/firealarm, /turf/open/floor/wood, /area/mainship/living/commandbunks) -"aGR" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/machinery/light/mainship/small, -/obj/effect/landmark/corpsespawner/marine/regular, -/obj/item/weapon/gun/pistol/standard_heavypistol/suppressed, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/mainship/floor, -/area/crew_quarters/toilet) "aHp" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 - }, -/obj/structure/stairs/edge{ - dir = 1 - }, -/turf/open/floor/tile/dark, -/area/mainship/command/cic) +/turf/open/floor/mainship/yellow_cargo, +/area/mainship/hallways/hangar) "aHG" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ - dir = 4; - on = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 }, -/turf/open/floor/mainship/floor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/mainship/mono, /area/mainship/hallways/aft_hallway) +"aHH" = ( +/obj/machinery/camera/autoname/mainship{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "aIy" = ( /obj/structure/bed/chair/office/dark{ dir = 8 @@ -552,23 +510,27 @@ }, /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) -"aKj" = ( -/obj/machinery/door/poddoor/railing{ - dir = 1; - id = "supply_elevator_railing" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +"aJH" = ( +/obj/effect/turf_decal/warning_stripes/thick{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 +/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ + on = 1 }, -/turf/open/floor/mainship/cargo/arrow, -/area/mainship/squads/req) +/turf/open/floor/mainship/floor, +/area/mainship/hallways/hangar/droppod) +"aKj" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/landinglight/cas{ + pixel_y = 4 + }, +/turf/open/floor/mainship/yellow_cargo/arrow{ + dir = 1 + }, +/area/mainship/hallways/hangar) "aKk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/turf/open/floor/prison/kitchen, +/turf/open/floor/iron/kitchen, /area/mainship/living/grunt_rnr) "aKr" = ( /obj/machinery/computer/squad_manager, @@ -579,12 +541,22 @@ /obj/item/reagent_containers/food/drinks/golden_cup, /turf/open/floor/wood, /area/mainship/living/commandbunks) +"aKX" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/landinglight/cas{ + pixel_y = 4 + }, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "aLA" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer1, /obj/structure/sign/poster{ dir = 1 }, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/general) "aLV" = ( /obj/machinery/light/mainship{ @@ -597,19 +569,6 @@ dir = 4 }, /area/mainship/squads/general) -"aMa" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 6 - }, -/obj/item/clothing/head/warning_cone, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) -"aMk" = ( -/obj/machinery/light/mainship{ - dir = 4 - }, -/turf/open/floor/mainship/floor, -/area/crew_quarters/toilet) "aME" = ( /obj/structure/disposalpipe/segment/corner{ dir = 8 @@ -619,26 +578,11 @@ }, /obj/structure/cable, /obj/effect/ai_node, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) -"aNd" = ( -/obj/machinery/gear{ - id = "supply_elevator_gear" - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 10 - }, -/turf/open/floor/mainship/mono, -/area/mainship/squads/req) "aNM" = ( -/turf/open/floor/plating/mainship, -/area/mainship/living/evacuation) +/turf/open/space/basic, +/area/mainship/shipboard/weapon_room) "aNP" = ( /obj/structure/cable, /turf/open/floor/mainship/black/full, @@ -667,6 +611,10 @@ /obj/structure/bed/chair/wood/wings, /turf/open/floor/wood, /area/mainship/living/numbertwobunks) +"aPM" = ( +/obj/structure/ship_ammo/cas/rocket/keeper, +/turf/open/floor/mainship/cargo, +/area/mainship/hallways/hangar) "aQj" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -680,17 +628,17 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/stern_hallway) "aQr" = ( -/obj/structure/cable, /obj/structure/disposalpipe/segment/corner{ dir = 4 }, -/obj/effect/ai_node, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 6 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 }, +/obj/structure/cable, +/obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_hallway) "aQv" = ( @@ -717,8 +665,6 @@ /area/mainship/hallways/starboard_hallway) "aQX" = ( /obj/structure/prop/mainship/hangar_stencil, -/obj/structure/table/mainship/nometal, -/obj/item/storage/box/bodybags, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "aRK" = ( @@ -729,7 +675,6 @@ /obj/structure/bed/chair/sofa/left{ dir = 8 }, -/obj/structure/sign/double/barsign, /turf/open/floor/wood, /area/mainship/living/grunt_rnr) "aSw" = ( @@ -753,6 +698,23 @@ "aSJ" = ( /turf/closed/wall/mainship, /area/mainship/living/cryo_cells) +"aSV" = ( +/obj/machinery/light/mainship{ + dir = 4 + }, +/obj/structure/closet/firecloset, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/cargo, +/area/mainship/hallways/hangar) +"aTa" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/effect/ai_node, +/obj/machinery/landinglight/cas{ + pixel_y = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "aTk" = ( /obj/structure/table/fancywoodentable, /obj/item/tool/pen, @@ -769,10 +731,6 @@ /obj/machinery/grill/unwrenched, /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) -"aTO" = ( -/obj/effect/soundplayer, -/turf/closed/wall/mainship, -/area/mainship/living/tankerbunks) "aUp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -782,12 +740,13 @@ dir = 8 }, /area/mainship/squads/general) -"aVV" = ( -/obj/machinery/light/mainship{ +"aVn" = ( +/obj/structure/orbital_cannon, +/obj/machinery/light/mainship/small{ dir = 8 }, -/turf/open/floor/wood, -/area/mainship/living/chapel) +/turf/open/floor/mainship/hexagon, +/area/mainship/shipboard/weapon_room) "aWk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -801,18 +760,14 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) -"aWL" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/coffeeweighted, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) "aXc" = ( -/obj/structure/table/woodentable, -/obj/item/clipboard{ - pixel_x = 5 +/obj/structure/toilet{ + dir = 1 }, -/obj/item/paper, -/obj/item/tool/pen, -/turf/open/floor/mainship/mono, +/obj/machinery/light/mainship/small{ + dir = 8 + }, +/turf/open/floor/mainship/sterile/white, /area/mainship/living/bridgebunks) "aYc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -823,13 +778,23 @@ }, /obj/machinery/power/apc/mainship, /obj/structure/cable, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/hexagon, /area/mainship/engineering/engine_core) "aYd" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /turf/open/floor/mainship/mono, /area/mainship/squads/req) +"aYW" = ( +/obj/machinery/power/apc/mainship{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) "aYX" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -853,12 +818,25 @@ /area/mainship/hull/lower_hull) "aZD" = ( /obj/effect/ai_node, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/hallways/hangar) +"aZI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ + dir = 1; + on = 1 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/bridgebunks) "aZM" = ( -/obj/vehicle/ridden/powerloader, -/turf/open/floor/mainship/cargo, -/area/mainship/shipboard/weapon_room) +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "bap" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment/corner{ @@ -886,24 +864,21 @@ }, /turf/open/floor/plating, /area/mainship/command/telecomms) +"bbw" = ( +/obj/machinery/vending/engivend, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "bby" = ( /obj/effect/ai_node, +/obj/structure/prop/mainship/name_stencil/G, /turf/open/floor/mainship/black{ dir = 5 }, /area/mainship/squads/general) "bch" = ( -/obj/structure/sink{ - dir = 4 - }, -/obj/structure/mirror{ - dir = 8 - }, -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/floor, -/area/crew_quarters/toilet) +/obj/structure/bed/chair/comfy/black, +/turf/open/floor/mainship/silver/full, +/area/mainship/living/briefing) "bck" = ( /obj/effect/ai_node, /turf/open/floor/mainship/mono, @@ -921,12 +896,6 @@ "bdF" = ( /turf/open/floor/wood, /area/mainship/living/commandbunks) -"bdS" = ( -/obj/vehicle/ridden/motorbike, -/turf/open/floor/mainship/orange{ - dir = 4 - }, -/area/mainship/hallways/hangar) "bdT" = ( /obj/structure/prop/mainship/sensor_computer2/sd, /turf/open/floor/mainship/tcomms, @@ -946,7 +915,7 @@ /turf/open/floor/engine, /area/mainship/engineering/port_atmos) "bfc" = ( -/obj/effect/turf_decal/warning_stripes/thin{ +/obj/effect/turf_decal/warning_stripes/thick{ dir = 8 }, /turf/open/floor/mainship/stripesquare, @@ -993,13 +962,11 @@ /turf/open/floor/mainship/mono, /area/mainship/command/cic) "bjo" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /turf/open/floor/plating/plating_catwalk, /area/mainship/command/cic) "bjy" = ( @@ -1015,27 +982,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/aft_hallway) -"bkF" = ( -/obj/structure/rack, -/obj/machinery/light/mainship/small, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/turf/open/floor/mainship/red{ - dir = 6 - }, -/area/mainship/shipboard/weapon_room) -"bll" = ( -/obj/effect/turf_decal/warning_stripes/thin{ +"bjJ" = ( +/obj/structure/toilet{ dir = 8 }, -/obj/effect/ai_node, -/obj/machinery/landinglight/tadpole{ - dir = 8; - pixel_x = 4 - }, +/turf/open/floor/mainship/floor, +/area/mainship/shipboard/brig) +"bld" = ( +/obj/structure/reagent_dispensers/fueltank, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "blX" = ( @@ -1052,24 +1006,14 @@ }, /turf/open/floor/plating/platebotc, /area/mainship/medical/upper_medical) -"bmp" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/open/floor/wood, -/area/mainship/living/chapel) "bmt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/light/mainship{ - dir = 4 - }, /turf/open/floor/mainship/ntlogo/nt3, /area/mainship/command/corporateliaison) "bni" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/prison/kitchen, +/turf/open/floor/iron/kitchen, /area/mainship/living/grunt_rnr) "bnq" = ( /obj/machinery/disposal, @@ -1118,6 +1062,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/black, /area/mainship/squads/general) +"brL" = ( +/turf/closed/wall/mainship/outer, +/area/space) "brN" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -1128,6 +1075,15 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) +"brT" = ( +/obj/structure/disposalpipe/segment/corner{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "bsg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -1136,6 +1092,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/engineering/upper_engineering) "bsG" = ( @@ -1144,22 +1101,12 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, -/turf/open/floor/prison/kitchen, +/turf/open/floor/iron/kitchen, /area/mainship/living/grunt_rnr) "bth" = ( -/obj/structure/bed/chair/office/dark{ - dir = 1 - }, +/obj/structure/bed/chair/office/dark, /turf/open/floor/mainship/mono, /area/mainship/command/cic) -"btQ" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/obj/structure/rack, -/obj/item/stack/sheet/mineral/phoron{ - amount = 25 - }, -/turf/open/floor/mainship/sterile/plain, -/area/mainship/living/tankerbunks) "btW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -1175,9 +1122,8 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/living/grunt_rnr) "buM" = ( -/turf/open/floor/mainship/green/corner{ - dir = 8 - }, +/obj/structure/window/framed/mainship/requisitions, +/turf/open/floor/plating, /area/mainship/squads/req) "buS" = ( /turf/open/floor/mainship/ntlogo, @@ -1205,10 +1151,26 @@ /turf/open/floor/plating, /area/mainship/command/cic) "bxX" = ( -/obj/machinery/firealarm, -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/mainship/mono, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/vending/nanomed, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) +"byk" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hull/lower_hull) "byY" = ( /obj/structure/bed/chair/nometal, /obj/effect/landmark/start/job/shiptech, @@ -1242,26 +1204,19 @@ /obj/machinery/firealarm{ dir = 1 }, -/turf/open/floor/mainship/cargo/arrow{ +/turf/open/floor/mainship/yellow_cargo/arrow{ dir = 8 }, /area/mainship/squads/general) "bAT" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 4 - }, -/turf/open/floor/mainship/mono, +/obj/structure/bed/chair/comfy/black, +/turf/open/floor/mainship/purple/full, /area/mainship/living/briefing) "bBk" = ( /obj/structure/barricade/metal{ dir = 4 }, -/turf/open/floor/mainship/cargo, -/area/mainship/squads/req) -"bBq" = ( -/turf/open/floor/plating/icefloor/warnplate{ - dir = 1 - }, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/req) "bBG" = ( /obj/effect/turf_decal/warning_stripes/thin{ @@ -1308,9 +1263,8 @@ }, /area/mainship/squads/general) "bDi" = ( -/turf/open/floor/mainship/cargo/arrow{ - dir = 8 - }, +/obj/structure/ship_ammo/cas/rocket/banshee, +/turf/open/floor/mainship/cargo, /area/mainship/hallways/hangar) "bDn" = ( /obj/machinery/telecomms/bus/preset_three, @@ -1327,6 +1281,12 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) +"bEi" = ( +/obj/structure/bed/chair/nometal{ + dir = 1 + }, +/turf/open/floor/mainship/orange/full, +/area/mainship/living/briefing) "bFc" = ( /obj/machinery/vending/marineFood, /obj/item/reagent_containers/food/snacks/protein_pack, @@ -1360,11 +1320,28 @@ }, /turf/open/floor/mainship/mono, /area/mainship/engineering/upper_engineering) +"bFG" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, +/obj/machinery/light/mainship{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/floor, +/area/mainship/hallways/hangar/droppod) "bFX" = ( -/obj/machinery/camera/autoname/mainship{ +/obj/machinery/door/firedoor/multi_tile{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/mainship/open/hangar{ dir = 8 }, -/obj/effect/turf_decal/warning_stripes/thin{ +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/multi_tile/mainship/maint{ dir = 1 }, /turf/open/floor/mainship/mono, @@ -1387,23 +1364,19 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) "bKn" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, /turf/open/floor/mainship/red{ dir = 8 }, /area/mainship/command/cic) -"bKq" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/machinery/landinglight/tadpole{ - dir = 4; - pixel_x = -4 - }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) "bKB" = ( /obj/structure/cable, /obj/effect/ai_node, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) "bLz" = ( @@ -1446,8 +1419,8 @@ /turf/open/floor/mainship/green, /area/mainship/squads/req) "bNe" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/cigaretteweighted, /obj/item/coin/iron, +/obj/machinery/vending/cigarette, /turf/open/floor/mainship, /area/mainship/squads/general) "bNh" = ( @@ -1463,7 +1436,7 @@ /obj/structure/bed/bunkbed, /obj/effect/landmark/start/job/squadmarine, /obj/effect/landmark/start/job/squadmarine, -/obj/item/trash/barcardine, +/obj/item/trash/barcaridine, /obj/machinery/firealarm{ dir = 8 }, @@ -1476,13 +1449,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) -"bNu" = ( -/obj/machinery/door/airlock/mainship/generic/mech_pilot/bunk, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/mainship/mono, -/area/mainship/living/tankerbunks) "bOz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -1494,7 +1460,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/hallways/hangar) "bOF" = ( /obj/structure/disposalpipe/segment{ @@ -1519,8 +1485,6 @@ /obj/machinery/camera/autoname/mainship{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) "bPP" = ( @@ -1541,12 +1505,15 @@ /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) "bRC" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 + dir = 4 }, -/turf/open/floor/plating/plating_catwalk, +/obj/effect/ai_node, +/obj/machinery/landinglight/cas{ + dir = 4; + pixel_x = -4 + }, +/turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "bSp" = ( /obj/structure/cable, @@ -1554,12 +1521,8 @@ /area/mainship/squads/general) "bSC" = ( /obj/machinery/holopad, -/turf/open/floor/prison/kitchen, +/turf/open/floor/iron/kitchen, /area/mainship/living/grunt_rnr) -"bSK" = ( -/obj/structure/prop/mainship/sensor_computer2, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) "bSS" = ( /obj/structure/bed/chair/office/dark{ dir = 8 @@ -1568,18 +1531,6 @@ dir = 4 }, /area/mainship/command/cic) -"bTd" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 10 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 6 - }, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) "bTe" = ( /obj/effect/turf_decal/warning_stripes/engineer, /obj/effect/turf_decal/warning_stripes/box/small{ @@ -1598,35 +1549,28 @@ /turf/open/floor/wood, /area/mainship/living/commandbunks) "bTS" = ( -/obj/structure/droppod, -/obj/structure/drop_pod_launcher, -/turf/open/floor/mainship/cargo, -/area/mainship/hallways/hangar/droppod) -"bUN" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, -/turf/open/floor/mainship/black{ - dir = 9 - }, -/area/mainship/living/tankerbunks) +/obj/structure/mirror, +/turf/open/floor/wood, +/area/mainship/living/mechpilotquarters) "bUW" = ( /obj/structure/flora/ausbushes/ppflowers, /obj/structure/bed/stool{ pixel_y = 8 }, -/obj/structure/cable, /turf/open/floor/grass, /area/mainship/living/starboard_garden) "bVx" = ( -/obj/structure/droppod, -/obj/structure/drop_pod_launcher, -/obj/machinery/camera/autoname/mainship, -/turf/open/floor/mainship/cargo, -/area/mainship/hallways/hangar/droppod) -"bVU" = ( -/obj/structure/closet/cabinet, +/obj/machinery/door/airlock/mainship/generic/mech_pilot/bunk, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/mainship/mono, +/area/mainship/living/mechpilotquarters) +"bVU" = ( +/obj/machinery/door/airlock/mainship/generic/bathroom/toilet{ + dir = 2 + }, +/turf/open/floor/mainship/sterile/white, /area/mainship/living/bridgebunks) "bVZ" = ( /obj/effect/turf_decal/warning_stripes/thin, @@ -1656,15 +1600,11 @@ /turf/open/floor/wood, /area/mainship/command/corporateliaison) "bWA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 }, -/turf/open/floor/mainship/floor, -/area/mainship/living/pilotbunks) +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) "bXH" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -1687,15 +1627,24 @@ /obj/machinery/light/mainship{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 1 + }, /turf/open/floor/mainship/mono, /area/mainship/living/bridgebunks) +"bYx" = ( +/obj/machinery/light/mainship/small{ + dir = 1 + }, +/turf/open/floor/mainship/hexagon, +/area/mainship/shipboard/weapon_room) +"bYC" = ( +/turf/open/floor/plating/dmg1, +/area/mainship/hallways/hangar) "bYG" = ( /obj/machinery/firealarm{ dir = 8 @@ -1791,27 +1740,42 @@ /obj/structure/cable, /turf/open/floor/wood, /area/mainship/living/commandbunks) -"chT" = ( -/turf/closed/wall/mainship/outer, +"chD" = ( +/obj/item/toy/plush/carp, +/turf/open/space/basic, +/area/mainship/shipboard/weapon_room) +"chO" = ( +/obj/machinery/mech_bay_recharge_port, +/obj/machinery/light/mainship/small, +/turf/open/floor/mainship/tcomms, /area/mainship/shipboard/weapon_room) "cim" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 +/obj/machinery/holopad, +/turf/open/floor/mainship/green{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 8 +/area/mainship/squads/req) +"ciN" = ( +/turf/open/floor/grass, +/area/mainship/living/starboard_garden) +"ciZ" = ( +/obj/structure/prop/mainship/name_stencil, +/turf/open/floor/mainship/black{ + dir = 4 }, -/obj/effect/ai_node, -/obj/structure/disposalpipe/junction/flipped, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/aft_hallway) +/area/mainship/squads/general) "cjl" = ( /obj/machinery/marine_selector/gear/smartgun, /turf/open/floor/mainship/floor, /area/mainship/squads/general) +"cjC" = ( +/turf/open/floor/mainship/yellow_cargo, +/area/mainship/squads/req) "cjU" = ( -/turf/open/floor/mainship/cargo/arrow, +/obj/effect/attach_point/weapon/dropship2{ + dir = 8 + }, +/turf/open/floor/plating, /area/mainship/hallways/hangar) "ckd" = ( /obj/machinery/door/airlock/mainship/medical{ @@ -1901,12 +1865,6 @@ /obj/machinery/computer/telecomms/server/preset, /turf/open/floor/mainship/mono, /area/mainship/command/telecomms) -"cra" = ( -/obj/structure/disposalpipe/segment/corner, -/obj/effect/ai_node, -/obj/structure/cable, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hull/lower_hull) "csh" = ( /obj/machinery/light/mainship{ dir = 8 @@ -1921,23 +1879,12 @@ }, /turf/open/floor/plating, /area/mainship/hallways/hangar) -"cth" = ( -/obj/structure/cable, -/obj/effect/ai_node, -/turf/open/floor/mainship/mono, -/area/mainship/squads/req) "ctR" = ( /obj/structure/dropship_equipment/shuttle/sentry_holder, /turf/open/floor/mainship/orange{ dir = 4 }, /area/mainship/hallways/hangar) -"cui" = ( -/obj/machinery/shower{ - dir = 8 - }, -/turf/open/floor/mainship/sterile/dark, -/area/crew_quarters/toilet) "cuG" = ( /obj/structure/window/framed/mainship/hull, /turf/open/floor/mainship_hull, @@ -1983,6 +1930,12 @@ }, /turf/open/floor/plating, /area/mainship/hallways/hangar) +"cyn" = ( +/obj/machinery/light/mainship/small{ + dir = 1 + }, +/turf/open/floor/mainship/floor, +/area/mainship/shipboard/brig) "cyM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -2027,23 +1980,13 @@ /obj/item/tool/pen, /turf/open/floor/wood, /area/mainship/command/corporateliaison) -"cAi" = ( -/obj/machinery/light/mainship{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ - dir = 1; - on = 1 - }, -/turf/open/floor/mainship/mono, -/area/mainship/living/bridgebunks) "cAK" = ( /obj/structure/table/mainship/nometal, /obj/item/fuel_cell/full, /obj/machinery/camera/autoname/mainship{ dir = 8 }, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/hexagon, /area/mainship/engineering/engine_core) "cBW" = ( /obj/structure/table/mainship/nometal, @@ -2054,7 +1997,7 @@ /area/mainship/command/cic) "cCg" = ( /obj/item/trash/cigbutt, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/general) "cCy" = ( /turf/closed/wall/mainship/outer, @@ -2067,12 +2010,12 @@ /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) "cCZ" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 +/obj/structure/disposalpipe/segment, +/obj/item/reagent_containers/jerrycan, +/turf/open/floor/mainship/cargo/arrow{ + dir = 4 }, -/obj/structure/closet/emcloset, -/turf/open/floor/mainship/cargo, -/area/mainship/hallways/hangar) +/area/mainship/squads/req) "cDN" = ( /obj/machinery/light/mainship/small{ dir = 8 @@ -2098,37 +2041,28 @@ }, /area/mainship/engineering/engineering_workshop) "cEJ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 +/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ + dir = 4; + on = 1 }, -/obj/effect/ai_node, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar/droppod) +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "cEZ" = ( -/obj/effect/turf_decal/warning_stripes/thin{ +/obj/effect/attach_point/weapon/dropship2{ dir = 4 }, -/obj/effect/ai_node, -/obj/machinery/landinglight/cas{ - dir = 4; - pixel_x = -4 - }, -/turf/open/floor/mainship/mono, +/turf/open/floor/plating, /area/mainship/hallways/hangar) "cFk" = ( /obj/machinery/telecomms/server/presets/medical, /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) "cGu" = ( -/obj/structure/bed, -/obj/item/bedsheet/captain, -/obj/effect/landmark/start/job/staffofficer, +/obj/machinery/holopad, +/turf/open/floor/mainship/mono, +/area/mainship/squads/req) +"cGy" = ( +/obj/structure/closet/secure_closet/staff_officer, /turf/open/floor/mainship/mono, /area/mainship/living/bridgebunks) "cHc" = ( @@ -2148,11 +2082,15 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) "cLc" = ( -/obj/structure/closet/crate/ammo, /obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/mainship/cargo, -/area/mainship/squads/req) +/obj/effect/ai_node, +/obj/machinery/power/apc{ + dir = 8 + }, +/turf/open/floor/mainship/white{ + dir = 4 + }, +/area/mainship/living/pilotbunks) "cLu" = ( /obj/effect/turf_decal/warning_stripes/thin, /obj/effect/turf_decal/warning_stripes/thin{ @@ -2182,10 +2120,6 @@ /obj/structure/cable, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_hallway) -"cNz" = ( -/obj/effect/ai_node, -/turf/open/floor/wood, -/area/mainship/living/pilotbunks) "cNR" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 10 @@ -2193,12 +2127,6 @@ /obj/machinery/meter, /turf/open/floor/mainship/mono, /area/mainship/engineering/port_atmos) -"cOP" = ( -/obj/machinery/door_control/mainship/mech{ - dir = 1 - }, -/turf/open/floor/mainship/black, -/area/mainship/living/tankerbunks) "cPg" = ( /turf/open/floor/mainship, /area/mainship/squads/general) @@ -2252,21 +2180,6 @@ /obj/structure/disposalpipe/segment/corner, /turf/open/floor/mainship/mono, /area/mainship/hallways/stern_hallway) -"cRF" = ( -/obj/structure/cable, -/obj/machinery/door/firedoor/mainship, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/door/poddoor/mainship/mech, -/turf/open/floor/mainship/stripesquare, -/area/mainship/living/pilotbunks) "cRJ" = ( /obj/structure/bed/bunkbed, /obj/effect/landmark/start/job/squadengineer, @@ -2290,14 +2203,10 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_hallway) "cSp" = ( -/obj/structure/rack, -/obj/item/tool/wrench, -/obj/item/tool/crowbar, -/obj/item/tool/screwdriver, -/obj/item/paper/factoryhowto, /obj/machinery/light/mainship{ dir = 8 }, +/obj/machinery/vending/engivend, /turf/open/floor/mainship/green{ dir = 8 }, @@ -2330,6 +2239,15 @@ dir = 9 }, /area/space) +"cTx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "cTF" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 @@ -2341,19 +2259,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/mainship/engineering/upper_engineering) -"cUW" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/mainship/sterile/plain, -/area/mainship/living/pilotbunks) "cVd" = ( /obj/structure/table/woodentable, /turf/open/floor/wood, @@ -2374,15 +2279,6 @@ /obj/machinery/door/firedoor/multi_tile, /turf/open/floor/mainship/sterile, /area/mainship/medical/lower_medical) -"cWJ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 5 - }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar) "cXa" = ( /obj/machinery/telecomms/processor/preset_four, /turf/open/floor/mainship/tcomms, @@ -2394,7 +2290,10 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, -/turf/open/floor/mainship/mono, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/turf/open/floor/mainship/cargo/arrow, /area/mainship/hallways/hangar) "cYi" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -2438,8 +2337,8 @@ /turf/open/floor/mainship/cargo, /area/mainship/engineering/port_atmos) "cZV" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/turf/open/floor/mainship/mono, +/obj/machinery/holopad, +/turf/open/floor/mainship/sterile/white, /area/mainship/living/bridgebunks) "daf" = ( /obj/machinery/door/airlock/mainship/maint{ @@ -2448,6 +2347,14 @@ /obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) +"dbm" = ( +/obj/effect/ai_node, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hull/lower_hull) "dbu" = ( /obj/machinery/door/airlock/mainship/maint/core, /obj/machinery/door/firedoor/mainship, @@ -2470,12 +2377,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) -"dct" = ( -/obj/machinery/vending/uniform_supply, -/turf/open/floor/mainship/black{ - dir = 5 - }, -/area/mainship/living/tankerbunks) "dcz" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -2537,16 +2438,16 @@ }, /area/mainship/squads/general) "dfT" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ +/obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/effect/spawner/random/misc/structure/showcase, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 }, -/obj/structure/cable, -/obj/structure/bed/chair/wood/wings, -/turf/open/floor/tile/chapel{ - dir = 4 +/turf/open/floor/mainship/silver{ + dir = 9 }, /area/mainship/living/chapel) "dfW" = ( @@ -2566,9 +2467,12 @@ }, /area/space) "dgm" = ( -/turf/open/floor/mainship/green, -/area/mainship/squads/req) +/obj/structure/cable, +/obj/structure/disposalpipe/segment/corner, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hull/lower_hull) "dgy" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, /turf/open/floor/mainship/research/containment/floor2{ dir = 6 }, @@ -2578,6 +2482,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, +/obj/effect/ai_node, /turf/open/floor/mainship/cargo, /area/mainship/hallways/hangar) "dhv" = ( @@ -2589,11 +2494,20 @@ }, /area/mainship/medical/upper_medical) "dhK" = ( -/obj/structure/table/mainship/nometal, -/obj/item/folder/yellow, -/obj/item/tool/pen, -/turf/open/floor/mainship/floor, +/obj/structure/bed/chair/comfy/black, +/turf/open/floor/mainship/blue/full, /area/mainship/living/briefing) +"dii" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "dit" = ( /obj/machinery/telecomms/server/presets/engineering, /turf/open/floor/mainship/tcomms, @@ -2607,6 +2521,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) +"diW" = ( +/obj/docking_port/stationary/escape_pod/right{ + dir = 2 + }, +/turf/open/floor/plating, +/area/mainship/living/chapel) "dkD" = ( /obj/machinery/door/airlock/mainship/medical/glass/chemistry{ dir = 1 @@ -2620,6 +2540,13 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/chemistry) +"dkW" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ + dir = 4; + on = 1 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "dkX" = ( /obj/structure/bed/chair/wood/normal{ dir = 4 @@ -2663,6 +2590,16 @@ }, /turf/open/space/basic, /area/space) +"dmm" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 10 + }, +/obj/machinery/door/poddoor/railing{ + dir = 8; + id = "supply_elevator_railing" + }, +/turf/open/floor/mainship/floor, +/area/mainship/squads/req) "dmx" = ( /obj/machinery/light/mainship/small{ dir = 4 @@ -2670,12 +2607,6 @@ /obj/structure/cable, /turf/open/floor/mainship/floor, /area/crew_quarters/toilet) -"dmB" = ( -/obj/machinery/door/poddoor/mainship/droppod{ - dir = 2 - }, -/turf/open/floor/mainship/stripesquare, -/area/mainship/hallways/hangar/droppod) "dmE" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/item/storage/box/cups{ @@ -2688,6 +2619,19 @@ }, /turf/open/floor/mainship/mono, /area/mainship/command/corporateliaison) +"dmU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/squads/req) "dnf" = ( /obj/machinery/door/airlock/multi_tile/mainship/maint{ dir = 1 @@ -2726,9 +2670,9 @@ }, /area/mainship/command/cic) "dpN" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ - on = 1 - }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/mono, /area/mainship/command/cic) "dpY" = ( @@ -2736,11 +2680,9 @@ /area/mainship/hallways/hangar) "drx" = ( /obj/machinery/light/mainship, -/obj/structure/table/mainship/nometal, -/obj/item/newspaper, -/obj/effect/spawner/random/misc/plushie/nospawnninetynine, -/turf/open/floor/mainship/white, -/area/mainship/living/pilotbunks) +/obj/effect/ai_node, +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) "drW" = ( /obj/docking_port/stationary/ert/target{ id = "port_target"; @@ -2761,15 +2703,6 @@ dir = 1 }, /area/mainship/engineering/engineering_workshop) -"dts" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/turf/open/floor/mainship/sterile/plain, -/area/mainship/living/tankerbunks) "dtC" = ( /obj/machinery/door/airlock/mainship/maint{ dir = 2 @@ -2787,7 +2720,7 @@ /obj/structure/sign/poster{ dir = 1 }, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/general) "duo" = ( /obj/structure/disposalpipe/segment/corner{ @@ -2810,13 +2743,11 @@ /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) "duy" = ( -/obj/machinery/holopad, /obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 + dir = 6 }, -/obj/machinery/landinglight/cas{ - dir = 1; - pixel_y = -4 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) @@ -2843,16 +2774,12 @@ /turf/closed/wall/mainship, /area/mainship/living/cryo_cells) "dvZ" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/mainship/medical/glass/free_access{ - dir = 1; - name = "\improper Medical Storage Airlock" - }, -/obj/machinery/door/firedoor/mainship{ - dir = 2 - }, -/turf/open/floor/mainship/sterile/dark, -/area/mainship/medical/upper_medical) +/obj/item/attachable/bayonetknife, +/obj/structure/table/mainship/nometal, +/obj/item/book/manual/marine_law, +/obj/effect/spawner/random/misc/gnome, +/turf/open/floor/mainship/floor, +/area/mainship/shipboard/brig) "dxc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -2862,35 +2789,31 @@ }, /turf/open/floor/wood, /area/mainship/living/numbertwobunks) +"dxg" = ( +/obj/machinery/light/mainship{ + dir = 8 + }, +/turf/open/floor/mainship/silver{ + dir = 10 + }, +/area/mainship/living/chapel) "dxA" = ( /obj/machinery/light/mainship{ dir = 4 }, /turf/open/floor/mainship/red, /area/mainship/command/airoom) -"dyd" = ( -/obj/structure/bed/chair/ob_chair, -/obj/machinery/computer/orbital_cannon_console, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 +"dzr" = ( +/obj/machinery/air_alarm{ + dir = 8 }, -/obj/effect/spawner/random/misc/gnome, /turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) +/area/mainship/hallways/aft_hallway) "dzT" = ( /obj/structure/window/framed/mainship/requisitions, /obj/machinery/door/firedoor/mainship, /turf/open/floor/plating, /area/mainship/command/telecomms) -"dAn" = ( -/obj/structure/rack, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/turf/open/floor/mainship/red, -/area/mainship/shipboard/weapon_room) "dBi" = ( /obj/machinery/camera/autoname/mainship, /turf/open/floor/mainship, @@ -2935,10 +2858,15 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "dFt" = ( -/turf/open/floor/mainship/green/corner{ - dir = 8 +/obj/machinery/light/mainship{ + dir = 4 }, -/area/mainship/hallways/aft_hallway) +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "dGh" = ( /obj/machinery/self_destruct/rod, /turf/open/floor/mainship/tcomms, @@ -2948,20 +2876,17 @@ /turf/open/floor/mainship/mono, /area/mainship/engineering/upper_engineering) "dGR" = ( -/turf/open/floor/mainship/terragov/north{ - dir = 8 - }, -/area/mainship/living/briefing) -"dHn" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/machinery/firealarm{ +/obj/machinery/camera/autoname/mainship{ dir = 4 }, -/obj/structure/sign/poster, /turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) +/area/mainship/living/briefing) +"dHI" = ( +/obj/structure/table/gamblingtable, +/obj/item/toy/deck, +/obj/item/spacecash/c20, +/turf/open/floor/mainship/mono, +/area/mainship/hull/lower_hull) "dHW" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -3016,7 +2941,7 @@ /area/mainship/medical/medical_science) "dJU" = ( /obj/machinery/camera/autoname/mainship, -/turf/open/floor/mainship/cargo/arrow{ +/turf/open/floor/mainship/yellow_cargo/arrow{ dir = 8 }, /area/mainship/squads/general) @@ -3049,20 +2974,15 @@ /obj/machinery/door/poddoor/shutters/mainship/req/ro, /turf/open/floor/plating, /area/mainship/squads/req) -"dLM" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/hangar) +"dMg" = ( +/obj/structure/closet/cabinet, +/turf/open/floor/mainship/mono, +/area/mainship/living/bridgebunks) "dMk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, -/turf/open/floor/plating/plating_catwalk, +/turf/open/floor/mainship/hexagon, /area/mainship/engineering/engine_core) "dMO" = ( /obj/structure/cable, @@ -3107,23 +3027,6 @@ }, /turf/open/floor/wood, /area/mainship/living/commandbunks) -"dOU" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/structure/rack, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/machinery/camera/autoname/mainship{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/mainship/red{ - dir = 5 - }, -/area/mainship/shipboard/weapon_room) "dQG" = ( /turf/closed/wall/mainship/white, /area/mainship/medical/operating_room_one) @@ -3165,6 +3068,33 @@ /obj/machinery/door/poddoor/shutters/opened/medbay, /turf/open/floor/plating/platebotc, /area/mainship/medical/lower_medical) +"dTj" = ( +/obj/machinery/computer/arcade, +/turf/open/floor/mainship/white{ + dir = 4 + }, +/area/mainship/living/pilotbunks) +"dTH" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/machinery/landinglight/cas{ + dir = 4; + pixel_x = -4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) +"dTK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/mainship/living/pilotbunks) "dUf" = ( /obj/machinery/camera/autoname/mainship{ dir = 4 @@ -3178,34 +3108,8 @@ /obj/machinery/door/airlock/multi_tile/mainship/marine/requisitions{ dir = 1 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /turf/open/floor/mainship/mono, /area/mainship/squads/req) -"dUz" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/machinery/landinglight/tadpole{ - dir = 8; - pixel_x = 4 - }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) -"dUH" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) "dVo" = ( /obj/machinery/door/firedoor/multi_tile{ dir = 8 @@ -3217,21 +3121,12 @@ dir = 8 }, /area/mainship/shipboard/firing_range) -"dVP" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/obj/machinery/landinglight/tadpole{ - pixel_y = 4 - }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) "dWf" = ( -/obj/machinery/door/poddoor/mainship/ammo{ - dir = 2; - id = null; - name = "\improper Hangar Launch Hatch" - }, -/turf/closed/wall/mainship/outer, -/area/mainship/hull/lower_hull) +/obj/structure/table/mainship/nometal, +/obj/item/folder/red, +/obj/item/tool/pen, +/turf/open/floor/mainship/mono, +/area/mainship/living/briefing) "dWD" = ( /obj/structure/closet/secure_closet/guncabinet/m41aMK1, /turf/open/floor/mainship/red/full, @@ -3264,6 +3159,13 @@ /obj/structure/window/framed/mainship, /turf/open/floor/plating, /area/mainship/living/numbertwobunks) +"ean" = ( +/obj/machinery/door/airlock/mainship/evacuation{ + dir = 8 + }, +/obj/structure/sign/evac, +/turf/open/floor/mainship/mono, +/area/mainship/living/chapel) "eaH" = ( /obj/structure/bed/chair/comfy/black{ dir = 1 @@ -3282,17 +3184,21 @@ /obj/machinery/light/mainship{ dir = 8 }, -/turf/open/floor/mainship/mono, +/turf/open/floor/iron/kitchen, /area/mainship/living/grunt_rnr) "ebE" = ( /obj/machinery/telecomms/broadcaster/preset_left, /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) "ecb" = ( -/obj/item/clothing/head/warning_cone, /obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 + dir = 8 }, +/obj/machinery/landinglight/cas{ + dir = 8; + pixel_x = 4 + }, +/obj/effect/turf_decal/warning_stripes/thin, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "edj" = ( @@ -3325,11 +3231,11 @@ /obj/structure/cable, /obj/structure/disposalpipe/segment, /obj/effect/ai_node, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 5 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) @@ -3368,12 +3274,6 @@ /obj/structure/cable, /turf/open/floor/cult, /area/medical/morgue) -"efa" = ( -/obj/machinery/computer/mech_builder{ - dir = 8 - }, -/turf/open/floor/plating, -/area/mainship/living/tankerbunks) "efy" = ( /turf/open/floor/carpet/side{ dir = 4 @@ -3385,12 +3285,11 @@ }, /area/mainship/living/commandbunks) "egn" = ( -/obj/machinery/power/apc{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/aft_hallway) +/obj/structure/table/mainship/nometal, +/obj/item/folder/yellow, +/obj/item/tool/pen, +/turf/open/floor/mainship/floor, +/area/mainship/living/briefing) "egI" = ( /obj/machinery/door/firedoor/mainship{ dir = 2; @@ -3402,22 +3301,23 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "egW" = ( -/obj/machinery/door/airlock/multi_tile/mainship/maint{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/door/firedoor/multi_tile{ - dir = 1 - }, -/turf/open/floor/plating/mainship, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/turf/open/floor/mainship/mono, /area/mainship/living/bridgebunks) "ehf" = ( /obj/docking_port/stationary/marine_dropship/hangar/one, /obj/docking_port/stationary/marine_dropship/crash_target, /turf/open/floor/plating, /area/mainship/hallways/hangar) +"eho" = ( +/obj/effect/ai_node, +/obj/machinery/light/mainship{ + dir = 4 + }, +/turf/open/floor/mainship/white{ + dir = 4 + }, +/area/mainship/living/pilotbunks) "ehw" = ( /obj/effect/turf_decal/warning_stripes/box/small{ dir = 1 @@ -3429,18 +3329,6 @@ dir = 4 }, /area/mainship/squads/general) -"ehR" = ( -/obj/machinery/vending/nanomed, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/turf/open/floor/mainship/cargo/arrow{ - dir = 8 - }, -/area/mainship/hallways/hangar/droppod) "eiu" = ( /obj/machinery/door/airlock/mainship/maint/free_access, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -3523,7 +3411,7 @@ /area/mainship/engineering/port_atmos) "elQ" = ( /obj/structure/sign/poster, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/general) "emg" = ( /turf/closed/wall/mainship/research/containment/wall/purple{ @@ -3535,9 +3423,9 @@ /turf/open/floor/wood, /area/mainship/living/numbertwobunks) "emm" = ( -/obj/structure/bed/chair/wood/wings, -/turf/open/floor/tile/chapel{ - dir = 4 +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/mainship/silver{ + dir = 8 }, /area/mainship/living/chapel) "emY" = ( @@ -3564,12 +3452,10 @@ /turf/open/floor/wood, /area/mainship/living/commandbunks) "esH" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/obj/structure/table/mainship/nometal, +/obj/item/megaphone, +/turf/open/floor/mainship/floor, +/area/mainship/living/briefing) "esN" = ( /turf/closed/wall/mainship/outer, /area/mainship/hull/lower_hull) @@ -3589,20 +3475,6 @@ dir = 1 }, /area/mainship/squads/general) -"etI" = ( -/obj/structure/rack, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/rack, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/mainship/red{ - dir = 6 - }, -/area/mainship/shipboard/weapon_room) "euc" = ( /obj/structure/closet/walllocker/hydrant/extinguisher, /turf/open/floor/mainship/sterile/purple/side{ @@ -3631,19 +3503,15 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/stern_hallway) "exv" = ( -/obj/structure/cable, -/obj/machinery/door/firedoor/mainship{ - dir = 2; - id = "hangar_lockdown" - }, -/obj/machinery/door/poddoor/shutters/mainship/open/hangar{ +/obj/machinery/door/poddoor/mainship/mech{ dir = 1 }, -/obj/structure/stairs/seamless/platform_vert{ - dir = 1 +/obj/machinery/door/firedoor/mainship{ + dir = 2 }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar/droppod) +/obj/structure/cable, +/turf/open/floor/mainship/stripesquare, +/area/mainship/living/mechpilotquarters) "exV" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -3655,6 +3523,16 @@ /obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/squads/req) +"eye" = ( +/obj/effect/ai_node, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/effect/turf_decal/warning_stripes/thick/corner, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) "eyX" = ( /obj/structure/window/framed/mainship/hull, /turf/open/floor/plating, @@ -3684,10 +3562,7 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_hallway) "ezY" = ( -/obj/structure/bed/stool{ - pixel_y = 8 - }, -/obj/structure/flora/ausbushes/ywflowers, +/obj/structure/flora/tree/dead, /turf/open/floor/grass, /area/mainship/living/starboard_garden) "eAd" = ( @@ -3757,6 +3632,13 @@ /obj/machinery/door/poddoor/shutters/mainship/cell/cell1, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/medical_science) +"eFh" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "eFi" = ( /obj/machinery/light/mainship, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -3766,12 +3648,12 @@ dir = 4 }, /obj/structure/cable, +/mob/living/simple_animal/mouse, /turf/open/floor/mainship/orange, /area/mainship/engineering/lower_engineering) "eFA" = ( -/turf/open/floor/mainship/green/corner{ - dir = 4 - }, +/obj/item/clothing/head/warning_cone, +/turf/open/floor/mainship/mono, /area/mainship/squads/req) "eFC" = ( /turf/open/floor/carpet/side{ @@ -3826,23 +3708,41 @@ /obj/machinery/camera/autoname/mainship, /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) +"eKC" = ( +/obj/machinery/light/mainship{ + dir = 4 + }, +/obj/item/clothing/head/warning_cone, +/turf/open/floor/mainship/yellow_cargo, +/area/mainship/hallways/hangar/droppod) "eLq" = ( /obj/machinery/door/poddoor/mainship/open/cic, /obj/machinery/door/firedoor/mainship, /turf/open/floor/mainship/mono, /area/mainship/command/cic) +"eLs" = ( +/obj/item/clothing/head/modular/marine, +/obj/structure/flora/ausbushes/brflowers, +/turf/open/floor/grass, +/area/mainship/living/starboard_garden) "eLt" = ( /obj/item/stool, /obj/effect/decal/cleanable/blood, /obj/effect/landmark/corpsespawner/prisoner/regular, /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) +"eLM" = ( +/obj/machinery/loadout_vendor, +/turf/open/floor/mainship/white{ + dir = 9 + }, +/area/mainship/living/pilotbunks) "eMx" = ( /obj/machinery/light/mainship, /turf/open/floor/mainship/mono, /area/mainship/hallways/port_hallway) "eMz" = ( -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/general) "eMJ" = ( /obj/item/facepaint/green, @@ -3868,13 +3768,30 @@ /obj/effect/ai_node, /turf/open/floor/wood, /area/mainship/command/corporateliaison) +"eOG" = ( +/obj/structure/table/mainship/nometal, +/obj/machinery/cell_charger, +/obj/effect/spawner/random/engineering/powercell, +/obj/effect/spawner/random/engineering/powercell, +/obj/machinery/light/mainship{ + dir = 8 + }, +/turf/open/floor/mainship/green{ + dir = 10 + }, +/area/mainship/squads/req) "eOT" = ( /obj/effect/turf_decal/warning_stripes/thin, /turf/open/shuttle/escapepod/eight, /area/mainship/command/self_destruct) "ePE" = ( -/obj/machinery/vending/nanomed, -/turf/open/floor/mainship/mono, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) "eQg" = ( /obj/effect/turf_decal/warning_stripes/medical, @@ -3892,6 +3809,13 @@ dir = 10 }, /area/mainship/medical/lower_medical) +"eSw" = ( +/obj/machinery/door/airlock/mainship/generic{ + dir = 1; + name = "Bathroom" + }, +/turf/open/floor/mainship/mono, +/area/crew_quarters/toilet) "eSy" = ( /obj/machinery/door/airlock/mainship/maint{ dir = 1 @@ -3904,11 +3828,11 @@ /turf/open/floor/mainship/mono, /area/mainship/medical/medical_science) "eTC" = ( -/obj/structure/closet/secure_closet/engineering_personal, -/obj/item/storage/backpack/marine/engineerpack, -/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/machinery/light/mainship{ + dir = 8 + }, /turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/area/mainship/living/briefing) "eTN" = ( /turf/open/floor/mainship/red/full, /area/mainship/shipboard/firing_range) @@ -3958,6 +3882,15 @@ /obj/item/trash/cigbutt, /turf/open/floor/wood, /area/mainship/living/cryo_cells) +"eXm" = ( +/obj/machinery/door/poddoor/railing{ + dir = 8; + id = "supply_elevator_railing" + }, +/turf/open/floor/mainship/cargo/arrow{ + dir = 4 + }, +/area/mainship/squads/req) "eYx" = ( /turf/open/floor/mainship/black{ dir = 1 @@ -3983,9 +3916,9 @@ /turf/open/floor/mainship/mono, /area/mainship/command/cic) "eZp" = ( -/obj/machinery/holopad, +/obj/machinery/door/airlock/mainship/generic, /turf/open/floor/mainship/floor, -/area/mainship/living/pilotbunks) +/area/mainship/living/tankerbunks) "faw" = ( /obj/structure/bed/chair/nometal{ dir = 1 @@ -4005,6 +3938,16 @@ /obj/item/binoculars, /turf/open/floor/wood, /area/mainship/living/numbertwobunks) +"faF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/squads/req) "faM" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -4018,6 +3961,8 @@ /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) "fbL" = ( +/obj/structure/table/mainship/nometal, +/obj/machinery/door_control/old/req, /turf/open/floor/mainship/green{ dir = 6 }, @@ -4034,7 +3979,7 @@ on = 1 }, /obj/machinery/vending/nanomed, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/hexagon, /area/mainship/engineering/engine_core) "fbT" = ( /obj/effect/attach_point/weapon/dropship1, @@ -4115,18 +4060,19 @@ /obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) -"fgF" = ( -/obj/structure/cable, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/engineering/engine_core) "fgI" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/turf/open/floor/mainship/cargo/arrow{ - dir = 1 - }, -/area/mainship/hallways/hangar/droppod) +/obj/structure/rack, +/obj/item/tool/crowbar, +/obj/effect/spawner/random/engineering/toolbox, +/obj/item/stack/cable_coil, +/obj/item/assembly/timer, +/obj/item/assembly/infra, +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) +"fgN" = ( +/obj/structure/sign/poster, +/turf/open/floor/wood, +/area/mainship/living/pilotbunks) "fgW" = ( /obj/structure/table/mainship/nometal, /obj/machinery/computer/security/marinemainship{ @@ -4138,13 +4084,24 @@ }, /area/mainship/command/cic) "fiq" = ( +/obj/structure/closet/secure_closet/pilot_officer, +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/mainship/living/pilotbunks) +"fku" = ( +/obj/effect/ai_node, /obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 + dir = 1 }, -/obj/effect/ai_node, -/obj/machinery/landinglight/cas{ - dir = 8; - pixel_x = 4 +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) @@ -4156,7 +4113,7 @@ dir = 4 }, /obj/machinery/air_alarm, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/hexagon, /area/mainship/engineering/engine_core) "flk" = ( /obj/machinery/door_control/ai/exterior{ @@ -4199,16 +4156,20 @@ }, /turf/open/floor/mainship/cargo, /area/mainship/shipboard/firing_range) +"fnS" = ( +/obj/structure/closet, +/obj/item/clothing/under/rank/prisoner, +/turf/open/floor/plating/mainship, +/area/mainship/shipboard/brig) "foj" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, /obj/structure/sign/poster, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/general) "fol" = ( /obj/effect/ai_node, -/obj/structure/disposalpipe/segment, /turf/open/floor/mainship/ntlogo/nt2, /area/mainship/command/corporateliaison) "fom" = ( @@ -4250,6 +4211,10 @@ }, /turf/open/floor/mainship/mono, /area/mainship/command/corporateliaison) +"fpg" = ( +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/mainship/living/tankerbunks) "fpB" = ( /obj/structure/sign/prop4, /turf/closed/wall/mainship, @@ -4275,12 +4240,6 @@ /obj/machinery/computer/emails, /turf/open/floor/mainship/mono, /area/mainship/engineering/ce_room) -"frc" = ( -/obj/structure/bed/chair/wood/wings, -/turf/open/floor/tile/chapel{ - dir = 8 - }, -/area/mainship/living/chapel) "frR" = ( /obj/structure/cable, /turf/closed/wall/mainship, @@ -4299,12 +4258,6 @@ /obj/machinery/smartfridge/chemistry, /turf/open/floor/plating/platebotc, /area/mainship/medical/chemistry) -"ftT" = ( -/obj/structure/bed/chair/wood/wings, -/turf/open/floor/tile/chapel{ - dir = 1 - }, -/area/mainship/living/chapel) "ftY" = ( /obj/structure/table/woodentable, /turf/open/floor/wood, @@ -4321,11 +4274,26 @@ /obj/effect/spawner/random/misc/table_lighting, /turf/open/floor/mainship/mono, /area/mainship/medical/upper_medical) +"fvA" = ( +/turf/open/floor/mainship/floor, +/area/mainship/shipboard/brig) "fvB" = ( /obj/structure/table/mainship/nometal, /obj/machinery/faxmachine/research, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/medical_science) +"fvD" = ( +/obj/structure/table/mainship/nometal, +/obj/item/folder/black, +/obj/item/book/manual/orbital_cannon_manual, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) "fvY" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -4346,11 +4314,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) -"fwA" = ( -/obj/structure/table/woodentable, -/obj/effect/spawner/random/misc/table_lighting, -/turf/open/floor/wood, -/area/mainship/living/chapel) "fxO" = ( /obj/structure/cable, /obj/effect/ai_node, @@ -4361,13 +4324,14 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) "fyc" = ( -/obj/machinery/air_alarm, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/air_alarm, /turf/open/floor/mainship/mono, /area/mainship/living/bridgebunks) "fyH" = ( @@ -4378,7 +4342,7 @@ /area/mainship/living/commandbunks) "fyR" = ( /obj/structure/cable, -/turf/open/floor/mainship/mono, +/turf/closed/wall/mainship, /area/mainship/living/starboard_garden) "fza" = ( /obj/structure/disposalpipe/segment, @@ -4424,19 +4388,11 @@ /turf/closed/wall/mainship, /area/crew_quarters/toilet) "fAP" = ( -/obj/effect/ai_node, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable, -/obj/structure/bed/chair/wood/wings, -/turf/open/floor/tile/chapel{ - dir = 1 +/obj/machinery/vending/weapon, +/turf/open/floor/mainship/white{ + dir = 9 }, -/area/mainship/living/chapel) +/area/mainship/living/pilotbunks) "fBs" = ( /obj/machinery/air_alarm, /turf/open/floor/mainship/orange{ @@ -4474,6 +4430,15 @@ dir = 8 }, /area/mainship/command/cic) +"fDn" = ( +/obj/machinery/light/mainship{ + dir = 4 + }, +/obj/structure/bed/chair/sofa{ + dir = 8 + }, +/turf/open/floor/wood, +/area/mainship/living/grunt_rnr) "fDJ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -4514,10 +4479,6 @@ /obj/machinery/vending/weapon, /turf/open/floor/mainship/floor, /area/mainship/squads/general) -"fFa" = ( -/obj/structure/cable, -/turf/open/floor/mainship/cargo, -/area/mainship/engineering/engine_core) "fFd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/structure/stairs/edge{ @@ -4525,8 +4486,16 @@ }, /turf/open/floor/tile/dark, /area/mainship/command/cic) +"fFo" = ( +/obj/structure/flora/ausbushes/brflowers, +/obj/structure/bed/stool{ + pixel_y = 8 + }, +/turf/open/floor/grass, +/area/mainship/living/starboard_garden) "fFD" = ( /obj/machinery/holopad, +/obj/effect/landmark/start/job/researcher, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/medical_science) "fGe" = ( @@ -4540,16 +4509,25 @@ dir = 1 }, /obj/structure/cable, -/obj/structure/disposalpipe/segment/corner{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/mainship/sterile/dark, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door_control{ + dir = 1; + id = "or1privacyshutter"; + name = "Privacy Shutters"; + pixel_x = -5; + pixel_y = 10 + }, +/turf/open/floor/mainship/sterile/corner{ + dir = 4 + }, /area/mainship/medical/operating_room_one) "fGZ" = ( /obj/effect/turf_decal/warning_stripes/thin{ @@ -4571,19 +4549,20 @@ /turf/open/floor/plating/mainship, /area/mainship/command/cic) "fIb" = ( -/turf/open/floor/mainship/terragov/north{ - dir = 4 - }, +/obj/structure/table/mainship/nometal, +/obj/item/folder/grape, +/obj/item/tool/pen, +/obj/item/whistle, +/turf/open/floor/mainship/mono, /area/mainship/living/briefing) -"fIm" = ( -/obj/structure/prop/mainship/cannon_cables, -/turf/open/floor/plating/mainship, -/area/mainship/shipboard/weapon_room) "fIt" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 }, -/obj/structure/ship_ammo/cas/rocket/widowmaker, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/mob/living/simple_animal/mouse, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "fJI" = ( @@ -4599,11 +4578,25 @@ }, /area/mainship/squads/general) "fKh" = ( -/obj/machinery/door/poddoor/mainship/umbilical/south{ - dir = 8 +/obj/structure/window/framed/mainship/white, +/obj/machinery/door/poddoor/shutters/opened/medbay, +/obj/machinery/holosign_switch{ + id = "or1sign"; + pixel_x = 0; + pixel_y = 0 }, -/turf/open/floor/mainship/stripesquare, -/area/mainship/shipboard/weapon_room) +/obj/machinery/door/poddoor/shutters/mainship{ + dir = 1; + id = "or2privacyshutter"; + name = "\improper Privacy Shutters" + }, +/obj/machinery/door/poddoor/shutters/mainship{ + dir = 1; + id = "or1privacyshutter"; + name = "\improper Privacy Shutters" + }, +/turf/open/floor/plating/platebotc, +/area/mainship/medical/operating_room_one) "fKj" = ( /obj/structure/table/mainship/nometal, /obj/item/reagent_containers/food/condiment/peppermill, @@ -4703,23 +4696,30 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/operating_room_one) +"fTZ" = ( +/obj/machinery/computer/squad_selector, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "fUs" = ( /obj/machinery/light/mainship{ dir = 1 }, /turf/open/floor/mainship/mono, /area/mainship/hallways/starboard_hallway) -"fUI" = ( -/obj/machinery/door/firedoor/mainship{ - dir = 2; - id = "hangar_lockdown" +"fXg" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 9 }, -/obj/machinery/door/poddoor/shutters/mainship/open/hangar{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 }, -/obj/structure/stairs/seamless/platform_vert, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/floodlight/landing, /turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar/droppod) +/area/mainship/squads/req) "fXL" = ( /obj/machinery/door/poddoor/shutters/mainship/selfdestruct, /obj/machinery/keycard_auth, @@ -4735,6 +4735,16 @@ dir = 4 }, /area/mainship/medical/lower_medical) +"fYa" = ( +/obj/machinery/light/mainship{ + dir = 4 + }, +/obj/structure/closet/secure_closet/shiptech, +/obj/item/lightreplacer, +/obj/item/lightreplacer, +/obj/item/lightreplacer, +/turf/open/floor/mainship/yellow_cargo, +/area/mainship/squads/req) "fYk" = ( /obj/machinery/conveyor_switch{ id = "garbage" @@ -4754,21 +4764,24 @@ /turf/open/floor/mainship/cargo/arrow, /area/mainship/squads/general) "fYT" = ( -/obj/machinery/optable, -/obj/item/tank/anesthetic, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal, /turf/open/floor/mainship/sterile/side{ dir = 4 }, /area/mainship/medical/operating_room_two) "fZH" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ +/obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/effect/spawner/random/misc/structure/showcase, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/mainship/silver{ + dir = 5 }, -/obj/structure/cable, -/turf/open/floor/wood, /area/mainship/living/chapel) "fZP" = ( /obj/machinery/power/apc/mainship, @@ -4780,6 +4793,38 @@ dir = 1 }, /area/mainship/medical/chemistry) +"fZX" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ + dir = 8; + on = 1 + }, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) +"gaz" = ( +/obj/machinery/vending/marineFood, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/turf/open/floor/mainship/black{ + dir = 4 + }, +/area/mainship/squads/general) "gaC" = ( /obj/structure/table/mainship/nometal, /obj/effect/spawner/random/engineering/extinguisher/miniweighted, @@ -4828,6 +4873,9 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 5 + }, /turf/open/floor/mainship/mono, /area/mainship/engineering/upper_engineering) "gbJ" = ( @@ -4840,20 +4888,35 @@ /area/mainship/living/starboard_garden) "gcd" = ( /obj/structure/cable, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, +/obj/machinery/optable, +/obj/item/tank/anesthetic, /turf/open/floor/mainship/sterile/side{ dir = 4 }, /area/mainship/medical/operating_room_one) "gcr" = ( -/obj/structure/disposalpipe/segment/corner{ - dir = 4 - }, /obj/structure/cable, -/obj/effect/ai_node, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) +"gdb" = ( +/obj/structure/rack, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/turf/open/floor/mainship/hexagon, +/area/mainship/shipboard/weapon_room) "gdj" = ( /obj/structure/table/mainship/nometal, /obj/item/clothing/glasses/welding, @@ -4900,12 +4963,11 @@ /turf/open/floor/wood, /area/mainship/living/grunt_rnr) "ghW" = ( -/obj/machinery/light/mainship{ - dir = 4 +/obj/structure/bed/chair/nometal{ + dir = 1 }, -/obj/effect/spawner/random/misc/structure/flavorvending/snackweighted, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/turf/open/floor/mainship/blue/full, +/area/mainship/living/briefing) "gim" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -4923,6 +4985,15 @@ /obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/hallways/stern_hallway) +"giN" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, +/obj/machinery/light/mainship{ + light_color = "#da2f1b" + }, +/turf/open/floor/mainship/floor, +/area/mainship/hallways/hangar/droppod) "giW" = ( /obj/machinery/door/airlock/mainship/medical/glass/CMO{ dir = 1 @@ -4937,16 +5008,12 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "gkp" = ( -/obj/item/clothing/head/warning_cone, -/obj/effect/turf_decal/warning_stripes/thin{ +/obj/structure/table/mainship/nometal, +/obj/item/storage/firstaid/regular, +/turf/open/floor/mainship/white{ dir = 1 }, -/obj/machinery/landinglight/cas{ - dir = 1; - pixel_y = -4 - }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/area/mainship/living/pilotbunks) "gkL" = ( /obj/effect/soundplayer, /turf/closed/wall/mainship, @@ -4998,9 +5065,7 @@ /obj/machinery/firealarm, /obj/structure/cable, /obj/effect/ai_node, -/turf/open/floor/mainship/orange{ - dir = 5 - }, +/turf/open/floor/mainship/hexagon, /area/mainship/engineering/engine_core) "gmH" = ( /obj/structure/cable, @@ -5017,21 +5082,10 @@ /turf/open/floor/mainship/mono, /area/mainship/command/cic) "gnK" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/port_hallway) -"gnS" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/mono, -/area/mainship/living/briefing) +/obj/machinery/holopad, +/obj/machinery/iv_drip, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/lower_medical) "goh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -5078,9 +5132,23 @@ /area/mainship/engineering/engineering_workshop) "gpC" = ( /obj/structure/cable, -/obj/structure/closet/secure_closet/medical2, +/obj/machinery/iv_drip, +/obj/machinery/power/apc/mainship, +/obj/item/reagent_containers/blood/OPlus, /turf/open/floor/mainship/sterile/corner, /area/mainship/medical/operating_room_one) +"gpU" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/light/mainship/small{ + dir = 8 + }, +/obj/effect/landmark/corpsespawner/bridgeofficer/regular, +/obj/effect/decal/cleanable/blood, +/obj/item/toy/katana, +/turf/open/floor/mainship/sterile/white, +/area/mainship/living/bridgebunks) "gqB" = ( /obj/item/defibrillator, /obj/item/defibrillator, @@ -5092,6 +5160,9 @@ /area/mainship/medical/lower_medical) "gqI" = ( /obj/machinery/vending/uniform_supply, +/obj/structure/closet/walllocker/hydrant/extinguisher{ + dir = 8 + }, /turf/open/floor/mainship/green{ dir = 4 }, @@ -5116,22 +5187,18 @@ /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) "gup" = ( -/obj/effect/ai_node, /obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 + dir = 1 }, -/obj/machinery/landinglight/cas{ - dir = 4; - pixel_x = -4 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 5 }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "guG" = ( -/obj/machinery/vending/uniform_supply, -/turf/open/floor/mainship/white{ - dir = 8 - }, -/area/mainship/living/pilotbunks) +/obj/effect/turf_decal/warning_stripes/thick, +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) "guJ" = ( /obj/machinery/light/mainship/small{ dir = 8 @@ -5150,9 +5217,16 @@ }, /area/mainship/command/cic) "gvv" = ( -/obj/effect/ai_node, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, /turf/open/floor/mainship/cargo/arrow, /area/mainship/hallways/hangar) +"gvN" = ( +/obj/structure/cable, +/obj/machinery/power/apc/mainship, +/turf/open/floor/plating/mainship, +/area/mainship/shipboard/brig) "gwK" = ( /obj/structure/bed/chair/comfy{ dir = 1 @@ -5166,16 +5240,6 @@ }, /turf/open/floor/mainship/floor, /area/mainship/living/numbertwobunks) -"gwQ" = ( -/obj/effect/decal/cleanable/blood/gibs/robot, -/turf/open/floor/mech_bay_recharge_floor, -/area/mainship/living/tankerbunks) -"gxA" = ( -/obj/machinery/firealarm, -/turf/open/floor/mainship/black{ - dir = 1 - }, -/area/mainship/living/pilotbunks) "gxL" = ( /obj/machinery/marine_selector/clothes/engi, /turf/open/floor/mainship, @@ -5191,10 +5255,18 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) +"gAS" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/item/reagent_containers/food/snacks/grown/poppy, +/obj/item/clothing/head/modular/marine/helljumper, +/turf/open/floor/grass, +/area/mainship/living/starboard_garden) "gBQ" = ( -/obj/structure/closet/secure_closet/pilot_officer, +/obj/structure/bed/chair/wood/wings{ + dir = 4 + }, /turf/open/floor/wood, -/area/mainship/living/pilotbunks) +/area/mainship/living/tankerbunks) "gCk" = ( /obj/structure/closet/toolcloset, /turf/open/floor/mainship/orange{ @@ -5219,12 +5291,6 @@ dir = 5 }, /area/mainship/living/numbertwobunks) -"gFu" = ( -/obj/machinery/door/poddoor/mainship/mech{ - dir = 1 - }, -/turf/open/floor/mainship/mono, -/area/mainship/living/tankerbunks) "gFW" = ( /obj/machinery/marine_selector/gear/engi, /turf/open/floor/mainship, @@ -5243,12 +5309,8 @@ /turf/open/floor/mainship/mono, /area/mainship/command/telecomms) "gGg" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 10 - }, -/obj/item/clothing/head/warning_cone, /turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/area/mainship/living/briefing) "gHU" = ( /obj/structure/bed/chair/nometal, /turf/open/floor/mainship/mono, @@ -5265,13 +5327,19 @@ dir = 4 }, /obj/effect/ai_node, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/hallways/hangar) "gKv" = ( -/obj/structure/cable, -/turf/open/floor/mainship/white{ +/obj/machinery/light/mainship{ dir = 4 }, +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) +"gKG" = ( +/obj/machinery/door/airlock/mainship/generic/pilot/bunk{ + dir = 1 + }, +/turf/open/floor/mainship/floor, /area/mainship/living/pilotbunks) "gKP" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -5328,7 +5396,10 @@ /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) "gPw" = ( -/obj/structure/ship_ammo/cas/rocket/keeper, +/obj/structure/ship_ammo/cas/bomblet, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "gPQ" = ( @@ -5376,30 +5447,38 @@ /area/mainship/hallways/hangar) "gSr" = ( /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk, /area/mainship/command/cic) "gSJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/vending/uniform_supply, +/turf/open/floor/mainship/white{ + dir = 1 + }, +/area/mainship/living/pilotbunks) +"gSN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 9 }, -/obj/structure/cable, /turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/area/mainship/hallways/hangar/droppod) "gTg" = ( -/turf/open/floor/mainship/terragov/north{ - dir = 5 - }, -/area/mainship/living/briefing) -"gTA" = ( /obj/structure/table/mainship/nometal, -/obj/item/folder/red, +/obj/item/folder/blue, /obj/item/tool/pen, /turf/open/floor/mainship/mono, /area/mainship/living/briefing) +"gTA" = ( +/obj/machinery/light/mainship{ + dir = 1 + }, +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "gUa" = ( /turf/open/floor/plating, /area/mainship/squads/req) @@ -5408,20 +5487,15 @@ /turf/open/floor/mainship, /area/mainship/squads/general) "gUp" = ( -/obj/machinery/door/firedoor/mainship, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/mainship/maint, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/door/airlock/multi_tile/mainship/generic/personal{ + dir = 2; + name = "Pilot Bunks" }, -/obj/machinery/door/poddoor/shutters/mainship/open/hangar{ - dir = 8 +/obj/machinery/door/firedoor/multi_tile{ + dir = 2 }, /turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/area/mainship/living/pilotbunks) "gUJ" = ( /obj/structure/table/fancywoodentable, /turf/open/floor/mainship/floor, @@ -5437,15 +5511,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) -"gVQ" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 - }, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) "gVZ" = ( /obj/effect/turf_decal/warning_stripes/thick, /obj/effect/turf_decal/warning_stripes/thick{ @@ -5495,6 +5560,12 @@ "gYy" = ( /turf/open/floor/mainship/green/corner, /area/mainship/squads/req) +"gYD" = ( +/obj/machinery/door/airlock/mainship/evacuation{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/chapel) "gYL" = ( /obj/machinery/door/firedoor/mainship, /obj/machinery/door/airlock/mainship/marine/general/sl, @@ -5529,15 +5600,6 @@ /obj/item/frame/table/gambling, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) -"hbh" = ( -/obj/structure/droppod, -/obj/structure/drop_pod_launcher, -/obj/effect/decal/cleanable/blood/writing{ - desc = "It looks like a writing in blood. It says, 'I am missing and forgotten.'"; - dir = 4 - }, -/turf/open/floor/mainship/cargo, -/area/mainship/hallways/hangar/droppod) "hcb" = ( /obj/machinery/door/airlock/multi_tile/mainship/maint{ dir = 1 @@ -5560,6 +5622,12 @@ "hcF" = ( /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar) +"hdc" = ( +/obj/machinery/light/mainship{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/starboard_garden) "hdY" = ( /obj/machinery/holopad, /turf/open/floor/mainship/black{ @@ -5599,7 +5667,7 @@ /turf/open/floor/mainship, /area/mainship/squads/general) "hgl" = ( -/obj/structure/prop/mainship/hangar_stencil/two, +/obj/vehicle/ridden/motorbike, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "hgP" = ( @@ -5640,16 +5708,11 @@ dir = 5 }, /area/mainship/command/cic) -"hiK" = ( -/obj/structure/largecrate/guns/russian, -/obj/item/reagent_containers/jerrycan, -/turf/open/floor/mainship/office, -/area/mainship/hallways/hangar) "hiO" = ( -/obj/structure/ship_ammo/cas/minirocket, /obj/machinery/light/mainship{ dir = 1 }, +/obj/structure/ship_ammo/cas/rocket/widowmaker, /turf/open/floor/mainship/cargo, /area/mainship/hallways/hangar) "hjG" = ( @@ -5675,28 +5738,25 @@ /obj/effect/spawner/random/food_or_drink/sugary_snack, /turf/open/floor/mainship, /area/mainship/squads/general) +"hlS" = ( +/obj/machinery/camera/autoname/mainship{ + dir = 4 + }, +/obj/structure/disposalpipe/segment/corner{ + dir = 1 + }, +/obj/effect/ai_node, +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/port_umbilical) "hme" = ( /obj/machinery/status_display, /turf/closed/wall/mainship, /area/mainship/squads/general) -"hmu" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/hangar) -"hmA" = ( -/obj/structure/bed/chair/wood/wings, -/turf/open/floor/tile/chapel, -/area/mainship/living/chapel) "hmH" = ( /obj/machinery/light/mainship, /obj/structure/sign/prop1, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/general) "hnk" = ( /obj/structure/cable, @@ -5735,12 +5795,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_hallway) -"hoo" = ( -/obj/machinery/firealarm{ - dir = 4 - }, -/turf/open/floor/wood, -/area/mainship/living/chapel) "hoB" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -5762,9 +5816,15 @@ }, /area/mainship/living/numbertwobunks) "hpW" = ( -/obj/structure/sign/restroom, -/turf/closed/wall/mainship, -/area/crew_quarters/toilet) +/obj/effect/decal/cleanable/blood/gibs/robot, +/turf/open/floor/mainship/hexagon, +/area/mainship/living/mechpilotquarters) +"hqb" = ( +/obj/structure/bed/fancy, +/obj/item/bedsheet/captain, +/obj/machinery/light/mainship, +/turf/open/floor/mainship/floor, +/area/mainship/shipboard/brig) "hqJ" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -5809,58 +5869,63 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) +"hvL" = ( +/turf/open/floor/mainship/mono, +/area/mainship/living/bridgebunks) "hvM" = ( /obj/structure/target_stake, /turf/open/floor/mainship/red{ dir = 4 }, /area/mainship/shipboard/firing_range) +"hvY" = ( +/obj/machinery/vending/armor_supply, +/turf/open/floor/mainship/white{ + dir = 5 + }, +/area/mainship/living/pilotbunks) +"hwp" = ( +/obj/machinery/light/mainship/small{ + dir = 8 + }, +/turf/open/floor/plating/mainship, +/area/mainship/shipboard/brig) "hwU" = ( /obj/machinery/door/airlock/mainship/marine/general/engi, /obj/machinery/door/firedoor/mainship, /turf/open/floor/mainship, /area/mainship/squads/general) +"hwZ" = ( +/obj/structure/prop/mainship/valmoric, +/turf/open/floor/grass, +/area/mainship/living/starboard_garden) "hxc" = ( /obj/machinery/vending/armor_supply, /turf/open/floor/mainship/black{ dir = 1 }, /area/mainship/squads/general) +"hxz" = ( +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) "hzc" = ( /obj/machinery/door/airlock/mainship/command/CPTstudy, /turf/open/floor/wood, /area/mainship/living/commandbunks) "hzD" = ( /obj/machinery/cic_maptable, +/obj/machinery/vending/nanomed{ + dir = 4 + }, /turf/open/floor/mainship/green{ dir = 8 }, /area/mainship/squads/req) "hCx" = ( -/obj/machinery/door/firedoor/mainship{ - dir = 2 - }, -/obj/machinery/door/poddoor/mainship/ammo{ - dir = 2; - id = null; - name = "\improper Hangar Launch Hatch" - }, -/turf/closed/wall/mainship/outer, -/area/mainship/hallways/hangar) -"hCG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/ai_node, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) +/obj/machinery/camera/autoname/mainship, +/turf/open/floor/mainship/hexagon, +/area/mainship/living/mechpilotquarters) "hDg" = ( /obj/machinery/power/apc, /obj/structure/cable, @@ -5887,10 +5952,9 @@ /turf/open/floor/mainship/mono, /area/mainship/engineering/port_atmos) "hEa" = ( -/obj/machinery/light/mainship{ - dir = 4 - }, -/obj/structure/closet/firecloset, +/obj/structure/closet/toolcloset, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/cargo, /area/mainship/hallways/hangar) "hEy" = ( @@ -5901,33 +5965,13 @@ /turf/closed/wall/mainship, /area/mainship/command/corporateliaison) "hFt" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, /obj/effect/ai_node, -/obj/machinery/landinglight/tadpole{ - dir = 4; - pixel_x = -4 - }, /turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) -"hFL" = ( -/obj/effect/ai_node, -/obj/structure/cable, -/turf/open/floor/mainship/mono, -/area/mainship/hull/lower_hull) +/area/mainship/living/briefing) "hFZ" = ( /obj/machinery/floodlight/landing, /turf/open/floor/plating, /area/mainship/hallways/hangar) -"hGi" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/turf/open/floor/mainship/black/corner{ - dir = 4 - }, -/area/mainship/living/tankerbunks) "hGE" = ( /obj/machinery/marine_selector/clothes/engi, /obj/machinery/light/mainship, @@ -5948,6 +5992,12 @@ "hHH" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, +/obj/effect/ai_node, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 8 + }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "hId" = ( @@ -5985,9 +6035,6 @@ /obj/structure/closet/bodybag, /turf/open/floor/mainship/orange, /area/mainship/engineering/lower_engineering) -"hJa" = ( -/turf/open/floor/mech_bay_recharge_floor, -/area/mainship/living/tankerbunks) "hJe" = ( /obj/structure/bed/bunkbed, /obj/effect/landmark/start/job/squadsmartgunner, @@ -6020,6 +6067,8 @@ pixel_x = 2; pixel_y = -1 }, +/obj/item/stack/medical/heal_pack/advanced/burn_pack, +/obj/item/stack/medical/heal_pack/advanced/bruise_pack, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) "hMB" = ( @@ -6043,11 +6092,24 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) "hNd" = ( -/obj/machinery/air_alarm{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, /turf/open/floor/mainship/mono, /area/mainship/hallways/aft_hallway) +"hOe" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "hOm" = ( /obj/item/trash/buritto, /turf/open/floor/wood, @@ -6064,9 +6126,19 @@ }, /turf/open/floor/mainship/mono, /area/mainship/command/self_destruct) +"hPp" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, +/obj/machinery/light/mainship{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/turf/open/floor/mainship/floor, +/area/mainship/hallways/hangar/droppod) "hPG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/mainship/cargo/arrow, +/turf/open/floor/mainship/yellow_cargo/arrow, /area/mainship/squads/general) "hPQ" = ( /obj/effect/ai_node, @@ -6119,19 +6191,10 @@ /turf/open/floor/mainship/mono, /area/mainship/living/numbertwobunks) "hSb" = ( -/obj/machinery/door/poddoor/railing{ - dir = 1; - id = "supply_elevator_railing" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/turf/open/floor/mainship/floor, -/area/mainship/squads/req) +/obj/structure/bed/chair/wood/normal, +/obj/item/reagent_containers/jerrycan, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "hSc" = ( /obj/machinery/light/mainship/small, /turf/open/floor/mainship/research/containment/floor2, @@ -6158,7 +6221,9 @@ /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 }, -/obj/structure/ship_ammo/cas/rocket/banshee, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) "hSQ" = ( @@ -6172,9 +6237,10 @@ /turf/open/floor/wood, /area/mainship/command/corporateliaison) "hTr" = ( -/turf/open/floor/plating/icefloor/warnplate{ - dir = 6 +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 }, +/turf/open/floor/plating, /area/mainship/squads/req) "hTJ" = ( /obj/effect/turf_decal/warning_stripes/thin{ @@ -6229,16 +6295,21 @@ /obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/hallways/aft_hallway) +"hWy" = ( +/obj/effect/ai_node, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) "hWO" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) "hXJ" = ( -/obj/structure/cable, +/obj/structure/closet/crate/ammo, /obj/structure/disposalpipe/segment, -/turf/open/floor/mainship/cargo/arrow{ - dir = 4 - }, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/req) "hYl" = ( /turf/open/floor/mainship/sterile/purple/side{ @@ -6250,10 +6321,6 @@ dir = 8 }, /area/mainship/shipboard/firing_range) -"hZr" = ( -/obj/machinery/camera/autoname/mainship, -/turf/open/floor/plating/mainship, -/area/mainship/living/evacuation) "hZt" = ( /obj/machinery/light/mainship{ dir = 8 @@ -6270,13 +6337,9 @@ }, /area/mainship/squads/general) "iaH" = ( -/obj/structure/sign/poster, -/obj/machinery/cic_maptable/droppod_maptable, -/obj/machinery/door_control/mainship/droppod{ - dir = 1 - }, +/obj/machinery/light/mainship, /turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar/droppod) +/area/mainship/living/mechpilotquarters) "iaQ" = ( /obj/machinery/hydroponics, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -6306,27 +6369,19 @@ /obj/item/target/syndicate, /turf/open/floor/plating/plating_catwalk, /area/mainship/shipboard/firing_range) -"icg" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 - }, -/obj/machinery/gear{ - id = "supply_elevator_gear" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/door_control/mainship/req{ - dir = 1; - id = "qm_warehouse"; - name = "Requisition Warehouse Shutters" +"ibZ" = ( +/obj/structure/rack, +/obj/structure/ob_ammo/warhead/cluster, +/obj/structure/ob_ammo/warhead/cluster, +/turf/open/floor/mainship/red{ + dir = 5 }, +/area/mainship/shipboard/weapon_room) +"icg" = ( +/obj/structure/prop/mainship/hangar_stencil/two, +/obj/item/clothing/head/warning_cone, /turf/open/floor/mainship/mono, -/area/mainship/squads/req) +/area/mainship/hallways/hangar) "idy" = ( /obj/item/stack/tile/plasteel, /turf/open/floor/plating/icefloor/warnplate{ @@ -6359,8 +6414,9 @@ }, /area/mainship/engineering/ce_room) "ifT" = ( -/turf/closed/wall/mainship/outer, -/area/mainship/living/pilotbunks) +/obj/structure/bed/bunkbed, +/turf/open/floor/wood, +/area/mainship/living/tankerbunks) "igh" = ( /obj/machinery/iv_drip, /turf/open/floor/mainship/sterile/dark, @@ -6399,6 +6455,12 @@ /obj/item/book/manual/marine_law, /turf/open/floor/wood, /area/mainship/living/commandbunks) +"iku" = ( +/obj/machinery/shower{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/crew_quarters/toilet) "ikM" = ( /obj/machinery/vending/weapon, /turf/open/floor/mainship/floor, @@ -6415,9 +6477,13 @@ /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/port_umbilical) "ilf" = ( -/turf/open/floor/mainship/cargo/arrow{ - dir = 4 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 }, +/turf/open/floor/mainship/cargo/arrow, /area/mainship/hallways/hangar) "ilH" = ( /obj/structure/table/mainship/nometal, @@ -6442,13 +6508,9 @@ }, /area/mainship/living/commandbunks) "imx" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment/corner{ - dir = 1 - }, -/obj/effect/ai_node, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hull/lower_hull) +/obj/machinery/vending/uniform_supply, +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "imJ" = ( /obj/machinery/door/firedoor/mainship{ dir = 2; @@ -6474,6 +6536,13 @@ dir = 6 }, /area/mainship/squads/general) +"inU" = ( +/obj/machinery/camera/autoname/mainship{ + dir = 1 + }, +/obj/item/clothing/head/warning_cone, +/turf/open/floor/mainship/mono, +/area/mainship/squads/req) "iom" = ( /obj/machinery/photocopier, /turf/open/floor/mainship/floor, @@ -6497,10 +6566,11 @@ /turf/open/floor/mainship/mono, /area/mainship/living/commandbunks) "irz" = ( -/obj/structure/cable, -/obj/machinery/computer/dropship_picker, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/obj/structure/table/woodentable, +/obj/item/paper, +/obj/item/tool/pen, +/turf/open/floor/wood, +/area/mainship/living/mechpilotquarters) "irM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -6523,11 +6593,8 @@ }, /area/mainship/squads/general) "isR" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 8 - }, -/turf/open/floor/mainship/mono, -/area/mainship/living/briefing) +/turf/open/floor/wood, +/area/mainship/living/mechpilotquarters) "its" = ( /obj/machinery/bot/roomba, /turf/open/floor/mainship, @@ -6544,6 +6611,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/mainship/sterile/side, /area/mainship/medical/operating_room_one) "iuG" = ( @@ -6554,10 +6624,6 @@ /obj/machinery/camera/autoname/mainship, /turf/open/floor/mainship/mono, /area/mainship/command/telecomms) -"iuQ" = ( -/obj/structure/cable, -/turf/open/floor/wood, -/area/mainship/living/chapel) "ivw" = ( /obj/structure/bed/chair/wood/wings{ dir = 1 @@ -6579,18 +6645,6 @@ }, /turf/open/floor/mainship/ntlogo, /area/mainship/squads/general) -"ixk" = ( -/turf/open/floor/mainship/cargo/arrow{ - dir = 4 - }, -/area/mainship/engineering/engine_core) -"ixv" = ( -/obj/structure/cable, -/obj/machinery/power/apc/mainship{ - dir = 4 - }, -/turf/open/floor/wood, -/area/mainship/living/chapel) "ixz" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -6606,14 +6660,19 @@ /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) "iyl" = ( -/obj/effect/turf_decal/warning_stripes/linethick{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 }, -/obj/effect/turf_decal/warning_stripes/linethick{ +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 8 }, -/turf/open/floor/plating, -/area/mainship/hallways/starboard_hallway) +/turf/open/floor/mainship/mono, +/area/mainship/living/pilotbunks) +"iyr" = ( +/obj/machinery/computer/squad_selector, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "iyN" = ( /obj/machinery/camera/autoname/mainship{ dir = 8 @@ -6624,12 +6683,11 @@ /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 }, -/obj/structure/prop/mainship/hangar_stencil/two, -/obj/effect/ai_node, /obj/machinery/landinglight/cas{ dir = 8; pixel_x = 4 }, +/obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "iBa" = ( @@ -6638,19 +6696,17 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/boxingring) "iCT" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable, +/obj/machinery/door/airlock/mainship/generic/bathroom, /turf/open/floor/mainship/mono, /area/mainship/living/bridgebunks) "iDm" = ( -/obj/structure/disposalpipe/segment, /turf/open/floor/mainship/floor, /area/mainship/command/corporateliaison) "iDs" = ( @@ -6660,18 +6716,9 @@ /turf/open/floor/wood, /area/mainship/living/grunt_rnr) "iDE" = ( -/obj/structure/rack, -/obj/item/storage/toolbox/electrical{ - pixel_x = -5; - pixel_y = 4 - }, -/obj/item/robot_parts/head, -/obj/machinery/power/apc, -/obj/structure/cable, -/turf/open/floor/mainship/black{ - dir = 9 - }, -/area/mainship/living/tankerbunks) +/obj/machinery/cic_maptable/droppod_maptable, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "iDG" = ( /obj/machinery/light/mainship{ dir = 8 @@ -6693,18 +6740,18 @@ }, /turf/open/floor/mainship/floor, /area/mainship/command/airoom) -"iFq" = ( -/turf/open/floor/mainship/black{ - dir = 5 - }, -/area/mainship/living/tankerbunks) +"iFw" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "iFI" = ( /obj/machinery/marine_selector/clothes/smartgun, /turf/open/floor/mainship/floor, /area/mainship/squads/general) -"iGu" = ( -/turf/open/floor/mainship/tcomms, -/area/mainship/shipboard/weapon_room) "iHm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -6725,18 +6772,6 @@ /obj/structure/disposalpipe/junction, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_hallway) -"iHE" = ( -/obj/structure/rack, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/mainship/red{ - dir = 4 - }, -/area/mainship/shipboard/weapon_room) "iHY" = ( /obj/effect/spawner/random/misc/structure/flavorvending/cigaretteweighted, /turf/open/floor/mainship/orange{ @@ -6780,16 +6815,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/starboard_hallway) -"iJY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/wood, -/area/mainship/living/chapel) "iKm" = ( /obj/structure/prop/mainship/mapping_computer, /turf/open/floor/mainship/red{ @@ -6803,6 +6828,10 @@ /turf/open/floor/mainship/mono, /area/mainship/command/cic) "iKM" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, /turf/open/floor/mainship/ntlogo, /area/mainship/command/corporateliaison) "iLf" = ( @@ -6906,20 +6935,9 @@ /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/medical_science) "iSK" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/mainship/sterile/plain, -/area/mainship/living/tankerbunks) -"iTf" = ( -/obj/structure/prop/mainship/halfbuilt_mech/vanguard, -/turf/open/floor/mainship/black{ - dir = 1 - }, -/area/mainship/living/pilotbunks) +/obj/effect/turf_decal/warning_stripes/thick, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "iTn" = ( /obj/machinery/light/mainship, /obj/machinery/holopad, @@ -6936,9 +6954,14 @@ /turf/closed/wall/mainship/outer, /area/mainship/hallways/boxingring) "iTX" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/item/radio/intercom/general, -/turf/open/floor/mainship/mono, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/firealarm, +/turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) "iUK" = ( /obj/structure/cable, @@ -6987,9 +7010,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/holopad, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 10 - }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) "iXQ" = ( @@ -7010,35 +7030,31 @@ /turf/open/floor/mainship/mono, /area/mainship/squads/req) "iYg" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, /obj/structure/table/mainship/nometal, -/obj/effect/spawner/random/engineering/bomb_supply{ - pixel_x = -4 - }, -/obj/effect/spawner/random/engineering/toolbox, -/obj/effect/spawner/random/engineering/tool{ - pixel_x = 2 +/obj/effect/spawner/random/misc/paperbin, +/obj/item/storage/fancy/cigar, +/obj/item/tool/lighter/zippo, +/obj/item/tool/pen, +/obj/machinery/light/mainship{ + light_color = "#da2f1b" }, -/obj/effect/spawner/random/engineering/tool{ - pixel_x = -6; - pixel_y = 3 +/obj/machinery/camera/autoname/mainship{ + dir = 1 }, -/obj/effect/spawner/random/engineering/tool{ - pixel_x = 8; - pixel_y = 5 +/turf/open/floor/mainship/green{ + dir = 10 }, -/turf/open/floor/plating, -/area/mainship/hallways/starboard_hallway) +/area/mainship/squads/req) "iYD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, -/obj/machinery/firealarm, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, +/obj/structure/cable, +/obj/machinery/power/apc/mainship, +/obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/living/bridgebunks) "iZb" = ( @@ -7095,10 +7111,16 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/wood, /area/mainship/living/grunt_rnr) +"jcy" = ( +/obj/structure/table/woodentable, +/obj/structure/mirror, +/obj/item/camera, +/turf/open/floor/mainship/mono, +/area/mainship/living/bridgebunks) "jcH" = ( -/obj/structure/bed/chair/comfy/black, -/turf/open/floor/mainship/red/full, -/area/mainship/living/briefing) +/obj/machinery/loadout_vendor, +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "jdh" = ( /mob/living/simple_animal/corgi/ian, /turf/open/floor/mainship/mono, @@ -7122,6 +7144,14 @@ /obj/machinery/telecomms/bus/preset_one, /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) +"jeG" = ( +/obj/structure/table/mainship/nometal, +/obj/effect/spawner/random/misc/plushie/nospawnninetynine, +/obj/item/newspaper, +/turf/open/floor/mainship/white{ + dir = 8 + }, +/area/mainship/living/pilotbunks) "jeQ" = ( /obj/machinery/light/mainship{ dir = 8 @@ -7142,13 +7172,13 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/port_hallway) "jhK" = ( -/obj/structure/droppod, -/obj/structure/drop_pod_launcher, -/obj/machinery/light/mainship{ - dir = 4 - }, -/turf/open/floor/mainship/cargo, -/area/mainship/hallways/hangar/droppod) +/obj/machinery/vending/coffee, +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) +"jhO" = ( +/obj/structure/dropship_equipment/cas/weapon/bomb_pod, +/turf/open/floor/mainship/floor, +/area/mainship/hallways/hangar) "jiE" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 9 @@ -7160,11 +7190,11 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, -/obj/machinery/power/apc/mainship, /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/firealarm, /turf/open/floor/mainship/mono, /area/mainship/living/bridgebunks) "jjR" = ( @@ -7172,12 +7202,22 @@ /obj/item/reagent_containers/food/drinks/flask/barflask, /turf/open/floor/wood, /area/mainship/living/commandbunks) +"jkK" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/mainship/req/ro, +/obj/item/tool/hand_labeler, +/obj/machinery/door/window, +/obj/machinery/door/window/secure/req{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/squads/req) "jlV" = ( /obj/item/trash/cigbutt{ pixel_x = -8; pixel_y = 3 }, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/general) "jmu" = ( /obj/effect/turf_decal/warning_stripes/thin{ @@ -7195,37 +7235,28 @@ /turf/open/floor/wood, /area/mainship/living/numbertwobunks) "joi" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/door/firedoor/mainship{ - dir = 2; - id = "hangar_lockdown" - }, -/obj/machinery/door/poddoor/shutters/mainship/open/hangar{ +/obj/machinery/door/poddoor/mainship/mech{ dir = 1 }, -/obj/structure/stairs/seamless{ - dir = 1 +/obj/machinery/door/firedoor/mainship{ + dir = 2 }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar/droppod) +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/stripesquare, +/area/mainship/living/mechpilotquarters) "jox" = ( /turf/open/floor/mainship/floor, /area/mainship/command/airoom) -"jpE" = ( -/turf/open/floor/mainship/office, -/area/mainship/hallways/hangar) -"jpU" = ( -/obj/structure/rack, -/obj/item/tool/crowbar, -/obj/effect/spawner/random/engineering/toolbox, -/obj/item/stack/cable_coil, -/obj/item/assembly/timer, -/obj/item/assembly/infra, -/turf/open/floor/mainship/black{ +"joB" = ( +/obj/machinery/camera/autoname/mainship{ dir = 1 }, -/area/mainship/living/tankerbunks) +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) "jqy" = ( /obj/structure/disposalpipe/segment/corner, /obj/effect/turf_decal/warning_stripes/engineer, @@ -7238,19 +7269,21 @@ dir = 8 }, /area/mainship/squads/general) -"jqG" = ( -/obj/structure/cable, -/obj/machinery/light/mainship, -/turf/open/floor/mainship/cargo/arrow{ - dir = 1 - }, -/area/mainship/hallways/hangar/droppod) "jrk" = ( /obj/machinery/bioprinter/stocked, +/obj/structure/disposalpipe/segment/corner{ + dir = 8 + }, /turf/open/floor/mainship/sterile/corner{ dir = 4 }, /area/mainship/medical/operating_room_two) +"jrW" = ( +/obj/structure/cable, +/obj/effect/ai_node, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hull/lower_hull) "jsl" = ( /obj/machinery/light/mainship{ dir = 8 @@ -7261,17 +7294,17 @@ /area/mainship/living/numbertwobunks) "jsw" = ( /obj/machinery/door_control/mainship/ammo, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "jsE" = ( /turf/open/floor/mainship/mono, /area/mainship/living/grunt_rnr) -"jsW" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 10 - }, -/turf/open/floor/mainship/sterile/plain, -/area/mainship/living/tankerbunks) "jwr" = ( /obj/machinery/door/airlock/mainship/engineering/CSEoffice{ dir = 2 @@ -7291,6 +7324,7 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/port_hallway) "jwH" = ( +/obj/effect/decal/cleanable/blood, /turf/open/floor/mainship/research/containment/floor2{ dir = 10 }, @@ -7308,22 +7342,14 @@ /obj/structure/cable, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/starboard_hallway) -"jxk" = ( -/obj/structure/ship_rail_gun, -/obj/effect/turf_decal/warning_stripes/thin, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/obj/machinery/light/mainship/small{ - dir = 8 - }, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) +"jxi" = ( +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/port_hallway) "jxy" = ( -/obj/machinery/light/mainship{ +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/mainship/silver{ dir = 4 }, -/turf/open/floor/wood, /area/mainship/living/chapel) "jzc" = ( /obj/structure/closet/emcloset, @@ -7403,6 +7429,9 @@ /obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/shipboard/firing_range) +"jDG" = ( +/turf/open/floor/mainship/white, +/area/mainship/living/pilotbunks) "jDL" = ( /obj/machinery/camera/autoname{ dir = 1 @@ -7420,22 +7449,15 @@ }, /turf/open/floor/wood, /area/mainship/living/commandbunks) -"jFa" = ( -/obj/machinery/light/mainship{ - dir = 4 - }, -/turf/open/floor/mainship/black{ - dir = 4 - }, -/area/mainship/living/tankerbunks) "jGf" = ( /obj/machinery/door/airlock/mainship/maint, /obj/structure/cable, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) "jHd" = ( -/obj/structure/flora/pottedplant/ten, -/turf/open/floor/mainship/mono, +/obj/structure/flora/ausbushes/ppflowers, +/obj/effect/spawner/random/food_or_drink/drink_alcohol_bottle, +/turf/open/floor/grass, /area/mainship/living/starboard_garden) "jHk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -7452,35 +7474,29 @@ }, /area/mainship/medical/medical_science) "jHU" = ( -/obj/machinery/door/airlock/mainship/command/officer{ - dir = 2 - }, -/obj/machinery/door/firedoor/mainship{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/sterile/white, /area/mainship/living/bridgebunks) "jIc" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/colaweighted, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/obj/structure/bed/chair/nometal{ + dir = 1 + }, +/turf/open/floor/mainship/purple/full, +/area/mainship/living/briefing) "jIf" = ( /obj/machinery/telecomms/bus/preset_four, /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) "jIy" = ( -/obj/machinery/shower{ - dir = 4; - pixel_y = -3 +/obj/machinery/computer/mech_builder{ + dir = 2 }, -/turf/open/floor/mainship/sterile/dark, -/area/crew_quarters/toilet) +/turf/open/floor/plating, +/area/mainship/living/mechpilotquarters) "jLn" = ( -/obj/item/reagent_containers/spray/surgery, -/obj/item/reagent_containers/spray/surgery, /obj/structure/rack, /obj/item/toy/deck/kotahi, +/obj/item/toy/deck, +/obj/item/storage/belt/protein_pack, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) "jLC" = ( @@ -7494,9 +7510,9 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/stern_hallway) "jLS" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/turf/closed/wall/mainship, -/area/mainship/hallways/hangar) +/obj/effect/ai_node, +/turf/open/floor/mainship/hexagon, +/area/mainship/living/mechpilotquarters) "jMH" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -7523,15 +7539,6 @@ /obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/aft_hallway) -"jNX" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 - }, -/obj/structure/sign/poster, -/turf/open/floor/mainship/cargo/arrow{ - dir = 4 - }, -/area/mainship/shipboard/weapon_room) "jOm" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -7539,13 +7546,27 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 + dir = 4 }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/aft_hallway) -"jPi" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/plating/mainship, +"jOS" = ( +/obj/effect/turf_decal/warning_stripes/thick/corner{ + dir = 1 + }, +/obj/effect/turf_decal/warning_stripes/thick/corner, +/turf/open/floor/mainship/yellow_cargo/arrow{ + dir = 1 + }, +/area/mainship/hallways/hangar/droppod) +"jPt" = ( +/obj/effect/turf_decal/warning_stripes/thick/corner{ + dir = 8 + }, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/turf/open/floor/mainship/mono, /area/mainship/shipboard/weapon_room) "jPT" = ( /obj/structure/curtain/medical, @@ -7555,26 +7576,27 @@ "jQH" = ( /turf/open/floor/wood, /area/mainship/hallways/boxingring) +"jQS" = ( +/obj/structure/table/fancywoodentable, +/obj/item/clock, +/turf/open/floor/wood, +/area/mainship/command/corporateliaison) "jQT" = ( /obj/machinery/light/mainship{ dir = 4 }, /turf/open/floor/mainship/mono, /area/mainship/hallways/starboard_hallway) -"jRd" = ( -/obj/structure/bed/chair/nometal{ - dir = 1 - }, -/turf/open/floor/mainship/orange/full, -/area/mainship/living/briefing) "jRn" = ( /obj/structure/benchpress, /turf/open/floor/mainship/mono, /area/mainship/engineering/engineering_workshop) "jRQ" = ( -/obj/structure/prop/mainship/sensor_computer1, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hull/lower_hull) "jRR" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 @@ -7589,6 +7611,15 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/medical_science) +"jTZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "jUl" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -7629,15 +7660,10 @@ dir = 1 }, /area/mainship/medical/lower_medical) -"jWh" = ( -/obj/structure/window/framed/mainship/requisitions, -/obj/machinery/door/poddoor/shutters{ - dir = 2; - id = "qm_warehouse"; - name = "\improper Warehouse Shutters" - }, -/turf/open/floor/mainship/mono, -/area/mainship/squads/req) +"jVU" = ( +/obj/structure/sign/evac, +/turf/closed/wall/mainship, +/area/mainship/living/bridgebunks) "jWo" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -7675,40 +7701,28 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/mainship/cargo/arrow{ +/turf/open/floor/mainship/yellow_cargo/arrow{ dir = 8 }, /area/mainship/squads/general) "jZZ" = ( -/obj/structure/cable, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/effect/ai_node, -/turf/open/floor/mainship/cargo/arrow{ - dir = 4 - }, -/area/mainship/hallways/hangar/droppod) +/obj/effect/turf_decal/warning_stripes/thick, +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "kaa" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, /turf/open/floor/mainship, /area/mainship/squads/general) -"kbb" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 1 - }, -/obj/structure/prop/mainship/halfbuilt_mech/legs, -/turf/open/floor/plating, -/area/mainship/living/tankerbunks) "kbe" = ( -/obj/structure/bed/chair/wood/wings, -/obj/effect/ai_node, -/turf/open/floor/tile/chapel, +/obj/machinery/light/mainship{ + dir = 8 + }, +/obj/machinery/vending/coffee, +/turf/open/floor/mainship/silver{ + dir = 8 + }, /area/mainship/living/chapel) "kbg" = ( /obj/structure/window/reinforced{ @@ -7756,7 +7770,7 @@ dir = 4 }, /obj/machinery/light/mainship, -/turf/open/floor/mainship/cargo/arrow{ +/turf/open/floor/mainship/yellow_cargo/arrow{ dir = 8 }, /area/mainship/squads/general) @@ -7768,21 +7782,18 @@ "kfm" = ( /turf/open/floor/mainship/mono, /area/mainship/engineering/engineering_workshop) -"kfo" = ( -/obj/structure/prop/mainship/ship_memorial, -/turf/open/floor/mainship/mono, -/area/mainship/living/starboard_garden) "kfB" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 8 +/obj/machinery/landinglight/cas{ + dir = 4; + pixel_x = -4 }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/aft_hallway) +/obj/item/clothing/head/warning_cone, +/obj/effect/ai_node, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "kgo" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ on = 1 @@ -7850,7 +7861,7 @@ /obj/machinery/camera/autoname/mainship{ dir = 4 }, -/turf/open/floor/mainship/mono, +/turf/open/floor/iron/kitchen, /area/mainship/living/grunt_rnr) "koA" = ( /obj/machinery/light/mainship{ @@ -7870,6 +7881,24 @@ }, /turf/open/floor/mainship, /area/mainship/squads/general) +"kpI" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/mainship/floor, +/area/mainship/hallways/hangar/droppod) +"krn" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/mainship/green{ + dir = 6 + }, +/area/mainship/squads/req) "krM" = ( /turf/open/floor/mainship/cargo/arrow{ dir = 1 @@ -7925,8 +7954,10 @@ }, /area/mainship/engineering/ce_room) "ksN" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar) "kta" = ( @@ -7956,6 +7987,12 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) +"ktH" = ( +/obj/machinery/camera/autoname/mainship{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/squads/req) "kuc" = ( /obj/machinery/loadout_vendor, /turf/open/floor/mainship/mono, @@ -7980,21 +8017,23 @@ /obj/effect/decal/cleanable/blood, /turf/open/floor/mainship/floor, /area/mainship/medical/upper_medical) -"kuZ" = ( -/obj/structure/table/woodentable, -/obj/item/paper, -/obj/item/tool/pen, -/turf/open/floor/wood, -/area/mainship/living/tankerbunks) "kwo" = ( -/obj/structure/bed/chair/nometal{ +/obj/effect/turf_decal/warning_stripes/thick{ dir = 1 }, -/turf/open/floor/mainship/red/full, -/area/mainship/living/briefing) +/obj/item/clothing/head/warning_cone, +/turf/open/floor/plating, +/area/mainship/hallways/hangar) "kwS" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/machinery/landinglight/tadpole{ + dir = 4; + pixel_x = -4 + }, /turf/open/floor/mainship/mono, -/area/mainship/living/briefing) +/area/mainship/hallways/hangar) "kxh" = ( /turf/closed/wall/mainship, /area/mainship/living/chapel) @@ -8002,6 +8041,11 @@ /obj/structure/window/framed/mainship/white, /obj/machinery/door/firedoor/mainship, /obj/machinery/door/poddoor/shutters/opened/medbay, +/obj/machinery/door/poddoor/shutters/mainship{ + dir = 1; + id = "or2privacyshutter"; + name = "\improper Privacy Shutters" + }, /turf/open/floor/plating/platebotc, /area/mainship/medical/operating_room_two) "kxw" = ( @@ -8029,10 +8073,7 @@ /area/space) "kxN" = ( /obj/machinery/light/mainship, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, +/obj/structure/filingcabinet, /turf/open/floor/mainship/floor, /area/mainship/command/corporateliaison) "kxP" = ( @@ -8054,11 +8095,10 @@ /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) "kyt" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, +/obj/structure/table/mainship/nometal, +/obj/item/reagent_containers/food/drinks/coffee, /turf/open/floor/mainship/floor, -/area/crew_quarters/toilet) +/area/mainship/living/mechpilotquarters) "kyB" = ( /obj/effect/landmark/corpsespawner/engineer/regular, /turf/open/floor/mainship_hull, @@ -8086,39 +8126,48 @@ }, /turf/open/floor/mainship/mono, /area/mainship/engineering/engineering_workshop) -"kzV" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 9 - }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar) "kAq" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 }, /turf/open/floor/mainship/mono, /area/mainship/shipboard/firing_range) -"kAr" = ( -/obj/structure/rack, -/obj/item/storage/bible, -/obj/item/storage/bible, -/obj/item/storage/bible, -/obj/item/storage/bible, -/obj/item/storage/bible, -/obj/item/reagent_containers/food/drinks/bottle/holywater, -/turf/open/floor/wood, -/area/mainship/living/chapel) "kBk" = ( /turf/open/floor/mainship/mono, /area/mainship/engineering/upper_engineering) "kBO" = ( /obj/structure/largecrate/supply/ammo/standard_ammo, -/turf/open/floor/mainship/office, +/turf/open/floor/mainship/orange{ + dir = 4 + }, /area/mainship/hallways/hangar) +"kBR" = ( +/obj/machinery/door/airlock/mainship/maint/core, +/obj/machinery/door/firedoor/mainship, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/mainship/hexagon, +/area/mainship/engineering/lower_engineering) "kCk" = ( /turf/open/floor/mainship/floor, /area/crew_quarters/toilet) +"kCs" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/obj/machinery/light/mainship{ + dir = 1 + }, +/turf/open/floor/mainship/floor, +/area/mainship/hallways/hangar/droppod) "kCI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -8134,20 +8183,16 @@ "kDx" = ( /turf/open/floor/plating, /area/mainship/hallways/hangar) +"kDO" = ( +/obj/machinery/light/mainship, +/turf/open/floor/mainship/white, +/area/mainship/living/pilotbunks) "kDZ" = ( /obj/machinery/door/airlock/mainship/command/cic{ dir = 2 }, /turf/open/floor/mainship/mono, /area/mainship/command/telecomms) -"kEt" = ( -/obj/structure/rack, -/obj/structure/ob_ammo/warhead/explosive, -/obj/structure/ob_ammo/warhead/explosive, -/turf/open/floor/mainship/red{ - dir = 1 - }, -/area/mainship/shipboard/weapon_room) "kEC" = ( /obj/structure/table/mainship/nometal, /obj/item/reagent_containers/food/drinks/bottle/sake{ @@ -8160,6 +8205,7 @@ /obj/item/storage/box/drinkingglasses, /obj/item/portable_vendor/corporate, /obj/machinery/computer/emails, +/obj/item/reagent_containers/hypospray/autoinjector/mindbreaker, /turf/open/floor/wood, /area/mainship/command/corporateliaison) "kEP" = ( @@ -8179,12 +8225,6 @@ /obj/item/trash/cigbutt/cigarbutt, /turf/open/floor/wood, /area/mainship/living/cryo_cells) -"kFu" = ( -/obj/machinery/air_alarm{ - dir = 4 - }, -/turf/open/floor/wood, -/area/mainship/living/chapel) "kGb" = ( /obj/effect/spawner/random/misc/structure/flavorvending/colaweighted, /turf/open/floor/mainship/orange{ @@ -8192,10 +8232,8 @@ }, /area/mainship/engineering/engineering_workshop) "kGc" = ( -/obj/item/paper/memorial, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/effect/ai_node, -/turf/open/floor/mainship/mono, +/obj/structure/cable, +/turf/open/floor/grass, /area/mainship/living/starboard_garden) "kGk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -8211,6 +8249,20 @@ /obj/machinery/status_display, /turf/closed/wall/mainship, /area/mainship/command/telecomms) +"kHN" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/light/mainship{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) +"kHT" = ( +/obj/machinery/vending/tool, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "kIc" = ( /obj/structure/disposalpipe/segment/corner{ dir = 4 @@ -8230,12 +8282,17 @@ /obj/structure/window/framed/mainship/hull, /turf/open/floor/mainship_hull, /area/mainship/hallways/boxingring) +"kKd" = ( +/obj/structure/drop_pod_launcher, +/obj/structure/droppod, +/turf/open/floor/mainship/yellow_cargo, +/area/mainship/hallways/hangar/droppod) "kKJ" = ( /turf/closed/wall/mainship/research/containment/wall/south, /area/mainship/medical/medical_science) "kKO" = ( /obj/structure/closet/secure_closet/req_officer, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/req) "kLu" = ( /obj/machinery/computer/camera_advanced/remote_fob, @@ -8262,11 +8319,30 @@ /obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) +"kMf" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/quick_vendor/beginner, +/turf/open/floor/mainship/black{ + dir = 1 + }, +/area/mainship/squads/general) "kMi" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/hallways/starboard_hallway) +"kMo" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/door/poddoor/mainship/droppod, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "kML" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/camera/autoname/mainship{ @@ -8289,7 +8365,7 @@ dir = 8 }, /obj/item/fuel_cell/full, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/hexagon, /area/mainship/engineering/engine_core) "kNK" = ( /obj/machinery/light/mainship{ @@ -8305,7 +8381,10 @@ /obj/effect/turf_decal/warning_stripes/thin{ dir = 5 }, -/turf/open/floor/mainship/cargo, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 6 + }, +/turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "kPH" = ( /obj/structure/table/fancywoodentable, @@ -8377,9 +8456,6 @@ /obj/structure/cable, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/boxingring) -"kSz" = ( -/turf/closed/wall/mainship, -/area/mainship/shipboard/weapon_room) "kTn" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -8417,7 +8493,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, -/turf/open/floor/mainship/cargo/arrow{ +/turf/open/floor/mainship/yellow_cargo/arrow{ dir = 1 }, /area/mainship/squads/general) @@ -8452,26 +8528,13 @@ /turf/open/floor/mainship/sterile, /area/mainship/medical/lower_medical) "kWG" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 6 - }, -/obj/effect/ai_node, +/obj/effect/turf_decal/warning_stripes/thick/corner, /obj/item/clothing/head/warning_cone, -/turf/open/floor/mainship/mono, +/turf/open/floor/plating, /area/mainship/hallways/hangar) "kWM" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/mainship/sterile/plain, -/area/mainship/living/tankerbunks) +/turf/open/floor/mainship/yellow_cargo, +/area/mainship/hallways/hangar/droppod) "kXy" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -8506,6 +8569,8 @@ /obj/item/storage/toolbox/electrical, /obj/item/tool/wrench, /obj/item/cell/apc, +/obj/item/tool/screwdriver, +/obj/item/tool/crowbar, /turf/open/floor/mainship/sterile/side{ dir = 1 }, @@ -8547,12 +8612,15 @@ /obj/item/prop/organ/kidneys, /turf/open/floor/cult, /area/medical/morgue) +"lcE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/clothing/head/warning_cone, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "lcL" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/plating/mainship, -/area/mainship/living/evacuation) +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) "ldA" = ( /obj/machinery/processor{ pixel_y = 5 @@ -8560,7 +8628,7 @@ /obj/machinery/light/mainship{ dir = 8 }, -/turf/open/floor/mainship/mono, +/turf/open/floor/iron/kitchen, /area/mainship/living/grunt_rnr) "ldG" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -8568,21 +8636,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/stern_hallway) -"ldT" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/structure/rack, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 9 - }, -/turf/open/floor/mainship/red{ - dir = 4 - }, -/area/mainship/shipboard/weapon_room) "ldW" = ( /obj/structure/cable, /turf/open/floor/plating/plating_catwalk, @@ -8590,6 +8643,10 @@ "leu" = ( /turf/closed/wall/mainship, /area/mainship/command/corporateliaison) +"lev" = ( +/obj/structure/window/framed/mainship/hull, +/turf/open/floor/mainship/floor, +/area/mainship/shipboard/weapon_room) "lew" = ( /obj/structure/cable, /obj/effect/ai_node, @@ -8616,21 +8673,14 @@ /turf/open/floor/mainship_hull, /area/space) "lgL" = ( -/obj/machinery/marine_selector/clothes, /obj/structure/window/reinforced{ dir = 4 }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, +/obj/machinery/quick_vendor/beginner, /turf/open/floor/mainship, /area/mainship/squads/general) "lgM" = ( /obj/machinery/photocopier, -/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ - on = 1 - }, /turf/open/floor/mainship/mono, /area/mainship/engineering/upper_engineering) "lgN" = ( @@ -8651,35 +8701,43 @@ /turf/open/floor/mainship/floor, /area/mainship/squads/req) "lhG" = ( -/obj/effect/turf_decal/warning_stripes/linethick{ - dir = 1 +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/mainship/hallways/starboard_hallway) -"lhT" = ( -/obj/structure/sign/evac, /turf/open/floor/mainship/mono, -/area/mainship/hallways/starboard_hallway) +/area/mainship/living/pilotbunks) +"lhT" = ( +/obj/structure/window/framed/mainship/white, +/obj/machinery/door/firedoor/mainship, +/obj/machinery/door/poddoor/shutters/opened/medbay, +/obj/machinery/holosign_switch{ + id = "or2sign" + }, +/obj/machinery/door/poddoor/shutters/mainship{ + dir = 1; + id = "or2privacyshutter"; + name = "\improper Privacy Shutters" + }, +/turf/open/floor/plating/platebotc, +/area/mainship/medical/operating_room_two) "lhZ" = ( /obj/structure/table/woodentable, /obj/item/storage/donut_box, /turf/open/floor/wood, /area/mainship/living/grunt_rnr) -"liK" = ( -/obj/structure/ob_ammo/warhead/plasmaloss, -/obj/structure/ob_ammo/warhead/plasmaloss, -/obj/structure/rack, -/turf/open/floor/mainship/red{ - dir = 9 - }, -/area/mainship/shipboard/weapon_room) "liX" = ( /mob/living/simple_animal/corgi/walten, /turf/open/floor/mainship/sterile, /area/mainship/medical/lower_medical) "ljb" = ( /obj/machinery/vending/weapon, +/obj/machinery/vending/nanomed{ + dir = 8 + }, /turf/open/floor/mainship/green{ dir = 4 }, @@ -8700,12 +8758,13 @@ /area/mainship/hull/lower_hull) "ljN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/vending/nanomed, /turf/open/floor/mainship/mono, /area/mainship/living/bridgebunks) "ljP" = ( @@ -8728,18 +8787,18 @@ dir = 4 }, /area/mainship/squads/general) -"llr" = ( -/turf/open/floor/mainship/mono, -/area/mainship/living/bridgebunks) -"llA" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 +"llq" = ( +/obj/machinery/light/mainship{ + dir = 8 }, -/obj/structure/stairs/edge{ - dir = 1 +/turf/open/floor/mainship/mono, +/area/mainship/living/starboard_garden) +"llr" = ( +/obj/machinery/shower{ + dir = 4 }, -/turf/open/floor/tile/dark, -/area/mainship/command/cic) +/turf/open/floor/plating/plating_catwalk, +/area/mainship/living/bridgebunks) "llC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/light/mainship{ @@ -8758,7 +8817,7 @@ dir = 8; pixel_x = 4 }, -/turf/open/floor/mainship/cargo/arrow{ +/turf/open/floor/mainship/yellow_cargo/arrow{ dir = 8 }, /area/mainship/hallways/hangar) @@ -8770,6 +8829,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 9 }, +/obj/effect/ai_node, +/obj/machinery/cic_maptable/drawable/big{ + pixel_x = 0 + }, /turf/open/floor/mainship/mono, /area/mainship/command/cic) "lmy" = ( @@ -8779,14 +8842,8 @@ dir = 4 }, /obj/machinery/door/firedoor/mainship, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) +/area/mainship/hull/lower_hull) "lmF" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -8794,15 +8851,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) -"lmH" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/open/floor/wood, -/area/mainship/living/tankerbunks) "lnQ" = ( /obj/structure/window/framed/mainship, /obj/machinery/door/poddoor/shutters/mainship/corporate, @@ -8827,9 +8875,6 @@ }, /area/mainship/medical/lower_medical) "lon" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -8837,6 +8882,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/starboard_hallway) "lpn" = ( @@ -8863,15 +8911,6 @@ dir = 8 }, /area/mainship/command/self_destruct) -"lrW" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/hangar) "lsc" = ( /obj/structure/morgue{ dir = 1 @@ -8899,12 +8938,9 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_hallway) "lsS" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/mainship/maint, -/obj/machinery/door/firedoor/mainship, -/obj/structure/sign/pods, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/hangar) +/obj/machinery/vending/armor_supply, +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "ltw" = ( /obj/item/stack/tile/plasteel, /turf/open/floor/plating, @@ -8924,15 +8960,17 @@ /turf/open/floor/mainship/red/full, /area/mainship/shipboard/firing_range) "lue" = ( -/obj/machinery/light/mainship{ - dir = 4 +/obj/machinery/camera/autoname/mainship{ + dir = 8 }, /turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) -"lun" = ( -/obj/structure/bed/chair/comfy/black, -/turf/open/floor/mainship/silver/full, /area/mainship/living/briefing) +"lun" = ( +/obj/structure/bed/bunkbed, +/obj/effect/landmark/start/job/mechpilot, +/obj/effect/landmark/start/job/mechpilot, +/turf/open/floor/wood, +/area/mainship/living/mechpilotquarters) "lvi" = ( /obj/structure/cable, /turf/open/floor/plating/plating_catwalk, @@ -8969,10 +9007,12 @@ /turf/open/floor/mainship/red/full, /area/mainship/command/cic) "lvV" = ( -/obj/structure/bed, -/obj/item/bedsheet/captain, -/obj/effect/landmark/start/job/staffofficer, -/obj/effect/landmark/corpsespawner/marine/regular, +/obj/structure/table/woodentable, +/obj/item/clipboard{ + pixel_x = 5 + }, +/obj/item/paper, +/obj/item/tool/pen, /turf/open/floor/mainship/mono, /area/mainship/living/bridgebunks) "lwj" = ( @@ -9036,6 +9076,15 @@ "lAT" = ( /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) +"lBs" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 6 + }, +/obj/machinery/door/poddoor/railing{ + id = "supply_elevator_railing" + }, +/turf/open/floor/mainship/floor, +/area/mainship/squads/req) "lCh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -9063,18 +9112,18 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/port_umbilical) +"lEd" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) "lEe" = ( /obj/structure/bed/bunkbed, /obj/effect/landmark/start/job/squadmarine, /obj/effect/landmark/start/job/squadcorpsman, /turf/open/floor/wood, /area/mainship/living/cryo_cells) -"lEx" = ( -/obj/machinery/door/airlock/mainship/maint{ - dir = 2 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/hangar/droppod) "lEz" = ( /obj/structure/bed/bunkbed, /obj/effect/landmark/start/job/squadsmartgunner, @@ -9085,13 +9134,13 @@ /turf/open/floor/wood, /area/mainship/living/cryo_cells) "lES" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 8 - }, -/turf/open/floor/wood, +/turf/open/floor/mainship/mono, /area/mainship/living/chapel) "lET" = ( -/obj/structure/ship_ammo/cas/rocket/keeper, +/obj/structure/ship_ammo/cas/bomb/fourhundred, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar) "lFg" = ( @@ -9100,12 +9149,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 5 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, /turf/open/floor/mainship/mono, /area/mainship/engineering/upper_engineering) "lFo" = ( @@ -9121,17 +9170,12 @@ /turf/open/floor/mainship/red/full, /area/mainship/command/cic) "lGv" = ( -/turf/open/floor/mainship/green/corner{ +/obj/effect/turf_decal/warning_stripes/thick/corner{ dir = 1 }, -/area/mainship/hallways/aft_hallway) -"lGA" = ( -/obj/structure/orbital_cannon, -/obj/machinery/light/mainship/small{ - dir = 8 - }, -/turf/open/floor/plating/mainship, -/area/mainship/shipboard/weapon_room) +/obj/item/clothing/head/warning_cone, +/turf/open/floor/plating, +/area/mainship/hallways/hangar) "lGU" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -9160,6 +9204,17 @@ dir = 10 }, /area/mainship/living/numbertwobunks) +"lHG" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/machinery/landinglight/cas{ + dir = 8; + pixel_x = 4 + }, +/obj/structure/prop/mainship/hangar_stencil/two, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "lHN" = ( /obj/machinery/light/mainship{ dir = 4 @@ -9182,16 +9237,6 @@ }, /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/starboard_hallway) -"lIj" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/effect/ai_node, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) "lIB" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -9207,18 +9252,20 @@ dir = 8 }, /area/mainship/living/numbertwobunks) +"lIW" = ( +/obj/structure/sign/pods, +/turf/closed/wall/mainship, +/area/mainship/hallways/hangar/droppod) "lJt" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/structure/window/reinforced{ dir = 4 }, -/obj/structure/cable, -/obj/structure/bed/chair/wood/wings, -/turf/open/floor/tile/chapel{ +/obj/effect/spawner/random/misc/structure/showcase, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ dir = 1 }, +/turf/open/floor/mainship/silver/full, /area/mainship/living/chapel) "lJE" = ( /obj/structure/window/framed/mainship/requisitions, @@ -9263,6 +9310,9 @@ }, /turf/open/floor/mainship/mono, /area/mainship/engineering/engineering_workshop) +"lLe" = ( +/turf/open/floor/mainship/mono, +/area/crew_quarters/toilet) "lLR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -9277,17 +9327,11 @@ /turf/open/floor/mainship/mono, /area/mainship/command/corporateliaison) "lMf" = ( -/obj/machinery/door/airlock/multi_tile/mainship/maint{ - dir = 1 - }, -/obj/machinery/door/firedoor/multi_tile{ +/obj/structure/bed/chair/nometal{ dir = 1 }, -/obj/machinery/door/poddoor/shutters/mainship/open/hangar{ - dir = 8 - }, /turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/area/mainship/living/pilotbunks) "lMx" = ( /obj/structure/table/mainship/nometal, /obj/machinery/faxmachine, @@ -9336,11 +9380,14 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_hallway) "lPM" = ( -/obj/structure/bed, -/obj/item/bedsheet/red, -/obj/effect/landmark/start/job/pilotofficer, -/turf/open/floor/wood, -/area/mainship/living/pilotbunks) +/obj/effect/landmark/start/job/shiptech, +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/mainship/green{ + dir = 4 + }, +/area/mainship/squads/req) "lPY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -9355,8 +9402,8 @@ /turf/open/floor/wood, /area/mainship/medical/lower_medical) "lQN" = ( -/obj/machinery/sleeper, /obj/machinery/light/mainship, +/obj/machinery/vending/MarineMed, /turf/open/floor/mainship/sterile/side, /area/mainship/medical/lower_medical) "lRc" = ( @@ -9374,6 +9421,10 @@ /obj/machinery/camera/autoname/mainship, /turf/open/floor/mainship/floor, /area/mainship/squads/general) +"lSr" = ( +/obj/structure/window/framed/mainship, +/turf/open/floor/mainship/floor, +/area/mainship/shipboard/brig) "lSQ" = ( /obj/effect/ai_node, /turf/open/floor/mainship/sterile/side, @@ -9451,12 +9502,6 @@ dir = 4 }, /area/mainship/engineering/engineering_workshop) -"lVn" = ( -/obj/machinery/loadout_vendor, -/turf/open/floor/mainship/white{ - dir = 9 - }, -/area/mainship/living/pilotbunks) "lVp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating/plating_catwalk, @@ -9469,10 +9514,6 @@ dir = 1 }, /area/mainship/command/airoom) -"lVM" = ( -/obj/effect/turf_decal/warning_stripes/thick/corner, -/turf/open/floor/plating, -/area/mainship/hallways/hangar) "lVR" = ( /obj/machinery/light/mainship{ light_color = "#da2f1b" @@ -9493,18 +9534,31 @@ /obj/structure/sign/restroom, /turf/closed/wall/mainship, /area/mainship/hallways/hangar) -"lXB" = ( -/obj/structure/disposalpipe/segment/corner{ +"lWH" = ( +/obj/effect/turf_decal/warning_stripes/thick{ dir = 4 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 }, -/turf/open/floor/mainship/black{ +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) +"lXb" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/obj/effect/ai_node, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) +"lXB" = ( +/obj/effect/turf_decal/warning_stripes/thick/corner{ dir = 8 }, -/area/mainship/living/tankerbunks) +/obj/effect/turf_decal/warning_stripes/thick/corner{ + dir = 4 + }, +/turf/open/floor/mainship/yellow_cargo/arrow, +/area/mainship/hallways/hangar/droppod) "lXN" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 10 @@ -9530,7 +9584,7 @@ }, /area/mainship/medical/upper_medical) "lYL" = ( -/obj/machinery/computer/sleep_console, +/obj/machinery/sleeper, /turf/open/floor/mainship/sterile/side, /area/mainship/medical/lower_medical) "mam" = ( @@ -9543,7 +9597,7 @@ "mbM" = ( /obj/structure/table/mainship/nometal, /obj/item/fuel_cell/full, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/hexagon, /area/mainship/engineering/engine_core) "mbQ" = ( /obj/structure/table/mainship/nometal, @@ -9588,15 +9642,12 @@ /obj/structure/bed/chair/wood/wings{ dir = 8 }, -/turf/open/floor/mainship/mono, +/turf/open/floor/wood, /area/mainship/living/grunt_rnr) "mds" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal, -/turf/open/floor/mainship/green, -/area/mainship/squads/req) +/obj/structure/closet/secure_closet/pilot_officer, +/turf/open/floor/wood, +/area/mainship/living/pilotbunks) "mdQ" = ( /obj/machinery/door/airlock/mainship/research/pen, /obj/machinery/door/firedoor/mainship, @@ -9605,19 +9656,21 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/medical_science) +"meN" = ( +/obj/structure/prop/mainship/cannon_cables, +/turf/open/floor/mainship/hexagon, +/area/mainship/shipboard/weapon_room) "mfH" = ( /turf/open/floor/mainship/sterile/purple/side, /area/mainship/medical/medical_science) "mgw" = ( -/obj/structure/bed/chair/wheelchair{ +/obj/vehicle/ridden/wheelchair{ dir = 1 }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) "mgE" = ( -/obj/structure/rack, -/obj/item/pizzabox/meat, -/obj/item/facepaint/green, +/obj/machinery/vending/marineFood, /turf/open/floor/mainship/green{ dir = 4 }, @@ -9653,15 +9706,9 @@ /turf/closed/wall/mainship, /area/mainship/engineering/upper_engineering) "mjl" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/obj/machinery/landinglight/tadpole{ - dir = 1; - pixel_y = -4 - }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/obj/machinery/vending, +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "mjo" = ( /obj/item/reagent_containers/hypospray/autoinjector/synaptizine_expired, /turf/open/floor/plating/mainship, @@ -9699,11 +9746,22 @@ /turf/open/floor/plating, /area/mainship/squads/general) "mnH" = ( -/obj/machinery/door/airlock/mainship/secure/evac{ - dir = 2 +/obj/structure/table/mainship/nometal, +/obj/machinery/recharger, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 6; + pixel_y = -2 }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/starboard_hallway) +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 6; + pixel_y = -2 + }, +/turf/open/floor/mainship/sterile/side, +/area/mainship/medical/lower_medical) "mog" = ( /obj/item/trash/candy, /turf/open/floor/wood, @@ -9724,6 +9782,10 @@ }, /area/mainship/squads/req) "mpj" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 6 + }, /obj/effect/turf_decal/warning_stripes/thin{ dir = 9 }, @@ -9747,13 +9809,11 @@ /obj/effect/spawner/random/misc/structure/flavorvending/snackweighted, /turf/open/floor/mainship/sterile/side, /area/mainship/medical/lower_medical) -"mpS" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/black, -/area/mainship/living/pilotbunks) "mqD" = ( +/obj/structure/cable, +/obj/machinery/light/mainship{ + dir = 4 + }, /turf/open/floor/mainship/mono, /area/mainship/living/starboard_garden) "mqK" = ( @@ -9788,10 +9848,6 @@ /obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/command/telecomms) -"mux" = ( -/obj/machinery/light/mainship, -/turf/open/floor/mainship/black, -/area/mainship/living/tankerbunks) "muT" = ( /obj/structure/cable, /turf/open/floor/mainship/mono, @@ -9823,11 +9879,11 @@ /turf/open/floor/mainship/mono, /area/mainship/command/corporateliaison) "mvX" = ( -/obj/structure/shipmast{ - pixel_y = 2 +/obj/machinery/light/mainship{ + dir = 8 }, -/turf/open/floor/mainship/green/full, -/area/mainship/squads/req) +/turf/open/floor/wood, +/area/mainship/living/pilotbunks) "mwj" = ( /obj/structure/curtain/medical, /turf/open/floor/mainship/sterile/dark, @@ -9838,7 +9894,7 @@ dir = 4 }, /obj/item/fuel_cell/full, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/hexagon, /area/mainship/engineering/engine_core) "mxn" = ( /obj/item/stack/tile/plasteel, @@ -9853,15 +9909,16 @@ /turf/open/floor/mainship, /area/mainship/squads/general) "mxq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/machinery/landinglight/cas{ + dir = 1; + pixel_y = -4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 }, +/obj/effect/ai_node, /turf/open/floor/mainship/mono, -/area/mainship/hallways/aft_hallway) +/area/mainship/hallways/hangar) "mxT" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -9869,15 +9926,15 @@ /obj/structure/cable, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/starboard_hallway) -"mza" = ( -/obj/machinery/computer/navigation, -/turf/open/floor/mainship/mono, -/area/mainship/command/cic) "mzh" = ( -/obj/machinery/vending/engivend, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/mainship/hallways/starboard_hallway) +/obj/structure/disposalpipe/segment/corner{ + dir = 1 + }, +/obj/structure/table/mainship/nometal, +/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/megaphone, +/turf/open/floor/mainship/green, +/area/mainship/squads/req) "mzs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -9909,13 +9966,6 @@ "mBZ" = ( /turf/open/space, /area/space) -"mDv" = ( -/obj/machinery/door/poddoor/railing{ - dir = 2; - id = "supply_elevator_railing" - }, -/turf/open/floor/mainship/floor, -/area/mainship/squads/req) "mDY" = ( /obj/structure/cable, /obj/machinery/light/mainship/small{ @@ -9956,6 +10006,21 @@ dir = 9 }, /area/mainship/engineering/ce_room) +"mFw" = ( +/obj/structure/ship_rail_gun, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) +"mFy" = ( +/obj/machinery/light/mainship{ + dir = 4 + }, +/turf/open/floor/mainship/white{ + dir = 4 + }, +/area/mainship/living/pilotbunks) "mGV" = ( /obj/structure/closet/secure_closet/personal/morgue, /turf/open/floor/cult, @@ -9974,28 +10039,27 @@ }, /area/mainship/medical/lower_medical) "mHk" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/obj/machinery/light/mainship, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/turf/open/floor/mech_bay_recharge_floor, +/area/mainship/living/mechpilotquarters) "mHW" = ( /turf/open/floor/mainship/sterile/side{ dir = 4 }, /area/mainship/medical/lower_medical) -"mJj" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) "mJo" = ( /obj/machinery/computer/telecomms/monitor/preset, /turf/open/floor/mainship/mono, /area/mainship/command/telecomms) +"mJw" = ( +/obj/structure/bed, +/obj/item/bedsheet/red, +/obj/effect/landmark/start/job/transportofficer, +/turf/open/floor/wood, +/area/mainship/living/pilotbunks) +"mJG" = ( +/obj/machinery/vending/weapon, +/turf/open/floor/wood, +/area/mainship/living/tankerbunks) "mJL" = ( /obj/structure/dropship_equipment/electronics/spotlights, /turf/open/floor/mainship/orange{ @@ -10003,14 +10067,10 @@ }, /area/mainship/hallways/hangar) "mJW" = ( -/obj/structure/rack, -/obj/item/storage/firstaid/fire{ - pixel_x = 3; - pixel_y = 3 +/obj/machinery/loadout_vendor, +/turf/open/floor/mainship/green{ + dir = 5 }, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/adv, -/turf/open/floor/mainship/green, /area/mainship/squads/req) "mKE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -10028,28 +10088,43 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_hallway) +"mKN" = ( +/obj/structure/table/mainship/nometal, +/obj/item/paper{ + pixel_x = 5 + }, +/obj/item/clipboard, +/obj/item/tool/pen, +/obj/item/flashlight, +/obj/item/reagent_containers/spray/cleaner, +/turf/open/floor/mainship/mono, +/area/mainship/squads/req) "mLd" = ( -/obj/structure/cable, -/obj/machinery/camera/autoname/mainship{ - dir = 4 +/obj/docking_port/stationary/escape_pod/escape_shuttle{ + dir = 8 }, -/turf/open/floor/wood, -/area/mainship/living/chapel) +/turf/open/floor/mainship/hexagon, +/area/mainship/living/evacuation) "mMx" = ( -/turf/closed/wall/mainship, -/area/mainship/living/briefing) +/obj/structure/bed/chair/nometal{ + dir = 4 + }, +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "mMA" = ( -/obj/docking_port/stationary/escape_pod/escape_shuttle{ - dir = 1 +/obj/structure/ob_ammo/warhead/plasmaloss, +/obj/structure/ob_ammo/warhead/plasmaloss, +/obj/structure/rack, +/turf/open/floor/mainship/red{ + dir = 8 }, -/turf/open/floor/plating/mainship, -/area/mainship/living/evacuation) +/area/mainship/shipboard/weapon_room) "mNK" = ( /obj/machinery/status_display, /turf/closed/wall/mainship, /area/mainship/command/corporateliaison) "mNM" = ( -/turf/open/floor/mainship/cargo/arrow{ +/turf/open/floor/mainship/yellow_cargo/arrow{ dir = 8 }, /area/mainship/squads/general) @@ -10059,11 +10134,11 @@ /turf/open/floor/mainship/mono, /area/mainship/command/corporateliaison) "mOo" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 8 +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 }, -/turf/open/floor/mainship/floor, -/area/crew_quarters/toilet) +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "mOz" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -10117,7 +10192,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, -/obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk, /area/mainship/command/cic) "mQq" = ( @@ -10127,9 +10201,10 @@ }, /area/mainship/shipboard/firing_range) "mQy" = ( -/obj/structure/bed/chair/comfy/black, -/turf/open/floor/mainship/orange/full, -/area/mainship/living/briefing) +/obj/structure/table/mainship/nometal, +/obj/item/newspaper, +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "mQH" = ( /obj/machinery/door/poddoor/mainship/ammo{ dir = 2 @@ -10159,14 +10234,12 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) "mSh" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/mainship/black{ +/obj/effect/turf_decal/warning_stripes/thick, +/obj/machinery/light/mainship{ dir = 4 }, -/area/mainship/living/tankerbunks) +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "mSo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -10179,9 +10252,6 @@ /obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/engineering/port_atmos) -"mTs" = ( -/turf/open/floor/mainship/sterile/dark, -/area/crew_quarters/toilet) "mTH" = ( /obj/machinery/marine_selector/gear/commander, /turf/open/floor/wood, @@ -10198,6 +10268,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/mainship/sterile/side, /area/mainship/medical/operating_room_two) "mVr" = ( @@ -10221,9 +10294,9 @@ /obj/structure/disposalpipe/segment/corner{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /obj/effect/ai_node, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer1, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/starboard_hallway) "mXf" = ( @@ -10237,6 +10310,17 @@ dir = 8 }, /area/mainship/medical/lower_medical) +"mXm" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/effect/ai_node, +/obj/machinery/landinglight/tadpole{ + dir = 4; + pixel_x = -4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "mXM" = ( /obj/machinery/light/mainship{ dir = 1 @@ -10244,22 +10328,21 @@ /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/upper_medical) "mXR" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/segment, -/obj/effect/ai_node, -/turf/open/floor/plating/plating_catwalk, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/mainship/mono, /area/mainship/hallways/aft_hallway) "mZS" = ( /turf/open/floor/mainship/black/full, /area/mainship/command/self_destruct) -"nas" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) "nat" = ( /obj/structure/closet/radiation, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -10287,17 +10370,6 @@ }, /turf/open/floor/plating, /area/mainship/hallways/hangar) -"ncj" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/mainship/maint, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor/mainship{ - dir = 2 - }, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) "ncF" = ( /obj/machinery/suit_storage_unit/carbon_unit, /turf/open/floor/mainship/mono, @@ -10321,9 +10393,9 @@ }, /area/mainship/medical/upper_medical) "ncO" = ( -/obj/machinery/door_control/mainship/droppod, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/obj/machinery/vending/weapon, +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "ndG" = ( /obj/structure/bed/chair/sofa/right, /obj/item/bedsheet/ce{ @@ -10349,13 +10421,13 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) "ndN" = ( -/obj/machinery/holosign_switch{ - id = "or1sign"; - pixel_x = 7; - pixel_y = -5 - }, -/turf/closed/wall/mainship/white, -/area/mainship/medical/operating_room_one) +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/aft_hallway) "nei" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -10383,21 +10455,7 @@ /obj/structure/flora/pottedplant/twentytwo, /turf/open/floor/mainship/mono, /area/mainship/engineering/upper_engineering) -"nfC" = ( -/obj/structure/cable, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 - }, -/obj/machinery/holopad, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar/droppod) "ngO" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, @@ -10405,13 +10463,11 @@ dir = 4 }, /obj/structure/cable, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, /turf/open/floor/mainship/stripesquare, /area/mainship/command/cic) -"nhc" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/obj/machinery/holopad, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) "nhn" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -10436,7 +10492,11 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/mainship/mono, +/obj/effect/ai_node, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/turf/open/floor/mainship/cargo/arrow, /area/mainship/hallways/hangar) "niH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -10446,24 +10506,22 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/starboard_hallway) "njE" = ( -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/tool/extinguisher, -/obj/item/tool/extinguisher/mini, -/obj/structure/rack, -/obj/item/flashlight, -/obj/item/flashlight, -/obj/item/lightreplacer, -/obj/machinery/camera/autoname/mainship{ - dir = 8 +/obj/structure/bed/chair/nometal{ + dir = 1 }, -/turf/open/floor/mainship/green{ +/turf/open/floor/mainship/white{ dir = 10 }, -/area/mainship/squads/req) +/area/mainship/living/pilotbunks) "nkm" = ( -/obj/machinery/door_control/mainship/hangar, -/turf/open/floor/mainship/mono, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/prop/mainship/halfbuilt_mech/legs, +/turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) "nku" = ( /obj/structure/table/mainship/nometal, @@ -10501,8 +10559,8 @@ /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) "nkX" = ( -/obj/machinery/optable, -/obj/item/tank/anesthetic, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, /turf/open/floor/mainship/sterile/side{ dir = 8 }, @@ -10532,6 +10590,10 @@ pixel_x = 2; pixel_y = -1 }, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/reagent_containers/spray/cleaner, /turf/open/floor/mainship/sterile/corner, /area/mainship/medical/upper_medical) "nld" = ( @@ -10552,27 +10614,22 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/starboard_hallway) "nnF" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 }, -/turf/open/floor/mainship/mono, -/area/mainship/living/bridgebunks) -"noZ" = ( -/obj/effect/ai_node, -/obj/structure/cable, -/turf/open/floor/mainship/floor, -/area/crew_quarters/toilet) +/obj/structure/punching_bag, +/turf/open/floor/plating/mainship, +/area/mainship/shipboard/firing_range) "npN" = ( /obj/structure/table/mainship/nometal, /obj/machinery/computer/med_data/laptop, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/upper_medical) "nqG" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ - dir = 1; - on = 1 +/obj/machinery/shower{ + dir = 8 }, -/turf/open/floor/mainship/mono, +/turf/open/floor/plating/plating_catwalk, /area/mainship/living/bridgebunks) "nrK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -10589,9 +10646,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /turf/open/floor/mainship/mono, /area/mainship/command/cic) -"nsR" = ( -/turf/open/floor/plating/mainship, -/area/mainship/shipboard/weapon_room) "ntb" = ( /obj/machinery/door/airlock/mainship/medical/morgue, /obj/structure/cable, @@ -10606,14 +10660,20 @@ /area/medical/morgue) "nuX" = ( /obj/effect/ai_node, -/turf/open/floor/mainship/black{ - dir = 8 - }, -/area/mainship/squads/general) +/obj/machinery/iv_drip, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/upper_medical) "nuZ" = ( /obj/structure/prop/mainship/sensor_computer3/sd, /turf/open/floor/mainship/tcomms, /area/mainship/command/self_destruct) +"nvH" = ( +/obj/machinery/power/apc{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/aft_hallway) "nvN" = ( /obj/structure/closet/firecloset, /obj/item/clothing/mask/gas, @@ -10629,13 +10689,9 @@ /turf/open/floor/mainship/mono, /area/mainship/command/cic) "nwc" = ( -/obj/machinery/holosign_switch{ - id = "or2sign"; - pixel_x = -7; - pixel_y = -5 - }, -/turf/closed/wall/mainship/white, -/area/mainship/medical/operating_room_two) +/obj/machinery/iv_drip, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/upper_medical) "nwt" = ( /obj/effect/spawner/random/misc/structure/flavorvending/colaweighted, /turf/open/floor/mainship, @@ -10655,7 +10711,7 @@ /turf/open/floor/plating, /area/mainship/squads/general) "nwX" = ( -/obj/machinery/vending/MarineMed, +/obj/machinery/computer/sleep_console, /turf/open/floor/mainship/sterile/side, /area/mainship/medical/lower_medical) "nxC" = ( @@ -10676,6 +10732,13 @@ /obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/engineering/engineering_workshop) +"nyh" = ( +/obj/machinery/light/mainship{ + dir = 8 + }, +/obj/structure/flora/ausbushes/brflowers, +/turf/open/floor/grass, +/area/mainship/living/starboard_garden) "nyw" = ( /obj/machinery/door/firedoor/mainship, /obj/machinery/light/mainship{ @@ -10701,7 +10764,7 @@ "nzg" = ( /obj/machinery/fuelcell_recycler, /obj/machinery/light/mainship, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/hexagon, /area/mainship/engineering/engine_core) "nzB" = ( /obj/effect/turf_decal/warning_stripes/thick{ @@ -10721,6 +10784,13 @@ dir = 8 }, /area/mainship/medical/upper_medical) +"nAM" = ( +/obj/machinery/door/poddoor/railing{ + dir = 1; + id = "supply_elevator_railing" + }, +/turf/open/floor/mainship/mono, +/area/mainship/squads/req) "nBk" = ( /obj/structure/bed/chair/comfy{ dir = 1 @@ -10738,6 +10808,11 @@ /obj/structure/cable, /turf/open/floor/mainship/tcomms, /area/mainship/engineering/lower_engineering) +"nDE" = ( +/turf/open/floor/mainship/white{ + dir = 8 + }, +/area/mainship/living/pilotbunks) "nDF" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -10779,12 +10854,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) -"nGn" = ( -/obj/structure/bed/chair/nometal{ - dir = 1 - }, -/turf/open/floor/mainship/blue/full, -/area/mainship/living/briefing) "nHf" = ( /turf/open/floor/carpet/side{ dir = 1 @@ -10803,20 +10872,10 @@ /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/stern_hallway) "nIa" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 6 - }, -/obj/structure/table/mainship/nometal, -/obj/machinery/cell_charger, -/obj/effect/spawner/random/engineering/powercell, -/obj/effect/spawner/random/engineering/powercell, -/obj/machinery/light/mainship{ - dir = 8 - }, -/turf/open/floor/mainship/green{ - dir = 8 +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 10 }, +/turf/open/floor/plating, /area/mainship/squads/req) "nId" = ( /obj/machinery/camera/autoname/mainship{ @@ -10833,12 +10892,10 @@ }, /area/mainship/squads/general) "nIj" = ( -/obj/machinery/firealarm, -/obj/structure/table/mainship/nometal, -/obj/item/storage/box/donkpockets, -/turf/open/floor/mainship/white{ - dir = 1 - }, +/obj/structure/bed, +/obj/item/bedsheet/blue, +/obj/effect/landmark/start/job/pilotofficer, +/turf/open/floor/wood, /area/mainship/living/pilotbunks) "nIr" = ( /turf/open/floor/mainship/black{ @@ -10849,6 +10906,10 @@ /obj/machinery/vending/medical/shipside, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/chemistry) +"nIG" = ( +/obj/machinery/vending/uniform_supply, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "nJd" = ( /obj/machinery/door/airlock/mainship/medical/glass/chemistry, /obj/machinery/door/firedoor/mainship, @@ -10877,17 +10938,6 @@ }, /turf/open/floor/mainship, /area/mainship/squads/general) -"nMd" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/machinery/camera/autoname/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/cargo/arrow{ - dir = 8 - }, -/area/mainship/hallways/hangar/droppod) "nMm" = ( /obj/machinery/door/window, /obj/machinery/shower{ @@ -10901,10 +10951,10 @@ /turf/open/floor/mainship/floor, /area/mainship/squads/general) "nMG" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/item/stack/conveyor/thirty, -/obj/structure/rack, -/obj/item/conveyor_switch_construct, +/obj/machinery/vending/tool, +/obj/structure/closet/walllocker/hydrant/extinguisher{ + dir = 4 + }, /turf/open/floor/mainship/green{ dir = 8 }, @@ -10914,18 +10964,6 @@ /obj/item/trash/cigbutt, /turf/open/floor/wood, /area/mainship/living/cryo_cells) -"nNm" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/effect/ai_node, -/turf/open/floor/mainship/cargo/arrow{ - dir = 8 - }, -/area/mainship/hallways/hangar/droppod) "nNo" = ( /obj/structure/table/mainship/nometal, /obj/item/camera, @@ -10940,6 +10978,11 @@ dir = 4 }, /area/mainship/medical/upper_medical) +"nNY" = ( +/obj/machinery/camera/autoname/mainship, +/obj/structure/ship_ammo/cas/heavygun, +/turf/open/floor/mainship/cargo, +/area/mainship/hallways/hangar) "nOv" = ( /obj/structure/table/mainship/nometal, /obj/item/tool/wrench, @@ -10955,6 +10998,25 @@ /obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) +"nOV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/pilotbunks) +"nPF" = ( +/obj/structure/disposalpipe/segment/corner{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 9 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "nRz" = ( /obj/effect/soundplayer, /turf/closed/wall/mainship/white, @@ -10973,11 +11035,11 @@ /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) "nRP" = ( -/obj/machinery/light/mainship{ - dir = 4 +/obj/structure/sink{ + dir = 8 }, -/turf/open/floor/mainship/mono, -/area/mainship/living/grunt_rnr) +/turf/open/floor/mainship/sterile/white, +/area/mainship/living/bridgebunks) "nSH" = ( /obj/structure/table/mainship/nometal, /obj/machinery/computer/shuttle/shuttle_control/dropship, @@ -11000,22 +11062,32 @@ }, /turf/open/floor/mainship/mono, /area/mainship/engineering/upper_engineering) +"nUc" = ( +/obj/item/clothing/mask/muzzle, +/turf/open/floor/mainship/mono, +/area/mainship/hull/lower_hull) +"nVl" = ( +/obj/structure/rack, +/obj/structure/ob_ammo/warhead/explosive, +/obj/structure/ob_ammo/warhead/explosive, +/turf/open/floor/mainship/red{ + dir = 9 + }, +/area/mainship/shipboard/weapon_room) "nWd" = ( +/obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/power/apc{ - dir = 4 - }, -/turf/open/floor/mainship/mono, +/turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_umbilical) -"nWE" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +"nWM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 8 }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/hangar) +/obj/item/reagent_containers/hypospray/autoinjector/synaptizine_expired, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) "nWT" = ( /turf/open/floor/mainship_hull, /area/space) @@ -11053,16 +11125,32 @@ dir = 4 }, /area/mainship/shipboard/firing_range) -"oac" = ( -/obj/effect/turf_decal/warning_stripes/linethick{ +"nZU" = ( +/obj/machinery/landinglight/cas{ + dir = 1; + pixel_y = -4 + }, +/obj/effect/turf_decal/warning_stripes/thin{ dir = 1 }, -/obj/effect/turf_decal/warning_stripes/linethick{ +/obj/structure/cable, +/obj/structure/disposalpipe/segment/corner{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 6 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) +"oac" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 6 + }, /turf/open/floor/plating, -/area/mainship/hallways/starboard_hallway) +/area/mainship/squads/req) "oaf" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -11092,9 +11180,11 @@ /turf/open/floor/mainship/sterile/side, /area/mainship/medical/lower_medical) "oca" = ( -/obj/machinery/iv_drip, -/obj/machinery/power/apc/mainship, /obj/structure/cable, +/obj/structure/closet/secure_closet/medical2, +/obj/structure/sign/nosmoking_2{ + dir = 1 + }, /turf/open/floor/mainship/sterile/corner{ dir = 1 }, @@ -11108,21 +11198,13 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) "ocE" = ( -/obj/structure/cable, -/obj/effect/ai_node, -/turf/open/floor/mainship/sterile/dark, +/obj/machinery/vending/medical/shipside, +/turf/open/floor/mainship/sterile/side, /area/mainship/medical/upper_medical) "ocK" = ( -/obj/structure/cable, /obj/machinery/light/mainship{ light_color = "#da2f1b" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, /turf/open/floor/mainship/mono, /area/mainship/squads/req) "ocY" = ( @@ -11159,6 +11241,7 @@ /obj/machinery/camera/autoname/mainship{ dir = 8 }, +/obj/structure/sign/double/barsign, /turf/open/floor/wood, /area/mainship/living/grunt_rnr) "ohw" = ( @@ -11178,35 +11261,20 @@ /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) "oiy" = ( -/obj/structure/bed/chair/nometal{ - dir = 1 +/turf/open/floor/mainship/terragov/north{ + dir = 9 }, -/obj/effect/ai_node, -/turf/open/floor/mainship/orange/full, /area/mainship/living/briefing) -"ojv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +"oke" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) -"ojz" = ( /obj/structure/cable, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/structure/disposalpipe/segment/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) +/turf/open/floor/mainship/sterile/white, +/area/mainship/living/bridgebunks) "okO" = ( /obj/machinery/light/mainship/small, /obj/structure/cable, @@ -11225,13 +11293,8 @@ /turf/closed/wall/mainship/white, /area/mainship/medical/upper_medical) "omd" = ( -/obj/structure/sink{ - dir = 4 - }, -/obj/structure/mirror{ - dir = 8 - }, -/turf/open/floor/mainship/floor, +/obj/structure/sign/restroom, +/turf/open/floor/mainship/mono, /area/crew_quarters/toilet) "omk" = ( /obj/machinery/light/mainship{ @@ -11239,6 +11302,10 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/port_hallway) +"omz" = ( +/obj/machinery/holopad, +/turf/open/floor/grass, +/area/mainship/living/starboard_garden) "onk" = ( /obj/machinery/light/mainship{ dir = 4 @@ -11246,7 +11313,6 @@ /obj/machinery/camera/autoname/mainship{ dir = 1 }, -/obj/machinery/bot/cleanbot, /turf/open/floor/mainship/sterile/corner{ dir = 4 }, @@ -11294,13 +11360,8 @@ /turf/closed/wall/mainship, /area/mainship/command/self_destruct) "opn" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/obj/machinery/landinglight/cas{ - dir = 1; - pixel_y = -4 - }, +/obj/effect/turf_decal/warning_stripes/thin, +/obj/structure/largecrate/guns, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "opA" = ( @@ -11308,22 +11369,6 @@ /obj/structure/sign/safety/cryogenic, /turf/open/floor/mainship/sterile/side, /area/mainship/medical/lower_medical) -"opN" = ( -/obj/structure/rack, -/obj/machinery/camera/autoname/mainship{ - dir = 1 - }, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/turf/open/floor/mainship/red, -/area/mainship/shipboard/weapon_room) -"oqI" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/mainship/sterile/plain, -/area/mainship/living/tankerbunks) "oqS" = ( /obj/machinery/marine_selector/gear/engi, /obj/machinery/camera/autoname/mainship, @@ -11346,10 +11391,16 @@ }, /area/mainship/living/briefing) "orC" = ( -/obj/machinery/status_display, -/obj/effect/soundplayer, -/turf/closed/wall/mainship, -/area/mainship/living/briefing) +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/machinery/landinglight/tadpole{ + dir = 4; + pixel_x = -4 + }, +/obj/machinery/computer/dropship_picker, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "osb" = ( /obj/structure/dropship_equipment/shuttle/sentry_holder, /turf/open/floor/mainship/orange{ @@ -11364,24 +11415,28 @@ }, /area/mainship/medical/chemistry) "osF" = ( -/obj/structure/cable, +/obj/structure/closet/crate/weapon, /obj/structure/disposalpipe/segment, -/obj/item/reagent_containers/jerrycan, -/turf/open/floor/mainship/cargo/arrow{ - dir = 4 - }, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/req) "osQ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ on = 1 }, -/turf/open/floor/prison/kitchen, +/turf/open/floor/iron/kitchen, /area/mainship/living/grunt_rnr) "osT" = ( /obj/structure/table/mainship/nometal, /obj/effect/spawner/random/food_or_drink/donut, /turf/open/floor/mainship, /area/mainship/squads/general) +"otn" = ( +/obj/machinery/door/poddoor/railing{ + dir = 1; + id = "supply_elevator_railing" + }, +/turf/open/floor/mainship/cargo/arrow, +/area/mainship/squads/req) "ouq" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment/corner{ @@ -11437,10 +11492,6 @@ /obj/machinery/cryopod/right, /turf/open/floor/mainship/sterile/side, /area/mainship/medical/lower_medical) -"ozQ" = ( -/obj/structure/closet/wardrobe/chaplain_black, -/turf/open/floor/wood, -/area/mainship/living/chapel) "ozU" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -11451,6 +11502,15 @@ "oAb" = ( /turf/closed/wall/mainship/research/containment/wall/north, /area/mainship/medical/medical_science) +"oAz" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/obj/machinery/light/mainship{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "oAD" = ( /obj/machinery/camera/autoname/mainship{ dir = 4 @@ -11462,7 +11522,9 @@ /area/mainship/squads/general) "oCo" = ( /obj/structure/cable, -/obj/structure/closet/secure_closet/medical2, +/obj/machinery/power/apc/mainship, +/obj/machinery/iv_drip, +/obj/item/reagent_containers/blood/OPlus, /turf/open/floor/mainship/sterile/corner{ dir = 1 }, @@ -11483,9 +11545,7 @@ /obj/structure/sign/poster{ dir = 1 }, -/turf/open/floor/mainship/cargo/arrow{ - dir = 4 - }, +/turf/open/floor/mainship/cargo, /area/mainship/hallways/hangar) "oDx" = ( /obj/effect/soundplayer, @@ -11499,30 +11559,18 @@ /area/mainship/hallways/port_hallway) "oEm" = ( /obj/structure/cable, +/obj/vehicle/ridden/wheelchair{ + dir = 1 + }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/upper_medical) -"oFE" = ( -/obj/machinery/light/mainship{ - light_color = "#da2f1b" - }, -/turf/open/floor/wood, -/area/mainship/living/chapel) "oGN" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 - }, -/obj/machinery/gear{ - id = "supply_elevator_gear" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/landinglight/tadpole{ + pixel_y = 4 }, /turf/open/floor/mainship/mono, -/area/mainship/squads/req) +/area/mainship/hallways/hangar) "oGO" = ( /obj/machinery/light/mainship{ dir = 4 @@ -11548,10 +11596,16 @@ /obj/machinery/holopad, /turf/open/floor/mainship/mono, /area/mainship/shipboard/firing_range) -"oHV" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 +"oHw" = ( +/obj/effect/turf_decal/warning_stripes/thick/corner, +/obj/effect/turf_decal/warning_stripes/thick/corner{ + dir = 1 }, +/turf/open/floor/mainship/yellow_cargo/arrow{ + dir = 1 + }, +/area/mainship/shipboard/weapon_room) +"oHV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, @@ -11559,16 +11613,22 @@ dir = 4 }, /obj/structure/cable, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/port_hallway) -"oIb" = ( -/obj/effect/ai_node, -/obj/machinery/landinglight/alamo{ - pixel_y = 4 +"oHX" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 9 }, -/obj/effect/turf_decal/warning_stripes/thin, /turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/area/mainship/shipboard/weapon_room) +"oIb" = ( +/turf/open/floor/mainship/terragov/north{ + dir = 5 + }, +/area/mainship/living/briefing) "oIc" = ( /obj/machinery/status_display, /turf/closed/wall/mainship, @@ -11578,16 +11638,9 @@ /turf/open/floor/plating, /area/mainship/engineering/port_atmos) "oIu" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/obj/machinery/holopad, -/obj/machinery/landinglight/tadpole{ - dir = 1; - pixel_y = -4 - }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/mob/living/simple_animal/mouse, +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "oIC" = ( /obj/structure/table/mainship/nometal, /obj/item/storage/box/ids, @@ -11607,9 +11660,6 @@ }, /turf/open/floor/mainship/ntlogo/nt3, /area/mainship/squads/general) -"oKe" = ( -/turf/open/floor/mainship/black, -/area/mainship/living/pilotbunks) "oKm" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -11656,13 +11706,6 @@ }, /turf/open/floor/cult, /area/medical/morgue) -"oOo" = ( -/obj/machinery/light/mainship{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/wood, -/area/mainship/living/chapel) "oOG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -11670,6 +11713,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, +/mob/living/simple_animal/mouse, /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) "oOM" = ( @@ -11692,14 +11736,17 @@ /turf/open/floor/mainship/mono, /area/mainship/engineering/upper_engineering) "oOX" = ( -/obj/effect/turf_decal/warning_stripes/thin{ +/obj/effect/turf_decal/warning_stripes/thick{ dir = 4 }, -/obj/machinery/firealarm{ - dir = 1 +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 }, -/turf/open/floor/mainship/black, -/area/mainship/living/tankerbunks) +/obj/machinery/light/mainship{ + light_color = "#da2f1b" + }, +/turf/open/floor/mainship/floor, +/area/mainship/hallways/hangar/droppod) "oQL" = ( /obj/structure/cable, /turf/open/floor/mainship/mono, @@ -11714,15 +11761,11 @@ /turf/open/floor/mainship/mono, /area/mainship/engineering/engineering_workshop) "oRH" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, -/obj/structure/table/mainship/nometal, -/obj/machinery/microwave, -/turf/open/floor/mainship/white{ - dir = 1 +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 5 }, -/area/mainship/living/pilotbunks) +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) "oRM" = ( /obj/machinery/atmospherics/components/binary/valve/digital/on{ dir = 4 @@ -11733,20 +11776,19 @@ }, /turf/open/floor/mainship/mono, /area/mainship/engineering/port_atmos) -"oSl" = ( -/obj/machinery/door/poddoor/mainship/mech{ - dir = 1 - }, -/obj/machinery/door/airlock/multi_tile/mainship/generic/mechbay, -/obj/machinery/door/firedoor/multi_tile, -/turf/open/floor/mainship/mono, -/area/mainship/living/tankerbunks) "oSs" = ( /obj/machinery/light/mainship{ dir = 4 }, +/obj/structure/rack, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/fire{ + pixel_x = 3; + pixel_y = 3 + }, /turf/open/floor/mainship/green{ - dir = 6 + dir = 4 }, /area/mainship/squads/req) "oSt" = ( @@ -11761,6 +11803,15 @@ /obj/machinery/light/mainship, /turf/open/floor/mainship/mono, /area/mainship/hallways/stern_hallway) +"oTZ" = ( +/obj/machinery/light/mainship{ + dir = 1 + }, +/obj/machinery/vending/cola, +/turf/open/floor/mainship/silver{ + dir = 1 + }, +/area/mainship/living/chapel) "oUt" = ( /obj/machinery/recycler{ dir = 8 @@ -11800,17 +11851,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/engineering/port_atmos) -"oYA" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 6 - }, -/obj/effect/ai_node, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) -"oZb" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/mainship/cargo, -/area/mainship/shipboard/weapon_room) "oZh" = ( /obj/item/reagent_containers/food/snacks/meat{ pixel_x = -1; @@ -11833,11 +11873,25 @@ /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) "oZN" = ( -/obj/structure/closet/crate/weapon, +/obj/machinery/landinglight/cas{ + dir = 1; + pixel_y = -4 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, /obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/mainship/cargo, -/area/mainship/squads/req) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "oZY" = ( /obj/machinery/light/mainship{ dir = 8 @@ -11857,6 +11911,19 @@ dir = 8 }, /area/mainship/squads/general) +"paw" = ( +/obj/item/reagent_containers/food/snacks/grown/poppy, +/obj/item/paper/memorial, +/turf/open/floor/grass, +/area/mainship/living/starboard_garden) +"pax" = ( +/obj/machinery/door/airlock/multi_tile/mainship/secdoor/glass{ + dir = 1; + req_access = null; + req_one_access = list(2,42) + }, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/brig) "pay" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -11869,6 +11936,7 @@ /obj/machinery/camera/autoname/mainship{ dir = 1 }, +/obj/structure/dropship_equipment/cas/weapon/bomblet_pod, /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar) "pbe" = ( @@ -11881,6 +11949,13 @@ /obj/structure/cable, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_hallway) +"pbh" = ( +/obj/effect/ai_node, +/obj/structure/prop/mainship/name_stencil/C, +/turf/open/floor/mainship/black{ + dir = 5 + }, +/area/mainship/squads/general) "pbx" = ( /obj/machinery/light/mainship, /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ @@ -11910,45 +11985,35 @@ /turf/open/floor/mainship_hull, /area/space) "pdj" = ( -/obj/machinery/loadout_vendor, -/turf/open/floor/mainship/black{ - dir = 1 - }, -/area/mainship/living/tankerbunks) +/turf/closed/wall/mainship, +/area/mainship/hallways/hangar/droppod) "pdo" = ( /turf/open/floor/mainship/red/corner{ dir = 4 }, /area/mainship/command/airoom) +"pdw" = ( +/obj/structure/bed, +/obj/item/bedsheet/captain, +/obj/effect/landmark/start/job/staffofficer, +/turf/open/floor/mainship/mono, +/area/mainship/living/bridgebunks) "peg" = ( -/obj/structure/bed/stool{ - pixel_y = 8 - }, /obj/structure/flora/ausbushes/fullgrass, -/obj/structure/sign/prop1, /turf/open/floor/grass, /area/mainship/living/starboard_garden) "peH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, /obj/machinery/camera/autoname/mainship{ dir = 1 }, /turf/open/floor/mainship/mono, /area/mainship/squads/req) "peU" = ( -/obj/machinery/power/apc, -/obj/structure/cable, -/obj/structure/table/mainship/nometal, -/turf/open/floor/mainship/white{ +/obj/effect/turf_decal/warning_stripes/thick{ dir = 5 }, -/area/mainship/living/pilotbunks) +/turf/open/floor/plating, +/area/mainship/squads/req) "pfi" = ( /obj/machinery/door/window, /obj/machinery/shower{ @@ -11958,6 +12023,7 @@ /obj/item/tool/soap, /obj/item/attachable/bayonetknife, /obj/effect/decal/cleanable/blood, +/obj/item/storage/pill_bottle/quickclot, /turf/open/floor/mainship/sterile, /area/mainship/medical/upper_medical) "pfH" = ( @@ -11967,10 +12033,18 @@ }, /turf/open/floor/wood, /area/mainship/command/corporateliaison) +"pfU" = ( +/obj/effect/turf_decal/warning_stripes/thick/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/yellow_cargo/arrow, +/area/mainship/hallways/hangar/droppod) "pfV" = ( /obj/structure/table/mainship, /obj/item/folder/white, /obj/item/pizzabox, +/obj/item/whistle, /turf/open/floor/mainship, /area/mainship/squads/general) "pgh" = ( @@ -11979,32 +12053,44 @@ }, /area/mainship/medical/chemistry) "pgp" = ( -/obj/effect/attach_point/weapon/dropship2{ +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/effect/turf_decal/warning_stripes/thin{ dir = 4 }, -/turf/open/floor/plating, +/obj/machinery/landinglight/alamo{ + dir = 8; + pixel_x = 4 + }, +/obj/structure/largecrate/guns, +/turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "pgq" = ( -/obj/structure/rack, -/obj/item/storage/toolbox/mechanical, -/turf/open/floor/mainship/black{ - dir = 1 - }, -/area/mainship/living/tankerbunks) +/obj/structure/drop_pod_launcher, +/obj/structure/droppod/leader, +/turf/open/floor/mainship/yellow_cargo, +/area/mainship/hallways/hangar/droppod) "pgv" = ( /obj/machinery/camera/autoname/mainship, /turf/open/floor/plating/mainship, /area/mainship/shipboard/firing_range) "pgL" = ( /obj/structure/flora/ausbushes/fullgrass, -/obj/machinery/light/mainship{ - dir = 8 - }, /obj/structure/bed/stool{ pixel_y = 8 }, /turf/open/floor/grass, /area/mainship/living/starboard_garden) +"pha" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/turf/open/floor/mainship/cargo/arrow, +/area/mainship/hallways/hangar) "phr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -12012,8 +12098,14 @@ /turf/open/floor/mainship/office, /area/mainship/hallways/hangar) "pid" = ( -/obj/structure/closet/walllocker/hydrant/extinguisher, -/turf/open/floor/mainship/mono, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/item/radio/intercom/general, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/hallways/hangar) "pii" = ( /obj/effect/soundplayer, @@ -12064,6 +12156,16 @@ }, /turf/open/floor/plating, /area/mainship/hallways/hangar) +"plO" = ( +/obj/structure/sign/restroom, +/obj/structure/mirror{ + dir = 8 + }, +/obj/structure/sink{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/crew_quarters/toilet) "plR" = ( /obj/machinery/robotic_cradle, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, @@ -12072,6 +12174,10 @@ dir = 4 }, /area/mainship/medical/lower_medical) +"pmP" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/mainship/mono, +/area/crew_quarters/toilet) "pmY" = ( /obj/structure/table/mainship/nometal, /obj/machinery/computer/atmos_alert, @@ -12136,11 +12242,6 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/upper_medical) -"pqh" = ( -/turf/open/floor/mainship/black{ - dir = 1 - }, -/area/mainship/living/pilotbunks) "pqm" = ( /obj/machinery/marine_selector/clothes/engi, /obj/machinery/light/mainship{ @@ -12154,10 +12255,16 @@ /turf/open/floor/mainship/mono, /area/mainship/command/corporateliaison) "pqC" = ( -/obj/effect/attach_point/weapon/dropship2{ - dir = 8 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 }, -/turf/open/floor/plating, +/obj/effect/ai_node, +/obj/machinery/landinglight/tadpole{ + dir = 4; + pixel_x = -4 + }, +/obj/item/clothing/head/warning_cone, +/turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "prY" = ( /obj/machinery/computer/camera_advanced/overwatch/req, @@ -12223,6 +12330,7 @@ "pvW" = ( /obj/item/toy/deck, /obj/structure/table/woodentable, +/obj/item/toy/plush/snake, /turf/open/floor/wood, /area/mainship/living/grunt_rnr) "pvX" = ( @@ -12231,12 +12339,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/starboard_hallway) -"pwa" = ( -/obj/machinery/vending/lasgun, -/turf/open/floor/mainship/orange{ - dir = 8 - }, -/area/mainship/hallways/hangar) "pwb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable, @@ -12244,15 +12346,8 @@ /turf/open/floor/mainship/mono, /area/mainship/engineering/engineering_workshop) "pwj" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thin, -/obj/machinery/landinglight/cas{ - dir = 8; - pixel_x = 4 - }, -/turf/open/floor/mainship/mono, +/obj/item/clothing/head/warning_cone, +/turf/open/floor/plating, /area/mainship/hallways/hangar) "pwI" = ( /obj/machinery/light/mainship{ @@ -12274,7 +12369,7 @@ "pyl" = ( /obj/machinery/power/fusion_engine/preset, /obj/structure/cable, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/hexagon, /area/mainship/engineering/engine_core) "pyG" = ( /obj/machinery/vending/armor_supply, @@ -12284,7 +12379,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/mainship/cargo/arrow{ +/turf/open/floor/mainship/yellow_cargo/arrow{ dir = 8 }, /area/mainship/squads/general) @@ -12297,14 +12392,10 @@ }, /turf/open/floor/mainship/sterile/purple/corner, /area/mainship/medical/chemistry) -"pyX" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/mainship/black/corner{ - dir = 1 - }, -/area/mainship/living/tankerbunks) "pzq" = ( /obj/structure/prop/mainship/hangar_stencil, +/obj/structure/table/mainship/nometal, +/obj/item/storage/box/bodybags, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "pzU" = ( @@ -12330,8 +12421,10 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/port_hallway) "pBR" = ( -/obj/structure/largecrate/guns, -/turf/open/floor/mainship/office, +/obj/structure/largecrate/supply/supplies/water, +/turf/open/floor/mainship/orange{ + dir = 4 + }, /area/mainship/hallways/hangar) "pCd" = ( /obj/structure/closet/secure_closet/engineering_personal, @@ -12345,12 +12438,6 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) -"pDT" = ( -/obj/structure/largecrate/supply/supplies/flares, -/turf/open/floor/mainship/orange{ - dir = 4 - }, -/area/mainship/hallways/hangar) "pEF" = ( /obj/structure/table/mainship/nometal, /obj/item/clothing/suit/storage/hazardvest, @@ -12362,6 +12449,7 @@ /obj/machinery/camera/autoname/mainship{ dir = 8 }, +/obj/item/stack/sandbags_empty/half, /turf/open/floor/mainship/mono, /area/mainship/command/cic) "pEN" = ( @@ -12371,8 +12459,17 @@ /obj/machinery/light/mainship{ dir = 1 }, +/obj/effect/spawner/random/misc/structure/flavorvending/snackweighted, /turf/open/floor/mainship/mono, /area/mainship/hallways/aft_hallway) +"pFs" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/stern_hallway) "pFw" = ( /obj/machinery/door/airlock/mainship/maint{ dir = 2 @@ -12390,35 +12487,28 @@ dir = 1 }, /obj/machinery/camera/autoname/mainship, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/general) "pHl" = ( /obj/structure/cable, /obj/structure/window/framed/mainship, /turf/open/floor/plating, /area/mainship/engineering/lower_engineering) -"pHo" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/light/mainship{ - dir = 8 - }, -/turf/open/floor/mainship/black{ - dir = 8 - }, -/area/mainship/living/tankerbunks) "pHB" = ( -/obj/machinery/camera/autoname/mainship{ +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, +/obj/machinery/power/apc{ dir = 1 }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar/droppod) +/obj/structure/cable, +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "pHC" = ( /obj/structure/bed/bunkbed, /obj/effect/landmark/start/job/squadmarine, /obj/effect/landmark/start/job/squadmarine, -/obj/item/trash/barcardine, +/obj/item/trash/barcaridine, /turf/open/floor/wood, /area/mainship/living/cryo_cells) "pHV" = ( @@ -12436,16 +12526,14 @@ /turf/open/floor/carpet, /area/mainship/living/commandbunks) "pJi" = ( -/obj/structure/table/mainship/nometal, -/obj/effect/spawner/random/misc/paperbin, -/obj/item/storage/fancy/cigar, -/obj/item/tool/lighter/zippo, -/obj/item/tool/pen, /obj/machinery/light/mainship{ - light_color = "#da2f1b" + dir = 8 }, +/obj/structure/table/mainship/nometal, +/obj/item/pizzabox/meat, +/obj/item/facepaint/green, /turf/open/floor/mainship/green{ - dir = 10 + dir = 9 }, /area/mainship/squads/req) "pJs" = ( @@ -12455,16 +12543,11 @@ /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/chemistry) "pJv" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/turf/open/floor/mainship/cargo/arrow{ - dir = 8 +/obj/machinery/light/mainship{ + dir = 1 }, -/area/mainship/hallways/hangar/droppod) +/turf/open/floor/wood, +/area/mainship/living/mechpilotquarters) "pKl" = ( /obj/machinery/door/firedoor/mainship{ dir = 2 @@ -12486,10 +12569,9 @@ /obj/item/reagent_containers/food/drinks/shaker, /obj/item/clothing/gloves/latex, /obj/item/clothing/head/chefhat, -/obj/item/clothing/suit/chef/classic, /obj/item/tool/kitchen/rollingpin, /obj/item/book/manual/chef_recipes, -/turf/open/floor/mainship/mono, +/turf/open/floor/iron/kitchen, /area/mainship/living/grunt_rnr) "pLb" = ( /obj/machinery/light/mainship{ @@ -12500,13 +12582,6 @@ dir = 8 }, /area/mainship/engineering/engineering_workshop) -"pLj" = ( -/obj/structure/prop/mainship/cannon_cable_connector, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) "pLk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -12514,8 +12589,15 @@ /turf/open/floor/mainship/cargo/arrow, /area/mainship/hallways/hangar) "pLB" = ( -/turf/open/floor/plating/icefloor/warnplate, +/obj/effect/ai_node, +/turf/open/floor/plating, /area/mainship/squads/req) +"pLD" = ( +/obj/effect/turf_decal/warning_stripes/thick/corner{ + dir = 1 + }, +/turf/open/floor/plating, +/area/mainship/hallways/hangar) "pLU" = ( /obj/machinery/light/mainship{ dir = 8 @@ -12575,7 +12657,6 @@ }, /area/mainship/medical/medical_science) "pPR" = ( -/obj/machinery/door/airlock/mainship/command, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, @@ -12584,6 +12665,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/door/airlock/mainship/command/officer, /turf/open/floor/mainship/mono, /area/mainship/living/bridgebunks) "pPS" = ( @@ -12605,6 +12687,14 @@ /obj/structure/closet/toolcloset, /turf/open/floor/mainship/mono, /area/mainship/hallways/starboard_hallway) +"pQt" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment/corner{ + dir = 1 + }, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hull/lower_hull) "pQG" = ( /obj/machinery/door/airlock/mainship/command/cic, /turf/open/floor/mainship/mono, @@ -12625,23 +12715,17 @@ /turf/open/floor/mainship, /area/mainship/squads/general) "pSt" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/sterile/dark, -/area/crew_quarters/toilet) -"pSV" = ( -/obj/item/radio/intercom/general, -/obj/effect/turf_decal/warning_stripes/thin{ +/obj/effect/turf_decal/warning_stripes/thick{ dir = 4 }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/turf/open/floor/mainship/cargo/arrow{ - dir = 4 +/obj/machinery/light/mainship{ + dir = 1 }, +/turf/open/floor/mainship/floor, /area/mainship/hallways/hangar/droppod) +"pSV" = ( +/turf/open/floor/mainship/hexagon, +/area/mainship/living/mechpilotquarters) "pSX" = ( /obj/machinery/light/mainship{ dir = 1 @@ -12663,7 +12747,7 @@ /area/mainship/hallways/boxingring) "pTP" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/prison/kitchen, +/turf/open/floor/iron/kitchen, /area/mainship/living/grunt_rnr) "pTU" = ( /obj/machinery/disposal, @@ -12694,9 +12778,15 @@ /area/mainship/squads/general) "pVY" = ( /obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 + dir = 5 }, -/obj/structure/ship_ammo/cas/rocket/banshee, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 9 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 10 + }, +/obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "pWo" = ( @@ -12729,18 +12819,24 @@ /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/port_hallway) "pXw" = ( -/obj/structure/rack, -/obj/item/reagent_containers/jerrycan, -/obj/item/reagent_containers/jerrycan, -/obj/item/reagent_containers/jerrycan, -/obj/item/reagent_containers/jerrycan, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/structure/closet/walllocker/hydrant/extinguisher, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) +"pZE" = ( +/obj/structure/sign/prop1{ + dir = 1 + }, /obj/machinery/light/mainship{ dir = 1 }, -/obj/item/reagent_containers/jerrycan, -/obj/item/reagent_containers/jerrycan, /turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/area/mainship/hallways/port_hallway) "pZF" = ( /obj/machinery/light/mainship{ dir = 8 @@ -12760,7 +12856,7 @@ dir = 8; pixel_x = 4 }, -/turf/open/floor/mainship/cargo/arrow{ +/turf/open/floor/mainship/yellow_cargo/arrow{ dir = 8 }, /area/mainship/hallways/hangar) @@ -12786,11 +12882,6 @@ }, /turf/open/floor/engine, /area/mainship/engineering/port_atmos) -"qcx" = ( -/obj/structure/table/woodentable, -/obj/item/storage/bible, -/turf/open/floor/wood, -/area/mainship/living/chapel) "qcA" = ( /obj/structure/cable, /obj/machinery/camera/autoname/mainship{ @@ -12830,10 +12921,12 @@ /turf/open/floor/mainship/sterile/purple/side, /area/mainship/medical/chemistry) "qfG" = ( -/obj/item/clothing/head/modular/marine, -/obj/item/reagent_containers/food/snacks/grown/poppy, /obj/structure/cable, -/turf/open/floor/mainship/mono, +/obj/structure/bed/stool{ + pixel_y = 8 + }, +/obj/machinery/power/apc, +/turf/open/floor/grass, /area/mainship/living/starboard_garden) "qha" = ( /turf/closed/wall/mainship, @@ -12842,12 +12935,6 @@ /obj/machinery/marine_selector/clothes/medic, /turf/open/floor/mainship/floor, /area/mainship/squads/general) -"qhv" = ( -/obj/structure/largecrate/supply/supplies/water, -/turf/open/floor/mainship/orange{ - dir = 4 - }, -/area/mainship/hallways/hangar) "qiy" = ( /obj/structure/cable, /obj/machinery/door/airlock/mainship/maint, @@ -12860,12 +12947,21 @@ /turf/open/floor/wood, /area/mainship/living/cryo_cells) "qjj" = ( -/obj/machinery/door/airlock/mainship/generic/pilot/bunk, -/turf/open/floor/mainship/floor, -/area/mainship/living/pilotbunks) +/obj/machinery/door/airlock/mainship/maint, +/obj/machinery/door/firedoor/mainship{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/tankerbunks) "qjm" = ( -/turf/open/floor/plating/plating_catwalk, -/area/mainship/shipboard/weapon_room) +/obj/effect/ai_node, +/obj/structure/disposalpipe/segment/corner{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/power/apc, +/turf/open/floor/mainship/mono, +/area/mainship/hull/lower_hull) "qjw" = ( /obj/structure/closet/bodybag, /obj/effect/decal/cleanable/blood, @@ -12877,14 +12973,6 @@ /obj/item/moneybag/vault, /turf/open/floor/mainship/red/full, /area/mainship/command/cic) -"qjW" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 - }, -/obj/effect/ai_node, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) "qkt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -12909,11 +12997,6 @@ /obj/machinery/photocopier, /turf/open/floor/mainship/mono, /area/mainship/command/cic) -"qlc" = ( -/obj/structure/table/woodentable, -/obj/effect/spawner/random/misc/table_lighting, -/turf/open/floor/wood, -/area/mainship/living/tankerbunks) "qlo" = ( /obj/machinery/light/mainship{ dir = 1 @@ -12987,15 +13070,6 @@ dir = 1 }, /area/mainship/medical/lower_medical) -"qrR" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 6 - }, -/obj/machinery/gear{ - id = "supply_elevator_gear" - }, -/turf/open/floor/mainship/mono, -/area/mainship/squads/req) "qsh" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 1 @@ -13010,12 +13084,13 @@ /area/mainship/hull/lower_hull) "qsC" = ( /obj/structure/cable, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/hexagon, /area/mainship/engineering/engine_core) "qsI" = ( -/obj/structure/cable, /obj/structure/disposalpipe/segment, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/yellow_cargo/arrow{ + dir = 4 + }, /area/mainship/squads/req) "qto" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -13025,7 +13100,7 @@ dir = 4 }, /obj/structure/cable, -/turf/open/floor/mainship/orange, +/turf/open/floor/mainship/hexagon, /area/mainship/engineering/engine_core) "qtz" = ( /obj/machinery/camera/autoname/mainship, @@ -13052,6 +13127,26 @@ "qvJ" = ( /turf/closed/wall/mainship, /area/mainship/living/grunt_rnr) +"qvM" = ( +/obj/docking_port/stationary/supply, +/turf/open/floor/mainship/empty, +/area/mainship/squads/req) +"qvN" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "qwg" = ( /obj/structure/disposalpipe/segment, /obj/effect/ai_node, @@ -13076,14 +13171,10 @@ /obj/machinery/vending/armor_supply, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) -"qwW" = ( -/obj/machinery/door/firedoor/mainship, -/obj/machinery/door/poddoor/mainship/mech, -/turf/open/floor/mainship/stripesquare, -/area/mainship/living/pilotbunks) "qxp" = ( -/obj/structure/bed/chair/comfy/black, -/turf/open/floor/mainship/purple/full, +/turf/open/floor/mainship/terragov/north{ + dir = 8 + }, /area/mainship/living/briefing) "qxw" = ( /obj/machinery/power/apc/mainship, @@ -13113,16 +13204,9 @@ /area/mainship/hull/lower_hull) "qyU" = ( /obj/effect/ai_node, +/obj/structure/disposalpipe/segment, /turf/open/floor/mainship/floor, /area/mainship/command/corporateliaison) -"qyZ" = ( -/obj/structure/rack, -/obj/structure/ob_ammo/warhead/cluster, -/obj/structure/ob_ammo/warhead/cluster, -/turf/open/floor/mainship/red{ - dir = 5 - }, -/area/mainship/shipboard/weapon_room) "qzp" = ( /obj/structure/bed/bunkbed, /obj/effect/landmark/start/job/squadcorpsman, @@ -13138,6 +13222,13 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) +"qzN" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ + dir = 8; + on = 1 + }, +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) "qAE" = ( /obj/machinery/light/mainship/small{ dir = 8 @@ -13182,20 +13273,6 @@ /obj/structure/closet/secure_closet/guncabinet/mp_armory, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/medical_science) -"qDG" = ( -/obj/machinery/door/firedoor/mainship, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/mainship/stripesquare, -/area/mainship/living/pilotbunks) "qEt" = ( /obj/structure/sign/poster{ dir = 1 @@ -13222,7 +13299,7 @@ dir = 1 }, /obj/structure/sign/poster, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/general) "qFQ" = ( /obj/effect/turf_decal/warning_stripes/thin{ @@ -13271,7 +13348,7 @@ /area/mainship/squads/req) "qHv" = ( /obj/structure/table/mainship/nometal, -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 50; pixel_x = 3; pixel_y = 3 @@ -13286,6 +13363,10 @@ }, /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) +"qHC" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/layer1, +/turf/open/floor/mainship/mono, +/area/mainship/living/pilotbunks) "qIt" = ( /obj/structure/table/mainship/nometal, /obj/effect/spawner/random/engineering/extinguisher/regularweighted, @@ -13294,6 +13375,16 @@ /obj/machinery/door_display/research_cell/cell, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/medical_science) +"qIE" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "qIG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -13312,11 +13403,11 @@ /turf/open/floor/wood, /area/mainship/living/numbertwobunks) "qKp" = ( -/obj/structure/ship_ammo/cas/heavygun, /obj/effect/decal/cleanable/blood/writing{ desc = "It looks like a writing in blood. It says, 'We live as we dream, alone.'"; dir = 4 }, +/obj/structure/ship_ammo/cas/minirocket, /turf/open/floor/mainship/cargo, /area/mainship/hallways/hangar) "qKw" = ( @@ -13349,10 +13440,12 @@ }, /area/mainship/squads/general) "qMG" = ( -/obj/machinery/firealarm{ +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/power/apc/mainship/hardened{ dir = 4 }, -/turf/open/floor/mainship/mono, +/turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_umbilical) "qMI" = ( /obj/machinery/shower{ @@ -13362,27 +13455,52 @@ /area/mainship/medical/medical_science) "qMJ" = ( /obj/structure/window/framed/mainship/white, -/obj/machinery/door/firedoor/mainship, /obj/machinery/door/poddoor/shutters/opened/medbay, +/obj/machinery/door/poddoor/shutters/mainship{ + dir = 1; + id = "or2privacyshutter"; + name = "\improper Privacy Shutters" + }, +/obj/machinery/door/poddoor/shutters/mainship{ + dir = 1; + id = "or1privacyshutter"; + name = "\improper Privacy Shutters" + }, /turf/open/floor/plating/platebotc, /area/mainship/medical/operating_room_one) "qMR" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 }, -/turf/open/floor/plating/plating_catwalk, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/machinery/landinglight/alamo{ + dir = 8; + pixel_x = 4 + }, +/obj/structure/largecrate/guns/russian, +/turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "qNE" = ( -/obj/machinery/door/poddoor/railing{ - dir = 2; - id = "supply_elevator_railing" - }, -/obj/machinery/computer/ordercomp, -/turf/open/floor/mainship/cargo/arrow{ +/obj/effect/turf_decal/warning_stripes/thin{ dir = 1 }, +/obj/machinery/landinglight/tadpole{ + dir = 1; + pixel_y = -4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/gear{ + id = "supply_elevator_gear" + }, +/turf/open/floor/mainship/mono, /area/mainship/squads/req) "qOa" = ( /obj/structure/table/reinforced, @@ -13391,32 +13509,57 @@ id = "or2privacyshutter"; name = "Privacy Shutters" }, -/obj/structure/cable, /obj/item/storage/surgical_tray, -/obj/item/reagent_containers/spray/surgery, -/obj/structure/sign/nosmoking_2{ - dir = 1 +/obj/item/reagent_containers/spray/surgery{ + pixel_x = -5; + pixel_y = 10 + }, +/obj/item/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 = 6; + pixel_y = 10 }, /turf/open/floor/mainship/sterile/side{ dir = 1 }, /area/mainship/medical/operating_room_two) +"qOC" = ( +/obj/structure/closet/secure_closet/military_police, +/turf/open/floor/plating/mainship, +/area/mainship/shipboard/brig) +"qOJ" = ( +/obj/machinery/power/apc, +/obj/structure/cable, +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) "qPc" = ( -/obj/effect/turf_decal/warning_stripes/thick/corner{ +/obj/machinery/landinglight/cas{ + dir = 1; + pixel_y = -4 + }, +/obj/effect/turf_decal/warning_stripes/thin{ dir = 1 }, -/turf/open/floor/plating, +/turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "qPq" = ( /obj/structure/sign/chemistry, /turf/closed/wall/mainship/white, /area/mainship/medical/chemistry) "qPD" = ( -/obj/effect/turf_decal/warning_stripes/thick{ +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/effect/turf_decal/warning_stripes/thin{ dir = 4 }, -/obj/item/clothing/head/warning_cone, -/turf/open/floor/plating, +/obj/machinery/landinglight/alamo{ + dir = 8; + pixel_x = 4 + }, +/obj/structure/largecrate/guns/merc, +/turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "qQk" = ( /obj/machinery/light/mainship/small, @@ -13427,15 +13570,20 @@ /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) "qQD" = ( -/obj/machinery/vending/weapon, -/turf/open/floor/mainship/white{ - dir = 8 - }, -/area/mainship/living/pilotbunks) +/obj/effect/decal/cleanable/blood/oil, +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) "qQF" = ( -/obj/docking_port/stationary/supply, -/turf/open/floor/mainship/empty, -/area/mainship/squads/req) +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/machinery/landinglight/tadpole{ + dir = 4; + pixel_x = -4 + }, +/obj/item/clothing/head/warning_cone, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "qQR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -13449,17 +13597,13 @@ /turf/open/floor/mainship/mono, /area/mainship/command/corporateliaison) "qQY" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ +/obj/machinery/light/mainship{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ +/obj/machinery/vending/snack, +/turf/open/floor/mainship/silver{ dir = 1 }, -/obj/structure/cable, -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/wood, /area/mainship/living/chapel) "qRu" = ( /obj/structure/window/reinforced{ @@ -13478,18 +13622,6 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/upper_medical) -"qRX" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/light/mainship{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) "qRY" = ( /obj/machinery/light/mainship{ light_color = "#da2f1b" @@ -13497,11 +13629,6 @@ /obj/machinery/door/firedoor/mainship, /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/port_hallway) -"qSz" = ( -/turf/open/floor/mainship/black{ - dir = 6 - }, -/area/mainship/living/tankerbunks) "qST" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -13509,6 +13636,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) +"qTD" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) "qUg" = ( /turf/open/floor/mainship/floor, /area/mainship/living/numbertwobunks) @@ -13534,15 +13665,11 @@ /turf/open/space/basic, /area/space) "qVu" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/vehicle/ridden/wheelchair{ + dir = 1 }, -/obj/structure/cable, -/turf/open/floor/mainship/mono, -/area/mainship/living/chapel) +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/upper_medical) "qVS" = ( /obj/machinery/light/mainship, /turf/open/floor/wood, @@ -13568,6 +13695,30 @@ }, /turf/open/floor/plating, /area/mainship/hallways/hangar) +"qXc" = ( +/obj/machinery/vending/marineFood, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/obj/item/reagent_containers/food/snacks/protein_pack, +/turf/open/floor/mainship/black{ + dir = 4 + }, +/area/mainship/squads/general) "qXC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable, @@ -13604,30 +13755,19 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, -/turf/open/floor/mainship/cargo/arrow{ +/turf/open/floor/mainship/yellow_cargo/arrow{ dir = 1 }, /area/mainship/squads/general) "rbL" = ( -/obj/machinery/door/firedoor/multi_tile{ - dir = 1 - }, -/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric/glass{ - dir = 1 - }, -/obj/structure/sign/holy, -/turf/open/floor/mainship/mono, +/obj/structure/sign/evac, +/turf/closed/wall/mainship, /area/mainship/living/chapel) "rcm" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/light/mainship/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hull/lower_hull) +/obj/structure/flora/ausbushes/fullgrass, +/obj/effect/ai_node, +/turf/open/floor/grass, +/area/mainship/living/starboard_garden) "rcC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -13637,15 +13777,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/command/corporateliaison) -"rdS" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/camera/autoname/mainship{ - dir = 4 - }, -/turf/open/floor/mainship/black{ - dir = 8 - }, -/area/mainship/living/tankerbunks) "rea" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 @@ -13660,40 +13791,40 @@ /turf/closed/wall/mainship, /area/mainship/living/commandbunks) "reJ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/wood, +/obj/structure/bed/chair/nometal, +/turf/open/floor/mainship/mono, /area/mainship/living/chapel) "reZ" = ( /obj/machinery/vending/uniform_supply, /turf/open/floor/mainship/red/full, /area/mainship/command/cic) "rgj" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/air_alarm, -/obj/structure/table/mainship/nometal, -/obj/item/folder/black, -/obj/item/book/manual/orbital_cannon_manual, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) +/obj/structure/cable, +/obj/machinery/light/mainship/small{ + dir = 1 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hull/lower_hull) +"rgx" = ( +/obj/machinery/door/firedoor/multi_tile, +/obj/structure/cable, +/obj/machinery/door/airlock/multi_tile/mainship/secdoor/glass{ + req_access = null; + req_one_access = list(2,42) + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/floor, +/area/mainship/hallways/starboard_hallway) "rio" = ( /obj/structure/toilet{ dir = 4 }, /turf/open/floor/mainship/mono, /area/mainship/living/commandbunks) -"rip" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/pilotbunks) "rjL" = ( /obj/structure/table/mainship/nometal, /obj/machinery/computer/secure_data, @@ -13734,41 +13865,39 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/port_hallway) "rly" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/cigaretteweighted, +/obj/machinery/light/mainship{ + dir = 4 + }, /turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/area/mainship/living/briefing) "rlR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "rmQ" = ( -/obj/structure/bed/chair/nometal{ +/obj/effect/turf_decal/warning_stripes/thick{ dir = 1 }, -/turf/open/floor/mainship/floor, -/area/mainship/living/pilotbunks) +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) "roD" = ( -/obj/structure/cable, -/obj/structure/table/mainship/nometal, -/obj/machinery/door_control/old/req, -/turf/open/floor/mainship/green{ - dir = 4 - }, +/obj/effect/landmark/start/job/requisitionsofficer, +/obj/structure/bed/chair/office/dark, +/obj/structure/disposalpipe/segment, +/turf/open/floor/mainship/mono, /area/mainship/squads/req) "roM" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/engine, /area/mainship/engineering/port_atmos) "roN" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/black{ - dir = 1 - }, -/area/mainship/living/pilotbunks) +/obj/machinery/loadout_vendor, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "roU" = ( /obj/structure/table/mainship/nometal, /obj/machinery/microwave{ @@ -13777,9 +13906,6 @@ /obj/item/storage/box/donkpockets, /turf/open/floor/mainship/mono, /area/mainship/engineering/upper_engineering) -"rpk" = ( -/turf/open/floor/plating, -/area/mainship/living/tankerbunks) "rpv" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -13791,6 +13917,16 @@ }, /turf/open/floor/mainship/mono, /area/mainship/squads/req) +"rpB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "rpS" = ( /obj/structure/sink{ dir = 1 @@ -13800,6 +13936,15 @@ }, /turf/open/floor/mainship/floor, /area/mainship/medical/upper_medical) +"rqz" = ( +/obj/structure/bed/chair/ob_chair, +/obj/machinery/computer/orbital_cannon_console, +/obj/effect/spawner/random/misc/gnome, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) "rqW" = ( /obj/effect/spawner/random/machinery/machine_frame, /turf/open/floor/mainship/cargo, @@ -13812,16 +13957,19 @@ /turf/open/floor/mainship, /area/mainship/squads/general) "rrj" = ( -/obj/effect/decal/cleanable/blood/gibs/robot/limb, -/obj/machinery/computer/mech_builder{ - dir = 8 +/obj/structure/droppod, +/obj/structure/drop_pod_launcher, +/obj/effect/decal/cleanable/blood/writing{ + desc = "It looks like a writing in blood. It says, 'I am missing and forgotten.'"; + dir = 4 }, -/turf/open/floor/plating, -/area/mainship/living/tankerbunks) +/turf/open/floor/mainship/yellow_cargo, +/area/mainship/hallways/hangar/droppod) "rrt" = ( -/obj/structure/sign/evac, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/port_hallway) +/obj/structure/table/woodentable, +/obj/item/toy/plush/lizard, +/turf/open/floor/wood, +/area/mainship/living/grunt_rnr) "rrw" = ( /obj/machinery/loadout_vendor, /turf/open/floor/mainship/red/full, @@ -13852,6 +14000,12 @@ /obj/machinery/holopad, /turf/open/floor/wood, /area/mainship/command/corporateliaison) +"rsk" = ( +/obj/structure/table/mainship/nometal, +/obj/item/book/manual/marine_law, +/obj/effect/spawner/random/misc/gnome, +/turf/open/floor/mainship/floor, +/area/mainship/shipboard/brig) "rst" = ( /obj/structure/bed/chair/comfy{ dir = 1 @@ -13859,7 +14013,7 @@ /turf/open/floor/mainship/sterile/side, /area/mainship/medical/upper_medical) "rtf" = ( -/obj/effect/turf_decal/warning_stripes/thin{ +/obj/effect/turf_decal/warning_stripes/thick{ dir = 4 }, /turf/open/floor/mainship/stripesquare, @@ -13868,6 +14022,7 @@ /obj/structure/table/fancywoodentable, /obj/item/newspaper, /obj/item/reagent_containers/food/drinks/britcup, +/obj/item/reagent_containers/food/drinks/milk, /turf/open/floor/wood, /area/mainship/living/numbertwobunks) "ruM" = ( @@ -13881,6 +14036,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 5 + }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "rxx" = ( @@ -13900,7 +14058,7 @@ /area/mainship/medical/lower_medical) "ryB" = ( /obj/machinery/camera/autoname/mainship, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/hexagon, /area/mainship/engineering/engine_core) "rzd" = ( /obj/machinery/cryopod/right, @@ -13921,24 +14079,28 @@ /turf/open/floor/mainship/mono, /area/mainship/command/cic) "rzG" = ( -/obj/structure/table/mainship/nometal, -/obj/item/megaphone, -/turf/open/floor/mainship/floor, +/turf/open/floor/mainship/terragov/north{ + dir = 4 + }, /area/mainship/living/briefing) "rzU" = ( -/obj/machinery/door/poddoor/railing{ - dir = 8; - id = "supply_elevator_railing" +/obj/structure/closet/emcloset, +/obj/machinery/landinglight/tadpole{ + dir = 4; + pixel_x = -4 }, -/obj/machinery/floodlight/landing, -/turf/open/floor/mainship/cargo/arrow{ +/obj/effect/turf_decal/warning_stripes/thin{ dir = 4 }, -/area/mainship/squads/req) +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "rAj" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/layer1, -/turf/open/floor/mainship/floor, -/area/mainship/living/pilotbunks) +/obj/structure/computerframe, +/obj/machinery/light/mainship{ + dir = 1 + }, +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) "rAB" = ( /obj/machinery/door/firedoor/mainship{ dir = 2; @@ -13947,7 +14109,8 @@ /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/starboard_hallway) "rAZ" = ( -/turf/open/floor/plating/dmg1, +/obj/docking_port/stationary/marine_dropship/cas, +/turf/open/floor/plating, /area/mainship/hallways/hangar) "rBx" = ( /obj/effect/turf_decal/warning_stripes/thin{ @@ -13962,20 +14125,9 @@ /turf/open/floor/mainship, /area/mainship/squads/general) "rCb" = ( -/obj/machinery/door/poddoor/railing{ - dir = 1; - id = "supply_elevator_railing" - }, -/obj/machinery/holopad, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/turf/open/floor/mainship/floor, -/area/mainship/squads/req) +/obj/machinery/vending/tool, +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) "rCl" = ( /obj/structure/disposalpipe/segment, /obj/effect/ai_node, @@ -13990,7 +14142,7 @@ dir = 1; pixel_y = -4 }, -/turf/open/floor/mainship/cargo/arrow{ +/turf/open/floor/mainship/yellow_cargo/arrow{ dir = 1 }, /area/mainship/hallways/hangar) @@ -14004,12 +14156,14 @@ /obj/structure/cable, /obj/effect/ai_node, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "rDn" = ( -/obj/machinery/recharger, /obj/structure/table/mainship/nometal, +/obj/machinery/recharger, /turf/open/floor/mainship/sterile/side, /area/mainship/medical/lower_medical) "rEw" = ( @@ -14018,6 +14172,7 @@ /obj/structure/cable, /obj/structure/disposalpipe/segment, /obj/effect/ai_node, +/obj/item/clothing/head/warning_cone, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) "rEM" = ( @@ -14055,9 +14210,9 @@ /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/medical_science) "rGl" = ( -/obj/machinery/mech_bay_recharge_port, -/turf/open/floor/mainship/tcomms, -/area/mainship/shipboard/weapon_room) +/obj/effect/ai_node, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/port_hallway) "rHh" = ( /obj/machinery/holopad, /turf/open/floor/mainship, @@ -14100,14 +14255,16 @@ "rKn" = ( /turf/closed/wall/mainship, /area/mainship/hull/lower_hull) -"rLL" = ( -/obj/machinery/door/firedoor/multi_tile{ - dir = 2 +"rKT" = ( +/obj/machinery/light/mainship{ + dir = 4 }, -/obj/machinery/door/airlock/multi_tile/mainship/generic/personal{ - dir = 2; - name = "Pilot Bunks" +/turf/open/floor/mainship/silver{ + dir = 6 }, +/area/mainship/living/chapel) +"rLL" = ( +/obj/machinery/holopad, /turf/open/floor/mainship/mono, /area/mainship/living/pilotbunks) "rMa" = ( @@ -14124,14 +14281,9 @@ /turf/open/floor/carpet/side, /area/mainship/living/commandbunks) "rOV" = ( -/obj/structure/sign/poster{ - dir = 1 - }, -/obj/machinery/light/mainship{ - dir = 8 - }, +/obj/machinery/vending/armor_supply, /turf/open/floor/wood, -/area/mainship/living/pilotbunks) +/area/mainship/living/tankerbunks) "rPd" = ( /obj/machinery/light/mainship{ dir = 1 @@ -14149,8 +14301,14 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "rPt" = ( -/obj/machinery/status_display, -/turf/closed/wall/mainship, +/obj/machinery/door/airlock/mainship/command/officer{ + dir = 2 + }, +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/turf/open/floor/mainship/mono, /area/mainship/living/bridgebunks) "rPu" = ( /obj/structure/cable, @@ -14172,14 +14330,10 @@ /turf/closed/wall/mainship, /area/mainship/living/cryo_cells) "rRC" = ( -/obj/effect/landmark/start/job/shiptech, -/obj/structure/bed/chair/office/dark{ - dir = 1 - }, -/turf/open/floor/mainship/green{ - dir = 4 - }, -/area/mainship/squads/req) +/obj/effect/decal/cleanable/blood/oil, +/obj/effect/ai_node, +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) "rSg" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -14190,6 +14344,15 @@ dir = 1 }, /area/mainship/medical/lower_medical) +"rSr" = ( +/obj/machinery/light/mainship{ + dir = 8 + }, +/obj/structure/mirror{ + dir = 4 + }, +/turf/open/floor/wood, +/area/mainship/living/tankerbunks) "rSA" = ( /turf/closed/wall/mainship/white, /area/medical/morgue) @@ -14208,6 +14371,12 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) +"rUm" = ( +/obj/structure/prop/mainship/name_stencil/M, +/turf/open/floor/mainship/black{ + dir = 5 + }, +/area/mainship/squads/general) "rUw" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -14224,15 +14393,6 @@ /obj/machinery/door/firedoor/mainship, /turf/open/floor/mainship, /area/mainship/squads/general) -"rUR" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) "rUW" = ( /obj/machinery/telecomms/receiver/preset_left, /turf/open/floor/mainship/tcomms, @@ -14248,24 +14408,33 @@ /turf/open/floor/wood, /area/mainship/living/grunt_rnr) "rWD" = ( -/obj/machinery/door/airlock/mainship/generic{ - name = "\improper Bathroom" - }, /obj/structure/cable, -/obj/structure/sign/restroom, /turf/open/floor/mainship/mono, -/area/crew_quarters/toilet) +/area/mainship/hallways/hangar/droppod) +"rWK" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/aft_hallway) "rWR" = ( /obj/structure/rack, /obj/item/uav_turret/droid, /turf/open/floor/plating/plating_catwalk, /area/mainship/command/airoom) "rXa" = ( -/obj/structure/bed, -/obj/item/bedsheet/blue, -/obj/effect/landmark/start/job/pilotofficer, -/turf/open/floor/wood, -/area/mainship/living/pilotbunks) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/starboard_hallway) "rXy" = ( /obj/effect/decal/cleanable/blood, /turf/open/floor/mainship/blue/full, @@ -14277,12 +14446,13 @@ /area/mainship/hallways/hangar) "rYQ" = ( /obj/machinery/vending/nanomed, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, /turf/open/floor/mainship/mono, /area/mainship/living/bridgebunks) "rZg" = ( @@ -14322,11 +14492,6 @@ /obj/item/reagent_containers/food/drinks/coffee, /turf/open/floor/mainship/mono, /area/mainship/engineering/engineering_workshop) -"sbg" = ( -/obj/structure/drop_pod_launcher, -/obj/structure/droppod/leader, -/turf/open/floor/mainship/cargo, -/area/mainship/hallways/hangar/droppod) "sbr" = ( /obj/structure/sink{ dir = 4 @@ -14342,11 +14507,16 @@ }, /area/mainship/squads/general) "sbN" = ( -/obj/structure/sign/nosmoking_2, -/turf/open/floor/mainship/black{ - dir = 6 +/obj/machinery/door/airlock/multi_tile/mainship/secdoor/glass{ + req_access = null; + req_one_access = list(2,42) }, -/area/mainship/squads/general) +/obj/machinery/door/firedoor/multi_tile, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/floor, +/area/mainship/hallways/starboard_hallway) "sbQ" = ( /obj/machinery/chem_master, /obj/item/reagent_containers/glass/beaker/bluespace, @@ -14356,12 +14526,15 @@ }, /area/mainship/medical/medical_science) "scb" = ( -/obj/machinery/camera/autoname/mainship{ +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, -/obj/structure/closet/secure_closet/shiptech, -/turf/open/floor/mainship/cargo, -/area/mainship/squads/req) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/pilotbunks) "sdw" = ( /obj/machinery/power/smes/preset, /obj/structure/cable, @@ -14393,6 +14566,11 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/stern_hallway) +"ser" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/effect/turf_decal/warning_stripes/thick, +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) "sfz" = ( /obj/machinery/power/apc/mainship{ dir = 8 @@ -14429,23 +14607,14 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/aft_hallway) "shB" = ( -/obj/machinery/door/window/secure/req{ - dir = 8 - }, -/obj/machinery/door/window, -/obj/structure/table/reinforced, -/obj/item/tool/hand_labeler, -/obj/machinery/door/poddoor/shutters/mainship/req/ro, -/turf/open/floor/mainship/mono, -/area/mainship/squads/req) +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/mainship/living/pilotbunks) "sid" = ( -/obj/machinery/shower{ - dir = 4; - pixel_y = -3 - }, -/obj/effect/spawner/random/misc/soap/regularweighted, -/turf/open/floor/mainship/sterile/dark, -/area/crew_quarters/toilet) +/obj/structure/rack, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "sjV" = ( /obj/machinery/vending/armor_supply, /turf/open/floor/mainship/red/full, @@ -14455,31 +14624,20 @@ dir = 10 }, /obj/effect/ai_node, +/obj/item/clothing/head/warning_cone, /obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 + dir = 8 + }, +/obj/machinery/landinglight/cas{ + dir = 8; + pixel_x = 4 }, -/obj/item/clothing/head/warning_cone, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "smb" = ( /obj/structure/closet/fireaxecabinet, /turf/closed/wall/mainship, /area/mainship/engineering/ce_room) -"snh" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, -/obj/machinery/power/apc/mainship, -/obj/effect/ai_node, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) "snm" = ( /obj/machinery/conveyor{ dir = 4; @@ -14492,16 +14650,15 @@ /turf/closed/wall/mainship/outer, /area/mainship/hallways/starboard_hallway) "snV" = ( -/obj/structure/table/mainship/nometal, -/obj/item/folder/grape, -/obj/item/tool/pen, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/terragov/north{ + dir = 10 + }, /area/mainship/living/briefing) "soc" = ( /obj/machinery/line_nexter{ dir = 4 }, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/req) "soK" = ( /obj/item/stack/tile/plasteel, @@ -14519,9 +14676,9 @@ /turf/open/floor/engine, /area/mainship/engineering/port_atmos) "spJ" = ( -/obj/machinery/firealarm, -/turf/open/floor/wood, -/area/mainship/living/grunt_rnr) +/obj/structure/cable, +/turf/open/floor/mainship/sterile/side, +/area/mainship/medical/upper_medical) "spK" = ( /obj/machinery/door/poddoor/mainship/umbilical/south{ dir = 2; @@ -14535,13 +14692,6 @@ }, /turf/open/floor/mainship, /area/mainship/squads/general) -"sqP" = ( -/obj/machinery/light/mainship{ - dir = 8 - }, -/obj/structure/closet/firecloset, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) "srb" = ( /obj/structure/closet/toolcloset, /obj/machinery/camera/autoname/mainship{ @@ -14553,19 +14703,6 @@ /obj/structure/filingcabinet, /turf/open/floor/wood, /area/mainship/command/corporateliaison) -"srr" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ - dir = 4; - on = 1 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) "ssm" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment/corner, @@ -14573,8 +14710,15 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) "ste" = ( -/obj/machinery/vending/medical/shipside, -/turf/open/floor/mainship/sterile/side, +/obj/machinery/door/airlock/mainship/medical/glass/free_access{ + dir = 1; + name = "\improper Medical Storage Airlock" + }, +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, +/obj/structure/cable, +/turf/open/floor/mainship/sterile/dark, /area/mainship/medical/upper_medical) "stm" = ( /obj/machinery/door/airlock/multi_tile/mainship/marine/general{ @@ -14586,11 +14730,11 @@ /turf/open/floor/mainship, /area/mainship/squads/general) "suU" = ( -/obj/machinery/light/mainship{ - dir = 1 +/obj/structure/bed/chair{ + dir = 4 }, -/turf/open/floor/wood, -/area/mainship/living/grunt_rnr) +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/medical_science) "svd" = ( /obj/structure/cable, /obj/machinery/door/airlock/multi_tile/mainship/maint{ @@ -14611,27 +14755,26 @@ }, /area/mainship/command/cic) "svo" = ( -/obj/structure/rack, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/tool/weldpack, -/turf/open/floor/mainship/green, +/obj/machinery/light/mainship{ + dir = 1 + }, +/obj/machinery/holopad, +/turf/open/floor/mainship/green{ + dir = 1 + }, /area/mainship/squads/req) "svz" = ( -/turf/open/floor/mainship/white{ - dir = 4 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 }, -/area/mainship/living/pilotbunks) +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) "swv" = ( /obj/machinery/door/firedoor/mainship{ dir = 2 }, /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/aft_hallway) -"swG" = ( -/obj/effect/soundplayer, -/turf/closed/wall/mainship, -/area/mainship/hallways/hangar/droppod) "swO" = ( /obj/machinery/light/mainship{ dir = 4 @@ -14656,19 +14799,11 @@ /obj/machinery/telecomms/server/presets/command, /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) -"sxm" = ( -/obj/structure/table/mainship/nometal, -/obj/item/clipboard, -/obj/item/paper{ - pixel_x = 5 - }, -/obj/item/tool/pen, -/turf/open/floor/mainship/mono, -/area/mainship/squads/req) "syt" = ( -/turf/open/floor/plating/icefloor/warnplate{ - dir = 10 +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 }, +/turf/open/floor/plating, /area/mainship/squads/req) "syD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -14705,16 +14840,21 @@ /turf/open/floor/wood, /area/mainship/living/commandbunks) "sAl" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/coffeeweighted, -/obj/effect/turf_decal/warning_stripes/linethick{ +/obj/effect/turf_decal/warning_stripes/thin{ dir = 8 }, -/turf/open/floor/plating, -/area/mainship/hallways/starboard_hallway) +/obj/machinery/landinglight/tadpole{ + dir = 8; + pixel_x = 4 + }, +/obj/item/clothing/head/warning_cone, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "sAI" = ( -/obj/structure/sink, -/obj/structure/mirror, -/turf/open/floor/mainship/floor, +/obj/machinery/shower{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk, /area/crew_quarters/toilet) "sAR" = ( /obj/structure/cable, @@ -14724,6 +14864,16 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) +"sBh" = ( +/obj/item/reagent_containers/jerrycan, +/obj/item/reagent_containers/jerrycan, +/obj/item/reagent_containers/jerrycan, +/obj/item/reagent_containers/jerrycan, +/obj/item/reagent_containers/jerrycan, +/obj/item/reagent_containers/jerrycan, +/obj/structure/rack, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "sBq" = ( /obj/structure/closet/secure_closet/engineering_welding, /turf/open/floor/mainship/orange/full, @@ -14734,13 +14884,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) -"sBx" = ( -/obj/machinery/door/airlock/mainship/generic{ - dir = 1; - name = "Bathroom" - }, -/turf/open/floor/mainship/floor, -/area/crew_quarters/toilet) "sCk" = ( /obj/machinery/light/mainship{ dir = 1 @@ -14772,10 +14915,7 @@ }, /area/mainship/medical/lower_medical) "sEl" = ( -/obj/structure/table/mainship/nometal, -/obj/item/folder/blue, -/obj/item/tool/pen, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/terragov/north, /area/mainship/living/briefing) "sEr" = ( /obj/machinery/computer/supplycomp, @@ -14832,33 +14972,14 @@ /obj/effect/ai_node, /turf/open/floor/plating/mainship, /area/mainship/shipboard/firing_range) -"sIM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/mainship/red{ - dir = 4 - }, -/area/mainship/shipboard/weapon_room) "sIN" = ( /obj/structure/window/reinforced, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/upper_medical) "sJa" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/turf/open/floor/mainship/cargo/arrow{ - dir = 4 - }, -/area/mainship/hallways/hangar/droppod) +/obj/machinery/firealarm, +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "sJE" = ( /obj/structure/table/mainship/nometal, /obj/machinery/chem_dispenser/beer, @@ -14866,9 +14987,13 @@ /area/mainship/medical/lower_medical) "sKa" = ( /turf/open/floor/mainship/terragov/north{ - dir = 9 + dir = 6 }, /area/mainship/living/briefing) +"sKH" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/turf/open/floor/mainship/yellow_cargo, +/area/mainship/shipboard/weapon_room) "sLC" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -14876,7 +15001,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/hexagon, /area/mainship/engineering/engine_core) "sMl" = ( /obj/structure/closet/emcloset, @@ -14889,13 +15014,6 @@ }, /turf/open/floor/mainship/cargo, /area/mainship/hallways/hangar) -"sMS" = ( -/obj/machinery/light/mainship/small, -/obj/structure/toilet{ - dir = 1 - }, -/turf/open/floor/mainship/floor, -/area/crew_quarters/toilet) "sOJ" = ( /obj/structure/table/reinforced, /obj/effect/spawner/random/food_or_drink/kitchenknife/butcherweighted, @@ -14905,10 +15023,23 @@ /area/mainship/hull/lower_hull) "sPc" = ( /obj/item/radio/intercom/general, -/turf/open/floor/mainship/cargo/arrow{ - dir = 8 - }, +/obj/structure/ship_ammo/cas/rocket/widowmaker, +/turf/open/floor/mainship/cargo, /area/mainship/hallways/hangar) +"sPS" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/floodlight/landing, +/turf/open/floor/mainship/mono, +/area/mainship/squads/req) "sQz" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ on = 1 @@ -14918,7 +15049,7 @@ /area/mainship/living/numbertwobunks) "sQI" = ( /obj/machinery/fuelcell_recycler, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/hexagon, /area/mainship/engineering/engine_core) "sRP" = ( /obj/structure/table/mainship/nometal, @@ -14935,9 +15066,8 @@ /turf/open/floor/mainship/mono, /area/mainship/engineering/port_atmos) "sSz" = ( -/obj/machinery/floodlight/landing, -/turf/open/floor/mainship/mono, -/area/mainship/living/briefing) +/turf/open/floor/mainship/floor, +/area/mainship/hallways/starboard_hallway) "sSA" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ dir = 8; @@ -14949,23 +15079,28 @@ /turf/open/floor/mainship, /area/mainship/squads/general) "sSN" = ( -/obj/machinery/door/poddoor/railing{ - id = "supply_elevator_railing" - }, -/obj/machinery/floodlight/landing, -/turf/open/floor/mainship/cargo/arrow{ +/obj/effect/turf_decal/warning_stripes/thin{ dir = 8 }, -/area/mainship/squads/req) +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/machinery/landinglight/alamo{ + dir = 8; + pixel_x = 4 + }, +/obj/item/clothing/head/warning_cone, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "sUb" = ( -/obj/structure/sign/evac, -/turf/open/floor/plating/mainship, -/area/mainship/living/evacuation) +/obj/vehicle/ridden/powerloader, +/turf/open/floor/mainship/cargo, +/area/mainship/shipboard/weapon_room) "sUR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating/plating_catwalk, +/turf/open/floor/mainship/floor, /area/mainship/hallways/hangar) "sUT" = ( /obj/structure/cable, @@ -14994,17 +15129,10 @@ }, /area/mainship/medical/medical_science) "sVR" = ( -/obj/structure/cable, -/obj/machinery/power/apc/mainship{ - dir = 1 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/turf/open/floor/mainship/cargo/arrow{ - dir = 4 - }, -/area/mainship/hallways/hangar/droppod) +/obj/structure/drop_pod_launcher/mech, +/obj/structure/droppod/nonmob/mech_pod, +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "sWo" = ( /obj/machinery/camera/autoname/mainship{ dir = 8 @@ -15041,7 +15169,7 @@ pixel_x = -8; pixel_y = 3 }, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/general) "sYd" = ( /obj/structure/table/mainship/nometal, @@ -15065,10 +15193,6 @@ /obj/effect/ai_node, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) -"sZK" = ( -/obj/machinery/holopad, -/turf/open/floor/wood, -/area/mainship/living/chapel) "sZP" = ( /turf/open/floor/carpet/side{ dir = 10 @@ -15078,19 +15202,17 @@ /obj/structure/closet/firecloset, /turf/open/floor/mainship/cargo, /area/mainship/engineering/lower_engineering) -"tbT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ +"sZZ" = ( +/obj/effect/turf_decal/warning_stripes/thin{ dir = 4 }, -/turf/open/floor/mainship/sterile/plain, -/area/mainship/living/pilotbunks) +/obj/effect/spawner/random/misc/gnome, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) +"tbT" = ( +/obj/machinery/vending/armor_supply, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "tdm" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/wood, @@ -15106,15 +15228,14 @@ }, /area/mainship/squads/general) "teh" = ( -/obj/effect/turf_decal/warning_stripes/thin{ +/obj/structure/window/framed/mainship/hull, +/turf/open/floor/mainship/floor, +/area/mainship/hallways/starboard_hallway) +"tem" = ( +/obj/machinery/vending/lasgun, +/turf/open/floor/mainship/orange{ dir = 4 }, -/obj/structure/punching_bag, -/turf/open/floor/plating/mainship, -/area/mainship/shipboard/firing_range) -"tem" = ( -/obj/machinery/dropship_part_fabricator, -/turf/open/floor/mainship/cargo, /area/mainship/hallways/hangar) "tet" = ( /obj/machinery/camera/autoname/mainship{ @@ -15128,8 +15249,15 @@ /turf/open/floor/mainship/mono, /area/mainship/engineering/engineering_workshop) "tfG" = ( -/turf/open/floor/prison/kitchen, +/turf/open/floor/iron/kitchen, /area/mainship/living/grunt_rnr) +"tfJ" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/warning_stripes/thick/corner{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) "tfK" = ( /obj/machinery/computer/general_air_control/large_tank_control{ frequency = 1443; @@ -15155,11 +15283,12 @@ /turf/open/floor/mainship/mono, /area/mainship/command/cic) "tgh" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 +/obj/effect/decal/cleanable/blood/oil, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 }, -/turf/open/floor/mainship/floor, -/area/mainship/living/pilotbunks) +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) "tgi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/floor, @@ -15170,17 +15299,18 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) "thc" = ( +/obj/structure/sign/poster, /obj/machinery/light/mainship{ - dir = 4 - }, -/turf/open/floor/mainship/green{ - dir = 4 + dir = 8 }, -/area/mainship/squads/req) +/turf/open/floor/wood, +/area/mainship/living/pilotbunks) "thg" = ( -/obj/docking_port/stationary/marine_dropship/minidropship, -/turf/open/floor/plating, -/area/mainship/hallways/hangar) +/obj/effect/ai_node, +/turf/open/floor/mainship/terragov{ + dir = 1 + }, +/area/mainship/living/briefing) "thB" = ( /obj/structure/window/reinforced/extratoughened{ dir = 1 @@ -15223,7 +15353,7 @@ "tkA" = ( /obj/structure/table/mainship/nometal, /obj/machinery/chem_dispenser/soda, -/turf/open/floor/mainship/mono, +/turf/open/floor/iron/kitchen, /area/mainship/living/grunt_rnr) "tkS" = ( /turf/open/floor/mainship/sterile/purple/side, @@ -15247,9 +15377,12 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) +"tlT" = ( +/obj/machinery/door/poddoor/mainship/droppod, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "tnR" = ( /obj/structure/bed/chair/office/dark, -/obj/effect/landmark/start/job/chiefshipengineer, /obj/machinery/keycard_auth{ pixel_y = 25 }, @@ -15262,24 +15395,31 @@ /area/mainship/engineering/ce_room) "ton" = ( /obj/structure/cable, -/obj/machinery/light/mainship, -/turf/open/floor/mainship/floor, -/area/crew_quarters/toilet) +/obj/machinery/light/mainship{ + dir = 1 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "tpo" = ( /obj/structure/closet/secure_closet/medical3, /obj/item/storage/surgical_tray, /turf/open/floor/mainship/sterile/side, /area/mainship/medical/upper_medical) "tpU" = ( -/obj/effect/turf_decal/warning_stripes/thin{ +/obj/effect/turf_decal/warning_stripes/thick{ dir = 8 }, /turf/open/floor/mainship/stripesquare, /area/mainship/command/cic) "tqC" = ( -/obj/structure/bed/chair/comfy/black, -/turf/open/floor/mainship/blue/full, -/area/mainship/living/briefing) +/obj/structure/rack, +/obj/item/storage/toolbox/electrical{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/robot_parts/head, +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "tqD" = ( /obj/machinery/door_control/old/medbay{ id = "Medbay"; @@ -15322,15 +15462,13 @@ /area/mainship/hull/lower_hull) "ttb" = ( /obj/structure/reagent_dispensers/watertank, +/obj/structure/reagent_dispensers/watertank, /turf/open/floor/mainship/orange{ dir = 8 }, /area/mainship/hallways/hangar) "ttp" = ( -/obj/item/radio/intercom/general{ - dir = 1 - }, -/turf/open/floor/wood, +/turf/open/floor/plating, /area/mainship/living/chapel) "ttt" = ( /obj/structure/cable, @@ -15340,7 +15478,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/prison/kitchen, +/turf/open/floor/iron/kitchen, /area/mainship/living/grunt_rnr) "ttT" = ( /obj/structure/bed/roller, @@ -15367,6 +15505,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_hallway) +"tuW" = ( +/turf/closed/wall/mainship/outer, +/area/mainship/shipboard/weapon_room) "tvv" = ( /obj/machinery/atmospherics/components/binary/valve/digital/on, /turf/open/floor/mainship/mono, @@ -15439,12 +15580,6 @@ /obj/item/stack/tile/plasteel, /turf/open/floor/plating, /area/mainship/squads/general) -"tBb" = ( -/obj/effect/turf_decal/warning_stripes/linethick{ - dir = 1 - }, -/turf/open/floor/plating, -/area/mainship/hallways/starboard_hallway) "tBh" = ( /obj/machinery/firealarm{ dir = 8 @@ -15454,6 +15589,18 @@ }, /turf/open/floor/wood, /area/mainship/command/corporateliaison) +"tBi" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/turf/open/floor/mainship/hexagon, +/area/mainship/shipboard/weapon_room) "tBj" = ( /obj/structure/closet/secure_closet/chemical, /turf/open/floor/mainship/sterile/purple/corner{ @@ -15492,6 +15639,16 @@ /obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/command/telecomms) +"tCJ" = ( +/obj/structure/rack, +/obj/item/storage/belt/utility/full, +/obj/item/storage/belt/utility/full, +/obj/item/tool/weldpack, +/obj/item/tool/weldpack, +/turf/open/floor/mainship/green{ + dir = 8 + }, +/area/mainship/squads/req) "tCK" = ( /obj/machinery/door/airlock/mainship/maint, /obj/structure/cable, @@ -15507,40 +15664,20 @@ /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) "tCO" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/effect/turf_decal/warning_stripes/thick{ dir = 4 }, -/obj/effect/ai_node, -/obj/effect/ai_node, -/turf/open/floor/mainship/sterile/plain, -/area/mainship/living/pilotbunks) +/turf/open/floor/mainship/floor, +/area/mainship/hallways/hangar/droppod) "tDC" = ( /obj/structure/table/reinforced, +/obj/effect/spawner/random/misc/earmuffs, /turf/open/floor/mainship/stripesquare, /area/mainship/shipboard/firing_range) "tDG" = ( /obj/machinery/telecomms/server/presets/common, /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) -"tEa" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/mainship/red{ - dir = 8 - }, -/area/mainship/shipboard/weapon_room) "tEm" = ( /obj/machinery/telecomms/receiver/preset_right, /turf/open/floor/mainship/tcomms, @@ -15549,7 +15686,7 @@ /obj/structure/sign/prop1{ dir = 1 }, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/general) "tEV" = ( /obj/structure/cable, @@ -15562,6 +15699,10 @@ dir = 8 }, /area/mainship/medical/lower_medical) +"tFb" = ( +/obj/structure/flora/ausbushes/brflowers, +/turf/open/floor/grass, +/area/mainship/living/starboard_garden) "tFM" = ( /obj/machinery/door/firedoor/mainship{ dir = 2; @@ -15599,9 +15740,11 @@ /area/mainship/hallways/hangar) "tGU" = ( /obj/structure/cable, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/mainship/sterile/dark, +/obj/machinery/optable, +/obj/item/tank/anesthetic, +/turf/open/floor/mainship/sterile/side{ + dir = 8 + }, /area/mainship/medical/operating_room_two) "tHk" = ( /obj/effect/turf_decal/warning_stripes/thick/corner{ @@ -15609,15 +15752,6 @@ }, /turf/open/floor/plating, /area/mainship/hallways/hangar) -"tHw" = ( -/obj/machinery/light/mainship{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/mainship/black{ - dir = 8 - }, -/area/mainship/living/tankerbunks) "tHY" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -15638,13 +15772,11 @@ /turf/open/floor/mainship/floor, /area/mainship/living/numbertwobunks) "tIA" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/white{ - dir = 6 +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 9 }, -/area/mainship/living/pilotbunks) +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) "tIE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -15671,14 +15803,14 @@ "tKd" = ( /obj/structure/table/mainship/nometal, /obj/machinery/chem_dispenser/beer, -/turf/open/floor/mainship/mono, +/turf/open/floor/iron/kitchen, /area/mainship/living/grunt_rnr) "tKs" = ( /obj/structure/mirror, /obj/machinery/light/mainship{ dir = 1 }, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/general) "tKu" = ( /obj/structure/cable, @@ -15687,12 +15819,11 @@ /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) "tLf" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 +/obj/machinery/door_control/mainship/mech{ + dir = 1 }, -/obj/item/clothing/head/warning_cone, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "tMy" = ( /obj/effect/ai_node, /turf/open/floor/mainship/sterile/side{ @@ -15714,12 +15845,6 @@ /area/mainship/living/grunt_rnr) "tNQ" = ( /obj/structure/cable, -/obj/structure/disposalpipe/segment/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 6 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -15754,16 +15879,23 @@ /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) "tPa" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, -/turf/open/floor/mainship/cargo/arrow{ - dir = 1 +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) +"tQa" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 }, -/area/mainship/hallways/hangar/droppod) +/obj/effect/ai_node, +/obj/machinery/landinglight/tadpole{ + dir = 8; + pixel_x = 4 + }, +/obj/item/clothing/head/warning_cone, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "tQO" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -15798,20 +15930,35 @@ }, /area/mainship/medical/medical_science) "tRG" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/obj/effect/ai_node, -/obj/machinery/landinglight/cas{ - pixel_y = 4 +/obj/structure/closet/firecloset, +/obj/machinery/landinglight/tadpole{ + dir = 4; + pixel_x = -4 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "tTc" = ( -/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment/corner, +/obj/machinery/door_control/unmeltable{ + dir = 8; + id = "s_umbilical"; + name = "Air Lock Door Control"; + pixel_x = 22 + }, /obj/machinery/light/mainship/small{ - dir = 4 + dir = 1 }, /turf/open/floor/mainship/mono, /area/mainship/hallways/port_umbilical) +"tTg" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 10 + }, +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) "tTm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -15821,11 +15968,8 @@ /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/hangar) "tTR" = ( -/obj/machinery/light/mainship, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/turf/open/floor/mainship/mono, +/obj/docking_port/stationary/marine_dropship/minidropship, +/turf/open/floor/plating, /area/mainship/hallways/hangar) "tTW" = ( /obj/structure/cable, @@ -15835,11 +15979,9 @@ }, /area/mainship/medical/lower_medical) "tUZ" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, +/obj/machinery/firealarm, /turf/open/floor/mainship/mono, -/area/mainship/hallways/port_hallway) +/area/mainship/living/grunt_rnr) "tVd" = ( /obj/structure/window/reinforced/extratoughened, /obj/structure/window/reinforced/windowstake{ @@ -15848,7 +15990,7 @@ /turf/open/floor/mainship/tcomms, /area/mainship/command/airoom) "tVr" = ( -/turf/open/floor/mainship/cargo/arrow, +/turf/open/floor/mainship/yellow_cargo/arrow, /area/mainship/squads/general) "tVF" = ( /obj/machinery/light/mainship, @@ -15871,9 +16013,6 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) "tWq" = ( -/obj/structure/disposalpipe/segment/corner{ - dir = 8 - }, /obj/machinery/camera/autoname{ dir = 1 }, @@ -15884,6 +16023,16 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door_control{ + dir = 1; + id = "or2privacyshutter"; + name = "Privacy Shutters"; + pixel_x = -5; + pixel_y = 10 + }, /turf/open/floor/mainship/sterile/corner{ dir = 8 }, @@ -15942,23 +16091,28 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_hallway) "uay" = ( -/obj/machinery/researchcomp, -/turf/open/floor/mainship/orange{ - dir = 4 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 }, +/obj/item/clothing/head/warning_cone, +/turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "uaD" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) "ubh" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/mainship/orange{ - dir = 4 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 }, +/turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "ubk" = ( /obj/structure/table/mainship/nometal, @@ -15977,23 +16131,35 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "ubU" = ( -/turf/open/floor/mainship/green{ - dir = 8 - }, -/area/mainship/hallways/aft_hallway) -"ubW" = ( -/obj/machinery/door/firedoor/mainship{ +/obj/machinery/door/poddoor/railing{ dir = 2; - id = "hangar_lockdown" + id = "supply_elevator_railing" }, -/obj/machinery/door/poddoor/shutters/mainship/open/hangar{ +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/landinglight/tadpole{ + dir = 1; + pixel_y = -4 + }, +/obj/effect/turf_decal/warning_stripes/thin{ dir = 1 }, -/obj/structure/stairs/seamless{ +/turf/open/floor/mainship/floor, +/area/mainship/squads/req) +"ubW" = ( +/obj/machinery/door/poddoor/mainship/mech{ dir = 1 }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar/droppod) +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, +/turf/open/floor/mainship/stripesquare, +/area/mainship/living/mechpilotquarters) "ucj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -16036,18 +16202,9 @@ /area/mainship/command/self_destruct) "uer" = ( /obj/structure/cable, -/obj/structure/disposalpipe/junction{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, -/obj/effect/ai_node, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/aft_hallway) +/obj/machinery/light/mainship, +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "ueH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -16062,15 +16219,13 @@ }, /obj/item/camera, /obj/item/tool/pen, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/item/reagent_containers/food/snacks/sandwiches/sandwich, +/obj/structure/disposalpipe/segment/corner, /turf/open/floor/mainship/mono, /area/mainship/command/corporateliaison) "ufq" = ( /turf/closed/wall/mainship, -/area/mainship/hallways/hangar/droppod) +/area/mainship/living/mechpilotquarters) "ufT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -16080,11 +16235,19 @@ /area/mainship/hallways/port_hallway) "ugv" = ( /obj/structure/cable, -/obj/machinery/door/poddoor/mainship/droppod{ - dir = 2 +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) +"uhj" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 }, -/turf/open/floor/mainship/stripesquare, -/area/mainship/hallways/hangar/droppod) +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/cargo/arrow, +/area/mainship/hallways/hangar) "uhP" = ( /obj/machinery/air_alarm, /turf/open/floor/mainship/mono, @@ -16098,16 +16261,29 @@ /obj/structure/cable, /obj/item/storage/surgical_tray, /obj/item/storage/box/gloves, -/obj/item/reagent_containers/spray/surgery, -/obj/structure/sign/nosmoking_2{ - dir = 1 +/obj/item/reagent_containers/spray/surgery{ + pixel_x = -5; + pixel_y = 10 + }, +/obj/item/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 = 6; + pixel_y = 10 }, /turf/open/floor/mainship/sterile/side{ dir = 1 }, /area/mainship/medical/operating_room_one) "uiG" = ( -/obj/machinery/holopad, +/obj/effect/turf_decal/warning_stripes/thick, +/turf/open/floor/plating, +/area/mainship/squads/req) +"uiX" = ( +/obj/machinery/light/mainship{ + light_color = "#da2f1b" + }, +/obj/item/clothing/head/warning_cone, /turf/open/floor/mainship/mono, /area/mainship/squads/req) "ujw" = ( @@ -16128,18 +16304,17 @@ /obj/machinery/door/firedoor/mainship, /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/stern_hallway) -"ukI" = ( -/obj/structure/sign/poster, -/obj/machinery/light/mainship{ - dir = 8 - }, -/turf/open/floor/wood, -/area/mainship/living/pilotbunks) "ukJ" = ( /obj/machinery/marine_selector/clothes/medic, /obj/machinery/light/mainship, /turf/open/floor/mainship/floor, /area/mainship/squads/general) +"umj" = ( +/obj/structure/sink{ + dir = 4 + }, +/turf/open/floor/mainship/sterile/white, +/area/mainship/living/bridgebunks) "umU" = ( /obj/effect/landmark/start/latejoin, /obj/machinery/light/mainship{ @@ -16214,18 +16389,11 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) -"uqt" = ( -/obj/effect/soundplayer, -/turf/closed/wall/mainship, -/area/crew_quarters/toilet) "uqA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/door/poddoor/mainship/droppod{ - dir = 2 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/mainship/stripesquare, -/area/mainship/hallways/hangar/droppod) +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "uqV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -16239,19 +16407,12 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/starboard_hallway) -"urs" = ( -/obj/machinery/vending/boozeomat, -/turf/open/floor/mainship/mono, -/area/mainship/living/grunt_rnr) "urD" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/effect/ai_node, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 6 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 + dir = 4 }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) @@ -16282,9 +16443,9 @@ }, /area/mainship/squads/general) "uvy" = ( -/turf/open/floor/plating/icefloor/warnplate{ - dir = 5 - }, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/mainship/mono, /area/mainship/squads/req) "uvB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -16329,10 +16490,6 @@ /obj/machinery/light/mainship, /turf/open/floor/mainship/mono, /area/mainship/engineering/upper_engineering) -"uvW" = ( -/obj/structure/prop/mainship/sensor_computer3, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) "uwg" = ( /turf/open/floor/mainship/black{ dir = 6 @@ -16346,7 +16503,7 @@ /area/mainship/hallways/hangar) "uxI" = ( /obj/structure/sign/poster, -/turf/open/floor/mainship/cargo/arrow{ +/turf/open/floor/mainship/yellow_cargo/arrow{ dir = 8 }, /area/mainship/squads/general) @@ -16359,23 +16516,32 @@ /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) "uzm" = ( -/obj/structure/closet/toolcloset, -/turf/open/floor/mainship/cargo, -/area/mainship/hallways/hangar) -"uzn" = ( -/obj/effect/turf_decal/warning_stripes/thin{ +/obj/machinery/door/poddoor/railing{ + dir = 2; + id = "supply_elevator_railing" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/light/mainship/small{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 }, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) -"uzy" = ( -/turf/open/floor/mainship/black{ +/obj/machinery/landinglight/tadpole{ + dir = 1; + pixel_y = -4 + }, +/obj/effect/turf_decal/warning_stripes/thin{ dir = 1 }, -/area/mainship/living/tankerbunks) +/turf/open/floor/mainship/cargo/arrow{ + dir = 1 + }, +/area/mainship/squads/req) +"uzy" = ( +/obj/machinery/vending/weapon, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "uzA" = ( /obj/machinery/light/mainship/small{ dir = 1 @@ -16414,9 +16580,6 @@ /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/operating_room_two) "uCk" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -16424,8 +16587,18 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, /turf/open/floor/mainship/stripesquare, /area/mainship/command/cic) +"uCC" = ( +/obj/structure/sign/prop1, +/obj/machinery/light/mainship{ + light_color = "#da2f1b" + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/port_hallway) "uCO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -16433,20 +16606,17 @@ /area/mainship/hallways/hangar) "uDd" = ( /obj/effect/landmark/corpsespawner/marine/burst, +/obj/effect/decal/cleanable/blood, /turf/open/floor/mainship/research/containment/floor1, /area/mainship/medical/medical_science) -"uDj" = ( -/obj/machinery/vending/weapon, -/turf/open/floor/mainship/black{ - dir = 1 - }, -/area/mainship/living/tankerbunks) "uDl" = ( -/obj/structure/cable, +/obj/machinery/light/mainship{ + light_color = "#da2f1b" + }, +/obj/structure/sign/prop1, /turf/open/floor/mainship/mono, /area/mainship/hallways/port_hallway) "uDq" = ( -/obj/structure/ship_ammo/cas/minirocket/illumination, /obj/machinery/light/mainship{ dir = 1 }, @@ -16454,6 +16624,9 @@ /area/mainship/hallways/hangar) "uDQ" = ( /obj/machinery/bioprinter/stocked, +/obj/structure/disposalpipe/segment/corner{ + dir = 1 + }, /turf/open/floor/mainship/sterile/corner{ dir = 8 }, @@ -16502,14 +16675,17 @@ /turf/open/floor/tile/dark, /area/mainship/command/cic) "uIy" = ( -/obj/structure/table/mainship/nometal, -/obj/item/storage/firstaid/regular, -/turf/open/floor/mainship/white, -/area/mainship/living/pilotbunks) +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 9 + }, +/turf/open/floor/plating, +/area/mainship/squads/req) "uIX" = ( -/obj/structure/bed/chair/nometal, -/turf/open/floor/mainship/floor, -/area/mainship/living/pilotbunks) +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 6 + }, +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) "uKk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -16539,9 +16715,11 @@ /turf/open/floor/mainship/black, /area/mainship/command/self_destruct) "uKM" = ( -/obj/effect/ai_node, -/turf/open/floor/mainship/terragov/north, -/area/mainship/living/briefing) +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/turf/closed/wall/mainship, +/area/mainship/living/mechpilotquarters) "uLb" = ( /obj/effect/decal/cleanable/blood, /obj/item/reagent_containers/hypospray/autoinjector/synaptizine_expired, @@ -16588,21 +16766,6 @@ /obj/structure/flora/pottedplant/twentytwo, /turf/open/floor/wood, /area/mainship/living/numbertwobunks) -"uNz" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 1 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/hangar) -"uOd" = ( -/obj/machinery/vending/armor_supply, -/turf/open/floor/mainship/black{ - dir = 1 - }, -/area/mainship/living/tankerbunks) "uOe" = ( /obj/structure/closet/bodybag, /turf/open/floor/mainship/mono, @@ -16658,24 +16821,14 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "uQI" = ( -/obj/effect/turf_decal/warning_stripes/thin{ +/obj/effect/turf_decal/warning_stripes/thick{ dir = 4 }, /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/port_hallway) "uQQ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ - dir = 4; - on = 1 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/obj/machinery/light/mainship, -/turf/open/floor/mainship/cargo/arrow{ - dir = 1 - }, -/area/mainship/hallways/hangar/droppod) +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) "uSe" = ( /turf/open/floor/plating/mainship, /area/mainship/hull/lower_hull) @@ -16689,6 +16842,9 @@ dir = 1 }, /obj/effect/ai_node, +/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ + on = 1 + }, /turf/open/floor/mainship/mono, /area/mainship/engineering/upper_engineering) "uTv" = ( @@ -16703,33 +16859,20 @@ /turf/open/floor/plating, /area/mainship/hallways/hangar) "uTG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/effect/turf_decal/warning_stripes/thick{ dir = 8 }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) "uTM" = ( /obj/machinery/door/airlock/mainship/maint/free_access, /obj/structure/sign/hydro, /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) "uUp" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/aft_hallway) +/obj/machinery/door/poddoor/mainship, +/turf/closed/wall/mainship/outer, +/area/mainship/shipboard/weapon_room) "uUU" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -16745,11 +16888,11 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) "uVa" = ( -/obj/structure/bed/chair/office/dark{ - dir = 1 - }, -/obj/effect/landmark/start/job/requisitionsofficer, /obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/mainship/marine/requisitions{ + dir = 2; + name = "\improper Requisition's Office" + }, /turf/open/floor/mainship/mono, /area/mainship/squads/req) "uVk" = ( @@ -16760,15 +16903,6 @@ /obj/effect/ai_node, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/chemistry) -"uWa" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/turf/open/floor/plating/mainship, -/area/mainship/shipboard/weapon_room) "uWB" = ( /obj/machinery/camera/autoname/mainship, /turf/open/floor/mainship/floor, @@ -16785,16 +16919,20 @@ /obj/item/reagent_containers/glass/beaker/large, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/chemistry) -"uWP" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) "uXb" = ( -/obj/structure/cable, -/turf/open/floor/mainship/cargo/arrow{ - dir = 1 +/obj/effect/turf_decal/warning_stripes/thick/corner{ + dir = 8 }, -/area/mainship/hallways/hangar/droppod) +/turf/open/floor/mainship/floor, +/area/mainship/living/mechpilotquarters) +"uXw" = ( +/obj/machinery/vending/uniform_supply, +/turf/open/floor/wood, +/area/mainship/living/tankerbunks) +"uXy" = ( +/obj/effect/soundplayer, +/turf/closed/wall/mainship/outer, +/area/mainship/hallways/starboard_hallway) "uYe" = ( /obj/structure/disposalpipe/segment/corner{ dir = 8 @@ -16846,11 +16984,13 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable, +/obj/machinery/door/airlock/mainship/maint, /turf/open/floor/plating/mainship, /area/mainship/living/bridgebunks) "van" = ( /obj/machinery/vending/boozeomat, -/turf/open/floor/prison/kitchen, +/turf/open/floor/iron/kitchen, /area/mainship/living/grunt_rnr) "vaW" = ( /obj/effect/turf_decal/warning_stripes/thin{ @@ -16863,11 +17003,9 @@ /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) "vaX" = ( -/obj/machinery/vending/armor_supply, -/turf/open/floor/mainship/white{ - dir = 10 - }, -/area/mainship/living/pilotbunks) +/obj/machinery/light/mainship, +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) "vbf" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -16892,7 +17030,6 @@ /turf/open/floor/mainship/mono, /area/mainship/squads/req) "vdN" = ( -/obj/item/clothing/head/warning_cone, /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 }, @@ -16934,17 +17071,10 @@ /turf/closed/wall/mainship, /area/mainship/command/cic) "vfU" = ( -/obj/structure/droppod, -/obj/structure/drop_pod_launcher, -/obj/machinery/light/mainship{ - dir = 8 - }, -/turf/open/floor/mainship/cargo, -/area/mainship/hallways/hangar/droppod) -"vgd" = ( -/obj/effect/ai_node, -/turf/open/floor/plating, -/area/mainship/living/tankerbunks) +/obj/structure/table/woodentable, +/obj/effect/spawner/random/misc/table_lighting, +/turf/open/floor/wood, +/area/mainship/living/mechpilotquarters) "vgo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -16978,16 +17108,15 @@ /obj/machinery/air_alarm{ dir = 4 }, -/turf/open/floor/mainship/mono, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_umbilical) "viq" = ( /turf/closed/wall/mainship, /area/mainship/engineering/port_atmos) -"viN" = ( -/turf/closed/wall/mainship, -/area/mainship/living/tankerbunks) "vjs" = ( -/obj/machinery/cic_maptable/drawable/big, +/obj/machinery/computer/navigation, /turf/open/floor/mainship/mono, /area/mainship/command/cic) "vjC" = ( @@ -17040,7 +17169,7 @@ /turf/open/floor/mainship/black, /area/mainship/squads/general) "vou" = ( -/turf/open/floor/mainship/floor, +/turf/closed/wall/mainship, /area/mainship/living/pilotbunks) "voR" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -17101,6 +17230,12 @@ dir = 9 }, /area/mainship/squads/general) +"vua" = ( +/mob/living/simple_animal/mouse, +/turf/open/floor/mainship/red{ + dir = 4 + }, +/area/mainship/command/airoom) "vuc" = ( /obj/machinery/door/window{ dir = 2 @@ -17114,6 +17249,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/showcase/coinpress, /turf/open/floor/wood, /area/mainship/living/commandbunks) "vuM" = ( @@ -17125,9 +17261,11 @@ /turf/closed/wall/mainship, /area/mainship/command/self_destruct) "vvE" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/obj/structure/bed/chair/nometal{ + dir = 1 + }, +/turf/open/floor/mainship/red/full, +/area/mainship/living/briefing) "vvV" = ( /obj/machinery/camera/autoname/mainship{ dir = 8 @@ -17135,11 +17273,10 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/aft_hallway) "vwd" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 9 }, -/obj/item/clothing/head/warning_cone, -/turf/open/floor/plating, +/turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "vwh" = ( /obj/machinery/door/airlock/mainship/generic{ @@ -17181,7 +17318,6 @@ /obj/structure/bed/chair/nometal{ dir = 8 }, -/obj/structure/disposalpipe/segment/corner, /turf/open/floor/mainship/mono, /area/mainship/command/corporateliaison) "vxU" = ( @@ -17189,23 +17325,28 @@ /obj/machinery/faxmachine/cic, /turf/open/floor/mainship/mono, /area/mainship/command/cic) -"vyG" = ( +"vyj" = ( +/obj/machinery/power/apc, /obj/structure/cable, -/obj/machinery/door/firedoor/mainship{ - dir = 2 +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) +"vyG" = ( +/obj/machinery/light/mainship{ + dir = 1 }, -/turf/open/floor/mainship/stripesquare, -/area/mainship/hallways/port_hallway) +/obj/structure/bed/chair/sofa, +/turf/open/floor/wood, +/area/mainship/living/grunt_rnr) "vyJ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 10 - }, -/obj/structure/cable, +/turf/open/floor/mainship/hexagon, +/area/mainship/shipboard/weapon_room) +"vzt" = ( +/obj/structure/bed, +/obj/item/bedsheet/captain, +/obj/effect/landmark/corpsespawner/marine/regular, +/obj/effect/landmark/start/job/staffofficer, /turf/open/floor/mainship/mono, -/area/mainship/hallways/port_hallway) +/area/mainship/living/bridgebunks) "vzy" = ( /obj/structure/cable, /obj/structure/disposalpipe/junction{ @@ -17245,6 +17386,7 @@ /turf/closed/wall/mainship, /area/mainship/engineering/upper_engineering) "vBY" = ( +/obj/machinery/bot/cleanbot, /turf/open/floor/mainship/sterile, /area/mainship/medical/lower_medical) "vCB" = ( @@ -17256,9 +17398,25 @@ /obj/structure/closet/secure_closet/staff_officer, /turf/open/floor/mainship/red/full, /area/mainship/command/cic) -"vEw" = ( -/turf/open/floor/plating/plating_catwalk, -/area/mainship/engineering/engine_core) +"vDr" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) +"vDH" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/obj/item/storage/backpack/marine/engineerpack, +/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/machinery/landinglight/tadpole{ + dir = 4; + pixel_x = -4 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "vFb" = ( /obj/structure/table/fancywoodentable, /obj/item/book/codebook, @@ -17278,19 +17436,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/command/corporateliaison) -"vGw" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/effect/turf_decal/warning_stripes/thin, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, -/obj/effect/ai_node, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) "vGG" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -17299,23 +17444,17 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/aft_hallway) "vGQ" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/mainship/mono, -/area/mainship/living/pilotbunks) +/turf/open/floor/mainship/hexagon, +/area/mainship/living/tankerbunks) +"vGX" = ( +/obj/machinery/loadout_vendor, +/turf/open/floor/wood, +/area/mainship/living/tankerbunks) "vHq" = ( /obj/machinery/light/mainship{ dir = 1 }, -/turf/open/floor/mainship/cargo/arrow{ +/turf/open/floor/mainship/yellow_cargo/arrow{ dir = 8 }, /area/mainship/squads/general) @@ -17329,17 +17468,12 @@ /obj/effect/spawner/random/engineering/wood, /turf/open/floor/mainship/mono, /area/mainship/command/self_destruct) -"vJi" = ( +"vJq" = ( /obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/machinery/light/mainship{ - dir = 4 - }, -/turf/open/floor/mainship/black{ dir = 4 }, -/area/mainship/living/tankerbunks) +/turf/closed/wall/mainship, +/area/mainship/hallways/starboard_hallway) "vLD" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ @@ -17349,20 +17483,32 @@ /turf/open/floor/wood, /area/mainship/living/commandbunks) "vMp" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/light/mainship/small{ - dir = 4 +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 }, /turf/open/floor/mainship/mono, /area/mainship/shipboard/weapon_room) "vMr" = ( -/obj/structure/cable, +/turf/closed/wall/mainship, +/area/mainship/shipboard/brig) +"vMM" = ( +/obj/effect/soundplayer, +/obj/structure/sign/evac, +/turf/closed/wall/mainship, +/area/mainship/command/cic) +"vNA" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/machinery/camera/autoname/mainship{ + dir = 4 + }, /obj/effect/ai_node, -/turf/open/floor/mainship/floor, -/area/mainship/living/pilotbunks) +/turf/open/floor/mainship/mono, +/area/mainship/hull/lower_hull) "vOs" = ( /turf/closed/wall/mainship, /area/mainship/hallways/stern_hallway) @@ -17385,16 +17531,26 @@ dir = 1 }, /area/mainship/medical/lower_medical) +"vPH" = ( +/turf/open/floor/mainship/mono, +/area/mainship/living/pilotbunks) "vQO" = ( /obj/machinery/telecomms/hub/preset, /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) "vSd" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 +/obj/structure/table/mainship/nometal, +/obj/item/stack/barbed_wire/half_stack, +/obj/item/tool/crowbar, +/obj/machinery/landinglight/tadpole{ + dir = 4; + pixel_x = -4 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 }, /turf/open/floor/mainship/mono, -/area/mainship/hallways/aft_hallway) +/area/mainship/hallways/hangar) "vSo" = ( /obj/machinery/camera/autoname/mainship{ dir = 4 @@ -17409,17 +17565,6 @@ dir = 5 }, /area/mainship/shipboard/firing_range) -"vSI" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 - }, -/turf/open/floor/mainship/cargo/arrow{ - dir = 1 - }, -/area/mainship/shipboard/weapon_room) "vSJ" = ( /obj/machinery/door/airlock/mainship/engineering/disposals, /obj/structure/disposalpipe/segment{ @@ -17427,20 +17572,12 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) -"vTt" = ( -/obj/machinery/light/mainship{ - dir = 4 - }, -/obj/machinery/door/firedoor/mainship{ - dir = 2; - id = "hangar_lockdown" - }, -/obj/machinery/door/poddoor/shutters/mainship/open/hangar{ - dir = 1 - }, -/obj/structure/stairs/seamless/platform_vert{ - dir = 1 +"vSU" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 6 }, +/obj/effect/ai_node, +/obj/item/clothing/head/warning_cone, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "vTy" = ( @@ -17485,21 +17622,21 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) -"vXG" = ( -/obj/structure/mirror, -/turf/open/floor/wood, -/area/mainship/living/tankerbunks) "vXQ" = ( /turf/open/floor/wood, -/area/mainship/living/pilotbunks) +/area/mainship/living/tankerbunks) "vXY" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/mainship/mono, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/light/mainship{ + dir = 1 + }, +/turf/open/floor/mainship/sterile/white, /area/mainship/living/bridgebunks) "vYd" = ( /obj/structure/morgue{ @@ -17516,12 +17653,15 @@ /area/mainship/hallways/hangar) "vYB" = ( /obj/machinery/light/mainship, -/turf/open/floor/mainship/black, -/area/mainship/living/pilotbunks) +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "vZa" = ( -/obj/machinery/door/poddoor/mainship, -/turf/open/floor/mainship/stripesquare, -/area/mainship/shipboard/weapon_room) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hull/lower_hull) "vZe" = ( /obj/effect/ai_node, /turf/open/floor/mainship/black/full, @@ -17546,6 +17686,13 @@ /obj/structure/cable, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/boxingring) +"waC" = ( +/obj/structure/bed/stool{ + pixel_y = 8 + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/grass, +/area/mainship/living/starboard_garden) "wcT" = ( /turf/closed/wall/mainship/white, /area/mainship/medical/upper_medical) @@ -17556,8 +17703,16 @@ /obj/structure/table/mainship/nometal, /obj/item/fuel_cell/full, /obj/structure/cable, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/hexagon, /area/mainship/engineering/engine_core) +"wes" = ( +/obj/structure/rack, +/obj/structure/ob_ammo/warhead/incendiary, +/obj/structure/ob_ammo/warhead/incendiary, +/turf/open/floor/mainship/red{ + dir = 4 + }, +/area/mainship/shipboard/weapon_room) "weY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/light/mainship{ @@ -17609,10 +17764,20 @@ dir = 4; pixel_x = -4 }, -/turf/open/floor/mainship/cargo/arrow{ +/turf/open/floor/mainship/yellow_cargo/arrow{ dir = 4 }, /area/mainship/hallways/hangar) +"whb" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) +"whQ" = ( +/obj/structure/prop/tgbrokenvendor/sec, +/turf/open/floor/plating/mainship, +/area/mainship/shipboard/brig) "whZ" = ( /turf/closed/wall/mainship, /area/mainship/living/bridgebunks) @@ -17629,7 +17794,7 @@ /obj/machinery/reagentgrinder{ pixel_y = 5 }, -/turf/open/floor/mainship/mono, +/turf/open/floor/iron/kitchen, /area/mainship/living/grunt_rnr) "wkJ" = ( /obj/machinery/iv_drip, @@ -17648,16 +17813,15 @@ /obj/structure/sign/prop1{ dir = 1 }, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/general) "wml" = ( /turf/open/floor/mainship/mono, /area/mainship/engineering/port_atmos) "wmy" = ( -/obj/structure/closet/secure_closet/pilot_officer, -/obj/effect/ai_node, -/turf/open/floor/wood, -/area/mainship/living/pilotbunks) +/obj/effect/turf_decal/warning_stripes/thick/corner, +/turf/open/floor/plating, +/area/mainship/hallways/hangar) "wmH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -17666,7 +17830,7 @@ /turf/open/floor/mainship/mono, /area/mainship/command/cic) "wmX" = ( -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/hexagon, /area/mainship/engineering/engine_core) "wne" = ( /obj/machinery/light/mainship, @@ -17719,20 +17883,14 @@ dir = 8 }, /area/mainship/living/cryo_cells) -"wqh" = ( -/obj/structure/bed/bunkbed, -/obj/effect/landmark/start/job/mechpilot, -/obj/effect/landmark/start/job/mechpilot, -/turf/open/floor/wood, -/area/mainship/living/tankerbunks) "wql" = ( /obj/machinery/door/airlock/mainship/generic/bathroom, /obj/machinery/door/firedoor/mainship, /turf/open/floor/mainship/mono, /area/mainship/living/numbertwobunks) "wqq" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar) "wqw" = ( @@ -17754,7 +17912,7 @@ /obj/structure/sink{ dir = 1 }, -/turf/open/floor/prison/kitchen, +/turf/open/floor/iron/kitchen, /area/mainship/living/grunt_rnr) "wrP" = ( /obj/machinery/line_nexter, @@ -17768,6 +17926,13 @@ /obj/machinery/griddle, /turf/open/floor/mainship/floor, /area/mainship/living/grunt_rnr) +"wrW" = ( +/obj/structure/table/woodentable, +/obj/effect/spawner/random/misc/table_lighting, +/obj/item/paper, +/obj/item/paper, +/turf/open/floor/wood, +/area/mainship/living/tankerbunks) "wsb" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ dir = 8 @@ -17778,6 +17943,12 @@ /obj/effect/ai_node, /turf/open/floor/mainship/floor, /area/mainship/command/corporateliaison) +"wsG" = ( +/obj/structure/bed/chair/nometal{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hull/lower_hull) "wsR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -17785,7 +17956,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/mainship/cargo/arrow{ +/turf/open/floor/mainship/yellow_cargo/arrow{ dir = 8 }, /area/mainship/squads/general) @@ -17793,7 +17964,9 @@ /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 }, -/obj/structure/ship_ammo/cas/rocket/widowmaker, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar) "wtq" = ( @@ -17827,17 +18000,29 @@ /turf/open/floor/mainship/tcomms, /area/mainship/command/self_destruct) "wvV" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/plating_catwalk, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 8 + }, +/obj/effect/ai_node, +/obj/structure/disposalpipe/junction/flipped, +/turf/open/floor/mainship/mono, /area/mainship/hallways/aft_hallway) +"wwp" = ( +/obj/machinery/light/mainship{ + dir = 4 + }, +/obj/structure/closet/cabinet, +/turf/open/floor/mainship/mono, +/area/mainship/living/bridgebunks) "wwC" = ( /obj/structure/table/mainship/nometal, /obj/item/clothing/head/chefhat, /obj/item/clothing/under/rank/chef, -/obj/item/clothing/suit/chef/classic, +/obj/item/clothing/suit/storage/chef/classic, /turf/open/floor/mainship/mono, /area/mainship/living/grunt_rnr) "wwQ" = ( @@ -17877,6 +18062,11 @@ /obj/item/ammo_magazine/handful/buckshot, /turf/open/floor/mainship/red/full, /area/mainship/shipboard/firing_range) +"wBa" = ( +/obj/structure/cable, +/obj/effect/landmark/start/job/chiefshipengineer, +/turf/open/floor/mainship/hexagon, +/area/mainship/engineering/engine_core) "wBC" = ( /obj/structure/table/fancywoodentable, /obj/machinery/computer/security/marinemainship_network, @@ -17889,18 +18079,6 @@ "wBL" = ( /turf/closed/wall/mainship/outer, /area/mainship/engineering/port_atmos) -"wBV" = ( -/obj/structure/rack, -/obj/machinery/light/mainship/small, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/turf/open/floor/mainship/red{ - dir = 10 - }, -/area/mainship/shipboard/weapon_room) "wCX" = ( /obj/structure/sign/poster, /obj/effect/decal/cleanable/cobweb{ @@ -17937,21 +18115,9 @@ /turf/open/floor/mainship/mono, /area/mainship/command/corporateliaison) "wEI" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/mainship/maint, -/obj/machinery/door/firedoor/mainship{ - dir = 8 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/hangar) -"wEX" = ( -/obj/structure/rack, -/obj/structure/ob_ammo/warhead/incendiary, -/obj/structure/ob_ammo/warhead/incendiary, -/turf/open/floor/mainship/red{ - dir = 1 - }, -/area/mainship/shipboard/weapon_room) +/obj/machinery/holopad, +/turf/open/floor/mainship/mono, +/area/mainship/living/briefing) "wEZ" = ( /obj/structure/cable, /turf/open/floor/mainship/mono, @@ -17991,10 +18157,6 @@ /obj/item/storage/firstaid/rad, /turf/open/floor/mainship/blue/full, /area/mainship/command/cic) -"wHf" = ( -/obj/machinery/door/firedoor/mainship, -/turf/open/floor/mainship/stripesquare, -/area/mainship/living/pilotbunks) "wHk" = ( /obj/structure/cable, /obj/effect/ai_node, @@ -18003,11 +18165,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) -"wHs" = ( -/turf/open/floor/mainship/black{ - dir = 4 - }, -/area/mainship/living/tankerbunks) "wHB" = ( /obj/machinery/firealarm{ dir = 1 @@ -18015,11 +18172,7 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/port_hallway) "wHI" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ - dir = 1; - on = 1 - }, -/turf/open/floor/wood, +/turf/open/floor/mainship/silver, /area/mainship/living/chapel) "wHL" = ( /obj/structure/table/mainship/nometal, @@ -18089,10 +18242,8 @@ /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) "wLx" = ( -/turf/open/floor/plating/icefloor/warnplate{ - dir = 9 - }, -/area/mainship/squads/req) +/turf/open/floor/mainship/green/full, +/area/mainship/hallways/aft_hallway) "wMh" = ( /obj/machinery/camera/autoname/mainship{ dir = 8 @@ -18124,16 +18275,8 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/starboard_hallway) "wOa" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment/corner{ - dir = 4 - }, -/obj/machinery/light/mainship/small{ - dir = 1 - }, -/obj/effect/ai_node, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/port_umbilical) +/turf/open/floor/plating/mainship, +/area/mainship/shipboard/brig) "wPe" = ( /obj/machinery/light/mainship{ dir = 1 @@ -18154,6 +18297,10 @@ /obj/structure/cable, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) +"wQo" = ( +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/port_hallway) "wQJ" = ( /turf/closed/wall/mainship/outer, /area/mainship/hallways/port_umbilical) @@ -18215,7 +18362,7 @@ pixel_x = 3; pixel_y = 3 }, -/turf/open/floor/mainship/mono, +/turf/open/floor/iron/kitchen, /area/mainship/living/grunt_rnr) "wTX" = ( /obj/machinery/vending/nanomed, @@ -18234,36 +18381,38 @@ }, /turf/open/floor/mainship/mono, /area/mainship/engineering/port_atmos) +"wVG" = ( +/obj/structure/flora/ausbushes/ppflowers, +/turf/open/floor/grass, +/area/mainship/living/starboard_garden) "wVL" = ( /obj/structure/closet/boxinggloves, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/boxingring) "wVZ" = ( -/obj/machinery/door/poddoor/mainship/ammo{ - dir = 2; - id = null; - name = "\improper Hangar Launch Hatch" - }, -/turf/closed/wall/mainship/outer, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/mainship/floor, /area/mainship/hallways/hangar) "wWG" = ( -/obj/structure/bed/chair/nometal{ - dir = 1 +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 }, -/turf/open/floor/mainship/purple/full, -/area/mainship/living/briefing) +/obj/machinery/landinglight/tadpole{ + dir = 8; + pixel_x = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "wWQ" = ( /turf/closed/wall/mainship, /area/mainship/command/telecomms) "wXm" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/clothing/head/warning_cone, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/aft_hallway) "wXr" = ( @@ -18271,14 +18420,10 @@ /obj/machinery/light/mainship{ dir = 4 }, -/obj/structure/bed/stool{ - pixel_y = 8 - }, -/obj/structure/cable, /turf/open/floor/grass, /area/mainship/living/starboard_garden) "wXN" = ( -/obj/structure/largecrate/guns/merc, +/obj/structure/largecrate/supply/supplies/flares, /turf/open/floor/mainship/orange{ dir = 8 }, @@ -18295,6 +18440,13 @@ dir = 8 }, /area/mainship/medical/medical_science) +"wYw" = ( +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/brig) +"wYz" = ( +/turf/open/floor/mainship/green/full, +/area/mainship/squads/req) "wZu" = ( /obj/machinery/camera/autoname/mainship{ dir = 8 @@ -18334,7 +18486,7 @@ id = "qm_warehouse"; name = "\improper Warehouse Shutters" }, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/green/full, /area/mainship/squads/req) "xbv" = ( /obj/structure/disposalpipe/segment, @@ -18365,13 +18517,8 @@ /area/mainship/command/airoom) "xdN" = ( /obj/structure/flora/ausbushes/fullgrass, -/obj/structure/bed/stool{ - pixel_y = 8 - }, -/obj/structure/sign/prop1, -/obj/structure/cable, -/obj/machinery/power/apc{ - dir = 1 +/obj/machinery/light/mainship{ + dir = 4 }, /turf/open/floor/grass, /area/mainship/living/starboard_garden) @@ -18406,11 +18553,11 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/aft_hallway) "xfo" = ( -/obj/item/radio/intercom/general{ - dir = 8 +/obj/structure/shipmast{ + pixel_y = 2 }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/turf/open/floor/mainship/green/full, +/area/mainship/squads/req) "xfu" = ( /mob/living/simple_animal/cat/martin, /turf/open/floor/mainship/mono, @@ -18452,6 +18599,7 @@ /obj/machinery/camera/autoname/mainship{ dir = 4 }, +/obj/structure/showcase/coinpress, /turf/open/floor/mainship/mono, /area/mainship/living/grunt_rnr) "xiV" = ( @@ -18484,12 +18632,20 @@ idle_power_usage = 3; name = "modifed holopad" }, +/obj/machinery/light/mainship{ + dir = 8 + }, /turf/open/floor/mainship/mono, /area/mainship/hallways/port_hallway) +"xjD" = ( +/obj/item/clothing/head/warning_cone, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "xjF" = ( -/turf/open/floor/plating/icefloor/warnplate{ - dir = 4 +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 }, +/turf/open/floor/plating, /area/mainship/squads/req) "xjG" = ( /obj/machinery/loadout_vendor, @@ -18501,15 +18657,34 @@ /obj/structure/closet/emcloset, /turf/open/floor/mainship/cargo, /area/mainship/engineering/upper_engineering) +"xkF" = ( +/obj/machinery/gear{ + id = "supply_elevator_gear" + }, +/turf/open/floor/mainship/mono, +/area/mainship/squads/req) "xlo" = ( -/obj/docking_port/stationary/marine_dropship/cas, -/turf/open/floor/plating, -/area/mainship/hallways/hangar) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/aft_hallway) "xlu" = ( -/turf/open/floor/mainship/terragov{ +/obj/machinery/door/poddoor/mainship/mech{ dir = 1 }, -/area/mainship/living/briefing) +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/stripesquare, +/area/mainship/hallways/hangar) "xlx" = ( /obj/effect/soundplayer, /turf/closed/wall/mainship/white, @@ -18540,7 +18715,7 @@ /area/mainship/engineering/engineering_workshop) "xnW" = ( /obj/vehicle/ridden/powerloader, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/req) "xpe" = ( /obj/structure/cable, @@ -18573,15 +18748,20 @@ /obj/structure/sign/safety/cryogenic, /turf/open/floor/mainship, /area/mainship/living/cryo_cells) +"xqb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/dropship_part_fabricator, +/turf/open/floor/mainship/yellow_cargo, +/area/mainship/hallways/hangar) "xqr" = ( /obj/item/trash/chips, /turf/open/floor/wood, /area/mainship/living/cryo_cells) -"xqu" = ( -/turf/open/floor/plating/icefloor/warnplate{ - dir = 8 - }, -/area/mainship/squads/req) "xqN" = ( /obj/machinery/suit_storage_unit/carbon_unit, /turf/open/floor/mainship/orange{ @@ -18595,33 +18775,41 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/chemistry) -"xsI" = ( +"xtk" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 }, -/turf/open/floor/mainship/black, -/area/mainship/living/tankerbunks) -"xtk" = ( -/turf/open/floor/mainship/terragov/north{ - dir = 10 - }, -/area/mainship/living/briefing) +/turf/closed/wall/mainship, +/area/mainship/hallways/hangar) "xtm" = ( /obj/structure/dropship_equipment/shuttle/flare_launcher, /turf/open/floor/mainship/orange{ dir = 8 }, /area/mainship/hallways/hangar) +"xtU" = ( +/obj/machinery/camera/autoname/mainship{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "xuA" = ( /obj/item/clothing/head/warning_cone, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 9 + }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "xvv" = ( -/turf/open/floor/mainship/black, -/area/mainship/living/tankerbunks) +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "xvA" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -18631,15 +18819,12 @@ }, /area/mainship/squads/general) "xvF" = ( -/obj/machinery/light/mainship{ - dir = 4 - }, -/obj/machinery/vending/tool, -/obj/effect/turf_decal/warning_stripes/linethick{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/plating, -/area/mainship/hallways/starboard_hallway) +/obj/machinery/computer/supplycomp, +/turf/open/floor/mainship/green, +/area/mainship/squads/req) "xwg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -18669,7 +18854,13 @@ }, /area/mainship/squads/general) "xyn" = ( -/turf/open/floor/wood, +/obj/machinery/light/mainship{ + dir = 4 + }, +/obj/machinery/vending/cigarette, +/turf/open/floor/mainship/silver{ + dir = 4 + }, /area/mainship/living/chapel) "xyA" = ( /obj/machinery/landinglight/alamo{ @@ -18678,14 +18869,21 @@ /obj/effect/turf_decal/warning_stripes/thin, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) -"xyO" = ( -/obj/effect/ai_node, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 +"xyG" = ( +/obj/structure/prop/mainship/cannon_cable_connector, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 }, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) +"xyO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 1 + }, /obj/machinery/camera/autoname/mainship, /turf/open/floor/mainship/mono, /area/mainship/living/bridgebunks) @@ -18830,6 +19028,12 @@ /obj/effect/decal/cleanable/blood, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) +"xEX" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ + on = 1 + }, +/turf/open/floor/mainship/mono, +/area/mainship/command/cic) "xEZ" = ( /turf/closed/shuttle/ert/engines/left{ dir = 1 @@ -18847,9 +19051,17 @@ /obj/structure/window/framed/mainship/hull, /turf/open/floor/plating, /area/mainship/engineering/port_atmos) +"xGc" = ( +/obj/structure/closet/emcloset, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/cargo, +/area/mainship/hallways/hangar) "xGl" = ( -/turf/open/floor/wood, -/area/mainship/living/tankerbunks) +/obj/structure/droppod, +/obj/structure/drop_pod_launcher, +/turf/open/floor/mainship/yellow_cargo, +/area/mainship/hallways/hangar/droppod) "xGr" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -18886,6 +19098,7 @@ /area/mainship/command/cic) "xIv" = ( /obj/machinery/researchcomp, +/obj/machinery/researchcomp, /turf/open/floor/mainship/orange{ dir = 8 }, @@ -18897,16 +19110,13 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/port_hallway) "xJe" = ( -/obj/structure/sink{ - dir = 8 - }, -/obj/structure/mirror{ +/obj/machinery/shower{ dir = 4 }, -/obj/machinery/light/mainship{ +/obj/machinery/light/mainship/small{ dir = 1 }, -/turf/open/floor/mainship/floor, +/turf/open/floor/plating/plating_catwalk, /area/crew_quarters/toilet) "xJh" = ( /obj/machinery/power/fusion_engine/preset, @@ -18918,13 +19128,24 @@ /turf/closed/wall/mainship, /area/mainship/living/numbertwobunks) "xKE" = ( -/turf/open/floor/mainship/green{ - dir = 4 +/obj/machinery/door/poddoor/railing{ + id = "supply_elevator_railing" + }, +/turf/open/floor/mainship/cargo/arrow{ + dir = 8 }, /area/mainship/squads/req) "xLu" = ( /turf/closed/wall/mainship, -/area/mainship/living/pilotbunks) +/area/mainship/living/tankerbunks) +"xLy" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 5 + }, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor/mainship/mono, +/area/mainship/hull/lower_hull) "xLV" = ( /obj/structure/window/reinforced{ dir = 8 @@ -18940,6 +19161,16 @@ dir = 1 }, /area/mainship/squads/general) +"xLZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "xNw" = ( /obj/machinery/light/mainship{ dir = 1 @@ -18967,20 +19198,17 @@ /turf/open/floor/carpet/side, /area/mainship/living/commandbunks) "xQB" = ( -/obj/machinery/light/mainship{ - dir = 8 - }, -/turf/open/floor/mainship/green{ +/obj/structure/table/woodentable, +/obj/effect/spawner/random/misc/cigar, +/obj/effect/spawner/random/misc/cigarettes, +/turf/open/floor/wood, +/area/mainship/living/tankerbunks) +"xQT" = ( +/obj/machinery/door/window/secure/brig/cell_2{ dir = 8 }, -/area/mainship/squads/req) -"xQT" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hull/lower_hull) +/turf/open/floor/mainship/floor, +/area/mainship/shipboard/brig) "xRb" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 5 @@ -19001,35 +19229,27 @@ }, /turf/open/floor/plating, /area/mainship/hallways/hangar) -"xRP" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 10 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/firealarm{ - dir = 8 - }, -/turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) "xSb" = ( /turf/open/floor/cult, /area/medical/morgue) -"xSn" = ( -/obj/machinery/power/apc, -/obj/structure/cable, -/turf/open/floor/mainship/floor, -/area/crew_quarters/toilet) -"xSw" = ( -/obj/effect/turf_decal/warning_stripes/thin{ +"xSi" = ( +/obj/machinery/light/mainship/small{ dir = 1 }, +/obj/structure/toilet, +/obj/effect/landmark/corpsespawner/marine/burst, +/obj/effect/decal/cleanable/blood, +/obj/item/organ/brain, +/obj/item/weapon/gun/rifle/standard_autoshotgun, /turf/open/floor/mainship/mono, -/area/mainship/shipboard/weapon_room) +/area/crew_quarters/toilet) +"xSn" = ( +/obj/machinery/door_control/mainship/mech, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) +"xSw" = ( +/turf/open/floor/mainship/hexagon, +/area/mainship/living/evacuation) "xSy" = ( /obj/machinery/door/airlock/mainship/command/FCDRoffice{ dir = 1 @@ -19051,6 +19271,12 @@ /obj/structure/morgue/crematorium, /turf/open/floor/cult, /area/medical/morgue) +"xSV" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) "xTr" = ( /obj/vehicle/ridden/motorbike{ dir = 4 @@ -19058,7 +19284,7 @@ /obj/machinery/firealarm{ dir = 4 }, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/req) "xTN" = ( /obj/effect/turf_decal/warning_stripes/thin{ @@ -19072,8 +19298,13 @@ pixel_y = 5 }, /obj/item/tool/pen/blue, +/obj/item/toy/inflatable_duck, /turf/open/floor/wood, /area/mainship/living/commandbunks) +"xUi" = ( +/obj/structure/cable, +/turf/open/floor/plating/mainship, +/area/mainship/shipboard/brig) "xVg" = ( /obj/item/clothing/head/warning_cone, /obj/effect/turf_decal/warning_stripes/thin{ @@ -19116,6 +19347,15 @@ }, /turf/open/floor/mainship/tcomms, /area/mainship/engineering/lower_engineering) +"xWh" = ( +/obj/machinery/power/apc{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/mainship/green{ + dir = 6 + }, +/area/mainship/squads/req) "xWB" = ( /obj/machinery/door/poddoor/shutters/mainship/open/hangar{ dir = 8 @@ -19141,7 +19381,7 @@ dir = 1 }, /obj/structure/sign/prop1, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/general) "xXW" = ( /obj/machinery/camera/autoname/mainship{ @@ -19172,7 +19412,7 @@ pixel_x = 5; pixel_y = -8 }, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/yellow_cargo, /area/mainship/squads/general) "xYD" = ( /obj/effect/ai_node, @@ -19190,6 +19430,20 @@ /obj/machinery/holopad, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/medical_science) +"xYJ" = ( +/obj/machinery/light/mainship/small{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/shipboard/weapon_room) +"xZo" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 2; + id = "qm_warehouse"; + name = "\improper Warehouse Shutters" + }, +/turf/open/floor/mainship/cargo/arrow, +/area/mainship/squads/req) "xZy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/structure/cable, @@ -19207,30 +19461,40 @@ /turf/open/floor/mainship/stripesquare, /area/mainship/command/self_destruct) "yaf" = ( -/obj/machinery/holopad, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, /turf/open/floor/mainship/mono, -/area/mainship/living/briefing) +/area/mainship/hallways/aft_hallway) "yao" = ( /obj/structure/dropship_equipment/cas/weapon/minirocket_pod, /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar) "yaw" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/landinglight/alamo{ + pixel_y = 4 }, -/obj/item/clothing/head/warning_cone, +/obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "yaz" = ( /turf/open/floor/mainship/mono, /area/mainship/command/cic) "ybP" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/obj/machinery/landinglight/cas{ - pixel_y = 4 +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 }, /turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/area/mainship/squads/req) "ycp" = ( /obj/machinery/computer/camera_advanced/overwatch/bravo, /turf/open/floor/mainship/orange{ @@ -19238,11 +19502,12 @@ }, /area/mainship/command/cic) "ycz" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/door/airlock/mainship/maint{ + dir = 2 + }, +/obj/machinery/door/firedoor/mainship{ + dir = 2 }, -/obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/lower_hull) "ycD" = ( @@ -19321,32 +19586,34 @@ /turf/open/floor/mainship/mono, /area/mainship/hull/lower_hull) "ygT" = ( -/obj/machinery/light/mainship{ - dir = 8 +/obj/machinery/door/poddoor/mainship/mech{ + dir = 1 }, /obj/machinery/door/firedoor/mainship{ - dir = 2; - id = "hangar_lockdown" - }, -/obj/machinery/door/poddoor/shutters/mainship/open/hangar{ - dir = 1 + dir = 2 }, -/obj/structure/stairs/seamless/platform_vert, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/stripesquare, /area/mainship/hallways/hangar) "ygV" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/mainship/black/corner{ - dir = 1 +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 }, -/area/mainship/living/tankerbunks) +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/turf/open/floor/mainship/floor, +/area/mainship/hallways/hangar/droppod) "yhG" = ( /obj/machinery/vending/uniform_supply, /turf/open/floor/mainship/floor, /area/mainship/squads/general) +"yiq" = ( +/obj/structure/cable, +/obj/structure/sign/pods, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "yiF" = ( +/obj/effect/decal/cleanable/blood/gibs/xeno, /turf/open/floor/mainship/research/containment/floor2{ dir = 9 }, @@ -19373,11 +19640,17 @@ /turf/open/space, /area/space) "ykH" = ( -/obj/machinery/iv_drip, -/obj/machinery/power/apc/mainship, -/obj/structure/cable, +/obj/structure/closet/secure_closet/medical2, +/obj/structure/sign/nosmoking_2{ + dir = 1 + }, /turf/open/floor/mainship/sterile/corner, /area/mainship/medical/operating_room_two) +"ykK" = ( +/obj/structure/cable, +/obj/effect/landmark/start/job/shiptech, +/turf/open/floor/mainship/hexagon, +/area/mainship/engineering/engine_core) "ylc" = ( /turf/open/floor/mainship/red{ dir = 8 @@ -19390,8 +19663,7 @@ /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar) "ylp" = ( -/obj/structure/window/framed/mainship, -/turf/open/floor/plating, +/turf/open/floor/mainship/mono, /area/mainship/living/starboard_garden) "ylq" = ( /obj/machinery/light/mainship{ @@ -40885,14 +41157,14 @@ esN esN esN esN -fKh -fKh -chT -fKh -fKh -chT -chT -chT +esN +esN +esN +esN +esN +esN +esN +esN wQJ wQJ wQJ @@ -41143,18 +41415,18 @@ nOJ bBG rKn qjm -qjm -chT -qjm -qjm -chT +cbS +cbS +anW +cbS +cbS jRQ -rGl -jTl +anW +nWd nWd qMG vhG -wMu +hlS wMu jTl ilc @@ -41366,7 +41638,7 @@ cfN rGg rGg wgy -rGg +suU qDh gmc jzI @@ -41399,18 +41671,18 @@ uSe uSe aQj rKn -qjm -qjm -chT -qjm -qjm -chT -bSK -aZM +rgj +rKn +rKn +rKn +rKn +rKn +rKn +rKn +jTl +jTl +jTl jTl -wOa -tTc -aha tTc uOi lDR @@ -41657,16 +41929,16 @@ uSe ior rKn vZa -vZa -chT -vZa -vZa -chT -uvW -jNX -kSz -ncj -kSz +rKn +xSw +xSw +xSw +xSw +xSw +xSw +xSw +xSw +xSw viq viq she @@ -41831,12 +42103,12 @@ qVo qVo qVo qVo -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ +qVo +qVo +qVo +qVo +qVo +qVo qVo qVo qVo @@ -41913,17 +42185,17 @@ uSe uSe ior rKn -iGu -nsR -jxk -iGu -nsR -lGA +vZa +rKn +xSw +xSw +xSw +xSw +xSw +xSw +xSw +xSw xSw -oYA -uzn -hCG -dHn viq ncF wAg @@ -42081,8 +42353,8 @@ mBZ mBZ mBZ mBZ -mBZ -mBZ +qVo +qVo qVo qVo qVo @@ -42170,17 +42442,17 @@ uSe uSe ior rKn -iGu -nsR -mJj -iGu -jPi -uWa -vSI -oZb -liK -tEa -wBV +vZa +rKn +xSw +xSw +xSw +xSw +xSw +xSw +xSw +xSw +xSw viq sGA hlE @@ -42338,8 +42610,8 @@ mBZ mBZ mBZ mBZ -mBZ -mBZ +qVo +qVo qVo qVo qVo @@ -42427,17 +42699,17 @@ uSe uSe ior rKn -iGu -nsR -mJj -iGu -nsR -nsR -dyd -uWP -wEX -ojv -opN +vZa +rKn +xSw +xSw +xSw +xSw +xSw +xSw +xSw +xSw +xSw viq cPw mOX @@ -42684,17 +42956,17 @@ uSe uSe ior rKn -iGu -nsR -mJj -iGu -nsR -fIm -pLj -nhc -kEt -ojv -dAn +vZa +rKn +xSw +xSw +xSw +xSw +xSw +xSw +xSw +xSw +xSw viq sMl iNh @@ -42942,16 +43214,16 @@ uSe aQj rKn rgj -dUH -bTd -lIj -srr -rUR -gVQ -qjW -qyZ -sIM -bkF +rKn +xSw +xSw +xSw +xSw +xSw +xSw +xSw +xSw +xSw viq oYv plE @@ -43178,7 +43450,7 @@ cnd rKn yga fRw -fRw +wsG fRw dMO rKn @@ -43198,17 +43470,17 @@ kLK kLK kcC rKn -snh -vMp -vGw -dOU -ldT -iHE -etI -xRP -qRX -ojz -dUH +vZa +rKn +xSw +xSw +xSw +xSw +xSw +xSw +xSw +xSw +xSw viq nOv oRM @@ -43382,18 +43654,6 @@ qVo qVo qVo qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo cTi bhv bhv @@ -43401,6 +43661,18 @@ bhv bhv bhv bhv +bhv +bhv +bhv +bhv +bhv +bhv +bhv +bhv +bhv +bhv +bhv +bhv nWT nWT esN @@ -43430,12 +43702,12 @@ ldA wTq knx ebr -urs -vzF +van +ttt rKn aYX fRw -fRw +dHI amG xJh rKn @@ -43456,16 +43728,16 @@ fRw fCk rKn lmy -kSz -apW -kSz -kSz -kSz -kSz -kSz -kSz -kSz -kSz +rKn +xSw +xSw +xSw +xSw +xSw +xSw +xSw +xSw +xSw viq upv cNR @@ -43616,22 +43888,10 @@ qVo qVo qVo qVo -kxJ -mBZ -mBZ -mBZ -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo +kxJ +mBZ +mBZ +mBZ qVo qVo qVo @@ -43660,6 +43920,18 @@ nWT nWT nWT nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT esN fvY rSA @@ -43709,20 +43981,20 @@ jWu mRL jWu edH -xQT +hUz bPG -rcm +fAo aME rKn -iJY -iuQ -oOo +xSw +xSw +xSw mLd -ixv -xyn -aVV -hoo -kFu +xSw +xSw +xSw +xSw +xSw viq tfK wml @@ -43896,20 +44168,20 @@ qVo qVo qVo qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo hRh nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT iTM kJX kJX @@ -43966,20 +44238,20 @@ bpc bpc bpc vaj -egW whZ whZ whZ whZ -fAP -frc -ftT -frc -ftT -frc -xyn -xyn -xyn +whZ +kxh +kxh +kxh +gYD +kxh +kxh +kxh +kxh +kxh viq uvK wKA @@ -44153,18 +44425,18 @@ qVo qVo qVo qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -cTi -bhv -bhv -bhv -bhv +hRh +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT nWT nWT iTM @@ -44222,20 +44494,20 @@ qaM kQr jjR bpc -atK +oke llr -whZ +nRP bVU aXc whZ dfT kbe emm -hmA -emm -hmA -xyn -ayR +lES +dxg +ttp +ttp +ttp ttp viq nat @@ -44410,13 +44682,6 @@ qVo qVo qVo qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo hRh nWT nWT @@ -44424,6 +44689,13 @@ nWT nWT nWT nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT iTM vuM aGA @@ -44482,18 +44754,18 @@ bpc vXY cZV jHU -cAi -cGu +whZ +whZ whZ qQY reJ reJ -bmp +lES wHI -sZK -xyn -qcx -oFE +ttp +ttp +ttp +ttp viq wUx iTI @@ -44667,13 +44939,13 @@ bhv bhv bhv bhv -bhv -bhv -bhv -bhv -bhv -bhv -bhv +nWT +nWT +nWT +nWT +nWT +nWT +nWT nWT nWT cCy @@ -44736,21 +45008,21 @@ kGq rOw oSt bpc -atK +oke nqG -whZ -whZ -whZ +umj +bVU +gpU whZ lJt -frc -ftT -frc -ftT -frc -xyn -fwA -xyn +reJ +reJ +aCn +wHI +diW +ttp +ttp +ttp viq vsu sSl @@ -44994,20 +45266,20 @@ gbJ rPv bpc iCT -llr whZ -bVU -aXc whZ -dfT -hmA -emm -hmA -emm -hmA -xyn -xyn -xyn +whZ +whZ +whZ +oTZ +reJ +reJ +lES +wHI +ttp +ttp +ttp +ttp viq pso dJv @@ -45224,8 +45496,8 @@ wcT lkD qJz xiT -jsE -acv +bLz +glL ogX pvW nHm @@ -45251,20 +45523,20 @@ bdF aRK bpc rYQ -cZV -jHU -cAi -anH +hvL +whZ +jcy +lvV whZ fZH xyn jxy lES -xyn -xyn -jxy -kAr -ozQ +rKT +ttp +ttp +ttp +ttp viq cZQ caT @@ -45481,7 +45753,7 @@ wcT poR jsE jsE -jsE +bLz glL pMf dBm @@ -45508,15 +45780,15 @@ hzc bpc bpc xyO -llr -whZ -whZ -whZ +egW +rPt +aZI +pdw whZ -qVu -rbL kxh +rbL kxh +ean kxh kxh kxh @@ -45689,7 +45961,7 @@ ufq ufq ufq ufq -wPV +fop tyN tyN tyN @@ -45720,7 +45992,7 @@ tyN tyN dQG dQG -ndN +dQG dQG dQG xjG @@ -45738,7 +46010,7 @@ wcT lkD qJz jsE -nRP +bLz bLz iDs ghV @@ -45765,19 +46037,19 @@ ruM bpc bpc iYD -nnF +hvL whZ -bVU -aXc +wwp +cGy whZ -gnK +hUf xjt nHq -hZt cWu cWu cWu cWu +hZt cWu viq ljP @@ -45940,13 +46212,13 @@ esN wPV ufq bTS -bTS -vfU -bTS -bTS +irz vfU ufq -lvi +sid +tqC +ufq +wEZ tyN ceN dpY @@ -45964,7 +46236,7 @@ cfp dpY xIb eiU -dpY +iyr dpY wpF wBE @@ -45992,10 +46264,10 @@ wcT wcT dIf wcT -qvJ -qvJ -qvJ -qvJ +tUZ +jsE +jsE +bLz jbg tdm tNb @@ -46009,7 +46281,7 @@ leu rcC alY oNS -srq +jQS bpc ess vLD @@ -46022,15 +46294,15 @@ jED csh bpc fyc -cZV -jHU -cAi -anH +hvL whZ -vyJ +whZ +whZ +whZ +hUf aQr eTR -dcz +pFs dcz dcz dcz @@ -46195,15 +46467,15 @@ qVo hRh esN bIO -lEx -pJv -pJv -pJv +ufq pJv -nNm -nMd +isR +lun ufq -wJQ +uQQ +uQQ +ufq +uud tyN fPH dpY @@ -46217,7 +46489,7 @@ dpY dpY eAd aZD -mVM +aHp eAd dpY dpY @@ -46249,11 +46521,11 @@ vTy qRK lVR wcT -hUf -hUf -hUf -qvJ -spJ +upL +cVd +bLz +bLz +bLz glL lhZ dBm @@ -46279,10 +46551,10 @@ szV pNT bpc jjO -llr -whZ -whZ +hvL whZ +jcy +lvV whZ hUf uBn @@ -46299,7 +46571,7 @@ emY sYv daf sYv -sYv +qFT hME wPV wPV @@ -46454,13 +46726,13 @@ esN wPV ufq bVx -bTS -bTS -bTS +ufq +ufq +ufq fgI iaH ufq -rYr +wEZ tyN eJJ dpY @@ -46503,16 +46775,16 @@ iwj ppG fPi wnJ -oEm +wnJ ocE -dvZ -nTx -rPu -jwA -qvJ +wcT +vyG +tjp +cVd +cVd bLz glL -cVd +rrt dST nHm mBi @@ -46536,10 +46808,10 @@ szV aKD bpc bYb -llr +egW rPt -bVU -aXc +aZI +vzt whZ hUf uBn @@ -46709,17 +46981,17 @@ mBZ hRh esN wPV -swG -bTS -bTS -bTS -sbg -uQQ ufq +gTA +jcH +mjl +uQQ +uQQ +tLf ufq -lsS +bDH tyN -dpY +xSn dpY nWV hFZ @@ -46748,7 +47020,7 @@ xBT pzq nRz qMJ -qMJ +fKh aSw dQG jVv @@ -46756,18 +47028,18 @@ jPT mwj mwj iwj -rDn +yjx wcT mbQ -fPi -oEm -ste +nuX +qVu +tpo wcT -hUf -nTx -hUf -qvJ -suU +uob +tur +fDn +aSq +bLz bLz iDs iDs @@ -46793,10 +47065,10 @@ hIF rEM bpc ljN -cZV -jHU -cAi -lvV +hvL +whZ +dMg +cGy whZ hUf tYe @@ -46967,18 +47239,18 @@ hRh esN pkN ufq -ehR -pJv -pJv -pJv +pSV +jIy +mHk +pSV cEJ -dmB -fUI -bKB +uQQ +ubW +cTc ygT -hcF +dkW dpY -oIb +xyA kDx kDx cfw @@ -47017,12 +47289,12 @@ rDn wcT ncI vhl -oEm +qVu tpo wcT -hUf -nTx -hUf +qvJ +qvJ +qvJ qvJ upL cVd @@ -47052,7 +47324,7 @@ hSQ pPR whZ whZ -whZ +jVU whZ oDx hUf @@ -47075,7 +47347,7 @@ ftH ejw wmX wmX -ixk +wmX wmX boV sYv @@ -47218,23 +47490,23 @@ kxJ mBZ mBZ mBZ -mBZ -mBZ +qVo +qVo hRh esN wPV ufq -bTS -bTS -bTS -bTS +hpW +pSV +pSV +hpW atF uqA joi sUR -qWc +xlu ksN -cWJ +dpY xyA csW csW @@ -47273,12 +47545,12 @@ lAT mpw wcT nku -wnJ -oEm +nwc +qVu tpo wcT hUf -nTx +jxi hUf qvJ upL @@ -47308,9 +47580,9 @@ uYe bpc rkA hUf -omk -xJd hUf +xJd +omk hUf hUf mKE @@ -47332,7 +47604,7 @@ acR ejw wmX pyl -fFa +qsC pyl uqg wPV @@ -47475,24 +47747,24 @@ kxJ mBZ mBZ mBZ -mBZ -mBZ +qVo +qVo hRh esN wPV ufq -bTS -bTS -bTS -hbh +hCx +jLS +hpW +pSV tPa -dmB +uQQ ubW -lvi -imJ +wVZ +ygT +ePE dpY -nWE -cPE +yaw kDx kDx kDx @@ -47530,12 +47802,12 @@ lAT mqY wcT nkC -wnJ +nuX oEm -tpo -wcT -hUf -nTx +spJ +ste +wQo +rPu jwA qvJ uob @@ -47589,7 +47861,7 @@ tqR tqR ryB pyl -fFa +qsC pyl uqg wPV @@ -47739,16 +48011,16 @@ esN wPV ufq pSV -sJa -sJa -sJa -nfC +jIy +mHk +pSV +uQQ ugv exv -lvi -vTt +cTc +ygT +ePE dpY -nWE xyA kDx kDx @@ -47846,7 +48118,7 @@ wKv tqR fbR pyl -fFa +qsC pyl uqg wPV @@ -47995,17 +48267,17 @@ hRh esN wPV ufq -bTS -bTS -bTS -sbg -jqG -ufq -ufq -wEI -tyN -ncO -nWE +uQQ +uQQ +mMx +uQQ +uQQ +uer +uKM +fop +xtk +ePE +dpY xyA kDx kDx @@ -48033,13 +48305,13 @@ bOz xOg kWu usa -bnL +gnK pDg lGi vBY eBB liX -yjx +mnH bnL lQN dLo @@ -48051,12 +48323,12 @@ pii hUf nTx hUf -hUf -hUf -xpj -omk -hUf -qej +gbM +nyh +mrK +mrK +nyh +gbM hUf pAF hUf @@ -48080,7 +48352,7 @@ xpj hUf cSg hUf -aCd +vMM vfH vfH wWQ @@ -48102,8 +48374,8 @@ mOz kBk ejw dMk -vEw -fgF +wmX +qsC nzg uqg wPV @@ -48252,17 +48524,17 @@ nWT esN wPV ufq -bVx -bTS -bTS -bTS +gTA +kyt +mQy +oIu uXb pHB ufq wEZ -jLS +tyN nkm -nWE +dpY cPE kDx kDx @@ -48307,14 +48579,14 @@ rQU uEg hUf xhP -nTx -nTx -nTx -nTx -nTx -nTx -vyG -nTx +uCC +gbM +waC +peg +wVG +mrK +gbM +pZE iHy ufT qKw @@ -48359,8 +48631,8 @@ bsg tzX ejw dMk -vEw -fgF +wmX +wBa sQI uqg tRh @@ -48508,18 +48780,18 @@ esN esN esN bIO -lEx -sJa -sJa -sJa +ufq sJa +uQQ +uQQ +uQQ jZZ sVR ufq uud tyN +ePE dpY -nWE cPE kDx kDx @@ -48565,12 +48837,12 @@ hGT hUf nTx hUf -hUf -hUf -hUf -hUf -hUf -qej +llq +fFo +aqn +eLs +mrK +llq hUf pbe hUf @@ -48617,7 +48889,7 @@ nfr tqR sLC pyl -fFa +ykK pyl uqg aDc @@ -48766,17 +49038,17 @@ wPV wPV uSh ufq -bTS -bTS -bTS +imx +lsS +ncO jhK -bTS -bTS +jZZ +sVR ufq wEZ tyN ePE -nWE +dpY cPE xDq xDq @@ -48821,23 +49093,23 @@ tkS ftK hUf nTx -jwA -gbM -gbM -gbM -gbM -gbM -gbM -tUZ +hUf +ylp +peg +ciN +paw +tFb +ylp +hUf pbe wHB -ekx -ekx -ekx -ekx -ekx -ekx -ekx +snn +teh +snn +snn +uXy +teh +snn ekx ekx ekx @@ -48874,7 +49146,7 @@ qHv tqR fky pyl -fFa +qsC pyl uqg wPV @@ -49032,8 +49304,8 @@ tyN tyN bDH tyN -eJJ -nWE +ePE +dpY cPE kDx kDx @@ -49082,23 +49354,23 @@ hUf ylp pgL ezY -mrK +omz peg -gbM +ylp hUf pbe -eMx -ekx -aNM -aNM -aNM -aNM -aNM -aNM +hUf +snn aNM aNM +chD aNM aNM +tuW +gdb +gdb +gdb +chO ekx hUf gim @@ -49131,7 +49403,7 @@ uvS tqR aYc pyl -fFa +qsC pyl uqg wPV @@ -49274,23 +49546,23 @@ kxJ mBZ mBZ hRh -dWf +esN wPV -wVZ -dpY -eiU -xIb -dpY +tyN +eTC +dGR +gGg +vvE +vvE vvE -sqP eTC -dpY -dpY -eiU +bEi +bEi +bEi wEZ -esH -cTc -nWE +wEZ +xLZ +dpY cPE hFZ kDx @@ -49318,14 +49590,14 @@ aWk dpY fsp kxm -kxm +lhT cPY pEN rkq nRH lAT -mgw -mgw +lAT +lAT opA dLo tNW @@ -49335,26 +49607,26 @@ tkS hGT opd rPu -hUf +wQo mqD kGc -kfo +rcm jHd -mrK -gbM -hUf +ciN +hdc +rGl pbe -rrt -ekx -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM +eMx +snn +uUp +uUp +lev +uUp +uUp +tuW +bYx +vyJ +vyJ sUb ekx hUf @@ -49388,7 +49660,7 @@ xkD tqR gmv qsC -atU +qsC qsC pFw qFT @@ -49531,23 +49803,23 @@ kxJ mBZ mBZ hRh -dWf +esN wPV -wVZ -dpY -aMa +tyN +gGg +gGg hFt -bKq -bKq -bKq -bKq -bKq -bKq -bKq +vvE +vvE +vvE hFt -yaw -wEZ -nWE +bEi +bEi +bEi +lYg +dpY +xLZ +dpY rPi pnF pnF @@ -49565,11 +49837,11 @@ pnF ubn pnF uQB +pgp +qMR +qPD gWI -gWI -gWI -gWI -gWI +sSN vdN tGI tQW @@ -49581,7 +49853,7 @@ pEN dNQ nRH lAT -mgw +lAT mgw oyZ dLo @@ -49595,31 +49867,31 @@ nTx uDl fyR qfG -mqD -jHd +hwZ +gAS mrK gbM -hUf +pZE lPc hUf ekx -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -ekx +vyJ +vyJ +mFw +vyJ +vyJ +aVn +oHX +jPt +lWH +joB +vJq uQI oHV uQI dla mBZ -vfH +fXS vfH bxQ vfH @@ -49788,23 +50060,23 @@ kxJ mBZ mBZ hRh -dWf +esN pkN -wVZ +tyN +gGg +gGg +gGg +vvE +vvE +vvE +gGg +bEi +bEi +bEi +dpY +dpY +xLZ dpY -dVP -kDx -kDx -tHk -csW -csW -csW -csW -csW -qPc -mjl -cTc -nWE dpY dpY dpY @@ -49814,17 +50086,17 @@ dpY dpY dpY eAd -mVM -kOe +aHp +aHp dpY dkX -dpY +hgl acq fMh uKp wXN vZK -pwa +wXN ttb xIv tzk @@ -49850,7 +50122,7 @@ hGT hUf cNy hUf -ylp +gbM wXr bUW ayg @@ -49860,17 +50132,17 @@ hUf pbe hUf ekx -hZr -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM +vyJ +vyJ +xSV +vyJ +vyJ +tBi +oHw +sKH +nVl mMA -mnH +ekx eLq dWU eLq @@ -49900,7 +50172,7 @@ uhP xYg lal lal -dbu +kBR lal lal pHl @@ -50045,23 +50317,23 @@ kxJ mBZ mBZ hRh -dWf +esN wPV -hCx +tyN +acv +dWf +gGg +vvE +vvE +vvE +gGg +bEi +bEi +bEi dpY -dVP -kDx -tHk -nzB -kDx -kDx -kDx -kDx -kDx -cxw -mjl -wEZ -uNz +dpY +rpB +iXU iXU iXU kML @@ -50072,18 +50344,18 @@ fwq fwq fwq fwq -dpY +gRV dKF feK -dKF +hSb kLu eaH -uKp -hiK +opn +pBR kBO pBR -jpE -jpE +pBR +tem tzk aWk dpY @@ -50117,21 +50389,21 @@ nyw eel ekk ekx -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM +vyJ +vyJ +xSV +vyJ +vyJ +vyJ +rqz +qTD +ibZ +wes ekx tpU ngO tpU -llA +com uZn eZf qoh @@ -50302,23 +50574,23 @@ kxJ mBZ mBZ hRh -dWf +esN wPV -wVZ +tyN +aDG +egn +gGg +vvE +vvE +oiy +qxp +snV +bEi +bEi +dpY +dpY +hOe dpY -dVP -kDx -cfw -kDx -kDx -kDx -kDx -kDx -kDx -cxw -mjl -wEZ -lrW dpY iPQ tyN @@ -50332,21 +50604,21 @@ xtm tzk dpY dEC -dpY +eAd hap uxC -uKp -bdS -pDT -qhv +lXN +uay ubh uay -tzk +ubh +uay +vwd aWk dpY fsp pEN -nwc +pEN pEN pEN pFn @@ -50372,20 +50644,20 @@ vmD vmD vmD acn -vmD +jDL ekx -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM +vyJ +vyJ +xSV +vyJ +vyJ +meN +xyG +tfJ +vDr +aYW ekx -yaz +xEX bjo yaz com @@ -50559,23 +50831,23 @@ dmj qVo qVo hRh -dWf +esN wPV -wVZ -dpY -dVP -kDx -cfw -kDx -kDx +tyN +bch +esH +gGg +gGg +gGg +orm thg -kDx -kDx -kDx -cxw -oIu -irz -lrW +sEl +gGg +wEI +dpY +dpY +hOe +dpY dpY srb tyN @@ -50589,30 +50861,30 @@ bWg yjj uCO uCO -uCO +lcE kNb uCO iXB -qMR -qMR -qMR -qMR -qMR -bRC +uCO +uCO +uCO +uCO +uCO +uCO xGr qST rEw -vgo +xlo vgo vgo vgo vgo shx -kfB +vgo hrA kmh wvV -cim +vgo vgo fzt vGG @@ -50629,19 +50901,19 @@ mxT iZb niH mWu -jDL -ekx -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -ekx +rXa +sbN +vMp +vMp +eye +whb +whb +nWM +fvD +hWy +whb +whb +rgx dpN gSr nsC @@ -50816,23 +51088,23 @@ kxJ mBZ mBZ hRh -dWf +esN tgl -wVZ +tyN +bAT +fIb +gGg +ghW +ghW +oIb +rzG +sKa +jIc +jIc +dpY +dpY +hOe dpY -dVP -kDx -cfw -kDx -kDx -kDx -kDx -kDx -kDx -cxw -mjl -wEZ -lrW dpY trj tyN @@ -50843,13 +51115,11 @@ vYo ctR ctR rSQ -tzk -nYk +duy fwq fwq fwq gRV -axK dpY dpY dpY @@ -50859,17 +51129,19 @@ dpY dpY dpY dpY +dpY +dpY +yaf vAn +wLx +wLx +wLx vAn vAn -vAn -vAn -vAn -mxq swv bYG +mXR vAn -uUp vAn vAn wII @@ -50886,19 +51158,19 @@ vmD vmD vmD upQ -tVF -ekx +vmD +sSz lcL -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -ekx +xYJ +lEd +xYJ +hxz +fZX +xYJ +lcL +xYJ +lcL +sSz qeL mPQ qFh @@ -51073,23 +51345,23 @@ kxJ mBZ mBZ hRh -dWf +esN wPV -hCx +tyN +dhK +gTg +gGg +ghW +ghW +ghW +gGg +jIc +jIc +jIc dpY -dVP -kDx -nbW -qWy -kDx -kDx -kDx -kDx -kDx -cxw -mjl -wEZ -dLM +dpY +qIE +gek gek gek llC @@ -51101,60 +51373,60 @@ arI arI arI mpj -uKp gmQ dpY -hgl -mHk -mMx -gnS -kwS -kwo -kwo -kwo -kwS -jRd -jRd -jRd -cHE -cHE -cHE -cHE +icg +tzk +dpY +dpY +dpY +dpY +dpY +dpY +dpY +dpY +dpY +dpY +eAd +ybP cHE +wYz +xfo +wYz cHE ocK lxK hhf -cHE +dmU dUt hhf hhf hhf hhf -hhf -hhf +fQO hhf hhf hhf dLx dLx +hhf lxK -sAl -iyl +hhf +hhf vmD upQ -vmD +tVF ekx -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM +vMr +vMr +vMr +vMr +wYw +pax +vMr +vMr +vMr +vMr ekx dNg cYi @@ -51330,25 +51602,22 @@ kxJ mBZ mBZ hRh -dWf +esN pkN -wVZ -dpY -dVP -kDx -kDx -nbW -xDq -xDq -xDq -xDq -xDq -lVM -mjl -wEZ -lrW +tyN +gGg +gGg +gGg +ghW +ghW +ghW +gGg +jIc +jIc +jIc dpY dpY +hOe dpY dpY dpY @@ -51356,67 +51625,70 @@ dpY dpY dpY dpY +sBh +bld dpY dpY uKp dpY dpY dpY -tTR -orC -gnS -kwS -kwo -kwo -kwo +lXb +dpY +nYk +pqC kwS -jRd -jRd -jRd -cHE -cHE -cHE -cHE +qQF +rzU +tRG +vDH +vSd +orC +mXm +sPS cHE +wYz +wYz +wYz cHE peH eGl prY -ekT moP +ekT hzD cSp nMG +tCJ +adg gsM xTr xnW -nIa -scb -kKO -ooM +eOG +hhf pJi -fQO +ooM iYg -lhG +fQO vmD upQ vmD ekx -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM +wOa +hwp +wOa +wOa +xUi +wOa +wOa +wOa +hwp +wOa ekx rtf uCk rtf -aHp +com iKn eZf vkB @@ -51587,89 +51859,89 @@ kxJ mBZ mBZ hRh -dWf +esN wPV -wVZ -dpY +tyN gGg -bll -dUz -dUz -dUz -dUz -dUz -dUz -dUz -bll -tLf -cTc -lrW -kWG +gGg +hFt +ghW +ghW +ghW +hFt +jIc +jIc +jIc +lYg +dpY +hOe +vSU nyF nyF nyF nyF -cEZ +bRC nyF nyF nyF nyF nyF -aFn +dTH nyF nyF +kfB gup -ecb -bAT -kwS -kwS -kwo -kwo -kwo -kwS -oiy -jRd -jRd -qrR -kWc +dpY +oGN +kDx +kDx +tHk +csW +csW +csW +csW +csW +pLD +qNE +lBs kWc -sSN +xKE kWc kWc -oGN +xkF xHi doG -cHE rpv -qsI -qsI -oZN -cLc +iYf +iYf +iYf +iYf +iYf osF hXJ -qsI +cCZ qsI iYf uVa -mds -hhf +iYf +roD mzh -tBb +dLx vmD upQ vmD ekx -hZr -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -mMA -mnH +wOa +wOa +wOa +fnS +xUi +wOa +fnS +wOa +wOa +wOa +ekx eLq iNk eLq @@ -51844,24 +52116,23 @@ kxJ mBZ mBZ hRh -dWf +esN wPV -wVZ -dpY +tyN +rly lue -axK -dpY -aWL +gGg +ghW +ghW ghW rly jIc -dpY -lue +jIc +jIc wEZ wZu -wEZ -lrW -ybP +hOe +aFn hFZ kDx kDx @@ -51870,69 +52141,70 @@ tHk nzB kDx cxw -pqC +cjU kDx kDx kDx kDx hFZ -opn -jcH -gTA -kwS -kwo -kwo -kwo -sSz -jRd -jRd -jRd -mDv +qPc +dpY +oGN +pwj +tHk +nzB +kDx +kDx +kDx +kDx +kDx +cxw +ubU gMb gMb gMb gMb gMb -hSb -jWh +nAM +xbi iiU -cHE vcN -wLx -xqu -xqu -xqu -xqu -xqu +uIy syt -rKk -cHE -xfu -svo +syt +syt +syt +syt +syt +syt +syt +nIa hhf +svo +xfu xvF -oac +dLx vmD upQ vmD ekx -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM +xQT +lSr +lSr +vMr +gvN +qOC +vMr +xQT +lSr +lSr ekx bfc lon bfc snn mBZ -vfH +fXS vfH bxQ vfH @@ -52117,8 +52389,7 @@ tyN fop tyN pXw -lrW -ybP +aFn kDx kDx kDx @@ -52132,57 +52403,58 @@ tHk csW csW csW +lGv qPc -opn -mQy -dhK -kwS -kwo -kwo -sKa -dGR -xtk -jRd -jRd -mDv +dpY +oGN +kDx +cfw +kDx +kDx +kDx +kDx +kDx +kDx +cxw +ubU gMb gMb gMb gMb gMb -hSb +nAM xbi qKL -cHE vcN -bBq +xjF gUa gUa gUa gUa gUa -pLB -rKk -cHE -cHE -mJW -hhf +gUa +gUa +gUa +uiG hhf +mJW +kKO +krn hhf kjA upQ -lhT +vmD ekx -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -sUb +cyn +fvA +hqb +vMr +wOa +wOa +vMr +cyn +fvA +hqb ekx vmD vwk @@ -52374,8 +52646,7 @@ tyN wEZ tyN iTX -hmu -ybP +aFn kDx kDx kDx @@ -52384,62 +52655,63 @@ cfw kDx kDx rxx -qPD +csW nzB kDx kDx kDx cxw -duy -lun -rzG -kwS -kwS -sSz -orm -xlu -uKM -sSz -yaf -qNE +qPc +xOg +oGN +pwj +cfw +kDx +kDx +tTR +kDx +kDx +kDx +cxw +uzm gMb gMb -qQF +qvM gMb gMb -aKj -xbi -qKL -uiG +otn +xZo +cim exV -bBq +xjF +gUa gUa gUa qHj gUa gUa pLB -cth +gUa uiG -cHE +hhf +buM buM -xQB -njE +hhf hhf fUs upQ tVF ekx -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM -aNM +bjJ +azH +rsk +vMr +whQ +whQ +vMr +bjJ +azH +dvZ ekx fUs vwk @@ -52631,8 +52903,7 @@ tyN uud tyN bxX -hmu -ybP +aFJ kDx kDx kDx @@ -52646,39 +52917,40 @@ kDx kDx kDx kDx +kwo +qPc +dpY +oGN +kDx +cfw +kDx +kDx +kDx +kDx +kDx +kDx cxw -opn -qxp -snV -kwS -nGn -nGn -gTg -fIb -aDG -wWG -wWG -mDv +ubU gMb gMb gMb gMb gMb -rCb +nAM xbi qKL -cHE vcN -bBq +xjF gUa gUa gUa gUa gUa -pLB -rKk -cHE -cHE +gUa +gUa +gUa +uiG +ktH cHE cHE bMB @@ -52876,24 +53148,23 @@ qpC qpC hRh esN -wPV +bIO qzs hoB fwq kcJ -fwq -dpY -fwq +kOe +aha +sZZ tyN wEZ tyN -ePE -hmu -ybP -tHk +xqb +aKj +plN +csW csW csW -qPD nzB kDx kDx @@ -52904,51 +53175,52 @@ kDx kDx kDx cxw -opn -tqC -sEl -kwS -nGn -nGn -nGn -sSz -wWG -wWG -wWG -mDv +qPc +dpY +oGN +pwj +nbW +qWy +kDx +kDx +kDx +kDx +kDx +cxw +ubU gMb gMb gMb gMb gMb -hSb -jWh +nAM +xbi qKL -cHE vcN -uvy -xjF -xjF -xjF -xjF -xjF +peU hTr -rKk -cHE -sxm +hTr +hTr +hTr +hTr +hTr +hTr +hTr +oac +cGu +mKN gYy -thc uny hhf vmD hnk vmD rKm +pvX vmD vmD vmD -vmD -vmD +pvX vmD ezh vmD @@ -53136,65 +53408,65 @@ esN pkN tyN hiO -leF -leF -leF +bDi +aPM +gvv pbx tyN tyN bDH tyN pid -lrW -ybP -cfw +aKj +gVZ kDx kDx kDx kDx +bYC rAZ -xlo kDx kDx kDx kDx kDx kDx -cxw -opn -isR -kwS -kwS -nGn -nGn -nGn -kwS -wWG -wWG -wWG -aNd -lht +kwo +qPc +dpY +oGN +kDx +kDx +nbW +xDq +xDq +xDq +xDq +xDq +wmy +qNE +dmm lht -rzU +eXm lht lht -icg +xkF hhf iOD -cHE gbc aYd aYd aYd +aYd fmo rKk +uvy rKk qbt -roD -rRC sEr +lPM fbL -lxK +fYa hhf lxK eAP @@ -53221,7 +53493,7 @@ lwj jwK nvN vfH -mza +yaz qKz rjL vfH @@ -53393,21 +53665,20 @@ esN wPV tyN oDl -ilf -ilf -dpY +mVM +mVM +pha rwK mQH tXB wEZ tFM -dpY -lrW -ybP +axK +aKX nbW xDq xDq -vwd +xDq qWy kDx kDx @@ -53418,28 +53689,29 @@ kDx kDx kDx cxw -aFJ -orC -gnS -kwS -nGn -nGn -nGn -kwS +mxq +dpY +lXN +tQa wWG +sAl wWG +sAl wWG +sAl +wWG +tQa +fXg +eFA cHE -cHE -gYy -xKE +unN eFA cHE -peH +inU hhf lgN -cHE rKk +cHE ljb xBe gqI @@ -53447,13 +53719,13 @@ heL mgE apO oSs +xWh hhf -shB +jkK dLx dLx dLx unN -cHE vmD uqV vmD @@ -53462,7 +53734,7 @@ vmD goh vmD vmD -jQT +vmD vmD wMh vmD @@ -53649,18 +53921,17 @@ hRh esN wPV tyN -mEj -mEj +leF +leF qKp -cjU +leF cXd tTm kiP rlR qWc wqq -kzV -ybP +aFn kDx kDx kDx @@ -53674,43 +53945,44 @@ kDx kDx kDx kDx -cxw -aFJ -mMx -gnS -kwS -nGn -nGn -nGn -kwS -wWG -wWG -wWG +kwo +qPc +dpY +dpY +dpY +dpY +dpY +dpY +dpY +dpY +dpY +dpY +dpY +faF cHE cHE -dgm -mvX -qKL cHE -ocK +cHE +cHE +uiX lxK hhf -cHE +rKk czx hhf hhf hhf hhf +fQO hhf hhf hhf -hhf +lxK soc bBk bBk bBk -bBk -cHE +cjC vmD uqV tVF @@ -53906,18 +54178,17 @@ hRh esN wPV tyN -mEj -mEj -mEj -gvv +kZz +kZz +kZz +kZz niE mQH tlj bKB imJ -dpY -nas -tRG +urD +aTa kDx kDx kDx @@ -53926,14 +54197,14 @@ cfw kDx kDx rHw -vwd +xDq qWy kDx kDx kDx cxw -opn -avq +qPc +dpY dpY dpY dpY @@ -53943,13 +54214,14 @@ dpY dpY dpY dpY +dkW aHG vAn -dFt -ubU -lGv vAn -mxq +vAn +vAn +vAn +vAn vAn vAn vAn @@ -54012,7 +54284,7 @@ gll uMf fCi qqh -fCi +vua fCi pdo hQD @@ -54165,16 +54437,15 @@ wPV jAX sPc bDi -bDi -dpY +aPM +ilf xuA mQH egI qmJ xad -dpY -dpY -ybP +urD +aFn kDx kDx kDx @@ -54188,13 +54459,14 @@ nbW xDq xDq xDq -lVM -opn +kWG +nZU +kHN gcr hHH -hHH -hHH -urD +ozU +ozU +ozU ozU ozU rCU @@ -54204,13 +54476,13 @@ jOm vgo vgo kVt -xZy +rWK bjC wXm vgo -uer xZy -mXR +ndN +xZy iRM xZy xZy @@ -54421,17 +54693,16 @@ esN wPV tyN uDq -kZz -kZz -kZz +mVM +mVM +gvv dgE tyN tyN ggf tyN jsw -dpY -ybP +aFn hFZ kDx kDx @@ -54440,32 +54711,33 @@ nbW qWy kDx cxw -pgp +cEZ kDx kDx kDx kDx hFZ -gkp -gSJ -dpY -lue -dpY +oZN +tyN +qOJ +qzN +tIA uTG -dpY -dpY -lue -axK -dpY -vSd +uTG +uTG +tTg +svz +gKv +aoJ vAn -wII +nvH +dzr hWt hNd -egn vAn vAn -fDJ +vAn +vAn vAn wII swv @@ -54675,7 +54947,7 @@ mBZ mBZ hRh esN -wPV +bIO qzs wsX fIt @@ -54686,44 +54958,44 @@ lET tyN rYr tyN -fwq -fwq +urD +lXN skU fmN fmN fmN fmN -fmN -fiq +izJ fmN fmN fmN fmN -pwj +ecb fmN fmN -izJ -tzk -gSJ -xLu -xLu -xLu +lHG +fku +tyN +vGQ +vGQ +rmQ +vGQ +vGQ +vGQ +ser vGQ -rLL -xLu -xLu xLu fAJ fAJ -hpW -fAJ -rWD fAJ fAJ -uqt -wHf -qDG -wHf +yiq +cTx +xvv +xjD +xvv +xvv +xvv xJn uyy uyy @@ -54934,17 +55206,16 @@ hRh esN wPV tyN -qtz -hcF -dpY -dpY +nNY +mEj +mEj +gvv dpY paT tyN wJQ tyN -tem -cjU +urD dpY dpY dpY @@ -54960,27 +55231,28 @@ uKp dpY dpY dpY -tzk -gSJ -xLu -lVn +qvN +tyN +rAj +vGQ +rmQ qQD -rip -vou +vGQ +vGQ guG vaX xLu xJe -lJX -lJX -kCk -noZ -sBx -sMS +iku +plO fAJ -gxA -cUW -mpS +rWD +cTx +xvv +kWM +kWM +kWM +xvv uyy jaA hRK @@ -55191,52 +55463,52 @@ hRh esN pkN tyN -hcF -hcF -hcF +mEj +mEj +mEj agP hcF -hcF +jhO tyN lvi tyN -mVM -cjU -bFX -fPH +jTZ +aHH +xGc +aSV hEa -uzm -dpY -dpY -dpY -lue -xfo -dpY -axK -uKp -dpY -dpY -dpY -tzk -gSJ -xLu -nIj +uhj +brT +ozU +dFt +xtU +dii +iFw +eFh +eFh +kHN +aZM +nPF +tyN +vGQ +vGQ rmQ -rip -eZp -uIX -uIy +vGQ +vGQ +vGQ +ser +vGQ xLu sAI -kCk -kCk -kCk +sAI +lLe +eSw ton -fAJ -fAJ -fAJ +cTx +xvv +kHT roN -cUW +nIG vYB uyy feU @@ -55455,9 +55727,7 @@ tyN tyN tyN tyN -wPV -tyN -tyN +lvi tyN tyN tyN @@ -55465,36 +55735,38 @@ tyN tyN tyN xWB -lMf -tyN -jAX -tyN -tyN -tyN -tyN +bFX tyN -cCZ -mpj -gSJ -xLu +vou +vou +iyl +gUp +vou +vou +vou +vou +vou +vou +vGQ +rRC oRH -rAj +bWA bWA tgh uIX drx xLu -bch -omd +fAJ +fAJ omd -kCk -nJP -sBx -sMS fAJ -pqh +vyj +cTx +xvv +bbw +uzy tbT -oKe +xvv uyy uyy wql @@ -55720,38 +55992,38 @@ wPV wPV wPV wPV -sYv -sYv -hFL -sYv -wPV -wPV -wPV -wPV -bIO -tyN -uzm -hEa -gSJ -xLu -peU +dbm +rKn +eLM +nDE +dTK +vPH +jeG +njE +vou +mds +thc +vou +vGQ +vGQ +vGQ gKv -vMr -svz -abX -tIA +rCb +gKv +vGQ +vGQ xLu +xSi +eSw +pmP fAJ -fAJ -fAJ -xSn aEk -fAJ -fAJ -fAJ -iTf -cUW -oKe +cTx +xvv +eKC +kWM +kWM +xvv uyy uNy tzF @@ -55977,38 +56249,38 @@ esN esN esN esN -esN -esN -abZ -esN -esN -esN -esN -esN -wPV -tyN -tyN -tyN -gUp +unX +rKn +fAP +vPH +scb +vPH +vPH +jDG +gKG +shB +mJw +vou xLu +eZp xLu xLu -qjj xLu -qjj xLu xLu -jIy -sid +eZp +xLu fAJ -kyt -kCk -sBx -sMS fAJ -roN -cUW -vYB +fAJ +fAJ +tlT +kMo +tlT +pdj +lIW +pdj +pdj uyy tzF tzF @@ -56233,39 +56505,39 @@ nWT nWT nWT nWT -nWT -nWT -nWT -nWT -nWT -nWT -nWT -nWT -esN -bIO -wPV -wPV -wPV -ssm -imx -xLu -rOV +brL +unX +rKn +gkp +lMf +scb +rLL +vPH +kDO +vou +vou +vou +vou vXQ -xLu -cNz -ukI +fpg +rSr +rOV +vGX +uXw +rSr +fpg xLu pSt -mTs -kCk -kCk +tCO +aJH +hPp aqp -fAJ -fAJ -fAJ -aym +gSN +pfU +bFG +kpI tCO -oKe +giN uyy hpS lHu @@ -56488,41 +56760,41 @@ qpC qpC qpC qpC -qpC -qpC -qpC -qpC -qpC -qpC -qpC -qpC nWT nWT -esN -esN -esN -esN -esN -esN +brL unX -ifT -rXa -wmy -xLu +rKn +gSJ +qHC +lhG +nOV +vPH +jDG +gKG +mvX +fgN +vou +vXQ +vXQ gBQ -lPM +vXQ +vXQ +vXQ +gBQ +vXQ xLu -cui -cui -fAJ -aMk +xGl +xGl +xGl +xGl mOo -sBx -aGR -fAJ -qwW -cRF -qwW +xvv +iSK +xGl +xGl +xGl +xGl uyy bZE dYs @@ -56745,41 +57017,41 @@ qVo mBZ mBZ mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ hRh nWT -nWT -nWT -nWT -nWT -nWT -esN +brL unX +rKn +hvY +mFy +cLc +dTj +eho +abX +vou +nIj +fiq +vou +vXQ +xQB +wrW ifT +mJG ifT -ifT -ifT -ifT -ifT -ifT -viN -viN -viN -viN -viN -viN -viN -aTO -uzy -kWM -cOP +wrW +xQB +xLu +xGl +xGl +xGl +xGl +mOo +fTZ +iSK +xGl +xGl +xGl +xGl uyy gES pQc @@ -57002,40 +57274,40 @@ mBZ mBZ mBZ mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -dgj -qpC -qpC -qpC -qpC -nWT +hRh nWT -esN -ssm -hUz -hUz -hUz -hUz -hUz -hUz -imx -viN -vXG -kuZ -qlc -viN +brL +unX +rKn +vou +vou +vou +vou +vou +vou +vou +vou +vou +vou +xLu +xLu +xLu +qjj +xLu +qjj +xLu +xLu +xLu +kCs +ygV +ygV +ygV +jOS iDE lXB -pHo ygV -aeO +ygV +ygV oOX uyy dQS @@ -57051,7 +57323,7 @@ pVb lkH xvA mvQ -lkH +ciZ lkH lkH hdY @@ -57060,17 +57332,17 @@ lkH fJI lkH gCy -mvQ +rUm lkH lkH lkH hdY -bby +pbh lkH lkH lkH ksd -sbN +ini vqQ ehw xeE @@ -57259,41 +57531,41 @@ mBZ mBZ mBZ mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -qVo -qVo -qVo -qVo -qVo -qVo -qVo hRh nWT -esN -cuG -cuG -cuG -cuG -cuG -cuG -esN -unX -viN -lmH +brL +dgm +cbS +hUz +hUz +hUz +hUz +jrW +hUz +hUz +hUz +hUz +hUz +hUz +hUz +nEM +hUz +hUz +hUz +hUz +pQt +rKn +xGl +xGl xGl -wqh -viN +xGl +mOo pgq iSK -oqI -gwQ -rpk -hJa +xGl +xGl +xGl +xGl uyy uyy uyy @@ -57327,7 +57599,7 @@ ffo igO fee ppB -nuX +fee fee fee fee @@ -57516,40 +57788,40 @@ mBZ mBZ mBZ mBZ -mBZ -mBZ -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo hRh nWT -nWT -nWT -nWT -nWT -nWT -nWT -nWT +brL +esN +esN +esN +esN +esN +esN +esN +esN +esN +esN +esN +esN +esN +esN +cuG +cuG +cuG +cuG esN unX -viN -bNu -viN -viN -viN -jpU +rKn +xGl +xGl +xGl +kKd +mOo +pgq iSK -btQ -efa -rpk +xGl +xGl +xGl rrj nJG eJL @@ -57773,41 +58045,41 @@ qVo qVo qVo qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -dgj -qpC -qpC -qpC -qpC -qpC -qpC +hRh +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT +nWT nWT nWT esN +byk ycz -oSl -bUN -rdS -tHw +ygV +ygV +ygV +ygV aBm -pyX -dts -jsW -rpk -vgd -kbb +xvv +lXB +ygV +ygV +ygV +oOX nJG rPd hZe @@ -57952,25 +58224,8 @@ qVo qVo qVo qVo -"} -(151,1,1) = {" -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo -qVo +"} +(151,1,1) = {" qVo qVo qVo @@ -58006,20 +58261,6 @@ qVo qVo qVo qVo -mBZ -mBZ -kxJ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ qVo qVo qVo @@ -58037,6 +58278,20 @@ qVo qVo qVo qVo +mBZ +mBZ +kxJ +mBZ +mBZ +mBZ +mBZ +mBZ +mBZ +mBZ +mBZ +mBZ +mBZ +mBZ qVo qVo qVo @@ -58046,25 +58301,42 @@ qVo qVo qVo qVo -mBZ -mBZ -qVo qVo -hRh +dgj +qpC +qpC +qpC +qpC +qpC +qpC +qpC +qpC +qpC +qpC +qpC +qpC +qpC +qpC +qpC +qpC +qpC +qpC +nWT nWT esN unX -gFu -iFq -wHs -jFa -wHs -wHs +rKn +xGl +xGl +xGl +pgq +oAz +xGl mSh -wHs -vJi -hGi -xsI +xGl +xGl +xGl +xGl nJG bDv cEe @@ -58081,17 +58353,17 @@ xmJ xmJ mng bYP -fLM +kMf eMz eMz lgL eUy -fLM +kMf eMz eMz lgL bYP -fLM +kMf eMz eMz lgL @@ -58306,22 +58578,22 @@ qVo mBZ mBZ qVo -qVo hRh nWT esN unX -viN -viN -viN -viN -viN -viN -viN -aTO -viN -pdj -xvv +rKn +rKn +rKn +rKn +rKn +rKn +rKn +rKn +rKn +rKn +rKn +rKn nJG bDv bDv @@ -58563,7 +58835,6 @@ qVo qVo qVo qVo -qVo hRh nWT esN @@ -58575,10 +58846,11 @@ hUz hUz hUz hUz -imx -aDC -uDj -xvv +hUz +hUz +hUz +hUz +pQt nJG gXs bDv @@ -58629,12 +58901,12 @@ dle dle dle dle -hqJ +vNA rTr dle dle dle -bBG +xLy esN nWT nWT @@ -58820,7 +59092,6 @@ qVo qVo qVo qVo -qVo hRh nWT esN @@ -58832,10 +59103,11 @@ esN esN esN esN +esN +esN +esN +esN unX -viN -uOd -mux nJG pgv bDv @@ -58866,12 +59138,12 @@ bFc ini lPY lkH -bFc +gaz lkH lkH lkH pzU -bFc +qXc pzU lkH lkH @@ -59077,7 +59349,6 @@ qVo qVo qVo qVo -qVo hRh nWT nWT @@ -59088,11 +59359,12 @@ nWT nWT nWT nWT +nWT +nWT +nWT +nWT esN unX -viN -dct -qSz nJG nZI lHN @@ -59334,7 +59606,6 @@ qVo qVo qVo qVo -qVo dgj qpC qpC @@ -59343,13 +59614,14 @@ qpC qpC qpC qpC +qpC +nWT +nWT +nWT nWT nWT esN unX -viN -viN -viN nJG nJG nJG @@ -59602,11 +59874,11 @@ qVo qVo hRh nWT +nWT +nWT +nWT esN -cra -hUz -hUz -imx +unX nJG bDv aFl @@ -59619,7 +59891,7 @@ mQq nJG fRw nwy -fRw +nUc fYk tOZ aSJ @@ -59859,9 +60131,9 @@ qVo qVo hRh nWT -esN -esN -esN +nWT +nWT +nWT esN unX nJG @@ -60122,9 +60394,9 @@ nWT esN unX nJG -kbW +nnF qAJ -teh +kbW lTw kbW vSE @@ -60690,7 +60962,7 @@ bFf kMb kMb kMb -kcC +amE esN nWT nWT @@ -61110,10 +61382,10 @@ mBZ mBZ mBZ mBZ -mBZ -mBZ -mBZ -mBZ +qVo +qVo +qVo +qVo qVo qVo qVo @@ -61367,10 +61639,10 @@ mBZ mBZ mBZ mBZ -mBZ -mBZ -mBZ -mBZ +qVo +qVo +qVo +qVo qVo qVo qVo @@ -61624,22 +61896,22 @@ mBZ mBZ mBZ mBZ +qVo +qVo +qVo +qVo +qVo +qVo +qVo +qVo +qVo +qVo +qVo mBZ mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ +qVo +qVo +qVo mBZ mBZ qVo @@ -61881,22 +62153,22 @@ mBZ mBZ mBZ mBZ +qVo +qVo +qVo +qVo +qVo +qVo +qVo +qVo +qVo +qVo +qVo mBZ mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ +qVo +qVo +qVo mBZ mBZ qVo @@ -62138,22 +62410,22 @@ mBZ mBZ mBZ mBZ +qVo +qVo +qVo +qVo +qVo +qVo +qVo +qVo +qVo +qVo +qVo mBZ mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ +qVo +qVo +qVo mBZ mBZ qVo @@ -62395,22 +62667,22 @@ mBZ mBZ mBZ mBZ +qVo +qVo +qVo +qVo +qVo +qVo +qVo +qVo +qVo +qVo +qVo mBZ mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ -mBZ +qVo +qVo +qVo mBZ mBZ qVo diff --git a/_maps/map_files/Prison_Station_FOP/Prison_Station_FOP.dmm b/_maps/map_files/Prison_Station_FOP/Prison_Station_FOP.dmm index 960760add0da0..0a3053e8056d9 100644 --- a/_maps/map_files/Prison_Station_FOP/Prison_Station_FOP.dmm +++ b/_maps/map_files/Prison_Station_FOP/Prison_Station_FOP.dmm @@ -6432,7 +6432,7 @@ /turf/open/floor/prison/whitegreen/full, /area/prison/medbay) "auV" = ( -/obj/structure/bed/chair/wheelchair, +/obj/vehicle/ridden/wheelchair, /obj/machinery/light{ dir = 1 }, @@ -6441,7 +6441,7 @@ }, /area/prison/medbay) "auW" = ( -/obj/structure/bed/chair/wheelchair, +/obj/vehicle/ridden/wheelchair, /obj/item/tool/wrench, /turf/open/floor/prison/whitegreen{ dir = 5 @@ -7448,7 +7448,7 @@ /area/prison/residential/central) "ayd" = ( /obj/structure/table/reinforced, -/obj/item/clothing/suit/chef/classic, +/obj/item/clothing/suit/storage/chef/classic, /turf/open/floor/prison/kitchen, /area/prison/research) "aye" = ( @@ -7796,7 +7796,7 @@ /area/prison/residential/north) "azj" = ( /obj/structure/table/reinforced, -/obj/item/clothing/suit/chef/classic, +/obj/item/clothing/suit/storage/chef/classic, /obj/item/tool/kitchen/rollingpin, /turf/open/floor/prison/kitchen, /area/prison/residential/north) @@ -28255,7 +28255,7 @@ /area/prison/residential/south) "bLO" = ( /obj/structure/table/reinforced, -/obj/item/clothing/suit/chef/classic, +/obj/item/clothing/suit/storage/chef/classic, /obj/item/tool/kitchen/rollingpin, /turf/open/floor/prison/kitchen, /area/prison/residential/south) @@ -30358,7 +30358,7 @@ /area/prison/security/checkpoint/medsec) "bSM" = ( /obj/structure/table/reinforced, -/obj/item/clothing/suit/chef/classic, +/obj/item/clothing/suit/storage/chef/classic, /obj/item/tool/kitchen/rollingpin, /obj/item/pizzabox, /turf/open/floor/prison/kitchen, @@ -40764,7 +40764,7 @@ /area/prison/hangar/main) "etW" = ( /obj/structure/table/reinforced, -/obj/item/clothing/suit/chef/classic, +/obj/item/clothing/suit/storage/chef/classic, /obj/item/tool/kitchen/rollingpin, /turf/open/floor/prison/kitchen, /area/prison/residential/central) @@ -44836,7 +44836,7 @@ /area/prison/residential/north) "oYc" = ( /obj/structure/table, -/obj/item/clothing/suit/chef/classic, +/obj/item/clothing/suit/storage/chef/classic, /obj/item/reagent_containers/spray, /turf/open/floor/prison/kitchen, /area/prison/residential/north) diff --git a/_maps/map_files/Research_Outpost/Research_Outpost.dmm b/_maps/map_files/Research_Outpost/Research_Outpost.dmm index 245d0a7056fd6..0ef43c4bd985d 100644 --- a/_maps/map_files/Research_Outpost/Research_Outpost.dmm +++ b/_maps/map_files/Research_Outpost/Research_Outpost.dmm @@ -1990,7 +1990,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/item/trash/barcardine, +/obj/item/trash/barcaridine, /turf/open/floor/wood, /area/outpost/dormitories) "jE" = ( @@ -2943,7 +2943,7 @@ pixel_x = 4; pixel_y = 4 }, -/obj/item/stack/sheet/glass/large_stack, +/obj/item/stack/sheet/glass/glass/large_stack, /obj/item/stack/sheet/mineral/phoron/medium_stack, /turf/open/floor/tile/dark/purple2, /area/outpost/science/research) @@ -9486,7 +9486,7 @@ /turf/open/floor/plating/ground/mars/random/cave, /area/outpost/caves/north) "Sv" = ( -/obj/item/trash/barcardine, +/obj/item/trash/barcaridine, /turf/open/floor/wood, /area/outpost/dormitories) "Sw" = ( diff --git a/_maps/map_files/Sulaco/TGS_Sulaco.dmm b/_maps/map_files/Sulaco/TGS_Sulaco.dmm index 5248e738dd29b..83003bc90579c 100644 --- a/_maps/map_files/Sulaco/TGS_Sulaco.dmm +++ b/_maps/map_files/Sulaco/TGS_Sulaco.dmm @@ -69,11 +69,9 @@ /turf/open/floor/prison/whitegreen/corner, /area/sulaco/medbay) "aak" = ( -/obj/machinery/power/fusion_engine{ - name = "\improper S-52 fusion reactor #2" - }, /obj/structure/cable, /obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/power/fusion_engine/preset, /turf/open/floor/plating/mainship, /area/sulaco/engineering/engine) "aam" = ( @@ -82,14 +80,6 @@ "aan" = ( /turf/closed/wall/mainship/white, /area/sulaco/medbay/chemistry) -"aap" = ( -/obj/machinery/power/fusion_engine{ - name = "\improper S-52 fusion reactor #3" - }, -/obj/structure/cable, -/obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/plating/mainship, -/area/sulaco/engineering/engine) "aar" = ( /obj/structure/closet/secure_closet/medical3, /obj/item/storage/surgical_tray, @@ -121,21 +111,13 @@ }, /area/sulaco/medbay/chemistry) "aat" = ( -/obj/machinery/power/fusion_engine{ - name = "\improper S-52 fusion reactor #5" - }, /obj/structure/cable, /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 }, +/obj/machinery/power/fusion_engine/preset, /turf/open/floor/plating/mainship, /area/sulaco/engineering/engine) -"aau" = ( -/obj/structure/closet/secure_closet/chemical, -/turf/open/floor/prison/whitegreen/corner{ - dir = 4 - }, -/area/sulaco/medbay/west) "aav" = ( /obj/machinery/power/apc/mainship, /obj/structure/cable, @@ -211,29 +193,6 @@ "aaQ" = ( /turf/closed/wall/mainship/white, /area/sulaco/medbay/storage) -"aaR" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/firealarm, -/turf/open/floor/prison/whitegreen/corner{ - dir = 4 - }, -/area/sulaco/medbay/west) -"aaS" = ( -/obj/structure/table/mainship/nometal, -/obj/item/storage/firstaid/adv{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/storage/firstaid/adv{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/storage/firstaid/adv, -/obj/machinery/camera/autoname, -/turf/open/floor/prison/whitegreen/corner{ - dir = 1 - }, -/area/sulaco/medbay/west) "aaT" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer1{ dir = 4 @@ -341,16 +300,6 @@ /obj/item/reagent_containers/glass/beaker/bluespace, /turf/open/floor/prison/whitegreen/corner, /area/sulaco/medbay/chemistry) -"abn" = ( -/obj/machinery/power/fusion_engine{ - name = "\improper S-52 fusion reactor #6" - }, -/obj/structure/cable, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/turf/open/floor/plating/mainship, -/area/sulaco/engineering/engine) "abo" = ( /obj/structure/cable, /obj/effect/landmark/start/job/medicalofficer, @@ -377,7 +326,7 @@ /area/sulaco/briefing) "abt" = ( /obj/machinery/light/mainship, -/obj/structure/bed/chair/wheelchair{ +/obj/vehicle/ridden/wheelchair{ dir = 4 }, /obj/structure/sign/prop1, @@ -386,17 +335,6 @@ "abu" = ( /turf/closed/wall/mainship/gray/outer, /area/sulaco/showers) -"abx" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 6 - }, -/turf/open/floor/prison/whitegreen/corner{ - dir = 1 - }, -/area/sulaco/medbay/west) "aby" = ( /obj/machinery/status_display, /turf/closed/wall/mainship/gray, @@ -409,22 +347,6 @@ /obj/docking_port/stationary/marine_dropship/crash_target, /turf/open/floor/prison/arrow/clean, /area/sulaco/cafeteria) -"abB" = ( -/obj/structure/table/mainship/nometal, -/obj/item/storage/firstaid/o2{ - pixel_x = 4; - pixel_y = 6 - }, -/obj/item/storage/firstaid/fire{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/storage/firstaid/toxin, -/obj/machinery/light/mainship{ - dir = 4 - }, -/turf/open/floor/prison/whitegreen/corner, -/area/sulaco/medbay/west) "abC" = ( /obj/machinery/light/mainship{ dir = 8 @@ -441,10 +363,6 @@ dir = 8 }, /area/sulaco/medbay/west) -"abE" = ( -/obj/structure/sign/chemistry, -/turf/closed/wall/mainship/white, -/area/sulaco/medbay/west) "abF" = ( /obj/structure/cable, /obj/machinery/door_control{ @@ -519,26 +437,12 @@ dir = 1 }, /area/sulaco/medbay/west) -"abY" = ( -/obj/machinery/door/airlock/mainship/medical/glass/chemistry, -/obj/machinery/door/firedoor/mainship, -/turf/open/floor/prison/whitegreen/corner{ - dir = 1 - }, -/area/sulaco/medbay/west) "aca" = ( /obj/machinery/vending/MarineMed/Blood, /turf/open/floor/prison/whitegreen/corner{ dir = 8 }, /area/sulaco/medbay/west) -"acb" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden, -/turf/open/floor/prison/whitegreen/corner, -/area/sulaco/medbay/west) "acc" = ( /obj/structure/rack, /obj/item/clothing/suit/armor/bulletproof, @@ -623,16 +527,6 @@ dir = 1 }, /area/sulaco/medbay) -"acq" = ( -/obj/structure/bed, -/obj/item/bedsheet/medical, -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/prison/whitegreen/corner{ - dir = 8 - }, -/area/sulaco/medbay/west) "acs" = ( /obj/structure/table/mainship/nometal, /obj/item/defibrillator, @@ -642,7 +536,7 @@ }, /area/sulaco/medbay/storage) "act" = ( -/obj/structure/bed/chair/wheelchair{ +/obj/vehicle/ridden/wheelchair{ dir = 4 }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer1{ @@ -688,18 +582,6 @@ /obj/machinery/light/mainship/small, /turf/open/floor/plating/mainship, /area/sulaco/engineering/engine) -"acz" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/open/floor/prison/whitegreen/corner, -/area/sulaco/medbay/west) -"acA" = ( -/obj/machinery/bot/cleanbot, -/turf/open/floor/prison/whitegreen/corner{ - dir = 8 - }, -/area/sulaco/medbay/west) "acC" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/mainship/sterile/plain, @@ -787,19 +669,6 @@ dir = 4 }, /area/sulaco/medbay/surgery_one) -"acQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/prison/whitegreen/corner{ - dir = 1 - }, -/area/sulaco/medbay/west) "acS" = ( /obj/machinery/door/poddoor/shutters/mainship{ dir = 1; @@ -814,12 +683,6 @@ dir = 1 }, /area/sulaco/medbay/surgery_one) -"acT" = ( -/obj/machinery/cryopod/right, -/turf/open/floor/prison/whitegreen/corner{ - dir = 8 - }, -/area/sulaco/medbay/west) "acW" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -866,12 +729,6 @@ dir = 4 }, /area/sulaco/medbay) -"add" = ( -/obj/machinery/cryopod/right, -/turf/open/floor/prison/whitegreen/corner{ - dir = 4 - }, -/area/sulaco/medbay/west) "ade" = ( /turf/open/floor/prison/whitegreen/corner, /area/sulaco/medbay) @@ -1002,14 +859,6 @@ dir = 1 }, /area/sulaco/medbay/surgery_one) -"adE" = ( -/obj/machinery/light/mainship{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden, -/turf/open/floor/prison/whitegreen/corner, -/area/sulaco/medbay/west) "adF" = ( /obj/machinery/light/mainship{ dir = 8 @@ -1123,7 +972,7 @@ }, /area/sulaco/medbay/surgery_one) "adR" = ( -/obj/structure/bed/chair/wheelchair{ +/obj/vehicle/ridden/wheelchair{ dir = 4 }, /turf/open/floor/prison/whitegreen/corner{ @@ -1156,14 +1005,6 @@ dir = 8 }, /area/sulaco/medbay) -"adV" = ( -/obj/machinery/camera/autoname{ - dir = 1 - }, -/turf/open/floor/prison/whitegreen/corner{ - dir = 1 - }, -/area/sulaco/medbay) "adW" = ( /obj/structure/table/mainship/nometal, /obj/item/reagent_containers/glass/beaker/cryomix, @@ -3285,14 +3126,6 @@ }, /turf/open/floor/plating/mainship, /area/sulaco/engineering/engine) -"arX" = ( -/obj/machinery/power/fusion_engine{ - name = "\improper S-52 fusion reactor #1" - }, -/obj/structure/cable, -/obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/plating/mainship, -/area/sulaco/engineering/engine) "arY" = ( /turf/open/floor/prison/red{ dir = 8 @@ -3622,6 +3455,12 @@ }, /turf/open/floor/prison/red, /area/sulaco/bridge) +"atx" = ( +/obj/effect/spawner/random/misc/structure/flavorvending/snackweighted, +/turf/open/floor/prison/whitegreen/corner{ + dir = 4 + }, +/area/sulaco/medbay) "atB" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/manifold/cyan/hidden/layer1{ @@ -4983,6 +4822,9 @@ /obj/effect/spawner/random/misc/table_lighting, /obj/item/weapon/chainofcommand, /obj/machinery/camera/autoname, +/obj/item/clothing/mask/cigarette/pipe{ + pixel_y = 5 + }, /turf/open/floor/wood, /area/sulaco/cap_office) "aAb" = ( @@ -6162,6 +6004,14 @@ }, /turf/open/floor/plating/mainship, /area/sulaco/engineering/engine) +"aFT" = ( +/obj/machinery/door/airlock/mainship/maint{ + dir = 8 + }, +/obj/effect/ai_node, +/obj/machinery/door/firedoor/mainship, +/turf/open/floor/plating, +/area/sulaco/mechpilotquarters) "aFU" = ( /obj/machinery/suit_storage_unit/standard_unit, /obj/machinery/camera/autoname, @@ -7183,29 +7033,6 @@ }, /turf/open/floor/prison, /area/sulaco/marine) -"aMq" = ( -/obj/machinery/atmospherics/pipe/manifold/yellow/hidden, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden/layer1{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/ai_node, -/turf/open/floor/prison, -/area/sulaco/marine) -"aMt" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/prison, -/area/sulaco/marine) "aMu" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ dir = 8 @@ -7423,6 +7250,21 @@ dir = 6 }, /area/sulaco/command/eva) +"aNJ" = ( +/obj/machinery/firealarm{ + dir = 8 + }, +/obj/structure/rack, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/mainship/shipboard/weapon_room) "aNL" = ( /obj/structure/sink{ dir = 8; @@ -7527,43 +7369,10 @@ /obj/structure/window/reinforced, /turf/open/floor/prison/sterilewhite, /area/sulaco/cafeteria/kitchen) -"aOT" = ( -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/rack, -/obj/machinery/camera/autoname{ - dir = 4 - }, -/turf/open/floor/prison/red{ - dir = 8 - }, -/area/mainship/shipboard/weapon_room) "aOW" = ( /obj/structure/sign/science, /turf/open/floor/prison/whitegreen, /area/sulaco/research) -"aOY" = ( -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/ob_ammo/ob_fuel, -/obj/structure/rack, -/turf/open/floor/prison, -/area/mainship/shipboard/weapon_room) "aPa" = ( /obj/machinery/light/mainship/small, /turf/open/floor/prison, @@ -7614,12 +7423,6 @@ /obj/machinery/door/firedoor/mainship, /turf/open/floor/plating/platebotc, /area/sulaco/medbay/hangar) -"aPC" = ( -/obj/structure/ship_rail_gun, -/turf/open/floor/prison/red{ - dir = 10 - }, -/area/mainship/shipboard/weapon_room) "aPF" = ( /turf/open/floor/prison/bright_clean, /area/sulaco/hangar) @@ -7767,9 +7570,6 @@ /turf/open/floor/mainship/stripesquare, /area/sulaco/hangar/cas) "aQI" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ dir = 4 }, @@ -7997,6 +7797,14 @@ }, /turf/open/floor/prison/bright_clean, /area/sulaco/hangar) +"aRS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door_control/mainship/mech{ + dir = 1; + id = "mech_shutters_1" + }, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) "aRT" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer1{ dir = 4 @@ -8081,14 +7889,6 @@ /obj/structure/closet/emcloset, /turf/open/floor/prison/bright_clean, /area/sulaco/hangar) -"aSv" = ( -/obj/machinery/power/fusion_engine{ - name = "\improper S-52 fusion reactor #7" - }, -/obj/structure/cable, -/obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/plating/mainship, -/area/sulaco/engineering/engine) "aSx" = ( /obj/machinery/door/airlock/multi_tile/mainship/research, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, @@ -8153,26 +7953,11 @@ }, /turf/open/floor/prison, /area/sulaco/hallway/lower_main_hall) -"aSV" = ( -/obj/machinery/power/fusion_engine{ - name = "\improper S-52 fusion reactor #8" - }, -/obj/structure/cable, -/obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/plating/mainship, -/area/sulaco/engineering/engine) "aTb" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, /obj/effect/decal/cleanable/dirt, /turf/open/floor/cult, /area/sulaco/morgue) -"aTc" = ( -/obj/machinery/light/mainship{ - dir = 8 - }, -/obj/structure/bed/roller, -/turf/open/floor/prison/bright_clean, -/area/sulaco/hangar) "aTd" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -8441,14 +8226,6 @@ }, /turf/open/floor/wood, /area/sulaco/liaison) -"aUV" = ( -/obj/machinery/computer/mech_builder{ - dir = 2 - }, -/turf/open/floor/plating/icefloor/warnplate{ - dir = 9 - }, -/area/sulaco/hangar/storage) "aUX" = ( /obj/structure/disposalpipe/segment/corner{ dir = 1 @@ -8947,25 +8724,9 @@ /obj/machinery/light/mainship, /turf/open/floor/prison/marked, /area/sulaco/hallway/lower_main_hall) -"aZu" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/plating/icefloor/warnplate{ - dir = 1 - }, -/area/sulaco/hangar/storage) "aZw" = ( /turf/open/floor/prison, /area/mainship/living/pilotbunks) -"aZB" = ( -/obj/machinery/door/airlock/mainship/maint{ - dir = 8 - }, -/obj/effect/ai_node, -/obj/machinery/door/firedoor/mainship, -/turf/open/floor/plating, -/area/sulaco/maintenance/lower_maint) "aZD" = ( /obj/machinery/light/mainship/small, /obj/effect/decal/cleanable/dirt, @@ -9004,6 +8765,9 @@ /obj/machinery/telecomms/processor/preset_four, /turf/open/floor/mainship/tcomms, /area/sulaco/telecomms) +"aZQ" = ( +/turf/open/floor/prison/whitegreen/corner, +/area/sulaco/medbay/west) "aZU" = ( /obj/machinery/camera/autoname, /obj/structure/cable, @@ -9126,14 +8890,6 @@ /obj/machinery/firealarm, /turf/open/floor/prison, /area/sulaco/hallway/dropshipprep) -"baR" = ( -/obj/machinery/power/fusion_engine{ - name = "\improper S-52 fusion reactor #9" - }, -/obj/structure/cable, -/obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/plating/mainship, -/area/sulaco/engineering/engine) "baS" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, @@ -9240,7 +8996,7 @@ /area/sulaco/hallway/dropshipprep) "bct" = ( /obj/structure/cable, -/obj/machinery/power/smes/buildable/empty, +/obj/machinery/power/smes/preset, /turf/open/floor/plating/mainship, /area/sulaco/engineering/engine) "bcD" = ( @@ -9472,6 +9228,15 @@ }, /turf/open/floor/prison/plate, /area/sulaco/cargo) +"bgW" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/turf/open/floor/prison/green/full, +/area/sulaco/marine) "bhA" = ( /obj/effect/turf_decal/warning_stripes/thin, /obj/structure/ship_ammo/cas/minirocket, @@ -9522,15 +9287,6 @@ /obj/machinery/vending/nanomed, /turf/open/floor/prison/bright_clean, /area/sulaco/hydro) -"bjL" = ( -/obj/effect/decal/cleanable/blood/oil, -/obj/machinery/computer/mech_builder{ - dir = 2 - }, -/turf/open/floor/plating/icefloor/warnplate{ - dir = 5 - }, -/area/sulaco/hangar/storage) "bjV" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 @@ -9626,6 +9382,13 @@ /obj/effect/ai_node, /turf/open/floor/freezer, /area/sulaco/showers) +"btt" = ( +/obj/machinery/keycard_auth, +/obj/machinery/door/poddoor/shutters/mainship/selfdestruct{ + dir = 8 + }, +/turf/closed/wall/mainship/gray/outer, +/area/sulaco/hangar) "btR" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -9722,13 +9485,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/sulaco/maintenance/lower_maint3) -"bCd" = ( -/obj/machinery/camera/autoname{ - dir = 4 - }, -/obj/effect/spawner/random/misc/structure/supplycrate, -/turf/open/floor/prison/bright_clean, -/area/sulaco/hangar) "bCk" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/manifold4w/cyan/hidden/layer1, @@ -9770,6 +9526,14 @@ /obj/structure/ship_ammo/cas/rocket/keeper, /turf/open/floor/prison, /area/sulaco/hangar/cas) +"bGH" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/mob/living/simple_animal/corgi/walten, +/turf/open/floor/prison/whitegreen/corner{ + dir = 8 + }, +/area/sulaco/medbay/west) "bGR" = ( /obj/machinery/door/airlock/mainship/maint{ dir = 8 @@ -9792,19 +9556,6 @@ }, /turf/open/floor/wood, /area/sulaco/bridge/quarters) -"bHs" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/light/mainship{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ - dir = 8 - }, -/obj/machinery/vending/weapon, -/turf/open/floor/prison, -/area/sulaco/marine) "bHw" = ( /obj/machinery/air_alarm{ dir = 1 @@ -9864,16 +9615,6 @@ }, /turf/open/floor/mainship/tcomms, /area/mainship/command/self_destruct) -"bJY" = ( -/obj/structure/table/reinforced, -/obj/item/book/manual/chef_recipes, -/obj/effect/spawner/random/food_or_drink/kitchenknife/butcherweighted, -/obj/item/tool/kitchen/rollingpin, -/obj/item/clothing/head/chefhat, -/obj/item/clothing/suit/chef/classic, -/obj/item/clothing/suit/chef, -/turf/open/floor/prison/sterilewhite, -/area/sulaco/cafeteria/kitchen) "bKl" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/yellow/hidden, @@ -9937,6 +9678,12 @@ /obj/structure/window/framed/mainship/gray/toughened/hull, /turf/open/floor/plating/platebotc, /area/sulaco/cargo) +"bOG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/mainship, +/obj/structure/cable, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) "bOX" = ( /obj/effect/step_trigger/teleporter/random{ affect_ghosts = 1; @@ -9958,6 +9705,17 @@ /obj/machinery/door/firedoor/mainship, /turf/open/floor/plating/platebotc, /area/sulaco/hangar) +"bPy" = ( +/obj/machinery/door/poddoor/mainship/mech{ + dir = 1; + id = "mech_shutters_3" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ + dir = 1 + }, +/turf/open/floor/mainship_hull/gray, +/area/sulaco/hangar/storage) "bPL" = ( /obj/machinery/light/mainship/small{ dir = 8 @@ -10049,13 +9807,6 @@ dir = 8 }, /area/sulaco/medbay/west) -"bVU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm{ - dir = 4 - }, -/turf/open/floor/prison/bright_clean, -/area/sulaco/hangar) "bWf" = ( /turf/closed/wall/mainship/gray/outer, /area/sulaco/hangar/droppod) @@ -10191,15 +9942,6 @@ /obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk/prison, /area/sulaco/hallway/lower_foreship) -"cfv" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer1{ - dir = 1 - }, -/obj/machinery/camera/autoname{ - dir = 1 - }, -/turf/open/floor/prison/whitegreen/corner, -/area/sulaco/medbay/west) "cfA" = ( /obj/machinery/light/mainship/small{ dir = 8 @@ -10253,6 +9995,24 @@ /obj/item/storage/bag/trash, /turf/open/floor/plating, /area/sulaco/maintenance/lower_maint2) +"clt" = ( +/obj/structure/table/mainship/nometal, +/obj/item/storage/firstaid/o2{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/storage/firstaid/fire{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/storage/firstaid/toxin, +/obj/machinery/light/mainship{ + dir = 4 + }, +/turf/open/floor/prison/whitegreen/corner{ + dir = 8 + }, +/area/sulaco/medbay/west) "cmN" = ( /obj/machinery/firealarm, /turf/open/floor/prison, @@ -10396,16 +10156,6 @@ /obj/effect/ai_node, /turf/open/floor/cult, /area/sulaco/morgue) -"cyo" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/computer/squad_selector, -/turf/open/floor/prison/green/full, -/area/sulaco/marine) "cyq" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 5 @@ -10737,6 +10487,14 @@ /obj/effect/turf_decal/warning_stripes, /turf/open/floor/wood, /area/mainship/living/basketball) +"cRY" = ( +/obj/machinery/door/airlock/mainship/medical/glass{ + dir = 2 + }, +/turf/open/floor/prison/whitegreen/corner{ + dir = 8 + }, +/area/sulaco/medbay/west) "cSb" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -10892,6 +10650,10 @@ /obj/structure/disposalpipe/segment, /turf/closed/wall/mainship/gray, /area/sulaco/cafeteria/kitchen) +"cXw" = ( +/obj/machinery/cryopod/right, +/turf/open/floor/prison/whitegreen/corner, +/area/sulaco/medbay/west) "cYh" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/firedoor/mainship, @@ -10914,6 +10676,10 @@ /obj/effect/spawner/random/misc/gnome, /turf/open/floor/plating, /area/sulaco/maintenance/lower_maint3) +"dal" = ( +/obj/structure/ship_ammo/cas/bomb/fourhundred, +/turf/open/floor/plating, +/area/sulaco/hangar/cas) "dde" = ( /obj/effect/turf_decal/warning_stripes/thin, /turf/open/floor/prison/bright_clean, @@ -10979,6 +10745,17 @@ dir = 4 }, /area/mainship/shipboard/weapon_room) +"djp" = ( +/obj/machinery/chem_dispenser/soda, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/obj/structure/table/mainship/nometal, +/obj/machinery/light/mainship{ + dir = 8 + }, +/turf/open/floor/wood, +/area/sulaco/medbay/west) "djr" = ( /turf/open/floor/prison, /area/sulaco/hallway/evac) @@ -11034,6 +10811,16 @@ }, /turf/open/floor/prison/green/full, /area/sulaco/marine) +"dmK" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/machinery/computer/mech_builder{ + dir = 2 + }, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 5 + }, +/turf/open/floor/plating, +/area/sulaco/hangar/storage) "dnW" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ dir = 9 @@ -11128,6 +10915,12 @@ }, /turf/open/floor/plating/warning, /area/sulaco/command/eva) +"dsn" = ( +/obj/machinery/firealarm{ + dir = 4 + }, +/turf/open/floor/prison/bright_clean, +/area/sulaco/hangar) "dsw" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -11135,6 +10928,15 @@ /obj/machinery/atmospherics/pipe/simple/yellow/hidden, /turf/open/floor/prison/plate, /area/shuttle/distress/arrive_1) +"dsS" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 5 + }, +/turf/open/floor/prison/whitegreen/corner, +/area/sulaco/medbay/west) "dtf" = ( /obj/structure/disposalpipe/segment/corner, /turf/open/floor/prison, @@ -11156,6 +10958,11 @@ }, /turf/open/floor/plating, /area/sulaco/hangar) +"duH" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/prison/whitegreen/corner, +/area/sulaco/medbay/west) "duZ" = ( /obj/structure/bed/chair/sofa/left{ dir = 1 @@ -11280,6 +11087,10 @@ /obj/effect/ai_node, /turf/open/floor/plating, /area/sulaco/maintenance/upperdeck_AIcore_maint) +"dHf" = ( +/obj/machinery/camera/autoname, +/turf/open/floor/prison/bright_clean, +/area/sulaco/hangar) "dIn" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ dir = 4 @@ -11458,14 +11269,6 @@ /obj/machinery/disposal, /turf/open/floor/wood, /area/sulaco/cap_office) -"dRt" = ( -/obj/structure/sink{ - dir = 1 - }, -/turf/open/floor/prison/whitegreen/corner{ - dir = 4 - }, -/area/sulaco/medbay) "dRH" = ( /obj/machinery/air_alarm, /obj/machinery/light/mainship{ @@ -11581,6 +11384,17 @@ }, /turf/open/floor/prison/plate, /area/shuttle/distress/arrive_2) +"ebs" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/light/mainship/small, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) +"ecj" = ( +/obj/machinery/vending/weapon, +/turf/open/floor/prison/bright_clean, +/area/sulaco/hangar) "eck" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ @@ -11651,6 +11465,11 @@ }, /turf/open/floor/prison, /area/sulaco/marine) +"egL" = ( +/turf/open/floor/prison/whitegreen/corner{ + dir = 8 + }, +/area/sulaco/medbay/chemistry) "egQ" = ( /obj/machinery/camera/autoname, /turf/open/floor/mainship/ai, @@ -11711,6 +11530,14 @@ /obj/item/tool/kitchen/tray, /turf/open/floor/prison/sterilewhite, /area/sulaco/cafeteria/kitchen) +"eld" = ( +/obj/machinery/cryopod/right{ + dir = 4 + }, +/turf/open/floor/prison/whitegreen/corner{ + dir = 1 + }, +/area/sulaco/medbay/west) "elE" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -11721,6 +11548,13 @@ }, /turf/open/floor/prison/bright_clean, /area/sulaco/hangar) +"ema" = ( +/obj/machinery/door_control/mainship/mech{ + dir = 1; + id = "mech_shutters_3" + }, +/turf/open/floor/prison/bright_clean, +/area/sulaco/hangar) "emj" = ( /obj/structure/target_stake, /obj/item/target, @@ -11920,6 +11754,9 @@ }, /turf/open/floor/prison, /area/sulaco/cargo) +"exf" = ( +/turf/open/floor/plating, +/area/sulaco/hangar/storage) "eyu" = ( /obj/machinery/door/airlock/mainship/generic{ dir = 2 @@ -11950,14 +11787,6 @@ /obj/structure/cable, /turf/open/floor/plating/plating_catwalk/prison, /area/sulaco/hallway/evac) -"eAl" = ( -/obj/machinery/door_control/unmeltable{ - id = "sd_blastdoor"; - name = "Self Destruct Blast Door Control"; - pixel_y = 27 - }, -/turf/open/floor/plating, -/area/mainship/command/self_destruct) "eAL" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, /turf/open/floor/prison, @@ -12005,9 +11834,6 @@ dir = 1 }, /area/sulaco/medbay/west) -"eDG" = ( -/turf/closed/wall/mainship/gray/outer, -/area/sulaco/hallway/lower_main_hall) "eDH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ @@ -12315,6 +12141,21 @@ }, /turf/open/floor/mainship/tcomms, /area/mainship/command/self_destruct) +"eUP" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/yellow/hidden{ + dir = 1 + }, +/turf/open/floor/prison, +/area/sulaco/marine) "eVy" = ( /obj/machinery/door/airlock/mainship/engineering/CSEoffice{ dir = 2 @@ -12340,11 +12181,6 @@ }, /turf/open/floor/prison/bright_clean, /area/sulaco/hangar) -"eVU" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden, -/turf/open/floor/prison, -/area/sulaco/hangar/storage) "eWf" = ( /obj/machinery/light/mainship{ dir = 1 @@ -12380,6 +12216,19 @@ /obj/item/assembly/signaler, /turf/open/floor/prison, /area/sulaco/hangar/storage) +"eYn" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden/layer1{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/ai_node, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/turf/open/floor/prison, +/area/sulaco/marine) "eZL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ @@ -12423,6 +12272,17 @@ }, /turf/open/floor/prison, /area/sulaco/hallway/evac) +"fcn" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/light/mainship{ + dir = 1 + }, +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/landinglight/tadpole{ + pixel_y = 4 + }, +/turf/open/floor/prison/bright_clean, +/area/sulaco/hangar) "fdz" = ( /obj/machinery/atmospherics/pipe/manifold/cyan/hidden/layer1, /obj/machinery/atmospherics/pipe/manifold/yellow/hidden, @@ -12437,6 +12297,17 @@ "fdF" = ( /turf/closed/wall/mainship/gray, /area/sulaco/cryosleep) +"fel" = ( +/obj/machinery/camera/autoname{ + dir = 1 + }, +/obj/structure/sink{ + dir = 1 + }, +/turf/open/floor/prison/whitegreen/corner{ + dir = 1 + }, +/area/sulaco/medbay) "feO" = ( /obj/effect/turf_decal/siding{ dir = 5 @@ -12461,13 +12332,6 @@ /obj/item/reagent_containers/food/snacks/grown/poppy, /turf/open/floor/grass, /area/mainship/living/starboard_garden) -"fix" = ( -/obj/machinery/iv_drip, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer1{ - dir = 4 - }, -/turf/open/floor/prison/whitegreen/corner, -/area/sulaco/medbay/west) "fjj" = ( /obj/item/reagent_containers/food/drinks/flask/barflask{ pixel_x = 6 @@ -12476,14 +12340,16 @@ /obj/effect/spawner/random/misc/folder/nooffset, /turf/open/floor/wood, /area/sulaco/liaison) +"fjy" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) "fjF" = ( /obj/machinery/vending/medical/shipside, /turf/open/floor/prison/whitegreen/corner, /area/sulaco/medbay/west) -"fkB" = ( -/obj/machinery/light/mainship, -/turf/open/floor/mainship/black, -/area/sulaco/mechpilotquarters) "fkY" = ( /turf/open/floor/prison/whitegreen{ dir = 4 @@ -12530,6 +12396,12 @@ /obj/effect/spawner/random/misc/structure/flavorvending/coffeeweighted, /turf/open/floor/prison/whitegreen/corner, /area/sulaco/medbay) +"fna" = ( +/obj/machinery/door/airlock/mainship/maint, +/obj/machinery/door/firedoor/mainship, +/obj/structure/cable, +/turf/open/floor/plating, +/area/sulaco/cafeteria/kitchen) "fng" = ( /obj/machinery/light/mainship/small, /obj/effect/decal/cleanable/dirt, @@ -12690,6 +12562,12 @@ /obj/structure/window/framed/mainship/white, /turf/open/floor/plating/platebotc, /area/sulaco/medbay) +"fxB" = ( +/obj/structure/ship_rail_gun, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/mainship/shipboard/weapon_room) "fxX" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/yellow/hidden, @@ -12742,6 +12620,14 @@ /obj/effect/ai_node, /turf/open/floor/prison, /area/sulaco/hallway/lower_foreship) +"fAk" = ( +/obj/machinery/door/poddoor/mainship/mech{ + dir = 1; + id = "mech_shutters_3" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/mainship_hull/gray, +/area/sulaco/hangar/storage) "fBA" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/manifold/cyan/hidden/layer1, @@ -12751,6 +12637,11 @@ }, /turf/open/floor/plating/plating_catwalk/prison, /area/sulaco/hallway/evac) +"fBF" = ( +/turf/open/floor/prison/whitegreen/corner{ + dir = 8 + }, +/area/sulaco/medbay/west) "fCm" = ( /turf/open/floor/plating/plating_catwalk/prison, /area/sulaco/cargo) @@ -12856,6 +12747,19 @@ }, /turf/closed/wall/mainship/gray, /area/sulaco/maintenance/lower_maint2) +"fGe" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 10 + }, +/turf/open/floor/prison/whitegreen/corner{ + dir = 8 + }, +/area/sulaco/medbay/west) "fGp" = ( /obj/machinery/door/window{ dir = 2; @@ -12882,6 +12786,14 @@ }, /turf/open/floor/prison, /area/sulaco/marine) +"fKu" = ( +/obj/machinery/chem_dispenser/beer, +/obj/machinery/firealarm{ + dir = 4 + }, +/obj/structure/table/mainship/nometal, +/turf/open/floor/wood, +/area/sulaco/medbay/west) "fKw" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 10 @@ -12948,6 +12860,16 @@ /obj/machinery/atmospherics/pipe/simple/yellow/hidden, /turf/open/floor/tile/dark2, /area/mainship/living/basketball) +"fSQ" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/obj/machinery/vending/armor_supply, +/turf/open/floor/prison, +/area/sulaco/marine) "fUZ" = ( /obj/machinery/power/monitor, /obj/structure/cable, @@ -12983,15 +12905,6 @@ /obj/machinery/status_display/ai, /turf/closed/wall/mainship/gray, /area/sulaco/cafeteria) -"fXe" = ( -/obj/machinery/light/mainship, -/obj/structure/disposalpipe/segment/corner{ - dir = 1 - }, -/turf/open/floor/prison/whitegreen/corner{ - dir = 8 - }, -/area/sulaco/medbay/west) "fXi" = ( /obj/effect/ai_node, /turf/open/floor/plating, @@ -13066,12 +12979,21 @@ }, /turf/open/floor/prison, /area/mainship/shipboard/weapon_room) +"gcZ" = ( +/obj/structure/ship_ammo/cas/heavygun, +/turf/open/floor/plating, +/area/sulaco/hangar/cas) "gdq" = ( /obj/machinery/camera/autoname{ dir = 4 }, /turf/open/floor/prison, /area/sulaco/maintenance/upperdeck_AIcore_maint) +"gdt" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/obj/machinery/vending/engivend, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) "gdR" = ( /obj/machinery/light/mainship{ dir = 4 @@ -13325,10 +13247,6 @@ "gsz" = ( /turf/open/floor/mainship/terragov, /area/space) -"gsY" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/snackweighted, -/turf/open/floor/prison/whitegreen/corner, -/area/sulaco/medbay/west) "gtk" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/camera/autoname{ @@ -13368,17 +13286,6 @@ /obj/structure/window/framed/mainship/gray/toughened/hull, /turf/open/floor/plating/platebotc, /area/sulaco/marine/chapel) -"gwt" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden/layer1, -/turf/open/floor/plating/plating_catwalk/prison, -/area/sulaco/hangar/storage) "gwK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, @@ -13493,6 +13400,15 @@ dir = 4 }, /area/sulaco/medbay) +"gGK" = ( +/obj/machinery/bot/cleanbot, +/obj/structure/sink{ + dir = 4 + }, +/turf/open/floor/prison/whitegreen/corner{ + dir = 8 + }, +/area/sulaco/medbay/west) "gHU" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/prison/bright_clean, @@ -13513,6 +13429,10 @@ dir = 10 }, /area/sulaco/briefing) +"gJd" = ( +/obj/effect/ai_node, +/turf/open/floor/plating, +/area/mainship/command/self_destruct) "gJn" = ( /obj/effect/decal/cleanable/cobweb{ dir = 1 @@ -13601,15 +13521,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/prison, /area/sulaco/cargo) -"gQJ" = ( -/obj/machinery/light/mainship{ - dir = 8 - }, -/obj/machinery/camera/autoname{ - dir = 4 - }, -/turf/open/floor/prison, -/area/sulaco/marine) "gQS" = ( /obj/machinery/light/mainship, /turf/open/floor/prison/bright_clean, @@ -13719,6 +13630,15 @@ }, /turf/open/floor/plating, /area/sulaco/maintenance/upperdeck_AIcore_maint) +"gWz" = ( +/obj/structure/table/mainship/nometal, +/obj/effect/spawner/random/engineering/tech_supply, +/obj/effect/spawner/random/engineering/tech_supply, +/obj/effect/spawner/random/engineering/tech_supply, +/obj/effect/spawner/random/engineering/tech_supply, +/obj/item/clothing/gloves/insulated, +/turf/open/floor/prison, +/area/sulaco/bridge/office) "gWF" = ( /obj/machinery/vending/weapon, /turf/open/floor/prison, @@ -13788,25 +13708,10 @@ }, /turf/open/floor/prison/bright_clean, /area/mainship/command/self_destruct) -"haJ" = ( -/obj/structure/closet/crate/hydroponics, -/obj/machinery/camera/autoname{ - dir = 8 - }, -/obj/item/clothing/gloves/botanic_leather, -/obj/item/clothing/gloves/botanic_leather, -/obj/item/clothing/under/rank/hydroponics, -/obj/item/clothing/under/rank/hydroponics, -/obj/item/tool/minihoe, -/obj/item/tool/minihoe, -/obj/item/tool/hatchet, -/obj/item/tool/hatchet, -/obj/item/clothing/suit/apron/overalls, -/obj/item/clothing/suit/apron/overalls, -/obj/item/storage/bag/plants, -/obj/item/storage/bag/plants, -/turf/open/floor/prison/bright_clean, -/area/sulaco/hydro) +"haw" = ( +/obj/machinery/keycard_auth, +/turf/closed/wall/mainship/gray/outer, +/area/sulaco/hangar) "hbf" = ( /obj/machinery/light/mainship{ dir = 8 @@ -14025,20 +13930,31 @@ dir = 4 }, /obj/structure/table/reinforced, -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 50; pixel_x = 3; pixel_y = 3 }, +/obj/item/clothing/gloves/insulated, /turf/open/floor/prison/darkyellow{ dir = 8 }, /area/sulaco/engineering/engine_monitoring) +"hoc" = ( +/obj/structure/sign/chemistry, +/turf/closed/wall/mainship/white, +/area/sulaco/medbay/chemistry) "hoi" = ( /obj/structure/closet/crate/ammo, /obj/effect/decal/cleanable/dirt, /turf/open/floor/prison, /area/sulaco/cargo) +"hoy" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, +/turf/open/floor/plating, +/area/sulaco/hangar/storage) "hoF" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/prison/whitegreen{ @@ -14163,19 +14079,6 @@ /obj/structure/disposalpipe/segment, /turf/closed/wall/mainship/outer, /area/space) -"hxn" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/machinery/light/mainship{ - dir = 4 - }, -/obj/machinery/landinglight/tadpole{ - dir = 8; - pixel_x = 4 - }, -/turf/open/floor/prison/bright_clean, -/area/sulaco/hangar) "hxN" = ( /obj/structure/dropship_equipment/electronics/spotlights, /turf/open/floor/prison, @@ -14333,7 +14236,7 @@ /obj/machinery/air_alarm{ dir = 4 }, -/obj/structure/bed/chair/wheelchair{ +/obj/vehicle/ridden/wheelchair{ dir = 4 }, /turf/open/floor/prison/whitegreen/corner{ @@ -14440,6 +14343,14 @@ /obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk/prison, /area/sulaco/hallway/lower_foreship) +"hMG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ + dir = 10 + }, +/obj/effect/turf_decal/warning_stripes/thick/corner, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) "hNu" = ( /obj/machinery/door/poddoor/railing{ dir = 1; @@ -14483,32 +14394,35 @@ /obj/structure/window/framed/mainship/gray/toughened, /turf/open/floor/plating/platebotc, /area/sulaco/hangar/cas) +"hQp" = ( +/obj/machinery/vending/armor_supply, +/turf/open/floor/prison/bright_clean, +/area/sulaco/hangar) "hQr" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ dir = 5 }, /turf/open/floor/mainship/ai, /area/sulaco/command/ai) -"hQQ" = ( -/obj/structure/bed, -/obj/item/bedsheet/medical, -/turf/open/floor/prison/whitegreen/corner{ +"hSC" = ( +/obj/structure/closet/crate/hydroponics, +/obj/machinery/camera/autoname{ dir = 8 }, -/area/sulaco/medbay/west) -"hSa" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk/prison, -/area/sulaco/hangar/storage) +/obj/item/clothing/gloves/botanic_leather, +/obj/item/clothing/gloves/botanic_leather, +/obj/item/clothing/under/rank/hydroponics, +/obj/item/clothing/under/rank/hydroponics, +/obj/item/tool/minihoe, +/obj/item/tool/minihoe, +/obj/item/tool/hatchet, +/obj/item/tool/hatchet, +/obj/item/clothing/suit/storage/apron/overalls, +/obj/item/clothing/suit/storage/apron/overalls, +/obj/item/storage/bag/plants, +/obj/item/storage/bag/plants, +/turf/open/floor/prison/bright_clean, +/area/sulaco/hydro) "hTi" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/ai_node, @@ -14543,6 +14457,10 @@ }, /turf/open/floor/plating/plating_catwalk/prison, /area/sulaco/cargo) +"hTO" = ( +/obj/machinery/vending/MarineMed, +/turf/open/floor/prison, +/area/sulaco/hallway/lower_main_hall) "hUb" = ( /obj/structure/rack, /obj/item/conveyor_switch_construct, @@ -14557,7 +14475,7 @@ /obj/machinery/light/mainship/small{ dir = 1 }, -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 50; pixel_x = 3; pixel_y = 3 @@ -14598,6 +14516,11 @@ /obj/structure/closet/firecloset, /turf/open/floor/prison, /area/sulaco/hallway/lower_foreship) +"hYd" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) "hYo" = ( /obj/machinery/light/mainship{ dir = 8 @@ -14663,6 +14586,11 @@ dir = 5 }, /area/sulaco/research) +"iaR" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/obj/machinery/vending/tool, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) "iaY" = ( /obj/structure/closet/crate/internals, /turf/open/floor/prison, @@ -14697,12 +14625,6 @@ /obj/machinery/vending/nanomed, /turf/open/floor/prison/whitegreen/corner, /area/sulaco/medbay) -"idU" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/icefloor/warnplate{ - dir = 6 - }, -/area/sulaco/hangar/storage) "iev" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ @@ -14763,6 +14685,26 @@ dir = 8 }, /area/sulaco/briefing) +"iix" = ( +/obj/machinery/camera/autoname{ + dir = 4 + }, +/obj/machinery/light/mainship{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/machinery/reagentgrinder, +/turf/open/floor/prison/sterilewhite, +/area/sulaco/cafeteria/kitchen) +"ikx" = ( +/obj/machinery/computer/mech_builder{ + dir = 2 + }, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 9 + }, +/turf/open/floor/plating, +/area/sulaco/hangar/storage) "ikJ" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -15017,6 +14959,13 @@ /obj/machinery/light/mainship/small, /turf/open/floor/plating, /area/sulaco/maintenance/lower_maint) +"ixK" = ( +/obj/effect/decal/cleanable/blood/gibs/robot, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 10 + }, +/turf/open/floor/plating, +/area/sulaco/hangar/storage) "ixV" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 @@ -15112,6 +15061,13 @@ dir = 4 }, /area/sulaco/engineering) +"iFZ" = ( +/obj/machinery/light/mainship{ + dir = 1 + }, +/obj/machinery/vending/uniform_supply, +/turf/open/floor/prison/bright_clean, +/area/sulaco/hangar) "iGf" = ( /obj/structure/table/mainship/nometal, /obj/effect/spawner/random/misc/paperbin{ @@ -15124,6 +15080,15 @@ }, /turf/open/floor/prison, /area/sulaco/cargo/office) +"iGj" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer1{ + dir = 4 + }, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) "iGB" = ( /obj/structure/table/mainship/nometal, /turf/open/floor/prison/red/full{ @@ -15210,19 +15175,6 @@ dir = 4 }, /area/sulaco/marine) -"iJs" = ( -/obj/machinery/light/mainship{ - dir = 8 - }, -/obj/machinery/chem_master, -/obj/item/reagent_containers/glass/beaker/bluespace, -/obj/machinery/camera/autoname{ - dir = 4 - }, -/turf/open/floor/prison/whitegreen/corner{ - dir = 8 - }, -/area/sulaco/medbay/chemistry) "iJy" = ( /obj/item/radio/intercom/general{ dir = 8 @@ -15230,12 +15182,6 @@ /obj/effect/spawner/random/engineering/structure/tank/fuelweighted, /turf/open/floor/prison, /area/sulaco/engineering/storage) -"iJB" = ( -/obj/machinery/air_alarm, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/prison/whitegreen/corner, -/area/sulaco/medbay/west) "iJX" = ( /obj/machinery/light/mainship{ dir = 4 @@ -15313,10 +15259,19 @@ /obj/machinery/light/mainship, /turf/open/floor/wood, /area/sulaco/cap_office) +"iNr" = ( +/obj/structure/dropship_equipment/cas/weapon/bomblet_pod, +/turf/open/floor/plating, +/area/sulaco/hangar/cas) "iNC" = ( /obj/structure/ship_ammo/cas/rocket/widowmaker, /turf/open/floor/prison, /area/sulaco/hangar/cas) +"iNQ" = ( +/turf/open/floor/prison/whitegreen/corner{ + dir = 4 + }, +/area/sulaco/medbay/west) "iNW" = ( /obj/effect/landmark/start/job/squadmarine, /turf/open/floor/prison/sterilewhite, @@ -15351,9 +15306,26 @@ }, /turf/open/floor/wood, /area/mainship/living/basketball) +"iQM" = ( +/obj/machinery/light/mainship{ + dir = 1 + }, +/turf/open/floor/prison/whitegreen/corner{ + dir = 8 + }, +/area/sulaco/medbay/west) "iRd" = ( /turf/closed/wall/mainship/gray, /area/sulaco/hydro) +"iRq" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/turf/open/floor/prison/bright_clean, +/area/sulaco/hangar) "iSb" = ( /turf/closed/wall/mainship/gray, /area/sulaco/engineering) @@ -15386,11 +15358,6 @@ }, /turf/open/floor/prison/sterilewhite, /area/sulaco/cryosleep) -"iTg" = ( -/obj/machinery/vending/MarineMed, -/obj/machinery/light/mainship, -/turf/open/floor/prison, -/area/sulaco/marine) "iTj" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ dir = 4 @@ -15439,6 +15406,11 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/prison, /area/sulaco/engineering/engine_monitoring) +"iVJ" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/obj/structure/closet/secure_closet/engineering_personal, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) "iVT" = ( /obj/structure/window/framed/mainship/gray/toughened, /obj/machinery/door/poddoor/shutters/opened{ @@ -15523,6 +15495,14 @@ dir = 5 }, /area/mainship/living/basketball) +"jad" = ( +/obj/structure/disposalpipe/segment/corner{ + dir = 1 + }, +/turf/open/floor/prison/whitegreen/corner{ + dir = 8 + }, +/area/sulaco/medbay/west) "jaQ" = ( /obj/machinery/light/mainship/small{ dir = 1 @@ -15552,16 +15532,6 @@ }, /turf/open/floor/prison/bright_clean, /area/sulaco/hangar) -"jbY" = ( -/obj/structure/window/reinforced, -/turf/open/floor/prison/green/full, -/area/sulaco/marine) -"jcv" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/icefloor/warnplate{ - dir = 8 - }, -/area/sulaco/hangar/storage) "jdD" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -15691,6 +15661,13 @@ /obj/structure/cable, /turf/open/floor/prison/bright_clean, /area/sulaco/hangar) +"jiY" = ( +/obj/machinery/door/firedoor/mainship, +/obj/machinery/door/poddoor/mainship/mech{ + id = "mech_shutters_3" + }, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) "jlB" = ( /obj/machinery/door/firedoor/mainship{ dir = 2 @@ -15704,6 +15681,11 @@ }, /turf/open/floor/prison, /area/sulaco/marine/chapel) +"jmy" = ( +/obj/machinery/light/mainship, +/obj/structure/bed/bunkbed, +/turf/open/floor/mainship/black, +/area/sulaco/mechpilotquarters) "jnn" = ( /obj/structure/window/framed/mainship/gray/toughened, /obj/machinery/door/poddoor/telecomms, @@ -15776,6 +15758,16 @@ dir = 4 }, /area/sulaco/research) +"jta" = ( +/obj/structure/table/reinforced, +/obj/item/book/manual/chef_recipes, +/obj/effect/spawner/random/food_or_drink/kitchenknife/butcherweighted, +/obj/item/tool/kitchen/rollingpin, +/obj/item/clothing/head/chefhat, +/obj/item/clothing/suit/storage/chef/classic, +/obj/item/clothing/suit/storage/chef, +/turf/open/floor/prison/sterilewhite, +/area/sulaco/cafeteria/kitchen) "jtC" = ( /turf/open/floor/prison/bright_clean, /area/sulaco/hangar/cas) @@ -16155,15 +16147,6 @@ /obj/effect/ai_node, /turf/open/floor/prison/marked, /area/sulaco/marine) -"jQi" = ( -/obj/structure/curtain/open/shower, -/obj/machinery/shower{ - dir = 1 - }, -/turf/open/floor/prison/whitegreen/corner{ - dir = 8 - }, -/area/sulaco/medbay/west) "jQK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ @@ -16177,7 +16160,6 @@ /area/sulaco/maintenance/upperdeck_AIcore_maint) "jQS" = ( /obj/machinery/camera/autoname, -/obj/machinery/door_control/mainship/droppod, /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 }, @@ -16262,6 +16244,19 @@ /obj/structure/cable, /turf/open/floor/plating/plating_catwalk/prison, /area/sulaco/hallway/central_hall3) +"jVA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/prison/bright_clean, +/area/sulaco/hangar) "jVN" = ( /obj/machinery/light/mainship{ dir = 8 @@ -16351,10 +16346,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating/plating_catwalk/prison, /area/sulaco/hallway/central_hall) -"jZZ" = ( -/obj/machinery/marine_selector/clothes/smartgun, -/turf/open/floor/prison, -/area/sulaco/marine) "kau" = ( /obj/effect/decal/cleanable/cobweb{ dir = 4 @@ -16399,6 +16390,7 @@ /area/space) "kcP" = ( /obj/effect/decal/cleanable/cobweb, +/obj/machinery/vending/armor_supply, /turf/open/floor/prison/bright_clean, /area/sulaco/hangar) "kcV" = ( @@ -16413,6 +16405,10 @@ dir = 4 }, /area/sulaco/marine/chapel) +"kcY" = ( +/obj/machinery/vending/MarineMed, +/turf/open/floor/prison/bright_clean, +/area/sulaco/hangar) "kee" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 10 @@ -16435,6 +16431,10 @@ /obj/item/clothing/head/warning_cone, /turf/open/floor/prison/bright_clean, /area/sulaco/hangar/cas) +"kgo" = ( +/obj/machinery/loadout_vendor, +/turf/open/floor/prison/bright_clean, +/area/sulaco/hangar) "khG" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -16442,6 +16442,13 @@ /obj/machinery/disposal, /turf/open/floor/prison, /area/sulaco/bar) +"khS" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 5 + }, +/obj/machinery/door_control/mainship/droppod, +/turf/open/floor/prison/bright_clean, +/area/sulaco/hangar) "kio" = ( /obj/structure/cable, /turf/open/floor/prison, @@ -16623,9 +16630,7 @@ /turf/open/floor/plating, /area/sulaco/maintenance/lower_maint3) "ktu" = ( -/obj/machinery/air_alarm{ - dir = 4 - }, +/obj/machinery/vending/marineFood, /turf/open/floor/prison, /area/sulaco/cargo) "ktX" = ( @@ -16736,6 +16741,10 @@ dir = 4 }, /area/sulaco/medbay/chemistry) +"kzO" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) "kzU" = ( /obj/machinery/camera/autoname, /obj/effect/decal/cleanable/dirt, @@ -16800,6 +16809,10 @@ /obj/machinery/atmospherics/pipe/simple/yellow/hidden, /turf/open/floor/prison/bright_clean, /area/sulaco/bridge) +"kJu" = ( +/obj/structure/ship_ammo/cas/bomblet, +/turf/open/floor/plating, +/area/sulaco/hangar/cas) "kKg" = ( /obj/structure/cable, /obj/effect/spawner/random/misc/structure/flavorvending/colaweighted, @@ -16849,15 +16862,6 @@ }, /turf/open/floor/prison/darkyellow, /area/sulaco/engineering/ce) -"kLi" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/open/floor/prison/whitegreen/corner{ - dir = 1 - }, -/area/sulaco/medbay/west) "kLk" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, @@ -16914,19 +16918,6 @@ /obj/machinery/vending/uniform_supply, /turf/open/floor/prison, /area/sulaco/marine) -"kNv" = ( -/obj/machinery/chem_dispenser/soda{ - dir = 4 - }, -/obj/machinery/camera/autoname{ - dir = 4 - }, -/obj/structure/table/mainship/nometal, -/obj/machinery/light/mainship{ - dir = 8 - }, -/turf/open/floor/wood, -/area/sulaco/medbay/west) "kNy" = ( /obj/machinery/marine_selector/clothes/commander, /turf/open/floor/wood, @@ -16957,6 +16948,19 @@ }, /turf/open/floor/prison, /area/sulaco/hallway/central_hall) +"kQE" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/obj/machinery/light/mainship{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ + dir = 8 + }, +/obj/machinery/vending/armor_supply, +/turf/open/floor/prison, +/area/sulaco/marine) "kRv" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 @@ -17139,6 +17143,18 @@ dir = 8 }, /area/sulaco/bridge) +"ldy" = ( +/obj/structure/rack, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/turf/open/floor/prison/red{ + dir = 4 + }, +/area/mainship/shipboard/weapon_room) "leD" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ dir = 4 @@ -17189,6 +17205,17 @@ "lgl" = ( /turf/closed/wall/mainship/gray, /area/shuttle/distress/arrive_2) +"lgz" = ( +/obj/structure/table/mainship/nometal, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/stack/sheet/mineral/phoron, +/obj/item/reagent_containers/dropper, +/obj/item/stack/sheet/mineral/phoron, +/obj/machinery/reagentgrinder, +/turf/open/floor/prison/whitegreen/corner{ + dir = 1 + }, +/area/sulaco/medbay/chemistry) "lgB" = ( /obj/effect/decal/cleanable/dirt, /obj/vehicle/unmanned/droid/ripley, @@ -17269,7 +17296,7 @@ /turf/open/floor/prison, /area/sulaco/hallway/lower_foreship) "lpg" = ( -/obj/machinery/vending/sovietsoda, +/obj/machinery/vending/cigarette, /turf/open/floor/prison/kitchen, /area/sulaco/cafeteria) "lpw" = ( @@ -17356,7 +17383,10 @@ id = "tcomwind"; name = "Telecomms Window Control" }, -/obj/item/toy/plush/rouny, +/obj/item/toy/plush/rouny{ + pixel_x = -1; + pixel_y = 9 + }, /turf/open/floor/prison, /area/sulaco/telecomms/office) "lvm" = ( @@ -17489,6 +17519,13 @@ /obj/item/reagent_containers/food/snacks/protein_pack, /turf/open/floor/prison/kitchen, /area/sulaco/cafeteria) +"lBh" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/obj/structure/computer3frame, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) "lBU" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 @@ -17525,20 +17562,6 @@ /obj/vehicle/ridden/powerloader, /turf/open/floor/prison/bright_clean, /area/sulaco/hangar/cas) -"lEa" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden/layer1{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/yellow/hidden{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/ai_node, -/turf/open/floor/plating/plating_catwalk/prison, -/area/sulaco/hangar/storage) "lEm" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ @@ -17572,19 +17595,24 @@ /obj/structure/cable, /turf/open/floor/prison/plate, /area/shuttle/distress/arrive_1) +"lEL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/prison/whitegreen/corner, +/area/sulaco/medbay/west) +"lFQ" = ( +/obj/machinery/air_alarm{ + dir = 1 + }, +/turf/open/floor/prison, +/area/sulaco/cargo) "lGM" = ( /obj/effect/ai_node, /turf/open/floor/plating/warning{ dir = 1 }, /area/sulaco/command/eva) -"lGX" = ( -/obj/machinery/marine_selector/clothes, -/obj/machinery/camera/autoname{ - dir = 1 - }, -/turf/open/floor/prison, -/area/sulaco/marine) "lHY" = ( /obj/structure/bed/chair/nometal, /turf/open/floor/prison/darkpurple{ @@ -17686,6 +17714,11 @@ "lNU" = ( /turf/open/shuttle/escapepod/five, /area/mainship/command/self_destruct) +"lOC" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) "lPb" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ dir = 6 @@ -17705,6 +17738,21 @@ }, /turf/closed/wall/mainship/white/outer, /area/sulaco/medbay/surgery_one) +"lQv" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/turf/open/floor/plating, +/area/sulaco/hangar/storage) +"lQA" = ( +/obj/structure/disposalpipe/segment/corner{ + dir = 1 + }, +/turf/open/floor/prison/whitegreen/corner{ + dir = 1 + }, +/area/sulaco/medbay/west) +"lRu" = ( +/turf/open/floor/prison/bright_clean, +/area/sulaco/hangar/storage) "lSf" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 @@ -17934,6 +17982,13 @@ dir = 4 }, /area/mainship/living/basketball) +"mfA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/turf/open/floor/plating, +/area/sulaco/hangar/storage) "mgi" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/prison/whitegreen/corner, @@ -17978,16 +18033,6 @@ }, /turf/open/floor/mainship/tcomms, /area/mainship/command/self_destruct) -"mkj" = ( -/obj/machinery/power/fusion_engine{ - name = "\improper S-52 fusion reactor #4" - }, -/obj/structure/cable, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/turf/open/floor/plating/mainship, -/area/sulaco/engineering/engine) "mkk" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, @@ -18224,6 +18269,9 @@ dir = 8 }, /area/sulaco/medbay/surgery_one) +"mzT" = ( +/turf/closed/wall/mainship/white/outer, +/area/space) "mAk" = ( /obj/machinery/marine_selector/clothes, /turf/open/floor/prison, @@ -18587,6 +18635,12 @@ "mYf" = ( /turf/open/floor/prison/red, /area/sulaco/hallway/central_hall3) +"mYh" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 10 + }, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) "mYA" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -18641,6 +18695,10 @@ /obj/effect/ai_node, /turf/open/floor/plating, /area/sulaco/maintenance/upperdeck_north_maint) +"nav" = ( +/obj/machinery/vending/uniform_supply, +/turf/open/floor/prison/bright_clean, +/area/sulaco/hangar) "naW" = ( /obj/structure/table/woodentable, /obj/item/storage/bible{ @@ -18713,18 +18771,6 @@ /obj/effect/spawner/random/misc/structure/supplycrate, /turf/open/floor/prison/bright_clean, /area/sulaco/hangar) -"ngp" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/obj/machinery/light/mainship{ - dir = 1 - }, -/obj/effect/turf_decal/warning_stripes/thin, -/obj/machinery/camera/autoname, -/obj/machinery/landinglight/tadpole{ - pixel_y = 4 - }, -/turf/open/floor/prison/bright_clean, -/area/sulaco/hangar) "ngU" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -18844,6 +18890,11 @@ }, /turf/open/floor/prison/sterilewhite, /area/sulaco/cryosleep) +"nsM" = ( +/turf/open/floor/prison/red{ + dir = 10 + }, +/area/mainship/shipboard/weapon_room) "nta" = ( /obj/machinery/door_control/mainship/corporate{ dir = 8; @@ -18910,13 +18961,6 @@ /obj/effect/ai_node, /turf/open/floor/prison/red, /area/sulaco/hallway/central_hall3) -"nyr" = ( -/obj/machinery/keycard_auth, -/obj/machinery/door/poddoor/shutters/mainship/selfdestruct{ - dir = 8 - }, -/turf/closed/wall/mainship/gray, -/area/mainship/command/self_destruct) "nzf" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -18944,6 +18988,17 @@ }, /turf/open/floor/prison, /area/sulaco/cargo) +"nzD" = ( +/obj/structure/table/mainship/nometal, +/obj/machinery/reagentgrinder, +/obj/item/stack/sheet/mineral/phoron, +/obj/item/reagent_containers/dropper, +/obj/item/stack/sheet/mineral/phoron, +/obj/item/reagent_containers/glass/beaker/large, +/turf/open/floor/prison/whitegreen/corner{ + dir = 1 + }, +/area/sulaco/medbay/chemistry) "nzT" = ( /obj/machinery/holopad, /turf/open/floor/prison, @@ -18972,16 +19027,6 @@ /obj/machinery/robotic_cradle, /turf/open/floor/prison/whitegreen/corner, /area/sulaco/medbay) -"nCb" = ( -/obj/machinery/power/fusion_engine{ - name = "\improper S-52 fusion reactor #10" - }, -/obj/structure/cable, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/turf/open/floor/plating/mainship, -/area/sulaco/engineering/engine) "nCl" = ( /obj/effect/turf_decal/warning_stripes/thin, /obj/structure/ship_ammo/cas/rocket/keeper, @@ -19387,10 +19432,6 @@ "obf" = ( /turf/open/floor/freezer, /area/sulaco/cafeteria/kitchen) -"obm" = ( -/obj/machinery/keycard_auth, -/turf/closed/wall/mainship/gray/outer, -/area/mainship/command/self_destruct) "obs" = ( /obj/structure/shuttle/engine/heater{ dir = 4 @@ -19409,6 +19450,16 @@ dir = 10 }, /area/mainship/living/basketball) +"ocS" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/obj/machinery/quick_vendor/beginner, +/turf/open/floor/prison, +/area/sulaco/marine) "odW" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ @@ -19480,6 +19531,12 @@ /obj/effect/spawner/random/misc/gnome/fiftyfifty, /turf/open/floor/plating, /area/sulaco/maintenance/upperdeck_north_maint) +"ojX" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) "okh" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/mainship{ @@ -19501,16 +19558,6 @@ /obj/effect/ai_node, /turf/open/floor/prison, /area/sulaco/maintenance/upperdeck_AIcore_maint) -"okJ" = ( -/obj/machinery/power/fusion_engine{ - name = "\improper S-52 fusion reactor #11" - }, -/obj/structure/cable, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/turf/open/floor/plating/mainship, -/area/sulaco/engineering/engine) "okM" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/manifold/cyan/hidden/layer1{ @@ -19565,6 +19612,13 @@ }, /turf/open/floor/plating, /area/sulaco/maintenance/upperdeck_AIcore_maint) +"opr" = ( +/obj/machinery/door/airlock/mainship/medical/glass/chemistry, +/obj/machinery/door/firedoor/mainship, +/turf/open/floor/prison/whitegreen/corner{ + dir = 1 + }, +/area/sulaco/medbay/chemistry) "oqu" = ( /obj/effect/soundplayer, /turf/closed/wall/mainship/gray, @@ -19598,19 +19652,6 @@ /obj/structure/prop/mainship/name_stencil/C, /turf/open/floor/mainship_hull/gray, /area/space) -"oso" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/stack/sheet/mineral/phoron, -/obj/item/reagent_containers/dropper, -/obj/item/stack/sheet/mineral/phoron, -/obj/item/stack/sheet/mineral/phoron, -/obj/item/stack/sheet/mineral/phoron, -/turf/open/floor/prison/whitegreen/corner{ - dir = 1 - }, -/area/sulaco/medbay/chemistry) "osr" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -19634,6 +19675,15 @@ }, /turf/open/floor/prison, /area/sulaco/firingrange) +"ota" = ( +/obj/machinery/light/mainship{ + dir = 4 + }, +/obj/machinery/cryopod/right{ + dir = 4 + }, +/turf/open/floor/prison/whitegreen/corner, +/area/sulaco/medbay/west) "otp" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -19670,6 +19720,13 @@ /obj/structure/prop/mainship/mapping_computer, /turf/open/floor/mainship/tcomms, /area/mainship/command/self_destruct) +"ovo" = ( +/obj/machinery/door/poddoor/mainship/mech{ + id = "mech_shutters_3" + }, +/obj/machinery/door/firedoor/mainship, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) "ovJ" = ( /obj/machinery/holopad{ active_power_usage = 130; @@ -19985,6 +20042,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer1{ dir = 1 }, +/obj/effect/landmark/start/job/transportofficer, /turf/open/floor/prison, /area/mainship/living/pilotbunks) "oNb" = ( @@ -19998,6 +20056,19 @@ dir = 1 }, /area/sulaco/medbay) +"oNf" = ( +/obj/structure/cable, +/obj/machinery/power/apc/mainship{ + dir = 8 + }, +/obj/machinery/camera/autoname{ + dir = 8 + }, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) "oNr" = ( /obj/machinery/camera/autoname{ dir = 1 @@ -20082,16 +20153,6 @@ }, /turf/open/floor/prison, /area/sulaco/hallway/lower_foreship) -"oSV" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/vending/weapon, -/turf/open/floor/prison, -/area/sulaco/marine) "oTn" = ( /obj/structure/bed/chair/nometal, /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ @@ -20119,13 +20180,6 @@ }, /turf/open/floor/prison/red, /area/sulaco/cargo/prep) -"oWg" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb{ - dir = 4 - }, -/turf/closed/wall/mainship/gray, -/area/sulaco/maintenance/lower_maint) "oWi" = ( /obj/structure/disposalpipe/segment/corner, /turf/open/floor/prison/sterilewhite, @@ -20276,12 +20330,6 @@ dir = 1 }, /area/sulaco/marine) -"phb" = ( -/obj/machinery/door/airlock/mainship/maint, -/obj/machinery/door/firedoor/mainship, -/obj/structure/cable, -/turf/open/floor/plating, -/area/sulaco/maintenance/lower_maint3) "php" = ( /obj/machinery/door/window{ dir = 1; @@ -20511,6 +20559,7 @@ }, /obj/structure/rack, /obj/item/uav_turret/droid, +/obj/item/uav_turret/droid, /turf/open/floor/prison/bright_clean, /area/sulaco/hangar) "pum" = ( @@ -20678,11 +20727,20 @@ }, /turf/open/floor/mainship/ai, /area/sulaco/command/ai) -"pDu" = ( -/obj/structure/disposalpipe/junction/flipped{ +"pDT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ dir = 4 }, -/turf/open/floor/prison/whitegreen/corner, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/prison/whitegreen/corner{ + dir = 1 + }, /area/sulaco/medbay/west) "pEc" = ( /turf/closed/wall/mainship/gray/outer, @@ -20910,6 +20968,16 @@ dir = 10 }, /area/space) +"pUq" = ( +/obj/structure/cable, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 8 + }, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) +"pVy" = ( +/turf/open/floor/mainship/stripesquare, +/area/sulaco/hangar) "pVC" = ( /obj/item/radio/intercom/general{ dir = 1 @@ -20945,6 +21013,16 @@ /obj/effect/soundplayer, /turf/closed/wall/mainship/gray/outer, /area/sulaco/firingrange) +"pXn" = ( +/obj/structure/curtain/open/shower, +/obj/machinery/shower{ + pixel_y = 15 + }, +/obj/effect/spawner/random/misc/soap, +/turf/open/floor/prison/whitegreen/corner{ + dir = 4 + }, +/area/sulaco/medbay/west) "pXp" = ( /obj/effect/spawner/random/misc/structure/supplycrate, /turf/open/floor/prison, @@ -20962,9 +21040,6 @@ /obj/effect/spawner/random/engineering/structure/tank/waterweighted, /turf/open/floor/plating, /area/sulaco/maintenance/lower_maint3) -"pYe" = ( -/turf/open/floor/prison/sterilewhite, -/area/ice_colony/surface/engineering) "pYk" = ( /obj/machinery/light/mainship{ dir = 8 @@ -21112,6 +21187,12 @@ dir = 1 }, /area/sulaco/marine/chapel) +"qnI" = ( +/obj/structure/cable, +/turf/open/floor/prison/whitegreen/corner{ + dir = 8 + }, +/area/sulaco/medbay/west) "qnL" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 @@ -21129,7 +21210,7 @@ /area/sulaco/bridge) "qpD" = ( /obj/machinery/door_control/mainship/mech{ - id = "mech_shutters_2" + id = "mech_shutters_3" }, /turf/open/floor/prison, /area/sulaco/hangar/storage) @@ -21166,6 +21247,22 @@ }, /turf/open/floor/freezer, /area/sulaco/cap_office) +"qsy" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden/layer1{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/yellow/hidden{ + dir = 1 + }, +/turf/open/floor/plating/plating_catwalk/prison, +/area/sulaco/hangar/storage) "qtj" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -21362,6 +21459,13 @@ dir = 1 }, /area/sulaco/marine/chapel) +"qGU" = ( +/obj/machinery/light/mainship{ + dir = 1 + }, +/obj/machinery/loadout_vendor, +/turf/open/floor/prison/bright_clean, +/area/sulaco/hangar) "qHb" = ( /obj/structure/window/framed/mainship/gray/toughened/hull, /obj/effect/soundplayer, @@ -21436,6 +21540,12 @@ }, /turf/open/floor/plating, /area/sulaco/hangar/cas) +"qMk" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/prison, +/area/sulaco/marine) "qMu" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, @@ -21518,6 +21628,12 @@ }, /turf/open/floor/prison/sterilewhite, /area/sulaco/cryosleep) +"qPU" = ( +/obj/structure/closet/secure_closet/chemical, +/turf/open/floor/prison/whitegreen/corner{ + dir = 8 + }, +/area/sulaco/medbay/west) "qQi" = ( /obj/effect/spawner/random/engineering/tool, /turf/open/floor/prison, @@ -21656,16 +21772,6 @@ }, /turf/open/floor/cult, /area/sulaco/morgue) -"rcQ" = ( -/obj/machinery/door/airlock/mainship/maint{ - dir = 1 - }, -/obj/machinery/door/firedoor/mainship{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/sulaco/hangar/storage) "rcW" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 1 @@ -21730,7 +21836,6 @@ "rgO" = ( /obj/structure/bed/bunkbed, /obj/effect/landmark/start/job/mechpilot, -/obj/effect/landmark/start/job/mechpilot, /turf/open/floor/mainship/black{ dir = 6 }, @@ -21745,7 +21850,6 @@ /obj/structure/rack, /obj/structure/ob_ammo/warhead/plasmaloss, /obj/structure/ob_ammo/warhead/plasmaloss, -/obj/structure/ob_ammo/warhead/plasmaloss, /turf/open/floor/prison/red{ dir = 1 }, @@ -21892,19 +21996,6 @@ dir = 6 }, /area/sulaco/bridge) -"ron" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/prison, -/area/sulaco/hangar/storage) "roQ" = ( /turf/open/floor/prison/yellow{ dir = 4 @@ -21957,6 +22048,21 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/prison, /area/sulaco/engineering/lower_engineering) +"rrn" = ( +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/rack, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/turf/open/floor/prison/red{ + dir = 8 + }, +/area/mainship/shipboard/weapon_room) "rrR" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ dir = 9 @@ -21973,7 +22079,7 @@ /turf/open/floor/mainship/tcomms, /area/mainship/command/self_destruct) "rso" = ( -/obj/structure/bed/chair/wheelchair{ +/obj/vehicle/ridden/wheelchair{ dir = 4 }, /obj/machinery/vending/nanomed{ @@ -21998,13 +22104,6 @@ }, /turf/open/floor/prison/bright_clean, /area/sulaco/hangar) -"rtz" = ( -/obj/effect/decal/cleanable/blood/oil, -/obj/machinery/door_control/mainship/mech{ - id = "mech_shutters_1" - }, -/turf/open/floor/prison, -/area/sulaco/hangar/storage) "rtA" = ( /obj/structure/cable, /turf/open/floor/prison/red, @@ -22022,10 +22121,6 @@ /obj/structure/cable, /turf/open/floor/freezer, /area/sulaco/showers) -"rvr" = ( -/obj/machinery/light/mainship, -/turf/open/floor/prison, -/area/sulaco/marine) "rvC" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -22088,7 +22183,7 @@ /area/sulaco/hallway/lower_foreship) "ryR" = ( /obj/effect/decal/cleanable/dirt, -/obj/vehicle/unmanned/droid/scout, +/obj/vehicle/unmanned/droid, /turf/open/floor/prison/bright_clean, /area/sulaco/hangar) "rzi" = ( @@ -22126,6 +22221,13 @@ dir = 1 }, /area/mainship/shipboard/weapon_room) +"rCY" = ( +/obj/machinery/door/poddoor/mainship/mech{ + dir = 1; + id = "mech_shutters_3" + }, +/turf/open/floor/mainship_hull/gray, +/area/sulaco/hangar/storage) "rDx" = ( /obj/structure/closet/secure_closet/medical3, /obj/item/storage/surgical_tray, @@ -22216,13 +22318,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/prison, /area/sulaco/hallway/dropshipprep) -"rHR" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/turf/open/floor/prison/green/full, -/area/sulaco/marine) "rId" = ( /obj/machinery/suit_storage_unit, /turf/open/floor/prison/bright_clean, @@ -22241,16 +22336,6 @@ /obj/item/tool/stamp/denied, /turf/open/floor/prison, /area/sulaco/cargo/office) -"rIw" = ( -/obj/machinery/chem_dispenser/beer{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 4 - }, -/obj/structure/table/mainship/nometal, -/turf/open/floor/wood, -/area/sulaco/medbay/west) "rIx" = ( /obj/structure/bed/chair/nometal, /obj/structure/disposalpipe/segment, @@ -22264,7 +22349,6 @@ /obj/structure/rack, /obj/structure/ob_ammo/warhead/cluster, /obj/structure/ob_ammo/warhead/cluster, -/obj/structure/ob_ammo/warhead/cluster, /turf/open/floor/prison/red{ dir = 1 }, @@ -22375,6 +22459,13 @@ }, /turf/open/floor/prison, /area/sulaco/disposal) +"rQn" = ( +/obj/machinery/camera/autoname{ + dir = 4 + }, +/obj/machinery/vending/MarineMed, +/turf/open/floor/prison/bright_clean, +/area/sulaco/hangar) "rSe" = ( /obj/item/radio/intercom/general{ dir = 8 @@ -22499,6 +22590,9 @@ /obj/structure/disposalpipe/segment/corner, /turf/open/floor/prison, /area/sulaco/hallway/central_hall3) +"sbO" = ( +/turf/open/floor/prison/whitegreen/corner, +/area/sulaco/medbay/chemistry) "sbP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ @@ -22555,6 +22649,17 @@ }, /turf/open/floor/prison/bright_clean, /area/sulaco/hangar) +"sdk" = ( +/obj/structure/cable, +/obj/effect/ai_node, +/obj/machinery/light/mainship, +/obj/structure/disposalpipe/junction/flipped{ + dir = 4 + }, +/turf/open/floor/prison/whitegreen/corner{ + dir = 4 + }, +/area/sulaco/medbay/west) "sdn" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/manifold/cyan/hidden/layer1{ @@ -22619,7 +22724,6 @@ /obj/structure/rack, /obj/structure/ob_ammo/warhead/explosive, /obj/structure/ob_ammo/warhead/explosive, -/obj/structure/ob_ammo/warhead/explosive, /obj/machinery/light/mainship/small{ dir = 1 }, @@ -22780,7 +22884,12 @@ /obj/item/stack/sheet/mineral/phoron, /turf/open/floor/prison/whitegreen/full, /area/sulaco/research) +"sqa" = ( +/obj/effect/soundplayer, +/turf/closed/wall/mainship/gray, +/area/sulaco/hangar/droppod) "sqc" = ( +/obj/effect/landmark/start/job/mechpilot, /turf/open/floor/mainship/black/corner{ dir = 4 }, @@ -22807,6 +22916,17 @@ /obj/machinery/light/mainship, /turf/open/floor/prison, /area/sulaco/hallway/evac) +"ssg" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden/layer1, +/turf/open/floor/plating/plating_catwalk/prison, +/area/sulaco/hangar/storage) "ssZ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/disposal, @@ -22994,30 +23114,36 @@ /obj/structure/ship_ammo/cas/rocket/widowmaker, /turf/open/floor/prison, /area/sulaco/hangar/cas) +"sDv" = ( +/obj/machinery/door_control/mainship/mech{ + dir = 4; + id = "mech_shutters_3" + }, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) +"sDU" = ( +/obj/machinery/cryopod/right, +/turf/open/floor/prison/whitegreen/corner{ + dir = 1 + }, +/area/sulaco/medbay/west) "sEr" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/prison, /area/sulaco/firingrange) -"sFd" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/holopad, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/prison, -/area/sulaco/hangar/storage) "sFv" = ( /obj/machinery/camera/autoname{ dir = 4 }, /turf/open/floor/prison, /area/sulaco/security) +"sFD" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/prison/bright_clean, +/area/sulaco/hangar) "sGG" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden, /obj/structure/cable, @@ -23113,15 +23239,6 @@ /obj/structure/sign/pods, /turf/open/floor/mainship/sterile/plain, /area/sulaco/hangar/droppod) -"sLA" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 - }, -/obj/machinery/light/mainship{ - dir = 4 - }, -/turf/open/floor/prison/bright_clean, -/area/sulaco/hangar) "sLY" = ( /obj/machinery/status_display, /turf/closed/wall/mainship/gray/outer, @@ -23188,6 +23305,15 @@ }, /turf/open/floor/cult, /area/sulaco/morgue) +"sOS" = ( +/obj/machinery/camera/autoname{ + dir = 1 + }, +/obj/machinery/cryopod/right{ + dir = 4 + }, +/turf/open/floor/prison/whitegreen/corner, +/area/sulaco/medbay/west) "sPg" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden, /turf/open/floor/prison, @@ -23209,16 +23335,6 @@ }, /turf/open/floor/prison/plate, /area/shuttle/distress/arrive_2) -"sPM" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden/layer1, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/yellow/hidden, -/obj/effect/ai_node, -/turf/open/floor/prison/whitegreen/corner{ - dir = 4 - }, -/area/sulaco/medbay/west) "sPQ" = ( /obj/item/radio/intercom/general{ dir = 4 @@ -23254,6 +23370,10 @@ /obj/machinery/marine_selector/gear/smartgun, /turf/open/floor/prison, /area/sulaco/marine) +"sSA" = ( +/obj/machinery/vending/weapon, +/turf/open/floor/prison/bright_clean, +/area/sulaco/hangar/droppod) "sTR" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/prison, @@ -23264,6 +23384,16 @@ dir = 9 }, /area/sulaco/firingrange) +"sUF" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ + dir = 1 + }, +/obj/machinery/light/mainship/small{ + dir = 4 + }, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) "sUP" = ( /turf/open/floor/prison/darkyellow, /area/sulaco/briefing) @@ -23284,6 +23414,22 @@ /obj/structure/cable, /turf/open/floor/prison, /area/sulaco/firingrange) +"sWd" = ( +/obj/structure/table/mainship/nometal, +/obj/item/storage/firstaid/adv{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/storage/firstaid/adv{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/storage/firstaid/adv, +/obj/machinery/camera/autoname, +/turf/open/floor/prison/whitegreen/corner{ + dir = 4 + }, +/area/sulaco/medbay/west) "sWO" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ dir = 10 @@ -23305,11 +23451,6 @@ /obj/machinery/atmospherics/pipe/simple/yellow/hidden, /turf/open/floor/wood, /area/sulaco/liaison/quarters) -"sXi" = ( -/turf/open/floor/prison/red{ - dir = 6 - }, -/area/mainship/shipboard/weapon_room) "sZo" = ( /obj/machinery/holopad, /turf/open/floor/prison, @@ -23322,12 +23463,6 @@ dir = 8 }, /area/sulaco/medbay) -"sZs" = ( -/obj/structure/sink{ - dir = 4 - }, -/turf/open/floor/prison/whitegreen/corner, -/area/sulaco/medbay/west) "sZz" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/manifold/cyan/hidden/layer1{ @@ -23409,16 +23544,15 @@ }, /turf/open/floor/plating/plating_catwalk/prison, /area/sulaco/engineering/engine) -"tex" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ - dir = 8 +"tcK" = ( +/obj/machinery/light/mainship{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 }, -/obj/machinery/vending/weapon, -/turf/open/floor/prison, -/area/sulaco/marine) +/turf/open/floor/plating, +/area/sulaco/hangar/storage) "teI" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -23453,6 +23587,17 @@ }, /turf/open/floor/prison, /area/mainship/living/pilotbunks) +"tgP" = ( +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/rack, +/obj/structure/ob_ammo/ob_fuel, +/turf/open/floor/prison, +/area/mainship/shipboard/weapon_room) "tgQ" = ( /turf/open/floor/prison/whitegreen/full, /area/sulaco/research) @@ -23563,6 +23708,9 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/prison, /area/sulaco/briefing) +"toH" = ( +/turf/open/floor/mainship_hull/gray, +/area/sulaco/maintenance/lower_maint) "toM" = ( /obj/structure/window/reinforced{ dir = 4 @@ -23586,11 +23734,6 @@ }, /turf/open/floor/mainship/tcomms, /area/sulaco/command/ai) -"tpA" = ( -/turf/open/floor/plating/icefloor/warnplate{ - dir = 4 - }, -/area/sulaco/hangar/storage) "tqa" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ dir = 9 @@ -23624,11 +23767,6 @@ }, /turf/open/floor/prison, /area/sulaco/marine) -"ttl" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden, -/turf/open/floor/prison/whitegreen/corner, -/area/sulaco/medbay/west) "ttE" = ( /obj/machinery/door/airlock/mainship/maint{ dir = 1 @@ -23666,15 +23804,15 @@ /area/sulaco/cargo) "tvk" = ( /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /obj/machinery/holopad{ active_power_usage = 130; desc = "It's a floor-mounted device for projecting holographic images. This one appears to have a larger lense."; holo_range = 7; name = "modfied holopad" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/open/floor/prison, /area/sulaco/hallway/lower_main_hall) "tvS" = ( @@ -23988,6 +24126,9 @@ /obj/item/tool/pen, /obj/effect/spawner/random/misc/paperbin, /obj/machinery/firealarm, +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, /turf/open/floor/prison/whitegreen/corner{ dir = 8 }, @@ -24036,7 +24177,6 @@ "tUA" = ( /obj/structure/bed/bunkbed, /obj/effect/landmark/start/job/pilotofficer, -/obj/effect/landmark/start/job/pilotofficer, /turf/open/floor/prison, /area/mainship/living/pilotbunks) "tVZ" = ( @@ -24136,16 +24276,6 @@ }, /turf/open/floor/prison/plate, /area/shuttle/distress/arrive_1) -"ubp" = ( -/obj/machinery/power/fusion_engine{ - name = "\improper S-52 fusion reactor #12" - }, -/obj/structure/cable, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/turf/open/floor/plating/mainship, -/area/sulaco/engineering/engine) "ubQ" = ( /obj/effect/ai_node, /turf/open/floor/plating/mainship, @@ -24166,6 +24296,9 @@ }, /turf/open/floor/plating/plating_catwalk/prison, /area/sulaco/hallway/central_hall) +"ueb" = ( +/turf/closed/wall/mainship/white/outer, +/area/sulaco/hallway/lower_main_hall) "uec" = ( /obj/structure/window/framed/mainship/gray/toughened, /obj/machinery/door/poddoor/shutters/opened{ @@ -24179,6 +24312,11 @@ /obj/effect/spawner/random/misc/structure/flavorvending/coffeeweighted, /turf/open/floor/prison/kitchen, /area/sulaco/cafeteria) +"ueo" = ( +/turf/open/floor/prison/whitegreen/corner{ + dir = 1 + }, +/area/sulaco/medbay/chemistry) "ueG" = ( /obj/structure/cable, /obj/machinery/power/apc/mainship, @@ -24385,9 +24523,17 @@ dir = 1 }, /area/sulaco/disposal) -"usZ" = ( -/turf/open/floor/plating/icefloor/warnplate, -/area/sulaco/hangar/storage) +"upr" = ( +/obj/machinery/light/mainship{ + dir = 8 + }, +/obj/machinery/chem_master, +/obj/item/reagent_containers/glass/beaker/bluespace, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/turf/open/floor/prison/whitegreen/corner, +/area/sulaco/medbay/chemistry) "utx" = ( /obj/structure/bed/chair/sofa/corner{ dir = 4 @@ -24457,19 +24603,6 @@ }, /turf/open/floor/plating, /area/sulaco/maintenance/upperdeck_north_maint) -"uwS" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/machinery/camera/autoname{ - dir = 8 - }, -/obj/machinery/landinglight/tadpole{ - dir = 8; - pixel_x = 4 - }, -/turf/open/floor/prison/bright_clean, -/area/sulaco/hangar) "uwV" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/dropship_equipment/shuttle/flare_launcher, @@ -24671,11 +24804,6 @@ /obj/structure/cable, /turf/open/floor/prison, /area/sulaco/hallway/lower_main_hall) -"uLM" = ( -/obj/structure/cable, -/obj/machinery/power/apc/mainship, -/turf/open/floor/prison, -/area/sulaco/hangar/storage) "uMe" = ( /turf/closed/wall/mainship/gray/outer, /area/mainship/living/basketball) @@ -24734,6 +24862,12 @@ /area/sulaco/cargo) "uPy" = ( /obj/structure/window/framed/mainship/white, +/obj/machinery/door/poddoor/shutters/opened/medbay{ + dir = 2 + }, +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, /turf/open/floor/plating/platebotc, /area/sulaco/medbay/chemistry) "uQi" = ( @@ -24764,12 +24898,6 @@ /obj/machinery/status_display/ai, /turf/closed/wall/mainship/gray/outer, /area/sulaco/marine) -"uSj" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/open/floor/prison/green/full, -/area/sulaco/marine) "uSw" = ( /obj/machinery/light/mainship, /obj/machinery/marine_selector/clothes, @@ -24808,13 +24936,6 @@ }, /turf/open/floor/prison/bright_clean, /area/sulaco/hangar) -"uWV" = ( -/obj/structure/cable, -/obj/machinery/light/mainship{ - dir = 8 - }, -/turf/open/floor/prison/bright_clean, -/area/mainship/command/self_destruct) "uWX" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, @@ -24872,15 +24993,6 @@ /obj/effect/soundplayer, /turf/closed/wall/mainship/gray, /area/sulaco/command/ai) -"uZN" = ( -/obj/machinery/camera/autoname{ - dir = 4 - }, -/obj/machinery/light/mainship{ - dir = 8 - }, -/turf/open/floor/prison/sterilewhite, -/area/sulaco/cafeteria/kitchen) "vax" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ dir = 8 @@ -25020,7 +25132,6 @@ /obj/structure/rack, /obj/structure/ob_ammo/warhead/incendiary, /obj/structure/ob_ammo/warhead/incendiary, -/obj/structure/ob_ammo/warhead/incendiary, /obj/machinery/camera/autoname, /turf/open/floor/prison/red{ dir = 1 @@ -25036,6 +25147,18 @@ /obj/effect/soundplayer, /turf/closed/wall/mainship/gray, /area/mainship/command/self_destruct) +"vjr" = ( +/obj/structure/rack, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/obj/structure/ob_ammo/ob_fuel, +/turf/open/floor/prison/red{ + dir = 6 + }, +/area/mainship/shipboard/weapon_room) "vjG" = ( /obj/structure/table/mainship/nometal, /obj/machinery/light/mainship, @@ -25099,12 +25222,6 @@ dir = 1 }, /area/sulaco/marine/chapel) -"vnZ" = ( -/mob/living/simple_animal/corgi/walten, -/turf/open/floor/prison/whitegreen/corner{ - dir = 8 - }, -/area/sulaco/medbay/west) "vok" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -25118,6 +25235,13 @@ }, /turf/open/floor/prison, /area/sulaco/engineering/atmos) +"vqR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ + dir = 1 + }, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) "vrP" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -25367,6 +25491,13 @@ dir = 4 }, /area/sulaco/medbay) +"vCU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 6 + }, +/turf/open/floor/plating, +/area/sulaco/hangar/storage) "vDU" = ( /turf/open/floor/mainship_hull/gray/dir{ dir = 4 @@ -25692,6 +25823,20 @@ /obj/structure/window/framed/mainship/gray/toughened, /turf/open/floor/plating/platebotc, /area/sulaco/engineering/atmos) +"war" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/obj/structure/rack, +/obj/machinery/light/mainship/small{ + dir = 1 + }, +/turf/open/floor/prison, +/area/sulaco/hangar/storage) +"waM" = ( +/obj/machinery/quick_vendor/beginner, +/turf/open/floor/prison/green{ + dir = 1 + }, +/area/sulaco/marine) "waW" = ( /obj/machinery/atmospherics/pipe/manifold/cyan/hidden/layer1{ dir = 8 @@ -25727,6 +25872,11 @@ }, /turf/open/floor/plating, /area/sulaco/maintenance/upperdeck_AIcore_maint) +"wca" = ( +/obj/machinery/light/mainship, +/obj/machinery/vending/uniform_supply, +/turf/open/floor/prison, +/area/sulaco/marine) "wco" = ( /obj/structure/table/mainship/nometal, /obj/item/clothing/head/warning_cone, @@ -25773,17 +25923,6 @@ /obj/structure/cable, /turf/open/floor/prison, /area/sulaco/cargo) -"wgy" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/yellow/hidden{ - dir = 8 - }, -/turf/open/floor/prison/whitegreen/corner{ - dir = 8 - }, -/area/sulaco/medbay/west) "whk" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden, /turf/open/floor/prison/red{ @@ -25837,11 +25976,10 @@ /obj/machinery/light/mainship, /turf/open/floor/prison/sterilewhite, /area/sulaco/cafeteria) -"wjX" = ( -/turf/open/floor/prison/red{ - dir = 4 - }, -/area/mainship/shipboard/weapon_room) +"wkH" = ( +/obj/structure/dropship_equipment/cas/weapon/bomb_pod, +/turf/open/floor/plating, +/area/sulaco/hangar/cas) "wkI" = ( /obj/machinery/light/mainship/small, /obj/effect/ai_node, @@ -25912,14 +26050,6 @@ /obj/structure/flora/ausbushes/fullgrass, /turf/open/floor/grass, /area/mainship/living/starboard_garden) -"wos" = ( -/obj/machinery/firealarm{ - dir = 8 - }, -/turf/open/floor/prison/red{ - dir = 4 - }, -/area/mainship/shipboard/weapon_room) "wpf" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -25932,6 +26062,10 @@ "wpp" = ( /turf/closed/wall/mainship/gray/outer, /area/sulaco/cafeteria/kitchen) +"wpJ" = ( +/obj/machinery/air_alarm, +/turf/open/floor/prison/whitegreen/corner, +/area/sulaco/medbay/west) "wpK" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -26052,14 +26186,17 @@ /obj/machinery/marine_selector/clothes/smartgun, /turf/open/floor/prison, /area/sulaco/marine) -"wAY" = ( -/obj/machinery/door/airlock/mainship/medical/glass{ - dir = 2 +"wCQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment/corner, /turf/open/floor/prison/whitegreen/corner{ - dir = 1 + dir = 4 }, /area/sulaco/medbay/west) "wDy" = ( @@ -26089,6 +26226,10 @@ dir = 6 }, /area/space) +"wGp" = ( +/obj/structure/window/framed/mainship/gray/toughened, +/turf/open/floor/plating/platebotc, +/area/sulaco/hangar/storage) "wHe" = ( /obj/machinery/light/mainship{ dir = 4 @@ -26214,12 +26355,6 @@ /obj/machinery/vending/dinnerware, /turf/open/floor/prison/sterilewhite, /area/sulaco/cafeteria/kitchen) -"wQC" = ( -/obj/effect/decal/cleanable/blood/gibs/robot, -/turf/open/floor/plating/icefloor/warnplate{ - dir = 10 - }, -/area/sulaco/hangar/storage) "wRq" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ @@ -26394,6 +26529,16 @@ }, /turf/open/floor/tile/hydro, /area/sulaco/hydro) +"xbz" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/obj/machinery/vending/uniform_supply, +/turf/open/floor/prison, +/area/sulaco/marine) "xbD" = ( /obj/structure/window/framed/mainship/gray/toughened, /turf/open/floor/plating/platebotc, @@ -26483,6 +26628,7 @@ /area/sulaco/hangar) "xgG" = ( /obj/machinery/camera/autoname, +/obj/effect/landmark/start/job/transportofficer, /turf/open/floor/prison, /area/mainship/living/pilotbunks) "xhY" = ( @@ -26615,6 +26761,13 @@ }, /turf/open/floor/prison/bright_clean, /area/sulaco/hangar) +"xtu" = ( +/obj/machinery/camera/autoname{ + dir = 1 + }, +/obj/machinery/vending/weapon, +/turf/open/floor/prison, +/area/sulaco/marine) "xur" = ( /turf/open/floor/prison/arrow/clean{ dir = 8 @@ -26767,6 +26920,16 @@ /obj/effect/turf_decal/warning_stripes, /turf/open/floor/prison, /area/sulaco/hangar/storage) +"xEi" = ( +/obj/machinery/light/mainship{ + dir = 8 + }, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/obj/machinery/vending/uniform_supply, +/turf/open/floor/prison, +/area/sulaco/marine) "xEH" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1, @@ -26875,6 +27038,20 @@ }, /turf/open/floor/plating/platebotc, /area/sulaco/cargo/prep) +"xME" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/obj/machinery/holopad, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk/prison, +/area/sulaco/hangar/storage) "xNa" = ( /obj/effect/ai_node, /turf/open/floor/prison/bright_clean, @@ -27023,6 +27200,16 @@ /obj/structure/table/mainship/nometal, /turf/open/floor/prison, /area/sulaco/marine) +"xXJ" = ( +/obj/machinery/door/airlock/mainship/maint{ + dir = 1 + }, +/obj/machinery/door/firedoor/mainship{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/sulaco/maintenance/lower_maint) "xXL" = ( /obj/structure/table/mainship/nometal, /turf/open/floor/prison/sterilewhite, @@ -27081,6 +27268,17 @@ /obj/machinery/status_display, /turf/closed/wall/mainship/gray, /area/sulaco/marine/chapel/chapel_office) +"ybZ" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/yellow/hidden, +/turf/open/floor/plating/plating_catwalk/prison, +/area/sulaco/hangar/storage) "ycH" = ( /obj/machinery/marine_selector/clothes/synth, /turf/open/floor/prison, @@ -27252,11 +27450,6 @@ /obj/structure/window/framed/mainship/gray/toughened/hull, /turf/open/floor/plating/platebotc, /area/sulaco/hangar/storage) -"ykL" = ( -/obj/effect/decal/cleanable/blood/oil, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer1, -/turf/open/floor/prison, -/area/sulaco/hangar/storage) "yle" = ( /obj/effect/turf_decal/warning_stripes, /obj/structure/dropship_equipment/shuttle/sentry_holder, @@ -41878,7 +42071,7 @@ aFy aFy aIz aIz -mDu +cyv mDu mDu cIS @@ -42130,12 +42323,12 @@ aGD aJz vxZ qaF -aOT +rrn aGD aGD -aPC -aIz -mDu +fxB +nsM +cyv vgl vgl cIS @@ -42387,12 +42580,12 @@ aHz mQw vwo aHz -aOY +tgP +aHz aHz aHz fng -aIz -mDu +cyv vgl pOj xHk @@ -42647,9 +42840,9 @@ aHz aPa aHz aHz +aHz lkp -aIz -mDu +cyv vgl gpO rVm @@ -42904,9 +43097,9 @@ aHz qXI qSH aHz +aHz lkp -aIz -mDu +cyv vgl hXk mvV @@ -43161,9 +43354,9 @@ orc qSH qSH aHz +aHz sAq -aIz -mDu +cyv vgl lpd xHk @@ -43418,9 +43611,9 @@ eCX sjB lSf aHz +aHz fNG -aIz -mDu +cyv vgl vgl cts @@ -43662,7 +43855,7 @@ aUt aPg aLf uux -gQJ +xEi uux aLf aQh @@ -43673,11 +43866,11 @@ aHz hKJ gXA mVd -wos -wjX -sXi -aIz -mDu +aNJ +ldy +ldy +vjr +cyv mDu vgl aFZ @@ -43934,7 +44127,7 @@ aIz aIz aIz aIz -mDu +cyv mDu sLY bvV @@ -44435,7 +44628,7 @@ nKD aLC aMB aNX -iTg +cKq aQh aQw aDm @@ -45973,14 +46166,14 @@ yfM yfM vjG fXb -xPc +waM aLJ xJd ayl aLf pdX -jZZ -jZZ +vVz +rOy jGG aLf oHm @@ -46244,7 +46437,7 @@ vax qzc wYX aLk -sQd +htm uRT vTH qXN @@ -46501,7 +46694,7 @@ dmj mmI oJO aLk -mAk +htm euR qXN qXN @@ -46758,7 +46951,7 @@ dmj aLG xla aLk -lGX +xtu euR aFa gjL @@ -47015,7 +47208,7 @@ dmj xJd wYX aLk -mAk +htm euR fRw qXN @@ -47268,7 +47461,7 @@ wyp eDb aLf aLf -tex +fSQ xJd wYX aLk @@ -47297,7 +47490,7 @@ mMU wMZ vMB qzH -qzH +eho pXL xKi mDu @@ -47525,7 +47718,7 @@ gRR qzc cKq aLf -bHs +kQE xJd avL aLk @@ -47772,17 +47965,17 @@ afG afG afG oEw -aLC -aMq +vVz +eYn aNX -rvr +wca aLf jRd wMn mgW vnh aLf -oSV +ocS xJd avL aLk @@ -48030,8 +48223,8 @@ oRM buz anw cAK -aMt -xJd +eUP +qMk jUJ aLf lJH @@ -48039,7 +48232,7 @@ lzl aNX lJH aLf -oSV +xbz xJd avL aLk @@ -48068,8 +48261,8 @@ aMc wMZ vMB bBG -qzH -eho +pdB +gIj xKi mDu qDO @@ -48296,7 +48489,7 @@ sAb eDb aLf gxf -oSV +xbz xJd wYX aLk @@ -48312,7 +48505,7 @@ dsb iRd aKK aNy -haJ +hSC iRd oEL ppl @@ -48324,10 +48517,10 @@ xab aMc vMY vMB -bBG -pdB -gIj -xKi +fna +vMB +vMB +wpp mDu mDu vyQ @@ -48553,7 +48746,7 @@ azx xJd seY yiY -cyo +bgW aLF nps aLk @@ -48580,11 +48773,11 @@ wMZ wMZ wMZ jdD -vMB -phb -cDU -cDU -xKi +aOR +oUY +iix +uam +wpp wpp mDu qDO @@ -48814,7 +49007,7 @@ arT swn ngU aLk -vVz +yiU aLf xHk vFL @@ -48839,9 +49032,9 @@ wMZ cKW aOR ifW -uZN -uam -bJY +wMZ +wMZ +jta wpp mDu qDO @@ -49318,12 +49511,12 @@ jQe nWx aYV hdZ -uSw -aLf -jbY -rHR -uSj -aLf +xJd +aLk +aLk +aLk +aLk +aLk lqm tsP xJd @@ -49585,7 +49778,7 @@ lIp vRu qzc bbP -rOy +xJd aLf xHk oSf @@ -50098,17 +50291,17 @@ ajp oQN aPP pIP -eDG -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu +ueb +mzT +mzT +mzT +mzT +mzT +mzT +mzT +mzT +mzT +mzT vgl vgl vgl @@ -50355,20 +50548,20 @@ hCz pIP xKR pIP +aam +rDx +hzC +xAq +aca vHb -vHb -vHb -vHb -vHb -vHb -vHb -vHb -vHb -vHb -mDu -mDu -mDu -mDu +fKu +ntk +aam +pXn +mzT +mzT +mzT +mzT mDu mDu mDu @@ -50612,19 +50805,19 @@ uyf hbH xKR pIP -vHb -rDx -hzC -xAq -cHd aam -rIw -kNv -jGq -vHb -vHb -vHb -vHb +aar +abo +abL +fjF +aam +djp +ntk +acG +abR +cXw +sDU +cXw vHb mDu mDu @@ -50870,18 +51063,18 @@ pIP xKR dAv aam -aar -abo -abL -fjF +rDx +abp +aeC +cHd aam +jGq ntk -ntk -ntk -acG -acT -add -jQi +cRY +iNQ +fBF +iNQ +fBF vHb mDu qDO @@ -51112,7 +51305,7 @@ rvC vvG qZW nPU -wsa +lFQ hCz uDh whV @@ -51127,18 +51320,18 @@ cyq jPq puw aam -aau -abp -aeC -aca +iNQ +qnI +iNQ +qPU aam -gsY -abx -ttl -wAY -adE -kLi -cfv +duH +lQA +aam +abR +ota +eld +sOS vHb mDu qDO @@ -51387,11 +51580,11 @@ aam aaP aeu aeD -acb +lEL eDl jpD -sPM -fXe +sdk +aam aam aam aam @@ -51641,14 +51834,14 @@ xWt xKR kXj aam -aaR -vnZ +sWd +clt acg -acA +gGK aam -iJB -acQ -pDu +wpJ +pDT +aZQ acH adF adL @@ -51898,14 +52091,14 @@ xWt tkS pIP aam -aaS -abB -abR -sZs +kvF aam -acq -onD -bVT +abN +aam +aam +iQM +wCQ +jad acI acW adM @@ -52155,12 +52348,12 @@ aTg aVH pIP aam -kvF -aam -abN -aam -aam -fix +abb +abC +hZZ +abD +ach +dsS rlh wSa qAU @@ -52411,13 +52604,13 @@ bkk xWt xKR pIP -aam -abb -abC -hZZ -abD -ach -wgy +aan +hoc +aan +opr +aan +aan +fGe xKv bVT acI @@ -52668,13 +52861,13 @@ hFf fOe leD dAv -aam -abE -aam -abY -aam -aam -acz +aan +nzD +upr +ueo +sbO +aan +vRI qAW oxv aam @@ -52925,9 +53118,9 @@ sbT iqQ xKR bIb -aan +uPy xWb -iJs +egL acf xWe aan @@ -53183,7 +53376,7 @@ pIP xKR pIP uPy -oso +lgz abJ aci abk @@ -53445,7 +53638,7 @@ aaE abi abl aan -hQQ +bGH onD bVT acP @@ -54097,7 +54290,7 @@ arc avr atF ecX -uif +gWz avr awI rhM @@ -54735,7 +54928,7 @@ eOM adN kMl ade -adV +fel jXT mDu mDu @@ -56534,7 +56727,7 @@ dPz adf wAz nok -dRt +atx jXT rjf sMe @@ -57025,8 +57218,8 @@ fsb pwv jIo dKl -pwv -pwv +kJu +dal pwv pwv pwv @@ -57275,7 +57468,7 @@ cdy rpN ddK pwv -pwv +iNr pwv qct pwv @@ -57532,7 +57725,7 @@ dZG qAV ddK pwv -pwv +wkH pwv qct pwv @@ -57551,7 +57744,7 @@ aGy pIP xKR pIP -pIP +hTO fVo xzB ajQ @@ -59074,7 +59267,7 @@ kwh bhA ddK pwv -pwv +gcZ pwv qct pwv @@ -59331,7 +59524,7 @@ kwh bhA ddK pwv -pwv +gcZ pwv qct pwv @@ -60390,267 +60583,267 @@ aPY bFa bFa bFa +bFa +mDu +mDu +qDO +aaa +aaa +aaa +aaa +aaa +aDS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaa +aaa +"} +(130,1,1) = {" +aaa +aaa +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +nzi mDu mDu +aYZ +fmy +pEM +iKv +iwd +iwd +iwd +iKv +xPO +anr +anr +wOA +akW +anr +jXo +mDu qDO aaa -aaa -aaa -aaa -aaa -aaa -aDS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aaa -aaa -"} -(130,1,1) = {" -aaa -aaa -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -nzi -mDu -mDu -aYZ -fmy -pEM -iKv -iwd -iwd -iwd -iKv -xPO -anr -anr -wOA -akW -anr -jXo -mDu -qDO -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aaa -aPW -aPW -aPW -aaa -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -nzi -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -aPg -aQg -tWu -aRd -aRb -aRu -aRO -nxz -aTj -aRd -aRR -aPF -aSi -bbh -scV -xts -aPF -aPF -gef -qvV -aPF -aPF -aTc -bVU -aPF -nVV -bCd -aPF -bFa -bFa -mDu -qDO -aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaa +aPW +aPW +aPW +aaa +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +nzi +mDu +mDu +mDu +mDu +mDu +mDu +mDu +mDu +aPg +aQg +tWu +aRd +aRb +aRu +aRO +nxz +aTj +aRd +aRR +aPF +aSi +bbh +scV +xts +aPF +aPF +gef +qvV +aPF +aPF +aQr +dsn +aPF +nVV +rQn +kgo +ecj +bFa +bFa +mDu +qDO aaa aaa aaa @@ -60882,7 +61075,7 @@ aRd baH aRv aRP -pYe +aSz aTk uQI aPF @@ -60902,8 +61095,9 @@ aPF aTd aPF aPF +aPF gHU -uYv +hQp bFa mDu qDO @@ -60913,7 +61107,6 @@ aDS aDS aDS aDS -aDS aaa aaa aaa @@ -61124,16 +61317,16 @@ aaa aaa aaa nzi -bWf -bWf -bWf -bWf -bWf -bWf -bWf -bWf -bWf +mDu +mDu +mDu +mDu +mDu +mDu +mDu +mDu aPg +aQh aQv aRd aRd @@ -61161,6 +61354,7 @@ aPF aPF aPF aPF +nav bFa mDu qDO @@ -61170,7 +61364,6 @@ aaa aaa aaa aDS -aDS aaa aaa aaa @@ -61381,53 +61574,53 @@ aaa aaa aaa nzi -bWf -rFM -rFM -rFM -gbP -rFM -rFM -qBE -xca +mDu +mDu +mDu +mDu +mDu +mDu +mDu +mDu +aPg +aPF +iRq aPF -aQI aQr -fEL -nzf -smS -pyj -bgs -bgs -pyj -pyj -eVT -nzf -nHv -hqE -iIB -iIB -iIB -iIB -iIB -lxD -iIB -iIB -jbg -elE -aSk -xNa -gQS +aPF +aPF +aPF +aPF +aPF +aPF +aPF +bbu +aPF +sFD +jxF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +bbv +aPF +aPF +aPF +aPF +aPF bFa mDu qDO aaa aaa -aDS -aDS -aDS -aDS -aDS +aaa +aaa +aaa +aaa aaa aaa aaa @@ -61639,52 +61832,52 @@ aaa aaa nzi bWf -baj -lfa -lfa -lfa -gkO -mZj -vhM -xca -aRR -uVR -vVE -vNm -aPZ -aPZ -uiW -dtI -npe -aPZ -aPZ -aPZ -uoG -dtI -dtI -dtI -dtI -npe -aPZ -aPZ -aPZ -aPZ -aPZ -xxv -dtI -svV +bWf +bWf +bWf +bWf +bWf +bWf +bWf +bWf aPF +iRq aPF -aSN -mDu +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +bbu +aPF +sFD +jxF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +bbv +aPF +aPF +aPF +aPF +aPF +bFa mDu -wRO -wRO -vyQ -aDS -aDS -aDS -aDS +qDO +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -61899,46 +62092,46 @@ bWf rFM rFM rFM +gbP +rFM rFM qBE -vIJ -sLp xca +kcY +aQI aPF -gHU -aPF -igo -aPZ -aPZ -eQF -rFe -aPZ -aPZ -aPZ -aPZ -aPZ -aPZ -aPZ -aPZ -aPZ -aPZ -aPZ -aPZ -aPZ -aPZ -aPZ -uGa -aPZ -svV +fEL +nzf +smS +pyj +bgs +bgs +pyj +pyj +eVT +nzf +nHv +hqE +iIB +iIB +iIB +iIB +iIB +lxD +iIB +iIB +jbg +elE +aSk aPF -uYv -aSN -mDu -mDu -mDu -mDu +xNa +gQS +bFa mDu -vyQ +qDO +aaa +aaa +aDS aDS aDS aDS @@ -62153,49 +62346,49 @@ aaa aaa nzi bWf -rFM -rFM -rFM -rTz -ikJ -tur -xca +baj +lfa +lfa +lfa +gkO +mZj +vhM xca -xHm -aSk -aPF -igo -dtI -dtI -npe -uvn -aPZ -aPZ -aPZ -aPZ -aPZ +qGU +uVR +vVE +vNm aPZ aPZ +uiW +dtI +npe aPZ aPZ aPZ +uoG +dtI +dtI +dtI +dtI +npe aPZ aPZ aPZ aPZ aPZ -kpD -aPZ +xxv +dtI svV -gHU -gQS -bFa -bFa -bFa -bFa +aPF +aPF +uYv +aSN mDu mDu -qDO +wRO +wRO +vyQ aDS aDS aDS @@ -62410,20 +62603,22 @@ aaa aaa nzi bWf -btR -lfa -lfa -lfa -rvS -dde -gEJ -tcy -wjr -jQS +rFM +rFM +rFM +rFM +qBE +vIJ +sLp +xca +sSA +gHU aPF igo aPZ aPZ +eQF +rFe aPZ aPZ aPZ @@ -62439,21 +62634,19 @@ aPZ aPZ aPZ aPZ -aPZ -aPZ -aPZ +uGa aPZ svV aPF -gHU -xHm -rId -ptp -bFa -bFa +aPF +uYv +aSN mDu -qDO -aDS +mDu +mDu +mDu +mDu +vyQ aDS aDS aaa @@ -62670,15 +62863,19 @@ bWf rFM rFM rFM -rFM -sbs -dde -wjr -tcy -wjr -aSl -gHU +rTz +ikJ +tur +xca +xca +sqa +khS +aPF igo +dtI +dtI +npe +uvn aPZ aPZ aPZ @@ -62694,23 +62891,19 @@ aPZ aPZ aPZ aPZ +kpD aPZ -aPZ -aPZ -aPZ -vCF -sMl svV aPF -cch -aPY gHU -aYD -aPY +gQS bFa -vDU -wFA -aah +bFa +bFa +bFa +mDu +mDu +qDO aDS aDS aaa @@ -62924,18 +63117,18 @@ aaa aaa nzi bWf -ehA -ehA -ehA -ehA -sWO -dvi -qHe -bkc -qHe -cTC -jik -aji +btR +lfa +lfa +lfa +rvS +dde +gEJ +tcy +wjr +jQS +aPF +igo aPZ aPZ aPZ @@ -62946,7 +63139,6 @@ aPZ aPZ aPZ aPZ -aMT aPZ aPZ aPZ @@ -62955,19 +63147,20 @@ aPZ aPZ aPZ aPZ -rhc aPZ -mmv -aPF -aPF -bap -aPF +aPZ +aPZ +svV aPF aPF -vRm -aUt -aah -aah +gHU +xHm +rId +ptp +bFa +bFa +mDu +qDO aDS aDS aaa @@ -63181,17 +63374,17 @@ aaa aaa nzi bWf -iHe rFM rFM rFM -tGO +rFM +sbs dde wjr tcy wjr aSl -aPF +gHU igo aPZ aPZ @@ -63212,21 +63405,21 @@ aPZ aPZ aPZ aPZ -uoG -dtI +vCF +sMl svV aPF -tha +aPF +cch aPY -rkI gHU +aYD aPY bFa -wRO -vyQ +vDU +wFA aah aDS -aDS aaa aaa aaa @@ -63438,20 +63631,18 @@ aaa aaa nzi bWf -jCJ -orB -orB -orB -ugO -dde -wjr -tcy -wjr -aSl -aPF -jGF -aPZ -aPZ +ehA +ehA +ehA +ehA +sWO +dvi +qHe +bkc +qHe +cTC +jik +aji aPZ aPZ aPZ @@ -63462,6 +63653,7 @@ aPZ aPZ aPZ aPZ +aMT aPZ aPZ aPZ @@ -63470,19 +63662,20 @@ aPZ aPZ aPZ aPZ +rhc aPZ -svV +mmv aPF -gHU -aPY -ryR -aYA -bFa -bFa -mDu -qDO -aDS -aDS +aPF +aPF +bap +aPF +aPF +aPF +vRm +aUt +aah +aah aDS aaa aaa @@ -63695,22 +63888,21 @@ aaa aaa nzi bWf +iHe rFM rFM rFM -rTz -uIO -djX -xca -xca -xca -uTr +tGO +dde +wjr +tcy +wjr +aSl aPF -bYh -sMl -sMl -ger -uvn +igo +aPZ +aPZ +aPZ aPZ aPZ aPZ @@ -63726,20 +63918,21 @@ aPZ aPZ aPZ aPZ -jYG aPZ +uoG +dtI svV aPF -gQS -bFa -bFa -bFa +aPF +tha +aPY +rkI +gHU +aPY bFa -mDu -mDu -qDO -aDS -aDS +wRO +vyQ +aah aDS aaa aaa @@ -63952,22 +64145,23 @@ aaa aaa nzi bWf -rFM -rFM -rFM -rFM -vKO -vIJ -bvu -xca -kcP -aPF +jCJ +orB +orB +orB +ugO +dde +wjr +tcy +pVy +aSl aPF -igo +jGF +aPZ +aPZ +aPZ aPZ aPZ -eQF -rFe aPZ aPZ aPZ @@ -63983,19 +64177,18 @@ aPZ aPZ aPZ aPZ -trP aPZ svV aPF aPF -aSN -mDu -mDu -mDu -mDu +gHU +aPY +ryR +aYA +bFa +bFa mDu -wFA -aDS +qDO aDS aDS aaa @@ -64209,50 +64402,50 @@ aaa aaa nzi bWf -jYs -eNX -eNX -eNX -yjP -byI -scy +rFM +rFM +rFM +rTz +uIO +djX xca -aRR -aPF +xca +aPY +uTr aPF -igo -aPZ -aPZ -whN +bYh +sMl sMl ger +uvn aPZ aPZ aPZ -vCF -sMl -sMl -sMl -sMl -ger aPZ aPZ aPZ aPZ aPZ -uBl -sMl +aPZ +aPZ +aPZ +aPZ +aPZ +aPZ +aPZ +jYG +aPZ svV -gHU -uYv -aSN +aPF +aPF +gQS +bFa +bFa +bFa +bFa mDu mDu -vDU -vDU -wFA -aDS -aDS +qDO aDS aDS aaa @@ -64469,47 +64662,47 @@ bWf rFM rFM rFM -lYE -rFM rFM -qBE +vKO +vIJ +bvu xca +kcP aPF aPF +igo +aPZ +aPZ +eQF +rFe +aPZ +aPZ +aPZ +aPZ +aPZ +aPZ +aPZ +aPZ +aPZ +aPZ +aPZ +aPZ +aPZ +aPZ +aPZ +trP +aPZ +svV aPF -aYB -inI -nke -nke -ukz -nke -nke -msL -rXx -gZG -rXx -rXx -rXx -rXx -rXx -rXx -rXx -rXx -qGb -cud -cud -nFP -aQL aPF -nfu -bFa +uYv +aSN mDu -qDO -aaa -aaa -aDS -aDS -aDS +mDu +mDu +mDu +mDu +wFA aDS aDS aaa @@ -64723,51 +64916,49 @@ aaa aaa nzi bWf -bWf -bWf -bWf -bWf -bWf -bWf -bWf -bWf -aPF -aPF -aPF -aPF -pfc -aPF -aPF -aPF -aPF -aPF -dEd -aPF -xNa -aPF +jYs +eNX +eNX +eNX +yjP +byI +scy +xca +iFZ aPF -bbh aPF +igo +aPZ +aPZ +whN +sMl +ger +aPZ +aPZ +aPZ +vCF +sMl +sMl +sMl +sMl +ger +aPZ +aPZ +aPZ +aPZ +aPZ +uBl +sMl +svV aPF gHU -aPF -aPF -rto -xNa -bbh -xNa -aPF -xNa -bFa -bFa +uYv +aSN mDu mDu -wRO -vyQ -aDS -aDS -aDS -aDS +vDU +vDU +wFA aDS aDS aDS @@ -64810,6 +65001,8 @@ aaa aaa aaa aaa +aaa +aaa aab aaa aaa @@ -64977,55 +65170,55 @@ aaa aaa aaa aaa -aaa -nzi +emV mDu -bFa -aPF -aPF -aPF -aPF -aQr -rXl -aPF -aPF -aPF -aPF -aPF -aPF -aPF -aPF -aPF -aTq -aRx -cMx -aRx -aRx -xgD -aSu -bbh -aRQ -aPF -sKM -aPF -aPF +bWf +rFM +rFM +rFM +lYE +rFM +rFM +qBE +xca aPF aPF -nbJ aPF +aYB +inI +nke +nke +ukz +nke +nke +msL +rXx +gZG +rXx +rXx +rXx +rXx +rXx +rXx +rXx +rXx +qGb +cud +cud +nFP +aQL aPF aPF +nfu bFa mDu -mDu -mDu -mDu qDO aaa aaa -aaa -aaa -aaa +aDS +aDS +aDS +aDS aaa aaa aaa @@ -65233,58 +65426,58 @@ aaa aaa aaa aaa -aaa -aaa -nzi -mDu +emV bFa -mUa -fPc -fPc -fPc -fPc -fPc -fPc -fPc -fPc -fPc -aSk +bFa +bFa +aPY +aPY +aPY +aPY +aPY +aPY +aPY +aPY aPF aPF -tha -kOr -bYM -oEH -oLl -lwx -bYM -oLM -oLM -snt -oLM -oLM -bam +aPF +aPF +pfc +aPF +aPF +aPF +aPF +aPF +dEd +aPF +xNa +aPF +aPF +bbh +aPF +aPF +gHU +aPF +aPF +rto +xNa +bbh +xNa +aPF +aPF +xNa +aPF bFa -obm -yiZ -wtB -xxy -wtB -rAt -nyr -yiZ -yiZ -yiZ -yiZ mDu -qDO -aaa -aaa -aaa -aaa -aaa -aaa -aaa +mDu +wRO +vyQ +aDS +aDS +aDS +aDS +aDS +aDS aaa aaa aaa @@ -65490,49 +65683,50 @@ aaa aaa aaa aaa -aaa -aaa nzi -mDu bFa -ewe -aPZ -aPZ -uiW -dtI -dtI -dtI -dtI -dtI -vuZ -qqt aPF aPF -gQS -kOr -ktZ -pWS -aUL -jYO -vfb -oLM -wqg -aXe -tgH -neZ -bam -aUt -aUt -lzW -aWm -uWV -poa -vCN -eAl -mwI -tNc -qxr -lzW +aPF +aPF +aPF +aPF +aQr +rXl +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +jVA +aPF +aPF +aPF +aPF +bbh +aPF +aPF +aPF +aPF +aPF +aPF +aPF +bbh +aPF +aPF +aPF +aPF +aPF +bFa +mDu +mDu mDu qDO aaa @@ -65580,7 +65774,6 @@ aaa aaa aaa aaa -aaa aab aaa aaa @@ -65747,49 +65940,50 @@ aaa aaa aaa aaa -aaa -aaa nzi -mDu bFa -ewe -aPZ -uiW -npe -aPZ -aPZ -aPZ -aPZ -aPZ -rhc -qqt aPF aPF aPF -kOr -iWz -nNP -aUp -pWS -nui -oLM -xgG -sbf -aZw -wie -aXN -aUt -aUt -iqO -aWm -olH -aWm -aND -qxr -qxr -qxr -cIa -iqO +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +jVA +aPF +aPF +aPF +aPF +bbh +aPF +aPF +aPF +aPF +aPF +aPF +aPF +bbh +aPF +aPF +aPF +aPF +aPF +bFa +mDu +mDu mDu qDO aaa @@ -65837,7 +66031,6 @@ aaa aaa aaa aaa -aaa aab aaa aaa @@ -66004,52 +66197,52 @@ aaa aaa aaa aaa -aaa -aaa nzi -mDu bFa -ewe -aPZ -eQF -aPZ -aPZ -aPZ -aPZ -aPZ -aPZ -rhc -qqt aPF aPF +mUa +fPc +fPc +fPc +fPc +fPc +fPc +fPc +fPc +fPc +aSk aPF -kOr -gNn -pWS -lEa -eVU -eVU -peL -hHN -gyB -oMr -gWF -aXN -aUt -aUt -iqO -aWm -olH -aWm -aND -qxr -nLW -qxr -iHn -iqO +aPF +aPF +aPF +aPF +aTq +aRx +cMx +aRx +aRx +xgD +aSu +bbh +aRQ +aPF +sKM +aPF +aPF +aPF +aPF +nbJ +aPF +aPF +aPF +aPF +bFa +bFa mDu -qDO -aaa +mDu +mDu +wFA aaa aaa aaa @@ -66160,150 +66353,150 @@ aaa aaa nzi mDu -aYZ -aaW -aQi -aQi -aQi -aQi -aQi -aQi -aQi -aQi -aQi -aQi -aQi -aQi -mYf -skl -axO -jvc -baf -baO -aQW -fjj -wwM -pxY -pxY -pxY -pxY -pxY -pxY -cPc -kKR -kKR -kKR -kKR -kKR -kKR -kKR -kKR -kKR -kKR -kKR -kKR -kKR -iyJ -mDu -qDO -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aaa -aPW -aPW -aPW -aaa -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -nzi -mDu +aYZ +aaW +aQi +aQi +aQi +aQi +aQi +aQi +aQi +aQi +aQi +aQi +aQi +aQi +mYf +skl +axO +jvc +baf +baO +aQW +fjj +wwM +pxY +pxY +pxY +pxY +pxY +pxY +cPc +kKR +kKR +kKR +kKR +kKR +kKR +kKR +kKR +kKR +kKR +kKR +kKR +kKR +iyJ +mDu +qDO +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaa +aPW +aPW +aPW +aaa +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +nzi bFa -ngp -aPZ -eQF -aPZ -aPZ -vzl -aPZ +aPF +aPF +ewe aPZ aPZ -rhc -vtx -xNa +uiW +dtI +dtI +dtI +dtI +dtI +vuZ +qqt aPF aPF -hDn -pWS -ykL -gwt -pWS -hxN +aPF +gQS +bYM +bYM +oEH +oLl +lwx +bYM oLM -ujq -aZw -aZw -tUA -aXN -aUt -aUt -iqO -aWm -olH -aWm -aND -qxr -qxr -qxr -xss -iqO +oLM +snt +oLM +oLM +bam +bFa +haw +yiZ +wtB +xxy +wtB +yiZ +btt +yiZ +yiZ +yiZ +yiZ mDu qDO aaa @@ -66518,15 +66711,14 @@ aaa aaa aaa aaa -aaa -aaa nzi -mDu bFa +aPF +aPF ewe aPZ -eQF -aPZ +uiW +npe aPZ aPZ aPZ @@ -66537,29 +66729,30 @@ qqt aPF aPF aPF -kOr -rpY -pWS -sFd +tha +bYM +ktZ +nNP +aUp pWS -hxN +nui oLM -hdz -aZw -hnl -bal +wqg +aXe +tgH +neZ bam aUt aUt -lzW +iqO aWm -jFO +olH aWm vCN cyU -qxr -qxr -qXF +mwI +tNc +cIa lzW mDu qDO @@ -66775,15 +66968,14 @@ aaa aaa aaa aaa -aaa -aaa nzi -mDu bFa +aPF +aPF ewe aPZ -whN -ger +eQF +aPZ aPZ aPZ aPZ @@ -66793,31 +66985,32 @@ rhc qqt aPF aPF -kOr -kOr -rTP -pWS -ron +aPF +lRu +bYM +iWz +tkV +hlB pWS -mwq -oLM +vfb oLM -yjO -bam -bam -bam -yiZ -yiZ -yiZ -gcp -uXx -vaH -vCN -vCN -vaH -vCN -yiZ -yiZ +xgG +sbf +aZw +wie +aXN +aUt +aUt +iqO +aWm +olH +aWm +aND +qxr +nLW +qxr +iHn +iqO mDu qDO aaa @@ -67032,49 +67225,49 @@ aaa aaa aaa aaa -aaa -aaa nzi -mDu bFa -ewe +dHf +aPF +fcn aPZ +eQF aPZ -whN -sMl -sMl -sMl -sMl -sMl -lMr -qqt +aPZ +vzl +aPZ +aPZ +aPZ +rhc +vtx aPF +xNa aPF -ykt -yle -xCr -pWS -aLt -swy -swy -rcQ -vok -qTU -aTM +lRu +bYM +gNn +aWo +qsy +lOC +lOC +peL +hHN +gyB +oMr +gWF +aXN aUt aUt -lzW -gBY -bhV -lvr -gZZ -jEy -gyj -jgc -bhV +iqO aWm -lzW -mDu +olH +aWm +aND +qxr +qxr +qxr +xss +iqO mDu qDO aaa @@ -67289,50 +67482,50 @@ aaa aaa aaa aaa -aaa -aaa nzi -mDu bFa -kee -eef -eef -eef -hxn -uwS -eef -eef -eef -eef -sLA aPF aPF -ykt -yle -yfI +ewe +aPZ +eQF +aPZ +aPZ +aPZ +aPZ +aPZ +aPZ +rhc +qqt +aPF +aPF +aPF +lRu +hDn pWS -aUL pWS -lIg -bYM -iwx -aWh -aTM +xME +pWS +hxN +oLM +ujq +aZw +aZw +tUA +aXN aUt aUt lzW -wTo -rwk -nug -nug -olH -nug -nug -rwk -bdX +aWm +jFO +poa +vCN +cyU +qxr +qxr +qXF lzW -aTM -aTM +mDu qDO aaa aaa @@ -67546,52 +67739,52 @@ aaa aaa aaa aaa -aaa -aaa nzi -mDu -bFa -bFa -bFa -bFa -bFa -bFa -bFa bFa -bFa -bFa -bFa -bFa -bFa -bFa -kOr -eRL -uwV +aPF +aPF +ewe +aPZ +whN +ger +aPZ +aPZ +aPZ +aPZ +aPZ +rhc +qqt +aPF +aPF +aPF +lRu +bYM +rpY pWS aUL pWS -fDf -bYM -oWg -fVO -aTM -aUt -aUt -lzW -lvr -mFc -rrS -ibr -olH -ibr -tSx -gfj -aWm -mdS -aWh -aTM +mwq +oLM +hdz +aZw +hnl +bal +bam +yiZ +yiZ +yiZ +gcp +uXx +vaH +vCN +vCN +vaH +vCN +yiZ +yiZ mDu -vyQ +qDO +aaa aaa aaa aaa @@ -67803,71 +67996,71 @@ aaa aaa aaa aaa +nzi +bFa +aPF +aPF +ewe +aPZ +aPZ +whN +sMl +sMl +sMl +sMl +sMl +lMr +qqt +aPF +aPF +aPF +bYM +bYM +rTP +pWS +aUL +pWS +hxN +oLM +oLM +yjO +bam +bam +bam +lzW +gBY +bhV +lvr +gZZ +jEy +gyj +jgc +bhV +aWm +lzW +mDu +mDu +qDO +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa -nzi -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -cyv -kOr -kOr -iZD -aUS -iZD -bYM -bYM -aUu -aWh -aTM -aUt -aUt -lzW -aWm -mFc -eUn -oGg -olH -oGg -joU -gfj -aWm -qTV -mPZ -aTM -mDu -qDO -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aaa aaa aaa @@ -68060,51 +68253,50 @@ aaa aaa aaa aaa -aaa -aaa nzi -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -iMF -mDu -mDu -mDu -mDu -mDu -mDu -mDu -kOr -qpD -ron +bFa +aPF +aPF +kee +eef +eef +eef +eef +eef +eef +eef +eef +eef +aQL +aPF +aPF +aPF +wGp +yle +xCr pWS -bYM -aUu -aUu -xeO +aLt +swy +swy +xXJ +vok +qTU aTM aUt aUt lzW -aOv +wTo rwk -jJX -oGg -pPv -oGg -qTk +nug +nug +olH +nug +nug rwk -oFW -qTV -ixz +bdX +lzW +aTM aTM -mDu qDO aaa aaa @@ -68151,6 +68343,7 @@ aaa aaa aaa aaa +aaa aab aaa aaa @@ -68317,52 +68510,52 @@ aaa aaa aaa aaa -aaa -aaa -tZr -vDU -vDU -vDU -vDU -vDU -vDU -vDU -vDU -vDU -vDU -vDU -vDU -vDU -vDU -vDU -mDu -mDu -kOr +nzi +bFa +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +aPF +wGp +yle +yfI pWS -mCT +aUL pWS -bYM -adp +lIg aUu -kxY +iwx +fVO aTM aUt aUt lzW -gNZ +lvr mFc -eUn -oGg +rrS +ibr olH -oGg -joU +ibr +tSx gfj aWm -qTV -mTN +mdS +aWh aTM mDu -qDO +vyQ aaa aaa aaa @@ -68574,53 +68767,53 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa nzi -mDu -kOr -aeL -qTF -pMx -jXw -aMW +bFa +aPF +aPF +aPF +aPF +aPF +aPF +aRQ +sKM +aPF +aPF +aPF +aRQ +aPF +aPF +aPF +ema +bYM +eRL +uwV +pWS +aUL +pWS +fDf aUu -fVO +aUu +aWh aTM aUt aUt lzW -lvr +aWm mFc -oiN -cEF +eUn +oGg olH -cEF -qSg +oGg +joU gfj aWm qTV -aWh +mPZ aTM mDu -mDu -vyQ +qDO +aaa aaa aaa aaa @@ -68831,52 +69024,51 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa nzi -mDu +bFa +bFa +bFa +bFa +bFa +bFa +bFa +bFa +bFa +bFa kOr -jYO -wTC -jJa bYM -mnu +bYM +bYM +jiY +jiY +ovo +bYM +bYM +bYM +iZD +aUS +iZD +bYM aUu -oQC +aUu +xeO aTM aUt aUt lzW -wTo +aOv rwk -lNU -lNU -olH -lNU -lNU +jJX +oGg +pPv +oGg +qTk rwk -bdX +oFW qTV -mPZ -aTM +ixz aTM -mDu +toH qDO aaa aaa @@ -68922,6 +69114,7 @@ aaa aaa aaa aaa +aaa aab aaa aaa @@ -69088,52 +69281,51 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -nzi +tZr +vDU +vDU +vDU +vDU +vDU +vDU +vDU +vDU +vDU mDu -ykt -pWS -wTC +kOr +iaR +exf +exf +exf +exf +exf +lBh +sDv +bYM +qpD +mCT pWS bYM -vov +adp aUu -hgE +kxY aTM -jQX +aUt aUt lzW -aWm -xur -oDI -aWm +gNZ +mFc +eUn +oGg olH +oGg +joU +gfj aWm -oDI -xur -lvr qTV -aWh -kEZ +mTN aTM -mDu +toH qDO aaa aaa @@ -69179,6 +69371,7 @@ aaa aaa aaa aaa +aaa aab aaa aaa @@ -69355,43 +69548,43 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa nzi -mDu -qHb -tkV -gRI -icP +ykt +iVJ +exf +exf +exf +exf +exf +lBh +lEr bYM -vov -jaQ -bld -fpW -jQX -yiZ -yiZ -uZy -vCN -vCN -ibr -dfw -pkF -vCN -vjm -vaH -rAt -rAt -ixz +aeL +qTF +pMx +jXw +aMW +aUu +fVO aTM +aUt +aUt +lzW +lvr +mFc +oiN +cEF +olH +cEF +qSg +gfj +aWm +qTV +qxr +aTM +toH mDu -qDO +vyQ aaa aaa aaa @@ -69502,150 +69695,150 @@ aaa aaa aaa aaa -nzi -mDu -aYZ -aaW -aYM -nGG -bde -bcG -bbW -coT -oHK -aYM -aYM -mYf -cHX -axS -azg -ayr -xip -aza -azf -enF -aaw -aaw -aaw -aJd -pxw -djr -aHc -aHP -aHP -aHP -aHP -aHP -aHP -aHP -aHc -aHP -aHP -aHP -aHP -aHP -aHP -aHP -aEO -mDu -qDO -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aaa -aPW -aPW -aPW -aaa -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +nzi +mDu +aYZ +aaW +aYM +nGG +bde +bcG +bbW +coT +oHK +aYM +aYM +mYf +cHX +axS +azg +ayr +xip +aza +azf +enF +aaw +aaw +aaw +aJd +pxw +djr +aHc +aHP +aHP +aHP +aHP +aHP +aHP +aHP +aHc +aHP +aHP +aHP +aHP +aHP +aHP +aHP +aEO +mDu +qDO +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaa +aPW +aPW +aPW +aaa +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa aaa aaa nzi -mDu ykt -pWS -hSa -lEr +hYd +exf +exf +exf +exf +exf +fjy +ebs bYM -aXf -glh -glh -cCT -mDl -qTV -fKE -lTe -umc -vCN -vCN -vCN -vCN -vCN -bJA -wEW -pNJ +bOG +wTC +jJa +bYM +mnu +aUu +oQC +aTM +aUt +aUt +lzW +wTo +rwk +lNU +lNU +olH +lNU +lNU +rwk +bdX qTV -aWh +gJd +aTM aTM mDu qDO @@ -69869,40 +70062,40 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa nzi -mDu -kOr +ykt +gdt +exf +exf +exf +exf +exf +fjy +mYh +fAk +kzO +ybZ pWS -hlB -jYO bYM -nGX -cXj -noW -mpJ -bzl -qTV -jRa -lTe -pKm -vOO -oGg -oXq -oGg -vOO -gMd -wEW -rPw +aUu +aUu +hgE +aTM +jQX +aUt +lzW +aWm +xur +oDI +aWm +olH +aWm +oDI +xur +lvr qTV -aWh +qxr +kEZ aTM mDu qDO @@ -70126,40 +70319,40 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa nzi -mDu kOr -aeL -bWI -dQF -mDs -kxQ -jnt -peD -glh -lIS -qTV -sjE -lTe -rZU -vOO -hFs -cEF -sML -vOO -pKm -wEW -axf -qTV -aWh +war +exf +exf +exf +exf +exf +iGj +pWS +rCY +tkV +gRI +icP +vov +vov +jaQ +bld +fpW +jQX +yiZ +yiZ +uZy +vCN +vCN +ibr +dfw +pkF +vCN +vjm +vaH +rAt +rAt +ixz aTM mDu qDO @@ -70383,38 +70576,38 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -emV -mDu -mDu +nzi kOr -rtz -dpg -kme -bYM -riq -acC -bZa -oBP -aXW +kOr +kOr +ojX +ojX +oNf +pUq +hMG +sUF +bPy +vqR +ssg +lEr +vov +aXf +glh +glh +cCT +mDl qTV -aXO -kjw -hdN -tyW -cqo -oDu -dYK -tyW -hdN -jOa -hdN +fKE +lTe +umc +vCN +vCN +vCN +vCN +vCN +bJA +wEW +pNJ qTV aWh aTM @@ -70640,38 +70833,38 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -emV -mDu -mDu +tZr +vDU mDu kOr -uLM -ftU +kOr +kOr +kOr +ykt +ykt +kOr +kOr +pWS +hlB jYO -bYM -aVG -sqc +vov +nGX cXj -glh -fkB +noW +mpJ +bzl qTV -dSG -gHY -sQY +jRa +lTe +pKm vOO -gSs -ibr -mLH +oGg +oXq +oGg vOO -xUt -sON -xUt +gMd +wEW +rPw qTV aWh aTM @@ -70899,36 +71092,36 @@ aaa aaa aaa aaa -aaa -aaa -aaa -emV +tZr +vDU mDu mDu mDu -kOr -kOr -wwW -euW -wwW -bYM -bYM -aXY -vSf -wLf -rgO +mDu +mDu +mDu +ykt +aeL +bWI +dQF +mDs +kxQ +jnt +peD +glh +lIS qTV -nir -eLA -pKm +sjE +lTe +rZU vOO -oGg -pwy -oGg +hFs +cEF +sML vOO -mkc -shz -ouO +pKm +wEW +axf qTV aWh aTM @@ -71041,153 +71234,153 @@ aaa aaa nzi mDu -aYZ -aYZ -aYZ -aYZ -aaW -aaW -aaW -aYS -bdg -xgp -iIa -aCp -viK -aTV -hTi -aYS -bKI -dzn -sAL -avU -nNi -ilp -rPM -gki -oiA -wAB -uor -pxV -gLT -gRM -djr -aHc -aHP -aHP -aHP -aHP -aHP -aHP -aHP -aHc -aHP -aHP -aHP -aHP -aHP -aHP -aHP -aEO +aYZ +aYZ +aYZ +aYZ +aaW +aaW +aaW +aYS +bdg +xgp +iIa +aCp +viK +aTV +hTi +aYS +bKI +dzn +sAL +avU +nNi +ilp +rPM +gki +oiA +wAB +uor +pxV +gLT +gRM +djr +aHc +aHP +aHP +aHP +aHP +aHP +aHP +aHP +aHc +aHP +aHP +aHP +aHP +aHP +aHP +aHP +aEO +mDu +qDO +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaa +aPW +aPW +aPW +aaa +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +nzi +mDu mDu -qDO -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aaa -aPW -aPW -aPW -aaa -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -nzi mDu mDu -kOr -kOr -iIH -jYO -ftU -pWS -aWn -bYM -bYM -aUu -aZB -aUu -rAt -rAt -rAt -rAt -rAt -rAt -rAt -rAt -rAt -rAt -rAt -rAt -rAt -wkI +mDu +qHb +aWo +dpg +kme +vov +riq +acC +bZa +oBP +aXW +qTV +aXO +kjw +hdN +tyW +cqo +oDu +dYK +tyW +hdN +jOa +hdN +qTV +aWh aTM mDu qDO @@ -71415,36 +71608,36 @@ aaa aaa aaa aaa -aaa -nzi +tZr mDu -kOr -kOr -aSf -jYO -aWo +mDu +mDu +mDu +mDu +ykt +pWS ftU -jYO -jYO -fCq -bYM -aUu -fVO -ctc -aWh -eRD -mph -aWh -aWh -aWh -eRD -mPZ -aWh -aWh +aRS +vov +aVG +sqc +cXj +glh +jmy +qTV +dSG +gHY +sQY +vOO +gSs +ibr +mLH +vOO +xUt +sON +xUt +qTV aWh -eRD -mPZ -nxR aTM mDu qDO @@ -71675,33 +71868,33 @@ aaa aaa nzi mDu -qWF -uJg -pWS -aWo -pWS -aVJ -owF -aWo -pWS -aYa +mDu +mDu +kOr +kOr +wwW +euW +wwW bYM -ykr -aTM -aTM -aTM -aTM -aTM -aTM -aTM -aTM -aTM -aTM -aTM -aTM -aTM -aTM -aTM +vov +aXY +vSf +wLf +rgO +qTV +nir +eLA +pKm +vOO +oGg +pwy +oGg +vOO +mkc +shz +ouO +qTV +aWh aTM mDu qDO @@ -71932,36 +72125,36 @@ aaa aaa nzi mDu -qWF -giv -jYO +mDu +kOr +kOr +iIH jYO -xVg -qMU -aUX -tjq -kme -xzL +ftU +pWS +aWn bYM -aZD +vov +vov +aFT +vov +rAt +rAt +rAt +rAt +rAt +rAt +rAt +rAt +rAt +rAt +rAt +rAt +rAt +wkI aTM mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -wFA +qDO aaa aaa aaa @@ -72189,36 +72382,36 @@ aaa aaa nzi mDu -qWF -aUV -jcv -wQC -pbw -fZU -ggM -pWS -owF +kOr +kOr +aSf jYO -eLj -wma +aWo +ftU +jYO +jYO +fCq +bYM +bYM +fVO +ctc +aWh +eRD +mph +aWh +aWh +aWh +eRD +mPZ +aWh +aWh +aWh +eRD +mPZ +nxR aTM mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -mDu -wFA -aaa +qDO aaa aaa aaa @@ -72446,36 +72639,36 @@ aaa aaa nzi mDu -kOr -aZu -qMR -usZ -rOj -wPX -hUr -jYO +qWF +uJg pWS -hbz +aWo +pWS +aVJ +owF +aWo +pWS +aYa bYM +ykr +aTM +aTM +aTM +aTM +aTM +aTM +aTM +aTM +aTM +aTM +aTM +aTM +aTM +aTM aTM aTM mDu -mDu -vDU -vDU -vDU -vDU -vDU -vDU -vDU -vDU -vDU -vDU -vDU -vDU -wFA -aaa -aaa +qDO aaa aaa aaa @@ -72704,35 +72897,35 @@ aaa nzi mDu qWF -bjL -tpA -idU -hTF -fZU -kZl -pWS -pWS -tmE -kOr -kOr +giv +jYO +jYO +xVg +qMU +aUX +tjq +kme +xzL +bYM +aZD +aTM mDu mDu -qDO -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +mDu +mDu +mDu +mDu +mDu +mDu +mDu +mDu +mDu +mDu +mDu +mDu +mDu +mDu +wFA aaa aaa aaa @@ -72958,68 +73151,68 @@ aaa aaa aaa aaa -nzi -mDu -qWF -fsW -pWS -aWo -ehU -lSs -noQ -pWS -jYO -eXT -kOr -mDu -mDu -mDu -wFA -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +nzi +mDu +qWF +ikx +mfA +ixK +pbw +fZU +ggM +pWS +owF +jYO +eLj +wma +aTM +mDu +mDu +mDu +mDu +mDu +mDu +mDu +mDu +mDu +mDu +mDu +mDu +mDu +mDu +mDu +wFA +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -73217,19 +73410,33 @@ aaa aaa nzi mDu -qWF -dLR -pWS -jYO -mWm -tXc +kOr +tcK +qMR +lQv +rOj +wPX +hUr jYO pWS -pWS -uIe -kOr +hbz +bYM +aTM +aTM mDu mDu +vDU +vDU +vDU +vDU +vDU +vDU +vDU +vDU +vDU +vDU +vDU +vDU wFA aaa aaa @@ -73277,20 +73484,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aab aaa aaa @@ -73474,17 +73667,19 @@ aaa aaa nzi mDu +qWF +dmK +hoy +vCU +hTF +fZU +kZl +pWS +pWS +tmE kOr -kOr -wnq -lJV -cSO -kBx -cSO -tld -bYS -kOr -kOr +aTM +mDu mDu qDO aaa @@ -73546,8 +73741,6 @@ aaa aaa aaa aaa -aaa -aaa aab aaa aaa @@ -73731,18 +73924,20 @@ aaa aaa nzi mDu -mDu -kOr -kOr -qWF qWF -sng -qWF -qWF -kOr +fsW +pWS +aWo +ehU +lSs +noQ +pWS +jYO +eXT kOr mDu mDu +mDu wFA aaa aaa @@ -73803,8 +73998,6 @@ aaa aaa aaa aaa -aaa -aaa aab aaa aaa @@ -73869,134 +74062,136 @@ aaa aaa nzi mDu -pEc -afa -afd -afW -qqM -rJi -ajq -aeq -oyr -aeq -aeq -tAS -tAS -arQ -tAS -wEi -tVZ -ayf -aFk -wEi -aCd -aDf -oEX -aCL -tBy -aVs -oEX -aJt -aKl -aKl -aJv -aLR -aMy -aJv -aNH -aOu -aOP -mDu -mDu -feO -mak -ipF -mDu -mDu -mDu -mno -mDu -mDu -qDO -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aaa -aPW -aPW -aPW -aaa -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tZr -mDu -mDu -mDu -mDu -mDu -mDu -osr -mDu -mDu -mDu +pEc +afa +afd +afW +qqM +rJi +ajq +aeq +oyr +aeq +aeq +tAS +tAS +arQ +tAS +wEi +tVZ +ayf +aFk +wEi +aCd +aDf +oEX +aCL +tBy +aVs +oEX +aJt +aKl +aKl +aJv +aLR +aMy +aJv +aNH +aOu +aOP +mDu +mDu +feO +mak +ipF +mDu +mDu +mDu +mno +mDu +mDu +qDO +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaa +aPW +aPW +aPW +aaa +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +nzi +mDu +qWF +dLR +pWS +jYO +mWm +tXc +jYO +pWS +pWS +uIe +kOr mDu mDu wFA @@ -74060,8 +74255,6 @@ aaa aaa aaa aaa -aaa -aaa aab aaa aaa @@ -74243,21 +74436,21 @@ aaa aaa aaa aaa -aaa -tZr -vDU -vDU -vDU -vDU -vDU -tjy -vDU -vDU -vDU -vDU -wFA -aaa -aaa +nzi +mDu +kOr +kOr +wnq +lJV +cSO +kBx +cSO +tld +bYS +kOr +kOr +mDu +qDO aaa aaa aaa @@ -74500,21 +74693,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ehl -aaa -aaa -aaa -aaa -aaa -aaa -aaa +nzi +mDu +mDu +kOr +kOr +qWF +qWF +sng +qWF +qWF +kOr +kOr +mDu +mDu +wFA aaa aaa aaa @@ -74757,20 +74950,20 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hZo -aaa -aaa -aaa -aaa -aaa -aaa +tZr +mDu +mDu +mDu +mDu +mDu +mDu +osr +mDu +mDu +mDu +mDu +mDu +wFA aaa aaa aaa @@ -75015,18 +75208,18 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -hZo -aaa -aaa -aaa -aaa -aaa +tZr +vDU +vDU +vDU +vDU +vDU +tjy +vDU +vDU +vDU +vDU +wFA aaa aaa aaa @@ -75278,7 +75471,7 @@ aaa aaa aaa aaa -hZo +ehl aaa aaa aaa @@ -75938,13 +76131,13 @@ qrY aeq tAS nIK -arX +aak aqO -mkj +aat oQG -aSv +aak aqO -nCb +aat xnw apl apl @@ -76199,9 +76392,9 @@ aak aqO aat oQG -aSV +aak aqO -okJ +aat xnw apl mDu @@ -76452,13 +76645,13 @@ mDu mDu tBB nIK -aap +aak aqO -abn +aat oQG -baR +aak aqO -ubp +aat xnw apl mDu diff --git a/_maps/map_files/Theseus/TGS_Theseus.dmm b/_maps/map_files/Theseus/TGS_Theseus.dmm index 9565f85be1bd4..9f076fe40d29c 100644 --- a/_maps/map_files/Theseus/TGS_Theseus.dmm +++ b/_maps/map_files/Theseus/TGS_Theseus.dmm @@ -529,10 +529,6 @@ /turf/open/floor/mainship/mono, /area/mainship/hull/starboard_hull) "abZ" = ( -/obj/machinery/power/apc/mainship{ - dir = 4 - }, -/obj/structure/cable, /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) "aca" = ( @@ -1208,6 +1204,13 @@ /obj/effect/ai_node, /turf/open/floor/mainship/floor, /area/mainship/shipboard/firing_range) +"aex" = ( +/obj/docking_port/stationary/marine_dropship/crash_target, +/obj/machinery/landinglight/alamo{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "aey" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -1225,8 +1228,14 @@ /turf/open/floor/mainship/sterile/side, /area/mainship/medical/operating_room_one) "aeI" = ( -/turf/closed/wall/mainship, -/area/mainship/living/officer_study) +/obj/machinery/door/airlock/mainship/maint{ + dir = 2 + }, +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/bridgebunks) "aft" = ( /obj/structure/cable, /obj/effect/turf_decal/warning_stripes/thin{ @@ -1237,6 +1246,12 @@ }, /turf/open/floor/mainship/tcomms, /area/mainship/command/self_destruct) +"afU" = ( +/obj/structure/cable, +/turf/open/floor/mainship/sterile/side{ + dir = 4 + }, +/area/mainship/medical/surgery_hallway) "ahA" = ( /turf/closed/wall/mainship, /area/mainship/command/corporateliaison) @@ -1306,20 +1321,10 @@ }, /turf/open/floor/mainship/mono, /area/mainship/living/starboard_emb) -"akH" = ( -/obj/machinery/door/firedoor/mainship{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/turf/open/floor/mainship/stripesquare, -/area/mainship/hallways/hangar) "alj" = ( /obj/docking_port/stationary/escape_pod, /turf/open/floor/plating, /area/mainship/living/evacuation/pod/four) -"alw" = ( -/turf/closed/wall/mainship/white, -/area/mainship/medical/upper_medical) "alz" = ( /turf/closed/wall/mainship/white, /area/mainship/medical/medical_science) @@ -1339,24 +1344,10 @@ /obj/structure/closet/secure_closet/captain, /turf/open/floor/wood, /area/mainship/living/commandbunks) -"amo" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/bow_hallway) "ann" = ( /obj/structure/ship_ammo/cas/rocket/banshee, /turf/open/floor/mainship/cargo, /area/mainship/hallways/hangar) -"anQ" = ( -/obj/structure/ship_ammo/cas/heavygun, -/obj/machinery/camera/autoname/mainship, -/turf/open/floor/mainship/cargo, -/area/mainship/hallways/hangar) "aop" = ( /obj/structure/sink{ dir = 4 @@ -1394,11 +1385,6 @@ /obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/hull/starboard_hull) -"apj" = ( -/turf/open/floor/mainship/cargo/arrow{ - dir = 8 - }, -/area/mainship/hallways/hangar) "aqz" = ( /obj/structure/bed/chair/nometal, /obj/machinery/light/mainship{ @@ -1417,21 +1403,18 @@ }, /turf/open/floor/mainship/tcomms, /area/mainship/command/self_destruct) +"aqR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/wood, +/area/mainship/living/officer_rnr) "ars" = ( /obj/machinery/robotic_fabricator, /turf/open/floor/mainship/sterile/side{ dir = 1 }, /area/mainship/medical/operating_room_three) -"aru" = ( -/obj/structure/table/mainship/nometal, -/obj/item/clothing/suit/chef/classic, -/obj/item/tool/kitchen/rollingpin, -/obj/item/clothing/head/chefhat, -/obj/item/clothing/gloves/latex, -/obj/item/reagent_containers/food/drinks/shaker, -/turf/open/floor/mainship/mono, -/area/mainship/living/grunt_rnr) "arE" = ( /obj/machinery/light{ dir = 4 @@ -1449,29 +1432,13 @@ dir = 5 }, /area/mainship/living/pilotbunks) -"arP" = ( -/obj/structure/toilet{ - dir = 4 - }, -/obj/structure/mirror{ - dir = 4 - }, -/turf/open/floor/mainship/mono, -/area/mainship/living/numbertwobunks) "arQ" = ( /turf/closed/wall/mainship/research/containment/wall/north, /area/mainship/medical/medical_science) "arR" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 4 - }, -/obj/machinery/light/mainship{ - dir = 8 - }, -/turf/open/floor/carpet/side{ - dir = 9 - }, -/area/mainship/living/numbertwobunks) +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/mainship/hallways/hangar) "arU" = ( /obj/machinery/light/mainship{ dir = 1 @@ -1598,11 +1565,6 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) -"avw" = ( -/turf/open/floor/mainship/sterile/side{ - dir = 4 - }, -/area/mainship/medical/medical_science) "avx" = ( /turf/open/floor/mainship/research/containment/floor2{ dir = 8 @@ -1621,15 +1583,6 @@ dir = 4 }, /area/mainship/medical/medical_science) -"avL" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/structure/cable, -/obj/structure/disposalpipe/segment/corner{ - dir = 1 - }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/bow_hallway) "avW" = ( /turf/open/floor/mainship/cargo/arrow{ dir = 4 @@ -1813,12 +1766,6 @@ dir = 4 }, /area/mainship/living/port_emb) -"aAN" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 6 - }, -/turf/open/floor/mainship/orange/corner, -/area/mainship/hallways/hangar) "aAP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -1860,13 +1807,6 @@ }, /turf/open/floor/mainship/tcomms, /area/mainship/command/self_destruct) -"aCh" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/mainship/mono, -/area/mainship/living/officer_study) "aCq" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -1893,28 +1833,10 @@ /obj/machinery/camera/autoname/mainship, /turf/open/floor/mainship/mono, /area/mainship/squads/alpha) -"aDa" = ( -/obj/structure/table/woodentable, -/obj/item/reagent_containers/food/drinks/flask/barflask, -/obj/item/reagent_containers/food/drinks/bottle/davenport, -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/flashlight/lamp/green, -/turf/open/floor/carpet/side{ - dir = 1 - }, -/area/mainship/living/numbertwobunks) "aDh" = ( /obj/structure/window/framed/mainship, /turf/open/floor/plating, /area/mainship/engineering/lower_engineering) -"aDo" = ( -/obj/structure/bed/chair/office/dark{ - dir = 1 - }, -/turf/open/floor/mainship/sterile/side{ - dir = 8 - }, -/area/mainship/medical/upper_medical) "aDE" = ( /obj/machinery/holopad, /turf/open/floor/mainship/sterile/dark, @@ -1963,11 +1885,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/living/grunt_rnr) -"aEX" = ( -/obj/structure/window/framed/mainship/white, -/obj/machinery/door/firedoor/mainship, -/turf/open/floor/plating, -/area/mainship/medical/medical_science) "aFq" = ( /obj/machinery/air_alarm, /turf/open/floor/mainship/mono, @@ -1991,11 +1908,6 @@ }, /turf/open/floor/grass, /area/mainship/living/starboard_garden) -"aGG" = ( -/obj/machinery/air_alarm, -/obj/machinery/vending/medical/shipside, -/turf/open/floor/mainship/sterile/corner, -/area/mainship/medical/medical_science) "aGL" = ( /obj/structure/janitorialcart, /obj/item/tool/mop, @@ -2120,6 +2032,12 @@ /obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/engineering/lower_engineering) +"aLP" = ( +/obj/vehicle/ridden/powerloader, +/turf/open/floor/mainship/orange{ + dir = 8 + }, +/area/mainship/hallways/hangar) "aLX" = ( /obj/machinery/camera/autoname/mainship, /turf/open/floor/mainship/mono, @@ -2164,22 +2082,28 @@ /obj/machinery/camera/autoname/mainship, /turf/open/floor/mainship/floor, /area/mainship/living/cryo_cells) +"aNh" = ( +/obj/structure/window/framed/mainship/white, +/obj/machinery/door/firedoor/mainship, +/turf/open/floor/plating, +/area/mainship/medical/cmo_office) +"aNC" = ( +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/obj/machinery/vending/nanomed, +/obj/item/robot_parts/robot_suit, +/obj/item/clothing/under/wedding/bride_white, +/turf/open/floor/mainship/black{ + dir = 1 + }, +/area/mainship/living/tankerbunks) "aNO" = ( /obj/machinery/camera/autoname/mainship{ dir = 1 }, /turf/open/floor/mainship/orange, /area/mainship/engineering/lower_engine_monitoring) -"aOx" = ( -/obj/machinery/shower{ - dir = 4 - }, -/obj/structure/window/reinforced/tinted/frosted{ - dir = 1 - }, -/obj/machinery/door/window, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/living/numbertwobunks) "aPe" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/mainship/floor, @@ -2201,6 +2125,15 @@ dir = 4 }, /area/mainship/hull/port_hull) +"aRw" = ( +/obj/structure/table/mainship/nometal, +/obj/item/mass_spectrometer, +/obj/item/paper, +/obj/item/tool/pen, +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/mainship/medical/chemistry) "aRC" = ( /obj/machinery/firealarm{ dir = 1 @@ -2221,17 +2154,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/engineering/ce_room) -"aSU" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/reagentgrinder, -/obj/item/stack/sheet/mineral/phoron, -/obj/item/stack/sheet/mineral/phoron, -/obj/item/stack/sheet/mineral/phoron, -/obj/item/stack/sheet/mineral/phoron, -/turf/open/floor/mainship/sterile/side{ - dir = 1 - }, -/area/mainship/medical/medical_science) "aTs" = ( /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/hangar) @@ -2267,17 +2189,6 @@ dir = 8 }, /area/mainship/hallways/hangar/droppod) -"aUG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment/corner{ - dir = 8 - }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/bow_hallway) "aVa" = ( /obj/machinery/light/mainship/small{ dir = 8 @@ -2395,12 +2306,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/squads/alpha) -"aWX" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 4 - }, -/turf/open/floor/mainship/mono, -/area/mainship/hull/starboard_hull) "aWY" = ( /obj/structure/window/framed/mainship, /obj/machinery/door/firedoor/mainship, @@ -2478,6 +2383,19 @@ dir = 1 }, /area/mainship/living/starboard_emb) +"aYJ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 8 + }, +/turf/open/floor/wood, +/area/mainship/living/officer_rnr) "aZd" = ( /obj/structure/table/mainship/nometal, /obj/effect/spawner/random/misc/table_lighting, @@ -2739,18 +2657,6 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/mainship/mono, /area/mainship/squads/alpha) -"bcA" = ( -/obj/structure/closet/secure_closet/CMO, -/turf/open/floor/mainship/sterile/corner{ - dir = 4 - }, -/area/mainship/medical/upper_medical) -"bcB" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/snackweighted, -/turf/open/floor/mainship/silver{ - dir = 1 - }, -/area/mainship/hallways/bow_hallway) "bcY" = ( /obj/machinery/camera/autoname/mainship, /obj/machinery/computer/telecomms/server/preset, @@ -2761,10 +2667,6 @@ /obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/hull/starboard_hull) -"bdc" = ( -/obj/structure/cable, -/turf/open/floor/mainship/tcomms, -/area/mainship/command/telecomms) "bdh" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -2865,12 +2767,6 @@ }, /turf/open/floor/mainship/ai, /area/mainship/command/airoom) -"bdU" = ( -/obj/machinery/door/airlock/mainship/command/FCDRquarters{ - dir = 2 - }, -/turf/open/floor/mainship/mono, -/area/mainship/living/numbertwobunks) "bdW" = ( /obj/structure/ship_ammo/cas/rocket/widowmaker, /turf/open/floor/mainship/cargo, @@ -2883,20 +2779,13 @@ dir = 8 }, /area/mainship/living/basketball) -"bdZ" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, +"bea" = ( +/obj/structure/ship_ammo/cas/heavygun, /obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 + dir = 8 }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) -"bea" = ( -/turf/open/floor/mainship/cargo/arrow{ - dir = 4 - }, -/area/mainship/hallways/hangar) "bed" = ( /obj/structure/table/mainship/nometal, /obj/machinery/door/window{ @@ -2922,6 +2811,27 @@ dir = 10 }, /area/mainship/shipboard/firing_range) +"bet" = ( +/obj/structure/table/mainship/nometal, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/reagent_containers/spray/cleaner, +/obj/machinery/door_control/mainship/research{ + dir = 4; + name = "Exterior Doors"; + pixel_x = -10; + pixel_y = 8 + }, +/obj/machinery/firealarm{ + dir = 4 + }, +/obj/machinery/reagentgrinder, +/obj/item/stack/sheet/mineral/phoron, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/glass/beaker/large, +/turf/open/floor/mainship/sterile/side{ + dir = 8 + }, +/area/mainship/medical/medical_science) "bev" = ( /obj/structure/table/mainship/nometal, /obj/machinery/door/window/right{ @@ -3003,7 +2913,7 @@ dir = 4 }, /turf/open/floor/wood, -/area/mainship/living/officer_study) +/area/mainship/living/officer_rnr) "bfU" = ( /obj/structure/window/framed/mainship/hull, /turf/open/floor/plating, @@ -3081,61 +2991,24 @@ /obj/machinery/door/poddoor/shutters/mainship/selfdestruct, /turf/open/floor/mainship/stripesquare, /area/mainship/engineering/engine_core) -"bhd" = ( +"bhg" = ( /obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 + dir = 1; + pixel_y = 1 }, /obj/effect/turf_decal/warning_stripes/thin{ - dir = 6 + dir = 4 }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) -"bhg" = ( -/obj/machinery/light/mainship, -/turf/open/floor/mainship/cargo/arrow{ - dir = 8 - }, -/area/mainship/hallways/hangar) "bhh" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 5 - }, -/obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) -"bhi" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar/droppod) -"bhj" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 10 - }, -/turf/open/floor/mainship/mono, +/obj/effect/ai_node, +/turf/open/floor/mainship/cargo, /area/mainship/hallways/hangar) -"bhl" = ( -/obj/structure/cable, -/obj/machinery/power/apc/mainship, -/turf/open/floor/mainship/green{ - dir = 9 - }, -/area/mainship/living/numbertwobunks) "bhm" = ( /obj/structure/cable, /turf/open/floor/mainship/silver/corner, /area/mainship/command/cic) -"bhp" = ( -/obj/machinery/light/mainship{ - dir = 8 - }, -/obj/structure/closet/toolcloset, -/turf/open/floor/mainship/mono, -/area/mainship/hull/starboard_hull) "bhr" = ( /obj/machinery/holopad, /turf/open/floor/mainship/floor, @@ -3184,25 +3057,6 @@ }, /turf/open/floor/wood, /area/mainship/living/basketball) -"bif" = ( -/obj/structure/table/mainship/nometal, -/obj/effect/spawner/random/misc/paperbin, -/obj/item/tool/pen/blue, -/obj/item/storage/box/ids, -/obj/item/storage/briefcase, -/obj/item/clipboard{ - pixel_x = 4 - }, -/obj/item/taperecorder, -/turf/open/floor/mainship/floor, -/area/mainship/living/numbertwobunks) -"bii" = ( -/obj/structure/table/mainship/nometal, -/obj/item/whistle, -/obj/item/megaphone, -/obj/item/ammo_magazine/packet/acp, -/turf/open/floor/mainship/floor, -/area/mainship/living/numbertwobunks) "bij" = ( /obj/structure/window/framed/mainship, /obj/machinery/door/firedoor/mainship{ @@ -3210,10 +3064,6 @@ }, /turf/open/floor/plating, /area/mainship/living/cafeteria_starboard) -"bip" = ( -/obj/machinery/holopad, -/turf/open/floor/mainship/floor, -/area/mainship/living/numbertwobunks) "biq" = ( /obj/effect/turf_decal/warning_stripes/nscenter, /obj/effect/turf_decal/warning_stripes, @@ -3340,6 +3190,12 @@ /obj/docking_port/stationary/marine_dropship/crash_target, /turf/open/floor/mainship/floor, /area/mainship/hallways/hangar) +"bjH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "bjM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -3393,19 +3249,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/starboard_hallway) -"bjY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 4 - }, -/obj/structure/disposalpipe/junction/flipped{ - dir = 1 - }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/bow_hallway) "bkb" = ( /obj/machinery/light/mainship{ dir = 1 @@ -3627,16 +3470,6 @@ }, /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/hangar) -"bkP" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/computer/marine_card, -/obj/machinery/camera/autoname/mainship{ - dir = 4 - }, -/turf/open/floor/mainship/green{ - dir = 8 - }, -/area/mainship/living/numbertwobunks) "bkR" = ( /obj/machinery/firealarm{ dir = 4 @@ -3645,13 +3478,6 @@ /obj/structure/drop_pod_launcher, /turf/open/floor/mainship/cargo, /area/mainship/hallways/hangar/droppod) -"bkT" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 1 - }, -/obj/machinery/cic_maptable/droppod_maptable, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar/droppod) "bkU" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 9 @@ -3688,10 +3514,6 @@ /obj/structure/cable, /turf/open/floor/mainship/silver, /area/mainship/command/cic) -"bla" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/mainship/mono, -/area/mainship/hull/starboard_hull) "blb" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -3743,21 +3565,16 @@ /turf/open/floor/mainship/floor, /area/mainship/engineering/ce_room) "blm" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 8 +/obj/effect/turf_decal/siding/purple/corner{ + dir = 1 }, -/obj/effect/landmark/start/job/staffofficer, /turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) +/area/mainship/living/bridgebunks) "bln" = ( /obj/structure/table/mainship/nometal, /obj/item/storage/donut_box, /turf/open/floor/mainship/floor, /area/mainship/living/cafeteria_port) -"blo" = ( -/obj/structure/dropship_equipment/cas/weapon/rocket_pod, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) "blq" = ( /obj/structure/largecrate/supply/supplies/water, /turf/open/floor/mainship/orange, @@ -3797,14 +3614,6 @@ }, /turf/open/floor/mainship/floor, /area/mainship/shipboard/firing_range) -"blL" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/power/apc/mainship{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) "blO" = ( /obj/machinery/vending/hydroseeds, /turf/open/floor/mainship/mono, @@ -3855,14 +3664,6 @@ dir = 8 }, /area/mainship/command/cic) -"bmF" = ( -/obj/machinery/air_alarm{ - dir = 8 - }, -/turf/open/floor/mainship/green{ - dir = 4 - }, -/area/mainship/living/numbertwobunks) "bne" = ( /obj/machinery/air_alarm{ dir = 1 @@ -3879,10 +3680,12 @@ dir = 1 }, /area/mainship/medical/operating_room_one) -"bnu" = ( -/obj/structure/cable, -/turf/open/floor/prison/kitchen, -/area/mainship/living/officer_rnr) +"bnr" = ( +/obj/machinery/camera/autoname/mainship{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) "bnx" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -4058,42 +3861,6 @@ dir = 1 }, /area/mainship/medical/lower_medical) -"bpc" = ( -/obj/structure/table/mainship/nometal, -/obj/item/storage/box/pillbottles, -/obj/item/storage/box/pillbottles, -/obj/item/storage/box/pillbottles{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/mass_spectrometer, -/obj/structure/cable, -/obj/machinery/power/apc/mainship, -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/sterile/side{ - dir = 1 - }, -/area/mainship/medical/medical_science) -"bpd" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ - dir = 8; - on = 1 - }, -/obj/structure/cable, -/turf/open/floor/mainship/sterile/dark, -/area/mainship/medical/medical_science) -"bpf" = ( -/obj/machinery/iv_drip, -/obj/item/radio/intercom/general, -/turf/open/floor/mainship/sterile/corner, -/area/mainship/medical/medical_science) -"bpj" = ( -/obj/machinery/chem_master, -/obj/item/reagent_containers/glass/beaker/bluespace, -/turf/open/floor/mainship/sterile/side, -/area/mainship/medical/medical_science) "bpk" = ( /obj/machinery/light/mainship{ dir = 8 @@ -4189,19 +3956,27 @@ "bpX" = ( /turf/closed/wall/mainship, /area/mainship/engineering/lower_engine_monitoring) +"bqt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/bow_hallway) "bqA" = ( /obj/docking_port/stationary/marine_dropship/crash_target, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "bqC" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/open/floor/mainship/green{ - dir = 10 - }, -/area/mainship/living/numbertwobunks) +/obj/structure/dropship_equipment/cas/weapon/rocket_pod, +/turf/open/floor/mainship/cargo, +/area/mainship/hallways/hangar) "bqK" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 @@ -4211,12 +3986,6 @@ dir = 8 }, /area/mainship/hallways/hangar/droppod) -"bqL" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar/droppod) "bqN" = ( /obj/structure/cable, /turf/open/floor/mainship/sterile/dark, @@ -4246,16 +4015,6 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) -"bqV" = ( -/obj/machinery/door/airlock/multi_tile/mainship/research{ - dir = 2; - name = "Research Chemical Lab" - }, -/obj/machinery/door/firedoor/multi_tile{ - dir = 1 - }, -/turf/open/floor/mainship/sterile/side, -/area/mainship/medical/medical_science) "bqW" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 10 @@ -4413,10 +4172,6 @@ "brS" = ( /turf/open/floor/mainship/floor, /area/mainship/hallways/aft_hallway) -"brW" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/mainship/mono, -/area/mainship/hull/starboard_hull) "brX" = ( /obj/effect/turf_decal/warning_stripes/thin, /turf/open/floor/mainship/mono, @@ -4546,7 +4301,7 @@ /area/mainship/engineering/lower_engineering) "btv" = ( /turf/open/floor/wood, -/area/mainship/living/officer_study) +/area/mainship/living/officer_rnr) "btF" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -4560,12 +4315,6 @@ dir = 10 }, /area/mainship/shipboard/firing_range) -"btY" = ( -/obj/machinery/firealarm{ - dir = 8 - }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) "buj" = ( /obj/docking_port/stationary/marine_dropship/crash_target, /turf/open/floor/mainship/red, @@ -4603,7 +4352,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, -/turf/open/floor/mainship/floor, +/turf/open/floor/mainship/sterile/white, /area/mainship/living/bridgebunks) "buD" = ( /obj/effect/landmark/start/job/medicalofficer, @@ -4688,12 +4437,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/engineering/engine_core) -"bvg" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/mainship/silver{ - dir = 8 - }, -/area/mainship/hallways/bow_hallway) "bvk" = ( /obj/structure/cable, /obj/machinery/power/apc/mainship{ @@ -4868,19 +4611,6 @@ /obj/machinery/power/fusion_engine/preset, /turf/open/floor/mainship/stripesquare, /area/mainship/engineering/engine_core) -"bxT" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/mainship/command/FCDRoffice{ - dir = 2 - }, -/obj/structure/cable, -/obj/machinery/door/firedoor/mainship{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/turf/open/floor/mainship/mono, -/area/mainship/living/numbertwobunks) "bxX" = ( /obj/effect/ai_node, /turf/open/floor/mainship/green{ @@ -4971,31 +4701,6 @@ /obj/machinery/vending/medical/shipside, /turf/open/floor/mainship/sterile/side, /area/mainship/medical/chemistry) -"byX" = ( -/obj/structure/table/mainship/nometal, -/obj/item/tool/hand_labeler, -/turf/open/floor/mainship/sterile/side, -/area/mainship/medical/chemistry) -"byZ" = ( -/obj/structure/table/mainship/nometal, -/obj/item/storage/box/syringes, -/obj/item/reagent_containers/dropper, -/turf/open/floor/mainship/sterile/corner, -/area/mainship/medical/chemistry) -"bzj" = ( -/obj/structure/table/mainship/nometal, -/obj/item/storage/box/gloves, -/obj/item/storage/box/beakers{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/storage/box/pillbottles, -/obj/machinery/light/mainship, -/turf/open/floor/mainship/sterile/corner{ - dir = 4 - }, -/area/mainship/medical/chemistry) "bzq" = ( /obj/machinery/vending/uniform_supply, /turf/open/floor/mainship/floor, @@ -5087,9 +4792,13 @@ /turf/closed/wall/mainship, /area/mainship/squads/alpha) "bAh" = ( -/obj/machinery/holopad, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar) +/obj/structure/cable, +/obj/machinery/firealarm{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) "bAr" = ( /obj/machinery/vending/weapon, /turf/open/floor/mainship/mono, @@ -5180,36 +4889,6 @@ "bBI" = ( /turf/closed/wall/mainship/white, /area/mainship/medical/operating_room_three) -"bBK" = ( -/obj/structure/table/mainship/nometal, -/obj/item/storage/box/masks{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/storage/box/gloves{ - pixel_x = -5; - pixel_y = -5 - }, -/obj/item/storage/box/gloves{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/box/masks, -/turf/open/floor/mainship/sterile/side{ - dir = 1 - }, -/area/mainship/medical/surgery_hallway) -"bBL" = ( -/obj/structure/table/mainship/nometal, -/obj/item/storage/box/pillbottles, -/obj/item/storage/box/rxglasses{ - pixel_x = 5; - pixel_y = 5 - }, -/turf/open/floor/mainship/sterile/side{ - dir = 1 - }, -/area/mainship/medical/surgery_hallway) "bBX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -5281,6 +4960,13 @@ /obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/living/cryo_cells) +"bCF" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/mainship/sterile/corner{ + dir = 1 + }, +/area/mainship/medical/cmo_office) "bCK" = ( /obj/structure/ship_ammo/cas/minirocket, /turf/open/floor/mainship/cargo, @@ -5553,20 +5239,6 @@ dir = 1 }, /area/mainship/medical/medical_science) -"bHm" = ( -/obj/structure/table/mainship/nometal, -/obj/effect/spawner/random/engineering/radio/highspawn, -/obj/item/healthanalyzer, -/obj/item/healthanalyzer, -/obj/item/reagent_scanner, -/obj/machinery/light/mainship, -/turf/open/floor/mainship/sterile/side, -/area/mainship/medical/surgery_hallway) -"bHn" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/light/mainship, -/turf/open/floor/mainship/sterile/side, -/area/mainship/medical/surgery_hallway) "bHo" = ( /obj/machinery/computer/med_data, /turf/open/floor/mainship/sterile/side, @@ -5615,9 +5287,6 @@ dir = 1 }, /area/mainship/squads/alpha) -"bIs" = ( -/turf/open/floor/mainship/silver/corner, -/area/mainship/command/bridge) "bIw" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -5639,16 +5308,6 @@ dir = 1 }, /area/mainship/medical/medical_science) -"bIF" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/door/poddoor/mainship/mech, -/turf/open/floor/mainship/black{ - dir = 1 - }, -/area/mainship/living/tankerbunks) "bIH" = ( /obj/machinery/door/airlock/mainship/marine/requisitions{ dir = 1; @@ -5951,11 +5610,6 @@ /obj/item/toy/plush/carp, /turf/open/floor/mainship/mono, /area/mainship/living/port_emb) -"bLs" = ( -/obj/structure/cable, -/obj/machinery/power/apc/mainship, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) "bLt" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -6157,22 +5811,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/port_umbilical) -"bPk" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 6 - }, -/obj/structure/disposalpipe/segment/corner{ - dir = 4 - }, -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/bow_hallway) "bPn" = ( /obj/effect/turf_decal/warning_stripes/thin, /obj/effect/turf_decal/warning_stripes/thin{ @@ -6204,12 +5842,14 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/hangar) "bPC" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, -/obj/structure/disposalpipe/junction/flipped{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "bPG" = ( @@ -6330,8 +5970,10 @@ /obj/machinery/camera/autoname/mainship{ dir = 4 }, +/obj/structure/table/mainship/nometal, +/obj/item/storage/box/donkpockets, /turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) +/area/mainship/living/bridgebunks) "bQt" = ( /obj/machinery/vending/nanomed, /obj/structure/window/reinforced{ @@ -6427,6 +6069,11 @@ }, /turf/open/floor/mainship/mono, /area/mainship/squads/delta) +"bQV" = ( +/turf/open/floor/mainship/silver/corner{ + dir = 4 + }, +/area/mainship/command/bridge) "bQW" = ( /obj/machinery/light/mainship{ dir = 4 @@ -6459,13 +6106,6 @@ "bRg" = ( /turf/open/floor/mainship/orange, /area/mainship/living/cafeteria_starboard) -"bRh" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/ai_node, -/turf/open/floor/mainship/sterile/side, -/area/mainship/medical/lower_medical) "bRj" = ( /obj/machinery/door/airlock/mainship/engineering/CSEoffice{ dir = 2 @@ -6542,13 +6182,11 @@ /turf/open/floor/mainship/floor, /area/mainship/living/grunt_rnr) "bRN" = ( -/obj/structure/table/mainship/nometal, -/obj/effect/spawner/random/misc/cigarettes, -/obj/machinery/light/mainship{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/mainship/mono, -/area/mainship/living/officer_study) +/turf/open/floor/wood, +/area/mainship/living/officer_rnr) "bRO" = ( /obj/effect/ai_node, /turf/open/floor/mainship/orange/corner{ @@ -6595,7 +6233,7 @@ /obj/machinery/light/mainship/small{ dir = 8 }, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/sterile/white, /area/mainship/living/bridgebunks) "bSf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -6611,13 +6249,6 @@ "bSw" = ( /turf/closed/wall/mainship, /area/mainship/living/grunt_rnr) -"bSy" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ - dir = 4; - on = 1 - }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/bow_hallway) "bSA" = ( /obj/structure/table/mainship/nometal, /obj/machinery/chem_dispenser/beer, @@ -6633,9 +6264,12 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "bSD" = ( -/obj/structure/closet/secure_closet/staff_officer, -/turf/open/floor/mainship/mono, -/area/mainship/living/officer_study) +/obj/structure/table/mainship/nometal, +/obj/machinery/light/mainship/small{ + dir = 1 + }, +/turf/open/floor/wood, +/area/mainship/living/bridgebunks) "bSG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -6645,7 +6279,7 @@ dir = 4 }, /turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) +/area/mainship/living/bridgebunks) "bSO" = ( /turf/closed/wall/mainship, /area/mainship/living/port_emb) @@ -6813,14 +6447,21 @@ /obj/structure/bed/chair/wood/wings{ dir = 8 }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/landmark/start/job/staffofficer, /turf/open/floor/carpet/side{ dir = 5 }, -/area/mainship/living/officer_study) +/area/mainship/living/officer_rnr) "bUi" = ( /obj/machinery/holopad, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, /turf/open/floor/wood, -/area/mainship/living/officer_study) +/area/mainship/living/officer_rnr) "bUj" = ( /turf/open/floor/mainship_hull/dir{ dir = 9 @@ -6880,17 +6521,16 @@ /obj/structure/bed/chair/nometal, /turf/open/floor/mainship/floor, /area/mainship/living/cafeteria_port) +"bUZ" = ( +/obj/machinery/computer/med_data, +/turf/open/floor/mainship/sterile/corner, +/area/mainship/medical/cmo_office) "bVf" = ( /obj/structure/bed/chair/comfy/brown{ dir = 4 }, /turf/open/floor/wood, /area/mainship/command/corporateliaison) -"bVj" = ( -/obj/machinery/holopad, -/obj/effect/ai_node, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/bow_hallway) "bVq" = ( /obj/structure/cable, /obj/machinery/holopad, @@ -6914,29 +6554,32 @@ amount = 25 }, /obj/item/storage/briefcase/inflatable, -/obj/item/stack/sheet/glass/large_stack, +/obj/item/stack/sheet/glass/glass/large_stack, /turf/open/floor/mainship/floor, /area/mainship/hallways/repair_bay) "bVF" = ( /obj/structure/table/woodentable, /obj/item/storage/donut_box, +/obj/item/binoculars, /turf/open/floor/carpet, -/area/mainship/living/officer_study) +/area/mainship/living/officer_rnr) "bVG" = ( /obj/structure/bed/chair/wood/wings{ dir = 8 }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/carpet/side{ dir = 4 }, -/area/mainship/living/officer_study) +/area/mainship/living/officer_rnr) "bVH" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, /turf/open/floor/wood, -/area/mainship/living/officer_study) +/area/mainship/living/officer_rnr) "bVJ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -6957,6 +6600,14 @@ /obj/machinery/door/airlock/mainship/evacuation, /turf/open/floor/mainship/mono, /area/mainship/living/evacuation/pod/four) +"bWc" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, +/turf/open/floor/plating/icefloor/warnplate{ + dir = 4 + }, +/area/mainship/living/tankerbunks) "bWd" = ( /turf/open/floor/mainship/mono, /area/mainship/living/cafeteria_port) @@ -6978,10 +6629,16 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/port_hallway) "bWH" = ( -/obj/structure/table/mainship/nometal, -/obj/item/binoculars, +/obj/machinery/door/airlock/mainship/generic{ + dir = 2; + name = "\improper Officer's Bunk" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, /turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) +/area/mainship/living/bridgebunks) "bWI" = ( /obj/effect/spawner/random/misc/structure/flavorvending/coffeeweighted, /turf/open/floor/mainship/mono, @@ -6990,20 +6647,23 @@ /obj/structure/bed/chair/wood/wings{ dir = 8 }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/landmark/start/job/staffofficer, /turf/open/floor/carpet/side{ dir = 6 }, -/area/mainship/living/officer_study) +/area/mainship/living/officer_rnr) "bWK" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/light/mainship{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, /turf/open/floor/wood, -/area/mainship/living/officer_study) +/area/mainship/living/officer_rnr) "bWL" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -7117,7 +6777,7 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/stripesquare, -/area/mainship/hallways/hangar) +/area/mainship/living/numbertwobunks) "bYz" = ( /turf/open/floor/mainship/orange{ dir = 4 @@ -7144,7 +6804,7 @@ dir = 6 }, /obj/machinery/vending/nanomed, -/turf/open/floor/mainship/floor, +/turf/open/floor/mainship/sterile/white, /area/mainship/living/bridgebunks) "bYW" = ( /obj/structure/cable, @@ -7152,16 +6812,22 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark_blue, +/turf/open/floor/wood, +/area/mainship/living/officer_rnr) "bYY" = ( /obj/machinery/light/mainship/small, /turf/open/floor/mainship/mono, /area/mainship/hull/starboard_hull) "bZa" = ( -/obj/structure/table/mainship/nometal, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, /turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) +/area/mainship/living/bridgebunks) "bZb" = ( /obj/structure/bed/chair/wood/normal{ dir = 8 @@ -7178,15 +6844,6 @@ /obj/machinery/door/airlock/mainship/maint, /turf/open/floor/mainship/silver, /area/mainship/hull/starboard_hull) -"bZv" = ( -/turf/open/floor/plating/icefloor/warnplate{ - dir = 4 - }, -/area/mainship/living/tankerbunks) -"bZL" = ( -/obj/effect/ai_node, -/turf/open/floor/mainship/silver, -/area/mainship/hallways/bow_hallway) "bZN" = ( /obj/machinery/holopad, /turf/open/floor/mainship/mono, @@ -7280,12 +6937,12 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "cbi" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/camera/autoname/mainship{ - dir = 8 +/obj/machinery/door/airlock/mainship/generic{ + dir = 8; + name = "\improper Officer's Bunk" }, /turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) +/area/mainship/living/bridgebunks) "cbj" = ( /turf/open/floor/mainship/blue{ dir = 8 @@ -7334,25 +6991,18 @@ "cbT" = ( /obj/machinery/power/apc/mainship, /obj/structure/cable, -/turf/open/floor/mainship/floor, +/turf/open/floor/mainship/sterile/white, /area/mainship/living/bridgebunks) "cbU" = ( /obj/structure/sink{ dir = 1 }, -/turf/open/floor/mainship/floor, +/turf/open/floor/mainship/sterile/white, /area/mainship/living/bridgebunks) "cbW" = ( /obj/structure/closet/secure_closet/personal/cabinet, /turf/open/floor/wood, /area/mainship/living/bridgebunks) -"cbX" = ( -/obj/machinery/door/firedoor/mainship{ - dir = 2 - }, -/obj/machinery/door/airlock/multi_tile/mainship/comdoor/free_access, -/turf/open/floor/mainship/mono, -/area/mainship/command/bridge) "ccb" = ( /obj/machinery/light/mainship, /obj/machinery/seed_extractor, @@ -7372,12 +7022,6 @@ /obj/structure/closet/crate/freezer, /turf/open/floor/mainship/mono, /area/mainship/living/grunt_rnr) -"ccd" = ( -/obj/machinery/light/mainship{ - dir = 8 - }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) "ccf" = ( /obj/structure/closet, /obj/item/radio/intercom/general, @@ -7399,13 +7043,6 @@ "ccB" = ( /turf/open/floor/plating/plating_catwalk, /area/mainship/shipboard/port_point_defense) -"ccE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/bow_hallway) "ccQ" = ( /obj/machinery/door/airlock/mainship/maint{ dir = 2 @@ -7505,6 +7142,20 @@ /obj/effect/turf_decal/warning_stripes/thick, /turf/open/floor/plating, /area/mainship/hallways/hangar) +"ceW" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "cfd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -7528,14 +7179,6 @@ dir = 1 }, /area/mainship/living/starboard_emb) -"cge" = ( -/obj/structure/table/mainship/nometal, -/obj/item/book/manual/medical_diagnostics_manual, -/obj/item/megaphone, -/turf/open/floor/mainship/sterile/side{ - dir = 4 - }, -/area/mainship/medical/upper_medical) "cgn" = ( /obj/machinery/light/mainship, /obj/structure/rack, @@ -7612,10 +7255,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/medical/surgery_hallway) -"ckX" = ( -/obj/machinery/computer/pandemic, -/turf/open/floor/mainship/sterile/side, -/area/mainship/medical/medical_science) "cli" = ( /obj/effect/turf_decal/warning_stripes/nscenter, /obj/effect/turf_decal/warning_stripes/thin{ @@ -7671,16 +7310,11 @@ /turf/open/floor/mainship/mono, /area/mainship/medical/surgery_hallway) "coU" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 10 - }, -/turf/open/floor/mainship/orange{ - dir = 4 - }, -/area/mainship/hallways/hangar) +/obj/structure/table/mainship/nometal, +/obj/structure/bedsheetbin, +/obj/effect/spawner/random/misc/soap, +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) "cqq" = ( /obj/structure/bed, /obj/item/bedsheet/medical, @@ -7727,6 +7361,14 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hull/starboard_hull) +"ctS" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/structure/cable, +/turf/open/floor/mainship/silver/corner{ + dir = 1 + }, +/area/mainship/hallways/bow_hallway) "cuB" = ( /obj/machinery/air_alarm{ dir = 1 @@ -7783,6 +7425,13 @@ /obj/machinery/light/mainship, /turf/open/floor/mainship/mono, /area/mainship/command/corporateliaison) +"cwO" = ( +/obj/machinery/air_alarm, +/obj/structure/closet/secure_closet/chemical, +/obj/item/storage/box/pillbottles, +/obj/item/storage/syringe_case/regular, +/turf/open/floor/mainship/sterile/corner, +/area/mainship/medical/surgery_hallway) "cxa" = ( /obj/structure/cable, /obj/machinery/power/apc/mainship/hardened, @@ -7823,31 +7472,12 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/port_hull) "cyf" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/turf/open/floor/mainship/orange{ - dir = 4 - }, -/area/mainship/hallways/hangar) -"cyg" = ( -/obj/structure/table/mainship/nometal, -/obj/item/storage/box/pillbottles, -/obj/item/storage/box/pillbottles, -/obj/item/storage/box/pillbottles{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/mass_spectrometer, -/obj/item/tool/pen, -/obj/structure/cable, -/obj/machinery/power/apc/mainship{ - dir = 8 - }, -/turf/open/floor/mainship/sterile/side{ - dir = 4 +/obj/effect/landmark/start/job/synthetic, +/obj/machinery/camera/autoname/mainship{ + dir = 1 }, -/area/mainship/medical/chemistry) +/turf/open/floor/mainship/cargo, +/area/mainship/living/numbertwobunks) "cyV" = ( /turf/open/floor/mainship_hull/dir{ dir = 8 @@ -7891,6 +7521,10 @@ /obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk, /area/mainship/living/cryo_cells) +"cGf" = ( +/obj/machinery/camera/autoname/mainship, +/turf/open/floor/wood, +/area/mainship/living/tankerbunks) "cGL" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -7909,6 +7543,9 @@ }, /turf/open/floor/plating, /area/mainship/hallways/hangar) +"cJu" = ( +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/cmo_office) "cKb" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ @@ -7949,19 +7586,6 @@ /obj/machinery/door/airlock/mainship/evacuation, /turf/open/floor/mainship/mono, /area/mainship/living/evacuation/pod/two) -"cMO" = ( -/obj/structure/table/mainship/nometal, -/obj/effect/spawner/random/misc/paperbin{ - pixel_x = 8; - pixel_y = 10 - }, -/obj/item/tool/pen, -/obj/item/tool/hand_labeler, -/obj/item/megaphone, -/turf/open/floor/mainship/silver{ - dir = 9 - }, -/area/mainship/command/bridge) "cNr" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -7969,14 +7593,6 @@ /obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) -"cNE" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 4 - }, -/turf/open/floor/mainship/silver{ - dir = 8 - }, -/area/mainship/hallways/bow_hallway) "cNM" = ( /obj/machinery/line_nexter{ dir = 8 @@ -7986,12 +7602,6 @@ dir = 4 }, /area/mainship/medical/lower_medical) -"cNZ" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/turf/open/floor/mainship/mono, -/area/mainship/command/bridge) "cOj" = ( /obj/machinery/door/firedoor/mainship, /turf/open/floor/mainship/stripesquare, @@ -8018,11 +7628,13 @@ /obj/item/reagent_containers/glass/rag, /turf/open/floor/mainship/floor, /area/mainship/living/grunt_rnr) -"cRH" = ( -/turf/open/floor/mainship/silver{ - dir = 1 - }, -/area/mainship/hallways/bow_hallway) +"cSl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "cSm" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/mainship/floor, @@ -8087,15 +7699,6 @@ /obj/docking_port/stationary/marine_dropship/crash_target, /turf/open/floor/plating/plating_catwalk, /area/mainship/living/starboard_emb) -"cYc" = ( -/obj/structure/sink{ - dir = 4 - }, -/obj/structure/mirror{ - dir = 8 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "cYh" = ( /obj/structure/table/mainship/nometal, /obj/item/light_bulb/tube, @@ -8126,6 +7729,14 @@ }, /turf/open/floor/wood, /area/mainship/living/pilotbunks) +"daD" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 9 + }, +/turf/open/floor/plating/icefloor/warnplate{ + dir = 9 + }, +/area/mainship/living/tankerbunks) "daP" = ( /obj/structure/table/mainship/nometal, /obj/machinery/cic_maptable, @@ -8156,15 +7767,6 @@ /obj/machinery/door/airlock/mainship/generic/bathroom, /turf/open/floor/mainship/mono, /area/mainship/engineering/ce_room) -"dcq" = ( -/obj/machinery/marine_selector/clothes/commander, -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/carpet/side{ - dir = 5 - }, -/area/mainship/living/numbertwobunks) "dcT" = ( /turf/open/floor/plating/mainship, /area/mainship/shipboard/port_point_defense) @@ -8202,13 +7804,11 @@ }, /turf/open/space/basic, /area/space) -"dhn" = ( -/obj/structure/flora/pottedplant/twentytwo, -/obj/machinery/firealarm, -/turf/open/floor/mainship/green{ - dir = 1 - }, -/area/mainship/living/numbertwobunks) +"dhl" = ( +/obj/machinery/light/mainship, +/obj/effect/turf_decal/warning_stripes/thin, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "dhF" = ( /obj/structure/table/reinforced, /obj/structure/sink{ @@ -8219,10 +7819,21 @@ /obj/effect/spawner/random/food_or_drink/kitchenknife, /turf/open/floor/mainship/mono, /area/mainship/living/officer_rnr) +"diM" = ( +/obj/structure/bed/bunkbed, +/obj/effect/landmark/start/job/transportofficer, +/obj/effect/landmark/start/job/transportofficer, +/turf/open/floor/wood, +/area/mainship/living/tankerbunks) "djv" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/mainship/orange, /area/mainship/hallways/repair_bay) +"dkd" = ( +/obj/structure/table/mainship/nometal, +/obj/structure/bedsheetbin, +/turf/open/floor/mainship/floor, +/area/mainship/living/tankerbunks) "dku" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment/corner{ @@ -8276,6 +7887,12 @@ /obj/structure/cable, /turf/open/floor/mainship/floor, /area/mainship/squads/req) +"doo" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "dop" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -8313,6 +7930,12 @@ dir = 9 }, /area/mainship/hallways/starboard_hallway) +"dsk" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "dsp" = ( /obj/structure/table/mainship/nometal, /obj/effect/spawner/random/misc/table_lighting, @@ -8323,10 +7946,11 @@ /obj/structure/bed/chair/wood/wings{ dir = 4 }, +/obj/effect/landmark/start/job/staffofficer, /turf/open/floor/carpet/side{ dir = 9 }, -/area/mainship/living/officer_study) +/area/mainship/living/officer_rnr) "dus" = ( /obj/machinery/computer/cloning_console/vats, /turf/open/floor/mainship/sterile/side{ @@ -8372,6 +7996,13 @@ /obj/item/stack/sheet/metal/medium_stack, /turf/open/floor/mainship/orange/full, /area/mainship/command/cic) +"dwy" = ( +/obj/machinery/light/mainship{ + dir = 1 + }, +/obj/machinery/vending/tool, +/turf/open/floor/mainship/floor, +/area/mainship/hallways/hangar) "dxe" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -8382,6 +8013,29 @@ dir = 4 }, /area/mainship/medical/surgery_hallway) +"dxk" = ( +/obj/machinery/light/mainship{ + dir = 8 + }, +/obj/effect/spawner/random/misc/structure/flavorvending/coffeeweighted, +/turf/open/floor/mainship/silver{ + dir = 8 + }, +/area/mainship/hallways/bow_hallway) +"dyL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment/corner{ + dir = 1 + }, +/obj/machinery/light/mainship, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "dzm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -8433,11 +8087,9 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/squads/req) "dDZ" = ( -/obj/machinery/door/airlock/mainship/maint{ - name = "Tool Closet" - }, -/turf/open/floor/mainship/mono, -/area/mainship/living/officer_rnr) +/obj/structure/closet/secure_closet/staff_officer, +/turf/open/floor/wood, +/area/mainship/living/bridgebunks) "dEc" = ( /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/surgery_hallway) @@ -8465,6 +8117,14 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/green/corner, /area/mainship/living/basketball) +"dEE" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ + dir = 8; + on = 1 + }, +/obj/structure/cable, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/cmo_office) "dFd" = ( /obj/machinery/vending/engineering, /turf/open/floor/mainship/orange/full, @@ -8482,6 +8142,14 @@ /obj/docking_port/stationary/marine_dropship/crash_target, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) +"dGj" = ( +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, +/obj/machinery/door/airlock/multi_tile/mainship/comdoor/free_access, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/mono, +/area/mainship/command/bridge) "dGC" = ( /obj/machinery/door/airlock/mainship/maint{ dir = 2; @@ -8489,11 +8157,10 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/starboard_hallway) -"dGL" = ( -/turf/open/floor/mainship/silver/corner{ - dir = 1 - }, -/area/mainship/command/bridge) +"dHq" = ( +/obj/vehicle/ridden/wheelchair, +/turf/open/floor/mainship/sterile/side, +/area/mainship/medical/cmo_office) "dHx" = ( /obj/machinery/light/mainship{ dir = 4 @@ -8517,15 +8184,20 @@ dir = 6 }, /area/mainship/squads/delta) -"dIh" = ( -/turf/open/floor/plating/icefloor/warnplate, -/area/mainship/living/tankerbunks) "dIX" = ( /obj/machinery/light/mainship{ dir = 1 }, /turf/open/floor/mainship/mono, /area/mainship/medical/surgery_hallway) +"dJm" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/mainship/sterile/side{ + dir = 10 + }, +/area/mainship/medical/cmo_office) "dKa" = ( /obj/structure/cable, /obj/structure/disposalpipe/junction/flipped{ @@ -8566,10 +8238,16 @@ }, /turf/open/floor/mainship/floor, /area/mainship/shipboard/port_point_defense) -"dMy" = ( -/obj/structure/table/mainship/nometal, -/turf/open/floor/wood, -/area/mainship/living/bridgebunks) +"dMz" = ( +/obj/machinery/light/mainship{ + dir = 4 + }, +/obj/structure/bed, +/obj/item/bedsheet/rd, +/turf/open/floor/mainship/sterile/side{ + dir = 4 + }, +/area/mainship/medical/cmo_office) "dMS" = ( /obj/machinery/light/mainship{ dir = 4 @@ -8839,12 +8517,6 @@ dir = 1 }, /area/mainship/hallways/repair_bay) -"ehB" = ( -/obj/structure/table/mainship/nometal, -/obj/effect/spawner/random/misc/paperbin, -/obj/item/tool/pen, -/turf/open/floor/mainship/sterile/dark, -/area/mainship/medical/medical_science) "eid" = ( /obj/effect/spawner/random/engineering/structure/tank/waterweighted, /turf/open/floor/mainship/orange, @@ -8853,12 +8525,11 @@ /obj/machinery/door/firedoor/mainship, /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/starboard_hallway) -"eiU" = ( -/obj/structure/disposalpipe/segment, +"ekU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/bow_hallway) +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "elP" = ( /obj/structure/table/reinforced, /obj/item/clothing/under/rank/roboticist, @@ -8915,6 +8586,17 @@ /obj/item/reagent_containers/food/snacks/chocolatebar, /turf/open/floor/mainship/mono, /area/mainship/living/officer_rnr) +"erT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment/corner, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "erW" = ( /obj/item/ammo_magazine/smg/standard_smg, /obj/item/ammo_magazine/smg/standard_smg, @@ -8937,6 +8619,12 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) +"esS" = ( +/obj/structure/sink{ + dir = 1 + }, +/turf/open/floor/mainship/sterile/side, +/area/mainship/medical/chemistry) "etF" = ( /obj/structure/prop/mainship/name_stencil/G, /turf/open/floor/mainship_hull, @@ -9050,6 +8738,12 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/bow_hallway) +"eEf" = ( +/obj/structure/cable, +/turf/open/floor/mainship/sterile/side{ + dir = 4 + }, +/area/mainship/medical/medical_science) "eEW" = ( /obj/structure/cable, /obj/machinery/door/airlock/mainship/maint{ @@ -9084,6 +8778,14 @@ /obj/machinery/door/firedoor/mainship, /turf/open/floor/plating, /area/mainship/command/cic) +"eJo" = ( +/obj/machinery/power/apc/mainship, +/obj/structure/cable, +/obj/structure/closet/secure_closet/medical3, +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/mainship/medical/surgery_hallway) "eJR" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ on = 1 @@ -9130,6 +8832,10 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) +"eLZ" = ( +/obj/machinery/chem_dispenser, +/turf/open/floor/mainship/sterile/side, +/area/mainship/medical/cmo_office) "eMf" = ( /obj/machinery/vending/MarineMed, /obj/machinery/camera/autoname/mainship{ @@ -9157,6 +8863,17 @@ dir = 1 }, /area/mainship/medical/lower_medical) +"eOF" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood, +/area/mainship/living/officer_rnr) "ePc" = ( /obj/structure/bed/chair/nometal{ dir = 4 @@ -9189,32 +8906,15 @@ dir = 9 }, /area/mainship/squads/req) -"eRr" = ( -/obj/structure/table/mainship/nometal, -/obj/item/paper, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/glass/beaker{ - pixel_x = 5 - }, -/obj/item/reagent_containers/glass/beaker{ - pixel_x = 5 - }, -/obj/item/reagent_containers/dropper, -/turf/open/floor/mainship/sterile/side, -/area/mainship/medical/medical_science) "eRE" = ( /turf/open/floor/carpet, /area/mainship/living/commandbunks) -"eTe" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/reagentgrinder, -/obj/item/stack/sheet/mineral/phoron, -/obj/item/stack/sheet/mineral/phoron, -/obj/item/stack/sheet/mineral/phoron, -/obj/item/stack/sheet/mineral/phoron, -/turf/open/floor/mainship/sterile/side, -/area/mainship/medical/chemistry) +"eSg" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/cmo_office) "eVB" = ( /obj/structure/cable, /obj/machinery/light/mainship{ @@ -9240,7 +8940,7 @@ /area/mainship/medical/lower_medical) "eWR" = ( /obj/structure/bed, -/obj/item/bedsheet/brown, +/obj/item/bedsheet/red, /turf/open/floor/wood, /area/mainship/living/bridgebunks) "eXl" = ( @@ -9269,25 +8969,22 @@ "far" = ( /turf/open/floor/mainship/mono, /area/mainship/command/cic) -"fbp" = ( -/turf/open/floor/mainship/orange{ - dir = 8 - }, -/area/mainship/hallways/hangar) "fbJ" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 8 - }, +/obj/structure/dropship_equipment/shuttle/sentry_holder, /turf/open/floor/mainship/orange{ - dir = 4 + dir = 1 }, /area/mainship/hallways/hangar) -"feY" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 4 +"fep" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ + dir = 4; + on = 1 }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/mainship/floor, +/area/mainship/hallways/bow_hallway) "fgc" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 10 @@ -9304,8 +9001,9 @@ /area/mainship/squads/alpha) "fgj" = ( /obj/structure/table/woodentable, +/obj/item/toy/deck, /turf/open/floor/carpet/side, -/area/mainship/living/officer_study) +/area/mainship/living/officer_rnr) "fgF" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 @@ -9353,20 +9051,22 @@ dir = 8 }, /area/mainship/medical/operating_room_one) +"fly" = ( +/obj/machinery/chem_dispenser, +/obj/item/radio/intercom/general, +/obj/structure/sign/chemistry{ + dir = 1 + }, +/turf/open/floor/mainship/sterile/corner{ + dir = 1 + }, +/area/mainship/medical/chemistry) "fmc" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, /turf/open/floor/wood, /area/mainship/command/corporateliaison) -"fme" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/orange{ - dir = 1 - }, -/area/mainship/hallways/hangar) "fmj" = ( /obj/machinery/door/airlock/mainship/generic/bathroom, /turf/open/floor/mainship/mono, @@ -9381,6 +9081,11 @@ /obj/item/storage/box/bodybags, /turf/open/floor/mainship/sterile/side, /area/mainship/medical/lower_medical) +"fmx" = ( +/obj/machinery/chem_master, +/obj/item/reagent_containers/glass/beaker/bluespace, +/turf/open/floor/mainship/sterile/side, +/area/mainship/medical/chemistry) "fmE" = ( /turf/open/floor/mainship/white/corner{ dir = 1 @@ -9395,6 +9100,11 @@ }, /turf/open/floor/mainship/floor, /area/mainship/living/pilotbunks) +"fno" = ( +/obj/structure/dropship_equipment/cas/weapon/minirocket_pod, +/obj/machinery/light/mainship, +/turf/open/floor/mainship/cargo, +/area/mainship/hallways/hangar) "fnC" = ( /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/operating_room_three) @@ -9466,30 +9176,18 @@ /turf/open/floor/prison/kitchen, /area/mainship/living/grunt_rnr) "fsM" = ( -/obj/structure/bed/chair/nometal{ +/obj/machinery/light/mainship{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/mainship/mono, -/area/mainship/living/officer_study) +/turf/open/floor/wood, +/area/mainship/living/officer_rnr) "fsQ" = ( /obj/effect/soundplayer, /turf/closed/wall/mainship, /area/mainship/command/airoom) -"ftA" = ( -/obj/structure/table/mainship/nometal, -/obj/item/storage/box/syringes{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/storage/box/beakers, -/obj/item/storage/box/beakers, -/obj/machinery/firealarm{ - dir = 8 - }, -/turf/open/floor/mainship/sterile/corner{ - dir = 4 - }, -/area/mainship/medical/medical_science) "ftB" = ( /obj/machinery/dropship_part_fabricator, /turf/open/floor/mainship/orange{ @@ -9504,6 +9202,11 @@ dir = 8 }, /area/mainship/medical/medical_science) +"ftK" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/turf/open/floor/mainship/floor, +/area/mainship/command/bridge) "fuc" = ( /obj/machinery/door_control{ dir = 8; @@ -9531,6 +9234,13 @@ }, /turf/open/floor/prison/kitchen, /area/mainship/living/officer_rnr) +"fvw" = ( +/obj/structure/dropship_equipment/cas/weapon/heavygun, +/obj/machinery/camera/autoname/mainship{ + dir = 1 + }, +/turf/open/floor/mainship/cargo, +/area/mainship/hallways/hangar) "fvx" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -9548,8 +9258,14 @@ /turf/open/floor/mainship/mono, /area/mainship/hull/port_hull) "fwZ" = ( -/turf/open/floor/mainship/mono, -/area/mainship/living/officer_study) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment/corner{ + dir = 8 + }, +/turf/open/floor/wood, +/area/mainship/living/officer_rnr) "fxh" = ( /obj/structure/table/mainship/nometal, /obj/effect/spawner/random/misc/table_lighting, @@ -9588,6 +9304,9 @@ }, /turf/open/floor/plating, /area/mainship/hallways/hangar) +"fAJ" = ( +/turf/closed/wall/mainship/white, +/area/mainship/medical/cmo_office) "fBV" = ( /obj/structure/bed/chair/office/dark{ dir = 1 @@ -9690,19 +9409,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/starboard_hallway) -"fHe" = ( -/obj/structure/table/mainship/nometal, -/obj/item/flashlight/combat, -/obj/item/clothing/suit/storage/hazardvest, -/obj/item/clothing/suit/storage/hazardvest/lime, -/obj/item/clothing/suit/storage/hazardvest/blue, -/obj/item/tool/shovel/etool, -/obj/item/storage/pouch/medkit/firstaid, -/obj/item/tool/taperoll/engineering, -/obj/effect/spawner/random/engineering/extinguisher/miniweighted, -/obj/item/storage/toolbox/mechanical, -/turf/open/floor/mainship/mono, -/area/mainship/living/officer_rnr) "fHk" = ( /obj/structure/table/mainship/nometal, /obj/machinery/door_control/old/cic{ @@ -9755,6 +9461,15 @@ /obj/machinery/holopad, /turf/open/floor/mainship/floor, /area/mainship/hallways/repair_bay) +"fLm" = ( +/obj/structure/cable, +/obj/machinery/door/firedoor/mainship, +/obj/machinery/door/airlock/multi_tile/mainship/research{ + dir = 2; + name = "Research Wing" + }, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/surgery_hallway) "fLo" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 6 @@ -9811,13 +9526,6 @@ dir = 10 }, /area/mainship/hallways/port_hallway) -"fQp" = ( -/obj/machinery/firealarm, -/obj/structure/bed/chair/wheelchair, -/turf/open/floor/mainship/sterile/side{ - dir = 1 - }, -/area/mainship/medical/surgery_hallway) "fQN" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -9860,6 +9568,16 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) +"fWN" = ( +/obj/machinery/door/airlock/mainship/command/FCDRoffice{ + dir = 1 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) +"fWU" = ( +/obj/effect/turf_decal/warning_stripes/thick, +/turf/open/floor/plating/icefloor/warnplate, +/area/mainship/living/tankerbunks) "fYx" = ( /obj/effect/turf_decal/warning_stripes/thin, /obj/machinery/power/terminal{ @@ -9950,6 +9668,29 @@ dir = 8 }, /area/mainship/engineering/ce_room) +"gby" = ( +/obj/machinery/landinglight/cas{ + dir = 8 + }, +/obj/machinery/camera/autoname/mainship{ + dir = 8 + }, +/obj/machinery/landinglight/alamo{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) +"gbA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_red, +/turf/open/floor/mainship/floor, +/area/mainship/living/bridgebunks) "gbG" = ( /obj/machinery/bot/roomba, /turf/open/floor/mainship/orange, @@ -9986,18 +9727,12 @@ /turf/open/floor/carpet/side{ dir = 8 }, -/area/mainship/living/officer_study) +/area/mainship/living/officer_rnr) "geJ" = ( /obj/effect/landmark/start/latejoin, /obj/effect/landmark/start/job/squadleader, /turf/open/floor/mainship/floor, /area/mainship/living/cryo_cells) -"geQ" = ( -/obj/structure/table/mainship/nometal, -/obj/item/tool/crowbar, -/obj/effect/spawner/random/misc/table_lighting, -/turf/open/floor/wood, -/area/mainship/living/tankerbunks) "geX" = ( /obj/machinery/light/mainship, /obj/structure/stairs/seamless{ @@ -10036,15 +9771,19 @@ /obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_hallway) +"gfu" = ( +/obj/structure/ship_ammo/cas/bomb/fourhundred, +/turf/open/floor/mainship/cargo, +/area/mainship/hallways/hangar) "ggd" = ( /obj/effect/spawner/random/misc/structure/flavorvending/snackweighted, /turf/open/floor/mainship/mono, /area/mainship/living/grunt_rnr) "ggn" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/cigaretteweighted, /obj/machinery/light/mainship{ dir = 4 }, +/obj/machinery/vending/cigarette, /turf/open/floor/mainship/mono, /area/mainship/living/cafeteria_starboard) "ggr" = ( @@ -10052,6 +9791,10 @@ /obj/structure/cable, /turf/open/floor/mainship/floor, /area/mainship/engineering/ce_room) +"ggG" = ( +/obj/structure/dropship_equipment/cas/weapon/bomblet_pod, +/turf/open/floor/mainship/cargo, +/area/mainship/hallways/hangar) "ghz" = ( /obj/structure/bed/chair/nometal{ dir = 4 @@ -10080,18 +9823,9 @@ /turf/open/floor/wood, /area/mainship/living/basketball) "gjK" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/mainship/orange{ - dir = 9 - }, -/area/mainship/hallways/hangar) -"gli" = ( -/obj/machinery/door/airlock/multi_tile/mainship/comdoor/free_access{ - dir = 2 - }, -/obj/machinery/door/firedoor/mainship, +/obj/machinery/vending/weapon, /turf/open/floor/mainship/mono, -/area/mainship/command/bridge) +/area/mainship/living/numbertwobunks) "gmy" = ( /obj/item/reagent_containers/glass/bucket, /turf/open/floor/plating/plating_catwalk, @@ -10130,13 +9864,6 @@ /obj/effect/turf_decal/warning_stripes/thin, /turf/open/floor/wood, /area/mainship/living/basketball) -"gpG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/ai_node, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/bow_hallway) "gra" = ( /obj/structure/closet, /obj/machinery/air_alarm, @@ -10173,10 +9900,11 @@ /obj/structure/bed/chair/wood/wings{ dir = 4 }, +/obj/effect/landmark/start/job/staffofficer, /turf/open/floor/carpet/side{ dir = 10 }, -/area/mainship/living/officer_study) +/area/mainship/living/officer_rnr) "gxh" = ( /obj/structure/table/mainship/nometal, /obj/item/radio/intercom/general, @@ -10210,6 +9938,19 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/mono, /area/mainship/engineering/lower_engine_monitoring) +"gyC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 4 + }, +/obj/structure/disposalpipe/segment/corner{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "gyM" = ( /obj/docking_port/stationary/escape_pod/right, /turf/open/floor/plating, @@ -10275,6 +10016,11 @@ /obj/machinery/holopad, /turf/open/floor/mainship/mono, /area/mainship/command/bridge) +"gCW" = ( +/obj/machinery/air_alarm, +/obj/machinery/vending/medical/shipside, +/turf/open/floor/mainship/sterile/corner, +/area/mainship/medical/chemistry) "gCZ" = ( /obj/machinery/camera/autoname/mainship{ dir = 4 @@ -10303,28 +10049,9 @@ dir = 4 }, /area/mainship/medical/lower_medical) -"gGb" = ( -/obj/machinery/computer/med_data, -/turf/open/floor/mainship/sterile/corner, -/area/mainship/medical/upper_medical) "gGw" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 6 - }, -/obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/mainship/orange, -/area/mainship/hallways/hangar) -"gGE" = ( -/obj/structure/disposalpipe/segment/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/mainship/silver/corner{ - dir = 4 - }, -/area/mainship/command/bridge) +/turf/open/floor/plating/plating_catwalk, +/area/mainship/living/numbertwobunks) "gHw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating/plating_catwalk, @@ -10340,11 +10067,6 @@ /obj/effect/spawner/random/misc/soap/regularweighted, /turf/open/floor/plating/plating_catwalk, /area/mainship/command/corporateliaison) -"gIn" = ( -/turf/open/floor/plating/icefloor/warnplate{ - dir = 9 - }, -/area/mainship/living/tankerbunks) "gJa" = ( /obj/machinery/door/airlock/mainship/generic/pilot, /turf/open/floor/mainship/mono, @@ -10372,6 +10094,13 @@ dir = 1 }, /area/mainship/hallways/bow_hallway) +"gML" = ( +/obj/structure/window/framed/mainship/requisitions, +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, +/turf/open/floor/plating, +/area/mainship/command/bridge) "gMO" = ( /obj/machinery/light/mainship{ dir = 1 @@ -10445,23 +10174,6 @@ dir = 4 }, /area/mainship/hallways/hangar) -"gRX" = ( -/obj/structure/bed/chair/office/dark{ - dir = 1 - }, -/turf/open/floor/mainship/sterile/dark, -/area/mainship/medical/medical_science) -"gSF" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/mainship/silver/corner{ - dir = 1 - }, -/area/mainship/hallways/bow_hallway) "gST" = ( /obj/machinery/door/poddoor/railing{ id = "supply_elevator_railing" @@ -10496,6 +10208,19 @@ /obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_hallway) +"gWC" = ( +/obj/machinery/power/apc/mainship{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) +"gXv" = ( +/obj/structure/bed, +/obj/item/bedsheet/brown, +/obj/effect/landmark/start/job/transportofficer, +/turf/open/floor/wood, +/area/mainship/living/pilotbunks) "gXD" = ( /obj/machinery/door/firedoor/mainship{ dir = 2 @@ -10534,9 +10259,6 @@ "haf" = ( /turf/open/floor/mainship/green/full, /area/mainship/squads/req) -"haz" = ( -/turf/open/floor/mainship/floor, -/area/mainship/living/numbertwobunks) "haI" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -10583,27 +10305,38 @@ /turf/open/floor/wood, /area/mainship/living/basketball) "hey" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/mainship/mono, -/area/mainship/living/officer_study) +/obj/machinery/light/mainship{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/mainship/living/officer_rnr) "hfD" = ( /obj/machinery/vending/MarineMed, /turf/open/floor/mainship/mono, /area/mainship/squads/req) -"hgk" = ( -/obj/effect/turf_decal/warning_stripes/thin{ +"hgh" = ( +/obj/effect/turf_decal/warning_stripes/thick{ dir = 8 }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 6 - }, -/turf/open/floor/mainship/orange{ +/turf/open/floor/plating/icefloor/warnplate{ dir = 8 }, -/area/mainship/hallways/hangar) +/area/mainship/living/tankerbunks) +"hgk" = ( +/obj/structure/table/woodentable, +/obj/item/reagent_containers/food/drinks/flask/barflask, +/obj/item/reagent_containers/food/drinks/bottle/davenport, +/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/flashlight/lamp/green, +/obj/item/megaphone, +/obj/item/whistle, +/turf/open/floor/carpet/side{ + dir = 1 + }, +/area/mainship/living/numbertwobunks) "hgY" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -10613,7 +10346,7 @@ /area/mainship/living/grunt_rnr) "hhA" = ( /obj/structure/ship_ammo/cas/heavygun, -/turf/open/floor/mainship/cargo, +/turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "hiF" = ( /obj/structure/bed/chair/office/dark{ @@ -10668,6 +10401,11 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/starboard_hallway) +"hjO" = ( +/obj/effect/landmark/start/job/fieldcommander, +/obj/effect/ai_node, +/turf/open/floor/wood, +/area/mainship/living/numbertwobunks) "hjX" = ( /obj/structure/table/mainship/nometal, /obj/item/storage/firstaid/rad{ @@ -10749,11 +10487,9 @@ /turf/open/floor/mainship/floor, /area/mainship/engineering/lower_engineering) "hnY" = ( -/obj/machinery/vending/engivend, -/turf/open/floor/mainship/orange{ - dir = 5 - }, -/area/mainship/hallways/hangar) +/obj/machinery/marine_selector/clothes/synth, +/turf/open/floor/mainship/cargo, +/area/mainship/living/numbertwobunks) "hol" = ( /obj/machinery/light/mainship, /obj/machinery/disposal, @@ -10762,44 +10498,38 @@ }, /turf/open/floor/mainship/floor, /area/mainship/living/cafeteria_starboard) -"hql" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, -/obj/structure/cable, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/bow_hallway) "hqs" = ( /obj/structure/closet/secure_closet/engineering_welding, /turf/open/floor/mainship/orange/full, /area/mainship/command/cic) -"hqy" = ( -/obj/structure/bed/chair/nometal{ - dir = 4 - }, -/obj/machinery/light/mainship{ - dir = 8 - }, -/turf/open/floor/mainship/silver{ - dir = 8 - }, -/area/mainship/command/bridge) "hqL" = ( /obj/structure/prop/mainship/sensor_computer3, /turf/open/floor/mainship/green{ dir = 1 }, /area/mainship/command/cic) -"hru" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/bow_hallway) +"hrn" = ( +/obj/structure/dropship_equipment/shuttle/flare_launcher, +/turf/open/floor/mainship/orange, +/area/mainship/hallways/hangar) +"hrH" = ( +/mob/living/simple_animal/cat/Runtime, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/cmo_office) +"hta" = ( +/obj/structure/table/mainship/nometal, +/obj/item/storage/pill_bottle/dylovene{ + pixel_x = -5 + }, +/obj/item/storage/pill_bottle/dylovene, +/obj/item/storage/pill_bottle/bicaridine{ + pixel_x = 5 + }, +/obj/item/healthanalyzer, +/turf/open/floor/mainship/sterile/side{ + dir = 8 + }, +/area/mainship/medical/surgery_hallway) "htp" = ( /obj/effect/turf_decal/warning_stripes/thick/corner{ dir = 1 @@ -10817,6 +10547,14 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/aft_umbilical) +"hvt" = ( +/obj/machinery/power/apc/mainship, +/obj/structure/cable, +/obj/item/clothing/head/modular/robot/heavy, +/turf/open/floor/mainship/black{ + dir = 1 + }, +/area/mainship/living/tankerbunks) "hvM" = ( /obj/machinery/vending/marineFood, /turf/open/floor/mainship/white, @@ -10846,12 +10584,35 @@ dir = 8 }, /area/mainship/command/cic) +"hxD" = ( +/obj/structure/table/mainship/nometal, +/obj/item/storage/box/masks{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/storage/box/gloves{ + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/mainship/medical/surgery_hallway) "hxE" = ( /obj/structure/closet/firecloset, /turf/open/floor/mainship/orange{ dir = 8 }, /area/mainship/hallways/repair_bay) +"hxY" = ( +/obj/machinery/camera/autoname/mainship{ + dir = 4 + }, +/obj/machinery/landinglight/alamo{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "hyf" = ( /obj/machinery/camera/autoname/mainship{ dir = 8 @@ -10901,17 +10662,6 @@ /obj/structure/closet/firecloset, /turf/open/floor/mainship/orange, /area/mainship/engineering/ce_room) -"hDY" = ( -/obj/structure/table/mainship/nometal, -/obj/item/camera, -/obj/item/camera_film, -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/silver{ - dir = 1 - }, -/area/mainship/command/bridge) "hEk" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -10930,6 +10680,14 @@ dir = 4 }, /area/mainship/squads/req) +"hFy" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/turf/open/floor/plating/icefloor/warnplate{ + dir = 1 + }, +/area/mainship/living/tankerbunks) "hFz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable, @@ -10940,18 +10698,10 @@ dir = 1 }, /area/mainship/living/port_emb) -"hGP" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/turf/open/floor/mainship/mono, -/area/mainship/command/bridge) "hHj" = ( -/obj/machinery/camera/autoname/mainship, -/obj/effect/spawner/random/machinery/machine_frame, -/turf/open/floor/mainship/orange{ - dir = 1 - }, -/area/mainship/hallways/hangar) +/obj/machinery/recharge_station, +/turf/open/floor/mainship/cargo, +/area/mainship/living/numbertwobunks) "hHM" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 1 @@ -10971,6 +10721,17 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_hallway) +"hIC" = ( +/obj/structure/displaycase/destroyed, +/obj/item/toy/plush/rouny, +/obj/machinery/light/mainship{ + dir = 8 + }, +/obj/machinery/light/mainship{ + dir = 1 + }, +/turf/open/floor/wood, +/area/mainship/living/numbertwobunks) "hJa" = ( /obj/structure/table/mainship/nometal, /obj/machinery/air_alarm, @@ -10991,6 +10752,20 @@ dir = 8 }, /area/mainship/living/cryo_cells) +"hKR" = ( +/obj/structure/table/mainship/nometal, +/obj/item/flashlight/combat, +/obj/item/clothing/suit/storage/hazardvest, +/obj/item/clothing/suit/storage/hazardvest/lime, +/obj/item/clothing/suit/storage/hazardvest/blue, +/obj/item/tool/shovel/etool, +/obj/item/storage/pouch/medkit/firstaid, +/obj/item/tool/taperoll/engineering, +/obj/effect/spawner/random/engineering/extinguisher/miniweighted, +/obj/item/storage/toolbox/mechanical, +/obj/item/stack/sandbags_empty/half, +/turf/open/floor/mainship/cargo, +/area/mainship/living/numbertwobunks) "hNl" = ( /obj/structure/bed/chair/comfy/black{ dir = 8 @@ -11011,13 +10786,24 @@ dir = 4 }, /area/mainship/living/cryo_cells) -"hNJ" = ( -/turf/closed/wall/mainship/white, -/area/mainship/medical/chemistry) +"hNH" = ( +/obj/machinery/light/mainship, +/obj/vehicle/ridden/wheelchair, +/turf/open/floor/mainship/sterile/side, +/area/mainship/medical/surgery_hallway) "hOm" = ( /obj/machinery/vending/weapon, /turf/open/floor/mainship/mono, /area/mainship/squads/alpha) +"hOA" = ( +/obj/effect/turf_decal/warning_stripes/thick/corner{ + dir = 4 + }, +/obj/machinery/landinglight/alamo{ + dir = 8 + }, +/turf/open/floor/plating, +/area/mainship/hallways/hangar) "hPY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -11028,10 +10814,18 @@ }, /turf/open/floor/tile/dark, /area/mainship/engineering/lower_engine_monitoring) -"hQB" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/coffeeweighted, -/turf/open/floor/mainship/silver, -/area/mainship/hallways/bow_hallway) +"hQt" = ( +/obj/structure/table/mainship/nometal, +/obj/machinery/reagentgrinder, +/obj/item/stack/sheet/mineral/phoron, +/obj/item/stack/sheet/mineral/phoron, +/obj/structure/cable, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/glass/beaker/large, +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/mainship/medical/chemistry) "hSb" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -11043,17 +10837,15 @@ dir = 1 }, /area/mainship/engineering/lower_engineering) -"hSG" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/mainship/orange{ - dir = 10 - }, -/area/mainship/hallways/hangar) -"hTN" = ( -/turf/open/floor/plating/icefloor/warnplate{ - dir = 1 - }, -/area/mainship/living/tankerbunks) +"hTB" = ( +/obj/structure/table/mainship/nometal, +/obj/machinery/reagentgrinder, +/obj/item/stack/sheet/mineral/phoron, +/obj/item/stack/sheet/mineral/phoron, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/glass/beaker/large, +/turf/open/floor/mainship/sterile/side, +/area/mainship/medical/chemistry) "hUb" = ( /turf/open/floor/mainship/cargo, /area/mainship/squads/alpha) @@ -11061,6 +10853,17 @@ /obj/structure/table/mainship/nometal, /turf/open/floor/carpet, /area/mainship/living/commandbunks) +"hVd" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/structure/cable, +/obj/structure/disposalpipe/segment/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/mainship/floor, +/area/mainship/hallways/bow_hallway) "hVi" = ( /obj/structure/table/mainship/nometal, /obj/machinery/prop/computer, @@ -11075,6 +10878,16 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/aft_umbilical) +"hVR" = ( +/obj/item/reagent_containers/jerrycan, +/obj/item/reagent_containers/jerrycan, +/obj/item/reagent_containers/jerrycan, +/obj/item/reagent_containers/jerrycan, +/obj/item/reagent_containers/jerrycan, +/obj/item/reagent_containers/jerrycan, +/obj/structure/rack, +/turf/open/floor/mainship/cargo, +/area/mainship/hallways/hangar) "hVU" = ( /obj/machinery/light/mainship{ dir = 8 @@ -11088,8 +10901,12 @@ /obj/machinery/firealarm{ dir = 4 }, -/turf/open/floor/mainship/mono, -/area/mainship/living/officer_study) +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/wood, +/area/mainship/living/officer_rnr) "hWJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -11101,6 +10918,10 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/operating_room_three) +"hZh" = ( +/obj/machinery/light/mainship, +/turf/open/floor/mainship/sterile/side, +/area/mainship/medical/chemistry) "iaS" = ( /turf/open/floor/mainship/red/corner{ dir = 4 @@ -11126,13 +10947,12 @@ /obj/item/toy/plush/moth, /turf/open/floor/mainship/mono, /area/mainship/living/port_emb) -"icL" = ( -/obj/machinery/holopad, -/obj/structure/bed/chair/comfy{ - dir = 1 +"idR" = ( +/obj/structure/cable, +/turf/open/floor/mainship/sterile/side{ + dir = 8 }, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) +/area/mainship/medical/medical_science) "idV" = ( /obj/machinery/light/mainship, /turf/open/floor/mainship/floor, @@ -11149,6 +10969,12 @@ /obj/machinery/optable, /turf/open/floor/mainship/mono, /area/mainship/medical/surgery_hallway) +"ifv" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 10 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "igT" = ( /obj/structure/bed/stool, /turf/open/floor/mainship/mono, @@ -11173,12 +10999,6 @@ /obj/structure/cable, /turf/open/floor/plating/plating_catwalk, /area/mainship/squads/delta) -"iiH" = ( -/obj/structure/disposalpipe/segment/corner{ - dir = 8 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) "ijh" = ( /obj/structure/cable, /obj/machinery/light/mainship/small{ @@ -11263,10 +11083,28 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/effect/spawner/random/misc/structure/flavorvending/snackweighted, +/obj/effect/turf_decal/siding/dark_blue/corner, +/obj/effect/turf_decal/siding/dark_red/corner{ + dir = 8 + }, /turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) -"ipy" = ( +/area/mainship/living/bridgebunks) +"ipa" = ( +/obj/structure/table/mainship/nometal, +/obj/effect/spawner/random/misc/paperbin{ + pixel_x = 8; + pixel_y = 10 + }, +/obj/item/tool/pen, +/obj/item/tool/hand_labeler, +/obj/item/megaphone, /obj/structure/cable, +/turf/open/floor/mainship/silver{ + dir = 9 + }, +/area/mainship/command/bridge) +"ipy" = ( /obj/machinery/camera/autoname/mainship{ dir = 1 }, @@ -11303,14 +11141,29 @@ /obj/docking_port/stationary/supply, /turf/open/floor/mainship/empty, /area/mainship/squads/req) +"itC" = ( +/obj/machinery/light/mainship{ + dir = 1 + }, +/obj/structure/bed, +/obj/item/bedsheet/red, +/turf/open/floor/carpet/side{ + dir = 5 + }, +/area/mainship/living/numbertwobunks) +"itV" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) "iug" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/power/apc/mainship{ + dir = 8 + }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/ai_node, /turf/open/floor/wood, -/area/mainship/living/officer_study) +/area/mainship/living/officer_rnr) "ivC" = ( /obj/structure/cable, /obj/machinery/door/airlock/mainship/maint{ @@ -11337,7 +11190,7 @@ /obj/machinery/light/mainship{ dir = 8 }, -/turf/open/floor/mainship/floor, +/turf/open/floor/mainship/sterile/white, /area/mainship/living/bridgebunks) "ixR" = ( /obj/docking_port/stationary/marine_dropship/crash_target, @@ -11443,12 +11296,6 @@ dir = 8 }, /area/mainship/command/bridge) -"iEK" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/open/floor/mainship/silver, -/area/mainship/command/bridge) "iGs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -11486,36 +11333,15 @@ /turf/open/floor/mainship/orange, /area/mainship/engineering/lower_engineering) "iIi" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/effect/ai_node, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) -"iIm" = ( -/obj/structure/table/mainship/nometal, -/obj/item/newspaper, -/obj/item/robot_parts/chest, -/turf/open/floor/mainship/black{ +/obj/effect/turf_decal/warning_stripes/thin{ dir = 1 }, -/area/mainship/living/tankerbunks) +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "iJv" = ( /turf/open/floor/mainship/floor, /area/mainship/squads/alpha) -"iKm" = ( -/obj/structure/toilet{ - dir = 4 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) -"iLa" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/bow_hallway) "iLR" = ( /obj/machinery/door/poddoor/mainship/indestructible, /turf/closed/wall/mainship/outer, @@ -11594,10 +11420,8 @@ }, /area/mainship/engineering/lower_engineering) "iUW" = ( -/obj/structure/table/mainship/nometal, -/obj/item/storage/box/donkpockets, /turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) +/area/mainship/living/bridgebunks) "iVz" = ( /obj/machinery/landinglight/alamo{ dir = 8 @@ -11618,6 +11442,20 @@ "iWe" = ( /turf/open/floor/mainship/floor, /area/mainship/squads/req) +"iWI" = ( +/obj/machinery/camera/autoname/mainship, +/obj/structure/closet/firecloset/full, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) +"iWK" = ( +/obj/item/tool/kitchen/tray, +/obj/item/clothing/suit/storage/chef/classic, +/obj/item/clothing/head/chefhat, +/obj/structure/table/reinforced, +/obj/item/tool/kitchen/rollingpin, +/obj/item/clothing/gloves/latex, +/turf/open/floor/mainship/mono, +/area/mainship/living/officer_rnr) "iXa" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -11633,6 +11471,7 @@ /obj/machinery/light/mainship{ dir = 4 }, +/obj/item/clothing/gloves/insulated, /turf/open/floor/mainship/orange{ dir = 4 }, @@ -11660,13 +11499,6 @@ }, /turf/open/floor/mainship/floor, /area/mainship/squads/req) -"iYA" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/mainship/mono, -/area/mainship/command/bridge) "iZq" = ( /obj/machinery/door/firedoor/mainship{ dir = 2 @@ -11682,6 +11514,13 @@ dir = 1 }, /area/mainship/hull/starboard_hull) +"iZI" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor/mainship, +/obj/machinery/door/window/secure/medical, +/obj/item/tool/hand_labeler, +/turf/open/floor/mainship/sterile, +/area/mainship/medical/lower_medical) "iZS" = ( /obj/machinery/door_control/mainship/req{ dir = 8; @@ -11690,6 +11529,13 @@ }, /turf/open/floor/mainship/floor, /area/mainship/squads/req) +"jav" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/multi_tile/mainship/generic/mechbay{ + dir = 1 + }, +/turf/open/floor/mainship/floor, +/area/mainship/living/tankerbunks) "jbL" = ( /obj/machinery/landinglight/alamo{ dir = 8 @@ -11730,9 +11576,11 @@ }, /area/mainship/medical/lower_medical) "jeI" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/snackweighted, +/obj/effect/turf_decal/siding/yellow{ + dir = 4 + }, /turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) +/area/mainship/living/bridgebunks) "jeN" = ( /obj/structure/closet, /obj/item/toy/plush/snake, @@ -11760,12 +11608,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/aft_hallway) -"jfZ" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor/mainship, -/obj/machinery/door/window/secure/medical, -/turf/open/floor/mainship/sterile, -/area/mainship/medical/lower_medical) "jgp" = ( /obj/structure/cable, /obj/machinery/holopad, @@ -11814,12 +11656,6 @@ /obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/hallways/bow_hallway) -"jkn" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 4 - }, -/turf/open/floor/wood, -/area/mainship/medical/surgery_hallway) "jkH" = ( /obj/machinery/holopad, /turf/open/floor/mainship/sterile/dark, @@ -11887,6 +11723,20 @@ }, /turf/open/floor/mainship/mono, /area/mainship/squads/delta) +"jsN" = ( +/obj/item/storage/box/syringes{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/storage/box/beakers, +/obj/machinery/firealarm{ + dir = 8 + }, +/obj/structure/closet/secure_closet/chemical, +/turf/open/floor/mainship/sterile/corner{ + dir = 4 + }, +/area/mainship/medical/chemistry) "jtW" = ( /obj/effect/turf_decal/warning_stripes/thick, /obj/effect/turf_decal/warning_stripes/thick{ @@ -11894,10 +11744,10 @@ }, /turf/open/floor/plating, /area/mainship/hallways/hangar) -"juB" = ( -/obj/machinery/light/mainship, -/turf/open/floor/mainship/cargo/arrow{ - dir = 4 +"jul" = ( +/obj/structure/dropship_equipment/shuttle/flare_launcher, +/turf/open/floor/mainship/orange{ + dir = 10 }, /area/mainship/hallways/hangar) "jvm" = ( @@ -11974,6 +11824,38 @@ /obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/hull/port_hull) +"jCH" = ( +/obj/effect/ai_node, +/turf/open/floor/plating, +/area/mainship/hallways/hangar) +"jCO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/bow_hallway) +"jDa" = ( +/obj/machinery/chem_master, +/obj/item/reagent_containers/glass/beaker/bluespace, +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/mainship/medical/cmo_office) +"jDf" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/mainship/living/officer_rnr) +"jDv" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/machinery/light/mainship, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "jEn" = ( /obj/effect/landmark/start/job/researcher, /turf/open/floor/mainship/sterile/dark, @@ -11995,11 +11877,6 @@ dir = 4 }, /area/mainship/squads/req) -"jFp" = ( -/turf/open/floor/plating/icefloor/warnplate{ - dir = 5 - }, -/area/mainship/living/tankerbunks) "jFy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -12007,6 +11884,21 @@ /obj/structure/cable, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/port_hull) +"jFP" = ( +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted/frosted{ + dir = 4 + }, +/obj/machinery/door/window{ + dir = 1 + }, +/obj/structure/toilet{ + dir = 1 + }, +/turf/open/floor/mainship/floor, +/area/mainship/living/tankerbunks) "jFR" = ( /obj/structure/table/mainship/nometal, /obj/item/storage/belt/utility/full, @@ -12026,14 +11918,6 @@ dir = 9 }, /area/mainship/command/corporateliaison) -"jGy" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/living/tankerbunks) "jGJ" = ( /obj/structure/closet/firecloset, /turf/open/floor/mainship/silver{ @@ -12071,11 +11955,6 @@ }, /turf/open/floor/mainship/floor, /area/mainship/living/cafeteria_starboard) -"jMg" = ( -/obj/effect/landmark/start/job/cmo, -/obj/structure/cable, -/turf/open/floor/mainship/sterile/dark, -/area/mainship/medical/upper_medical) "jMY" = ( /obj/machinery/light/mainship{ dir = 8 @@ -12085,16 +11964,18 @@ "jNc" = ( /turf/closed/wall/mainship, /area/mainship/living/bridgebunks) -"jOq" = ( -/obj/structure/bed/chair/office/dark, -/obj/structure/cable, -/obj/machinery/keycard_auth{ - pixel_y = 25 +"jNB" = ( +/obj/structure/table/mainship/nometal, +/obj/item/storage/box/pillbottles, +/obj/item/storage/box/pillbottles{ + pixel_x = 3; + pixel_y = 3 }, -/turf/open/floor/mainship/green{ +/obj/item/storage/box/pillbottles, +/turf/open/floor/mainship/sterile/side{ dir = 1 }, -/area/mainship/living/numbertwobunks) +/area/mainship/medical/chemistry) "jPG" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/mainship/blue, @@ -12119,10 +12000,6 @@ }, /turf/closed/wall/mainship/white, /area/mainship/medical/surgery_hallway) -"jRe" = ( -/obj/structure/cable, -/turf/open/floor/mainship/floor, -/area/mainship/living/numbertwobunks) "jSi" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -12167,6 +12044,15 @@ /obj/machinery/light/mainship, /turf/open/floor/mainship/sterile/side, /area/mainship/medical/operating_room_three) +"jVM" = ( +/obj/machinery/light/mainship{ + dir = 8 + }, +/obj/effect/spawner/random/misc/structure/flavorvending/snackweighted, +/turf/open/floor/mainship/silver{ + dir = 8 + }, +/area/mainship/hallways/bow_hallway) "jVY" = ( /obj/machinery/light/mainship, /turf/open/floor/mainship/mono, @@ -12220,21 +12106,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/command/cic) -"kaw" = ( -/obj/machinery/light/mainship, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 10 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/turf/open/floor/mainship/orange{ - dir = 6 - }, -/area/mainship/hallways/hangar) "kbP" = ( /obj/machinery/processor{ pixel_y = 5 @@ -12252,8 +12123,14 @@ /area/mainship/hull/port_hull) "kce" = ( /obj/machinery/door/airlock/mainship/generic/bathroom/toilet, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/sterile/white, /area/mainship/living/bridgebunks) +"kcL" = ( +/obj/machinery/light/mainship/small{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/tankerbunks) "kfp" = ( /obj/structure/window/framed/mainship, /obj/machinery/door/firedoor/mainship, @@ -12270,6 +12147,12 @@ dir = 8 }, /area/mainship/command/cic) +"kic" = ( +/obj/machinery/computer/crew, +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/mainship/medical/cmo_office) "kjG" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -12346,6 +12229,17 @@ dir = 9 }, /area/mainship/command/cic) +"kpt" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/mainship/living/officer_rnr) "kpy" = ( /turf/open/floor/mainship/sterile/side{ dir = 6 @@ -12428,14 +12322,12 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) -"ktC" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/faxmachine/research, -/obj/machinery/camera/autoname/mainship{ - dir = 1 +"ktJ" = ( +/obj/structure/bed/chair/nometal, +/turf/open/floor/mainship/silver{ + dir = 5 }, -/turf/open/floor/mainship/sterile/side, -/area/mainship/medical/medical_science) +/area/mainship/hallways/bow_hallway) "ktN" = ( /obj/machinery/loadout_vendor, /turf/open/floor/mainship/mono, @@ -12449,25 +12341,35 @@ /obj/vehicle/ridden/motorbike, /turf/open/floor/mainship/cargo, /area/mainship/squads/req) -"kwO" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/open/floor/mainship/sterile/side{ - dir = 8 - }, -/area/mainship/medical/medical_science) "kxd" = ( /turf/open/floor/mainship/green{ dir = 6 }, /area/mainship/squads/req) "kxg" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/light/mainship{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) +"kxp" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/mainship/medical/glass/CMO, +/obj/machinery/door/firedoor/mainship, +/turf/open/floor/mainship/sterile/side{ dir = 1 }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar) +/area/mainship/medical/cmo_office) "kxA" = ( /obj/machinery/camera/autoname/mainship{ dir = 1 @@ -12556,9 +12458,6 @@ /obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/hull/port_hull) -"kCa" = ( -/turf/open/floor/mainship/mono, -/area/mainship/command/bridge) "kCg" = ( /turf/open/floor/mainship/red, /area/mainship/shipboard/firing_range) @@ -12569,10 +12468,30 @@ /obj/effect/turf_decal/warning_stripes/thin, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) -"kFE" = ( -/obj/machinery/light/mainship/small, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) +"kFq" = ( +/obj/machinery/shower{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/effect/spawner/random/misc/soap/regularweighted, +/obj/structure/curtain/medical, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/medical/lower_medical) +"kFG" = ( +/obj/structure/table/mainship/nometal, +/obj/effect/spawner/random/misc/paperbin, +/obj/item/tool/pen, +/obj/machinery/faxmachine/research, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/medical_science) +"kFM" = ( +/obj/machinery/light/mainship/small{ + dir = 1 + }, +/turf/open/floor/wood, +/area/mainship/living/bridgebunks) "kFZ" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 @@ -12614,17 +12533,6 @@ }, /turf/open/floor/wood, /area/mainship/command/corporateliaison) -"kLp" = ( -/obj/effect/landmark/start/job/fieldcommander, -/turf/open/floor/carpet/side, -/area/mainship/living/numbertwobunks) -"kLr" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/mainship/black, -/area/mainship/living/tankerbunks) "kLD" = ( /obj/machinery/atm, /turf/closed/wall/mainship, @@ -12644,36 +12552,14 @@ }, /turf/open/floor/mainship/mono, /area/mainship/engineering/engine_core) -"kLW" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment/corner, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/bow_hallway) -"kMt" = ( -/obj/machinery/light/mainship{ - dir = 4 - }, -/obj/structure/table/mainship/nometal, -/obj/machinery/recharger, -/turf/open/floor/mainship/sterile/side{ - dir = 4 - }, -/area/mainship/medical/lower_medical) "kMC" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment/corner, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 +/obj/structure/computer3frame, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/turf/open/floor/mainship/floor, -/area/mainship/living/numbertwobunks) +/obj/effect/turf_decal/warning_stripes/thin, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "kMY" = ( /turf/open/floor/mainship/orange, /area/mainship/squads/alpha) @@ -12701,13 +12587,6 @@ dir = 4 }, /area/mainship/squads/alpha) -"kQd" = ( -/obj/machinery/power/apc/mainship, -/obj/structure/cable, -/turf/open/floor/mainship/black{ - dir = 1 - }, -/area/mainship/living/tankerbunks) "kQD" = ( /obj/structure/cable, /obj/machinery/door/airlock/mainship/ai{ @@ -12721,6 +12600,15 @@ }, /turf/open/floor/mainship/mono, /area/mainship/command/airoom) +"kQH" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 10 + }, +/obj/machinery/computer/mech_builder, +/turf/open/floor/plating/icefloor/warnplate{ + dir = 10 + }, +/area/mainship/living/tankerbunks) "kQP" = ( /obj/item/radio/intercom/general, /turf/open/floor/mainship/floor, @@ -12737,6 +12625,7 @@ /obj/machinery/landinglight/tadpole{ dir = 1 }, +/obj/effect/ai_node, /turf/open/floor/mainship/cargo/arrow{ dir = 1 }, @@ -12773,15 +12662,6 @@ /obj/structure/closet/firecloset, /turf/open/floor/mainship/cargo, /area/mainship/hallways/port_hallway) -"kVl" = ( -/obj/structure/rack, -/obj/item/reagent_containers/jerrycan, -/obj/item/reagent_containers/jerrycan, -/obj/item/reagent_containers/jerrycan, -/obj/item/reagent_containers/jerrycan, -/obj/item/reagent_containers/jerrycan, -/turf/open/floor/mainship/orange, -/area/mainship/hallways/hangar) "kWq" = ( /obj/structure/disposalpipe/segment, /obj/effect/ai_node, @@ -12793,12 +12673,6 @@ }, /turf/open/floor/mainship/floor, /area/mainship/command/cic) -"kXm" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/mainship/orange{ - dir = 6 - }, -/area/mainship/hallways/hangar) "kYt" = ( /obj/machinery/power/apc/mainship{ dir = 8 @@ -12814,6 +12688,10 @@ dir = 6 }, /area/mainship/shipboard/port_point_defense) +"laz" = ( +/obj/machinery/quick_vendor/beginner, +/turf/open/floor/mainship/mono, +/area/mainship/squads/delta) "laL" = ( /obj/machinery/atmospherics/components/binary/pump/on, /turf/open/floor/mainship/orange{ @@ -12896,13 +12774,15 @@ }, /turf/open/floor/plating, /area/mainship/hallways/hangar) -"liL" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ - dir = 8; - on = 1 +"lip" = ( +/obj/structure/sink{ + dir = 8 }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/bow_hallway) +/obj/structure/mirror{ + dir = 4 + }, +/turf/open/floor/mainship/floor, +/area/mainship/living/tankerbunks) "liY" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -12967,6 +12847,26 @@ "lob" = ( /turf/open/floor/plating/plating_catwalk, /area/mainship/living/port_emb) +"lod" = ( +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted/frosted{ + dir = 4 + }, +/obj/machinery/shower{ + pixel_y = 25 + }, +/obj/machinery/door/window{ + dir = 2 + }, +/obj/effect/spawner/random/misc/soap/regularweighted, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/living/tankerbunks) +"lol" = ( +/obj/structure/dropship_equipment/electronics/spotlights, +/turf/open/floor/mainship/orange, +/area/mainship/hallways/hangar) "loE" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ dir = 8; @@ -13021,6 +12921,19 @@ dir = 5 }, /area/mainship/medical/surgery_hallway) +"lth" = ( +/obj/structure/table/mainship/nometal, +/obj/machinery/reagentgrinder, +/obj/item/stack/sheet/mineral/phoron, +/obj/item/stack/sheet/mineral/phoron, +/obj/item/stack/sheet/mineral/phoron, +/obj/item/stack/sheet/mineral/phoron, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/glass/beaker/large, +/turf/open/floor/mainship/sterile/corner{ + dir = 8 + }, +/area/mainship/medical/cmo_office) "lto" = ( /obj/machinery/door/poddoor/mainship/open{ id = "CIC Lockdown"; @@ -13037,6 +12950,25 @@ /obj/machinery/door/firedoor/mainship, /turf/open/floor/mainship/mono, /area/mainship/command/cic) +"lty" = ( +/obj/effect/spawner/random/misc/structure/flavorvending/cigaretteweighted, +/turf/open/floor/mainship/silver{ + dir = 8 + }, +/area/mainship/hallways/bow_hallway) +"lul" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) +"luG" = ( +/obj/structure/cable, +/obj/effect/spawner/random/misc/structure/flavorvending/cigaretteweighted, +/turf/open/floor/mainship/silver{ + dir = 8 + }, +/area/mainship/hallways/bow_hallway) "lvm" = ( /obj/machinery/camera/autoname/mainship{ dir = 1 @@ -13053,6 +12985,17 @@ "lvI" = ( /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) +"lwr" = ( +/obj/effect/ai_node, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) "lxe" = ( /turf/open/floor/mainship/orange{ dir = 5 @@ -13064,6 +13007,13 @@ }, /turf/open/floor/mainship/mono, /area/mainship/living/cryo_cells) +"lxY" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "lyh" = ( /obj/machinery/light/mainship{ dir = 1 @@ -13071,21 +13021,14 @@ /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "lyr" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/bed/chair/nometal{ - dir = 4 - }, -/turf/open/floor/mainship/green, -/area/mainship/living/numbertwobunks) -"lyB" = ( -/obj/machinery/door/firedoor/mainship{ - dir = 2 - }, -/obj/structure/window/framed/mainship/requisitions, -/turf/open/floor/plating, -/area/mainship/command/bridge) +/obj/structure/dropship_equipment/cas/weapon/bomb_pod, +/obj/machinery/light/mainship, +/turf/open/floor/mainship/cargo, +/area/mainship/hallways/hangar) +"lyC" = ( +/obj/structure/dropship_equipment/cas/weapon/minirocket_pod, +/turf/open/floor/mainship/cargo, +/area/mainship/hallways/hangar) "lyK" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -13127,6 +13070,11 @@ "lAe" = ( /turf/open/shuttle/escapepod/five, /area/mainship/command/self_destruct) +"lAF" = ( +/obj/machinery/door/airlock/mainship/medical/glass/chemistry, +/obj/machinery/door/firedoor/mainship, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/surgery_hallway) "lBc" = ( /obj/effect/attach_point/electronics/dropship1, /turf/open/floor/plating, @@ -13139,14 +13087,11 @@ /obj/effect/landmark/start/latejoin_gateway, /turf/open/floor/mainship/floor, /area/mainship/living/cryo_cells) -"lBZ" = ( -/obj/machinery/landinglight/cas{ - dir = 8 - }, -/turf/open/floor/mainship/cargo/arrow{ - dir = 8 +"lBK" = ( +/turf/open/floor/mainship/silver{ + dir = 6 }, -/area/mainship/hallways/hangar) +/area/mainship/hallways/bow_hallway) "lCl" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ dir = 4; @@ -13158,6 +13103,10 @@ /obj/structure/window/framed/mainship, /turf/open/floor/plating, /area/mainship/hallways/aft_hallway) +"lDd" = ( +/obj/machinery/camera/autoname/mainship, +/turf/open/floor/mainship/cargo, +/area/mainship/hallways/hangar) "lDM" = ( /obj/docking_port/stationary/marine_dropship/crash_target, /obj/machinery/light/mainship{ @@ -13166,16 +13115,6 @@ /obj/machinery/computer/camera_advanced/overwatch/req, /turf/open/floor/mainship/floor, /area/mainship/squads/req) -"lDQ" = ( -/obj/machinery/door/firedoor/mainship, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/mainship/mono, -/area/mainship/command/bridge) "lEm" = ( /turf/open/floor/mainship/terragov/west{ dir = 9 @@ -13217,12 +13156,6 @@ /obj/machinery/door/firedoor/mainship, /turf/open/floor/mainship/mono, /area/mainship/command/bridge) -"lGH" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar) "lHe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 @@ -13247,8 +13180,11 @@ /area/mainship/command/cic) "lHu" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer1, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, /turf/open/floor/wood, -/area/mainship/living/officer_study) +/area/mainship/living/officer_rnr) "lHP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -13332,12 +13268,6 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) -"lMk" = ( -/obj/machinery/door/airlock/mainship/generic/bathroom{ - dir = 2 - }, -/turf/open/floor/mainship/mono, -/area/mainship/living/tankerbunks) "lMY" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -13404,33 +13334,37 @@ /obj/machinery/door/poddoor/mainship/mech, /turf/open/floor/mainship/floor, /area/mainship/living/tankerbunks) +"lQm" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/ai_node, +/turf/open/floor/mainship/silver/corner{ + dir = 8 + }, +/area/mainship/hallways/bow_hallway) +"lRg" = ( +/obj/structure/dropship_equipment/shuttle/operatingtable, +/turf/open/floor/mainship/orange{ + dir = 1 + }, +/area/mainship/hallways/hangar) "lRq" = ( /obj/machinery/light/mainship, /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/engine, /area/mainship/hull/port_hull) +"lRA" = ( +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, +/turf/open/floor/mainship/silver{ + dir = 4 + }, +/area/mainship/command/bridge) "lSf" = ( /turf/open/floor/mainship/silver{ dir = 8 }, /area/mainship/command/cic) -"lTb" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/bow_hallway) -"lTA" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/bed/chair/comfy{ - dir = 1 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "lUU" = ( /turf/closed/wall/mainship/research/containment/wall/corner{ dir = 8 @@ -13466,20 +13400,8 @@ }, /area/mainship/hallways/aft_hallway) "lYN" = ( -/obj/structure/cable, -/obj/machinery/power/apc/mainship{ - dir = 4 - }, /turf/open/floor/mainship/mono, /area/mainship/living/officer_rnr) -"lZN" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/open/floor/mainship/sterile/side{ - dir = 10 - }, -/area/mainship/medical/medical_science) "may" = ( /obj/machinery/vending/MarineMed, /turf/open/floor/mainship/floor, @@ -13492,13 +13414,6 @@ dir = 4 }, /area/mainship/hallways/hangar) -"mdp" = ( -/obj/effect/landmark/start/job/synthetic, -/obj/machinery/camera/autoname/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/cargo, -/area/mainship/living/officer_rnr) "mds" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -13529,6 +13444,13 @@ dir = 4 }, /area/mainship/living/cryo_cells) +"mft" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/port_hallway) "mfu" = ( /obj/structure/cable, /obj/effect/ai_node, @@ -13538,10 +13460,15 @@ /obj/structure/closet/emcloset, /turf/open/floor/mainship/cargo, /area/mainship/hallways/port_hallway) -"mhn" = ( -/obj/effect/soundplayer, -/turf/closed/wall/mainship, -/area/mainship/living/numbertwobunks) +"mhO" = ( +/obj/machinery/camera/autoname/mainship{ + dir = 8 + }, +/obj/structure/dropship_equipment/shuttle/sentry_holder, +/turf/open/floor/mainship/orange{ + dir = 4 + }, +/area/mainship/hallways/hangar) "mjo" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -13551,6 +13478,17 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) +"mjF" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_red/corner, +/turf/open/floor/mainship/floor, +/area/mainship/living/bridgebunks) "mjJ" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 10 @@ -13579,12 +13517,14 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_hallway) "mlV" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ +/obj/machinery/light/mainship/small{ + dir = 4 + }, +/obj/effect/turf_decal/siding/yellow/corner{ dir = 4 }, /turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) +/area/mainship/living/bridgebunks) "mlZ" = ( /obj/machinery/landinglight/alamo{ dir = 1 @@ -13647,6 +13587,10 @@ /obj/effect/soundplayer, /turf/open/floor/mainship_hull, /area/space) +"mpc" = ( +/obj/machinery/light/mainship, +/turf/open/floor/mainship/silver, +/area/mainship/hallways/bow_hallway) "mpD" = ( /obj/machinery/door/window/secure/bridge{ dir = 2 @@ -13660,14 +13604,17 @@ /turf/open/floor/mainship/sterile, /area/mainship/medical/surgery_hallway) "mqI" = ( -/obj/effect/turf_decal/warning_stripes/thin, +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, /obj/machinery/light/mainship{ dir = 8 }, -/turf/open/floor/mainship/orange{ - dir = 10 - }, -/area/mainship/hallways/hangar) +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) "mra" = ( /obj/structure/table/mainship/nometal, /turf/open/floor/mainship/green{ @@ -13678,6 +13625,15 @@ /obj/docking_port/stationary/escape_pod, /turf/open/floor/plating, /area/mainship/living/evacuation/pod/three) +"msB" = ( +/obj/structure/table/mainship/nometal, +/obj/item/clothing/suit/storage/chef/classic, +/obj/item/tool/kitchen/rollingpin, +/obj/item/clothing/head/chefhat, +/obj/item/clothing/gloves/latex, +/obj/item/reagent_containers/food/drinks/shaker, +/turf/open/floor/mainship/mono, +/area/mainship/living/grunt_rnr) "msT" = ( /obj/machinery/light/mainship{ dir = 4 @@ -13747,9 +13703,9 @@ }, /area/mainship/command/cic) "myv" = ( -/obj/structure/dropship_equipment/cas/weapon/heavygun, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/obj/machinery/marine_selector/clothes/commander, +/turf/open/floor/wood, +/area/mainship/living/numbertwobunks) "mzi" = ( /obj/machinery/light/mainship{ dir = 4 @@ -13892,6 +13848,13 @@ /obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/living/cryo_cells) +"mIY" = ( +/obj/machinery/cic_maptable/droppod_maptable, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 6 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar/droppod) "mJs" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -13908,6 +13871,21 @@ }, /turf/open/floor/mainship/mono, /area/mainship/engineering/engine_core) +"mKj" = ( +/obj/structure/disposalpipe/segment/corner{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/mainship/sterile/side{ + dir = 9 + }, +/area/mainship/medical/cmo_office) "mKH" = ( /obj/machinery/light/mainship{ dir = 1 @@ -13935,7 +13913,6 @@ /obj/structure/rack, /obj/structure/ob_ammo/warhead/explosive, /obj/structure/ob_ammo/warhead/explosive, -/obj/structure/ob_ammo/warhead/explosive, /turf/open/floor/mainship/red{ dir = 4 }, @@ -13992,11 +13969,6 @@ /obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/squads/alpha) -"mQn" = ( -/turf/open/floor/mainship/silver{ - dir = 6 - }, -/area/mainship/command/bridge) "mQC" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -14004,17 +13976,11 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/surgery_hallway) -"mQL" = ( -/obj/machinery/vending/weapon, -/turf/open/floor/mainship/green{ - dir = 1 - }, -/area/mainship/living/numbertwobunks) "mQZ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, -/turf/open/floor/mainship/floor, +/turf/open/floor/mainship/sterile/white, /area/mainship/living/bridgebunks) "mRy" = ( /obj/docking_port/stationary/marine_dropship/crash_target, @@ -14024,7 +13990,6 @@ /obj/structure/rack, /obj/structure/ob_ammo/warhead/incendiary, /obj/structure/ob_ammo/warhead/incendiary, -/obj/structure/ob_ammo/warhead/incendiary, /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 }, @@ -14060,18 +14025,6 @@ }, /turf/open/floor/prison/kitchen, /area/mainship/living/officer_rnr) -"mUA" = ( -/obj/structure/window/framed/mainship/requisitions, -/obj/machinery/door/firedoor/mainship{ - dir = 2 - }, -/obj/machinery/door/poddoor/mainship/open{ - dir = 2; - id = "Brig Lockdown"; - name = "\improper Brig Lockdown Podlocks" - }, -/turf/open/floor/plating, -/area/mainship/living/tankerbunks) "mUE" = ( /obj/structure/window/framed/mainship/white, /obj/machinery/door/firedoor/mainship, @@ -14091,6 +14044,31 @@ }, /turf/open/floor/mainship/floor, /area/mainship/hallways/repair_bay) +"mVI" = ( +/obj/machinery/door/airlock/multi_tile/mainship/comdoor, +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, +/turf/open/floor/mainship/silver{ + dir = 8 + }, +/area/mainship/command/bridge) +"mVM" = ( +/obj/structure/window/reinforced/tinted/frosted{ + dir = 4 + }, +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/obj/machinery/shower{ + pixel_y = 25 + }, +/obj/machinery/door/window{ + dir = 2 + }, +/obj/effect/spawner/random/misc/soap/regularweighted, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/living/tankerbunks) "mVS" = ( /obj/machinery/light/mainship{ dir = 4 @@ -14127,21 +14105,12 @@ dir = 1; on = 1 }, -/turf/open/floor/mainship/floor, +/turf/open/floor/mainship/sterile/white, /area/mainship/living/bridgebunks) "mZl" = ( /obj/structure/cable, /turf/open/floor/mainship/floor, /area/mainship/living/pilotbunks) -"nak" = ( -/obj/structure/table/mainship/nometal, -/obj/item/storage/syringe_case/regular, -/obj/machinery/power/apc/mainship, -/obj/structure/cable, -/turf/open/floor/mainship/sterile/side{ - dir = 1 - }, -/area/mainship/medical/surgery_hallway) "nao" = ( /turf/open/floor/mainship/silver{ dir = 8 @@ -14177,22 +14146,27 @@ /turf/open/floor/mainship/sterile/side, /area/mainship/medical/lower_medical) "ndz" = ( -/obj/machinery/marine_selector/clothes/synth, -/turf/open/floor/mainship/mono, -/area/mainship/living/officer_rnr) +/obj/structure/bed, +/obj/item/bedsheet/yellow, +/turf/open/floor/wood, +/area/mainship/living/bridgebunks) "neh" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, +/obj/machinery/power/apc/mainship{ + dir = 1 + }, +/obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/command/telecomms) "neJ" = ( -/obj/machinery/door/airlock/multi_tile/mainship/comdoor{ - name = "\improper Officer's Study" - }, -/obj/machinery/door/firedoor/multi_tile, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/mono, -/area/mainship/living/officer_study) +/area/mainship/living/officer_rnr) "neQ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -14223,12 +14197,6 @@ /obj/effect/spawner/random/engineering/extinguisher/regularweighted, /turf/open/floor/mainship/orange, /area/mainship/engineering/lower_engineering) -"ngN" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/mainship/green, -/area/mainship/living/numbertwobunks) "ngO" = ( /obj/machinery/suit_storage_unit/carbon_unit, /turf/open/floor/mainship/orange{ @@ -14247,11 +14215,6 @@ /obj/docking_port/stationary/marine_dropship/crash_target, /turf/open/floor/plating, /area/mainship/hallways/hangar) -"nhU" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/turf/open/floor/mainship/mono, -/area/mainship/living/tankerbunks) "nib" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -14302,12 +14265,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/engineering/engine_core) -"nnl" = ( -/obj/structure/cable, -/turf/open/floor/mainship/silver/corner{ - dir = 4 - }, -/area/mainship/command/bridge) "npx" = ( /obj/machinery/light/mainship{ dir = 8 @@ -14317,13 +14274,6 @@ dir = 8 }, /area/mainship/medical/lower_medical) -"npA" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 9 - }, -/obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) "nqG" = ( /obj/structure/table/mainship/nometal, /obj/item/storage/firstaid/regular{ @@ -14348,23 +14298,35 @@ dir = 1 }, /area/mainship/medical/surgery_hallway) +"nsk" = ( +/obj/structure/dropship_equipment/shuttle/weapon_holder/machinegun, +/turf/open/floor/mainship/orange, +/area/mainship/hallways/hangar) +"nsm" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/turf/open/floor/mainship/silver/corner{ + dir = 8 + }, +/area/mainship/command/bridge) "nsv" = ( /obj/machinery/light/mainship{ dir = 1 }, /turf/open/floor/mainship/mono, /area/mainship/hallways/port_hallway) +"nsE" = ( +/obj/structure/cable, +/obj/machinery/door/poddoor/mainship/mech, +/turf/open/floor/mainship/black{ + dir = 1 + }, +/area/mainship/living/tankerbunks) "nsR" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/hallways/aft_hallway) -"ntG" = ( -/obj/machinery/researchcomp, -/turf/open/floor/mainship/sterile/side{ - dir = 8 - }, -/area/mainship/medical/surgery_hallway) "ntI" = ( /obj/machinery/door/firedoor/multi_tile{ dir = 1 @@ -14378,12 +14340,18 @@ /obj/machinery/vending/tool, /turf/open/floor/mainship/mono, /area/mainship/squads/delta) -"nui" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/coffeeweighted, -/turf/open/floor/mainship/silver{ +"nuJ" = ( +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/obj/machinery/door/window{ dir = 1 }, -/area/mainship/hallways/bow_hallway) +/obj/structure/toilet{ + dir = 1 + }, +/turf/open/floor/mainship/floor, +/area/mainship/living/tankerbunks) "nuO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -14397,29 +14365,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/living/cryo_cells) -"nwU" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/bow_hallway) -"nxn" = ( -/obj/structure/table/mainship/nometal, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/spray/cleaner, -/obj/machinery/door_control/mainship/research{ - dir = 4; - name = "Exterior Doors"; - pixel_x = -10; - pixel_y = 8 - }, -/obj/machinery/firealarm{ - dir = 4 - }, -/turf/open/floor/mainship/sterile/side{ - dir = 8 - }, -/area/mainship/medical/medical_science) "nyj" = ( /obj/structure/table/mainship/nometal, /obj/item/storage/box/cups, @@ -14516,20 +14461,12 @@ }, /turf/open/floor/mainship/mono, /area/mainship/command/corporateliaison) -"nJb" = ( -/obj/structure/table/mainship/nometal, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/tool/weldingtool/largetank, -/obj/item/tool/weldingtool/largetank, -/obj/item/clothing/head/welding, -/turf/open/floor/mainship/sterile, -/area/mainship/medical/surgery_hallway) "nJN" = ( +/obj/structure/bed/chair/nometal{ + dir = 8 + }, /turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) +/area/mainship/living/bridgebunks) "nKf" = ( /obj/machinery/camera/autoname/mainship{ dir = 4 @@ -14554,6 +14491,14 @@ }, /turf/open/floor/plating, /area/mainship/squads/req) +"nMJ" = ( +/obj/machinery/light/mainship{ + dir = 4 + }, +/turf/open/floor/mainship/sterile/side{ + dir = 4 + }, +/area/mainship/medical/lower_medical) "nMM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ @@ -14568,12 +14513,6 @@ "nNd" = ( /turf/open/floor/mainship/floor, /area/mainship/command/self_destruct) -"nNe" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/bow_hallway) "nNB" = ( /obj/structure/window/framed/mainship/white, /obj/machinery/door/firedoor/mainship, @@ -14583,9 +14522,6 @@ }, /turf/open/floor/plating, /area/mainship/medical/operating_room_three) -"nNF" = ( -/turf/open/floor/mainship/silver, -/area/mainship/command/bridge) "nNJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -14629,17 +14565,16 @@ }, /area/mainship/living/pilotbunks) "nQl" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 4 }, /obj/structure/cable, -/obj/structure/disposalpipe/junction/flipped{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 }, -/obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/port_hallway) "nQq" = ( @@ -14648,12 +14583,6 @@ dir = 8 }, /area/mainship/squads/req) -"nQu" = ( -/obj/structure/table/mainship/nometal, -/obj/item/camera, -/obj/item/robot_parts/head, -/turf/open/floor/wood, -/area/mainship/living/tankerbunks) "nRc" = ( /obj/item/reagent_containers/glass/beaker/cryoxadone, /obj/item/reagent_containers/glass/beaker/cryoxadone, @@ -14671,14 +14600,6 @@ "nRA" = ( /turf/open/floor/plating, /area/mainship/living/evacuation/pod/four) -"nRV" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 8 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/bow_hallway) "nSl" = ( /turf/closed/wall/mainship/white, /area/mainship/medical/lower_medical) @@ -14729,6 +14650,10 @@ dir = 8 }, /area/mainship/medical/lower_medical) +"nWY" = ( +/obj/structure/dropship_equipment/cas/weapon/heavygun, +/turf/open/floor/mainship/cargo, +/area/mainship/hallways/hangar) "nXn" = ( /obj/structure/cable, /obj/machinery/power/apc/mainship{ @@ -14736,19 +14661,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/port_umbilical) -"nXZ" = ( -/obj/structure/table/mainship/nometal, -/obj/item/storage/pill_bottle/kelotane{ - pixel_x = -7 - }, -/obj/item/storage/pill_bottle/dexalin, -/obj/item/storage/pill_bottle/inaprovaline{ - pixel_x = 7 - }, -/turf/open/floor/mainship/sterile/side{ - dir = 8 - }, -/area/mainship/medical/surgery_hallway) "nYL" = ( /obj/machinery/light/mainship{ dir = 1 @@ -14758,29 +14670,12 @@ dir = 1 }, /area/mainship/squads/req) -"nZu" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/obj/effect/turf_decal/warning_stripes/thin, -/obj/machinery/light/mainship, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) -"nZA" = ( -/obj/structure/disposalpipe/segment/corner{ - dir = 8 - }, +"nYN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ +/turf/open/floor/mainship/silver{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, -/turf/open/floor/mainship/sterile/side{ - dir = 9 - }, -/area/mainship/medical/medical_science) +/area/mainship/command/bridge) "oaf" = ( /obj/effect/landmark/start/job/medicalofficer, /turf/open/floor/mainship/sterile/side{ @@ -14788,21 +14683,9 @@ }, /area/mainship/medical/surgery_hallway) "oam" = ( -/obj/machinery/light/mainship/small{ - dir = 1 - }, -/obj/machinery/recharge_station, -/turf/open/floor/mainship/mono, -/area/mainship/living/officer_rnr) -"oaQ" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thin, -/obj/structure/prop/mainship/hangar_stencil, -/obj/machinery/light/mainship, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/obj/structure/mirror, +/turf/open/floor/wood, +/area/mainship/living/bridgebunks) "oaW" = ( /obj/machinery/marine_selector/clothes, /obj/structure/window/reinforced{ @@ -14822,6 +14705,12 @@ }, /turf/open/floor/mainship/silver, /area/mainship/command/cic) +"obD" = ( +/obj/structure/closet/secure_closet/CMO, +/turf/open/floor/mainship/sterile/corner{ + dir = 4 + }, +/area/mainship/medical/cmo_office) "obX" = ( /obj/machinery/light/mainship/small{ dir = 8 @@ -14855,13 +14744,16 @@ }, /area/mainship/command/cic) "ofY" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 10 - }, -/turf/open/floor/mainship/orange/corner{ +/obj/structure/cable, +/obj/machinery/door/airlock/mainship/command/FCDRoffice, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 8 }, -/area/mainship/hallways/hangar) +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) "ogn" = ( /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/medical_science) @@ -14886,15 +14778,6 @@ dir = 10 }, /area/mainship/command/cic) -"oiB" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 1 - }, -/obj/structure/bed/chair/nometal{ - dir = 1 - }, -/turf/open/floor/mainship/silver, -/area/mainship/hallways/bow_hallway) "oiS" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -14943,6 +14826,13 @@ dir = 5 }, /area/mainship/command/cic) +"olO" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "oms" = ( /obj/machinery/light/mainship, /obj/effect/turf_decal/warning_stripes/thin{ @@ -15009,6 +14899,13 @@ }, /turf/open/floor/mainship/ai, /area/mainship/command/airoom) +"oxc" = ( +/obj/machinery/firealarm, +/obj/structure/closet/secure_closet/medical3, +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/mainship/medical/surgery_hallway) "oxk" = ( /obj/machinery/cloning/vats, /turf/open/floor/mainship/sterile/side{ @@ -15091,6 +14988,22 @@ dir = 1 }, /area/mainship/hallways/repair_bay) +"oDv" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 6 + }, +/obj/structure/disposalpipe/segment/corner{ + dir = 4 + }, +/obj/machinery/light/mainship{ + dir = 1 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "oDF" = ( /obj/machinery/vending/weapon, /obj/structure/window/reinforced{ @@ -15156,6 +15069,20 @@ }, /turf/open/floor/mainship/mono, /area/mainship/living/pilotbunks) +"oIq" = ( +/obj/structure/table/mainship/nometal, +/obj/item/clothing/head/welding, +/obj/item/clothing/head/welding, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/tool/weldingtool/largetank, +/obj/item/tool/weldingtool/largetank, +/turf/open/floor/mainship/sterile/side{ + dir = 4 + }, +/area/mainship/medical/lower_medical) "oIu" = ( /obj/machinery/door/airlock/mainship/marine/general/corps{ dir = 2 @@ -15182,21 +15109,16 @@ }, /area/mainship/engineering/ce_room) "oLl" = ( -/obj/machinery/light/mainship{ - dir = 8 - }, +/obj/structure/bed, +/obj/item/bedsheet/purple, +/turf/open/floor/wood, +/area/mainship/living/bridgebunks) +"oLu" = ( +/obj/machinery/holopad, +/obj/effect/ai_node, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) -"oLJ" = ( -/obj/machinery/vending/nanomed, -/obj/structure/table/mainship/nometal, -/obj/item/clothing/head/modular/robot/heavy, -/obj/item/reagent_containers/food/drinks/britcup, -/obj/machinery/firealarm, -/turf/open/floor/mainship/black{ - dir = 1 - }, -/area/mainship/living/tankerbunks) +/area/mainship/hallways/bow_hallway) "oMq" = ( /obj/machinery/vending/medical/shipside, /turf/open/floor/mainship/sterile/side{ @@ -15208,6 +15130,11 @@ /obj/machinery/door/firedoor/mainship, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/surgery_hallway) +"oPC" = ( +/obj/structure/ship_ammo/cas/heavygun, +/obj/machinery/camera/autoname/mainship, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "oPN" = ( /obj/machinery/door/firedoor/mainship, /obj/structure/table/reinforced, @@ -15248,6 +15175,12 @@ dir = 10 }, /area/mainship/command/cic) +"oTi" = ( +/obj/machinery/vending/armor_supply, +/turf/open/floor/mainship/silver{ + dir = 8 + }, +/area/mainship/command/bridge) "oTF" = ( /obj/structure/rack, /obj/structure/ob_ammo/warhead/cluster, @@ -15255,7 +15188,6 @@ dir = 4 }, /obj/structure/ob_ammo/warhead/cluster, -/obj/structure/ob_ammo/warhead/cluster, /turf/open/floor/mainship/red{ dir = 4 }, @@ -15269,6 +15201,14 @@ /obj/machinery/telecomms/processor/preset_four, /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) +"oWw" = ( +/obj/machinery/camera/autoname/mainship{ + dir = 4 + }, +/turf/open/floor/mainship/sterile/side{ + dir = 8 + }, +/area/mainship/medical/surgery_hallway) "oWI" = ( /obj/machinery/vending/weapon, /obj/structure/window/reinforced{ @@ -15341,6 +15281,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) +"paZ" = ( +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "pbV" = ( /turf/open/floor/mainship/green/corner, /area/mainship/squads/req) @@ -15351,17 +15297,6 @@ /obj/item/clothing/head/warning_cone, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) -"pdX" = ( -/obj/machinery/light/mainship{ - dir = 4 - }, -/obj/structure/barricade/metal{ - dir = 8 - }, -/turf/open/floor/mainship/sterile/side{ - dir = 4 - }, -/area/mainship/medical/lower_medical) "peh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 @@ -15431,15 +15366,6 @@ dir = 10 }, /area/mainship/medical/medical_science) -"pjU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/light/mainship{ - dir = 8 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/bow_hallway) "pjY" = ( /obj/structure/closet/secure_closet/freezer/fridge, /turf/open/floor/mainship/mono, @@ -15535,10 +15461,6 @@ dir = 1 }, /area/mainship/command/cic) -"pqd" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/snackweighted, -/turf/open/floor/mainship/silver, -/area/mainship/hallways/bow_hallway) "pqz" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 5 @@ -15634,12 +15556,6 @@ /obj/structure/cable, /turf/open/floor/mainship/floor, /area/mainship/squads/req) -"pAf" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/cigaretteweighted, -/turf/open/floor/mainship/silver{ - dir = 6 - }, -/area/mainship/hallways/bow_hallway) "pBg" = ( /obj/structure/cable, /turf/open/floor/mainship/orange{ @@ -15761,10 +15677,9 @@ /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/starboard_hallway) "pNB" = ( -/obj/effect/turf_decal/warning_stripes/thin{ +/obj/machinery/door/airlock/multi_tile/mainship/blackgeneric/glass{ dir = 1 }, -/obj/effect/turf_decal/warning_stripes/thin, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "pNG" = ( @@ -15778,16 +15693,25 @@ }, /area/mainship/living/basketball) "pOE" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, +/obj/structure/table/mainship/nometal, +/obj/effect/spawner/random/misc/cigarettes, /turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) +/area/mainship/living/bridgebunks) "pPG" = ( /obj/structure/bed/stool{ pixel_y = 8 }, /turf/open/floor/grass, /area/mainship/living/starboard_garden) +"pPS" = ( +/obj/machinery/light/mainship{ + dir = 1 + }, +/obj/structure/dropship_equipment/shuttle/sentry_holder, +/turf/open/floor/mainship/orange{ + dir = 5 + }, +/area/mainship/hallways/hangar) "pQL" = ( /obj/machinery/conveyor{ id = "lower_garbage" @@ -15810,23 +15734,15 @@ dir = 5 }, /area/mainship/command/cic) -"pSn" = ( -/obj/structure/table/mainship/nometal, -/obj/item/storage/pill_bottle/dylovene{ - pixel_x = -5 - }, -/obj/item/storage/pill_bottle/dylovene, -/obj/item/storage/pill_bottle/bicaridine{ - pixel_x = 5 - }, -/turf/open/floor/mainship/sterile/side{ - dir = 8 - }, -/area/mainship/medical/surgery_hallway) "pSr" = ( /obj/effect/landmark/start/job/captain, /turf/open/floor/wood, /area/mainship/living/commandbunks) +"pTh" = ( +/turf/open/floor/mainship/sterile/side{ + dir = 9 + }, +/area/mainship/medical/surgery_hallway) "pTq" = ( /obj/machinery/door/poddoor/mainship/open{ id = "CIC Lockdown"; @@ -15881,8 +15797,10 @@ /obj/machinery/door/firedoor/mainship{ dir = 2 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/structure/cable, /turf/open/floor/mainship/stripesquare, -/area/mainship/hallways/hangar) +/area/mainship/living/numbertwobunks) "pWJ" = ( /obj/machinery/power/apc/mainship{ dir = 4 @@ -15910,6 +15828,11 @@ /obj/effect/spawner/random/engineering/structure/tank/waterweighted, /turf/open/floor/mainship/floor, /area/mainship/hallways/repair_bay) +"pXz" = ( +/obj/structure/toilet, +/obj/structure/mirror, +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) "pXO" = ( /turf/open/floor/mainship/silver/corner{ dir = 8 @@ -15928,16 +15851,14 @@ /obj/machinery/light/mainship/small, /turf/open/floor/mainship/mono, /area/mainship/hallways/port_umbilical) -"pYL" = ( -/obj/machinery/vending/armor_supply, -/turf/open/floor/mainship/green{ - dir = 5 - }, -/area/mainship/living/numbertwobunks) "pZA" = ( /obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/command/self_destruct) +"qaa" = ( +/obj/machinery/quick_vendor/beginner, +/turf/open/floor/mainship/mono, +/area/mainship/squads/alpha) "qae" = ( /obj/structure/cable, /obj/effect/ai_node, @@ -15981,12 +15902,6 @@ /obj/effect/soundplayer, /turf/closed/wall/mainship, /area/mainship/living/pilotbunks) -"qeT" = ( -/obj/machinery/chem_master, -/turf/open/floor/mainship/sterile/corner{ - dir = 8 - }, -/area/mainship/medical/medical_science) "qfe" = ( /obj/machinery/door/poddoor/shutters/mainship/selfdestruct, /turf/closed/wall/mainship, @@ -15998,6 +15913,21 @@ /obj/machinery/camera/autoname/mainship, /turf/open/floor/mainship/floor, /area/mainship/engineering/lower_engine_monitoring) +"qgb" = ( +/obj/structure/cable, +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/chemistry) +"qgD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/wood, +/area/mainship/living/officer_rnr) "qgE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/structure/cable, @@ -16006,6 +15936,15 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/aft_umbilical) +"qhh" = ( +/obj/machinery/keycard_auth{ + pixel_y = -30 + }, +/obj/machinery/camera/autoname/mainship{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) "qhN" = ( /obj/machinery/vending/nanomed, /turf/open/floor/mainship/mono, @@ -16047,9 +15986,16 @@ /turf/open/floor/mainship/cargo, /area/mainship/squads/req) "qiO" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar) +/obj/structure/bed/chair/wood/wings{ + dir = 8 + }, +/obj/machinery/camera/autoname/mainship{ + dir = 4 + }, +/turf/open/floor/carpet/side{ + dir = 1 + }, +/area/mainship/living/numbertwobunks) "qjs" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light/mainship{ @@ -16078,13 +16024,31 @@ dir = 4 }, /area/mainship/living/commandbunks) -"qnS" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 4 +"qmn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 }, -/obj/machinery/loadout_vendor, -/turf/open/floor/mainship/black{ - dir = 9 +/obj/effect/ai_node, +/obj/machinery/light/mainship, +/turf/open/floor/mainship/sterile/side, +/area/mainship/medical/lower_medical) +"qmA" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/obj/machinery/vending/tool, +/obj/effect/turf_decal/warning_stripes/thin, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) +"qmJ" = ( +/obj/machinery/door_control/mainship/mech{ + dir = 1 + }, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 6 + }, +/turf/open/floor/plating/icefloor/warnplate{ + dir = 6 }, /area/mainship/living/tankerbunks) "qod" = ( @@ -16114,6 +16078,14 @@ dir = 4 }, /area/mainship/living/port_emb) +"qoC" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 5 + }, +/turf/open/floor/plating/icefloor/warnplate{ + dir = 5 + }, +/area/mainship/living/tankerbunks) "qpI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -16122,11 +16094,6 @@ /obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/hull/starboard_hull) -"qpS" = ( -/obj/structure/closet/secure_closet/medical_doctor, -/obj/machinery/air_alarm, -/turf/open/floor/mainship/sterile/corner, -/area/mainship/medical/surgery_hallway) "qqj" = ( /obj/structure/table/mainship/nometal, /obj/item/weapon/combat_knife, @@ -16156,12 +16123,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /turf/open/floor/mainship/floor, /area/mainship/hallways/bow_hallway) -"qrI" = ( -/obj/structure/prop/mainship/halfbuilt_mech/vanguard, -/turf/open/floor/mainship/black{ - dir = 1 - }, -/area/mainship/living/tankerbunks) "qrK" = ( /obj/structure/table/mainship/nometal, /obj/effect/spawner/random/misc/earmuffs, @@ -16177,6 +16138,9 @@ dir = 4 }, /area/mainship/command/bridge) +"qrO" = ( +/turf/open/floor/mainship/silver, +/area/mainship/hallways/bow_hallway) "qsB" = ( /obj/structure/window/reinforced/toughened, /obj/structure/table/mainship/nometal, @@ -16238,10 +16202,15 @@ }, /area/mainship/hallways/repair_bay) "qwP" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/microwave, +/obj/machinery/camera/autoname/mainship{ + dir = 8 + }, +/obj/machinery/light/mainship/small{ + dir = 8 + }, +/obj/effect/turf_decal/siding/yellow/corner, /turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) +/area/mainship/living/bridgebunks) "qxm" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -16253,18 +16222,18 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/lower_medical) -"qxG" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/structure/cable, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/port_hallway) "qys" = ( /obj/structure/bed, /obj/item/bedsheet/medical, /turf/open/floor/mainship/sterile/side, /area/mainship/medical/lower_medical) +"qyD" = ( +/obj/machinery/light/mainship{ + dir = 1 + }, +/obj/machinery/vending/engivend, +/turf/open/floor/mainship/floor, +/area/mainship/hallways/hangar) "qza" = ( /obj/structure/table/mainship/nometal, /obj/item/storage/firstaid/toxin{ @@ -16335,11 +16304,6 @@ /obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/squads/alpha) -"qDv" = ( -/turf/open/floor/plating/icefloor/warnplate{ - dir = 10 - }, -/area/mainship/living/tankerbunks) "qDC" = ( /obj/machinery/light/mainship{ dir = 1 @@ -16376,20 +16340,6 @@ }, /turf/open/floor/plating, /area/mainship/command/corporateliaison) -"qFH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/obj/structure/disposalpipe/segment/corner{ - dir = 1 - }, -/obj/machinery/light/mainship, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/bow_hallway) "qFQ" = ( /obj/machinery/light/mainship{ dir = 4 @@ -16417,15 +16367,6 @@ /obj/structure/closet, /turf/open/floor/mainship/mono, /area/mainship/living/starboard_emb) -"qJa" = ( -/obj/machinery/camera/autoname/mainship{ - dir = 4 - }, -/obj/machinery/researchcomp, -/turf/open/floor/mainship/sterile/side{ - dir = 8 - }, -/area/mainship/medical/surgery_hallway) "qJb" = ( /obj/machinery/conveyor{ id = "lower_garbage" @@ -16440,15 +16381,6 @@ dir = 4 }, /area/mainship/hull/port_hull) -"qJm" = ( -/obj/item/tool/kitchen/tray, -/obj/item/clothing/suit/chef/classic, -/obj/item/clothing/head/chefhat, -/obj/structure/table/reinforced, -/obj/item/tool/kitchen/rollingpin, -/obj/item/clothing/gloves/latex, -/turf/open/floor/mainship/mono, -/area/mainship/living/officer_rnr) "qKs" = ( /obj/structure/table/woodentable, /obj/item/pizzabox/meat, @@ -16555,28 +16487,11 @@ /obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/hull/port_hull) -"qRo" = ( -/obj/machinery/door_control/mainship/mech{ - dir = 1 - }, -/turf/open/floor/plating/icefloor/warnplate{ - dir = 6 - }, -/area/mainship/living/tankerbunks) -"qRF" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ - dir = 8; - on = 1 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/tankerbunks) "qSA" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 4 - }, -/obj/effect/landmark/start/job/staffofficer, +/obj/structure/table/mainship/nometal, +/obj/machinery/microwave, /turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) +/area/mainship/living/bridgebunks) "qTt" = ( /obj/machinery/telecomms/bus/preset_two, /turf/open/floor/mainship/tcomms, @@ -16602,6 +16517,12 @@ /obj/structure/window/reinforced/extratoughened, /turf/open/floor/mainship/ai, /area/mainship/command/airoom) +"qVV" = ( +/obj/docking_port/stationary/marine_dropship/crash_target, +/turf/open/floor/mainship/sterile/side{ + dir = 10 + }, +/area/mainship/medical/surgery_hallway) "qXV" = ( /obj/machinery/light/mainship{ dir = 1 @@ -16609,9 +16530,10 @@ /turf/open/floor/mainship/mono, /area/mainship/command/corporateliaison) "qYe" = ( -/obj/structure/dropship_equipment/shuttle/flare_launcher, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/turf/open/floor/carpet/side{ + dir = 6 + }, +/area/mainship/living/numbertwobunks) "qZy" = ( /turf/open/floor/mainship/blue, /area/mainship/living/port_emb) @@ -16657,6 +16579,18 @@ dir = 8 }, /area/mainship/command/cic) +"raA" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/structure/window/reinforced/tinted/frosted{ + dir = 1 + }, +/obj/machinery/door/window{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/living/numbertwobunks) "rbv" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -16693,6 +16627,13 @@ }, /turf/open/floor/mainship/stripesquare, /area/mainship/engineering/engine_core) +"rcW" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/turf/open/floor/mainship/silver/corner{ + dir = 1 + }, +/area/mainship/command/bridge) "rdK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -16715,6 +16656,13 @@ /obj/item/clothing/suit/armor/bulletproof, /turf/open/floor/mainship/red/full, /area/mainship/command/cic) +"rfQ" = ( +/obj/structure/table/mainship/nometal, +/obj/item/tool/crowbar, +/obj/effect/spawner/random/misc/table_lighting, +/obj/item/camera, +/turf/open/floor/wood, +/area/mainship/living/tankerbunks) "rgX" = ( /obj/structure/closet/secure_closet/securecom, /obj/item/storage/pouch/magazine/pistol/large/mateba, @@ -16739,15 +16687,6 @@ /obj/machinery/light/mainship, /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) -"rjS" = ( -/obj/machinery/light/mainship{ - dir = 8 - }, -/obj/machinery/vending/uniform_supply, -/turf/open/floor/mainship/black{ - dir = 8 - }, -/area/mainship/living/tankerbunks) "rkn" = ( /obj/machinery/door/airlock/mainship/marine/general/engi{ dir = 2 @@ -16763,7 +16702,7 @@ /turf/open/floor/carpet/side{ dir = 1 }, -/area/mainship/living/officer_study) +/area/mainship/living/officer_rnr) "rkB" = ( /obj/machinery/camera/autoname/mainship{ dir = 4 @@ -16775,27 +16714,11 @@ /obj/machinery/holopad, /turf/open/floor/mainship/ai, /area/mainship/command/airoom) -"rkD" = ( -/obj/structure/window/framed/mainship, -/obj/machinery/door/firedoor/mainship{ - dir = 2 - }, -/turf/open/floor/plating, -/area/mainship/living/officer_study) "rne" = ( /turf/open/floor/mainship/red{ dir = 8 }, /area/mainship/shipboard/port_point_defense) -"rnz" = ( -/obj/machinery/door/airlock/mainship/maint{ - dir = 2 - }, -/obj/machinery/door/firedoor/mainship{ - dir = 2 - }, -/turf/open/floor/mainship/mono, -/area/mainship/living/officer_study) "rnS" = ( /obj/structure/bed/chair/nometal{ dir = 1 @@ -16851,6 +16774,12 @@ /obj/effect/ai_node, /turf/open/floor/mainship/floor, /area/mainship/squads/req) +"rtt" = ( +/obj/structure/dropship_equipment/electronics/spotlights, +/turf/open/floor/mainship/orange{ + dir = 6 + }, +/area/mainship/hallways/hangar) "rtD" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -16860,19 +16789,18 @@ dir = 5 }, /area/mainship/hallways/repair_bay) +"rue" = ( +/obj/effect/spawner/random/misc/structure/flavorvending/snackweighted, +/turf/open/floor/mainship/silver{ + dir = 8 + }, +/area/mainship/hallways/bow_hallway) "ruj" = ( /turf/open/floor/mainship/mono, /area/mainship/hallways/port_hallway) "ruy" = ( /turf/open/floor/mainship/cargo, /area/mainship/squads/delta) -"rvJ" = ( -/obj/item/radio/intercom/general, -/obj/machinery/chem_dispenser, -/turf/open/floor/mainship/sterile/side{ - dir = 1 - }, -/area/mainship/medical/medical_science) "rwd" = ( /obj/machinery/cryopod/right, /turf/open/floor/mainship/sterile/corner{ @@ -16903,6 +16831,15 @@ }, /turf/open/floor/mainship/mono, /area/mainship/command/corporateliaison) +"rAI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/light/mainship{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "rAT" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, @@ -16914,19 +16851,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/mainship/mono, /area/mainship/hallways/port_hallway) -"rBJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/bow_hallway) "rDz" = ( /obj/structure/window/framed/mainship/requisitions, /obj/machinery/door/poddoor/mainship/open{ @@ -16950,6 +16874,11 @@ dir = 9 }, /area/mainship/engineering/lower_engineering) +"rFu" = ( +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/mainship/medical/surgery_hallway) "rGk" = ( /obj/effect/turf_decal/warning_stripes/thin, /obj/effect/turf_decal/warning_stripes/thin{ @@ -16964,6 +16893,15 @@ /obj/structure/cable, /turf/open/floor/mainship/floor, /area/mainship/hallways/aft_hallway) +"rGG" = ( +/obj/structure/cable, +/obj/machinery/firealarm{ + dir = 4 + }, +/turf/open/floor/mainship/black{ + dir = 1 + }, +/area/mainship/living/tankerbunks) "rHG" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -17005,6 +16943,10 @@ /obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/hull/starboard_hull) +"rLr" = ( +/obj/structure/cable, +/turf/open/floor/mainship/floor, +/area/mainship/living/tankerbunks) "rMd" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -17025,15 +16967,6 @@ /obj/structure/bed/chair/comfy/black, /turf/open/floor/mainship/silver/full, /area/mainship/hallways/hangar) -"rNF" = ( -/obj/vehicle/ridden/powerloader, -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/orange{ - dir = 5 - }, -/area/mainship/hallways/hangar) "rNO" = ( /obj/structure/table/mainship/nometal, /obj/item/camera, @@ -17051,12 +16984,6 @@ dir = 8 }, /area/mainship/hallways/repair_bay) -"rPg" = ( -/obj/machinery/computer/crew, -/turf/open/floor/mainship/sterile/corner{ - dir = 1 - }, -/area/mainship/medical/upper_medical) "rQa" = ( /obj/effect/spawner/random/misc/structure/flavorvending/colaweighted, /turf/open/floor/mainship/mono, @@ -17066,6 +16993,12 @@ /obj/item/toy/plush/rouny, /turf/open/floor/mainship/mono, /area/mainship/living/starboard_emb) +"rRe" = ( +/obj/structure/flora/pottedplant/twentytwo, +/turf/open/floor/mainship/silver{ + dir = 1 + }, +/area/mainship/hallways/bow_hallway) "rRW" = ( /obj/structure/table/mainship/nometal, /obj/item/binoculars, @@ -17076,13 +17009,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/command/corporateliaison) -"rSg" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/mainship/sterile/corner{ - dir = 1 - }, -/area/mainship/medical/medical_science) "rSk" = ( /obj/structure/cable, /obj/machinery/power/apc/mainship{ @@ -17169,7 +17095,7 @@ /area/mainship/hull/starboard_hull) "rYA" = ( /obj/structure/table/mainship/nometal, -/obj/item/stack/sheet/glass/large_stack, +/obj/item/stack/sheet/glass/glass/large_stack, /obj/effect/spawner/random/misc/gnome, /turf/open/floor/mainship/mono, /area/mainship/engineering/lower_engineering) @@ -17197,22 +17123,27 @@ dir = 4 }, /area/mainship/engineering/ce_room) +"sbF" = ( +/obj/machinery/landinglight/cas{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "scY" = ( /obj/structure/table/mainship/nometal, /obj/item/tool/crowbar, /turf/open/floor/mainship/tcomms, /area/mainship/command/self_destruct) -"sdL" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/door/firedoor/mainship{ - dir = 2 - }, -/obj/machinery/door/airlock/mainship/generic/mech_pilot/bunk{ - dir = 1 +"sem" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1; + pixel_y = 1 }, /turf/open/floor/mainship/mono, -/area/mainship/living/tankerbunks) +/area/mainship/hallways/hangar) "seG" = ( /turf/open/floor/mainship/mono, /area/mainship/squads/req) @@ -17235,17 +17166,21 @@ /obj/effect/landmark/start/job/squadengineer, /turf/open/floor/mainship/mono, /area/mainship/living/cryo_cells) +"sgw" = ( +/obj/structure/cable, +/turf/open/floor/wood, +/area/mainship/medical/surgery_hallway) +"sgZ" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/turf/open/floor/mainship/floor, +/area/mainship/command/bridge) "shv" = ( /turf/open/floor/mainship/terragov/west{ dir = 6 }, /area/mainship/command/cic) -"shW" = ( -/obj/machinery/vending/armor_supply, -/turf/open/floor/mainship/black{ - dir = 8 - }, -/area/mainship/living/tankerbunks) "sic" = ( /obj/item/reagent_containers/spray/cleaner, /obj/item/reagent_containers/spray/cleaner, @@ -17284,13 +17219,19 @@ "sjM" = ( /turf/open/floor/plating, /area/mainship/living/tankerbunks) -"sjV" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ - on = 1 - }, +"sjN" = ( /obj/structure/cable, -/turf/open/floor/mainship/floor, -/area/mainship/living/numbertwobunks) +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/structure/disposalpipe/junction/flipped{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/port_hallway) "skf" = ( /obj/structure/table/mainship/nometal, /obj/item/storage/box/drinkingglasses, @@ -17299,12 +17240,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/command/corporateliaison) -"skp" = ( -/obj/machinery/computer/mech_builder, -/turf/open/floor/plating/icefloor/warnplate{ - dir = 8 - }, -/area/mainship/living/tankerbunks) "slq" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 1 @@ -17394,22 +17329,19 @@ }, /area/mainship/medical/surgery_hallway) "soQ" = ( -/obj/structure/table/mainship/nometal, -/obj/item/toy/deck, +/obj/structure/bed/chair/nometal{ + dir = 8 + }, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 4 + }, /turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) +/area/mainship/living/bridgebunks) "spa" = ( /obj/machinery/door/firedoor/mainship, /obj/structure/window/framed/mainship, /turf/open/floor/plating, /area/mainship/squads/delta) -"spn" = ( -/obj/machinery/chem_dispenser, -/obj/item/radio/intercom/general, -/turf/open/floor/mainship/sterile/corner{ - dir = 1 - }, -/area/mainship/medical/chemistry) "spV" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -17440,6 +17372,17 @@ }, /turf/open/floor/plating, /area/mainship/hallways/hangar) +"srv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/structure/disposalpipe/segment/corner{ + dir = 1 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/bow_hallway) "srL" = ( /obj/machinery/vending/weapon, /turf/open/floor/mainship/mono, @@ -17451,12 +17394,13 @@ /turf/open/floor/plating/plating_catwalk, /area/mainship/living/grunt_rnr) "ssC" = ( -/obj/machinery/light/mainship, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 +/obj/effect/turf_decal/warning_stripes/thin, +/obj/item/clothing/head/warning_cone, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 }, -/turf/open/floor/mainship/green, -/area/mainship/living/numbertwobunks) +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "stM" = ( /obj/structure/bed, /obj/effect/landmark/start/job/pilotofficer, @@ -17504,11 +17448,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/command/corporateliaison) -"syl" = ( -/obj/structure/window/framed/mainship/white, -/obj/machinery/door/firedoor/mainship, -/turf/open/floor/plating, -/area/mainship/medical/upper_medical) "syG" = ( /obj/machinery/cic_maptable/drawable/big, /turf/open/floor/mainship/floor, @@ -17578,6 +17517,13 @@ /obj/machinery/telecomms/bus/preset_three, /turf/open/floor/mainship/tcomms, /area/mainship/command/telecomms) +"sHs" = ( +/obj/machinery/camera/autoname/mainship{ + dir = 1 + }, +/obj/machinery/vending/medical/shipside, +/turf/open/floor/mainship/sterile/side, +/area/mainship/medical/medical_science) "sIX" = ( /obj/machinery/light/mainship, /obj/machinery/computer/squad_manager, @@ -17600,6 +17546,16 @@ /obj/item/toy/plush/moth, /turf/open/floor/mainship/mono, /area/mainship/living/starboard_emb) +"sMo" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) "sMD" = ( /obj/structure/closet/secure_closet/freezer, /obj/item/reagent_containers/food/snacks/sandwiches/sandwich, @@ -17643,12 +17599,28 @@ dir = 1 }, /area/mainship/hallways/repair_bay) +"sOr" = ( +/obj/machinery/light/mainship{ + dir = 1 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 9 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "sOM" = ( /obj/machinery/optable, /obj/item/tank/anesthetic, /obj/item/clothing/mask/breath/medical, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/operating_room_four) +"sPk" = ( +/obj/docking_port/stationary/marine_dropship/crash_target, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 5 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "sPP" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment/corner{ @@ -17716,6 +17688,10 @@ /obj/structure/cable, /turf/open/floor/mainship/floor, /area/mainship/living/cafeteria_starboard) +"sTv" = ( +/obj/structure/ship_ammo/cas/bomblet, +/turf/open/floor/mainship/cargo, +/area/mainship/hallways/hangar) "sVt" = ( /turf/open/floor/mainship/purple{ dir = 1 @@ -17734,17 +17710,6 @@ /obj/structure/bed/chair/ob_chair, /turf/open/floor/mainship/mono, /area/mainship/shipboard/port_point_defense) -"sYp" = ( -/obj/structure/sink{ - dir = 4 - }, -/obj/machinery/camera/autoname/mainship{ - dir = 8 - }, -/turf/open/floor/mainship/sterile/side{ - dir = 4 - }, -/area/mainship/medical/medical_science) "sYL" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -17801,6 +17766,17 @@ /obj/structure/bed/bunkbed, /turf/open/floor/mainship/mono, /area/mainship/living/port_emb) +"tdp" = ( +/obj/machinery/door/airlock/mainship/generic/mech_pilot/bunk{ + dir = 1 + }, +/turf/open/floor/mainship/floor, +/area/mainship/living/tankerbunks) +"ten" = ( +/obj/structure/bed, +/obj/item/bedsheet/blue, +/turf/open/floor/wood, +/area/mainship/living/bridgebunks) "tfu" = ( /turf/closed/wall/mainship/outer, /area/mainship/hallways/port_umbilical) @@ -17814,9 +17790,6 @@ /turf/open/floor/mainship/ai, /area/mainship/command/airoom) "tgH" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17824,8 +17797,25 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) +"tgI" = ( +/obj/structure/table/mainship/nometal, +/obj/item/storage/pill_bottle/kelotane{ + pixel_x = -7 + }, +/obj/item/storage/pill_bottle/dexalin, +/obj/item/storage/pill_bottle/inaprovaline{ + pixel_x = 7 + }, +/obj/item/healthanalyzer, +/turf/open/floor/mainship/sterile/side{ + dir = 8 + }, +/area/mainship/medical/surgery_hallway) "tgK" = ( /obj/structure/prop/mainship/cannon_cable_connector, /turf/open/floor/mainship/mono, @@ -17845,6 +17835,7 @@ /obj/machinery/light/mainship{ dir = 4 }, +/obj/item/clothing/gloves/insulated, /turf/open/floor/mainship/orange{ dir = 4 }, @@ -17854,16 +17845,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/port_hull) -"tjn" = ( -/obj/machinery/shower{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/effect/spawner/random/misc/soap/regularweighted, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/medical/lower_medical) "tkF" = ( /obj/machinery/light/mainship{ dir = 1 @@ -17876,12 +17857,6 @@ /obj/structure/rack, /turf/open/floor/mainship/red/full, /area/mainship/command/cic) -"tkL" = ( -/obj/machinery/vending/weapon, -/turf/open/floor/mainship/black{ - dir = 10 - }, -/area/mainship/living/tankerbunks) "tlq" = ( /obj/structure/window/reinforced, /obj/machinery/light/mainship{ @@ -17895,6 +17870,13 @@ "tmp" = ( /turf/open/floor/mainship/floor, /area/mainship/command/cic) +"tmP" = ( +/obj/machinery/door/airlock/multi_tile/mainship/comdoor{ + name = "\improper Officer's Study" + }, +/obj/machinery/door/firedoor/multi_tile, +/turf/open/floor/mainship/mono, +/area/mainship/living/officer_rnr) "tnj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -17941,17 +17923,6 @@ }, /turf/open/floor/mainship/orange/full, /area/mainship/hallways/hangar) -"tqN" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/reagentgrinder, -/obj/item/stack/sheet/mineral/phoron, -/obj/item/stack/sheet/mineral/phoron, -/obj/item/stack/sheet/mineral/phoron, -/obj/item/stack/sheet/mineral/phoron, -/turf/open/floor/mainship/sterile/corner{ - dir = 8 - }, -/area/mainship/medical/medical_science) "tqR" = ( /obj/machinery/atmospherics/components/unary/cryo_cell, /turf/open/floor/mainship/sterile/side{ @@ -18127,6 +18098,15 @@ dir = 9 }, /area/mainship/engineering/ce_room) +"tFD" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/obj/effect/landmark/start/job/researcher, +/turf/open/floor/mainship/sterile/side{ + dir = 8 + }, +/area/mainship/medical/medical_science) "tGe" = ( /obj/machinery/power/apc/mainship{ dir = 4 @@ -18163,9 +18143,20 @@ dir = 2; name = "Freezer" }, -/obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/living/officer_rnr) +"tIg" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/multi_tile/mainship/comdoor, +/turf/open/floor/mainship/silver{ + dir = 8 + }, +/area/mainship/command/bridge) "tIQ" = ( /turf/open/floor/mainship/silver/corner{ dir = 1 @@ -18216,6 +18207,10 @@ /obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/hull/port_hull) +"tLu" = ( +/obj/structure/cable, +/turf/open/floor/mainship/silver/corner, +/area/mainship/command/bridge) "tLN" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ on = 1 @@ -18250,6 +18245,16 @@ }, /turf/open/floor/mainship/ai, /area/mainship/command/airoom) +"tOe" = ( +/obj/machinery/vending/marineFood, +/turf/open/floor/mainship/floor, +/area/mainship/squads/req) +"tOy" = ( +/obj/machinery/camera/autoname/mainship{ + dir = 1 + }, +/turf/open/floor/wood, +/area/mainship/living/tankerbunks) "tPb" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 10 @@ -18396,6 +18401,19 @@ }, /turf/open/floor/mainship/floor, /area/mainship/hallways/port_hallway) +"uau" = ( +/obj/machinery/light/mainship{ + dir = 8 + }, +/obj/structure/table/mainship/nometal, +/obj/item/whistle, +/obj/item/binoculars, +/obj/item/camera, +/obj/item/camera_film, +/turf/open/floor/mainship/silver{ + dir = 8 + }, +/area/mainship/command/bridge) "uaA" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -18418,6 +18436,13 @@ /obj/structure/prop/mainship/ship_memorial, /turf/open/floor/mainship/mono, /area/mainship/living/starboard_garden) +"ubJ" = ( +/obj/structure/ship_ammo/cas/heavygun, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "udB" = ( /obj/machinery/telecomms/hub/preset, /turf/open/floor/mainship/tcomms, @@ -18444,6 +18469,10 @@ dir = 1 }, /area/mainship/hallways/hangar) +"ugr" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/mainship/cargo, +/area/mainship/hallways/hangar) "ugw" = ( /obj/machinery/vending/armor_supply, /turf/open/floor/mainship/mono, @@ -18462,12 +18491,6 @@ }, /turf/open/floor/mainship/sterile/dark, /area/mainship/medical/surgery_hallway) -"uiR" = ( -/obj/machinery/door/airlock/mainship/medical/glass/CMO, -/obj/structure/cable, -/obj/machinery/door/firedoor/mainship, -/turf/open/floor/mainship/sterile/dark, -/area/mainship/medical/upper_medical) "ujl" = ( /obj/effect/ai_node, /obj/machinery/landinglight/alamo{ @@ -18568,13 +18591,21 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hull/port_hull) -"uug" = ( -/obj/machinery/chem_master, -/obj/item/reagent_containers/glass/beaker/bluespace, +"uuS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/mainship/silver/corner{ + dir = 1 + }, +/area/mainship/command/bridge) +"uvF" = ( +/obj/structure/table/mainship/nometal, +/obj/item/book/manual/medical_diagnostics_manual, +/obj/item/megaphone, /turf/open/floor/mainship/sterile/side{ dir = 4 }, -/area/mainship/medical/medical_science) +/area/mainship/medical/cmo_office) "uwr" = ( /obj/structure/table/mainship/nometal, /obj/item/storage/fancy/cigar, @@ -18601,6 +18632,10 @@ dir = 10 }, /area/space) +"uym" = ( +/obj/machinery/door/airlock/command, +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) "uyz" = ( /turf/open/floor/wood, /area/mainship/living/tankerbunks) @@ -18618,20 +18653,10 @@ /obj/machinery/door/firedoor/mainship, /turf/open/floor/plating, /area/mainship/hull/port_hull) -"uze" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/door/firedoor/mainship{ - dir = 2 - }, -/obj/machinery/door/airlock/mainship/generic/mech_pilot/bunk{ - dir = 1 - }, -/turf/open/floor/mainship/silver/corner{ - dir = 4 - }, -/area/mainship/living/tankerbunks) +"uBu" = ( +/obj/machinery/researchcomp, +/turf/open/floor/mainship/floor, +/area/mainship/hallways/repair_bay) "uBU" = ( /obj/structure/cable, /turf/open/floor/mainship/floor, @@ -18640,6 +18665,12 @@ /obj/machinery/computer/autodoc_console, /turf/open/floor/mainship/sterile, /area/mainship/medical/lower_medical) +"uCr" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 6 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "uDw" = ( /obj/structure/table/mainship/nometal, /obj/item/explosive/grenade/training, @@ -18648,6 +18679,15 @@ /obj/structure/sign/securearea/firingrange, /turf/open/floor/mainship/mono, /area/mainship/shipboard/firing_range) +"uDz" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ + on = 1 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "uEg" = ( /obj/structure/table/reinforced, /obj/item/storage/firstaid/adv, @@ -18690,10 +18730,6 @@ dir = 4 }, /area/mainship/command/cic) -"uFv" = ( -/obj/docking_port/stationary/marine_dropship/crash_target, -/turf/open/floor/mainship/sterile/dark, -/area/mainship/medical/surgery_hallway) "uFy" = ( /obj/effect/landmark/start/job/squadcorpsman, /turf/open/floor/mainship/mono, @@ -18729,6 +18765,16 @@ }, /turf/open/floor/plating, /area/mainship/medical/operating_room_one) +"uHk" = ( +/obj/structure/table/mainship/nometal, +/obj/item/reagent_containers/food/drinks/britcup, +/obj/machinery/light/mainship{ + dir = 1 + }, +/turf/open/floor/mainship/black{ + dir = 1 + }, +/area/mainship/living/tankerbunks) "uHQ" = ( /turf/open/floor/wood, /area/mainship/living/pilotbunks) @@ -18848,18 +18894,11 @@ dir = 4 }, /turf/open/floor/wood, -/area/mainship/living/officer_study) -"uSC" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/cigaretteweighted, -/turf/open/floor/mainship/silver{ - dir = 5 - }, -/area/mainship/hallways/bow_hallway) +/area/mainship/living/officer_rnr) "uSG" = ( /obj/structure/rack, /obj/structure/ob_ammo/warhead/plasmaloss, /obj/structure/ob_ammo/warhead/plasmaloss, -/obj/structure/ob_ammo/warhead/plasmaloss, /turf/open/floor/mainship/red{ dir = 4 }, @@ -18884,15 +18923,6 @@ /obj/effect/spawner/random/misc/soap/regularweighted, /turf/open/floor/mainship/mono, /area/mainship/hull/port_hull) -"uUO" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/mainship/green{ - dir = 1 - }, -/area/mainship/living/numbertwobunks) "uVR" = ( /turf/open/floor/mainship/mono, /area/mainship/living/grunt_rnr) @@ -18930,20 +18960,25 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/mainship/living/grunt_rnr) -"uYp" = ( -/obj/machinery/light/mainship{ - dir = 8 - }, -/turf/open/floor/mainship/silver{ - dir = 8 - }, -/area/mainship/hallways/bow_hallway) "uYs" = ( /obj/machinery/light/mainship/small{ dir = 4 }, /turf/open/floor/mainship/mono, /area/mainship/hull/port_hull) +"uYE" = ( +/obj/machinery/iv_drip, +/obj/item/radio/intercom/general, +/obj/machinery/power/apc/mainship, +/obj/structure/cable, +/turf/open/floor/mainship/sterile/corner, +/area/mainship/medical/medical_science) +"uYN" = ( +/obj/machinery/chem_dispenser, +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/mainship/medical/chemistry) "uYY" = ( /obj/machinery/iv_drip, /turf/open/floor/mainship/sterile/corner{ @@ -18963,11 +18998,15 @@ }, /turf/open/floor/mainship/floor, /area/mainship/command/cic) +"vak" = ( +/obj/structure/flora/pottedplant/twentytwo, +/turf/open/floor/mainship/silver, +/area/mainship/hallways/bow_hallway) "vao" = ( -/obj/effect/spawner/random/misc/structure/flavorvending/cigaretteweighted, /obj/machinery/light/mainship{ dir = 4 }, +/obj/machinery/vending/cigarette, /turf/open/floor/mainship/mono, /area/mainship/living/cafeteria_port) "vaF" = ( @@ -18983,43 +19022,34 @@ "vby" = ( /turf/open/floor/plating/plating_catwalk, /area/mainship/squads/req) -"vcD" = ( -/obj/structure/window/reinforced/tinted/frosted, -/obj/machinery/door/window{ +"vcZ" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 + }, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) +"ven" = ( +/obj/machinery/light/mainship{ dir = 8 }, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/living/tankerbunks) -"vcZ" = ( -/obj/machinery/loadout_vendor, -/turf/open/floor/mainship/green, -/area/mainship/living/numbertwobunks) -"veY" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 9 +/obj/machinery/vending/uniform_supply, +/turf/open/floor/mainship/silver{ + dir = 8 }, +/area/mainship/command/bridge) +"veY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/turf/open/floor/mainship/floor, -/area/mainship/living/officer_study) +/obj/structure/bed/chair/nometal, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/mainship/living/officer_rnr) "vfD" = ( -/obj/structure/bed/chair/wheelchair, +/obj/vehicle/ridden/wheelchair, /turf/open/floor/mainship/sterile/corner{ dir = 4 }, /area/mainship/medical/lower_medical) -"vfS" = ( -/obj/structure/table/mainship/nometal, -/obj/item/taperecorder, -/obj/item/whistle, -/obj/item/binoculars, -/turf/open/floor/mainship/silver{ - dir = 1 - }, -/area/mainship/command/bridge) "vfW" = ( /obj/machinery/door_control/mainship/req{ dir = 4; @@ -19071,14 +19101,13 @@ dir = 8 }, /area/mainship/living/basketball) -"vlA" = ( -/obj/docking_port/stationary/marine_dropship/crash_target, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/bow_hallway) "vlF" = ( /obj/machinery/light/mainship, /turf/open/floor/mainship/mono, /area/mainship/living/numbertwobunks) +"vmj" = ( +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/chemistry) "vmW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -19106,6 +19135,24 @@ dir = 8 }, /area/mainship/medical/surgery_hallway) +"vqc" = ( +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/obj/machinery/shower{ + pixel_y = 25 + }, +/obj/machinery/door/window{ + dir = 2 + }, +/obj/effect/spawner/random/misc/soap/regularweighted, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/living/tankerbunks) +"vqx" = ( +/obj/machinery/holopad, +/obj/structure/cable, +/turf/open/floor/mainship/floor, +/area/mainship/living/tankerbunks) "vqG" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 @@ -19131,6 +19178,31 @@ dir = 4 }, /area/mainship/living/commandbunks) +"vts" = ( +/obj/structure/table/mainship/nometal, +/obj/item/storage/box/pillbottles, +/obj/item/storage/box/pillbottles, +/obj/item/storage/box/pillbottles{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/mass_spectrometer, +/obj/structure/cable, +/obj/machinery/power/apc/mainship, +/obj/machinery/light/mainship{ + dir = 1 + }, +/turf/open/floor/mainship/sterile/side{ + dir = 1 + }, +/area/mainship/medical/cmo_office) +"vtz" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ + dir = 1; + on = 1 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) "vtE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -19161,6 +19233,10 @@ /obj/item/weapon/gun/revolver/single_action/m44, /turf/open/floor/mainship/mono, /area/mainship/shipboard/firing_range) +"vvn" = ( +/obj/machinery/door/firedoor/mainship, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/surgery_hallway) "vwj" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -19202,6 +19278,15 @@ }, /turf/open/floor/plating/plating_catwalk, /area/mainship/hull/starboard_hull) +"vyn" = ( +/obj/item/toy/plush/rouny{ + pixel_y = 9; + pixel_x = -1 + }, +/obj/item/bedsheet/blue, +/obj/structure/bed/chair/comfy/teal, +/turf/open/floor/mainship/sterile/side, +/area/mainship/medical/cmo_office) "vyN" = ( /obj/machinery/light/mainship, /turf/open/floor/mainship/floor, @@ -19210,6 +19295,27 @@ /obj/effect/spawner/random/misc/structure/flavorvending/cigaretteweighted, /turf/open/floor/mainship/sterile, /area/mainship/medical/surgery_hallway) +"vzs" = ( +/obj/machinery/light/mainship, +/obj/structure/table/mainship/nometal, +/obj/item/storage/box/rxglasses{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/box/pillbottles, +/turf/open/floor/mainship/sterile/side, +/area/mainship/medical/surgery_hallway) +"vzx" = ( +/obj/effect/landmark/start/job/cmo, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/cmo_office) +"vzJ" = ( +/obj/machinery/chem_master, +/obj/item/reagent_containers/glass/beaker/bluespace, +/turf/open/floor/mainship/sterile/corner{ + dir = 8 + }, +/area/mainship/medical/medical_science) "vzW" = ( /obj/structure/cable, /obj/machinery/light/mainship/small{ @@ -19243,17 +19349,8 @@ "vBI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/mainship/floor, +/turf/open/floor/mainship/sterile/white, /area/mainship/living/bridgebunks) -"vCC" = ( -/obj/structure/cable, -/obj/machinery/power/apc/mainship{ - dir = 4 - }, -/turf/open/floor/mainship/sterile/corner{ - dir = 8 - }, -/area/mainship/medical/upper_medical) "vDb" = ( /obj/structure/table/mainship/nometal, /obj/machinery/computer/emails, @@ -19372,15 +19469,6 @@ dir = 4 }, /area/mainship/hull/port_hull) -"vRY" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/light/mainship{ - dir = 4 - }, -/turf/open/floor/mainship/sterile/side{ - dir = 4 - }, -/area/mainship/medical/upper_medical) "vSj" = ( /turf/open/floor/mainship/ai, /area/mainship/command/airoom) @@ -19476,13 +19564,6 @@ }, /turf/open/floor/wood, /area/mainship/living/basketball) -"waN" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/mainship/silver{ - dir = 5 - }, -/area/mainship/command/bridge) "wca" = ( /turf/open/floor/mainship/purple{ dir = 8 @@ -19572,15 +19653,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating/plating_catwalk, /area/mainship/hallways/starboard_hallway) -"whN" = ( -/obj/structure/table/mainship/nometal, -/obj/machinery/recharger, -/obj/item/storage/box/bodybags, -/obj/item/storage/box/bodybags, -/turf/open/floor/mainship/sterile/side{ - dir = 4 - }, -/area/mainship/medical/lower_medical) "wif" = ( /obj/item/clothing/head/warning_cone, /obj/effect/turf_decal/warning_stripes/thin, @@ -19615,13 +19687,20 @@ /obj/structure/cable, /turf/open/floor/mainship/mono, /area/mainship/hull/port_hull) -"wmE" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/firealarm, -/turf/open/floor/mainship/orange{ +"wmi" = ( +/obj/machinery/light/mainship{ dir = 1 }, +/turf/open/floor/mainship/cargo, /area/mainship/hallways/hangar) +"wmE" = ( +/obj/machinery/vending/armor_supply, +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) +"wnT" = ( +/obj/structure/bed/chair/office/dark, +/turf/open/floor/mainship/sterile/dark, +/area/mainship/medical/cmo_office) "wou" = ( /obj/machinery/door/airlock/multi_tile/mainship/generic/canteen, /obj/machinery/door/firedoor/multi_tile, @@ -19646,6 +19725,12 @@ "wpN" = ( /turf/open/floor/wood, /area/mainship/medical/surgery_hallway) +"wpO" = ( +/obj/machinery/vending/weapon, +/turf/open/floor/mainship/silver{ + dir = 10 + }, +/area/mainship/command/bridge) "wqR" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 6 @@ -19712,10 +19797,30 @@ /obj/structure/window/framed/mainship/white, /turf/open/floor/plating, /area/mainship/medical/lower_medical) +"wzR" = ( +/obj/structure/table/mainship/nometal, +/obj/item/tool/crowbar, +/obj/item/camera, +/obj/effect/spawner/random/misc/table_lighting, +/turf/open/floor/wood, +/area/mainship/living/tankerbunks) "wAa" = ( /obj/machinery/computer/camera_advanced/remote_fob, /turf/open/floor/mainship/mono, /area/mainship/hallways/repair_bay) +"wAm" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 1 + }, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "wBE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -19731,9 +19836,9 @@ /turf/open/floor/mainship/stripesquare, /area/mainship/hallways/port_hallway) "wCq" = ( -/obj/structure/dropship_equipment/cas/weapon/minirocket_pod, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/obj/machinery/marine_selector/gear/commander, +/turf/open/floor/wood, +/area/mainship/living/numbertwobunks) "wDA" = ( /obj/machinery/light{ dir = 4 @@ -19800,17 +19905,13 @@ /turf/open/floor/plating, /area/mainship/hallways/bow_hallway) "wJA" = ( -/obj/machinery/vending/uniform_supply, -/turf/open/floor/mainship/green{ - dir = 6 - }, -/area/mainship/living/numbertwobunks) -"wKi" = ( -/obj/structure/cable, -/turf/open/floor/mainship/silver{ - dir = 8 +/obj/effect/turf_decal/warning_stripes/thin, +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 1 }, -/area/mainship/hallways/bow_hallway) +/obj/item/clothing/head/warning_cone, +/turf/open/floor/mainship/mono, +/area/mainship/hallways/hangar) "wKn" = ( /turf/open/floor/mainship/red/corner{ dir = 8 @@ -19853,6 +19954,14 @@ }, /turf/open/floor/mainship/mono, /area/mainship/squads/delta) +"wMl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/obj/effect/ai_node, +/turf/open/floor/plating/plating_catwalk, +/area/mainship/hallways/hangar) "wMx" = ( /obj/machinery/light/mainship{ dir = 4 @@ -19899,6 +20008,12 @@ /obj/structure/cable, /turf/open/floor/mainship/floor, /area/mainship/command/cic) +"wRe" = ( +/obj/machinery/light/mainship/small{ + dir = 8 + }, +/turf/open/floor/mainship/floor, +/area/mainship/living/tankerbunks) "wRf" = ( /obj/machinery/bot/roomba, /turf/open/floor/mainship/sterile/side{ @@ -19944,21 +20059,17 @@ /obj/structure/table/mainship/nometal, /turf/open/floor/mainship/mono, /area/mainship/command/cic) -"wVN" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +"wVB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/mainship/sterile/side{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, -/area/mainship/medical/medical_science) +/turf/open/floor/mainship/mono, +/area/mainship/hallways/port_hallway) "wXn" = ( /turf/open/floor/mainship/floor, /area/mainship/living/pilotbunks) @@ -20024,14 +20135,6 @@ /obj/structure/closet/secure_closet/engineering_electrical, /turf/open/floor/mainship/orange/full, /area/mainship/command/cic) -"xgM" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/turf/open/floor/mainship/orange{ - dir = 8 - }, -/area/mainship/hallways/hangar) "xgX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -20079,10 +20182,6 @@ }, /turf/open/floor/mainship/purple/full, /area/mainship/hallways/hangar) -"xjo" = ( -/obj/structure/dropship_equipment/shuttle/weapon_holder/machinegun, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) "xjw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -20093,6 +20192,15 @@ "xkA" = ( /turf/open/floor/wood, /area/mainship/living/basketball) +"xll" = ( +/obj/machinery/camera/autoname/mainship{ + dir = 4 + }, +/obj/machinery/loadout_vendor, +/turf/open/floor/mainship/silver{ + dir = 9 + }, +/area/mainship/command/bridge) "xlz" = ( /obj/machinery/light/mainship{ dir = 4 @@ -20156,11 +20264,9 @@ /turf/open/floor/mainship/mono, /area/mainship/squads/delta) "xqY" = ( -/obj/machinery/marine_selector/gear/commander, -/turf/open/floor/carpet/side{ - dir = 1 - }, -/area/mainship/living/numbertwobunks) +/obj/machinery/camera/autoname/mainship, +/turf/open/floor/plating, +/area/mainship/hallways/hangar) "xsH" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 5 @@ -20168,6 +20274,12 @@ /obj/effect/turf_decal/warning_stripes/thin, /turf/open/floor/mainship/floor, /area/mainship/command/cic) +"xsM" = ( +/obj/structure/droppod, +/obj/structure/drop_pod_launcher, +/obj/machinery/camera/autoname/mainship, +/turf/open/floor/mainship/cargo, +/area/mainship/hallways/hangar/droppod) "xsU" = ( /obj/structure/cable, /obj/machinery/camera/autoname/mainship{ @@ -20189,20 +20301,15 @@ }, /turf/open/floor/mainship/mono, /area/mainship/squads/alpha) -"xwJ" = ( -/obj/vehicle/ridden/powerloader, -/obj/machinery/light/mainship{ - dir = 1 - }, -/turf/open/floor/mainship/orange{ - dir = 1 +"xwr" = ( +/turf/open/floor/carpet/side{ + dir = 9 }, -/area/mainship/hallways/hangar) -"xxs" = ( -/obj/item/robot_parts/robot_suit, -/obj/item/clothing/under/wedding/bride_white, -/turf/open/floor/wood, -/area/mainship/living/tankerbunks) +/area/mainship/living/numbertwobunks) +"xwJ" = ( +/obj/machinery/vending/uniform_supply, +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) "xyg" = ( /obj/structure/closet, /obj/item/toy/plush/snake, @@ -20236,6 +20343,12 @@ dir = 1 }, /area/mainship/medical/lower_medical) +"xBW" = ( +/obj/machinery/light/mainship{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) "xCa" = ( /obj/item/radio/intercom/general, /turf/open/floor/mainship/mono, @@ -20256,9 +20369,9 @@ /turf/open/floor/mainship/floor, /area/mainship/command/cic) "xCC" = ( -/obj/structure/dropship_equipment/shuttle/operatingtable, +/obj/machinery/vending/tool, /turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/area/mainship/living/numbertwobunks) "xCV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ dir = 4 @@ -20280,6 +20393,12 @@ /obj/machinery/light/mainship, /turf/open/floor/mainship/red, /area/mainship/shipboard/port_point_defense) +"xEW" = ( +/obj/effect/spawner/random/misc/structure/flavorvending/coffeeweighted, +/turf/open/floor/mainship/silver{ + dir = 8 + }, +/area/mainship/hallways/bow_hallway) "xGb" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, @@ -20307,15 +20426,6 @@ dir = 8 }, /area/mainship/living/basketball) -"xGY" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/wood, -/area/mainship/living/officer_study) "xHa" = ( /turf/closed/wall/mainship, /area/mainship/shipboard/port_point_defense) @@ -20349,13 +20459,6 @@ dir = 4 }, /area/mainship/living/cafeteria_starboard) -"xKj" = ( -/obj/structure/bed, -/obj/item/bedsheet/red, -/turf/open/floor/carpet/side{ - dir = 6 - }, -/area/mainship/living/numbertwobunks) "xKX" = ( /obj/machinery/door/window, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ @@ -20426,15 +20529,6 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hull/starboard_hull) -"xQX" = ( -/obj/machinery/light/mainship{ - dir = 1 - }, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) "xRs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer1{ dir = 1; @@ -20455,13 +20549,6 @@ dir = 1 }, /area/mainship/hallways/aft_hallway) -"xSH" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/layer1{ - dir = 1; - on = 1 - }, -/turf/open/floor/mainship/floor, -/area/mainship/hallways/hangar) "xSI" = ( /obj/structure/closet, /obj/item/toy/plush/farwa, @@ -20485,15 +20572,6 @@ /obj/machinery/light/mainship, /turf/open/floor/mainship/orange, /area/mainship/engineering/ce_room) -"xUq" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 8 - }, -/obj/effect/ai_node, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/living/tankerbunks) "xUR" = ( /turf/closed/wall/mainship, /area/mainship/living/tankerbunks) @@ -20510,13 +20588,6 @@ dir = 9 }, /area/mainship/living/pilotbunks) -"xVf" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, -/obj/structure/cable, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/command/bridge) "xVy" = ( /obj/structure/table/mainship/nometal, /obj/item/fuel_cell/full, @@ -20569,37 +20640,20 @@ }, /turf/open/floor/mainship/mono, /area/mainship/hallways/aft_hallway) -"yaP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/segment, -/obj/effect/ai_node, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/bow_hallway) "yaR" = ( /obj/effect/turf_decal/warning_stripes/thin, /obj/effect/ai_node, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) "ybO" = ( -/obj/structure/dropship_equipment/electronics/spotlights, /turf/open/floor/mainship/mono, -/area/mainship/hallways/hangar) +/area/mainship/living/numbertwobunks) "ycd" = ( /obj/machinery/door/window/secure/bridge/aidoor{ dir = 8 }, /turf/open/floor/mainship/ai, /area/mainship/command/airoom) -"ycL" = ( -/obj/structure/table/mainship/nometal, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/glass/beaker, -/obj/item/reagent_containers/glass/beaker, -/turf/open/floor/mainship/sterile/side, -/area/mainship/medical/chemistry) "ydD" = ( /obj/structure/closet, /obj/item/toy/beach_ball, @@ -20622,24 +20676,10 @@ }, /area/mainship/medical/lower_medical) "yes" = ( -/obj/item/radio/intercom/general, -/obj/machinery/vending/tool, -/turf/open/floor/mainship/orange{ - dir = 1 - }, -/area/mainship/hallways/hangar) -"yet" = ( -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 8 - }, -/obj/machinery/light/mainship, -/obj/effect/turf_decal/warning_stripes/thin{ - dir = 4 - }, -/turf/open/floor/mainship/orange{ - dir = 10 - }, -/area/mainship/hallways/hangar) +/obj/machinery/camera/autoname/mainship, +/obj/machinery/vending/engivend, +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) "yeD" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -20678,16 +20718,22 @@ dir = 5 }, /area/mainship/living/cafeteria_starboard) +"yft" = ( +/obj/structure/window/framed/mainship/requisitions, +/obj/machinery/door/firedoor/mainship{ + dir = 2 + }, +/obj/machinery/door/poddoor/mainship/open{ + dir = 2; + id = "Brig Lockdown"; + name = "\improper Brig Lockdown Podlocks" + }, +/turf/open/floor/plating, +/area/mainship/command/bridge) "yfx" = ( /obj/machinery/computer/sleep_console, /turf/open/floor/mainship/sterile/side, /area/mainship/medical/lower_medical) -"yfJ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/junction/flipped, -/turf/open/floor/mainship/mono, -/area/mainship/living/tankerbunks) "ygZ" = ( /obj/effect/turf_decal/warning_stripes/thin, /obj/effect/turf_decal/warning_stripes/thin{ @@ -20699,13 +20745,6 @@ "yhu" = ( /turf/open/floor/wood, /area/mainship/living/commandbunks) -"yhB" = ( -/obj/machinery/light/mainship, -/obj/structure/bed/chair/nometal{ - dir = 1 - }, -/turf/open/floor/mainship/silver, -/area/mainship/hallways/bow_hallway) "yig" = ( /obj/structure/cable, /obj/structure/disposalpipe/junction{ @@ -20721,19 +20760,32 @@ dir = 9 }, /area/mainship/medical/medical_science) -"yji" = ( -/obj/effect/turf_decal/warning_stripes/thin, -/turf/open/floor/mainship/orange, +"yiQ" = ( +/obj/vehicle/ridden/powerloader, +/turf/open/floor/mainship/cargo, /area/mainship/hallways/hangar) +"yji" = ( +/obj/effect/ai_node, +/obj/structure/table/mainship/nometal, +/obj/machinery/computer/marine_card, +/obj/item/storage/box/ids, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 6 + }, +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) "yjZ" = ( -/obj/effect/turf_decal/warning_stripes/thin, +/obj/structure/bed/chair/nometal{ + dir = 8 + }, /obj/machinery/light/mainship{ dir = 4 }, -/turf/open/floor/mainship/orange{ - dir = 6 - }, -/area/mainship/hallways/hangar) +/turf/open/floor/mainship/mono, +/area/mainship/living/numbertwobunks) "ykh" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 @@ -20742,14 +20794,6 @@ /obj/structure/prop/mainship/hangar_stencil, /turf/open/floor/mainship/mono, /area/mainship/hallways/hangar) -"ykQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/structure/disposalpipe/segment, -/obj/effect/ai_node, -/turf/open/floor/plating/plating_catwalk, -/area/mainship/hallways/bow_hallway) "ylu" = ( /obj/structure/rack, /obj/structure/ob_ammo/ob_fuel, @@ -37902,11 +37946,11 @@ rJN acg aap bol -bvg +xEW fCV bgx -uYp -bgx +jVM +lty mzU uMa uMa @@ -37919,18 +37963,18 @@ lGB rVk yeV rVk -xUR -xUR -xUR -xUR -xUR -xUR +uMa +uMa +uMa +uMa +uMa +uMa brq -wKi -uYp +luG +dxk bgx fCV -bvg +rue jGJ aVs wem @@ -38164,24 +38208,24 @@ bFv gtg fCV fCV -bZL -lyB -cMO +qrO +yft +ipa ePc ghz -hqy +uau iEE qZR hKi nao hzL ooo -mUA -qnS -rjS -shW -tkL -mUA +gML +xll +ven +oTi +wpO +gML enM izT xRs @@ -38419,12 +38463,12 @@ rJN rJN rJN gMk -bSy -bVj -tBz -cbX -dGL -xVf +fep +oLu +lQm +dGj +uuS +oZZ fpi oZZ oZZ @@ -38432,17 +38476,17 @@ oZZ lHe gCH sqW -hGP -sdL -nhU -jGy -xUq -yfJ -uze -eiU -avL +nsm +mVI +rcW +ftK +sgZ +sgZ +tIg +ctS +hVd swv -yhB +mpc ahA ahA ahA @@ -38676,30 +38720,30 @@ bos bvk rJN adG -hql +jCO bwf bZO ras -nnl -iYA -bIs +nYN +spW +spW qrM spW -kCa +spW spW fEn qrM -mQn -mUA -iIm -lTA -qRF -kLr -mUA -cRH +spW +lRA +spW +bQV +tLu +spW +lRA +gtg pWP fCV -oiB +qrO ahA eus rRW @@ -38933,13 +38977,14 @@ boJ fKk bGb aey -amo +srv fCV -hQB -uMa -hDY -cNZ -iEK +vak +xUR +xUR +xUR +xUR +xUR xUR xUR xUR @@ -38948,12 +38993,11 @@ xUR xUR xUR xUR -oLJ -icL vGR -cgn +jav xUR -nui +xUR +rRe fpO qrv qrv @@ -39192,25 +39236,25 @@ oDL ahP bji fCV -pqd -lyB -vfS -hKi -nNF -xUR -iKm -vGR -lMk -uyz +fCV +tdp +ozi +nNM +tdp +wRe +lip +lip +kcL +tdp nNM ozi pfb -vGR -gIn -skp -qDv +rGG +rLr +vqx +cgn xUR -bcB +ahP pWP fCV xtA @@ -39449,25 +39493,25 @@ rJN aqz ibz mzU -pAf -lyB -waN -gGE -nNF +lBK +xUR +cGf +uyz xUR +lod +vGR vGR -kFE +dkd xUR -bEk uyz -xxs +tOy xUR -qrI -hTN -sjM -dIh +hvt +daD +hgh +kQH xUR -uSC +ktJ wKA mzU bkY @@ -39707,22 +39751,22 @@ wJw jjM eDN wJw -uMa -uMa -lDQ -gli xUR -vcD -cYc +uyz +diM xUR -geQ -nQu -kGl +mVM +vGR +vGR +jFP +xUR +bEk +uyz xUR -kQd -jFp -bZv -qRo +aNC +hFy +sjM +fWU xUR wJw gBg @@ -39964,22 +40008,22 @@ bgx aHJ tBz bgx -uYp -cNE -gSF -tBz -xUR -xUR -xUR xUR +kGl +wzR xUR +vqc +vGR +vGR +nuJ xUR +rfQ +kGl xUR -xUR -bIF -lQh -lQh -qQG +uHk +qoC +bWc +qmJ xUR bgx szI @@ -40217,31 +40261,31 @@ bkI aag vyN rJN -bPk -bjY -ykQ -hru -hru -ccE -aUG -gpG -nNe -iLa -nNe -lTb -nNe -nRV -gpG -pjU -nNe -nNe -nNe -nNe -pjU -nNe -kLW -yaP -qFH +vTn +bqt +vTn +vTn +xUR +xUR +xUR +xUR +xUR +xUR +xUR +xUR +xUR +xUR +xUR +xUR +nsE +lQh +lQh +qQG +xUR +vTn +bqt +vTn +vTn ahA dYv fBV @@ -40474,31 +40518,31 @@ rJN uEx rJN rJN -rBJ -vTn -vTn -vTn -vTn -vTn -vTn -vTn -vTn -vlA -vTn -nwU -vTn -liL -vTn -vTn -vTn -vTn -vTn -vTn -vTn -vTn -vTn -vTn -rBJ +oDv +gyC +lxY +dsk +dsk +bjH +lul +cSl +bjH +lul +bjH +bjH +bjH +bjH +bjH +rAI +bjH +bjH +bjH +bjH +rAI +bjH +erT +wMl +dyL ahA ahA pvO @@ -41244,7 +41288,7 @@ aap aap aap aap -lvI +bgb bbR bSC mjo @@ -41494,14 +41538,14 @@ aac aac adQ bgb -ann -ann -bdj -bhd -aMR -aMR +bCK +bCK +bCK +bCK +hVR +sTv +gfu bgb -bOy bbR dXn blA @@ -41528,14 +41572,14 @@ blA vDT lOP lvI -bgb +abR gjK mqI -lvI -wCq -lvI +qhh +abR +hIC wCq -bgb +abR adZ aeb aeb @@ -41751,14 +41795,14 @@ aaa aai tDH bgb -oer -oer -oer -pNB -bCK -bCK +ann +ann +bdj +mJs +olO +yiQ +ugr bgb -lvI bbR dXn blA @@ -41785,14 +41829,14 @@ blA vDT lOP uJT -bgb +abR wmE yji -lvI -myv -lvI +vtz +fWN +hjO myv -bgb +abR wem aVk aaa @@ -42008,14 +42052,14 @@ aaa aai tDH bgb -xQX -gfg -gfg -npA -bCK -bCK +oer +oer +oer +bja +jDv +bgb +bgb bgb -lyh bbR dXn blA @@ -42042,14 +42086,14 @@ htp vDT lOP lvI -bgb +abR xwJ -yji -lvI -blo -lvI -blo -bgb +sMo +gWC +abR +xwr +jYi +abR wem aVk aaa @@ -42267,15 +42311,15 @@ rbR bgb bea bea -bea -juB -bgb -bgb -bgb -lvI -bbR +gfg +bGr +ifv +beU +bgd +aTs +ceW dXn -blA +jCH blA blA blA @@ -42298,15 +42342,15 @@ blA hHM vDT tgH -qPs -akH -xSH +lvI +abR +abR ofY -xgM -xgM +abR +abR hgk -yet -bgb +uIz +abR fZA aVk aaa @@ -42522,14 +42566,14 @@ aaa aai aak bgb -hhA +oPC hhA lvI +lvI bLH beU bgd aTs -lvI bbR dXn car @@ -42554,16 +42598,16 @@ blA blA hHM kST -wxQ -lvI +wAm +ekU pWE bAh -uns -uns -uns +lwr +xBW +abR qiO -qYe -bgb +uIz +abR sao aVk aaa @@ -42779,14 +42823,14 @@ aaa aai rbR bgb -anQ -hhA -bqA -bLH -beU +ubJ +ubJ +aMR +pqz +uCr +bkO bgd -aTs -lvI +bxM bbR dXn qNu @@ -42815,12 +42859,12 @@ ikx paD bYm kxg -uns -uns -uns -qiO -lvI -bgb +itV +bnr +abR +itC +qYe +abR fZA aVk aaa @@ -43036,14 +43080,14 @@ aaa aai aaj bgb -hhA -hhA -lvI -bLH -bkO -bgd -bxM -lvI +bdW +bdW +bdj +sem +dhl +bgb +bgb +bgb bbR dXn caJ @@ -43070,14 +43114,14 @@ hHM sim lOP uJT -bgb -fme -uns -uns -uns -qiO -qYe -bgb +abR +abR +uym +abR +abR +abR +llf +abR qae aVk aaa @@ -43293,14 +43337,14 @@ aaa aai tDH bgb -apj -apj -apj +oer +oer +oer bhg +kCI +dZK +dZK bgb -bgb -bgb -bGr bbR dXn blA @@ -43327,14 +43371,14 @@ hHM vDT lOP lvI -bgb +abR hHj -aAN -cyf +ybO cyf +abR coU -kaw -bgb +vlF +abR wem aVk aaa @@ -43550,14 +43594,14 @@ aaa aai tDH bgb -bdZ -aMR -aMR +ugr +ugr +oer bhh +oer dZK dZK bgb -lyh xQe dXn blA @@ -43584,14 +43628,14 @@ ppE vDT lOP lvI -bgb +abR yes gGw xCC -xjo -ybO +abR +pXz ybO -bgb +abR wem aVk aaa @@ -43807,14 +43851,14 @@ aaa aai rbR bgb -bdW -bdW -bdj +bgb +bgb +bgb pNB -dZK -dZK bgb -bLs +bgb +bgb +bgb wxQ dXn blA @@ -43841,14 +43885,14 @@ blA vDT qij lvI -bgb +abR hnY yjZ -vNA -vNA -vNA -vNA -bgb +hKR +abR +aop +raA +abR fZA aVk aaa @@ -44064,21 +44108,21 @@ aaa aai aak bgb +wmi +lyC +bja +cuH oer -oer -oer -bhj -gfg -gfg +fno bgb -bOy +iWI bPB dXn blA blA blA blA -caJ +hOA fgc blA hHM @@ -44320,26 +44364,26 @@ aaa aaa aai rbR -abR -abR -abR -abR -abR -abR -abR -abR +bgb +lDd +nWY +bja +cuH +oer +fvw +bgb eaL bVJ bbo jJt jJt -jvP -lBZ -jJt -jJt +lvI jJt +iVz +gby +iVz +sbF jJt -lBZ jJt jvP jJt @@ -44361,7 +44405,7 @@ srL nKK lzj cZJ -stM +gXv lzj fZA aVk @@ -44577,33 +44621,33 @@ aaa aaa aai tDH -abR -arP -aOx -abR -bhl -bkP +bgb +oer bqC -abR +bja +cuH +oer +bqC +bgb lvI xQe mJs gfg caY -qbG lvI -eXl -lvI -btY -qbG -oer +bgb +yay +bgb +gJa +bgb +bgb bjF uns uns uns +lvI umS umS -uns xir xir uGh @@ -44834,33 +44878,33 @@ aaa aaa aai tDH -abR -aop -vlF -abR -jOq -bif +bgb +wmi +ggG +bja +yaR +oer lyr -abR +bgb lvI xQe pcr lvI bYN -bgb +lvI +yay +ftB +aLP +lvI +jul yay -bgb -gJa -bgb -bgb kQP uns rMK sMI -uns +lvI umS umS -uns xir tqL bgb @@ -45091,33 +45135,33 @@ aaa aaa aai aaj -abR -abR -llf -abR -uUO -bii -ngN -abR -bqA +bgb +bgb +bgb +bgb +bgb +bgb +bgb +bgb +sPk xQe aTB aMR -nZu +kCI +uJT bgb -ftB -fbp +ugh +oer lvI -hSG +hrn bgb -lGH +dwy uns rMK sMI -uns +lvI umS umS -uns xir xir uGA @@ -45348,33 +45392,33 @@ aaa aaa aai rbR -abR +bgb arR -jYi -bdU -jRe -sjV +blA +blA +blA +blA kMC -bxT +paZ iIi bPC lvI bWx +lvI bUE bgb -ugh -oer +lRg +lvI lvI -kVl +nsk bgb lsl uns rMK sMI -uns +bWx umS unW -bAh xir xjj uns @@ -45605,33 +45649,33 @@ aaa aaa aai aak -abR -aDa -uIz -abR -dhn -bip +bgb +blA +blA +blA +blA +blA ssC -abR -lvI +paZ +sem xQe mJs gfg -oaQ +ykh +uJT bgb -rNF fbJ +vNA lvI -kXm +lol bgb -lGH +qyD uns rMK sMI -uns +lvI unW unW -uns xjj xjj uGh @@ -45862,33 +45906,33 @@ aaa aaa aai rbR -abR +bgb xqY -kLp -abR -mQL -haz +blA +blA +blA +blA vcZ -abR -lvI +paZ +sem xQe pcr lvI bYN -bgb +lvI +yay +pPS +mhO +lvI +rtt yay -bgb -gJa -bgb -bgb lcy uns rMK sMI -uns +lvI unW unW -uns xjj txr bgb @@ -46119,33 +46163,33 @@ aaa aaa aai tDH -abR -dcq -xKj -abR -pYL -bmF +bgb +blA +blA +blA +blA +blA wJA -mhn -lvI +paZ +sem xQe aTB aMR bPn -ccd -bqA -feY lvI -lvI -ccd +bgb +yay +bgb +gJa +bgb +bgb oer oer uns uns -uns +lvI unW unW -uns xjj xjj uGA @@ -46376,25 +46420,26 @@ aaa aaa aai tDH -abR -abR -abR -abR -abR -abR -abR -abR -bGF +bgb +blA +blA +blA +blA +blA +qmA +paZ +uDz bPG bbo gBG gBG gBG -gBG -gBG +aex +hxY gBG gBG fVz +gBG mbQ mbQ gBG @@ -46407,7 +46452,6 @@ gBG gBG gBG gBG -gBG bGF bPG bbo @@ -46634,14 +46678,14 @@ aaa aai tDH blt -byG -byG -byG -byG -bkR -byG blt -lyh +blt +blt +blt +blt +blt +blt +sOr wxQ uGB blA @@ -46891,12 +46935,12 @@ aaa aai aal blt -arU -aUC -aUC -aUC -adm -bqK +byG +byG +byG +byG +bkR +byG blt bHc wxQ @@ -47148,12 +47192,12 @@ aaa aai aak blt -byG -byG -byG -byG -adp -bhi +arU +aUC +aUC +aUC +adm +bqK blt brp wxQ @@ -47405,12 +47449,12 @@ aaa aai rbR blt +xsM byG byG byG -fLr adp -brX +mIY iZq bja wxQ @@ -47444,7 +47488,7 @@ kjI gtv nbP xmg -nbP +uBu vYD aVs fZA @@ -47662,11 +47706,11 @@ aaa aai tDH blt -asu -aVl -aVl -aVl -bkU +byG +byG +byG +fLr +adp brX iZq bja @@ -47701,7 +47745,7 @@ cbO bTU nbP nbP -nbP +uBu blq aVs wem @@ -47919,12 +47963,12 @@ aaa aai tDH blt -byG -byG -byG -byG -bkT -bqL +asu +aVl +aVl +aVl +bkU +brX byf bHp bPH @@ -48176,11 +48220,11 @@ aaa aai tDH blt -asF -aVn -aVn -aVn -bok +byG +byG +byG +byG +doo vuE iZq bja @@ -48433,11 +48477,11 @@ aaa aai rbR blt -byG -byG -byG -fLr -adp +asF +aVn +aVn +aVn +bok vuE iZq bja @@ -48693,9 +48737,9 @@ blt byG byG byG -byG +fLr adp -bqW +vuE blt bIy wxQ @@ -48947,12 +48991,12 @@ aaa aai aal blt -axZ -aVG -aVG -aVG -bkW -bCL +xsM +byG +byG +byG +adp +bqW blt lvI wxQ @@ -49204,12 +49248,12 @@ aaa aai tDH blt -byG -byG -byG -byG -byG -byG +axZ +aVG +aVG +aVG +bkW +bCL blt lvI wxQ @@ -49461,12 +49505,12 @@ aaa aai tDH blt -blt -blt -blt -blt -blt -blt +byG +byG +byG +byG +byG +byG blt lyh wxQ @@ -49478,6 +49522,7 @@ iVz iVz iVz iVz +iVz tJn jbL jbL @@ -49489,7 +49534,6 @@ iVz iVz iVz iVz -iVz hky unF ykh @@ -49718,12 +49762,12 @@ aai aai tDH aap -acg -aWX -acg -bhp -bla -brW +aap +aap +aap +aap +aap +aap aap bOy wxQ @@ -49736,9 +49780,9 @@ lvI lvI lvI lvI +lvI oer oer -lvI bqA lvI lvI @@ -50743,7 +50787,7 @@ aai aak aoJ aas -bdc +abZ aXq aoJ pOi @@ -51000,7 +51044,7 @@ aai rbR aoJ iCp -bdc +abZ oQm aoJ bQt @@ -51257,7 +51301,7 @@ aai tDH aoJ adD -bdc +abZ oVL aoJ wLR @@ -51514,7 +51558,7 @@ aai tDH aoJ auj -bdc +abZ pLG aoJ wav @@ -51771,7 +51815,7 @@ aai tDH aoJ aHj -bdc +abZ qTt aoJ bdh @@ -51808,10 +51852,10 @@ qhN dzn ruj mgQ -aeI -bSD +jNc +dDZ oLl -qSA +jNc qSA bQs bSG @@ -52028,7 +52072,7 @@ aai rbR aoJ aXw -bdc +abZ sGK aoJ wav @@ -52065,15 +52109,15 @@ rbP rMd eeo kVk -aeI +jNc bSD -nJN -bZa +rsG +jNc soQ nJN -bSG +mjF jNc -rsG +dDZ obX pMP jNc @@ -52285,7 +52329,7 @@ aai aak aoJ pvn -bdc +abZ rjQ aoJ spV @@ -52322,13 +52366,13 @@ ruj nNJ cTD fIS -aeI -bSD -nJN +jNc +cbW +caD bWH bZa -nJN -bSG +iUW +gbA pWo caD eWR @@ -52542,7 +52586,7 @@ aai aal aoJ suh -bdc +abZ udB aoJ cli @@ -52560,7 +52604,7 @@ lyK buo yeW mBx -pdX +nMJ dPt cNM vuV @@ -52568,9 +52612,9 @@ xpi eMf xpi oAM -whN gEJ -kMt +oIq +nMJ uEy tZb uQx @@ -52578,13 +52622,13 @@ lyK xGb kNl jVY -aeI -aeI -bSD -nJN -blm +ahO +jNc +jNc +jNc +jNc blm -nJN +iUW ioN jNc jNc @@ -52799,7 +52843,7 @@ aai tDH aoJ aJn -bdc +abZ bas aoJ spV @@ -52819,7 +52863,7 @@ yea ost nSl bxw -jfZ +iZI cbA nSl nSl @@ -52835,18 +52879,18 @@ nga ruj bQh ruj -rkD +gyu hWb uSm btv bUi -btv +jDf lHu bYW pWo dKN obX -dsp +cbW jNc wem aVk @@ -53056,7 +53100,7 @@ aai tDH aoJ baN -bdc +abZ bav aoJ wav @@ -53075,14 +53119,14 @@ wyX aJS sBz nSl -spn +fly hiF xLb blP nqG -nXZ +tgI oMq -pSn +hta qza nSl xAX @@ -53092,18 +53136,18 @@ nSl nsv bQh ruj -rkD +ahO fsM bfO dtg geq gwq btv -bSG +aYJ jNc -cbW -eWR -dMy +dDZ +ten +pMP jNc wem aVk @@ -53313,7 +53357,7 @@ aai tDH aoJ bcl -bdc +abZ baw aoJ aCs @@ -53336,11 +53380,11 @@ bvU bKL byW ngS -bBK +hxD iCy iCy iCy -bHm +vzs nSl uXw iOS @@ -53349,14 +53393,14 @@ nSl ruj bQh bWC -aeI +tmP bRN bfO rkt bVF fgj btv -bSG +eOF jNc jNc jNc @@ -53587,13 +53631,13 @@ biu nSl dus bqR -bRh +qmn nSl bvJ bKL -byX +hTB ngS -bBL +rFu iCy ttY iCy @@ -53604,16 +53648,16 @@ iGu qys nSl ruj -bQh -ruj +sjN +mft neJ fwZ -bfO +qgD bUg bVG bWJ -btv -bSG +aqR +kpt iUW qwP jeI @@ -53846,9 +53890,9 @@ boX aJS ost nga -ycL +aRw jgp -eTe +esS ngS bvl iCy @@ -53862,20 +53906,20 @@ bMp nSl ruj nQl -qxG -aCh +ruj +ahO hey -xGY +bVH bVH bVH bWK iug veY pOE -blL +jNc cbi -iiH -rnz +jNc +jNc uNe aVk aaa @@ -54103,26 +54147,26 @@ oxk dMY fpV nga -byZ -cyg -bzj +jNB +bKL +hZh blP -nak +eJo iCy -nJb +ttY jkH -bHn +hNH nSl eWQ avl qys nSl rbP -rMd +wVB eeo gyu seL -qJm +iWK dhF ipy wkL @@ -54130,9 +54174,9 @@ ahO ahO ahO ahO -ahO +kFM dDZ -ahO +jNc fZA aVk aaa @@ -54358,13 +54402,13 @@ blj nSl xCj yea -ndj -nSl -hNJ -hNJ -hNJ +ost +nga +hQt +qgb +esS blP -fQp +oxc buD mqf buD @@ -54381,15 +54425,15 @@ gyu mTD mCY mCY -bnu +mCY tHR lYN aVa pmz ahO oam -mdp -ahO +dsp +jNc wem aVk aaa @@ -54613,17 +54657,17 @@ hjE bjV biu nSl -tjn +kFq aJS -ost +ndj nSl -buq -jkn -lrU +uYN +vmj +fmx blP kLG buD -ttY +dEc buD bHo nSl @@ -54645,8 +54689,8 @@ oYC ert ahO ndz -fHe -ahO +cbW +jNc wem aVk aaa @@ -54874,11 +54918,11 @@ nSl aJS sBz nSl -dWR -wpN -sqz +gCW +vmj +jsN blP -qpS +cwO oaf dEc oaf @@ -54901,9 +54945,9 @@ ahO ahO ahO ahO -ahO -ahO -ahO +jNc +jNc +jNc fZA aVk aaa @@ -55131,9 +55175,9 @@ cjW sZN fqH blP -fjk -wpN -ilx +blP +lAF +blP blP blP tHw @@ -55388,15 +55432,15 @@ bog sZN bKB gUG -dEc +pTh jkH -uFv +qVV gUG -ntG +mWM mWM dEc mWM -qJa +oWw gUG soO bKB @@ -55666,7 +55710,7 @@ bSw uOE kAb omz -aru +msB pjY qZM asB @@ -55913,7 +55957,7 @@ riu riu riu riu -iCy +afU rwd blP rbP @@ -56167,12 +56211,12 @@ alz ozv oPN alz -alw -alw -syl -uiR -alw -alw +blP +buq +wpN +sgw +lrU +blP ruj bQh ruj @@ -56420,16 +56464,16 @@ ifh blP cSq piG -nxn -kwO +bet +tFD qHh -qeT -alw -rPg -aDo -jMg -vCC -alw +vzJ +blP +dWR +wpN +sgw +sqz +blP ruj bQh bWC @@ -56677,16 +56721,16 @@ bvX jQK bHk aDE -ehB -gRX +kFG +ogn nCj -ckX -alw -gGb -cge -vRY -bcA -alw +bMw +blP +fjk +wpN +sgw +ilx +blP ruj bQh dfz @@ -56937,13 +56981,13 @@ cvw fSI tND jEn -ktC -alw -alw -alw -alw -alw -alw +sHs +blP +blP +vvn +fLm +blP +blP ruj bQh ruj @@ -57198,8 +57242,8 @@ piG ikr qHh ftH +idR gYH -qHh wrc ruj bQh @@ -57440,8 +57484,8 @@ uJR bjV biu alz -bpf -avw +uYE +eEf dku mXe mXe @@ -57709,12 +57753,12 @@ qMJ krB lUU cOw -alz -aEX -wVN -bqV -aEX -alz +fAJ +aNh +kxp +fAJ +aNh +fAJ ruj bQv jVY @@ -57966,12 +58010,12 @@ avx awF ayw qiq -alz -rSg -nZA -lZN -tqN -alz +fAJ +bCF +mKj +dJm +lth +fAJ qhN bQv bWC @@ -58223,12 +58267,12 @@ avy awG ayw alz -alz -bpc -bpd -nCj -bMw -aEX +fAJ +vts +dEE +wnT +eLZ +aNh ruj bQv ruj @@ -58480,12 +58524,12 @@ avz awH ayw ogn -alz -aSU -ogn -aDE -bpj -aEX +fAJ +jDa +cJu +hrH +vyn +aNh rbP rMd eeo @@ -58737,12 +58781,12 @@ awI awI oRR alz -alz -rvJ -gRX -jEn -eRr -aEX +fAJ +kic +eSg +vzx +dHq +fAJ ruj bQv ruj @@ -58994,12 +59038,12 @@ alz ogn alz ogn -alz -aGG -sYp -uug -ftA -alz +fAJ +bUZ +uvF +dMz +obD +fAJ kuC bQv ruj @@ -59251,12 +59295,12 @@ alz alz alz alz -alz -alz -alz -alz -alz -alz +fAJ +fAJ +fAJ +fAJ +fAJ +fAJ ruj bQv bne @@ -62057,7 +62101,7 @@ bdC kUl abg kMY -brj +qaa oDF puB vTf @@ -62091,7 +62135,7 @@ cbn mmE bZQ awz -ktN +laz sVt vJr gQc @@ -62314,7 +62358,7 @@ aWH bSQ abg bjP -brj +qaa oWI ahU oaW @@ -62348,7 +62392,7 @@ cbn mmE tBV iLV -ktN +laz mMr vJr ccT @@ -63599,7 +63643,7 @@ aWH blS aaf kMY -brj +qaa oDF puB vTf @@ -63633,7 +63677,7 @@ cbn mmE bZQ awz -ktN +laz ada vJr xpE @@ -63856,7 +63900,7 @@ aWH wJn aaf kMY -brj +qaa oWI ahU oaW @@ -63868,7 +63912,7 @@ bnF bpx pqU iWe -iWe +gaR jMY iWe gzg @@ -63890,7 +63934,7 @@ cbn mmE tBV iLV -ktN +laz ada vJr ezg @@ -65155,7 +65199,7 @@ bro sic bGk avZ -gaR +tOe byh otD bKU diff --git a/_maps/map_files/Whiskey_Outpost/Whiskey_Outpost_v2.dmm b/_maps/map_files/Whiskey_Outpost/Whiskey_Outpost_v2.dmm index 8b0ea070afd71..da4663015ee77 100644 --- a/_maps/map_files/Whiskey_Outpost/Whiskey_Outpost_v2.dmm +++ b/_maps/map_files/Whiskey_Outpost/Whiskey_Outpost_v2.dmm @@ -726,9 +726,9 @@ /turf/open/floor/prison, /area/whiskey_outpost) "dr" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /obj/structure/rack, /obj/machinery/light{ dir = 1 @@ -736,9 +736,9 @@ /turf/open/floor/plating, /area/whiskey_outpost) "dt" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /obj/structure/rack, /turf/open/floor/plating, /area/whiskey_outpost/outside/east) @@ -1457,7 +1457,7 @@ /obj/structure/barricade/sandbags{ dir = 1 }, -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 4 }, /obj/structure/platform{ @@ -1510,7 +1510,7 @@ /turf/open/floor/plating/asteroidfloor, /area/whiskey_outpost) "hu" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 8 }, /obj/structure/platform{ @@ -1773,9 +1773,9 @@ /turf/open/floor/mainship/sterile/side, /area/whiskey_outpost) "iT" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /obj/structure/rack, /turf/open/floor/plating, /area/whiskey_outpost/outside/west) @@ -2462,7 +2462,7 @@ /obj/structure/barricade/sandbags{ pixel_y = -6 }, -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 8 }, /obj/structure/platform{ @@ -3876,9 +3876,9 @@ /area/whiskey_outpost/outside/south) "tB" = ( /obj/structure/rack, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /turf/open/floor/plating/ground/dirt, /area/whiskey_outpost/outside/north) "tC" = ( @@ -3928,10 +3928,10 @@ /area/whiskey_outpost/outside/east) "tP" = ( /obj/structure/closet/crate, -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 30 }, -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 30 }, /turf/open/floor/marking/bot, @@ -4159,7 +4159,7 @@ /turf/open/floor/plating/ground/dirt, /area/whiskey_outpost/outside/south) "vh" = ( -/obj/item/weapon/gun/tl102/hsg_nest, +/obj/item/weapon/gun/hsg_102/hsg_nest, /turf/open/floor/plating/warning, /area/whiskey_outpost/outside/east) "vi" = ( @@ -4172,7 +4172,7 @@ /turf/open/floor/plating, /area/whiskey_outpost/outside/north) "vq" = ( -/obj/item/weapon/gun/tl102/hsg_nest, +/obj/item/weapon/gun/hsg_102/hsg_nest, /turf/open/floor/plating/warning, /area/whiskey_outpost/outside/west) "vr" = ( @@ -4491,9 +4491,9 @@ /area/whiskey_outpost) "xp" = ( /obj/structure/rack, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /turf/open/floor/plating, /area/whiskey_outpost/outside/west) "xr" = ( @@ -4724,9 +4724,9 @@ /area/whiskey_outpost/outside/east) "yO" = ( /obj/structure/rack, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /turf/open/floor/plating/asteroidfloor, /area/whiskey_outpost) "yP" = ( @@ -4849,7 +4849,7 @@ /turf/open/floor/plating/ground/dirt, /area/whiskey_outpost/outside/east) "zG" = ( -/obj/item/weapon/gun/tl102/hsg_nest, +/obj/item/weapon/gun/hsg_102/hsg_nest, /obj/structure/platform, /turf/open/floor/plating/asteroidwarning, /area/whiskey_outpost) @@ -5342,7 +5342,7 @@ /obj/structure/barricade/sandbags{ dir = 1 }, -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 8 }, /obj/structure/platform{ @@ -5562,7 +5562,7 @@ /turf/open/liquid/water/river, /area/whiskey_outpost/outside/east) "Eq" = ( -/obj/item/weapon/gun/tl102/hsg_nest, +/obj/item/weapon/gun/hsg_102/hsg_nest, /turf/open/floor/plating/ground/dirt, /area/whiskey_outpost/outside/south) "Er" = ( @@ -5596,9 +5596,9 @@ /area/whiskey_outpost) "EK" = ( /obj/structure/rack, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /turf/open/floor/plating/ground/dirt, /area/whiskey_outpost/outside/south) "EN" = ( @@ -5804,7 +5804,7 @@ /turf/open/floor/plating, /area/whiskey_outpost/outside/east) "GG" = ( -/obj/item/weapon/gun/tl102/hsg_nest, +/obj/item/weapon/gun/hsg_102/hsg_nest, /obj/structure/platform, /turf/open/floor/plating/warning, /area/whiskey_outpost) diff --git a/_maps/map_files/debugdalus/tgs_debugdalus.dmm b/_maps/map_files/debugdalus/tgs_debugdalus.dmm index abe6c9e0103b5..550a7094a7a92 100644 --- a/_maps/map_files/debugdalus/tgs_debugdalus.dmm +++ b/_maps/map_files/debugdalus/tgs_debugdalus.dmm @@ -629,7 +629,7 @@ "acX" = ( /obj/item/storage/box/crate/sentry, /obj/structure/rack, -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 50; pixel_x = 3; pixel_y = 3 @@ -2310,6 +2310,10 @@ "bOu" = ( /turf/open/floor/plating, /area/mainship/hallways/hangar) +"bXE" = ( +/obj/structure/ship_ammo/cas/bomb/fourhundred, +/turf/open/floor/mainship, +/area/mainship/hallways/hangar) "bXN" = ( /obj/structure/cable, /obj/structure/closet/secure_closet/medical_doctor, @@ -2341,6 +2345,10 @@ /obj/machinery/vending/cargo_supply, /turf/open/floor/mainship, /area/mainship/squads/req) +"dTa" = ( +/obj/machinery/robotic_cradle, +/turf/open/floor/mainship, +/area/mainship/medical/lower_medical) "dZo" = ( /obj/structure/cable, /turf/open/floor/mainship, @@ -2420,6 +2428,19 @@ /obj/structure/ship_rail_gun, /turf/open/floor/mainship, /area/mainship/shipboard/weapon_room) +"gtH" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/quick_vendor/beginner, +/turf/open/floor/mainship, +/area/mainship/squads/general) "gOE" = ( /obj/machinery/light, /turf/open/floor/mainship, @@ -2518,6 +2539,11 @@ }, /turf/open/floor/mainship, /area/mainship/hallways/hangar) +"kQa" = ( +/obj/machinery/light, +/obj/structure/dropship_equipment/cas/weapon/bomb_pod, +/turf/open/floor/mainship, +/area/mainship/hallways/hangar) "lcb" = ( /obj/structure/cable, /obj/machinery/camera/autoname/mainship, @@ -2602,6 +2628,10 @@ /obj/machinery/cic_maptable, /turf/open/floor/mainship, /area/mainship/command/cic) +"nRd" = ( +/obj/structure/ship_ammo/cas/bomblet, +/turf/open/floor/mainship, +/area/mainship/hallways/hangar) "oNT" = ( /obj/machinery/light{ dir = 1 @@ -2772,6 +2802,10 @@ /obj/structure/cable, /turf/open/floor/mainship, /area/mainship/engineering/engineering_workshop) +"ttO" = ( +/obj/structure/dropship_equipment/cas/weapon/bomblet_pod, +/turf/open/floor/mainship, +/area/mainship/hallways/hangar) "tQD" = ( /obj/machinery/light, /turf/open/floor/mainship, @@ -3977,7 +4011,7 @@ xBy ldZ bgb rmt -dwY +bXE dwY dwY dwY @@ -4037,7 +4071,7 @@ ljw dwY bgb acJ -dwY +nRd dwY dwY dwY @@ -4104,7 +4138,7 @@ gUp dwY dwY dwY -dwY +ttO aji agd agt @@ -4164,7 +4198,7 @@ afg dwY dwY dwY -ldZ +kQa aji aji aji @@ -4786,7 +4820,7 @@ ahy ahy dZo aie -ahy +dTa ahy ajT ahg @@ -5107,7 +5141,7 @@ aal vsI aab wqS -qxC +gtH aaA aaS qxC diff --git a/_maps/map_files/deltastation/deltastation.dmm b/_maps/map_files/deltastation/deltastation.dmm index 0e90c5fbff08b..cdd5b7a339872 100644 --- a/_maps/map_files/deltastation/deltastation.dmm +++ b/_maps/map_files/deltastation/deltastation.dmm @@ -1609,6 +1609,9 @@ /obj/structure/window/framed/colony/reinforced, /turf/open/floor/plating, /area/deltastation/engineering/atmos/mix) +"arC" = ( +/turf/open/floor/plating/icefloor/warnplate, +/area/shuttle/drop1/lz1) "arT" = ( /obj/structure/prop/vehicle/crawler, /obj/effect/decal/cleanable/dirt, @@ -18578,11 +18581,10 @@ /turf/open/floor/iron, /area/deltastation/service/hydroponics) "dOS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/landinglight/lz1{ - dir = 1 - }, -/turf/open/floor/asteroidfloor, +/obj/machinery/floodlight/landing, +/obj/effect/turf_decal/warning_stripes, +/obj/structure/cable, +/turf/open/floor/mech_bay_recharge_floor, /area/deltastation/external/landingzone) "dPa" = ( /obj/structure/disposalpipe/trunk{ @@ -18716,11 +18718,6 @@ /obj/effect/turf_decal/warning_stripes/box/empty, /turf/open/floor/iron, /area/deltastation/cargo/warehouse) -"dQu" = ( -/turf/open/floor/plating/icefloor/warnplate{ - dir = 10 - }, -/area/shuttle/drop1/lz1) "dQx" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 @@ -26066,7 +26063,7 @@ /obj/structure/table/reinforced, /obj/machinery/door/firedoor, /obj/item/trash/tray, -/obj/item/clothing/suit/apron, +/obj/item/clothing/suit/storage/apron, /obj/item/clothing/head/chefhat, /obj/machinery/door/poddoor/shutters/opened{ dir = 8; @@ -27275,13 +27272,15 @@ /turf/open/floor/iron, /area/deltastation/maintenance/port/fore) "fyi" = ( -/obj/effect/attach_point/weapon/dropship1, -/turf/open/floor/plating, -/area/shuttle/drop1/lz1) +/obj/effect/decal/cleanable/dirt, +/obj/machinery/landinglight/lz1, +/obj/structure/cable, +/turf/open/floor/asteroidfloor, +/area/deltastation/external/landingzone) "fyj" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, -/obj/item/clothing/suit/apron, +/obj/item/clothing/suit/storage/apron, /obj/item/clothing/head/chefhat, /obj/item/reagent_containers/food/snacks/flour, /obj/effect/turf_decal/warning_stripes/box/empty, @@ -29209,7 +29208,7 @@ /area/deltastation/maintenance/department/crew_quarters/bar) "fRP" = ( /obj/structure/table, -/obj/item/clothing/suit/apron, +/obj/item/clothing/suit/storage/apron, /obj/item/clothing/under/color/white, /obj/item/clothing/head/soft/mime, /obj/item/clothing/mask/surgical, @@ -30762,7 +30761,8 @@ /turf/open/floor/plating, /area/deltastation/cargo/miningoffice) "ghS" = ( -/obj/effect/ai_node, +/obj/machinery/floodlight/landing, +/obj/effect/turf_decal/warning_stripes, /obj/machinery/landinglight/lz1{ dir = 8 }, @@ -31507,7 +31507,7 @@ /area/deltastation/service/chapel/storage) "gpz" = ( /obj/item/radio/intercom, -/obj/item/clothing/suit/bomber, +/obj/item/clothing/suit/storage/bomber, /obj/effect/spawner/random/misc/structure/securecloset, /turf/open/floor/wood, /area/deltastation/commons/dorms) @@ -32087,9 +32087,8 @@ /turf/open/floor/iron, /area/deltastation/command/heads_quarters/qm) "guZ" = ( -/obj/machinery/landinglight/lz1{ - dir = 1 - }, +/obj/machinery/landinglight/lz1, +/obj/structure/cable, /turf/open/floor/asteroidfloor, /area/deltastation/external/landingzone) "gvc" = ( @@ -33391,11 +33390,8 @@ /turf/open/floor/plating, /area/deltastation/service/library/abandoned) "gIk" = ( -/obj/effect/attach_point/weapon/dropship1{ - dir = 8 - }, /turf/open/floor/plating/icefloor/warnplate{ - dir = 8 + dir = 5 }, /area/shuttle/drop1/lz1) "gIm" = ( @@ -35001,9 +34997,10 @@ /turf/open/floor/iron/dark, /area/deltastation/command/heads_quarters/ce) "hao" = ( -/obj/machinery/landinglight/lz1, -/turf/open/floor/asteroidfloor, -/area/deltastation/external/landingzone) +/turf/open/floor/plating/icefloor/warnplate{ + dir = 1 + }, +/area/shuttle/drop1/lz1) "har" = ( /obj/structure/closet/secure_closet/personal, /obj/effect/turf_decal/tile/transparent/neutral/fourcorners, @@ -36319,6 +36316,11 @@ }, /turf/open/floor/plating, /area/deltastation/security/prison) +"hmF" = ( +/turf/open/floor/plating/icefloor/warnplate{ + dir = 6 + }, +/area/shuttle/drop1/lz1) "hmL" = ( /obj/effect/turf_decal/tile/transparent/yellow{ dir = 1 @@ -41594,7 +41596,7 @@ }, /obj/structure/rack, /obj/effect/turf_decal/bot_red, -/obj/item/clothing/suit/apron{ +/obj/item/clothing/suit/storage/apron{ desc = "A white smock used by barbers to remain hair free."; name = "barber smock" }, @@ -50615,10 +50617,12 @@ /turf/open/floor/iron/dark/textured_large, /area/deltastation/medical/cryo) "kpf" = ( -/obj/docking_port/stationary/marine_dropship/lz1, -/obj/docking_port/stationary/crashmode, -/turf/open/floor/plating, -/area/shuttle/drop1/lz1) +/obj/effect/decal/cleanable/dirt, +/obj/machinery/landinglight/lz1{ + dir = 4 + }, +/turf/open/floor/asteroidfloor, +/area/deltastation/external/landingzone) "kpj" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -60255,7 +60259,7 @@ /turf/open/floor/iron/edge, /area/deltastation/hallway/primary/central/aft) "mmf" = ( -/obj/machinery/camera/autoname/lz_camera, +/obj/effect/attach_point/weapon/dropship1, /turf/open/floor/plating, /area/shuttle/drop1/lz1) "mmr" = ( @@ -62655,13 +62659,9 @@ /turf/open/floor/iron, /area/deltastation/engineering/break_room) "mMC" = ( -/obj/machinery/floodlight/landing, -/obj/effect/turf_decal/warning_stripes, -/obj/machinery/landinglight/lz1{ - dir = 4 - }, -/turf/open/floor/mech_bay_recharge_floor, -/area/deltastation/external/landingzone) +/obj/machinery/camera/autoname/lz_camera, +/turf/open/floor/plating, +/area/shuttle/drop1/lz1) "mMI" = ( /obj/structure/prop/mainship/turretprop{ dir = 4; @@ -63904,13 +63904,9 @@ /turf/open/floor/iron, /area/deltastation/maintenance/disposal/incinerator) "nbj" = ( -/obj/machinery/floodlight/landing, -/obj/effect/turf_decal/warning_stripes, -/obj/machinery/landinglight/lz1{ - dir = 8 - }, -/turf/open/floor/asteroidfloor, -/area/deltastation/external/landingzone) +/obj/effect/attach_point/electronics/dropship1, +/turf/open/floor/plating, +/area/shuttle/drop1/lz1) "nbo" = ( /obj/effect/landmark/weed_node, /obj/effect/spawner/random/machinery/random_broken_computer/crewmonitor, @@ -66588,8 +66584,12 @@ /turf/open/floor/iron, /area/deltastation/hallway/primary/starboard) "nEs" = ( -/turf/open/floor/plating/icefloor/warnplate, -/area/shuttle/drop1/lz1) +/obj/effect/decal/cleanable/dirt, +/obj/machinery/landinglight/lz1{ + dir = 1 + }, +/turf/open/floor/asteroidfloor, +/area/deltastation/external/landingzone) "nEz" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line, @@ -74166,8 +74166,11 @@ /turf/open/floor/iron/grimy, /area/deltastation/command/heads_quarters/hos) "phF" = ( +/obj/effect/attach_point/weapon/dropship1{ + dir = 8 + }, /turf/open/floor/plating/icefloor/warnplate{ - dir = 9 + dir = 8 }, /area/shuttle/drop1/lz1) "phG" = ( @@ -76217,6 +76220,13 @@ /obj/effect/spawner/random/engineering/toolbox, /turf/open/floor/iron, /area/deltastation/hallway/secondary/construction) +"pCk" = ( +/obj/machinery/landinglight/lz1{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/asteroidfloor, +/area/deltastation/external/landingzone) "pCl" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/decal/cleanable/dirt, @@ -76296,10 +76306,12 @@ /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/storage/testroom) "pCO" = ( -/turf/open/floor/plating/icefloor/warnplate{ - dir = 1 +/obj/effect/ai_node, +/obj/machinery/landinglight/lz1{ + dir = 8 }, -/area/shuttle/drop1/lz1) +/turf/open/floor/asteroidfloor, +/area/deltastation/external/landingzone) "pCP" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/sandedge/corner2{ @@ -85455,11 +85467,13 @@ /turf/open/floor/gcircuit, /area/deltastation/science/xenobiology) "rsx" = ( -/obj/machinery/camera/autoname/lz_camera, -/turf/open/floor/plating/icefloor/warnplate{ +/obj/machinery/floodlight/landing, +/obj/effect/turf_decal/warning_stripes, +/obj/machinery/landinglight/lz1{ dir = 4 }, -/area/shuttle/drop1/lz1) +/turf/open/floor/mech_bay_recharge_floor, +/area/deltastation/external/landingzone) "rsC" = ( /obj/effect/spawner/random/machinery/status_display, /turf/closed/wall/r_wall, @@ -87345,12 +87359,11 @@ /turf/open/floor/iron, /area/deltastation/cargo/office) "rLQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/landinglight/lz1{ - dir = 4 +/obj/machinery/camera/autoname/lz_camera, +/turf/open/floor/plating/icefloor/warnplate{ + dir = 8 }, -/turf/open/floor/asteroidfloor, -/area/deltastation/external/landingzone) +/area/shuttle/drop1/lz1) "rMb" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -97766,7 +97779,8 @@ }, /area/deltastation/engineering/atmos/pumproom) "tRz" = ( -/obj/effect/attach_point/electronics/dropship1, +/obj/docking_port/stationary/marine_dropship/lz1, +/obj/docking_port/stationary/crashmode, /turf/open/floor/plating, /area/shuttle/drop1/lz1) "tRG" = ( @@ -99396,10 +99410,10 @@ /turf/open/floor/plating, /area/deltastation/tcommsat/server) "uin" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/landinglight/lz1, -/turf/open/floor/asteroidfloor, -/area/deltastation/external/landingzone) +/turf/open/floor/plating/icefloor/warnplate{ + dir = 9 + }, +/area/shuttle/drop1/lz1) "uit" = ( /obj/effect/turf_decal/tile/transparent/neutral/anticorner/contrasted{ dir = 8 @@ -101436,7 +101450,7 @@ "uDj" = ( /obj/machinery/camera/autoname/lz_camera, /turf/open/floor/plating/icefloor/warnplate{ - dir = 8 + dir = 4 }, /area/shuttle/drop1/lz1) "uDo" = ( @@ -109888,10 +109902,11 @@ /turf/open/floor/iron/half, /area/deltastation/security/office) "wkR" = ( -/turf/open/floor/plating/icefloor/warnplate{ - dir = 6 +/obj/machinery/landinglight/lz1{ + dir = 1 }, -/area/shuttle/drop1/lz1) +/turf/open/floor/asteroidfloor, +/area/deltastation/external/landingzone) "wkX" = ( /obj/effect/turf_decal/siding/yellow/corner{ dir = 8 @@ -112275,7 +112290,7 @@ /area/deltastation/command/bridge) "wIv" = ( /turf/open/floor/plating/icefloor/warnplate{ - dir = 5 + dir = 10 }, /area/shuttle/drop1/lz1) "wIx" = ( @@ -166626,7 +166641,7 @@ dfm xuY xuY xuY -vNR +xuY vNR vNR cSG @@ -166884,8 +166899,8 @@ xuY xuY dfm xuY -vNR -vNR +xuY +xuY cSG sbS vNR @@ -167142,7 +167157,7 @@ dfm xuY xuY xuY -vNR +xuY cSG sbS vNR @@ -167375,30 +167390,30 @@ vNR pCr dfm xuY -vXs -orp +dOS rTj rTj -rLQ +kpf rTj rTj rTj rTj rTj -rLQ +kpf rTj -mMC +rsx rTj rTj -rLQ +kpf rTj rTj -rLQ +kpf rTj rTj rTj rTj orp +xuY dfm cSG sbS @@ -167632,19 +167647,18 @@ vNR xoq xoq sfZ -bYh +fyi uin -phF wVi wVi wVi wVi wVi wVi -gIk +phF wVi wVi -uDj +rLQ wVi wVi wVi @@ -167654,8 +167668,9 @@ wVi wVi wVi wVi -dQu -guZ +wIv +wkR +xuY xuY cSG sbS @@ -167889,12 +167904,11 @@ vNR toH nZF aZA -vXs +guZ hao -pCO qgB +mMC mmf -fyi qgB qgB qgB @@ -167909,10 +167923,11 @@ qgB qgB qgB qgB -mmf +mMC qgB +arC nEs -dOS +xuY bqa cSG sbS @@ -168146,12 +168161,11 @@ vNR jOD gdc aZA -vXs -uin -pCO +fyi +hao qgB qgB -tRz +nbj qgB qgB qgB @@ -168168,8 +168182,9 @@ qgB qgB qgB qgB -nEs -guZ +arC +wkR +dfm dfm cSG sbS @@ -168403,9 +168418,8 @@ vNR toH xaf aZA -bYh +guZ hao -pCO qgB qgB qgB @@ -168425,8 +168439,9 @@ qgB qgB qgB qgB +arC nEs -dOS +xuY xuY cSG sbS @@ -168660,9 +168675,8 @@ vNR bPd bPd kZL -vXs -uin -pCO +fyi +hao qgB qgB qgB @@ -168682,8 +168696,9 @@ qgB qgB qgB qgB +arC nEs -dOS +dfm dfm cSG sbS @@ -168917,9 +168932,8 @@ vNR toH toH aZA -bYh -uin -pCO +fyi +hao qgB qgB qgB @@ -168929,7 +168943,7 @@ qgB qgB qgB qgB -kpf +tRz qgB qgB qgB @@ -168939,8 +168953,9 @@ qgB qgB qgB qgB +arC nEs -dOS +xuY xuY cSG sbS @@ -169174,9 +169189,8 @@ vNR npA toH sYK -vXs -uin -pCO +fyi +hao qgB qgB qgB @@ -169196,8 +169210,9 @@ qgB qgB qgB qgB +arC nEs -dOS +dfm dfm cSG sbS @@ -169431,9 +169446,8 @@ vNR toH xuo kZL -vXs +guZ hao -pCO qgB qgB qgB @@ -169453,8 +169467,9 @@ qgB qgB qgB qgB +arC nEs -dOS +dfm xuY cSG sbS @@ -169688,12 +169703,11 @@ vNR toH xuo kZL -bYh -uin -pCO +fyi +hao qgB qgB -tRz +nbj qgB qgB qgB @@ -169710,8 +169724,9 @@ qgB qgB qgB qgB -nEs -guZ +arC +pCk +xuY dfm cSG sbS @@ -169945,12 +169960,11 @@ vNR xuo toH sYK -vXs -uin -pCO +fyi +hao qgB +mMC mmf -fyi qgB qgB qgB @@ -169965,10 +169979,11 @@ qgB qgB qgB qgB -mmf +mMC qgB +arC nEs -dOS +xuY bqa cSG sbS @@ -170202,9 +170217,8 @@ vNR njf njf liB -bYh -hao -wIv +guZ +gIk wAz wAz wAz @@ -170214,7 +170228,7 @@ wAz wAz wAz wAz -rsx +uDj wAz wAz wAz @@ -170224,8 +170238,9 @@ wAz wAz wAz wAz +hmF wkR -guZ +xuY dfm cSG sbS @@ -170459,8 +170474,7 @@ vNf xuY dfm xuY -vXs -orp +dOS fcv exa fcv @@ -170470,8 +170484,8 @@ exa exa fcv exa +pCO ghS -nbj fcv exa fcv @@ -170484,6 +170498,7 @@ fcv fcv orp xuY +xuY cSG sbS fCY diff --git a/_maps/map_files/desparity/desparity.dmm b/_maps/map_files/desparity/desparity.dmm index 6fdadc4448557..14bbee48d0d0a 100644 --- a/_maps/map_files/desparity/desparity.dmm +++ b/_maps/map_files/desparity/desparity.dmm @@ -5981,7 +5981,7 @@ /area/lv624/ground/caves/west1) "Fe" = ( /obj/structure/table, -/obj/item/trash/barcardine, +/obj/item/trash/barcaridine, /obj/item/clothing/suit/armor/vest/security{ pixel_x = 5; pixel_y = 5 @@ -8491,7 +8491,7 @@ "Ru" = ( /obj/structure/table, /obj/item/clothing/head/chefhat, -/obj/item/clothing/suit/chef/classic, +/obj/item/clothing/suit/storage/chef/classic, /obj/item/tool/kitchen/rollingpin, /obj/effect/decal/cleanable/dirt, /turf/open/floor/tile/barber, diff --git a/_maps/map_files/gelida_iv/gelida_iv.dmm b/_maps/map_files/gelida_iv/gelida_iv.dmm index 55132389a3a18..6da4350f4d677 100644 --- a/_maps/map_files/gelida_iv/gelida_iv.dmm +++ b/_maps/map_files/gelida_iv/gelida_iv.dmm @@ -127,6 +127,10 @@ }, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/landing_zone_2) +"acQ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/gelida/outdoors/colony_streets/south_west_street) "ada" = ( /obj/effect/turf_decal/warning_stripes/thin, /obj/effect/turf_decal/warning_stripes/thin{ @@ -418,6 +422,11 @@ /obj/structure/window/framed/colony, /turf/open/floor/plating, /area/gelida/indoors/a_block/medical) +"aor" = ( +/obj/effect/spawner/random/engineering/wood, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/gelida/outdoors/colony_streets/central_streets) "aoC" = ( /obj/effect/spawner/random/engineering/metal, /obj/item/shard, @@ -515,7 +524,7 @@ /turf/open/floor/prison/plate, /area/gelida/outdoors/colony_streets/north_street) "arF" = ( -/obj/structure/holohoop{ +/obj/structure/hoop{ dir = 4; id = "lvbasketball"; side = "left" @@ -1121,6 +1130,13 @@ /obj/effect/landmark/weed_node, /turf/open/floor/plating/plating_catwalk/prison, /area/gelida/indoors/a_block/dorms) +"aOV" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/gelida/outdoors/colony_streets/south_east_street) "aPl" = ( /obj/structure/closet/bombcloset, /turf/open/floor/prison/darkbrown/full, @@ -1151,6 +1167,10 @@ /obj/machinery/light, /turf/open/floor/wood, /area/gelida/indoors/b_block/bar) +"aQb" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/gelida/indoors/c_block/cargo) "aQf" = ( /obj/structure/filingcabinet{ pixel_x = -7; @@ -1684,9 +1704,6 @@ /obj/effect/turf_decal/warning_stripes/stripedsquare/tile/border, /turf/open/floor/mainship/stripesquare, /area/gelida/cavestructuretwo) -"beU" = ( -/turf/closed/mineral/smooth/darkfrostwall, -/area/gelida/caves/central_caves/garbledradio) "beW" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -1726,6 +1743,11 @@ dir = 4 }, /area/gelida/indoors/a_block/dorms) +"bfO" = ( +/obj/item/lightstick/red/anchored, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/gelida/outdoors/colony_streets/south_west_street) "bfU" = ( /obj/structure/table/mainship, /obj/machinery/recharger, @@ -1927,7 +1949,7 @@ }, /area/gelida/landing_zone_2) "bmp" = ( -/obj/structure/holohoop{ +/obj/structure/hoop{ pixel_y = 27 }, /obj/item/toy/beach_ball/holoball{ @@ -2030,6 +2052,12 @@ /obj/effect/spawner/random/misc/structure/barrel, /turf/open/floor/prison, /area/gelida/indoors/c_block/cargo) +"bqf" = ( +/obj/structure/closet, +/obj/item/clothing/under/colonist, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkbrown/full, +/area/gelida/indoors/c_block/garage) "bqh" = ( /obj/effect/spawner/random/medical/structure/ivdrip, /obj/machinery/atmospherics/pipe/simple/green/hidden, @@ -2256,6 +2284,17 @@ /obj/effect/landmark/corpsespawner/colonist, /turf/open/floor/prison/whitegreen/full, /area/gelida/indoors/a_block/fitness) +"bzm" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/gelida/caves/east_caves/garbledradio) +"bzI" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/gelida/outdoors/colony_streets/south_east_street) "bzM" = ( /obj/structure/cable, /turf/open/floor/prison, @@ -2448,6 +2487,12 @@ }, /turf/open/floor/prison, /area/gelida/indoors/a_block/garden) +"bGJ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 1 + }, +/area/gelida/outdoors/colony_streets/central_streets) "bHd" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/effect/ai_node, @@ -2576,6 +2621,13 @@ }, /turf/open/floor/prison/darkred/full, /area/gelida/indoors/a_block/security) +"bLp" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/gelida/outdoors/colony_streets/south_east_street) "bLJ" = ( /obj/structure/prop/vehicle/truck/destructible, /turf/open/floor/plating/ground/snow/layer2, @@ -2808,6 +2860,12 @@ /obj/item/ammo_magazine/revolver/cmb, /turf/open/floor/prison/darkred/full, /area/gelida/indoors/a_block/security) +"bUb" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 1 + }, +/area/gelida/outdoors/colony_streets/east_central_street) "bUe" = ( /obj/structure/stairs/corner_seamless, /turf/open/floor/plating/ground/desertdam/asphalt/cement, @@ -2866,6 +2924,7 @@ "bWI" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden, /obj/structure/cable, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/indoors/b_block/bridge) "bWQ" = ( @@ -3128,6 +3187,7 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 10 }, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/indoors/c_block/casino) "cfG" = ( @@ -3202,6 +3262,7 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 6 }, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/snow/layer1, /area/gelida/outdoors/colony_streets/north_west_street) "chO" = ( @@ -3279,6 +3340,7 @@ "ckU" = ( /obj/item/shard, /obj/effect/ai_node, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/outdoors/colony_streets/south_west_street) "clc" = ( @@ -3515,6 +3577,14 @@ /obj/item/coin/diamond, /turf/open/floor/prison/sterilewhite, /area/gelida/indoors/a_block/corpo) +"cuP" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/c_block/mining) "cuS" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -3645,6 +3715,7 @@ /area/gelida/indoors/lone_buildings/storage_blocks) "cyB" = ( /obj/effect/decal/cleanable/blood, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/indoors/c_block/mining) "cyK" = ( @@ -3867,6 +3938,7 @@ }, /obj/effect/landmark/corpsespawner/scientist, /obj/effect/decal/cleanable/blood, +/obj/effect/landmark/weed_node, /turf/open/floor/prison/whitepurple/full{ dir = 4 }, @@ -4136,6 +4208,13 @@ }, /turf/open/floor/prison/plate, /area/gelida/indoors/b_block/bar) +"cNH" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/gelida/outdoors/colony_streets/south_east_street) "cNO" = ( /turf/open/floor/prison{ dir = 1 @@ -4193,6 +4272,12 @@ dir = 1 }, /area/gelida/cavestructuretwo) +"cQa" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 9 + }, +/area/gelida/outdoors/colony_streets/south_street) "cQd" = ( /obj/effect/spawner/random/engineering/pickaxe, /turf/open/floor/plating/ground/ice, @@ -4441,6 +4526,11 @@ dir = 1 }, /area/gelida/landing_zone_forecon/UD6_Tornado) +"cXS" = ( +/obj/effect/spawner/random/misc/structure/chair_or_metal/north, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/gelida/indoors/c_block/cargo) "cYd" = ( /obj/effect/landmark/corpsespawner/colonist, /turf/open/floor/prison/whitegreenfull2, @@ -4619,6 +4709,11 @@ /obj/structure/closet/crate, /turf/open/floor/plating/ground/snow/layer2, /area/gelida/outdoors/colony_streets/south_east_street) +"dcM" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/gelida/outdoors/colony_streets/south_west_street) "dcN" = ( /obj/effect/decal/cleanable/blood/drip, /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -4688,7 +4783,6 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/computer/intel_computer, /turf/open/floor/prison/darkbrown/full, /area/gelida/indoors/c_block/casino) "dgr" = ( @@ -4860,6 +4954,10 @@ /obj/structure/cable, /turf/open/floor/plating/plating_catwalk/prison, /area/gelida/indoors/a_block/bridges) +"dmd" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular, +/area/gelida/outdoors/colony_streets/east_central_street) "dme" = ( /obj/structure/toilet{ pixel_y = 16 @@ -4898,6 +4996,12 @@ dir = 1 }, /area/gelida/outdoors/colony_streets/east_central_street) +"dnW" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/gelida/indoors/c_block/cargo) "dnY" = ( /obj/structure/table/mainship, /turf/open/floor/prison/plate, @@ -4988,6 +5092,10 @@ /obj/effect/decal/cleanable/blood/oil, /turf/open/floor/plating, /area/gelida/indoors/c_block/garage) +"dqY" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/gelida/indoors/c_block/mining) "drf" = ( /obj/effect/landmark/weed_node, /turf/open/floor/prison, @@ -5022,6 +5130,16 @@ }, /turf/open/floor/wood, /area/gelida/indoors/a_block/executive) +"dsb" = ( +/obj/item/storage/backpack/marine/satchel{ + desc = "It's the heavy-duty black polymer kind. Time to take out the trash!"; + name = "trash bag"; + pixel_x = -4; + pixel_y = 6 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/c_block/garage) "dsf" = ( /obj/structure/cable, /turf/open/floor/prison/whitepurple/full{ @@ -5202,6 +5320,10 @@ /obj/effect/ai_node, /turf/open/floor/plating/ground/mars/random, /area/gelida/indoors/b_block/bridge) +"dyq" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/gelida/indoors/c_block/casino) "dys" = ( /obj/item/clothing/mask/facehugger/dead{ desc = "It has some sort of a tube at the end of its tail. What the hell is this thing?"; @@ -5753,6 +5875,10 @@ /obj/structure/cable, /turf/open/floor/tile/yellow/patch, /area/gelida/indoors/a_block/corpo) +"dRx" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/gelida/indoors/c_block/cargo) "dRV" = ( /obj/structure/rack/nometal, /obj/item/clothing/under/colonist, @@ -6407,6 +6533,11 @@ dir = 4 }, /area/gelida/landing_zone_forecon/landing_zone_4) +"enp" = ( +/obj/machinery/light, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/gelida/indoors/c_block/casino) "eoh" = ( /obj/effect/decal/cleanable/greenglow, /obj/item/reagent_containers/glass/beaker, @@ -6462,6 +6593,7 @@ /obj/machinery/light{ dir = 1 }, +/obj/effect/landmark/weed_node, /turf/open/floor/prison/darkbrown/full, /area/gelida/indoors/c_block/garage) "epc" = ( @@ -6643,6 +6775,12 @@ /obj/effect/landmark/weed_node, /turf/open/floor/mainship/black/full, /area/gelida/powergen) +"etW" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 8 + }, +/area/gelida/outdoors/colony_streets/south_west_street) "etY" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor/carpet, @@ -6788,6 +6926,7 @@ /obj/structure/bed/chair/comfy{ dir = 4 }, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/plating_catwalk/prison, /area/gelida/indoors/a_block/dorms) "eyO" = ( @@ -6836,6 +6975,10 @@ /obj/machinery/floodlight, /turf/open/floor/prison/cleanmarked, /area/gelida/cavestructuretwo) +"ezJ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreenfull2, +/area/gelida/indoors/b_block/bridge) "ezN" = ( /obj/item/ammo_magazine/rifle/tx11{ current_rounds = 0 @@ -7451,6 +7594,13 @@ dir = 1 }, /area/gelida/indoors/a_block/medical) +"eTp" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/gelida/indoors/c_block/bridge) "eTs" = ( /obj/structure/platform_decoration, /obj/effect/landmark/campaign_structure/phoron_crate, @@ -7585,6 +7735,7 @@ pixel_x = 19; pixel_y = 18 }, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/indoors/c_block/cargo) "eWM" = ( @@ -7889,11 +8040,16 @@ /obj/structure/cable, /turf/open/floor/prison, /area/gelida/indoors/c_block/mining) +"fgG" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/gelida/outdoors/colony_streets/south_east_street) "fgJ" = ( /turf/closed/wall, /area/gelida/indoors/a_block/bridges/dorms_fitness) "fgL" = ( /obj/effect/spawner/random/misc/structure/chair_or_metal, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/indoors/c_block/garage) "fhc" = ( @@ -7953,6 +8109,14 @@ }, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/landing_zone_2) +"fiP" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/gelida/indoors/b_block/bridge) "fjn" = ( /obj/structure/prop/mainship/gelida/rails, /turf/open/floor/plating/ground/snow/layer0, @@ -7966,6 +8130,14 @@ /obj/structure/prop/mainship/gelida/smallwire, /turf/open/floor/plating/ground/snow/layer1, /area/gelida/outdoors/colony_streets/south_east_street) +"fko" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/outdoors/colony_streets/south_west_street) "fkv" = ( /obj/effect/landmark/excavation_site_spawner, /turf/open/floor/carpet, @@ -7990,7 +8162,9 @@ /area/gelida/indoors/a_block/bridges/corpo_fitness) "flF" = ( /obj/effect/landmark/weed_node, -/obj/structure/nuke_disk_candidate, +/obj/structure/nuke_disk_candidate{ + set_associations = list("set2", "set3") + }, /turf/open/floor/prison, /area/gelida/indoors/a_block/security) "flJ" = ( @@ -8000,6 +8174,11 @@ /obj/effect/ai_node, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/outdoors/colony_streets/central_streets) +"flZ" = ( +/obj/machinery/hydroponics, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/platebotc, +/area/gelida/indoors/b_block/hydro) "fmm" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 5 @@ -8067,6 +8246,7 @@ /area/gelida/outdoors/colony_streets/north_east_street) "fpe" = ( /obj/structure/cable, +/obj/effect/landmark/weed_node, /turf/open/floor/prison/darkbrown/full, /area/gelida/indoors/c_block/mining) "fpo" = ( @@ -8329,6 +8509,11 @@ /obj/structure/barricade/metal, /turf/open/floor/prison/sterilewhite/full, /area/gelida/indoors/a_block/corpo) +"fAZ" = ( +/obj/effect/ai_node, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/c_block/casino) "fBw" = ( /obj/structure/cargo_container/ch_red{ dir = 4 @@ -8367,6 +8552,10 @@ }, /turf/open/floor/prison, /area/gelida/cavestructuretwo) +"fCG" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/sterilewhite, +/area/gelida/indoors/lone_buildings/chunk) "fCJ" = ( /turf/open/floor/prison{ dir = 1 @@ -8515,6 +8704,12 @@ }, /turf/open/floor/prison/cleanmarked, /area/gelida/landing_zone_2) +"fJN" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 1 + }, +/area/gelida/outdoors/colony_streets/north_street) "fJX" = ( /obj/structure/bed/chair/comfy{ dir = 8 @@ -8555,6 +8750,7 @@ /obj/structure/barricade/wooden{ dir = 1 }, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/indoors/c_block/cargo) "fMz" = ( @@ -8625,11 +8821,24 @@ dir = 8 }, /area/gelida/outdoors/colony_streets/north_street) +"fOH" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/gelida/indoors/b_block/bridge) "fOW" = ( /obj/structure/window/framed/colony, /obj/structure/platform, /turf/open/floor/plating, /area/gelida/indoors/a_block/bridges) +"fPi" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/outdoors/colony_streets/south_west_street) "fPj" = ( /turf/open/floor/prison{ dir = 6 @@ -8729,6 +8938,11 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor/prison, /area/gelida/indoors/a_block/dorm_north) +"fTa" = ( +/obj/effect/spawner/random/misc/structure/chair_or_metal/north, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkbrown/full, +/area/gelida/indoors/c_block/mining) "fTz" = ( /obj/structure/cargo_container/ch_red{ dir = 4 @@ -8747,6 +8961,7 @@ /area/gelida/indoors/a_block/fitness) "fUc" = ( /obj/effect/ai_node, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/plating_catwalk/prison, /area/gelida/indoors/a_block/bridges/corpo_fitness) "fUu" = ( @@ -8982,6 +9197,16 @@ /obj/effect/spawner/random/decal/blood, /turf/open/floor/carpet, /area/gelida/indoors/c_block/casino) +"gbZ" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/gelida/powergen) +"gcd" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/gelida/powergen) "gce" = ( /obj/structure/table/fancywoodentable, /obj/item/storage/fancy/cigar{ @@ -9156,6 +9381,10 @@ /obj/machinery/light, /turf/open/floor/plating/heatinggrate, /area/gelida/indoors/c_block/cargo) +"giB" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular, +/area/gelida/outdoors/colony_streets/south_street) "giU" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor/plating/ground/snow/layer0, @@ -9251,6 +9480,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/prison, /area/gelida/cavestructuretwo) +"glO" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 8 + }, +/area/gelida/outdoors/colony_streets/north_west_street) "gma" = ( /obj/structure/closet/emcloset, /turf/open/floor/prison/darkbrown/full, @@ -9409,12 +9644,9 @@ /obj/effect/spawner/random/misc/structure/chair_or_metal/east, /turf/open/floor/prison, /area/gelida/indoors/a_block/dorm_north) -"gqh" = ( -/obj/machinery/computer/intel_computer, -/turf/open/floor/prison, -/area/gelida/cavestructuretwo) "gqE" = ( /obj/structure/platform_decoration, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/desertdam/asphalt/cement, /area/gelida/outdoors/colony_streets/central_streets) "gqI" = ( @@ -9465,6 +9697,10 @@ /obj/effect/spawner/random/misc/structure/chair_or_metal/east, /turf/open/floor/prison/sterilewhite/full, /area/gelida/indoors/a_block/corpo) +"gsB" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/gelida/outdoors/colony_streets/south_west_street) "gtc" = ( /obj/structure/rack/nometal, /obj/item/clothing/head/hardhat, @@ -9542,6 +9778,7 @@ pixel_x = 18; pixel_y = 20 }, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/plating_catwalk/prison, /area/gelida/indoors/a_block/bridges/corpo) "guX" = ( @@ -9816,13 +10053,16 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 6 }, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/indoors/c_block/mining) "gDd" = ( /obj/machinery/light{ dir = 1 }, -/obj/structure/nuke_disk_candidate, +/obj/structure/nuke_disk_candidate{ + set_associations = list("set1", "set2", "set3", "set4") + }, /turf/open/floor/mainship/black/full, /area/gelida/powergen) "gDB" = ( @@ -9985,6 +10225,12 @@ }, /turf/open/floor/prison, /area/gelida/indoors/c_block/cargo) +"gJA" = ( +/obj/machinery/light, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkbrown/full, +/area/gelida/indoors/c_block/bridge) "gJD" = ( /obj/structure/bed, /obj/item/clothing/mask/facehugger/dead{ @@ -10110,6 +10356,13 @@ }, /turf/open/floor/prison, /area/gelida/cavestructuretwo) +"gMy" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/c_block/garage) "gMH" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -10144,6 +10397,11 @@ /obj/effect/ai_node, /turf/open/floor/plating/ground/snow/layer2, /area/gelida/outdoors/w_rockies) +"gNS" = ( +/obj/effect/landmark/xeno_resin_door, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/ice, +/area/gelida/caves/west_caves) "gOD" = ( /obj/structure/table/reinforced/prison, /turf/open/floor/tile/yellow/patch, @@ -10255,6 +10513,13 @@ /obj/machinery/atmospherics/components/unary/vent_pump, /turf/open/floor/prison/darkred/full, /area/gelida/indoors/a_block/security) +"gQQ" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/gelida/outdoors/colony_streets/south_east_street) "gQV" = ( /obj/structure/bed/chair/comfy{ dir = 4 @@ -10720,7 +10985,7 @@ /turf/open/floor/prison/sterilewhite, /area/gelida/landing_zone_forecon/UD6_Tornado) "hju" = ( -/obj/structure/holohoop{ +/obj/structure/hoop{ dir = 8; id = "lvbasketball"; side = "right" @@ -10810,6 +11075,13 @@ }, /turf/open/floor/prison/sterilewhite/full, /area/gelida/indoors/a_block/medical) +"hma" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/gelida/outdoors/colony_streets/central_streets) "hmd" = ( /obj/structure/prop/vehicle/truck/destructible, /turf/open/floor/plating/ground/snow/layer1, @@ -10972,6 +11244,10 @@ /obj/machinery/floodlight/colony, /turf/open/floor/plating/ground/desertdam/asphalt/cement, /area/gelida/outdoors/colony_streets/east_central_street) +"hsE" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/gelida/outdoors/rock) "hsH" = ( /obj/item/storage/briefcase, /turf/open/floor/prison, @@ -11182,6 +11458,11 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor/plating, /area/gelida/indoors/c_block/cargo) +"hAs" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/c_block/cargo) "hAt" = ( /obj/structure/flora/ausbushes/sunnybush{ pixel_y = 10 @@ -11424,6 +11705,16 @@ dir = 4 }, /area/gelida/indoors/a_block/dorms) +"hKe" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkbrown/full, +/area/gelida/indoors/c_block/bridge) "hKl" = ( /obj/effect/spawner/random/misc/structure/chair_or_metal/east, /turf/open/floor/prison/green/full{ @@ -11444,6 +11735,12 @@ dir = 4 }, /area/gelida/indoors/a_block/dorm_north) +"hLd" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 4 + }, +/area/gelida/outdoors/colony_streets/south_street) "hLj" = ( /obj/structure/fence, /obj/effect/turf_decal/warning_stripes/thin, @@ -11461,6 +11758,10 @@ "hLw" = ( /turf/open/floor/mainship/stripesquare, /area/gelida/indoors/a_block/bridges) +"hLM" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/outdoors/colony_streets/east_central_street) "hLP" = ( /obj/effect/landmark/xeno_resin_wall, /turf/open/floor/plating/ground/ice, @@ -11492,6 +11793,7 @@ dir = 10 }, /obj/effect/ai_node, +/obj/effect/landmark/weed_node, /turf/open/floor/prison/whitepurple/full{ dir = 4 }, @@ -11581,6 +11883,7 @@ /turf/open/floor/mainship/stripesquare, /area/gelida/indoors/a_block/garden) "hQt" = ( +/obj/effect/landmark/weed_node, /turf/open/floor/prison/darkred/full, /area/gelida/indoors/a_block/bridges/corpo) "hQI" = ( @@ -11646,6 +11949,14 @@ /obj/effect/ai_node, /turf/open/floor/plating/plating_catwalk/prison, /area/gelida/indoors/a_block/bridges/dorms_fitness) +"hSW" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/gelida/indoors/c_block/mining) "hTb" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 9 @@ -11931,6 +12242,16 @@ /obj/effect/ai_node, /turf/open/floor/prison, /area/gelida/indoors/a_block/bridges/dorms_fitness) +"iak" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/gelida/outdoors/colony_streets/north_west_street) "iaK" = ( /obj/machinery/light{ dir = 1; @@ -12011,6 +12332,12 @@ }, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/outdoors/colony_streets/south_east_street) +"idt" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 1 + }, +/area/gelida/outdoors/colony_streets/south_street) "idz" = ( /obj/structure/table/mainship, /turf/open/floor/prison/blue/plate{ @@ -12365,6 +12692,11 @@ /obj/structure/cable, /turf/open/floor/prison, /area/gelida/indoors/a_block/bridges/dorms_fitness) +"ioo" = ( +/obj/effect/spawner/random/misc/structure/chair_or_metal/east, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/c_block/garage) "iou" = ( /obj/structure/table/mainship, /obj/effect/spawner/random/misc/paperbin{ @@ -12414,6 +12746,11 @@ dir = 8 }, /area/gelida/outdoors/colony_streets/south_west_street) +"iqR" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/gelida/indoors/b_block/bridge) "iqY" = ( /obj/structure/table/mainship, /obj/item/paper, @@ -12547,6 +12884,10 @@ /obj/effect/landmark/lv624/fog_blocker/xeno_spawn, /turf/open/floor/mainship/black/full, /area/gelida/powergen) +"ivF" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/b_block/bridge) "iwh" = ( /obj/structure/platform, /turf/closed/wall, @@ -12637,6 +12978,11 @@ dir = 4 }, /area/gelida/landing_zone_forecon/landing_zone_4) +"iyl" = ( +/obj/effect/ai_node, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/gelida/outdoors/colony_streets/central_streets) "iyN" = ( /turf/open/floor/prison/plate, /area/gelida/outdoors/colony_streets/north_west_street) @@ -12672,6 +13018,10 @@ /obj/structure/cable, /turf/open/floor/mainship/stripesquare, /area/gelida/indoors/a_block/dorm_north) +"iAK" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/stripesquare, +/area/gelida/indoors/c_block/cargo) "iAM" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 10 @@ -12679,6 +13029,10 @@ /obj/effect/ai_node, /turf/open/floor/prison, /area/gelida/indoors/a_block/dorm_north) +"iAT" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/gelida/outdoors/colony_streets/south_east_street) "iAV" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -12795,6 +13149,11 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor/mainship/stripesquare, /area/gelida/indoors/c_block/garage) +"iEp" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/wood, +/area/gelida/indoors/c_block/casino) "iES" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 2 @@ -13253,6 +13612,11 @@ "iVU" = ( /turf/open/floor/mainship/stripesquare, /area/gelida/indoors/a_block/corpo) +"iWw" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/c_block/mining) "iWI" = ( /obj/structure/filingcabinet{ pixel_x = -9 @@ -13375,6 +13739,10 @@ /obj/structure/cable, /turf/open/floor/plating/plating_catwalk/prison, /area/gelida/indoors/a_block/kitchen) +"jam" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/gelida/outdoors/colony_streets/central_streets) "jan" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -13522,6 +13890,16 @@ /obj/effect/spawner/random/misc/structure/curtain, /turf/open/floor/mainship/stripesquare, /area/gelida/indoors/a_block/executive) +"jfS" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkbrown/full, +/area/gelida/indoors/c_block/cargo) "jfU" = ( /obj/structure/closet/crate/trashcart, /obj/item/trash/chips, @@ -13663,6 +14041,15 @@ "jlM" = ( /turf/open/floor/plating/ground/snow/layer0, /area/gelida/outdoors/colony_streets/north_street) +"jlP" = ( +/obj/item/clothing/mask/facehugger/dead{ + desc = "It has some sort of a tube at the end of its tail. What the hell is this thing?"; + name = "????"; + stat = 2 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/gelida/outdoors/colony_streets/south_east_street) "jlX" = ( /obj/effect/spawner/gibspawner/xeno, /obj/structure/platform{ @@ -14103,6 +14490,12 @@ /obj/effect/landmark/weed_node, /turf/open/floor/plating, /area/gelida/caves/west_caves) +"jCm" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 5 + }, +/area/gelida/outdoors/colony_streets/south_street) "jCt" = ( /obj/machinery/computer/shuttle/shuttle_control/dropship{ pixel_y = -9 @@ -14155,6 +14548,17 @@ }, /turf/open/floor/plating, /area/gelida/indoors/c_block/cargo) +"jFY" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/gelida/outdoors/colony_streets/central_streets) +"jGx" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 4 + }, +/area/gelida/outdoors/colony_streets/east_central_street) "jGE" = ( /turf/open/floor/plating/plating_catwalk/prison, /area/gelida/indoors/b_block/bridge) @@ -14633,6 +15037,9 @@ /obj/effect/ai_node, /turf/open/floor/plating/ground/snow/layer1, /area/gelida/outdoors/colony_streets/north_street) +"jSF" = ( +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/gelida/powergen) "jSP" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -14656,6 +15063,10 @@ "jTv" = ( /turf/closed/wall, /area/gelida/indoors/b_block/bridge) +"jTx" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkbrown/full, +/area/gelida/indoors/c_block/cargo) "jTA" = ( /obj/structure/table/mainship, /obj/item/tool/kitchen/tray{ @@ -14767,6 +15178,7 @@ /obj/machinery/atmospherics/pipe/manifold/green/hidden{ dir = 1 }, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/indoors/a_block/dorms) "jXE" = ( @@ -15201,6 +15613,7 @@ /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 }, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/outdoors/colony_streets/east_central_street) "kpl" = ( @@ -15760,6 +16173,10 @@ /obj/machinery/vending/dinnerware, /turf/open/floor/prison/plate, /area/gelida/indoors/b_block/bar) +"kJF" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/gelida/outdoors/colony_streets/north_east_street) "kJL" = ( /turf/open/floor/plating, /area/gelida/indoors/a_block/corpo) @@ -16025,6 +16442,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1 }, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/indoors/a_block/dorms) "kTt" = ( @@ -16235,6 +16653,13 @@ }, /turf/open/floor/mainship/black/full, /area/gelida/powergen) +"laG" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/gelida/outdoors/colony_streets/south_east_street) "laK" = ( /obj/structure/stairs/corner_seamless{ dir = 8 @@ -16302,6 +16727,10 @@ /obj/machinery/computer/intel_computer, /turf/open/floor/plating, /area/gelida/outdoors/colony_streets/central_streets) +"lcK" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkbrown/full, +/area/gelida/indoors/c_block/mining) "ldv" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/structure/cable, @@ -16407,6 +16836,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/structure/cable, +/obj/effect/landmark/weed_node, /turf/open/floor/plating, /area/gelida/indoors/c_block/mining) "lhb" = ( @@ -16478,6 +16908,7 @@ /obj/structure/prop/mainship/gelida/smallwire{ dir = 8 }, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/outdoors/colony_streets/south_east_street) "lii" = ( @@ -16744,6 +17175,7 @@ name = "????"; stat = 2 }, +/obj/effect/landmark/weed_node, /turf/open/floor/freezer, /area/gelida/indoors/a_block/dorms) "lrX" = ( @@ -16839,6 +17271,10 @@ dir = 1 }, /area/gelida/indoors/c_block/mining) +"lvq" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular, +/area/gelida/outdoors/colony_streets/central_streets) "lvE" = ( /obj/structure/platform_decoration{ dir = 1 @@ -17675,6 +18111,10 @@ /obj/effect/ai_node, /turf/open/floor/plating, /area/gelida/powergen) +"lXR" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/gelida/outdoors/colony_streets/central_streets) "lXT" = ( /obj/structure/dispenser/oxygen, /turf/open/floor/prison/darkbrown/full, @@ -17823,6 +18263,7 @@ "mcL" = ( /obj/structure/cable, /obj/effect/ai_node, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/desertdam/asphalt/edge/regular, /area/gelida/outdoors/colony_streets/south_west_street) "mcP" = ( @@ -17849,6 +18290,11 @@ /obj/structure/cable, /turf/open/floor/mainship/stripesquare, /area/gelida/powergen) +"meb" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/stripesquare, +/area/gelida/indoors/c_block/mining) "mec" = ( /obj/structure/stairs/seamless{ dir = 8 @@ -17864,6 +18310,12 @@ }, /turf/open/floor/prison/plate, /area/gelida/outdoors/colony_streets/north_west_street) +"meB" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 4 + }, +/area/gelida/outdoors/colony_streets/south_west_street) "meH" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/structure/cable, @@ -18231,6 +18683,7 @@ /area/gelida/indoors/a_block/dorm_north) "moT" = ( /obj/machinery/light, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/indoors/c_block/casino) "moW" = ( @@ -18255,6 +18708,10 @@ dir = 4 }, /area/gelida/outdoors/colony_streets/south_street) +"mpS" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/gelida/outdoors/colony_streets/south_street) "mpV" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -18441,6 +18898,13 @@ }, /turf/open/floor/prison/darkbrown/full, /area/gelida/indoors/c_block/cargo) +"mxd" = ( +/obj/structure/platform_decoration, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 8 + }, +/area/gelida/outdoors/colony_streets/north_west_street) "mxg" = ( /turf/open/floor/prison/sterilewhite/full, /area/gelida/indoors/a_block/medical) @@ -18546,6 +19010,7 @@ pixel_x = -6; pixel_y = -6 }, +/obj/effect/landmark/weed_node, /turf/open/floor/prison/sterilewhite, /area/gelida/indoors/lone_buildings/chunk) "mzI" = ( @@ -18847,6 +19312,7 @@ /area/gelida/indoors/c_block/cargo) "mLB" = ( /obj/item/tool/scythe, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/indoors/b_block/hydro) "mLE" = ( @@ -18955,6 +19421,12 @@ }, /turf/open/floor/plating/ground/snow/layer2, /area/gelida/outdoors/colony_streets/north_east_street) +"mPr" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/gelida/indoors/c_block/mining) "mPv" = ( /obj/structure/window/framed/colony, /obj/structure/platform{ @@ -19099,6 +19571,10 @@ }, /turf/open/floor/prison, /area/gelida/indoors/a_block/dorms) +"mTX" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/gelida/outdoors/colony_streets/south_street) "mUd" = ( /obj/structure/largecrate, /turf/open/floor/prison/plate, @@ -19541,6 +20017,10 @@ /obj/structure/cable, /turf/open/floor/mainship/stripesquare, /area/gelida/indoors/c_block/mining) +"njV" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/gelida/indoors/lone_buildings/storage_blocks) "njW" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -19571,7 +20051,7 @@ /area/gelida/indoors/a_block/executive) "nkE" = ( /obj/structure/table/mainship, -/obj/item/clothing/suit/chef/classic, +/obj/item/clothing/suit/storage/chef/classic, /turf/open/floor/prison/kitchen, /area/gelida/indoors/a_block/kitchen) "nkH" = ( @@ -19593,6 +20073,13 @@ /obj/structure/cable, /turf/open/floor/wood, /area/gelida/indoors/b_block/bar) +"nll" = ( +/obj/effect/turf_decal/warning_stripes/thick{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/gelida/powergen) "nlB" = ( /obj/effect/landmark/weed_node, /turf/open/floor/prison/darkred/full, @@ -19620,6 +20107,10 @@ dir = 4 }, /area/gelida/indoors/b_block/hydro) +"nmr" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/gelida/outdoors/w_rockies) "nmU" = ( /obj/effect/spawner/random/misc/structure/chair_or_metal/west, /obj/machinery/atmospherics/pipe/simple/green/hidden, @@ -19868,6 +20359,13 @@ }, /turf/open/floor/carpet, /area/gelida/indoors/c_block/casino) +"nvH" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green/full{ + dir = 4 + }, +/area/gelida/indoors/b_block/bridge) "nvP" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden{ dir = 8 @@ -19957,6 +20455,11 @@ /obj/effect/landmark/xeno_resin_door, /turf/open/floor/plating, /area/gelida/powergen) +"nyI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/xeno_tunnel_spawn, +/turf/open/floor/prison/darkbrown/full, +/area/gelida/cavestructuretwo) "nyZ" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -19967,6 +20470,7 @@ /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 }, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/outdoors/colony_streets/south_east_street) "nzX" = ( @@ -20003,6 +20507,10 @@ }, /turf/open/floor/prison, /area/gelida/outdoors/colony_streets/south_west_street) +"nAj" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/gelida/outdoors/colony_streets/east_central_street) "nAJ" = ( /turf/open/floor/plating/ground/snow/layer1, /area/gelida/outdoors/rock) @@ -20100,6 +20608,10 @@ /obj/effect/spawner/random/misc/structure/curtain/medical, /turf/open/floor/prison/sterilewhite/full, /area/gelida/indoors/a_block/medical) +"nET" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular, +/area/gelida/outdoors/colony_streets/north_west_street) "nEZ" = ( /obj/machinery/conveyor/inverted{ dir = 5 @@ -20138,6 +20650,10 @@ "nGk" = ( /turf/open/floor/plating/ground/desertdam/asphalt/cement, /area/gelida/outdoors/colony_streets/north_east_street) +"nGs" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular, +/area/gelida/outdoors/colony_streets/south_east_street) "nGw" = ( /obj/structure/barricade/wooden{ dir = 4 @@ -20600,6 +21116,11 @@ }, /turf/open/floor/wood, /area/gelida/indoors/a_block/executive) +"nUd" = ( +/obj/effect/ai_node, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/gelida/indoors/c_block/garage) "nUn" = ( /obj/item/lightstick/red/anchored, /turf/open/floor/plating/ground/snow/layer1, @@ -20868,18 +21389,26 @@ }, /turf/closed/wall, /area/gelida/indoors/a_block/admin) -"oca" = ( -/obj/machinery/computer/intel_computer, -/turf/open/floor/prison/darkbrown/full, -/area/gelida/indoors/c_block/casino) "ocn" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/structure/cable, /turf/open/floor/mainship/stripesquare, /area/gelida/indoors/a_block/corpo) +"ocp" = ( +/obj/machinery/light{ + pixel_x = 16 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkbrown/full, +/area/gelida/indoors/c_block/bridge) "ocv" = ( /turf/open/floor/prison/darkpurple, /area/gelida/indoors/a_block/dorms) +"ocQ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/platebot, +/area/gelida/indoors/c_block/cargo) "ocZ" = ( /obj/structure/stairs/corner_seamless{ dir = 1 @@ -20953,6 +21482,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, /turf/open/floor/prison/darkred/full, /area/gelida/indoors/a_block/bridges/corpo) "oeR" = ( @@ -20960,6 +21490,16 @@ /obj/item/flashlight/lamp, /turf/open/floor/prison/darkred/full, /area/gelida/indoors/a_block/security) +"ofz" = ( +/obj/structure/bed/stool, +/obj/effect/landmark/weed_node, +/turf/open/floor/carpet, +/area/gelida/indoors/c_block/casino) +"ofG" = ( +/obj/effect/ai_node, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/gelida/outdoors/colony_streets/south_east_street) "ogh" = ( /obj/effect/spawner/random/engineering/wood, /turf/open/floor/prison/darkbrown/full, @@ -21284,6 +21824,11 @@ dir = 8 }, /area/gelida/outdoors/colony_streets/central_streets) +"ouu" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/gelida/indoors/b_block/bridge) "ouI" = ( /obj/machinery/vending/snack, /turf/open/floor/prison/plate, @@ -21320,6 +21865,7 @@ /obj/structure/platform_decoration{ dir = 4 }, +/obj/effect/landmark/weed_node, /turf/open/floor/prison/sterilewhite, /area/gelida/indoors/c_block/cargo) "ovz" = ( @@ -21345,10 +21891,6 @@ }, /turf/open/floor/prison/whitegreenfull2, /area/gelida/landing_zone_2) -"owj" = ( -/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, -/turf/closed/mineral/smooth/darkfrostwall, -/area/gelida/caves/central_caves) "owm" = ( /obj/machinery/door/airlock/mainship/medical/glass{ dir = 1; @@ -21401,6 +21943,11 @@ /obj/structure/cargo_container/horizontal, /turf/open/floor/plating/ground/snow/layer1, /area/gelida/outdoors/colony_streets/north_west_street) +"oyQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/gelida/powergen) "ozG" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 @@ -21797,6 +22344,12 @@ }, /turf/closed/wall, /area/gelida/indoors/b_block/bridge) +"oJu" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 9 + }, +/area/gelida/outdoors/colony_streets/central_streets) "oKe" = ( /obj/item/clothing/shoes/jackboots{ pixel_x = -5; @@ -21934,6 +22487,11 @@ /obj/effect/spawner/random/engineering/pickaxe, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/outdoors/colony_streets/south_east_street) +"oOA" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/c_block/mining) "oOO" = ( /obj/structure/stairs/seamless{ dir = 1 @@ -22125,6 +22683,13 @@ /obj/item/weapon/twohanded/fireaxe, /turf/open/floor/prison, /area/gelida/indoors/a_block/security) +"oVi" = ( +/obj/structure/prop/mainship/gelida/smallwire{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/gelida/outdoors/colony_streets/south_east_street) "oVs" = ( /obj/structure/prop/mainship/gelida/smallwire, /obj/structure/prop/mainship/gelida/smallwire{ @@ -22181,6 +22746,10 @@ /obj/effect/ai_node, /turf/open/floor/prison, /area/gelida/indoors/a_block/kitchen) +"oWN" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/gelida/indoors/c_block/garage) "oWT" = ( /obj/effect/spawner/gibspawner/xeno, /turf/open/floor/plating/ground/snow/layer1, @@ -22300,6 +22869,7 @@ /area/gelida/outdoors/colony_streets/north_east_street) "oZr" = ( /obj/structure/platform_decoration, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ dir = 8 }, @@ -22322,6 +22892,7 @@ dir = 1 }, /obj/structure/cable, +/obj/effect/landmark/weed_node, /turf/open/floor/plating, /area/gelida/powergen) "oZU" = ( @@ -22482,7 +23053,9 @@ /turf/open/floor/mainship/black/full, /area/gelida/powergen) "pfn" = ( -/obj/structure/nuke_disk_candidate, +/obj/structure/nuke_disk_candidate{ + set_associations = list("set2", "set4") + }, /turf/open/floor/prison/whitegreenfull2, /area/gelida/indoors/a_block/fitness) "pfs" = ( @@ -22693,6 +23266,7 @@ /area/gelida/indoors/a_block/fitness) "pkE" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/plating_catwalk/prison, /area/gelida/indoors/c_block/bridge) "pkH" = ( @@ -22987,6 +23561,11 @@ }, /turf/open/floor/prison, /area/gelida/indoors/c_block/mining) +"pwZ" = ( +/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/ice, +/area/gelida/caves/central_caves/garbledradio) "pxf" = ( /obj/structure/barricade/wooden{ dir = 4 @@ -23065,7 +23644,9 @@ /turf/open/floor/plating, /area/gelida/powergen) "pzF" = ( -/obj/structure/nuke_disk_candidate, +/obj/structure/nuke_disk_candidate{ + set_associations = list("set1") + }, /turf/open/floor/prison/whitepurple/full{ dir = 4 }, @@ -23240,6 +23821,14 @@ /obj/structure/table/reinforced/prison, /turf/open/floor/prison/sterilewhite/full, /area/gelida/indoors/a_block/corpo) +"pFE" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreenfull2, +/area/gelida/indoors/b_block/bridge) "pFQ" = ( /obj/effect/decal/cleanable/blood/splatter, /obj/machinery/vending/nanomed{ @@ -23268,6 +23857,11 @@ /obj/effect/decal/cleanable/blood/gibs, /turf/open/floor/plating/heatinggrate, /area/gelida/indoors/a_block/bridges/op_centre) +"pHa" = ( +/obj/effect/ai_node, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/gelida/outdoors/colony_streets/south_west_street) "pHd" = ( /obj/structure/sink{ dir = 8; @@ -23285,6 +23879,11 @@ }, /turf/open/floor/mainship/black/full, /area/gelida/powergen) +"pHr" = ( +/obj/effect/ai_node, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/gelida/outdoors/colony_streets/south_street) "pHY" = ( /turf/open/floor/prison/whitegreenfull2, /area/gelida/landing_zone_2) @@ -23461,9 +24060,6 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor/prison/plate, /area/gelida/indoors/a_block/admin) -"pLW" = ( -/turf/closed/mineral/smooth/darkfrostwall, -/area/gelida/powergen) "pMg" = ( /obj/structure/flora/ausbushes/pointybush{ pixel_y = 12 @@ -23477,8 +24073,15 @@ /obj/structure/bed/chair/comfy{ dir = 8 }, +/obj/effect/landmark/weed_node, /turf/open/floor/prison/plate, /area/gelida/indoors/b_block/bar) +"pMw" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 5 + }, +/area/gelida/outdoors/colony_streets/east_central_street) "pNa" = ( /obj/structure/bed/chair/sofa/corsat/left, /turf/open/floor/prison/blue/plate{ @@ -23495,6 +24098,11 @@ /obj/effect/landmark/weed_node, /turf/open/floor/mainship/black/full, /area/gelida/powergen) +"pNW" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkred/full, +/area/gelida/outdoors/colony_streets/east_central_street) "pOe" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -23670,6 +24278,10 @@ dir = 8 }, /area/gelida/indoors/a_block/admin) +"pSZ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/lone_buildings/chunk) "pTe" = ( /obj/structure/prop/mainship/gelida/lightstick{ pixel_x = 7; @@ -23681,6 +24293,7 @@ /obj/structure/prop/mainship/gelida/smallwire{ dir = 8 }, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/outdoors/colony_streets/south_east_street) "pTB" = ( @@ -23930,6 +24543,10 @@ }, /turf/open/floor/plating, /area/gelida/indoors/c_block/cargo) +"qbT" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/gelida/outdoors/w_rockies) "qbZ" = ( /turf/closed/mineral/smooth/snowrock/indestructible, /area/storage/testroom) @@ -23950,7 +24567,9 @@ /turf/open/floor/plating, /area/gelida/indoors/a_block/admin) "qdj" = ( -/obj/machinery/computer/intel_computer, +/obj/structure/nuke_disk_candidate{ + set_associations = list("set4") + }, /turf/open/floor/prison/sterilewhite/full, /area/gelida/indoors/a_block/medical) "qdK" = ( @@ -24470,6 +25089,13 @@ dir = 9 }, /area/gelida/outdoors/colony_streets/north_street) +"qxn" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/gelida/outdoors/colony_streets/central_streets) "qxq" = ( /obj/structure/stairs/seamless, /obj/effect/landmark/xeno_resin_door, @@ -24621,6 +25247,7 @@ /area/gelida/indoors/a_block/fitness) "qDM" = ( /obj/effect/ai_node, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/snow/layer2, /area/gelida/caves/east_caves/garbledradio) "qDN" = ( @@ -24633,6 +25260,10 @@ dir = 1 }, /area/gelida/indoors/a_block/admin) +"qDS" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/gelida/outdoors/colony_streets/east_central_street) "qEb" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/structure/cable, @@ -24709,6 +25340,11 @@ }, /turf/open/floor/prison/darkbrown/full, /area/gelida/indoors/c_block/mining) +"qHd" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/gelida/indoors/c_block/cargo) "qHf" = ( /obj/effect/spawner/random/engineering/toolbox, /turf/open/floor/plating/plating_catwalk/prison, @@ -25134,6 +25770,13 @@ }, /turf/open/floor/prison, /area/gelida/indoors/a_block/dorms) +"qTN" = ( +/obj/structure/bed/chair/sofa/corsat/left{ + pixel_y = 16 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/cavestructuretwo) "qUp" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/effect/landmark/weed_node, @@ -25182,7 +25825,7 @@ /turf/open/floor/prison/whitegreen/full, /area/gelida/indoors/a_block/fitness) "qVp" = ( -/obj/structure/holohoop, +/obj/structure/hoop, /turf/open/floor/prison/whitepurple/full{ dir = 4 }, @@ -25201,6 +25844,7 @@ "qVM" = ( /obj/effect/decal/cleanable/blood/oil, /obj/effect/ai_node, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/outdoors/colony_streets/south_east_street) "qVZ" = ( @@ -25228,6 +25872,10 @@ /obj/machinery/door/airlock/multi_tile/mainship/generic, /turf/open/floor/mainship/stripesquare, /area/gelida/indoors/b_block/hydro) +"qWx" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/gelida/indoors/b_block/bridge) "qWM" = ( /turf/open/floor/prison/sterilewhite/full, /area/gelida/indoors/a_block/bridges/corpo) @@ -25330,7 +25978,7 @@ /turf/open/floor/mainship/stripesquare, /area/gelida/indoors/a_block/security) "qZL" = ( -/obj/structure/bed/chair/wheelchair, +/obj/vehicle/ridden/wheelchair, /obj/machinery/atmospherics/components/unary/vent_pump, /turf/open/floor/prison/whitepurple/full{ dir = 4 @@ -25344,9 +25992,10 @@ /obj/effect/turf_decal/warning_stripes/nscenter, /turf/open/floor/wood, /area/gelida/indoors/a_block/fitness) -"raa" = ( -/turf/closed/mineral/smooth/darkfrostwall, -/area/gelida/caves/west_caves/garbledradio) +"rai" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/gelida/outdoors/colony_streets/north_west_street) "raz" = ( /obj/effect/spawner/random/misc/structure/supplycrate/secureweighted, /turf/open/floor/prison/plate, @@ -25537,6 +26186,10 @@ dir = 4 }, /area/gelida/indoors/c_block/cargo) +"rfS" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer2, +/area/gelida/outdoors/colony_streets/south_street) "rga" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/effect/ai_node, @@ -25731,6 +26384,10 @@ }, /turf/closed/mineral/smooth/snowrock, /area/gelida/outdoors/colony_streets/south_east_street) +"rkH" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/gelida/outdoors/colony_streets/south_east_street) "rkP" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 1 @@ -25777,6 +26434,11 @@ /obj/effect/spawner/random/engineering/metal, /turf/open/floor/plating/ground/snow/layer1, /area/gelida/outdoors/colony_streets/east_central_street) +"rlj" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/c_block/garage) "rll" = ( /obj/structure/platform_decoration{ dir = 1 @@ -25808,6 +26470,7 @@ dir = 9 }, /obj/structure/cable, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/indoors/c_block/mining) "rlV" = ( @@ -25960,6 +26623,13 @@ dir = 1 }, /area/gelida/indoors/c_block/mining) +"rsf" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/gelida/outdoors/colony_streets/north_street) "rsg" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/structure/cable, @@ -25989,6 +26659,7 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 9 }, +/obj/effect/landmark/weed_node, /turf/open/floor/tile/dark2, /area/gelida/indoors/c_block/mining) "rsL" = ( @@ -26093,6 +26764,10 @@ dir = 1 }, /area/gelida/indoors/a_block/admin) +"rwy" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/gelida/outdoors/colony_streets/east_central_street) "rwW" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -26174,6 +26849,11 @@ }, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/outdoors/colony_streets/south_east_street) +"rzU" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitegreenfull2, +/area/gelida/indoors/b_block/bridge) "rAb" = ( /obj/item/weapon/gun/revolver/cmb, /obj/item/clothing/head/soft/sec, @@ -26229,7 +26909,7 @@ pixel_x = 7; pixel_y = -9 }, -/obj/structure/holohoop{ +/obj/structure/hoop{ dir = 4 }, /turf/open/floor/plating/ground/snow/layer0, @@ -26465,6 +27145,10 @@ dir = 5 }, /area/gelida/outdoors/colony_streets/north_street) +"rMs" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/gelida/outdoors/colony_streets/south_west_street) "rMv" = ( /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/snow/layer0, @@ -26552,6 +27236,7 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 5 }, +/obj/effect/landmark/weed_node, /turf/open/floor/plating, /area/gelida/indoors/c_block/mining) "rNB" = ( @@ -26596,6 +27281,11 @@ dir = 1 }, /area/gelida/indoors/a_block/admin) +"rPW" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/c_block/casino) "rQa" = ( /obj/effect/landmark/corpsespawner/security, /turf/open/floor/prison/darkbrown/full, @@ -26704,6 +27394,11 @@ /obj/item/shard, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/outdoors/colony_streets/south_west_street) +"rUg" = ( +/obj/effect/turf_decal/tile/full/black, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/gelida/powergen) "rUv" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 9 @@ -26757,6 +27452,10 @@ dir = 4 }, /area/gelida/indoors/a_block/dorms) +"rVW" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/gelida/outdoors/colony_streets/north_east_street) "rWh" = ( /obj/structure/prop/mainship/gelida/smallwire{ dir = 4 @@ -27075,6 +27774,11 @@ /obj/effect/ai_node, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/outdoors/colony_streets/east_central_street) +"sig" = ( +/obj/effect/spawner/random/engineering/wood, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/c_block/cargo) "sir" = ( /turf/open/floor/plating/ground/desertdam/asphalt/cement, /area/gelida/outdoors/colony_streets/north_west_street) @@ -27113,6 +27817,10 @@ dir = 1 }, /area/gelida/indoors/a_block/medical) +"sjU" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/plate, +/area/gelida/outdoors/colony_streets/central_streets) "sks" = ( /obj/effect/decal/cleanable/blood/gibs/xeno, /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -27255,6 +27963,7 @@ }, /area/gelida/indoors/a_block/dorms) "som" = ( +/obj/effect/landmark/weed_node, /turf/open/floor/prison{ dir = 4 }, @@ -27413,6 +28122,12 @@ }, /turf/open/floor/prison, /area/gelida/indoors/c_block/cargo) +"sto" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 4 + }, +/area/gelida/outdoors/colony_streets/south_east_street) "stq" = ( /obj/machinery/light, /turf/open/floor/prison/whitepurple/full{ @@ -27498,6 +28213,11 @@ /obj/item/tool/surgery/circular_saw, /turf/open/floor/prison/whitegreen/full, /area/gelida/indoors/a_block/medical) +"swg" = ( +/obj/effect/ai_node, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/ice, +/area/gelida/caves/west_caves) "swq" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -27521,6 +28241,7 @@ pixel_x = 2; pixel_y = 4 }, +/obj/effect/landmark/weed_node, /turf/open/floor/carpet, /area/gelida/indoors/c_block/casino) "sxh" = ( @@ -27689,6 +28410,10 @@ }, /turf/open/floor/plating/ground/desertdam/asphalt/edge/regular, /area/gelida/outdoors/colony_streets/south_east_street) +"sCz" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/gelida/caves/east_caves/garbledradio) "sCG" = ( /obj/structure/platform{ dir = 1 @@ -27720,6 +28445,12 @@ dir = 4 }, /area/gelida/indoors/a_block/dorm_north) +"sDe" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 10 + }, +/area/gelida/outdoors/colony_streets/south_west_street) "sDk" = ( /obj/effect/ai_node, /turf/open/floor/plating/platebot, @@ -27767,6 +28498,7 @@ /area/gelida/indoors/a_block/kitchen) "sEM" = ( /obj/item/shard, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/indoors/c_block/casino) "sEZ" = ( @@ -28301,6 +29033,7 @@ /area/gelida/outdoors/colony_streets/south_west_street) "sWy" = ( /obj/effect/landmark/excavation_site_spawner, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/indoors/c_block/casino) "sWW" = ( @@ -28311,6 +29044,11 @@ /obj/effect/spawner/random/misc/structure/chair_or_metal, /turf/open/floor/prison, /area/gelida/indoors/c_block/mining) +"sXn" = ( +/obj/structure/prop/mainship/gelida/smallwire, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/gelida/outdoors/colony_streets/south_east_street) "sXp" = ( /obj/effect/spawner/random/engineering/wood, /turf/open/floor/prison, @@ -28338,6 +29076,10 @@ /obj/machinery/photocopier, /turf/open/floor/plating, /area/gelida/indoors/c_block/cargo) +"sYL" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkbrown/full, +/area/gelida/indoors/c_block/garage) "sYN" = ( /obj/structure/platform{ dir = 8 @@ -28414,6 +29156,7 @@ "taY" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/effect/spawner/random/engineering/wood, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/indoors/c_block/mining) "taZ" = ( @@ -28897,6 +29640,13 @@ }, /turf/open/floor/plating, /area/gelida/indoors/a_block/dorm_north) +"tsA" = ( +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 1 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer0, +/area/gelida/outdoors/colony_streets/central_streets) "tsI" = ( /obj/effect/spawner/random/engineering/wood, /turf/open/floor/plating/ground/snow/layer0, @@ -29279,6 +30029,7 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 }, +/obj/effect/landmark/weed_node, /turf/open/floor/prison/green/full{ dir = 4 }, @@ -29315,14 +30066,14 @@ /obj/machinery/door/airlock/mainship/generic, /turf/open/floor/mainship/black/full, /area/gelida/outdoors/colony_streets/central_streets) -"tJg" = ( -/obj/effect/landmark/xeno_tunnel_spawn, -/turf/open/floor/prison/sterilewhite/full, -/area/gelida/indoors/a_block/medical) "tJs" = ( /obj/effect/ai_node, /turf/open/floor/plating/ground/ice, /area/gelida/caves/central_caves/garbledradio) +"tJL" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/gelida/outdoors/colony_streets/south_west_street) "tJZ" = ( /obj/structure/table/mainship, /turf/open/floor/prison/blue{ @@ -29330,7 +30081,7 @@ }, /area/gelida/indoors/a_block/admin) "tKl" = ( -/obj/item/trash/barcardine, +/obj/item/trash/barcaridine, /turf/open/floor/prison, /area/gelida/indoors/a_block/hallway) "tKn" = ( @@ -29510,6 +30261,7 @@ pixel_x = -6; pixel_y = 19 }, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/indoors/c_block/casino) "tRD" = ( @@ -29551,6 +30303,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/effect/landmark/weed_node, /turf/open/floor/prison/whitepurple/full{ dir = 4 }, @@ -29773,6 +30526,11 @@ /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/ice, /area/gelida/caves/central_caves/garbledradio) +"ubd" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular, +/area/gelida/outdoors/colony_streets/south_west_street) "ubE" = ( /obj/machinery/light{ dir = 1; @@ -29981,6 +30739,10 @@ }, /turf/open/floor/prison/whitegreen/full, /area/gelida/indoors/a_block/fitness) +"uiS" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/stripesquare, +/area/gelida/indoors/b_block/bridge) "ujh" = ( /turf/open/floor/plating/ground/snow/layer1, /area/gelida/outdoors/colony_streets/north_street) @@ -30086,6 +30848,11 @@ }, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/outdoors/colony_streets/south_east_street) +"umB" = ( +/obj/effect/ai_node, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/gelida/powergen) "umE" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -30111,6 +30878,7 @@ dir = 4 }, /obj/effect/turf_decal/warning_stripes/thin, +/obj/effect/landmark/weed_node, /turf/open/floor/prison/plate, /area/gelida/outdoors/colony_streets/south_street) "unA" = ( @@ -30263,6 +31031,10 @@ /obj/structure/cable, /turf/open/floor/plating/plating_catwalk/prison, /area/gelida/indoors/b_block/bridge) +"uvL" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/gelida/caves/west_caves/garbledradio) "uvW" = ( /obj/structure/flora/bush{ pixel_y = 9 @@ -30309,6 +31081,12 @@ /obj/effect/spawner/random/engineering/structure/tank/waterweighted, /turf/open/floor/prison/darkbrown/full, /area/gelida/indoors/c_block/cargo) +"uyC" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/green/full{ + dir = 4 + }, +/area/gelida/indoors/b_block/bridge) "uyD" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1 @@ -30432,6 +31210,14 @@ /obj/machinery/light, /turf/open/floor/plating/heatinggrate, /area/gelida/indoors/b_block/bridge) +"uCz" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/c_block/casino) "uDa" = ( /obj/structure/table/mainship, /obj/structure/bed/chair{ @@ -30494,6 +31280,11 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor/mainship/stripesquare, /area/gelida/indoors/a_block/security) +"uEJ" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/c_block/cargo) "uFd" = ( /obj/structure/table/mainship, /obj/effect/spawner/random/engineering/radio/highspawn{ @@ -30735,6 +31526,13 @@ /obj/effect/ai_node, /turf/open/floor/plating/ground/ice, /area/gelida/caves/east_caves) +"uLZ" = ( +/obj/structure/platform_decoration{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular, +/area/gelida/outdoors/colony_streets/central_streets) "uMq" = ( /obj/effect/landmark/excavation_site_spawner, /turf/open/floor/prison, @@ -30824,7 +31622,7 @@ /turf/open/floor/prison/darkbrown/full, /area/gelida/landing_zone_1) "uPv" = ( -/obj/item/trash/barcardine, +/obj/item/trash/barcaridine, /turf/open/floor/prison/blue, /area/gelida/indoors/a_block/hallway) "uPN" = ( @@ -31182,6 +31980,15 @@ /obj/item/lightstick/red/anchored, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/outdoors/colony_streets/north_west_street) +"vba" = ( +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/whitepurple/full{ + dir = 4 + }, +/area/gelida/indoors/a_block/dorms) "vby" = ( /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/snow/layer0, @@ -31240,6 +32047,7 @@ dir = 9 }, /obj/structure/cable, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/indoors/b_block/bridge) "veR" = ( @@ -31324,6 +32132,13 @@ dir = 4 }, /area/gelida/indoors/a_block/dorms) +"vgQ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/c_block/cargo) "vgZ" = ( /obj/structure/platform{ dir = 9 @@ -31334,6 +32149,7 @@ /area/gelida/landing_zone_forecon/landing_zone_4) "vhu" = ( /obj/structure/cable, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/snow/layer2, /area/gelida/outdoors/colony_streets/south_west_street) "vhC" = ( @@ -31356,6 +32172,10 @@ /obj/effect/spawner/random/engineering/metal, /turf/open/floor/mainship/stripesquare, /area/gelida/indoors/c_block/mining) +"vhW" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/tile/dark2, +/area/gelida/indoors/c_block/mining) "vib" = ( /obj/item/clothing/mask/facehugger/dead{ desc = "It has some sort of a tube at the end of its tail. What the hell is this thing?"; @@ -31558,10 +32378,6 @@ }, /turf/open/floor/mainship/stripesquare, /area/gelida/indoors/a_block/security) -"vqi" = ( -/obj/effect/landmark/lv624/fog_blocker/xeno_spawn, -/turf/closed/mineral/smooth/darkfrostwall, -/area/gelida/outdoors/rock) "vqz" = ( /obj/effect/spawner/random/engineering/structure/tank/waterweighted, /obj/structure/platform_decoration{ @@ -31656,6 +32472,11 @@ /obj/effect/spawner/random/misc/structure/curtain/medical, /turf/open/floor/prison/sterilewhite, /area/gelida/indoors/a_block/medical) +"vtd" = ( +/obj/item/lightstick/red/anchored, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/gelida/outdoors/colony_streets/east_central_street) "vtl" = ( /obj/structure/closet/crate/trashcart, /obj/item/trash/pistachios, @@ -31696,6 +32517,11 @@ }, /turf/open/floor/prison, /area/gelida/indoors/c_block/mining) +"vut" = ( +/obj/effect/ai_node, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/gelida/outdoors/colony_streets/east_central_street) "vuv" = ( /obj/structure/table/mainship, /obj/machinery/cic_maptable, @@ -31761,6 +32587,7 @@ /obj/structure/platform_decoration{ dir = 8 }, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/desertdam/asphalt/cement, /area/gelida/outdoors/colony_streets/north_west_street) "vwV" = ( @@ -32192,6 +33019,11 @@ }, /turf/open/floor/prison, /area/gelida/indoors/a_block/garden) +"vMi" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/plating_catwalk/prison, +/area/gelida/indoors/c_block/bridge) "vMn" = ( /obj/structure/bed/stool{ buckling_y = 14; @@ -32239,6 +33071,7 @@ "vNA" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden, /obj/structure/cable, +/obj/effect/landmark/weed_node, /turf/open/floor/prison/whitegreen/full, /area/gelida/indoors/a_block/fitness) "vNT" = ( @@ -32363,6 +33196,10 @@ dir = 1 }, /area/gelida/indoors/a_block/admin) +"vTg" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/c_block/casino) "vTp" = ( /obj/effect/spawner/random/misc/structure/supplycrate, /obj/structure/platform{ @@ -32468,6 +33305,10 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor/plating/plating_catwalk/prison, /area/gelida/indoors/c_block/mining) +"vWZ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/gelida/outdoors/colony_streets/central_streets) "vXc" = ( /obj/machinery/camera/autoname/lz_camera, /turf/open/floor/plating, @@ -32515,6 +33356,10 @@ dir = 1 }, /area/gelida/outdoors/colony_streets/east_central_street) +"vZQ" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/gelida/outdoors/colony_streets/south_east_street) "waf" = ( /obj/structure/window/framed/colony, /obj/structure/platform, @@ -32727,6 +33572,7 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 }, +/obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/indoors/a_block/dorms) "wha" = ( @@ -32842,6 +33688,12 @@ /obj/effect/ai_node, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/outdoors/colony_streets/north_west_street) +"wlc" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 4 + }, +/area/gelida/outdoors/colony_streets/central_streets) "wlw" = ( /obj/machinery/light, /obj/effect/spawner/random/machinery/disposal, @@ -32997,6 +33849,12 @@ /obj/item/pipe, /turf/open/floor/plating, /area/gelida/indoors/c_block/mining) +"wrL" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 1 + }, +/area/gelida/outdoors/colony_streets/south_east_street) "wrM" = ( /obj/effect/decal/cleanable/blood, /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -33280,6 +34138,10 @@ }, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/outdoors/colony_streets/central_streets) +"wBB" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/c_block/garage) "wBH" = ( /obj/item/tool/wet_sign{ pixel_x = -11; @@ -33301,6 +34163,7 @@ "wCg" = ( /obj/item/stack/sandbags_empty/half, /obj/effect/ai_node, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/plating_catwalk/prison, /area/gelida/indoors/b_block/bridge) "wCy" = ( @@ -33416,6 +34279,13 @@ }, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/outdoors/colony_streets/north_street) +"wHc" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating, +/area/gelida/indoors/c_block/cargo) "wHB" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 6 @@ -33809,6 +34679,7 @@ pixel_x = -1; pixel_y = 5 }, +/obj/effect/landmark/weed_node, /turf/open/floor/carpet, /area/gelida/indoors/c_block/garage) "wWA" = ( @@ -33819,6 +34690,12 @@ /obj/effect/landmark/corpsespawner/colonist, /turf/open/floor/wood, /area/gelida/indoors/a_block/executive) +"wWV" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 5 + }, +/area/gelida/outdoors/colony_streets/north_street) "wXv" = ( /obj/structure/bed/chair/comfy{ dir = 4 @@ -33847,6 +34724,7 @@ dir = 6 }, /obj/effect/ai_node, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/snow/layer1, /area/gelida/outdoors/colony_streets/south_east_street) "wYJ" = ( @@ -34107,6 +34985,7 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 10 }, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/snow/layer1, /area/gelida/outdoors/colony_streets/central_streets) "xmh" = ( @@ -34328,6 +35207,12 @@ /obj/effect/spawner/random/engineering/metal, /turf/open/floor/prison, /area/gelida/indoors/a_block/admin) +"xtH" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ + dir = 8 + }, +/area/gelida/outdoors/colony_streets/south_east_street) "xtM" = ( /obj/structure/cargo_container/red, /turf/open/floor/prison/darkred/full, @@ -34373,6 +35258,11 @@ "xvz" = ( /turf/closed/shuttle/dropship2/enginetwo, /area/gelida/landing_zone_forecon/UD6_Tornado) +"xvA" = ( +/obj/effect/landmark/start/job/xenomorph, +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/black/full, +/area/gelida/powergen) "xvC" = ( /turf/closed/wall, /area/gelida/indoors/c_block/casino) @@ -34422,6 +35312,14 @@ /obj/effect/ai_node, /turf/open/floor/plating, /area/shuttle/drop1/gelida) +"xxD" = ( +/obj/effect/turf_decal/warning_stripes/thin, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/outdoors/colony_streets/south_west_street) "xxQ" = ( /obj/machinery/light{ dir = 8 @@ -34592,6 +35490,10 @@ }, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/outdoors/colony_streets/north_east_street) +"xDw" = ( +/obj/effect/landmark/xeno_tunnel_spawn, +/turf/open/floor/prison/plate, +/area/gelida/indoors/a_block/hallway) "xDF" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 1 @@ -34617,11 +35519,19 @@ }, /area/gelida/outdoors/colony_streets/central_streets) "xDW" = ( -/obj/structure/nuke_disk_candidate, +/obj/structure/nuke_disk_candidate{ + set_associations = list("set1", "set3") + }, /turf/open/floor/prison/whitepurple/full{ dir = 4 }, /area/gelida/indoors/a_block/dorm_north) +"xEa" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison/darkpurple{ + dir = 4 + }, +/area/gelida/indoors/a_block/dorms) "xEe" = ( /obj/structure/cargo_container/ch_green{ dir = 1; @@ -34644,6 +35554,13 @@ /obj/effect/ai_node, /turf/open/floor/tile/yellow/patch, /area/gelida/indoors/a_block/corpo) +"xEx" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/c_block/mining) "xEF" = ( /obj/structure/window/reinforced{ dir = 1 @@ -34734,9 +35651,6 @@ /obj/effect/turf_decal/warning_stripes/stripedsquare/tile/border, /turf/open/floor/mainship/stripesquare, /area/gelida/indoors/b_block/hydro) -"xIt" = ( -/turf/closed/mineral/smooth/darkfrostwall, -/area/gelida/outdoors/rock) "xIu" = ( /obj/structure/rack/nometal, /obj/item/frame/table{ @@ -34772,8 +35686,16 @@ /obj/structure/platform{ dir = 4 }, +/obj/effect/landmark/weed_node, /turf/open/floor/prison/darkbrown/full, /area/gelida/indoors/c_block/garage) +"xIY" = ( +/obj/structure/barricade/wooden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/c_block/cargo) "xJa" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 9 @@ -34909,6 +35831,11 @@ }, /turf/open/floor/prison/whitegreenfull2, /area/gelida/indoors/b_block/hydro) +"xMn" = ( +/obj/effect/ai_node, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/gelida/outdoors/colony_streets/east_central_street) "xMw" = ( /obj/structure/platform_decoration{ dir = 4 @@ -35051,6 +35978,10 @@ /obj/structure/cable, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/outdoors/colony_streets/central_streets) +"xPx" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/snow/layer1, +/area/gelida/outdoors/colony_streets/north_west_street) "xPU" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 1 @@ -35082,6 +36013,10 @@ /obj/effect/landmark/weed_node, /turf/open/floor/prison, /area/gelida/indoors/a_block/kitchen) +"xQI" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/prison, +/area/gelida/indoors/c_block/mining) "xQR" = ( /obj/structure/prop/vehicle/crawler/destructible, /turf/open/floor/prison/darkred/full, @@ -35113,6 +36048,10 @@ }, /turf/open/floor/plating/ground/snow/layer0, /area/gelida/outdoors/colony_streets/north_west_street) +"xRp" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/desertdam/asphalt/cement, +/area/gelida/outdoors/colony_streets/south_street) "xRE" = ( /obj/machinery/floodlight/landing, /obj/structure/platform{ @@ -35285,6 +36224,7 @@ /area/gelida/indoors/a_block/corpo) "xWH" = ( /obj/structure/cable, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ dir = 6 }, @@ -35383,10 +36323,15 @@ dir = 10 }, /obj/effect/ai_node, +/obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/desertdam/asphalt/edge/regular{ dir = 1 }, /area/gelida/outdoors/colony_streets/east_central_street) +"yaO" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor/mainship/stripesquare, +/area/gelida/indoors/c_block/mining) "yaS" = ( /obj/structure/table/mainship, /turf/open/floor/prison, @@ -35554,9 +36499,6 @@ "yiB" = ( /turf/closed/wall, /area/gelida/cavestructuretwo) -"yjx" = ( -/turf/open/floor/plating/ground/snow/layer1, -/area/gelida/caves/central_caves) "yjB" = ( /obj/item/stack/rods, /obj/structure/window_frame/colony, @@ -35620,6 +36562,11 @@ }, /turf/open/floor/prison, /area/gelida/indoors/c_block/garage) +"yld" = ( +/obj/effect/landmark/excavation_site_spawner, +/obj/effect/landmark/weed_node, +/turf/open/floor/plating/ground/ice, +/area/gelida/caves/west_caves/garbledradio) "yly" = ( /obj/structure/table/mainship, /obj/structure/window/reinforced{ @@ -35869,310 +36816,310 @@ nsK "} (2,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -nsK -nsK -nsK -qbZ -qbZ -qbZ -nsK -nsK -nsK -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -ndb -nsK -"} -(3,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +nsK +nsK +nsK +qbZ +qbZ +qbZ +nsK +nsK +nsK +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +ndb +nsK +"} +(3,1,1) = {" +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ndb ndb ndb @@ -36313,89 +37260,89 @@ nsK "} (4,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ndb ndb ndb @@ -36535,88 +37482,88 @@ nsK "} (5,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS yiB yiB -xIt -xIt +cgS +cgS yiB yiB yiB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ndb ndb ndb @@ -36757,90 +37704,90 @@ nsK "} (6,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS yiB dII ewI -geP +nyI gBm gZL yiB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ndb ndb ndb @@ -36921,7 +37868,7 @@ gse lsi lsi lsi -fBJ +nmr fBJ fBJ xUF @@ -36979,11 +37926,11 @@ nsK "} (7,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS yiB cDx dKf @@ -36993,75 +37940,75 @@ geP aPS gZL yiB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ndb ndb ndb @@ -37201,10 +38148,10 @@ nsK "} (8,1,1) = {" cgS -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS yiB yiB cDx @@ -37216,73 +38163,73 @@ bgd hRV yiB yiB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS sPY sPY -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uew -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ndb ndb ndb @@ -37338,7 +38285,7 @@ fBJ fBJ fBJ fBJ -fBJ +nmr fBJ fBJ fBJ @@ -37423,9 +38370,9 @@ nsK "} (9,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS cmF bem iUh @@ -37439,72 +38386,72 @@ geP bua sUt ckC -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS sPY sPY agw -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS uew uew uew uew uew uew -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ndb ndb ndb @@ -37555,7 +38502,7 @@ fBJ fBJ fBJ fBJ -fBJ +nmr fBJ fBJ fBJ @@ -37645,8 +38592,8 @@ nsK "} (10,1,1) = {" cgS -xIt -xIt +cgS +cgS cmF cmF bjn @@ -37662,40 +38609,40 @@ iUh sUt jBU ckC -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS bOD sPY sPY @@ -37715,19 +38662,19 @@ uew uew uew uew -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ndb ndb ndb @@ -37787,7 +38734,7 @@ fBJ ddP ddP ddP -ddP +qbT ddP ddP ndb @@ -37867,8 +38814,8 @@ nsK "} (11,1,1) = {" cgS -xIt -xIt +cgS +cgS cmF cmF bjn @@ -37885,38 +38832,38 @@ jua ckC ckC cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS sPY sPY sPY @@ -37937,19 +38884,19 @@ pLC xvz qFN jFo -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ndb ndb ndb @@ -38032,7 +38979,7 @@ lsi ndb lsi fBJ -fBJ +nmr fBJ xUF ndb @@ -38089,8 +39036,8 @@ nsK "} (12,1,1) = {" cgS -xIt -xIt +cgS +cgS cmF cmF bjn @@ -38108,36 +39055,36 @@ dOs ckC dOs cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cJC -xIt -xIt -xIt +cgS +cgS +cgS sPY wJU sPY @@ -38159,18 +39106,18 @@ kUg pJc abp oqu -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ndb ndb ndb @@ -38311,7 +39258,7 @@ nsK "} (13,1,1) = {" cgS -xIt +cgS cmF cmF cmF @@ -38332,24 +39279,24 @@ cmF cmF cmF cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS hLP hLP qxI @@ -38381,17 +39328,17 @@ hFv gHC qqv niX -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uew -xIt -xIt -xIt +cgS +cgS +cgS uew -xIt +cgS ndb ndb ndb @@ -38447,7 +39394,7 @@ ddP bYd bYd ddP -ddP +qbT ddP ddP ddP @@ -38533,8 +39480,8 @@ nsK "} (14,1,1) = {" cgS -xIt -xIt +cgS +cgS cmF cmF bjn @@ -38556,20 +39503,20 @@ anV cmF cmF cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS qxI qxI qxI @@ -38604,10 +39551,10 @@ lYx xPd fJd uew -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS uew uew uew @@ -38664,7 +39611,7 @@ ddP ddP fBJ fBJ -fBJ +nmr fBJ ddP ddP @@ -38755,8 +39702,8 @@ nsK "} (15,1,1) = {" cgS -xIt -xIt +cgS +cgS cmF cmF bem @@ -38764,7 +39711,7 @@ iUh sZZ upW eOl -gqh +upW mSM res sZZ @@ -38780,16 +39727,16 @@ wpv cmF cmF cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS xjB qxI qxI @@ -38804,7 +39751,7 @@ qxI qxI rfq qHK -cJC +uvL sPY sPY dzU @@ -38827,12 +39774,12 @@ xPd uew uew uew -xIt -xIt +cgS +cgS uew uew eue -uew +kZp uew uew eue @@ -38896,12 +39843,12 @@ fBJ pKS fBJ fBJ +nmr fBJ fBJ fBJ fBJ -fBJ -fBJ +nmr fBJ fBJ fBJ @@ -38977,7 +39924,7 @@ nsK "} (16,1,1) = {" cgS -xIt +cgS cmF cmF cmF @@ -39002,15 +39949,15 @@ cmF cmF cmF cmF -cmF +wpv anV -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS hLP dag qxI @@ -39059,7 +40006,7 @@ uew mXU tzc tzc -tzc +xPx ndb ndb ndb @@ -39128,12 +40075,12 @@ oTB fBJ fBJ bYd -fBJ +nmr fBJ fBJ oTB fBJ -fBJ +nmr fBJ fBJ fBJ @@ -39143,7 +40090,7 @@ fBJ fBJ fBJ oTB -fBJ +nmr xUF ndb ndb @@ -39199,8 +40146,8 @@ nsK "} (17,1,1) = {" cgS -xIt -xIt +cgS +cgS cmF cmF bjn @@ -39227,10 +40174,10 @@ cmF cmF cmF anV -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS qxI qxI hLP @@ -39241,10 +40188,10 @@ xjB qxI qEf qxI +xjB qxI -qxI -xIt -xIt +cgS +cgS cJC rfq rfq @@ -39271,7 +40218,7 @@ iOv jDz uew uew -eue +rai uew tzc tzc @@ -39360,7 +40307,7 @@ qol azN fBJ fBJ -fBJ +nmr dYl fBJ fBJ @@ -39376,7 +40323,7 @@ ndb ndb ndb tqi -tqi +rMs nvd ndb ngP @@ -39421,10 +40368,10 @@ nsK "} (18,1,1) = {" cgS -xIt -xIt +cgS +cgS cmF -xIt +cgS yiB yiB aPS @@ -39436,7 +40383,7 @@ iUh aPS yiB yiB -xIt +cgS ckC dOs cmF @@ -39450,9 +40397,9 @@ cmF wpv cmF cmF -xIt -xIt -xIt +cgS +cgS +cgS qxI qxI qxI @@ -39460,18 +40407,18 @@ qxI qxI qxI qxI -cmF -uzr -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +qxI +qEf +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rih sPY sPY @@ -39556,7 +40503,7 @@ pKS vaN vaN vaN -vaN +rMv vaN vaN vaN @@ -39643,11 +40590,11 @@ nsK "} (19,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS yiB cQx dUu @@ -39657,10 +40604,10 @@ iUh hgq hRV yiB -xIt -xIt +cgS +cgS ckC -cmF +wpv dOs cmF cmF @@ -39673,7 +40620,7 @@ wpv cmF cmF uzr -cmF +wpv qxI amr qxI @@ -39682,18 +40629,18 @@ qxI qxI qxI amr -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS otX tWN sPY @@ -39865,11 +40812,11 @@ nsK "} (20,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS yiB yiB yiB @@ -39879,8 +40826,8 @@ gLz yiB yiB yiB -xIt -xIt +cgS +cgS cmF cmF cmF @@ -39898,24 +40845,24 @@ uzr cmF qxI qxI -ugu +yld qxI qxI -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS xbv rih sPY @@ -39959,22 +40906,22 @@ fHE vYo igL gRg -scv +nET tzc eue btm rLo -eue +rai eue eue sWa iiB -tzc +xPx vDL tYB uew uew -uew +kZp uew kTM bYC @@ -40087,11 +41034,11 @@ nsK "} (21,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS yiB lmN lUi @@ -40101,8 +41048,8 @@ sWh hsw kuB yiB -xIt -xIt +cgS +cgS cmF cmF cmF @@ -40122,25 +41069,25 @@ qxI qxI qxI qxI -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS otX -rih +tWN rih tzc tzc @@ -40218,7 +41165,7 @@ rpT mtI bYC uhx -jBv +iyl rzM rzM rzM @@ -40241,7 +41188,7 @@ ndb ndb ndb ndb -tqF +tJL tqF tqF ndb @@ -40262,7 +41209,7 @@ ndb ndb ndb tqi -tqi +rMs tqF qOV cNp @@ -40309,8 +41256,8 @@ nsK "} (22,1,1) = {" cgS -xIt -xIt +cgS +cgS yiB yiB yiB @@ -40324,7 +41271,7 @@ wgu fTM yiB yiB -xIt +cgS cmF cmF wpv @@ -40342,30 +41289,30 @@ pvC qxI qxI qxI -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS otX otX rih -xIt -xIt +cgS +cgS eue tzc eue @@ -40378,8 +41325,8 @@ ndb tzc tzc uew -xIt -xIt +cgS +cgS uew uew uew @@ -40531,22 +41478,22 @@ nsK "} (23,1,1) = {" cgS -xIt +cgS yiB yiB aHZ -sWh +apd upW res mSM -fwg +qTN upW sZZ upW -upW +aUs sWh yiB -xIt +cgS cmF cmF cmF @@ -40556,44 +41503,44 @@ wpv cmF cmF cmF -cmF +wpv cmF xXi cmF uzr cmF qxI -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rih rih -xIt -xIt -xIt +cgS +cgS +cgS tzc tzc tzc -xIt -xIt -xIt +cgS +cgS +cgS eue tzc oWT @@ -40601,7 +41548,7 @@ tzc uew uew uew -xIt +cgS uew kZp uew @@ -40612,7 +41559,7 @@ uew uew uew tzc -tzc +xPx eue iee sir @@ -40668,7 +41615,7 @@ nhz nhz ewj gJP -sXy +tsA cZq hoS vaN @@ -40753,7 +41700,7 @@ nsK "} (24,1,1) = {" cgS -xIt +cgS yiB aeZ aNR @@ -40785,38 +41732,38 @@ cmF uzr cmF qxI -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS rih otX -xIt -xIt -xIt -tzc +cgS +cgS +cgS tzc +xPx eue -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS tzc uew uew @@ -40853,7 +41800,7 @@ tzc btm xwq uew -uew +kZp uew lzg iiB @@ -40894,7 +41841,7 @@ sXy cZq hoS vaN -vaN +rMv cCQ kcN kcN @@ -40975,8 +41922,8 @@ nsK "} (25,1,1) = {" cgS -xIt -xIt +cgS +cgS sWh cZX upW @@ -41008,36 +41955,36 @@ uzr cmF qxI amr -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS qxI qxI xjB -xIt +cgS rih otX +tWN rih -rih -xIt +cgS tzc tzc eue tzc tzc -xIt -xIt +cgS +cgS eue tzc uew @@ -41070,7 +42017,7 @@ rMw rMw rMw muE -tzc +xPx uew wZC gVy @@ -41083,7 +42030,7 @@ uew uew uew uew -vaE +pOe uew kTM ueY @@ -41148,7 +42095,7 @@ tqi tqi tqi tqi -tqi +rMs ndb ndb tqi @@ -41197,8 +42144,8 @@ nsK "} (26,1,1) = {" cgS -xIt -xIt +cgS +cgS apd apA bAh @@ -41231,17 +42178,17 @@ qxI qxI qxI qxI -anV -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +hLP +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS qxI xjB qxI @@ -41286,7 +42233,7 @@ bDp fSp fSp fSp -nLA +iak vCO fSp fSp @@ -41330,7 +42277,7 @@ rpT ueY hoS bQE -ewj +sjU ewj wrn wrn @@ -41352,11 +42299,11 @@ jyY jph crF tqi +tJL tqF tqF tqF -tqF -tqi +rMs tqi tqi tqi @@ -41374,7 +42321,7 @@ tqF qOV tqF tqi -tqi +rMs ilJ nAJ wDw @@ -41419,8 +42366,8 @@ nsK "} (27,1,1) = {" cgS -xIt -xIt +cgS +cgS sZZ upW upW @@ -41456,12 +42403,12 @@ qxI qxI qxI qxI -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS hLP qxI qxI @@ -41470,7 +42417,7 @@ qxI qxI qxI qxI -rih +tWN otX rih oHr @@ -41505,7 +42452,7 @@ eue sIj eue eue -eue +rai eue eue eue @@ -41559,7 +42506,7 @@ qQf wcO cZq uhx -rzM +wlc ker rzM hdY @@ -41570,7 +42517,7 @@ ker qxa rqw jOV -kdQ +meB kdQ crF tqi @@ -41588,7 +42535,7 @@ tqi tqi mMH tqi -tqi +rMs tqi tqi tqF @@ -41641,7 +42588,7 @@ nsK "} (28,1,1) = {" cgS -xIt +cgS yiB atX axk @@ -41678,10 +42625,10 @@ hLP hLP qxI qxI -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS hLP qxI qxI @@ -41692,7 +42639,7 @@ qxI qxI xjB cJC -cmF +qxI rih otX rih @@ -41805,7 +42752,7 @@ tqF tqF tqi tqi -tqi +rMs tqi tqi tqi @@ -41863,10 +42810,10 @@ nsK "} (29,1,1) = {" cgS -xIt +cgS yiB yiB -sWh +apd bNN sZZ aUs @@ -41916,8 +42863,8 @@ qxI cJC rih rih -xIt -xIt +cgS +cgS eue tzc uew @@ -41965,7 +42912,7 @@ uew kZp uew eue -tzc +xPx tzc czt czt @@ -41991,7 +42938,7 @@ fyp tZi qkB rzM -rzM +wlc rzM rzM rzM @@ -42085,8 +43032,8 @@ nsK "} (30,1,1) = {" cgS -xIt -xIt +cgS +cgS yiB sWh cLZ @@ -42100,7 +43047,7 @@ dkT kuB yiB yiB -xIt +cgS cmF cmF cmF @@ -42135,11 +43082,11 @@ mPF qxI qxI cJC -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS bPS tzc uew @@ -42208,7 +43155,7 @@ wFM rWF hsu gVv -gVv +lXR gVv gVv qkB @@ -42225,7 +43172,7 @@ vaN vaN vaN iFR -vaN +rMv ndb ndb ndb @@ -42245,7 +43192,7 @@ qRn oUg pfk tqF -qOV +gsB tqF tqF tqi @@ -42260,7 +43207,7 @@ tqi tqi tqi tqi -tqi +rMs tqi tqi hkj @@ -42307,9 +43254,9 @@ nsK "} (31,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS yiB dhv yiB @@ -42321,8 +43268,8 @@ yiB yiB yiB yiB -xIt -xIt +cgS +cgS cmF cmF cmF @@ -42334,8 +43281,8 @@ cmF anV anV anV -xIt -xIt +cgS +cgS anV anV qxI @@ -42354,14 +43301,14 @@ qxI xjB qxI qxI -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc eue tzc @@ -42423,7 +43370,7 @@ sSY bDb bZn sqm -dNR +aor dNR vaN vaN @@ -42462,7 +43409,7 @@ ndb ndb kUd tqi -tqi +rMs tqi tqi tqi @@ -42474,11 +43421,11 @@ tqi tqi tqi tqi +rMs tqi tqi tqi -tqi -tqi +rMs tqi tqi tqi @@ -42529,23 +43476,23 @@ nsK "} (32,1,1) = {" cgS -xIt -xIt +cgS +cgS jBU cmF njJ ckC -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cmF dOs cmF @@ -42553,15 +43500,15 @@ cmF cmF cmF anV -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -cmF +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +xjB qxI qxI qxI @@ -42575,13 +43522,13 @@ qxI xjB qxI qxI -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc tzc tzc @@ -42656,7 +43603,7 @@ vaN kab gVv qkB -gHP +jam gHP gVv vaN @@ -42683,11 +43630,11 @@ ndb ndb ndb kUd +rMs tqi tqi tqi -tqi -tqF +tJL qOV tqF qOV @@ -42751,39 +43698,39 @@ nsK "} (33,1,1) = {" cgS -xIt -xIt +cgS +cgS ckC ckC njJ anV -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -cmF +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +wpv cmF cmF wpv cmF cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS qxI qxI qxI @@ -42794,15 +43741,15 @@ ugu qEf qxI qxI -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc tzc eue @@ -42871,7 +43818,7 @@ bim vaN vaN vaN -vaN +rMv vaN vaN vaN @@ -42914,7 +43861,7 @@ tqF nAJ tqi tqi -tqi +rMs tqi tqi tqi @@ -42973,40 +43920,40 @@ nsK "} (34,1,1) = {" cgS -xIt -xIt +cgS +cgS cmF arf njJ -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cmF cmF cmF cmF cmF cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS qxI qxI dao @@ -43014,19 +43961,19 @@ qxI xjB qxI qEf -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc -eue +rai eue eue eue @@ -43073,7 +44020,7 @@ pfs wKm scR tzc -eue +rai eue eue tzc @@ -43195,39 +44142,39 @@ nsK "} (35,1,1) = {" cgS -xIt -xIt +cgS +cgS cmF cmF eeT -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cmF cmF cmF cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS qxI qxI qxI @@ -43235,17 +44182,17 @@ qxI qxI qxI hLP -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc tzc eue @@ -43363,7 +44310,7 @@ tqi tqi tqi tqi -tqi +rMs tqi tqi tqi @@ -43371,7 +44318,7 @@ tqi tqF tqF tqF -pwy +bfO tqi ilJ npE @@ -43417,62 +44364,62 @@ nsK "} (36,1,1) = {" cgS -xIt +cgS anV cmF cmF eFS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -cmF +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cmF +wpv cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS qxI qxI xjB qxI qxI qxI -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc eue eue -eue +rai eue tzc uew @@ -43551,7 +44498,7 @@ sqm gVv gVv gVv -vaN +rMv rnb vaN vaN @@ -43571,7 +44518,7 @@ ndb ndb ndb kUd -tqi +rMs tqi tqF kNj @@ -43582,14 +44529,14 @@ tqi tqi tqi tqi +rMs tqi tqi tqi tqi tqi tqi -tqi -tqi +rMs nNF tqF tqF @@ -43639,37 +44586,37 @@ nsK "} (37,1,1) = {" cgS -xIt +cgS anV wpv dOs eeT -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cmF cmF cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS qxI qxI qxI @@ -43677,21 +44624,21 @@ qxI qxI qxI qxI -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc eue eue @@ -43796,11 +44743,11 @@ kUd tqi tqi tqF -qOV +gsB qOV tqF tqi -tqi +rMs tqi tqi tqi @@ -43861,59 +44808,59 @@ nsK "} (38,1,1) = {" cgS -xIt +cgS cmF cmF wpv eeT -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS dOs cmF cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS amr qxI qxI qxI qxI amr -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc tzc eue @@ -44083,60 +45030,60 @@ nsK "} (39,1,1) = {" cgS -xIt -xIt +cgS +cgS wpv cmF eeT cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cmF cmF cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS qxI qxI qxI qxI qxI qxI -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc tzc tzc @@ -44145,22 +45092,22 @@ uew uew vaE tzc -tzc -eue -eue -eue +xPx eue eue eue eue +rai eue eue eue eue +rai eue eue eue eue +rai eue tzc tzc @@ -44214,7 +45161,7 @@ mQd ghj lLt yfp -wQe +uLZ gHP vaN gHP @@ -44305,60 +45252,60 @@ nsK "} (40,1,1) = {" cgS -xIt -xIt +cgS +cgS cmF cmF eeT cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cmF cmF wpv cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS qxI qxI qxI xjB qxI qxI -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc bPS tzc @@ -44433,7 +45380,7 @@ kwo qGN qGN ghj -ylS +uMD odg pkK hoS @@ -44469,17 +45416,17 @@ tqi tqi tqi tqi -tqi +rMs tqi qRn oUg -ada +xxD tqi tqi tqi tqF tqF -tqF +tJL qOV qOV ndb @@ -44527,61 +45474,61 @@ nsK "} (41,1,1) = {" cgS -xIt -xIt +cgS +cgS cmF cmF eeT cmF uzr -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cmF cmF cmF cmF cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS qxI qxI qxI qxI qxI -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc tzc uew @@ -44652,7 +45599,7 @@ gyo uxt gyo iff -ghj +vIE ghj ghj iff @@ -44685,7 +45632,7 @@ ckU tqi tqi tqi -tqF +tJL tqF tqi tqi @@ -44749,70 +45696,70 @@ nsK "} (42,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS cmF eeT cmF -uzr +gNS cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS cmF cmF wpv cmF cmF cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -raa +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS qxI xjB qxI qxI -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -tzc +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc +xPx uew uew uew vaE uew tzc -tzc +xPx tzc eue tzc @@ -44911,6 +45858,7 @@ tqi tqF tqF tqi +rMs tqi tqi tqi @@ -44919,8 +45867,7 @@ tqi tqi tqi tqi -tqi -tqi +rMs tqi tqF qOV @@ -44971,61 +45918,61 @@ nsK "} (43,1,1) = {" cgS -xIt -xIt -xIt -dOs +cgS +cgS +cgS +swg eeT eeT fEZ gKU -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS cmF cmF cmF cmF cmF cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS qxI qxI qxI qxI qxI -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc tzc uew @@ -45193,61 +46140,61 @@ nsK "} (44,1,1) = {" cgS -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS cmF cmF uzr eeT cmF -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS cmF wpv cmF cmF cmF cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS qxI qxI qxI xjB qxI -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS eue uew kZp @@ -45259,16 +46206,16 @@ sSY sSY sSY sSY -kcw -sSY +mxd sSY sSY sSY +glO sSY pfs sSY sSY -sSY +glO sSY sSY scR @@ -45324,7 +46271,7 @@ pBL gyo ogi yfp -hoS +lvq gVv gVv vaN @@ -45359,7 +46306,7 @@ tqF tqi tqi tqi -tqi +rMs tqi tqi tqi @@ -45415,61 +46362,61 @@ nsK "} (45,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS cmF pvC eeT cmF cmF -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS dOs cmF dOs cmF wpv cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS qxI qxI qxI qxI qxI -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew uew @@ -45572,11 +46519,11 @@ gdv tqi tqi tqF -tqF +tJL qOV qOV tqF -tqi +rMs tqi tqi tqi @@ -45590,7 +46537,7 @@ tqi tqF tqF nNF -tqi +rMs tqi ndb nvd @@ -45637,36 +46584,36 @@ nsK "} (46,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS cmF uzr eeT dOs cmF cmF -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS cmF cmF fyL wpv cmF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS qxI qxI xjB @@ -45674,24 +46621,24 @@ qxI qxI hLP hLP -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew esd @@ -45752,7 +46699,7 @@ ghj raW yfp yfp -tkC +oDb rcO yfp tkC @@ -45798,7 +46745,7 @@ tqF qOV qOV tqi -tqi +rMs tqi tqi tqF @@ -45859,61 +46806,61 @@ nsK "} (47,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS uzr gKU wpv cmF wpv -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF uGF loD -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz kNR cYz cYz cYz cYz -cYz +ubb cYz tJs -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc uew uew @@ -45996,7 +46943,7 @@ eVG gHP aeE gHP -gHP +jam gHP gVv gVv @@ -46028,8 +46975,10 @@ ndb qOV tqF tqi +rMs tqi tqi +rMs tqi tqi tqi @@ -46042,9 +46991,7 @@ tqi tqi tqi tqi -tqi -tqi -tqi +rMs tqi tqi tqF @@ -46054,7 +47001,7 @@ pwy tqi tqi jqs -vYQ +dcM vYQ vYQ vYQ @@ -46081,35 +47028,35 @@ nsK "} (48,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS qzH uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS uGF gfl uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz cYz @@ -46121,22 +47068,22 @@ cYz cYz cYz cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS kZp kZp uew @@ -46214,7 +47161,7 @@ xLa yfp hmy gVv -uky +hma gHP aeE gVv @@ -46261,7 +47208,7 @@ tqi tqi tqi tqi -tqi +rMs tqi tqi rTb @@ -46271,9 +47218,8 @@ tqi tqi ndb ndb +tJL tqF -tqF -tqi tqi tqi tqi @@ -46285,6 +47231,7 @@ tqi tqi tqi tqi +rMs tqi tqi vYQ @@ -46292,7 +47239,7 @@ tqi tqi tqi tqi -tqi +rMs ndb ndb ndb @@ -46303,40 +47250,40 @@ nsK "} (49,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS qzH uGF gfl uGF -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uGF uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz cYz cYz -xIt +cgS gkC cYz cYz @@ -46344,21 +47291,21 @@ cYz cYz cYz cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew uew @@ -46392,7 +47339,7 @@ vQJ eeK jHT jHT -ubL +vQJ mRJ odg sok @@ -46432,7 +47379,7 @@ veR veR eOo sZF -odg +xlV gwY adP gVv @@ -46443,7 +47390,7 @@ gVv gVv vaN tix -uhx +vWZ vpI vpI vVd @@ -46477,7 +47424,7 @@ tqi tqi tqi tqi -mMH +pHa tqi tqi nNF @@ -46502,7 +47449,7 @@ tqi tqi tqi tqi -tqi +rMs tqi tqi tqi @@ -46525,62 +47472,62 @@ nsK "} (50,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS qzH uGF uGF uGF -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS uGF uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz ubb cYz cYz ubb -xIt -xIt +cgS +cgS cYz cYz ubb cYz dIF cYz -cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +ubb +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS kZp iiB uew @@ -46650,7 +47597,7 @@ jXZ jXZ bEv jXZ -jXZ +xEa qGN jrU xAf @@ -46681,7 +47628,7 @@ gdv tqi mMH tqi -tqi +rMs tqi tqi tqi @@ -46713,7 +47660,7 @@ tqi tqi tqi tqi -tqi +rMs ndb qOV tqi @@ -46732,7 +47679,7 @@ tqi tqi tqi vYQ -tqi +rMs tqi tqi tqi @@ -46747,62 +47694,62 @@ nsK "} (51,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS loD qzH gfl uGF uGF -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS xEg uGF gfl xEg -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz cYz cYz cYz -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS cYz cYz cYz cYz cYz cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew uew @@ -46899,7 +47846,7 @@ vpI vpI vpI jph -gdv +ubd jqs tqi tqi @@ -46908,7 +47855,7 @@ tqi tqi tqi tqi -tqi +rMs tqi tqi tqi @@ -46916,6 +47863,7 @@ tqF tqF ndb tqi +rMs tqi tqi tqi @@ -46928,8 +47876,7 @@ tqi tqi tqi tqi -tqi -tqi +rMs tqi tqi tqi @@ -46951,7 +47898,7 @@ tqi tqi tqi mMH -tqi +rMs tqi vYQ tqi @@ -46969,62 +47916,62 @@ nsK "} (52,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS loD qzH uGF uGF gfl -xIt -xIt -xIt +cgS +cgS +cgS loD gfl uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz ubb cYz cYz -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS tJs cYz cYz cYz cYz tJs -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew uew @@ -47147,7 +48094,7 @@ tqi tqi tqi tqi -tqi +rMs tqi tqi tqi @@ -47163,13 +48110,13 @@ tqi tqi tqi tqi -tqi +rMs tqi tqF tqi tqi tqi -tqi +rMs tqi tqi tqi @@ -47191,62 +48138,62 @@ nsK "} (53,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS loD qzH asP uGF uGF -xIt -xIt -xIt +cgS +cgS +cgS loD uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz cYz cYz cYz -xIt -xIt -xIt -xIt -xIt -vqi +cgS +cgS +cgS +cgS +cgS +hsE oHy oHy eVB oHy -qTf -qTf -qTf -vqi -vqi -vqi -vqi -vqi -vqi -xIt -xIt -xIt -xIt +oHy +oHy +pwZ +hsE +hsE +hsE +hsE +hsE +hsE +cgS +cgS +cgS +cgS uew kZp uew @@ -47362,6 +48309,7 @@ tqi tqi tqi tqi +rMs tqi tqi tqi @@ -47375,8 +48323,7 @@ tqi tqi tqi tqi -tqi -tqi +rMs tqi tqi tqi @@ -47413,45 +48360,45 @@ nsK "} (54,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS qzH uGF uGF uGF -xIt -xIt -xIt +cgS +cgS +cgS uGF uGF uGF loD -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tJs cYz dIF tJs -xIt -xIt -xIt -xIt -xIt -xIt -vqi +cgS +cgS +cgS +cgS +cgS +cgS +hsE cYz cYz cYz @@ -47461,14 +48408,14 @@ cYz cYz cYz cYz -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS uew uew kZp @@ -47575,9 +48522,11 @@ tqi tqi tqi tqi +rMs tqi tqi tqi +rMs tqi tqi tqi @@ -47600,9 +48549,7 @@ tqi tqi tqi tqi -tqi -tqi -tqi +rMs wcb cek sJg @@ -47623,7 +48570,7 @@ rrl ndb ndb ndb -tqi +rMs tqi ndb ndb @@ -47635,45 +48582,45 @@ nsK "} (55,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS uGF qzH uGF uGF uGF uGF -xIt +cgS ntJ uGF gfl uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz cYz cYz -xIt -xIt -xIt -xIt -xIt -xIt -vqi +cgS +cgS +cgS +cgS +cgS +cgS +hsE cYz cYz gkC @@ -47684,13 +48631,13 @@ cYz gkC cYz cYz -xIt -xIt -vqi -xIt -xIt -xIt -xIt +cgS +cgS +hsE +cgS +cgS +cgS +cgS uew uew uew @@ -47717,7 +48664,7 @@ amJ vPO scv uew -tzc +xPx tzc tzc uew @@ -47759,7 +48706,7 @@ eyF iff odg yfp -sWl +vba jPy czh juG @@ -47792,7 +48739,7 @@ gdv tqF qOV tqi -tqi +rMs tqi tqi tqi @@ -47811,7 +48758,7 @@ tqi tqi nNF tqF -tqF +tJL tqi tqi tqi @@ -47828,17 +48775,17 @@ tqi qRn oUg ada -tqi +rMs tqi tqF qOV qOV -tqF -tqi +tJL tqi tqi tqi tqi +rMs tqi tqi rrl @@ -47857,13 +48804,13 @@ nsK "} (56,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS qzH uGF xEg @@ -47873,29 +48820,29 @@ uGF ntJ uGF xEg -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz ubb cYz cYz -xIt -xIt -xIt -xIt -xIt -xIt -vqi +cgS +cgS +cgS +cgS +cgS +cgS +hsE cYz cYz gkC @@ -47906,13 +48853,13 @@ cYz cYz cYz cYz -xIt -xIt -vqi -xIt -xIt -xIt -xIt +cgS +cgS +hsE +cgS +cgS +cgS +cgS kZp uew rSi @@ -48027,7 +48974,7 @@ tqi tqi tqi tqi -tqi +rMs tqi tqi mMH @@ -48038,7 +48985,7 @@ tqi tqi tqi tqi -tqF +tJL qOV qOV tqF @@ -48079,13 +49026,13 @@ nsK "} (57,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS qzH xEg uGF @@ -48094,31 +49041,31 @@ uGF uGF bFY uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS gkC cYz cYz cYz cYz cYz -xIt -xIt -xIt -xIt -xIt -vqi -xIt +cgS +cgS +cgS +cgS +cgS +hsE +cgS cYz cYz cYz @@ -48129,12 +49076,12 @@ cYz ubb cYz cYz -xIt -vqi -xIt -xIt -xIt -xIt +cgS +hsE +cgS +cgS +cgS +cgS uew uew kTM @@ -48240,7 +49187,7 @@ qHr qHr qHr qHr -ixM +sDe tqi tqi tqi @@ -48265,7 +49212,7 @@ qOV qOV qOV qOV -tqF +tJL tqi tqi tqi @@ -48301,46 +49248,46 @@ nsK "} (58,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS qzH qzH gfl uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz cYz cYz cYz cYz -xIt -xIt -xIt -xIt -xIt -vqi -xIt +cgS +cgS +cgS +cgS +cgS +hsE +cgS cYz ubb cYz @@ -48351,12 +49298,12 @@ hDd cYz cYz cYz -xIt -vqi -xIt -xIt -xIt -xIt +cgS +hsE +cgS +cgS +cgS +cgS uew iiB skK @@ -48423,7 +49370,7 @@ tTp juG sWl sWl -odg +xlV yfp pBL odg @@ -48476,7 +49423,7 @@ tqi tqi tqi tqi -tqi +rMs tqi tqi tqi @@ -48492,7 +49439,7 @@ tqi tqi tqi tqi -tqi +rMs tqi tqi tqF @@ -48503,7 +49450,7 @@ tqi tqi ndb ndb -tqi +rMs tqi tqi tqi @@ -48523,32 +49470,32 @@ nsK "} (59,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS qzH gfl uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz cYz @@ -48556,29 +49503,29 @@ ubb cYz ubb cYz -xIt -xIt -xIt -xIt -xIt -vqi -xIt +cgS +cgS +cgS +cgS +cgS +hsE +cgS cYz cYz cYz tJs cYz cYz -cYz +ubb cYz tJs cYz -xIt -vqi -xIt -xIt -xIt -xIt +cgS +hsE +cgS +cgS +cgS +cgS uew uew kTM @@ -48597,7 +49544,7 @@ sKa bqU xTa vPO -glJ +ams sKa fTS sKa @@ -48692,7 +49639,7 @@ tqi tqi tqi tqi -tqi +rMs tqF tqF qOV @@ -48719,7 +49666,7 @@ tqi tqi tqF qOV -tqF +tJL tqi tqi tqi @@ -48734,7 +49681,7 @@ tqi tqi tqi tqi -tqi +rMs tqi ndb ndb @@ -48745,32 +49692,32 @@ nsK "} (60,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS qzH uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz tJs @@ -48778,14 +49725,14 @@ cYz cYz cYz cYz -xIt -xIt -xIt -xIt -xIt -vqi -xIt -xIt +cgS +cgS +cgS +cgS +cgS +hsE +cgS +cgS cYz cYz cYz @@ -48798,11 +49745,11 @@ cYz cYz aQR gkC -xIt -xIt +cgS +cgS eue tzc -uew +kZp kTM ieD edm @@ -48923,7 +49870,7 @@ tqF tqi tqi tqi -tqi +rMs tqi tqi tqi @@ -48951,7 +49898,7 @@ tqi tqi tqi tqi -vYQ +dcM tqi tqi tqi @@ -48967,48 +49914,48 @@ nsK "} (61,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uGF qzH uGF uGF uGF -xIt -xIt -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -xIt +cgS +cgS +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +cgS cYz cYz cYz cYz cYz cYz -xIt -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS cYz cYz cYz @@ -49120,7 +50067,7 @@ mzo vpI vpI uhx -vBz +jFY iuJ hmw hLv @@ -49131,7 +50078,7 @@ hgb crF tqi tqi -wcb +fPi cek sJg tqi @@ -49139,7 +50086,7 @@ tqi tqi tqi tqi -tqi +rMs qOV tqF tqi @@ -49150,7 +50097,7 @@ tqi tqi tqi tqi -tqi +rMs tqi tqi tqi @@ -49168,7 +50115,7 @@ tqi tqi tqi pwy -tqi +rMs tqi tqi tqi @@ -49189,20 +50136,20 @@ nsK "} (62,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uGF qzH uGF uGF uGF -xIt -xIt -vqi -xIt +cgS +cgS +hsE +cgS cqM fPM cqM @@ -49212,11 +50159,11 @@ cqM cqM fPM fPM -xIt -xIt -vqi -xIt -xIt +cgS +cgS +hsE +cgS +cgS cYz cYz ubb @@ -49224,16 +50171,16 @@ cYz cYz cYz cYz -xIt -xIt -xIt -vqi -xIt -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS +cgS gkC cYz -cYz +ubb cYz cYz cYz @@ -49243,7 +50190,7 @@ ubb oHy ubb cYz -yjx +bcB tzc eue tzc @@ -49347,11 +50294,11 @@ iuJ tPp bRS jlx -lNq +oGN tPp hgb crF -tqi +rMs tqi qRn oUg @@ -49361,7 +50308,7 @@ tqi tqi tqi tqi -tqF +tJL qOV tqF tqi @@ -49377,12 +50324,12 @@ tqi tqi tqi tqi -tqi +rMs mMH tqi tqi tqi -tqF +tJL wKz qOV qOV @@ -49411,19 +50358,19 @@ nsK "} (63,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uGF qzH uGF xEg -xIt -xIt -xIt -vqi +cgS +cgS +cgS +hsE cqM cqM fPM @@ -49437,8 +50384,8 @@ fPM cqM fPM hXS -xIt -xIt +cgS +cgS cYz ubb cYz @@ -49447,12 +50394,12 @@ cYz ubb cYz cYz -xIt -xIt -vqi -xIt -xIt -xIt +cgS +cgS +hsE +cgS +cgS +cgS ubb cYz cYz @@ -49465,8 +50412,8 @@ cYz oHy cYz cYz -yjx -eue +bcB +rai eue tzc rZQ @@ -49491,7 +50438,7 @@ vPO kiM kiM vPO -glJ +ams sKa vWC sKa @@ -49555,7 +50502,7 @@ vpI hRU dUC vpI -uhx +vWZ uiF vpI uhx @@ -49579,7 +50526,7 @@ tqi tqi tqi tqi -tqi +rMs tqi tqF qOV @@ -49633,17 +50580,17 @@ nsK "} (64,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uGF qzH asP uGF -xIt -xIt +cgS +cgS cqM hXI cqM @@ -49671,10 +50618,10 @@ cYz cYz cYz cYz -vqi -xIt -xIt -xIt +hsE +cgS +cgS +cgS cYz cYz cYz @@ -49683,7 +50630,7 @@ gkC cYz ubb cYz -xIt +cgS oHy cYz ubb @@ -49782,7 +50729,7 @@ lzV vBz vBz lzV -vBz +jFY lzV iuJ iuJ @@ -49809,7 +50756,7 @@ tqF tqi dqv nAi -sWt +fko tqi tqi tqi @@ -49830,7 +50777,7 @@ tqF qOV qOV qOV -qOV +gsB tqF tqF tqF @@ -49843,7 +50790,7 @@ rcx tqF tqi ndb -tqi +rMs tqi ndb ndb @@ -49855,17 +50802,17 @@ nsK "} (65,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS xEg uGF uGF fZP uGF -xIt -xIt -xIt +cgS +cgS +cgS cqM hXS egm @@ -49894,21 +50841,21 @@ cYz cYz ubb nue -vqi -vqi -qTf +hsE +hsE oHy -nue oHy +nue oHy +pwZ oHy oHy nue -vqi -vqi -vqi -xIt -xIt +hsE +hsE +hsE +cgS +cgS eue tzc mXU @@ -49995,7 +50942,7 @@ vaN qOH vaN cZq -uhx +vWZ iuJ gtp iuJ @@ -50020,7 +50967,7 @@ crF tqi tqi tqi -tqi +rMs mMH tqi tqi @@ -50047,7 +50994,7 @@ tqi tqi tqi tqF -tqF +tJL tqi tqF tqF @@ -50077,17 +51024,17 @@ nsK "} (66,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS qzH qzH qzH qzH -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS cqM hXI dwS @@ -50108,9 +51055,9 @@ fPM pxr ubb cYz -beU -xIt -xIt +cgS +cgS +cgS cYz ubb cYz @@ -50125,12 +51072,12 @@ cYz cYz cYz cYz -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS eue eue tzc @@ -50239,7 +51186,7 @@ bRS lNq wuC crF -tqi +rMs tqi tqi tqi @@ -50258,7 +51205,7 @@ tqi tqi wUu qHr -qHr +etW qHr qHr qHr @@ -50278,7 +51225,7 @@ tqF tqi tqi tqi -tqi +rMs wUu qHr qHr @@ -50299,17 +51246,17 @@ nsK "} (67,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF qzH gfl uGF -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS fPM hXS cqM @@ -50326,14 +51273,14 @@ mJj fPM ivx cqM -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz ubb cYz @@ -50346,15 +51293,15 @@ tJs cYz cYz cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -eue +cgS +cgS +cgS +cgS +cgS +cgS +cgS eue +rai tzc sWa tXO @@ -50468,7 +51415,7 @@ tqi tqi tqi tqi -tqi +rMs tqi tqi qOV @@ -50485,7 +51432,7 @@ fsy fsy jTv jTv -jph +acQ ixM tqi mMH @@ -50521,18 +51468,18 @@ nsK "} (68,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF qzH uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS hXS gVM cqM @@ -50549,15 +51496,15 @@ fPM ivx cqM cqM -xIt -xIt +cgS +cgS cqM -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz cYz @@ -50567,14 +51514,14 @@ cYz cQd cYz cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS eue eue eue @@ -50674,7 +51621,7 @@ aMT hgb tPp lNq -tPp +flZ kUF eyO wxm @@ -50695,7 +51642,7 @@ tqi tqi tqi tqi -tqi +rMs tqi tqi wUu @@ -50717,7 +51664,7 @@ tqi tqi mMH tqi -tqi +rMs tqi tqi tqi @@ -50743,17 +51690,17 @@ nsK "} (69,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF qzH uGF -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS iqm igB ivx @@ -50772,15 +51719,15 @@ oBs iqm iqm iqm -xIt +cgS etT cqM -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS tJs cYz ubb @@ -50788,18 +51735,18 @@ tJs cYz cYz cYz -cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -eue +ubb +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS eue +rai sWa kTM ieD @@ -50908,7 +51855,7 @@ iuJ iuJ iuJ iuJ -jph +acQ qHr qHr qHr @@ -50924,7 +51871,7 @@ jph jTv jTv hnW -lEJ +nvH hNU hNU piP @@ -50934,7 +51881,7 @@ jTv jph qHr qHr -qHr +etW qHr qgs tto @@ -50965,17 +51912,17 @@ nsK "} (70,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF qzH uGF -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS iqm laA cqM @@ -50998,28 +51945,28 @@ laA cqM fPM cqM -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz cYz cYz cYz cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS eue tzc sWa @@ -51095,7 +52042,7 @@ fCe rzM fda gVv -gHP +jam gHP xKH gVv @@ -51187,16 +52134,16 @@ nsK "} (71,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF qzH uGF uGF -xIt -xIt +cgS +cgS fVm -xIt +cgS fPM iqm fPM @@ -51210,7 +52157,7 @@ jDu jDu jDu jDu -jUt +nll omp jDu oRO @@ -51220,28 +52167,28 @@ fPM fXJ elo cqM -xIt +cgS qaM -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS cYz tJs cYz cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzc tzc pOe @@ -51249,7 +52196,7 @@ kTM ieD cyK myR -sKa +bqU ams rBz dXY @@ -51372,7 +52319,7 @@ rne ner ner jGE -hNU +ivF piP oyd jTv @@ -51409,14 +52356,14 @@ nsK "} (72,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS qzH gfl uGF uGF -xIt +cgS cqM elo fPM @@ -51444,26 +52391,26 @@ cqM etT etT qaW -xIt -xIt -xIt -xIt -xIt -cYz -cYz -cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cYz +cYz +cYz +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS kZp tzc vaE @@ -51535,7 +52482,7 @@ lcI gVv gVv gVv -gVv +lXR gHP gHP gHP @@ -51547,7 +52494,7 @@ teS jLj vaN vaN -cZq +bGJ qWs lNq hLv @@ -51577,7 +52524,7 @@ xVO hWP oev rne -rne +iqR rne rne cDL @@ -51586,7 +52533,7 @@ rne rne rne rne -oev +rzU hWP gIL tqM @@ -51598,7 +52545,7 @@ hNU hNU gEa uco -lMU +ezJ jGE jGE jGE @@ -51607,7 +52554,7 @@ lMU lMU jGE jGE -jGE +qWx jGE lMU oMg @@ -51631,15 +52578,15 @@ nsK "} (73,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF qzH vwm uGF uGF cqM -elo +xvA bVQ fPM fPM @@ -51666,26 +52613,26 @@ fPM fXJ cqM cqM -xIt +cgS iqm iqm -xIt +cgS cYz cYz ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew vaE @@ -51804,7 +52751,7 @@ jIc jIc sZR sZR -jIc +ouu jIc jIc jIc @@ -51824,7 +52771,7 @@ hlt dcl dcl dcl -dcl +fOH fli hlt dcl @@ -51840,7 +52787,7 @@ ybV dym jGE hNU -piP +uyC uFK jTv ndb @@ -51853,7 +52800,7 @@ nsK "} (74,1,1) = {" cgS -xIt +cgS uGF uGF ewO @@ -51895,19 +52842,19 @@ nyC cYz cYz tJs -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew vaE @@ -52075,7 +53022,7 @@ nsK "} (75,1,1) = {" cgS -xIt +cgS uGF uGF qzH @@ -52117,18 +53064,18 @@ cfP pxr ubb cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew kZp @@ -52255,7 +53202,7 @@ cYV vJl jTv pMg -piP +uyC oeh cJX bUL @@ -52297,7 +53244,7 @@ nsK "} (76,1,1) = {" cgS -xIt +cgS uGF gfl qzH @@ -52330,26 +53277,26 @@ cqM elo fPM fPM -cqM +etT iqm iqm cqM fPM -xIt -xIt +cgS +cgS pxr ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew uew @@ -52503,7 +53450,7 @@ jTv imm piP lEm -hNU +ivF piP imm jTv @@ -52519,12 +53466,12 @@ nsK "} (77,1,1) = {" cgS -xIt +cgS uGF uGF qzH bMh -fPM +lBr dqw cqM egm @@ -52535,14 +53482,14 @@ loy iLi jKV jKV -jKW +rUg lAB jKW jKV mQj jKV cxU -jKW +rUg otr jKW oTT @@ -52558,19 +53505,19 @@ qih cqM icv iqm -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew uew @@ -52582,7 +53529,7 @@ uew uew uew tzc -eue +rai tzc kTM ieD @@ -52678,7 +53625,7 @@ iuJ uhx uhx uhx -uhx +vWZ iuJ noN noN @@ -52709,11 +53656,11 @@ uak cxg pNe trn +mpS sdU sdU sdU -sdU -trn +pHr sdU sdU vky @@ -52725,7 +53672,7 @@ jTv jTv iby bPq -piP +uyC xzQ jTv jTv @@ -52741,7 +53688,7 @@ nsK "} (78,1,1) = {" cgS -xIt +cgS uGF uGF qzH @@ -52749,8 +53696,8 @@ bVM cqM dwS eoI -xIt -eqE +cgS +umB cqM hNx cqM @@ -52760,7 +53707,7 @@ jKW jKW jKV lXy -jKW +rUg ndP jKW jKW @@ -52772,7 +53719,7 @@ lBr iqm cqM cqM -pLW +jSF cqM pXd qes @@ -52780,21 +53727,21 @@ qkR fPM cqM fPM -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew uew @@ -52891,7 +53838,7 @@ rmK iuJ iuJ uhx -rzM +wlc rzM rzM rzM @@ -52909,17 +53856,17 @@ pNe vky vky vky +mTX vky vky vky vky -vky -vky +mTX vky vky vky dvV -tGe +jCm noN oJi jTv @@ -52940,7 +53887,7 @@ sdU sdU vky vky -dvV +rfS dvV tGe noN @@ -52963,15 +53910,15 @@ nsK "} (79,1,1) = {" cgS -xIt +cgS uGF gfl aEE bVQ cqM fPM -xIt -xIt +cgS +cgS bdt dwS nyC @@ -52994,29 +53941,29 @@ dwS iqm cqM cqM -pLW -pLW +jSF +jSF pXd qhP qkR cqM lBr lBr -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew uew @@ -53090,7 +54037,7 @@ gHP gZo lAA xQV -iyQ +pSZ niS iyQ mzH @@ -53118,7 +54065,7 @@ vaN vaN vaN vaN -vaN +rMv vaN vaN vaN @@ -53126,7 +54073,7 @@ vaN krK sdU sdU -sdU +mpS vky vky vky @@ -53149,7 +54096,7 @@ ibV som gpR nkO -ced +giB sdU sdU bvn @@ -53158,7 +54105,7 @@ goL kqK pIX sdU -sdU +mpS sdU bka vky @@ -53166,7 +54113,7 @@ dvV dvV dvV tGe -neI +hLd neI miT neI @@ -53185,15 +54132,15 @@ nsK "} (80,1,1) = {" cgS -xIt +cgS uGF uGF qzH xEg cqM -xIt -xIt -xIt +cgS +cgS +cgS fPM fPM nyC @@ -53224,22 +54171,22 @@ eqT cqM fPM fPM -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uew uew vaE @@ -53368,7 +54315,7 @@ nIN eqR gpR uvE -jGE +qWx gpR nkO ced @@ -53414,7 +54361,7 @@ qzH gfl cqM cqM -xIt +cgS rCQ cqM cqM @@ -53446,22 +54393,22 @@ eqT dwS fPM iqm -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS bcB tzc vaE @@ -53594,7 +54541,7 @@ jGE gpR nkO ced -sdU +mpS sdU sdU pIX @@ -53620,7 +54567,7 @@ ndb ndb dvV dvV -dvV +rfS ndb ndb ndb @@ -53634,12 +54581,12 @@ loD uGF qzH qzH -xIt -xIt -xIt -xIt -xIt -dwS +cgS +cgS +cgS +cgS +cgS +kDZ iqm fPM jaU @@ -53659,7 +54606,7 @@ oTT cqM iqm cqM -cqM +etT cqM cqM cqM @@ -53668,22 +54615,22 @@ cqM etT icv iqm -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb bcB eZJ @@ -53695,7 +54642,7 @@ nwP jSq jlM ujh -dpw +fJN xTc kgP lWl @@ -53766,7 +54713,7 @@ vaN vaN vaN gVv -aeE +qxn gHP gHP gHP @@ -53776,19 +54723,19 @@ vaN vaN vaN vaN +rMv vaN vaN vaN vaN -vaN -vaN +rMv vaN shp vaN vaN vaN vaN -vaN +rMv kZA vky dvV @@ -53801,12 +54748,12 @@ sdU sdU sdU sdU -sdU +mpS sdU sdU sdU bka -vky +mTX dvV nIN eqR @@ -53820,7 +54767,7 @@ sdU sdU trn sdU -sdU +mpS sdU sdU trn @@ -53836,7 +54783,7 @@ vky cqV sdU trn -sdU +mpS ndb ndb vky @@ -53851,17 +54798,17 @@ nsK "} (83,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF uGF eNo uGF -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS iqm cqM iJR @@ -53890,21 +54837,21 @@ cqM fPM fPM iqm -xIt -xIt -xIt +cgS +cgS +cgS ubb cYz cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tJs cYz bcB @@ -53979,7 +54926,7 @@ gZo lAA iyb guC -bIi +fCG rNr rhS lAA @@ -53993,7 +54940,7 @@ gVv gHP kds sKr -gVv +lXR vaN vaN vaN @@ -54016,10 +54963,10 @@ vky dvV dvV dvV -dvV +rfS vky bka -sdU +mpS sdU sdU sdU @@ -54053,7 +55000,7 @@ dvV dvV vky vky -sdU +mpS sdU gXM sdU @@ -54062,7 +55009,7 @@ sdU sdU vky vky -dvV +rfS ndb dvV dvV @@ -54073,16 +55020,16 @@ nsK "} (84,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF gfl qzH uGF loD -xIt -xIt -xIt +cgS +cgS +cgS icv iqm laA @@ -54112,20 +55059,20 @@ fPM cqM iqm iqm -xIt -xIt +cgS +cgS cYz cYz cYz cYz tVH cYz -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz ubb @@ -54255,7 +55202,7 @@ dvV nIN oJi jTv -obp +pFE uFK jTv sPN @@ -54270,7 +55217,7 @@ utz bYC bYC dvV -vky +mTX dvV lqf tBB @@ -54295,17 +55242,17 @@ nsK "} (85,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF vwm ewO uGF uGF -xIt -xIt -xIt -fPM +cgS +cgS +cgS +lBr iqm cqM fPM @@ -54320,7 +55267,7 @@ peR hXS hXS hXS -hXS +gbZ peR hXS igB @@ -54343,10 +55290,10 @@ tJs tVH ubb cYz -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS cYz ubb cYz @@ -54428,7 +55375,7 @@ sAO sAO sAO eHT -gVv +lXR gHP tix uhx @@ -54450,7 +55397,7 @@ lTQ lTQ sOb uhx -uhx +vWZ sOb sOb uhx @@ -54458,7 +55405,7 @@ uhx sOb sOb noN -noN +xRp sOb sOb noN @@ -54509,7 +55456,7 @@ ndb dvV dvV dvV -dvV +rfS dvV ndb ndb @@ -54517,15 +55464,15 @@ nsK "} (86,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF gfl qzH uGF gfl loD -xIt +cgS fPM gZd iqm @@ -54566,8 +55513,8 @@ eeF tPt tPt cYz -xIt -xIt +cgS +cgS cYz cYz cYz @@ -54577,7 +55524,7 @@ cYz bcB ujh rsm -ujh +dhH jlM dpw txH @@ -54669,7 +55616,7 @@ sOb sOb qbN nIU -nIU +aQb sOb sOb sOb @@ -54692,7 +55639,7 @@ vky sdU sdU sdU -sdU +mpS sdU vky vky @@ -54705,7 +55652,7 @@ gpR nkO ced sdU -sdU +mpS sdU ixx wjf @@ -54722,7 +55669,7 @@ phP pPX kci jSP -kci +lcK pPX ikZ iiQ @@ -54739,8 +55686,8 @@ nsK "} (87,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF gfl ewO @@ -54781,8 +55728,8 @@ tPt gpF tPt tPt -xIt -xIt +cgS +cgS tJs tVH ubb @@ -54910,7 +55857,7 @@ sOb noN xUp dvV -vky +mTX vky sdU trn @@ -54961,8 +55908,8 @@ nsK "} (88,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF uGF qzH @@ -55003,10 +55950,10 @@ cYz cYz cYz cYz -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS cYz cYz cYz @@ -55101,7 +56048,7 @@ gxL nIU qbN iFn -nIU +aQb kfd nIU rdU @@ -55117,14 +56064,14 @@ nIU sOb qLx gPD -qbN +wHc nIU oFE sDk nIU rdU qLx -qLx +ocQ nIU nIU nIU @@ -55159,17 +56106,17 @@ jvz bYC pwn vky -nIN +idt pPX uuO -xEZ +xQI tXa kci mqw kci tXa bGB -xEZ +xQI xNQ pPX dzB @@ -55183,8 +56130,8 @@ nsK "} (89,1,1) = {" cgS -xIt -xIt +cgS +cgS asP gfl qzH @@ -55192,7 +56139,7 @@ fPM fPM eqT eqT -cqM +etT gZy iqm ijG @@ -55225,11 +56172,11 @@ fPM ubb cYz cYz -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS cYz ubb cYz @@ -55342,7 +56289,7 @@ qLx qbN nIU gPD -qLx +ocQ nIU nIU qLx @@ -55360,13 +56307,13 @@ sdU sdU sdU sdU -sdU +mpS vky nIN eqR gpR uvE -jGE +qWx gpR nkO ced @@ -55405,7 +56352,7 @@ nsK "} (90,1,1) = {" cgS -xIt +cgS uGF uGF uGF @@ -55445,12 +56392,12 @@ gVM qoT cYz cYz -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS cYz ubb cYz @@ -55458,8 +56405,8 @@ ubb cYz cYz cYz -xIt -xIt +cgS +cgS cYz cYz bcB @@ -55541,7 +56488,7 @@ vfw cZq sOb lBy -nIU +aQb nIU pKR wWA @@ -55550,7 +56497,7 @@ noF nIU qbN nIU -nIU +aQb nIU nIU nIU @@ -55570,7 +56517,7 @@ nIU nIU nIU nIU -nIU +aQb nIU nIU sOb @@ -55608,7 +56555,7 @@ pPX itG kda rQS -kky +mPr eJp vWS xUK @@ -55621,13 +56568,13 @@ rNA dzB pPX vky -vky +mTX ndb nsK "} (91,1,1) = {" cgS -xIt +cgS uGF uGF uGF @@ -55664,25 +56611,25 @@ hXS cqM fPM fPM -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz ubb cYz cYz cYz -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS cYz bcB bBz @@ -55796,7 +56743,7 @@ nIU nIU sOb sOb -ced +giB vky cHP tNS @@ -55813,7 +56760,7 @@ bNZ uFK jTv sPN -ced +giB sdU sdU sdU @@ -55849,8 +56796,8 @@ nsK "} (92,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF gfl qzH @@ -55860,7 +56807,7 @@ hNw ogl ogl ogl -ogl +gcd kjv tqh rCQ @@ -55868,7 +56815,7 @@ krB rCQ fPM mmD -rCQ +oyQ nnL nJe hNx @@ -55884,14 +56831,14 @@ iqm pVA igB iqm -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tJs cYz tVH @@ -55899,12 +56846,12 @@ cYz cYz tJs cYz -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS cYz bcB ujh @@ -55983,7 +56930,7 @@ ycN vaN gVv ndh -uhx +vWZ sOb sOb nIU @@ -56004,13 +56951,13 @@ ikA vxO tVl mlK -mlK +qHd wsw mlK oyM mlK mlK -mlK +qHd mlK oyM mlK @@ -56028,7 +56975,7 @@ sdU sdU vky vky -nIN +idt oJi jTv obp @@ -56045,7 +56992,7 @@ sdU vky vky dvV -dvV +rfS vky aAO ggk @@ -56071,7 +57018,7 @@ nsK "} (93,1,1) = {" cgS -xIt +cgS uGF uGF uGF @@ -56087,7 +57034,7 @@ dHk iJR fPM fPM -rCQ +oyQ lEZ rCQ rCQ @@ -56106,13 +57053,13 @@ cqM fPM igB iqm -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz ubb @@ -56120,13 +57067,13 @@ tVH cYz ubb cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb cYz ujh @@ -56210,7 +57157,7 @@ uhx sOb bJl hZr -uFM +cXS nIU hZr nIU @@ -56261,7 +57208,7 @@ ced sdU sdU sdU -sdU +mpS sdU sdU vky @@ -56279,7 +57226,7 @@ mqw kci tXa mTy -xEZ +xQI rAJ pPX dzB @@ -56293,7 +57240,7 @@ nsK "} (94,1,1) = {" cgS -xIt +cgS gfl uGF uGF @@ -56327,28 +57274,28 @@ iqm cqM etT igB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz cYz tVH cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz ujh @@ -56416,7 +57363,7 @@ nab wXG nWs hoS -gVv +lXR eFf wNa gvt @@ -56435,7 +57382,7 @@ qLx xNl nIU qLx -qLx +ocQ qbN nIU nIU @@ -56457,7 +57404,7 @@ fpt nIU nIU qLx -qLx +ocQ qLx sOb ced @@ -56506,7 +57453,7 @@ lqs pPX aZw iDX -dzB +dqY pPX ndb ndb @@ -56515,13 +57462,13 @@ nsK "} (95,1,1) = {" cgS -xIt -xIt +cgS +cgS uGF xEg uGF uGF -xIt +cgS cqM cqM cqM @@ -56549,29 +57496,29 @@ iqm iqm pVA igB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz ubb cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb jlM eZJ @@ -56661,12 +57608,12 @@ pYJ qbN nIU oVG -nIU +aQb jhw nIU bKO qbN -nIU +aQb nIU lpr sJs @@ -56697,7 +57644,7 @@ dvV nIN eqR gpR -uvE +fiP jGE gpR nkO @@ -56707,7 +57654,7 @@ sdU sdU sdU sdU -sdU +mpS vky dvV dvV @@ -56720,7 +57667,7 @@ pPX pPX lFD xTA -lFD +yaO pPX pPX pPX @@ -56737,14 +57684,14 @@ nsK "} (96,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS uGF uGF -xIt -xIt -xIt +cgS +cgS +cgS eqT cqM fPM @@ -56771,29 +57718,29 @@ iqm iqm cqM igB -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -cYz -cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cYz +cYz +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz jlM wGX @@ -56906,14 +57853,14 @@ qLx sOb ced dvV -vky +mTX vky vky vky vky dRe dvV -dvV +rfS dvV vky aAO @@ -56924,7 +57871,7 @@ lMU gpR nkO ced -sdU +mpS sdU sdU sdU @@ -56932,7 +57879,7 @@ sdU sdU vky vky -lqf +cQa noN pPX pPX @@ -56959,16 +57906,16 @@ nsK "} (97,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS gfl uGF uGF -xIt -xIt -xIt -fPM +cgS +cgS +cgS +lBr cqM iqm cqM @@ -56993,29 +57940,29 @@ iqm iqm pVA igB -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz cYz cYz -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS cYz cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb jlM wGX @@ -57090,7 +58037,7 @@ gHP gVv gVv vfw -tix +oJu bZn lLK bZn @@ -57121,7 +58068,7 @@ sOb nIU nIU nIU -nIU +aQb qLx qLx qLx @@ -57181,29 +58128,29 @@ nsK "} (98,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS uGF uGF gfl loD -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS fPM iqm -xIt -xIt -xIt -xIt -vqi -vqi +cgS +cgS +cgS +cgS +hsE +hsE igB igB hXS @@ -57212,33 +58159,33 @@ hXS nMT igB igB -vqi -vqi -vqi -xIt -xIt -xIt -xIt -xIt +hsE +hsE +hsE +cgS +cgS +cgS +cgS +cgS cYz cYz cYz cYz ubb cYz -xIt -xIt -xIt +cgS +cgS +cgS cYz ubb cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS jlM wGX nwP @@ -57307,7 +58254,7 @@ hoS gHP gVv gHP -gVv +lXR gHP gVv gHP @@ -57327,11 +58274,11 @@ pcy iWI sOb jno -pcy +jfS wfV qyv pJy -qKt +vgQ myJ sXp vGk @@ -57346,7 +58293,7 @@ nIU nIU jqP nIU -nIU +aQb sOb sOb lTQ @@ -57379,7 +58326,7 @@ sdU nIN pPX itG -xEZ +xQI xEZ nws tZa @@ -57393,7 +58340,7 @@ eaR aXD tXa lve -ctT +xEx kmg apR pPX @@ -57403,48 +58350,48 @@ nsK "} (99,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS gfl uGF uGF uGF loD -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF fPM fPM ubb fPM fPM -cYz +ubb fPM iqm -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz tJs -cYz +ubb cYz tJs cYz @@ -57455,12 +58402,12 @@ cYz cYz cYz cYz -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS jlM iJc jlM @@ -57556,14 +58503,14 @@ pJy qwH rDu qIJ -sXp +sig etr etr rFU qfM sOb sOb -nIU +aQb nIU nIU nIU @@ -57593,7 +58540,7 @@ jTv jTv noN xUp -vky +mTX vky dvV vky @@ -57605,7 +58552,7 @@ xEZ xEZ kMe xEZ -mqw +hSW hGc ssT aWU @@ -57625,27 +58572,27 @@ nsK "} (100,1,1) = {" cgS -xIt -xIt -xIt +cgS +cgS +cgS xEg gfl uGF uGF asP -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF gfl uGF @@ -57657,11 +58604,11 @@ cYz cYz tJs iqm -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS cYz cYz cYz @@ -57678,11 +58625,11 @@ cYz cYz cYz ubb -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS jlM wGX jSq @@ -57763,11 +58710,11 @@ sGf wfV sOb sly -qKt +vgQ lbu sOb jno -qKt +vgQ iWI sOb mKJ @@ -57809,7 +58756,7 @@ piP yke fDi jGE -hNU +ivF piP edu jTv @@ -57832,7 +58779,7 @@ aWU aWU aWU xEZ -xEZ +xQI oKM mju pPX @@ -57847,32 +58794,32 @@ nsK "} (101,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uGF gfl uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -uGF +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF uGF +gfl cYz cYz cYz @@ -57902,9 +58849,9 @@ ubb cYz cYz cYz -xIt -xIt -xIt +cgS +cgS +cgS jlM wGX ujh @@ -57998,12 +58945,12 @@ pJy sOb mtx eRM -etr +sGf etr rFU uVp etr -sXp +sig gwP wfV sOb @@ -58016,16 +58963,16 @@ giu sOb tfz etr -etr +sGf etr sOb glh hNU hNU -lMU +ezJ uCp jTv -lMU +ezJ piP hNU uvE @@ -58041,7 +58988,7 @@ dvV dvV vky sdU -sdU +mpS nIN pPX qWo @@ -58069,26 +59016,26 @@ nsK "} (102,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF vwm @@ -58106,11 +59053,11 @@ oiU oHy oHy cYz +ubb cYz cYz cYz -cYz -xIt +cgS cYz ubb cYz @@ -58125,8 +59072,8 @@ cYz cYz tJs ubb -xIt -xIt +cgS +cgS jlM wGX ujh @@ -58233,7 +59180,7 @@ kxZ frg frg frg -frg +dnW kxZ gqU vst @@ -58291,31 +59238,31 @@ nsK "} (103,1,1) = {" cgS -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS uGF gfl uGF uGF gfl uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF gfl uGF uGF -owj +hsE uGF uGF kST @@ -58330,15 +59277,15 @@ oHy gkC cYz cYz -cYz -xIt -xIt -xIt +ubb +cgS +cgS +cgS cYz cYz -xIt -xIt -xIt +cgS +cgS +cgS ubb cYz cYz @@ -58348,12 +59295,12 @@ cYz cYz cYz cYz -xIt +cgS jlM -eZJ +rsf bBz ujh -drE +wWV rnh txH txH @@ -58439,7 +59386,7 @@ sXp etr tCZ qHf -etr +sGf etr oHl gwP @@ -58451,7 +59398,7 @@ etr sXp etr lTQ -euE +dRx rDu rDu bHO @@ -58513,11 +59460,11 @@ nsK "} (104,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS xEg uGF uGF @@ -58529,10 +59476,10 @@ uGF uGF gfl uGF -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS uGF uGF uGF @@ -58552,17 +59499,17 @@ oHy cYz cYz cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb cYz -xIt +cgS cYz cYz ubb @@ -58699,17 +59646,17 @@ ner ner jGE hNU -piP +uyC bXX fsy -ced +giB dRe sdU sdU sdU nIN lFD -xEZ +xQI xEZ xKK xEZ @@ -58735,13 +59682,13 @@ nsK "} (105,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -58752,10 +59699,10 @@ uGF uGF uGF uGF -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS xEg uGF gfl @@ -58770,22 +59717,22 @@ cYz cYz cYz cYz -oHy +pwZ cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz ubb @@ -58903,19 +59850,19 @@ mPv eIA sOb uIl -etr +sGf etr jvl sOb jTv -dLh +uiS dLh dLh jTv jTv jTv uhV -piP +uyC ecf iNC jGE @@ -58957,14 +59904,14 @@ nsK "} (106,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF gfl @@ -58974,12 +59921,12 @@ uGF gfl gfl uGF -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS uGF qTf xEg @@ -58993,21 +59940,21 @@ ubb cYz tJs oHy -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb cYz cYz @@ -59080,7 +60027,7 @@ qBt aEa heL heL -heL +rwy heL kpb kpb @@ -59109,11 +60056,11 @@ etr sXp qKt rDu -hto +hAs sXp etr etr -sKM +uEJ sbx sOb sOb @@ -59122,7 +60069,7 @@ nIU nIU nIU nIU -nIU +aQb sOb qmh etr @@ -59133,7 +60080,7 @@ mqu snC snC snC -snC +sto mqu jTv jTv @@ -59149,7 +60096,7 @@ mqu kxd uGS eWY -eWY +iAT eWY ujT lFD @@ -59179,14 +60126,14 @@ nsK "} (107,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF xEg gfl @@ -59196,14 +60143,14 @@ xEg uGF uGF xEg -xIt -xIt -xIt -xIt -xIt -xIt -xIt -vqi +cgS +cgS +cgS +cgS +cgS +cgS +cgS +hsE uGF uGF cYz @@ -59214,26 +60161,26 @@ cYz cYz cYz cYz -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz ubb -xIt +cgS bcB bcB bBz @@ -59307,7 +60254,7 @@ tzW jZM eux eux -eux +nAj eux vMO heL @@ -59328,7 +60275,7 @@ sbx eWL etr boN -etr +sGf qKt fLo jJS @@ -59340,7 +60287,7 @@ sOb sOb qLx nIU -nIU +aQb qQP nIU nIU @@ -59374,7 +60321,7 @@ dFD dFD dFD gxN -dVJ +meb siO wrz vWS @@ -59401,13 +60348,13 @@ nsK "} (108,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -59419,14 +60366,14 @@ uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -vqi -xIt +cgS +cgS +cgS +cgS +cgS +cgS +hsE +cgS uGF cYz cYz @@ -59435,28 +60382,28 @@ cYz cYz cYz cYz -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS bBz ujh ujh @@ -59587,7 +60534,7 @@ nRl lMv jTv jTv -mqu +vZQ kxd eWY doO @@ -59613,7 +60560,7 @@ fKH qmp pPX pxY -ctT +xEx fwk tqc pPX @@ -59623,13 +60570,13 @@ nsK "} (109,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS loD uGF gfl @@ -59641,14 +60588,14 @@ uGF uGF uGF loD -xIt -xIt -xIt -xIt -xIt -xIt -vqi -xIt +cgS +cgS +cgS +cgS +cgS +cgS +hsE +cgS uGF rvq gkC @@ -59656,31 +60603,31 @@ gkC cYz ubb cYz -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ilb cZN ilb @@ -59791,7 +60738,7 @@ nIU nIU lTQ mqu -uet +nGs uGS uGS eWY @@ -59801,7 +60748,7 @@ tBa eWY eWY eWY -eWY +iAT htY snC snC @@ -59823,7 +60770,7 @@ xEZ xEZ xEZ tyY -jSP +cuP xKK aWU xJv @@ -59845,13 +60792,13 @@ nsK "} (110,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS loD uGF uGF @@ -59863,14 +60810,14 @@ uGF uGF gfl loD -xIt -xIt -xIt -xIt -xIt -xIt -vqi -xIt +cgS +cgS +cgS +cgS +cgS +cgS +hsE +cgS uGF cYz gkC @@ -59878,30 +60825,30 @@ gkC cYz cYz cYz -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ilb ilb nSG @@ -59970,7 +60917,7 @@ bJa bsh aEa aEa -tzW +dmd jIb eux jIb @@ -60004,13 +60951,13 @@ obF eUq nIU nIU -nIU +aQb nIU nIU qbN jqP nIU -nIU +aQb lTQ mqu rNB @@ -60018,7 +60965,7 @@ uGS oMs uGS eWY -eWY +iAT udO eWY eWY @@ -60042,7 +60989,7 @@ eWY ujT lFD xEZ -xEZ +xQI tZa ufl jSP @@ -60067,14 +61014,14 @@ nsK "} (111,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF gfl uGF @@ -60085,44 +61032,44 @@ uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -vqi -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +hsE +cgS +cgS cYz cYz cYz cYz ubb cYz -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ilb ilb ilb @@ -60154,7 +61101,7 @@ wId kHM iBu wId -wId +sXG wId wId eWP @@ -60206,7 +61153,7 @@ gKW xvC uSc mQy -mQy +vTg qYl mQy qYl @@ -60221,7 +61168,7 @@ qKt etr hto gJz -gJz +xIY obF eUq nIU @@ -60250,7 +61197,7 @@ eWY eWY eWY eWY -doO +bLp eWY eWY eWY @@ -60260,7 +61207,7 @@ eWY eWY eWY oMo -eWY +iAT ujT pPX pPX @@ -60289,14 +61236,14 @@ nsK "} (112,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -60308,41 +61255,41 @@ uGF gfl uGF uGF -xIt -xIt -xIt -xIt -xIt -vqi -vqi -vqi -vqi +cgS +cgS +cgS +cgS +cgS +hsE +hsE +hsE +hsE oHy oHy eVB oHy oHy -vqi -vqi -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +hsE +hsE +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ilb ilb ilb @@ -60439,7 +61386,7 @@ dhe jno etr gJz -qKt +vgQ gJz sGN etr @@ -60511,14 +61458,14 @@ nsK "} (113,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS loD xEg uGF @@ -60530,39 +61477,39 @@ uGF xEg uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -cYz -cYz -cYz -cYz -cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cYz +cYz +cYz +cYz +cYz +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ilb ilb vby @@ -60645,7 +61592,7 @@ jIb ntj bZj dSJ -heL +rwy xvC xvC loB @@ -60666,14 +61613,14 @@ ndn hto etr etr -etr +sGf qOn ecS nIU nIU nIU nIU -qbN +wHc nIU nIU nIU @@ -60681,7 +61628,7 @@ sOb sOb mqu jRk -oMs +fgG uGS bYC bYC @@ -60699,7 +61646,7 @@ eWY eWY eWY eWY -eWY +iAT eWY eWY eWY @@ -60716,7 +61663,7 @@ eZd siO kpl kpl -kpl +iWw kpl kpl kpl @@ -60733,14 +61680,14 @@ nsK "} (114,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS loD uGF uGF @@ -60752,38 +61699,38 @@ uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz tJs cYz ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ilb ilb juQ @@ -60859,7 +61806,7 @@ neN aEa aEa tzW -jIb +ayL jIb jZM jIb @@ -60933,7 +61880,7 @@ pPX mju jGH xEZ -mqw +hSW xKK aWU kci @@ -60941,7 +61888,7 @@ kci kci kci tKr -kci +lcK tXa mku xEZ @@ -60955,15 +61902,15 @@ nsK "} (115,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS loD uGF uGF @@ -60975,35 +61922,35 @@ vwm uGF gfl uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -cYz -cYz -cYz -cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cYz +cYz +cYz +cYz +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tyz ilb ilb @@ -61122,7 +62069,7 @@ nIU nIU nIU qLx -qLx +ocQ sOb uet uGS @@ -61150,7 +62097,7 @@ qJo eWY rFx pJW -mqu +vZQ pPX tmV xEZ @@ -61177,17 +62124,17 @@ nsK "} (116,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -61198,33 +62145,33 @@ uGF uGF gfl uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz ubb gkC -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tyz tyz ilb @@ -61315,7 +62262,7 @@ qKA cEe avE avE -avE +rPW avE avE fnM @@ -61329,19 +62276,19 @@ sXp etr etr qKt -hto +hAs etr etr wfV eUq nIU nIU -nIU +aQb qLx qLx qbN nIU -nIU +aQb nIU qLx qLx @@ -61357,7 +62304,7 @@ wjf wjf utz bYC -eWY +iAT eWY eWY vFu @@ -61368,7 +62315,7 @@ otG jTc jTc wsJ -jTc +xtH jTc jTc mqu @@ -61399,17 +62346,17 @@ nsK "} (117,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -61420,33 +62367,33 @@ uGF uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ubb cYz cYz gkC -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tyz tyz tyz @@ -61535,7 +62482,7 @@ jaT gKW xvC xvC -oca +tAB mQy wmi mQy @@ -61547,7 +62494,7 @@ ejP lgr uVf hOb -etr +sGf etr etr qKt @@ -61583,7 +62530,7 @@ eWY eWY eWY nQL -mqu +vZQ pPX pPX pPX @@ -61621,19 +62568,19 @@ nsK "} (118,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF gfl @@ -61643,32 +62590,32 @@ gfl uGF uGF uGF -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS cYz cYz cYz ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jIg tyz tyz @@ -61736,11 +62683,11 @@ koL awO fwd lTL -loO +pNW tzW eux eux -eux +nAj eux eux eux @@ -61749,7 +62696,7 @@ ayL jIb jIb jIb -jZM +qDS jZM eux jIb @@ -61772,10 +62719,10 @@ tYd eTs wfV kwz -qKt +vgQ hto etr -wfV +jTx vqz bKO nIU @@ -61791,7 +62738,7 @@ sOb sOb mqu kxd -oMs +fgG oMs oMs bYC @@ -61823,7 +62770,7 @@ fgn sXb gRH dot -jsB +fTa tXa jOE mcU @@ -61832,7 +62779,7 @@ pPX pPX aLN pPX -dzB +dqY dzB dzB pPX @@ -61843,21 +62790,21 @@ nsK "} (119,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF xEg uGF @@ -61865,32 +62812,32 @@ uGF uGF uGF xEg -xIt -xIt -xIt -xIt -xIt -xIt -cYz -cYz -cYz -cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cYz +cYz +cYz +cYz +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS qHh qHh lyG @@ -61977,7 +62924,7 @@ eux jIb jIb jIb -gKW +bUb xvC xvC pwK @@ -62001,7 +62948,7 @@ xzp sOb sOb sOb -lTQ +iAK lTQ sOb sOb @@ -62018,7 +62965,7 @@ oMs uGS uGS uGS -uGS +rkH eWY eWY eWY @@ -62065,22 +63012,22 @@ nsK "} (120,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -62088,31 +63035,31 @@ gfl uGF uGF uGF -xIt -xIt -xIt -xIt -cYz -cYz -cYz -cYz -cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cYz +cYz +cYz +cYz +cYz +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS qHh qHh lyG @@ -62208,7 +63155,7 @@ oCo xvC ugE ugE -iLp +uCz mQy xvC auH @@ -62227,7 +63174,7 @@ mqu mqu sOb sOb -mqu +vZQ jHe sOb sOb @@ -62244,7 +63191,7 @@ eWY eWY eWY eWY -eWY +iAT eWY eWY eWY @@ -62254,16 +63201,16 @@ xEZ xEZ xEZ xEZ -xEZ +xQI xEZ xEZ fgn fgn -jSP +cuP rlA fgn njN -fgn +oOA xEZ wPx xEZ @@ -62273,7 +63220,7 @@ mcU cmE pIJ mcU -mcU +vhW egQ ggk dzB @@ -62287,21 +63234,21 @@ nsK "} (121,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF @@ -62311,31 +63258,31 @@ uGF uGF uGF uGF -xIt -xIt +cgS +cgS cYz tJs cYz ubb tJs -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS lyG uYy uYy @@ -62426,7 +63373,7 @@ yks tFo sOJ sIV -hqp +enp xvC hXm avE @@ -62439,7 +63386,7 @@ aAW kLw xcj fwv -roX +gJA xcj ncG mqu @@ -62460,7 +63407,7 @@ hUC cxK cxK cxK -wxi +oVi wxi wxi wxi @@ -62509,25 +63456,25 @@ nsK "} (122,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF gfl -xIt +cgS uGF uGF uGF @@ -62539,26 +63486,26 @@ gfl cYz cYz cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -62625,11 +63572,11 @@ nja niE dKU loO -tzW +dmd jZM jZM jZM -eux +nAj jIb jIb jaT @@ -62667,7 +63614,7 @@ xcj ksh uGS uGS -uGS +rkH oMs uGS uGS @@ -62677,7 +63624,7 @@ lvH lCW eWY eWY -eWY +iAT eWY eWY eWY @@ -62692,7 +63639,7 @@ ndb eWY eWY eWY -ujT +wrL lFD xEZ xEZ @@ -62722,7 +63669,7 @@ pPX aZw dzB dzB -dzB +dqY pPX ndb ndb @@ -62731,26 +63678,26 @@ nsK "} (123,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uGF uGF uGF -xIt -xIt +cgS +cgS uGF uGF uGF @@ -62761,27 +63708,27 @@ uGF cYz cYz ubb -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -62894,7 +63841,7 @@ oMs oMs uGS uGS -ppv +bzI eWY mls bmB @@ -62907,7 +63854,7 @@ pyY wxi wxi aSI -eWY +iAT eWY eWY ndb @@ -62917,14 +63864,14 @@ eWY ujT pPX kci -kci +lcK vfP kci xEZ xEZ xEZ fgn -xEZ +xQI aXD pPX pPX @@ -62936,7 +63883,7 @@ tZa xEZ fVL dzB -dzB +dqY dzB lSR dzB @@ -62953,27 +63900,27 @@ nsK "} (124,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS gfl uGF uGF -xIt -xIt -xIt +cgS +cgS +cgS xEg uGF uGF @@ -62982,28 +63929,28 @@ uGF uGF xEg cYz -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -63095,7 +64042,7 @@ cCx sIV xvC mQy -mQy +vTg piq jmO qKA @@ -63124,7 +64071,7 @@ tLO eWY tgz uGS -eWY +iAT idc eWY ydx @@ -63134,7 +64081,7 @@ eWY eWY pOG eWY -eWY +iAT eWY htY pPX @@ -63154,7 +64101,7 @@ tZa xEZ xEZ tZa -xEZ +xQI xEZ lFD dzB @@ -63162,7 +64109,7 @@ aZw dzB dzB dzB -dzB +dqY dzB dzB aZw @@ -63175,57 +64122,57 @@ nsK "} (125,1,1) = {" cgS -xIt -xIt -xIt -xIt -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi +cgS +cgS +cgS +cgS +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE qTf qTf qTf -vqi -vqi -xIt -xIt -xIt -xIt +hsE +hsE +cgS +cgS +cgS +cgS uGF uGF uGF gfl uGF gfl -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uxf uYy @@ -63372,7 +64319,7 @@ aYf aXD pPX gpx -xEZ +xQI gpx xEZ gpx @@ -63397,58 +64344,58 @@ nsK "} (126,1,1) = {" cgS -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS lnR jqf jqf jqf uLt -xIt -vqi -xIt -xIt -xIt -xIt -xIt +cgS +hsE +cgS +cgS +cgS +cgS +cgS jqf jqf jqf jqf jqf -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uxf uYy @@ -63513,12 +64460,12 @@ xkN fwd lTL mjh -tzW +dmd eux eux eux jZM -jZM +qDS eux eux jIb @@ -63558,12 +64505,12 @@ wXZ kZt kZt kZt -dzY +gQQ dzY jDB eWY eWY -fMQ +jlP eWY eWY eWY @@ -63577,7 +64524,7 @@ eWY eWY eWY pOG -eWY +iAT eWY eWY eWY @@ -63588,7 +64535,7 @@ ndb ndb pPX mCI -xEZ +xQI fgn xEZ aXD @@ -63619,15 +64566,15 @@ nsK "} (127,1,1) = {" cgS -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS jqf jqf jqf @@ -63636,41 +64583,41 @@ jqf lnR jqf jqf -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS jqf lnR jqf jqf kjD -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -63748,7 +64695,7 @@ jIb ayL jIb jIb -eux +nAj eux jIb jIb @@ -63756,7 +64703,7 @@ vZi xvC hlS lhk -lhk +iEp lhk lhk pCU @@ -63841,14 +64788,14 @@ nsK "} (128,1,1) = {" cgS -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS jqf uLt jqf @@ -63858,40 +64805,40 @@ jqf jqf jqf uLt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf uLt jqf kjD kTt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uxf uYy uYy @@ -64008,16 +64955,16 @@ oNN xYl oMs kIS -eWY +iAT eWY idc ydx fkl -uGS +rkH gpo uGS eWY -eWY +iAT eWY eWY pOG @@ -64063,14 +65010,14 @@ nsK "} (129,1,1) = {" cgS -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS jqf jqf jqf @@ -64080,39 +65027,39 @@ jqf jqf lnR jqf -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf jqf jqf ihG kjD -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -64177,7 +65124,7 @@ mmh kxB awO fwd -lTL +hLM mjh hsx mhj @@ -64194,7 +65141,7 @@ jIb jZM jaT eux -jIb +ayL jaT gKW pwK @@ -64206,7 +65153,7 @@ hqp xvC prC plu -mQy +vTg sQm xvC oJb @@ -64215,7 +65162,7 @@ tAB xvC xcj lnx -nIx +ocp xcj ncG uet @@ -64247,7 +65194,7 @@ eWY eWY eWY eWY -eWY +iAT mDs ndb ndb @@ -64285,13 +65232,13 @@ nsK "} (130,1,1) = {" cgS -xIt -xIt -xIt -xIt -vqi -xIt -xIt +cgS +cgS +cgS +cgS +hsE +cgS +cgS jqf lnR jqf @@ -64302,38 +65249,38 @@ iKs iKs jqf jqf -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf jqf aoY kjD kjD -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -64445,11 +65392,11 @@ uGS dzJ gnV dAn -wdk +njV rpT bYC vBq -eWY +iAT rxg wxi jaJ @@ -64507,13 +65454,13 @@ nsK "} (131,1,1) = {" cgS -xIt -xIt -xIt -xIt -vqi -xIt -xIt +cgS +cgS +cgS +cgS +hsE +cgS +cgS jqf jqf jqf @@ -64524,37 +65471,37 @@ iKs ldC jqf jqf -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf lnR kjD kjD kjD -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -64645,7 +65592,7 @@ pwK vyd uVj uVj -gTM +ofz sOJ xvC lmc @@ -64662,7 +65609,7 @@ lZD wEk ltL ubR -uet +nGs oMs dzJ bYC @@ -64682,11 +65629,11 @@ oMs jJK oMs lrX -sQJ +cNH sQU oMs eWY -pOG +sXn eWY eWY eWY @@ -64729,14 +65676,14 @@ nsK "} (132,1,1) = {" cgS -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS jqf lnR jqf @@ -64747,36 +65694,36 @@ jqf jqf jqf jqf -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf jqf kjD kjD aoY -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS xKP uYy uxf @@ -64871,7 +65818,7 @@ uVj sOJ xvC lMZ -mQy +vTg mQy hAH cEu @@ -64899,7 +65846,7 @@ iYi rQo xYl uGS -uGS +rkH oMs oMs uGS @@ -64951,13 +65898,13 @@ nsK "} (133,1,1) = {" cgS -xIt -xIt -xIt -xIt -vqi -xIt -xIt +cgS +cgS +cgS +cgS +hsE +cgS +cgS jqf jqf jqf @@ -64970,35 +65917,35 @@ jqf lnR jqf laW -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS lnR jqf kjD aoY kjD -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uYy uYy pKS @@ -65081,13 +66028,13 @@ jIb jIb jIb eux -eux +nAj eux eux gKW xvC uUx -sOJ +dyq sOJ sOJ hqp @@ -65098,18 +66045,18 @@ mQy tAB cEu tAB -plu +fAZ tAB xvC xcj -fwv +hKe roX xcj ncG uet uGS lKM -rou +laG ffH rou yco @@ -65173,14 +66120,14 @@ nsK "} (134,1,1) = {" cgS -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS jqf uLt gGl @@ -65193,33 +66140,33 @@ uLt jqf laW jqf -xIt -xIt -xIt -xIt -xIt -vqi -vqi -vqi -vqi +cgS +cgS +cgS +cgS +cgS +hsE +hsE +hsE +hsE laW tOc tOc tOc tOc -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -xIt -xIt -xIt -xIt -xIt +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -65306,7 +66253,7 @@ jIb jIb eux jIb -gKW +bUb xvC xvC glm @@ -65334,7 +66281,7 @@ oMs uGS eWY eWY -eWY +iAT eWY idc eWY @@ -65345,18 +66292,18 @@ dcJ oMs oMs uGS -oMs -uGS +fgG uGS uGS +rkH uGS uGS eWY -pOG -eWY +sXn eWY eWY eWY +iAT eWY mDs eWY @@ -65395,13 +66342,13 @@ nsK "} (135,1,1) = {" cgS -xIt -xIt -xIt -xIt -vqi -xIt -xIt +cgS +cgS +cgS +cgS +hsE +cgS +cgS jqf jqf jqf @@ -65415,33 +66362,33 @@ jqf lnR laW iKs -xIt -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS kjD kjD kjD aoY -xIt -xIt -xIt -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS uYy uYy uxf @@ -65563,7 +66510,7 @@ eWY eWY uGS aTr -oMs +fgG oMs uGS qEZ @@ -65617,13 +66564,13 @@ nsK "} (136,1,1) = {" cgS -xIt -xIt -xIt -xIt -vqi -xIt -xIt +cgS +cgS +cgS +cgS +hsE +cgS +cgS jqf lnR jqf @@ -65637,33 +66584,33 @@ jqf jqf laW jqf -xIt -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS kTt aoY kjD kjD kTt -xIt -xIt -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS uYy uxf uYy @@ -65743,7 +66690,7 @@ mxg lXh slv tzW -jZM +qDS nUn jIb eux @@ -65774,7 +66721,7 @@ ltL ubR uet uGS -uGS +rkH eWY eWY eWY @@ -65782,7 +66729,7 @@ eWY eWY idc eWY -eWY +iAT uGS uGS uGS @@ -65839,14 +66786,14 @@ nsK "} (137,1,1) = {" cgS -xIt -xIt -xIt -xIt -vqi -vqi -vqi -vqi +cgS +cgS +cgS +cgS +hsE +hsE +hsE +hsE laW laW laW @@ -65859,33 +66806,33 @@ laW prh laW lnR -xIt -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS kjD kjD kjD aoY kjD -xIt -xIt -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -65977,7 +66924,7 @@ heL hLj heL heL -heL +rwy heL heL heL @@ -66013,7 +66960,7 @@ sQJ sQJ sQJ sQJ -sQJ +cNH sQJ sQJ sQJ @@ -66061,15 +67008,15 @@ nsK "} (138,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf lnR jqf @@ -66081,33 +67028,33 @@ jqf jqf jqf jqf -xIt -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS kjD kjD kjD aoY kjD kjD -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -66191,10 +67138,10 @@ jZM eux jZM wZK -jcI +vut jZM jIb -vMO +pMw heL hLj heL @@ -66204,7 +67151,7 @@ sBt heL heL heL -heL +rwy heL heL heL @@ -66212,7 +67159,7 @@ upA upA lDZ ltL -lZD +eTp wEk ltL ubR @@ -66232,7 +67179,7 @@ uGS oMs eWY eWY -eWY +iAT eWY eWY eWY @@ -66283,15 +67230,15 @@ nsK "} (139,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf jqf jqf @@ -66303,33 +67250,33 @@ jqf jqf jqf iKs -xIt -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS kjD kjD kjD kjD gLO aoY -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS uYy uYy uYy @@ -66444,12 +67391,12 @@ uGS oMs eWY eWY +iAT eWY eWY eWY eWY -eWY -eWY +iAT eWY wvP eWY @@ -66467,7 +67414,7 @@ eWY eWY eWY eWY -eWY +iAT mDs eWY ndb @@ -66505,15 +67452,15 @@ nsK "} (140,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf lnR jqf @@ -66525,17 +67472,17 @@ jqf jqf lnR jqf -xIt -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS kjD kjD kjD @@ -66543,10 +67490,10 @@ kjD kjD kjD kjD -xIt -xIt -xIt -vqi +cgS +cgS +cgS +hsE kjD tzY tzY @@ -66632,7 +67579,7 @@ roD mhj tzW eux -jZM +qDS eux eux jZM @@ -66653,7 +67600,7 @@ jMm mQg euX eEP -rdG +xMn dxJ xcj ubE @@ -66681,7 +67628,7 @@ udO eWY eWY eWY -eWY +iAT eWY eWY eWY @@ -66727,16 +67674,16 @@ nsK "} (141,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf jqf jqf @@ -66746,19 +67693,19 @@ lnR jqf jqf lnR -xIt -xIt -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS aoY kjD kjD @@ -66766,8 +67713,8 @@ aoY ihG kjD kjD -xIt -xIt +cgS +cgS tOc kjD kjD @@ -66858,7 +67805,7 @@ eux eux eux jIb -eux +nAj jIb gKW iBo @@ -66869,7 +67816,7 @@ hjw tgL lhY tgL -ouZ +bqf prk ouZ hjw @@ -66883,7 +67830,7 @@ sSk xcj xcj ksh -eWY +iAT eWY eWY oMs @@ -66907,7 +67854,7 @@ eWY eWY eWY eWY -eWY +iAT eWY eWY eWY @@ -66949,16 +67896,16 @@ nsK "} (142,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf lnR jqf @@ -66969,18 +67916,18 @@ jqf jqf jqf jqf -xIt -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS kjD kjD kjD @@ -66988,13 +67935,13 @@ kjD kjD kjD kjD -xIt +cgS kjD tOc aoY kjD tzY -cIQ +bzm cIQ tzY uYy @@ -67118,7 +68065,7 @@ eWY eWY eWY eWY -eWY +iAT eWY eWY eWY @@ -67171,17 +68118,17 @@ nsK "} (143,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS uLt jqf lnR @@ -67191,18 +68138,18 @@ uLt lnR jqf jqf -xIt -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS kjD kjD kTt @@ -67232,7 +68179,7 @@ tyz aSf krt mdh -ilb +vby ilb xxR krt @@ -67323,18 +68270,18 @@ sQf azA qsS mXX -wEk +vMi ltL azA rHL udO eWY -eWY +iAT eWY uGS udO eWY -eWY +iAT eWY eWY eWY @@ -67393,37 +68340,37 @@ nsK "} (144,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf jqf jqf jqf jqf jqf -xIt -xIt -xIt -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS jqf kjD kjD @@ -67445,7 +68392,7 @@ tzY tyz tyz tyz -jIg +kJF jIg tyz tyz @@ -67536,7 +68483,7 @@ epb jqY ijt eHf -ijt +wBB ijt dtS wrm @@ -67556,26 +68503,26 @@ eWY uGS eWY eWY +iAT eWY eWY -eWY -eWY +iAT tBa eWY eWY eWY eWY -eWY +iAT uGS uGS +rkH uGS uGS -uGS -eWY -eWY +iAT eWY eWY eWY +iAT eWY eWY rIi @@ -67615,43 +68562,43 @@ nsK "} (145,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf jqf lnR jqf jqf -xIt -xIt -xIt -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS uLt jqf jqf aoY kjD kTt -xIt -xIt +cgS +cgS kjD kjD kjD @@ -67662,7 +68609,7 @@ aoY tzY tzY cIQ -cIQ +bzm cIQ jIg jIg @@ -67672,7 +68619,7 @@ jIg jIg jIg jIg -jIg +kJF pLq tyz ilb @@ -67762,7 +68709,7 @@ ijt ykZ dtS wrm -heL +rwy heL dxJ xcj @@ -67837,51 +68784,51 @@ nsK "} (146,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf jqf -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -vqi -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +hsE +cgS +cgS jqf jqf jqf jqf kjD -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS kjD kjD kjD -vqi -xIt -xIt -xIt +hsE +cgS +cgS +cgS tzY tzY cIQ @@ -67968,7 +68915,7 @@ jIb eux jIb jIb -eux +nAj eux gKW xad @@ -67994,7 +68941,7 @@ xtY ubR uet jio -kZt +aOV kZt kZt gqI @@ -68059,52 +69006,52 @@ nsK "} (147,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf jqf jqf lnR -xIt -xIt -xIt -xIt -xIt -xIt -xIt -vqi -vqi +cgS +cgS +cgS +cgS +cgS +cgS +cgS +hsE +hsE laW laW prh laW prh tOc -vqi -vqi -vqi -vqi -vqi -vqi +hsE +hsE +hsE +hsE +hsE +hsE tOc -vqi -vqi -xIt -xIt -xIt -xIt +hsE +hsE +cgS +cgS +cgS +cgS tzY cIQ cIQ @@ -68112,7 +69059,7 @@ jIg pKS pKS pKS -jIg +kJF jIg jIg jIg @@ -68200,7 +69147,7 @@ dRV hjw ouZ sxT -ijt +wBB dtS gGA bHg @@ -68210,7 +69157,7 @@ heL heL htI ltL -lZD +eTp wEk ltL waf @@ -68227,7 +69174,7 @@ eWY ndb eWY eWY -eWY +iAT eWY eWY oMs @@ -68238,7 +69185,7 @@ uGS eWY uGS eWY -eWY +iAT eWY eWY eWY @@ -68281,52 +69228,52 @@ nsK "} (148,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf lnR jqf jqf -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf jqf jqf jqf jqf -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzY cIQ cIQ @@ -68503,52 +69450,52 @@ nsK "} (149,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf jqf jqf jqf jqf -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf jqf jqf lnR jqf -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS cIQ cIQ cIQ @@ -68559,7 +69506,7 @@ tyz tyz jIg tyz -tyz +rVW ilb ilb vrt @@ -68665,7 +69612,7 @@ kRn kRn qhj uGS -eWY +iAT eWY eWY ndb @@ -68675,18 +69622,18 @@ eWY eWY eWY bfa -uGS +rkH uGS eWY eWY eWY +iAT eWY eWY eWY eWY eWY -eWY -eWY +iAT eWY ngv jDt @@ -68725,55 +69672,55 @@ nsK "} (150,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf jqf uLt jqf jqf uLt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf lnR jqf jqf -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzY tzY -cIQ +bzm jIg pKS pKS @@ -68867,11 +69814,11 @@ ohb bAg sxT ijt -dtS +sYL xdj euX heL -heL +rwy heL ohb dxJ @@ -68947,53 +69894,53 @@ nsK "} (151,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf lnR jqf jqf jqf jqf -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS jqf uLt jqf jqf uLt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzY cIQ jIg @@ -69001,7 +69948,7 @@ jIg pKS jIg tyz -tyz +rVW tyz tyz ilb @@ -69075,7 +70022,7 @@ mhj tzW jIb eux -nUn +vtd jIb hKm ohb @@ -69102,7 +70049,7 @@ jqY rcp hjw iwh -uet +nGs eSA kRn kRn @@ -69114,7 +70061,7 @@ eWY ndb ndb ndb -eWY +iAT eWY eWY eWY @@ -69127,7 +70074,7 @@ oMs uGS eWY eWY -eWY +iAT eWY eWY eWY @@ -69169,53 +70116,53 @@ nsK "} (152,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf jqf jqf lnR jqf jqf -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS lnR jqf jqf jqf -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzY cIQ jIg @@ -69320,7 +70267,7 @@ jyo cdT hYS tpW -jqY +gMy rcp hYC hjw @@ -69333,7 +70280,7 @@ ezz oMs eWY eWY -eWY +iAT ndb eWY eWY @@ -69344,7 +70291,7 @@ eWY udO eWY eWY -eWY +iAT uGS eWY eWY @@ -69391,52 +70338,52 @@ nsK "} (153,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf qcB jqf jqf jqf jqf -xIt -xIt +cgS +cgS jqf jqf jqf jqf -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzY tzY cIQ @@ -69506,7 +70453,7 @@ pYZ fBW orh mhj -tJg +mxg vCT ojR ojR @@ -69527,7 +70474,7 @@ eWt iiP pED pED -pED +rlj pED pED pED @@ -69535,7 +70482,7 @@ oYq pED rga byj -pED +rlj pED pED pED @@ -69560,11 +70507,11 @@ eWY eWY udO eWY -eWY +iAT eWY udO eWY -eWY +iAT eWY eWY uGS @@ -69613,21 +70560,21 @@ nsK "} (154,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf iKs iKs @@ -69641,24 +70588,24 @@ jqf jqf nYL jqf -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzY tzY qDM @@ -69753,7 +70700,7 @@ dgz dtS dgz dgz -dtS +sYL ijt ijt vAB @@ -69761,7 +70708,7 @@ ijt ijt ijt asD -asD +ioo ijt viH jqY @@ -69773,7 +70720,7 @@ udO eWY eWY eWY -uGS +rkH udO eWY eWY @@ -69792,12 +70739,12 @@ eWY eWY eWY eWY +iAT eWY eWY eWY eWY -eWY -eWY +iAT ngv jDt fwH @@ -69835,20 +70782,20 @@ nsK "} (155,1,1) = {" cgS -xIt -xIt -xIt -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi +cgS +cgS +cgS +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE laW laW prQ @@ -69864,33 +70811,33 @@ jqf jqf jqf jqf -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tzY cIQ jIg jIg +kJF jIg jIg jIg -jIg -tyz +rVW tyz ilb ilb @@ -70001,13 +70948,13 @@ eWY eWY eWY eWY -eWY +iAT uGS uGS uGS eWY eWY -eWY +iAT eWY eWY eWY @@ -70057,20 +71004,20 @@ nsK "} (156,1,1) = {" cgS -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf gGl jqf @@ -70086,24 +71033,24 @@ jqf jqf lnR jqf -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS kjD kjD -xIt -xIt -xIt -xIt -xIt -xIt -xIt -tzY +cgS +cgS +cgS +cgS +cgS +cgS +cgS +sCz tzY cIQ jIg @@ -70187,7 +71134,7 @@ jIb jZM jZM jIb -gKW +bUb xad obT xIR @@ -70214,7 +71161,7 @@ gzO hjw uet eWY -eWY +iAT eWY eWY eWY @@ -70279,19 +71226,19 @@ nsK "} (157,1,1) = {" cgS -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf jqf jqf @@ -70300,8 +71247,8 @@ laW lnR jqf jqf -xIt -xIt +cgS +cgS jqf jqf jqf @@ -70309,21 +71256,21 @@ jqf jqf jqf jqf -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS kjD aoY kjD kjD kjD -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS tzY tzY cIQ @@ -70416,7 +71363,7 @@ mrh mrh mrh cpl -mrh +oWN mrh dKD dxy @@ -70425,7 +71372,7 @@ qYn xad xmb ijt -ijt +wBB myC myC ijt @@ -70501,18 +71448,18 @@ nsK "} (158,1,1) = {" cgS -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf ntZ jqf @@ -70521,29 +71468,29 @@ ldC laW jqf wnr -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS jqf jqf jqf lnR jqf -xIt -xIt -xIt -vqi -vqi -vqi +cgS +cgS +cgS +hsE +hsE +hsE tOc tOc tOc tOc tOc -vqi -vqi +hsE +hsE kjD kjD cIQ @@ -70555,7 +71502,7 @@ pKS pKS pKS tyz -ilb +vby ilb ilb ilb @@ -70642,7 +71589,7 @@ mrh mrh oQi mrh -mrh +oWN mrh xad lLD @@ -70663,11 +71610,11 @@ eWY eWY eWY eWY -eWY +iAT oMs uGS uGS -oMs +fgG oMs oMs uGS @@ -70723,15 +71670,15 @@ nsK "} (159,1,1) = {" cgS -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS jqf uLt jqf @@ -70743,22 +71690,22 @@ jqf mYK jqf uLt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS uLt jqf jqf jqf uLt -xIt -xIt -vqi -xIt -xIt +cgS +cgS +hsE +cgS +cgS kTt kjD aoY @@ -70893,7 +71840,7 @@ oMs oMs oMs oMs -oMs +fgG uGS uGS ndb @@ -70945,14 +71892,14 @@ nsK "} (160,1,1) = {" cgS -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS jqf jqf jqf @@ -70963,23 +71910,23 @@ jqf qSw lnR laW -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf jqf jqf jqf jqf jqf -xIt -vqi -xIt +cgS +hsE +cgS kjD kjD kjD @@ -70993,7 +71940,7 @@ kjD kjD kjD tzY -cIQ +bzm ilb ilb pKS @@ -71167,14 +72114,14 @@ nsK "} (161,1,1) = {" cgS -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS lnR jqf jqf @@ -71184,23 +72131,23 @@ jqf lnR jqf jqf -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf jqf lnR jqf jqf kjD -vqi +hsE kjD kjD kjD @@ -71301,7 +72248,7 @@ gKW hjw gIY mrh -mrh +oWN mrh mrh mrh @@ -71312,7 +72259,7 @@ cpl dqK xad tdJ -cMK +dsb ijt dtS qQc @@ -71335,7 +72282,7 @@ eWY eWY oMs oMs -oMs +fgG uGS oMs uGS @@ -71389,13 +72336,13 @@ nsK "} (162,1,1) = {" cgS -xIt -xIt -xIt -vqi -xIt -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS +cgS jqf jqf jqf @@ -71404,19 +72351,19 @@ lnR jqf jqf jqf -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf jqf jqf @@ -71507,7 +72454,7 @@ orh nPI tcF wvV -wsk +xDw orh hPB rRB @@ -71519,7 +72466,7 @@ jIb jZM jZM jIb -gKW +bUb hjw mrh dVf @@ -71528,7 +72475,7 @@ mrh mrh uZC mrh -eDl +nUd ejE mrh ewh @@ -71548,7 +72495,7 @@ cnw jum hDw eWY -eWY +iAT eWY udO eWY @@ -71611,12 +72558,12 @@ nsK "} (163,1,1) = {" cgS -xIt -xIt -xIt -vqi -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS jqf lnR jqf @@ -71625,21 +72572,21 @@ drL jqf jqf jqf -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf uLt jqf @@ -71656,8 +72603,8 @@ kjD cpa ihG kjD -xIt -xIt +cgS +cgS tzY tzY ilb @@ -71774,7 +72721,7 @@ eWY eWY eWY eWY -eWY +iAT eWY eWY uGS @@ -71833,12 +72780,12 @@ nsK "} (164,1,1) = {" cgS -xIt -xIt -xIt -vqi -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS jqf jqf jqf @@ -71847,22 +72794,22 @@ jqf jqf jqf jqf -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS jqf kjD aoY @@ -71877,9 +72824,9 @@ kjD kjD tOc kjD -xIt -xIt -xIt +cgS +cgS +cgS tzY cIQ ilb @@ -72055,12 +73002,12 @@ nsK "} (165,1,1) = {" cgS -xIt -xIt -xIt -vqi -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS uLt lnR jqf @@ -72070,22 +73017,22 @@ jqf jqf jqf jqf -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS kjD kjD tOc @@ -72095,13 +73042,13 @@ kjD kjD kjD kjD -xIt -xIt -vqi -xIt -xIt -xIt -xIt +cgS +cgS +hsE +cgS +cgS +cgS +cgS tzY cIQ jIg @@ -72222,7 +73169,7 @@ uGS uGS oMs oMs -uGS +rkH uGS ndb ndb @@ -72277,13 +73224,13 @@ nsK "} (166,1,1) = {" cgS -xIt -xIt -xIt -vqi -xIt -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS +cgS jqf jqf jqf @@ -72292,40 +73239,40 @@ jqf jqf lnR jqf -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS kjD tOc aoY kjD kjD -xIt +cgS kjD -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS cIQ -tzY +sCz jIg ilb pKS @@ -72414,7 +73361,7 @@ kpb kpb kpb kpb -kpb +jGx txr kpb kpb @@ -72432,11 +73379,11 @@ snC snC snC kxd -udO +ofG eWY eWY eWY -uGS +rkH oMs gCM oMs @@ -72499,14 +73446,14 @@ nsK "} (167,1,1) = {" cgS -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS jqf pyu uLt @@ -72514,39 +73461,39 @@ lnR jqf uLt jqf -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS kjD tOc kjD kjD kTt -xIt -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS tzY tyz pKS @@ -72624,11 +73571,11 @@ ayL jIb jIb eux -eux +nAj eux jIb aHb -jIb +ayL bBV rlV wGQ @@ -72721,55 +73668,55 @@ nsK "} (168,1,1) = {" cgS -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS jqf jqf jqf jqf jqf -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS tOc tOc cpa -vqi -vqi -vqi -vqi -vqi -vqi -vqi -xIt -xIt -xIt -xIt -xIt -xIt +hsE +hsE +hsE +hsE +hsE +hsE +hsE +cgS +cgS +cgS +cgS +cgS +cgS ndb ilb pKS @@ -72855,7 +73802,7 @@ dQa bBV jIb jIb -jIb +ayL jIb jIb jIb @@ -72872,7 +73819,7 @@ ndb ndb uGS oMs -oMs +fgG aTr uGS eWY @@ -72884,7 +73831,7 @@ eWY uGS uGS oMs -eWY +iAT oMs uGS oMs @@ -72943,55 +73890,55 @@ nsK "} (169,1,1) = {" cgS -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS jqf jqf jqf -xIt -xIt -xIt -xIt -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ndb ndb pKS @@ -73109,7 +74056,7 @@ eWY eWY eWY eWY -oMs +fgG ndb ndb ndb @@ -73165,55 +74112,55 @@ nsK "} (170,1,1) = {" cgS -xIt -xIt -xIt -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -vqi -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +hsE +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ndb pKS pKS @@ -73304,7 +74251,7 @@ jIb jIb jIb jaT -jIb +ayL jIb ndb ndb @@ -73324,7 +74271,7 @@ udO eWY eWY eWY -oMs +fgG ndb ndb ndb @@ -73387,55 +74334,55 @@ nsK "} (171,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ndb ndb ndb @@ -73541,7 +74488,7 @@ ndb ndb uGS uGS -uGS +rkH eWY eWY eWY @@ -73609,55 +74556,55 @@ nsK "} (172,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ndb ndb ndb @@ -73744,7 +74691,7 @@ ndb ndb jIb jIb -jIb +ayL jIb jhc jIb @@ -73831,55 +74778,55 @@ nsK "} (173,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ndb ndb ndb @@ -74053,55 +75000,55 @@ nsK "} (174,1,1) = {" cgS -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt -xIt +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS ndb ndb ndb diff --git a/_maps/map_files/generic/Admin_Level.dmm b/_maps/map_files/generic/Admin_Level.dmm index 2b1d7ecf6e98c..ab23a08c343a1 100644 --- a/_maps/map_files/generic/Admin_Level.dmm +++ b/_maps/map_files/generic/Admin_Level.dmm @@ -1156,9 +1156,6 @@ "box" = ( /turf/closed/wall/r_wall/unmeltable, /area/centcom/valhalla) -"boB" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "boC" = ( /turf/closed/mineral/smooth, /area/centcom/valhalla/xenocave) @@ -1170,9 +1167,6 @@ /obj/machinery/marine_selector/gear/medic/valhalla, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"brs" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "bsX" = ( /obj/machinery/firealarm{ dir = 4 @@ -1238,9 +1232,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"bAx" = ( -/turf/closed/wall, -/area/centcom/valhalla) "bAZ" = ( /obj/structure/noticeboard{ dir = 1; @@ -1652,25 +1643,6 @@ /obj/effect/ai_node, /turf/open/floor/mainship/sterile/side, /area/centcom/valhalla) -"cdQ" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/shower{ - pixel_y = 16 - }, -/obj/structure/curtain, -/obj/machinery/door/window{ - name = "Shower" - }, -/obj/effect/spawner/random/misc/soap/regularweighted, -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/mainship/sterile/white, -/area/centcom/valhalla) -"ceH" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/tile/dark, -/area/centcom/valhalla) "cfQ" = ( /obj/machinery/status_display/ai, /turf/closed/wall, @@ -1717,10 +1689,6 @@ /obj/effect/turf_decal/warning_stripes/box/empty, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"ckK" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/dark, -/area/centcom/valhalla) "ckN" = ( /turf/open/floor/tile/vault{ dir = 5 @@ -2013,11 +1981,6 @@ dir = 5 }, /area/centcom/valhalla) -"cBF" = ( -/turf/open/floor/carpet/side{ - dir = 5 - }, -/area/centcom/valhalla) "cCa" = ( /obj/item/radio/intercom{ dir = 8; @@ -2049,12 +2012,6 @@ dir = 5 }, /area/centcom/valhalla) -"cDn" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) "cDG" = ( /obj/machinery/status_display/ai, /turf/closed/wall/r_wall, @@ -2106,9 +2063,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"cGB" = ( -/turf/closed/wall/r_wall, -/area/centcom/valhalla) "cHk" = ( /obj/structure/bed, /obj/machinery/atmospherics/components/unary/vent_pump/on, @@ -2188,12 +2142,6 @@ }, /turf/open/floor/tile/neutral/full, /area/centcom/valhalla) -"cKo" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/turf/open/floor/plating, -/area/centcom/valhalla) "cMM" = ( /obj/structure/mirror{ dir = 4; @@ -2236,9 +2184,6 @@ /obj/structure/sign/nosmoking_1, /turf/closed/wall, /area/centcom/valhalla) -"cPT" = ( -/turf/open/floor/grimy, -/area/centcom/valhalla) "cQa" = ( /obj/effect/ai_node, /turf/open/floor/grimy, @@ -2428,10 +2373,6 @@ dir = 5 }, /area/centcom/valhalla) -"dbM" = ( -/obj/effect/ai_node, -/turf/open/floor/wood, -/area/centcom/valhalla) "dcs" = ( /obj/structure/mirror{ dir = 8; @@ -2498,12 +2439,6 @@ /obj/effect/ai_node, /turf/open/floor/tile/neutral/full, /area/centcom/valhalla) -"diX" = ( -/obj/item/storage/secure/safe{ - pixel_y = -6 - }, -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "dkn" = ( /obj/item/radio/intercom{ broadcasting = 1; @@ -2537,10 +2472,6 @@ /obj/structure/window/framed/colony/reinforced, /turf/open/floor/plating, /area/centcom/valhalla) -"dnH" = ( -/obj/machinery/door/airlock/mainship/generic/bathroom, -/turf/open/floor/mainship/sterile/white, -/area/centcom/valhalla) "dnY" = ( /turf/open/floor/carpet/side, /area/centcom/valhalla) @@ -2550,18 +2481,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"doK" = ( -/obj/structure/mirror{ - dir = 8; - pixel_x = 26 - }, -/obj/structure/sink{ - dir = 4; - pixel_x = 12 - }, -/obj/effect/ai_node, -/turf/open/floor/mainship/sterile/white, -/area/centcom/valhalla) "doS" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/warning_stripes/thick{ @@ -2619,6 +2538,13 @@ dir = 5 }, /area/tdome/tdomeobserve) +"drL" = ( +/obj/structure/window/reinforced/extratoughened{ + dir = 1 + }, +/obj/machinery/chem_master/nopower/valhalla, +/turf/open/floor/tile/dark/gray, +/area/centcom/valhalla) "drS" = ( /turf/open/floor/plating/dmg1, /area/centcom/valhalla) @@ -2644,16 +2570,6 @@ }, /turf/open/floor/mainship/sterile/white, /area/centcom/valhalla) -"dtV" = ( -/turf/closed/wall, -/area/centcom/valhalla) -"duo" = ( -/obj/structure/window/reinforced/extratoughened{ - dir = 1 - }, -/obj/machinery/chem_master/nopower/valhalla, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla/exterior) "dur" = ( /obj/effect/turf_decal/warning_stripes/thick, /obj/machinery/button/valhalla/marine_button{ @@ -2661,9 +2577,6 @@ }, /turf/open/floor/mainship/stripesquare, /area/centcom/valhalla) -"dve" = ( -/turf/closed/wall, -/area/centcom/valhalla) "dwX" = ( /obj/structure/filingcabinet, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -2677,13 +2590,6 @@ }, /turf/open/floor/wood, /area/centcom/valhalla) -"dxV" = ( -/turf/open/floor/wood, -/area/centcom/valhalla) -"dxX" = ( -/obj/machinery/status_display/ai, -/turf/closed/wall, -/area/centcom/valhalla) "dxY" = ( /obj/structure/bedsheetbin, /turf/open/floor/wood, @@ -2819,12 +2725,6 @@ /obj/structure/window/framed/colony/reinforced, /turf/open/floor/plating, /area/centcom/valhalla) -"dEO" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 10 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "dFm" = ( /obj/effect/turf_decal/tile/red{ dir = 1 @@ -2874,10 +2774,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"dGD" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "dHm" = ( /obj/structure/table, /obj/structure/mirror{ @@ -2897,25 +2793,16 @@ }, /area/centcom/valhalla) "dHM" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 +/obj/item/toy/prize/mauler{ + pixel_y = 16 }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ - pixel_x = 1; - pixel_y = 15 +/obj/item/toy/prize/seraph{ + pixel_x = 6; + pixel_y = 10 }, /obj/structure/table/fancywoodentable, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ - pixel_x = 9; - pixel_y = 15 - }, -/obj/item/storage/fancy/cigar, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"dHZ" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "dIg" = ( /obj/machinery/light_switch{ pixel_x = -8; @@ -3000,14 +2887,6 @@ dir = 5 }, /area/centcom/valhalla) -"dJw" = ( -/obj/machinery/status_display/ai, -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) -"dLi" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "dMC" = ( /obj/structure/bed/chair/office/dark{ dir = 4 @@ -3274,10 +3153,6 @@ /obj/item/restraints/handcuffs, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"dXp" = ( -/obj/effect/ai_node, -/turf/open/floor/wood, -/area/centcom/valhalla) "dXq" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -3287,12 +3162,6 @@ }, /turf/open/floor/mainship/sterile/dark, /area/centcom/valhalla) -"dYw" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/turf/open/floor/wood, -/area/centcom/valhalla) "dZC" = ( /obj/effect/ai_node, /turf/open/floor/tile/neutral{ @@ -3326,17 +3195,6 @@ /obj/structure/prop/mainship/suit_storage_prop, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"ebZ" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/suit/apron, -/obj/item/tool/kitchen/rollingpin, -/turf/open/floor/mainship/sterile/white, -/area/centcom/valhalla) -"ecT" = ( -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) "ecW" = ( /obj/machinery/door_control/unmeltable{ dir = 4; @@ -3481,10 +3339,6 @@ dir = 1 }, /area/centcom/valhalla) -"ete" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "etk" = ( /obj/structure/table, /obj/item/storage/box/pillbottles{ @@ -3535,11 +3389,6 @@ dir = 4 }, /area/centcom/valhalla) -"evv" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 4 - }, -/area/centcom/valhalla) "evE" = ( /obj/machinery/camera/autoname/thunderdome/hidden, /turf/open/floor/tile/blue/taupeblue{ @@ -3661,9 +3510,6 @@ }, /turf/open/floor/grimy, /area/centcom/valhalla) -"eHe" = ( -/turf/open/floor/grimy, -/area/centcom/valhalla) "eIy" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/green{ @@ -3690,9 +3536,6 @@ }, /turf/open/floor/tile/red/yellowfull, /area/tdome/tdomeadmin) -"eMT" = ( -/turf/open/floor/plating/dmg1, -/area/centcom/valhalla) "eNk" = ( /obj/machinery/computer/med_data{ dir = 8 @@ -3711,21 +3554,6 @@ /obj/effect/ai_node, /turf/open/floor/plating, /area/centcom/valhalla) -"eNS" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/shower{ - pixel_y = 16 - }, -/obj/structure/curtain, -/obj/machinery/door/window{ - name = "Shower" - }, -/obj/effect/spawner/random/misc/soap/regularweighted, -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/mainship/sterile/white, -/area/centcom/valhalla) "eOJ" = ( /obj/machinery/hydroponics, /obj/effect/turf_decal/warning_stripes/thick{ @@ -3733,9 +3561,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"ePj" = ( -/turf/open/floor/tile/dark, -/area/centcom/valhalla) "ePE" = ( /obj/structure/bed/stool, /turf/open/floor/wood, @@ -3759,11 +3584,6 @@ /obj/effect/turf_decal/warning_stripes/thick, /turf/open/floor/tile/lightred, /area/centcom/valhalla) -"eQI" = ( -/turf/open/floor/carpet/side{ - dir = 1 - }, -/area/centcom/valhalla) "eRd" = ( /obj/structure/table, /obj/item/flashlight/lamp/green, @@ -3933,9 +3753,6 @@ /obj/structure/window/framed/colony/reinforced, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"fbp" = ( -/turf/open/floor/plating, -/area/centcom/valhalla) "fbQ" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/warning_stripes/thick{ @@ -4121,18 +3938,6 @@ /obj/machinery/camera/autoname/thunderdome/hidden, /turf/open/floor/plating, /area/tdome/tdome1) -"fqV" = ( -/obj/machinery/door/airlock/external{ - name = "External Docking Port" - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/turf/open/floor/plating, -/area/centcom/valhalla) "frZ" = ( /obj/machinery/door/airlock/mainship/marine/general/sl{ dir = 3 @@ -4188,15 +3993,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"fvU" = ( -/turf/open/floor/plating/dmg2, -/area/centcom/valhalla) -"fwP" = ( -/obj/structure/sign/securearea{ - dir = 1 - }, -/turf/closed/wall/r_wall, -/area/centcom/valhalla) "fwS" = ( /obj/structure/table, /obj/effect/spawner/random/misc/paperbin, @@ -4274,10 +4070,6 @@ dir = 5 }, /area/centcom/valhalla) -"fDX" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "fEt" = ( /obj/effect/turf_decal/warning_stripes/thick/corner{ dir = 8 @@ -4309,15 +4101,6 @@ /obj/effect/turf_decal/warning_stripes/box/empty, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"fHH" = ( -/obj/effect/turf_decal/warning_stripes/box, -/obj/machinery/vending/snack/nopower, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"fHO" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/neutral/corner, -/area/centcom/valhalla) "fIC" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/turf_decal/warning_stripes/thick{ @@ -4325,17 +4108,6 @@ }, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"fIF" = ( -/obj/machinery/newscaster{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/centcom/valhalla) -"fJY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/ai_node, -/turf/open/floor/plating, -/area/centcom/valhalla) "fKz" = ( /obj/structure/bedsheetbin, /obj/structure/extinguisher_cabinet, @@ -4360,10 +4132,6 @@ /obj/machinery/vending/cola/nopower, /turf/open/floor/tile/cafe, /area/centcom/valhalla) -"fKS" = ( -/obj/effect/turf_decal/warning_stripes/box/empty, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "fKX" = ( /obj/structure/closet/cabinet, /turf/open/floor/wood/broken, @@ -4374,10 +4142,6 @@ }, /turf/open/floor/tile/neutral/full, /area/centcom/valhalla) -"fLm" = ( -/obj/structure/window/framed/colony/reinforced/hull, -/turf/open/floor/plating, -/area/centcom/valhalla) "fLA" = ( /obj/structure/closet/secure_closet/freezer/meat, /turf/open/floor/tile/white, @@ -4477,9 +4241,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor, /area/tdome) -"fPe" = ( -/turf/closed/wall, -/area/centcom/valhalla) "fPm" = ( /obj/item/stack/cable_coil, /obj/effect/turf_decal/tile/red{ @@ -4515,10 +4276,6 @@ /obj/effect/spawner/random/clothing/sunglasses, /turf/open/floor/grimy, /area/centcom/valhalla) -"fSc" = ( -/obj/structure/window/framed/colony/reinforced/hull, -/turf/open/floor/plating, -/area/centcom/valhalla) "fSA" = ( /obj/structure/bed/chair/office/dark, /obj/machinery/light_switch{ @@ -4617,10 +4374,6 @@ /obj/structure/bedsheetbin, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"fZE" = ( -/obj/structure/window/framed/colony/reinforced/hull, -/turf/open/floor/plating, -/area/centcom/valhalla) "fZG" = ( /obj/machinery/newscaster{ dir = 4 @@ -4680,10 +4433,6 @@ /obj/effect/spawner/random/weaponry/melee, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"ger" = ( -/obj/structure/sign/nosmoking_1, -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "geA" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -4860,12 +4609,6 @@ dir = 8 }, /area/centcom/valhalla) -"gnR" = ( -/obj/effect/turf_decal/warning_stripes/thick/corner{ - dir = 8 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "god" = ( /turf/open/floor/carpet/side{ dir = 9 @@ -4884,15 +4627,6 @@ dir = 6 }, /area/centcom/valhalla) -"gpt" = ( -/turf/closed/wall/r_wall, -/area/centcom/valhalla) -"gqM" = ( -/obj/machinery/newscaster{ - dir = 4 - }, -/turf/closed/wall, -/area/centcom/valhalla) "gri" = ( /obj/machinery/firealarm{ dir = 1 @@ -4930,9 +4664,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"gtc" = ( -/turf/open/floor/tile/dark, -/area/centcom/valhalla) "gtN" = ( /obj/machinery/firealarm{ dir = 1 @@ -5005,22 +4736,9 @@ /turf/open/floor/plating, /area/centcom/valhalla) "gzY" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, +/obj/machinery/quick_vendor/beginner, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"gAA" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) "gAL" = ( /obj/effect/turf_decal/warning_stripes/thick, /turf/open/floor/tile/lightred, @@ -5035,9 +4753,6 @@ /obj/effect/landmark/thunderdome/two, /turf/open/floor/plating, /area/tdome/tdome2) -"gCo" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "gCr" = ( /obj/structure/sign/securearea/firingrange, /turf/open/floor/plating, @@ -5212,13 +4927,6 @@ /obj/effect/ai_node, /turf/open/floor/freezer, /area/centcom/valhalla) -"gKo" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) -"gKR" = ( -/turf/open/floor/tile/neutral/full, -/area/centcom/valhalla) "gMd" = ( /obj/structure/closet/crate, /obj/machinery/status_display{ @@ -5297,9 +5005,6 @@ /obj/effect/turf_decal/warning_stripes/box/empty, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"gQL" = ( -/turf/closed/wall, -/area/centcom/valhalla) "gUo" = ( /obj/structure/bed/chair{ dir = 8 @@ -5349,15 +5054,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"hag" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "haq" = ( /obj/structure/table, /obj/machinery/firealarm{ @@ -5408,15 +5104,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/scorched, /area/centcom/valhalla) -"hdP" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"hec" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "heB" = ( /obj/machinery/button/valhalla/xeno_button{ link = "marineleft" @@ -5492,9 +5179,6 @@ dir = 5 }, /area/centcom/valhalla) -"hiF" = ( -/turf/closed/wall/r_wall, -/area/centcom/valhalla) "hjG" = ( /obj/structure/table/reinforced, /obj/item/clothing/gloves/insulated, @@ -5629,6 +5313,13 @@ "hrC" = ( /turf/open/floor/wood/broken, /area/centcom/valhalla) +"htj" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/sign/nosmoking_1, +/turf/open/floor/tile/dark/gray, +/area/centcom/valhalla) "htq" = ( /obj/structure/table/reinforced, /obj/item/folder/yellow, @@ -5884,10 +5575,6 @@ /obj/item/tool/pen, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"hNt" = ( -/obj/effect/turf_decal/warning_stripes/box, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "hNU" = ( /obj/machinery/air_alarm{ dir = 4 @@ -5899,10 +5586,6 @@ dir = 8 }, /area/centcom/valhalla) -"hOc" = ( -/obj/machinery/newscaster, -/turf/closed/wall, -/area/centcom/valhalla) "hOK" = ( /obj/item/radio/intercom{ name = "Station Intercom" @@ -5940,28 +5623,12 @@ dir = 5 }, /area/centcom/valhalla) -"hOX" = ( -/obj/effect/turf_decal/warning_stripes/thick/corner{ - dir = 4 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "hPu" = ( /obj/machinery/firealarm, /turf/open/floor/tile/neutral/corner{ dir = 1 }, /area/centcom/valhalla) -"hQT" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "hRa" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 4 @@ -5998,9 +5665,6 @@ /obj/item/reagent_containers/food/snacks/chips, /turf/open/floor/grimy, /area/centcom/valhalla) -"hTv" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "hTO" = ( /obj/effect/turf_decal/tile/brown{ dir = 8 @@ -6028,6 +5692,22 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) +"hWD" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/suit/wizrobe/red, +/obj/item/clothing/suit/wizrobe/psypurple, +/obj/item/clothing/suit/wizrobe/magusred, +/obj/item/clothing/suit/storage/wizrobe/gentlecoat, +/obj/item/clothing/suit/wizrobe, +/obj/item/clothing/head/wizard/amp, +/obj/item/clothing/head/wizard/cap, +/obj/item/clothing/head/wizard/magus, +/obj/item/clothing/head/wizard/marisa, +/obj/item/clothing/head/wizard/red, +/turf/open/floor/tile/vault{ + dir = 5 + }, +/area/centcom/valhalla) "hXf" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 8 @@ -6110,18 +5790,6 @@ /obj/item/book/manual/orbital_cannon_manual, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"icr" = ( -/turf/open/floor/grimy, -/area/centcom/valhalla) -"ics" = ( -/obj/structure/sign/securearea{ - dir = 1 - }, -/turf/closed/wall, -/area/centcom/valhalla) -"icW" = ( -/turf/open/floor/plating/dmg1, -/area/centcom/valhalla) "idh" = ( /obj/machinery/hydroponics, /obj/machinery/firealarm{ @@ -6137,7 +5805,7 @@ /obj/item/stack/sheet/metal{ amount = 30 }, -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 30 }, /obj/effect/turf_decal/warning_stripes/thick, @@ -6210,19 +5878,6 @@ }, /turf/open/floor/mainship/sterile, /area/centcom/valhalla) -"ior" = ( -/obj/machinery/door/firedoor{ - dir = 2 - }, -/obj/effect/turf_decal/warning_stripes/thick, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/obj/machinery/door/airlock/mainship/security/free_access{ - dir = 1 - }, -/turf/open/floor/plating, -/area/centcom/valhalla) "ioO" = ( /obj/structure/table/reinforced, /obj/item/folder/red, @@ -6243,11 +5898,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"ipc" = ( -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) "ipl" = ( /obj/structure/reagent_dispensers/watertank, /obj/item/reagent_containers/glass/bucket, @@ -6287,14 +5937,6 @@ /obj/effect/ai_node, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"irn" = ( -/obj/structure/sign/doors{ - desc = "A sign that shows there are doors here. There are doors everywhere!"; - name = "WARNING: EXTERNAL AIRLOCK" - }, -/obj/structure/window/framed/colony/reinforced/hull, -/turf/open/floor/plating, -/area/centcom/valhalla) "isj" = ( /obj/structure/table/reinforced, /obj/machinery/recharger/nopower, @@ -6359,11 +6001,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"ivQ" = ( -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) "iwk" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/external{ @@ -6494,12 +6131,6 @@ dir = 6 }, /area/centcom/valhalla) -"iHu" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/neutral/corner{ - dir = 8 - }, -/area/centcom/valhalla) "iHX" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /obj/effect/turf_decal/tile/pink{ @@ -6549,16 +6180,6 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/tile/dark2, /area/centcom/valhalla) -"iKO" = ( -/obj/effect/turf_decal/warning_stripes/thick/corner{ - dir = 8 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"iKV" = ( -/obj/effect/turf_decal/warning_stripes/thick, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "iMw" = ( /obj/structure/rack, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, @@ -6589,12 +6210,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"iPn" = ( -/obj/effect/turf_decal/warning_stripes/thick/corner{ - dir = 4 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "iQN" = ( /obj/structure/closet, /obj/effect/turf_decal/warning_stripes/thick{ @@ -6656,10 +6271,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"iVx" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/dark, -/area/centcom/valhalla) "iWr" = ( /obj/machinery/door/firedoor{ dir = 2 @@ -6686,12 +6297,6 @@ /obj/effect/ai_node, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"iZc" = ( -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"iZD" = ( -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "iZT" = ( /obj/machinery/computer/security/telescreen, /obj/structure/table, @@ -6780,10 +6385,6 @@ /obj/machinery/bot/roomba/valhalla, /turf/open/floor/tile/neutral/full, /area/centcom/valhalla) -"jdQ" = ( -/obj/machinery/status_display/ai, -/turf/closed/wall, -/area/centcom/valhalla) "jdS" = ( /obj/structure/bed/chair{ dir = 8 @@ -6804,21 +6405,12 @@ /obj/machinery/door/airlock/prison/horizontal, /turf/open/floor/plating, /area/centcom/valhalla) -"jeH" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 4 - }, -/area/centcom/valhalla) "jfk" = ( /obj/structure/table/reinforced, /obj/item/clothing/gloves/insulated, /obj/item/storage/box/lights/mixed, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"jgQ" = ( -/obj/structure/plasticflaps, -/turf/open/floor/plating, -/area/centcom/valhalla) "jhC" = ( /obj/machinery/status_display{ pixel_y = -32 @@ -6837,13 +6429,6 @@ /obj/machinery/gibber/nopower, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"jiU" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "jkk" = ( /obj/structure/window/reinforced{ dir = 8 @@ -6871,16 +6456,6 @@ }, /turf/open/floor/tile/red/redblue/full, /area/tdome/tdomeobserve) -"jlC" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"jlF" = ( -/obj/effect/turf_decal/warning_stripes/box, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "jnb" = ( /obj/structure/extinguisher_cabinet{ dir = 4 @@ -6899,19 +6474,6 @@ }, /turf/closed/wall, /area/centcom/valhalla) -"jow" = ( -/obj/machinery/door/firedoor{ - dir = 2 - }, -/obj/effect/turf_decal/warning_stripes/thick, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/obj/machinery/door/airlock/mainship/command/free_access{ - dir = 2 - }, -/turf/open/floor/plating, -/area/centcom/valhalla) "joH" = ( /obj/machinery/door/firedoor{ dir = 2 @@ -7005,14 +6567,6 @@ /obj/item/stack/medical/heal_pack/ointment, /turf/open/floor/tile/red/yellowfull, /area/tdome/tdomeadmin) -"jrN" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/scorched, -/area/centcom/valhalla) -"jrR" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "jsn" = ( /obj/machinery/computer/atmoscontrol{ dir = 1 @@ -7036,10 +6590,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"jtw" = ( -/obj/structure/girder, -/turf/open/floor/plating, -/area/centcom/valhalla) "jtz" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/green{ @@ -7083,17 +6633,6 @@ }, /turf/open/floor/mainship/stripesquare, /area/centcom/valhalla) -"jwi" = ( -/obj/effect/turf_decal/tile/red, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"jxj" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/effect/turf_decal/warning_stripes/box/empty, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "jxN" = ( /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ @@ -7186,10 +6725,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"jAQ" = ( -/obj/effect/turf_decal/warning_stripes/thick, -/turf/open/floor/plating, -/area/centcom/valhalla) "jBW" = ( /obj/vehicle/ridden/wheelchair{ dir = 4 @@ -7289,9 +6824,6 @@ dir = 1 }, /area/centcom/valhalla) -"jID" = ( -/turf/closed/wall, -/area/centcom/valhalla) "jJz" = ( /obj/structure/extinguisher_cabinet{ dir = 8 @@ -7303,10 +6835,6 @@ dir = 4 }, /area/centcom/valhalla) -"jJC" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "jKc" = ( /obj/structure/rack, /obj/effect/turf_decal/warning_stripes/thick{ @@ -7403,22 +6931,6 @@ }, /turf/open/floor/freezer, /area/centcom/valhalla) -"jRm" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"jRW" = ( -/obj/effect/turf_decal/warning_stripes/thick, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/obj/machinery/door/airlock/mainship/maint/free_access{ - dir = 1 - }, -/turf/open/floor/plating, -/area/centcom/valhalla) "jTw" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 8 @@ -7432,10 +6944,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"jTH" = ( -/obj/machinery/status_display, -/turf/closed/wall, -/area/centcom/valhalla) "jUa" = ( /obj/structure/table/reinforced, /obj/machinery/smartfridge/chemistry/nopower, @@ -7449,10 +6957,6 @@ }, /turf/open/floor/mainship/sterile, /area/centcom/valhalla) -"jVB" = ( -/obj/effect/turf_decal/warning_stripes/box/empty, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "jWe" = ( /obj/machinery/vending/dinnerware, /obj/machinery/door_control/unmeltable{ @@ -7503,7 +7007,7 @@ "jXn" = ( /obj/structure/table/reinforced, /obj/item/stack/sheet/metal/large_stack, -/obj/item/stack/sheet/glass/large_stack, +/obj/item/stack/sheet/glass/glass/large_stack, /obj/item/stack/rods, /obj/item/cell/high, /obj/item/cell/high, @@ -7536,16 +7040,9 @@ dir = 1 }, /area/centcom/valhalla) -"jYh" = ( -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "jYG" = ( /turf/closed/mineral/smooth, /area/space) -"jYM" = ( -/turf/closed/wall, -/area/centcom/valhalla) "jYN" = ( /obj/structure/table/woodentable, /obj/item/reagent_containers/food/snacks/soup/ricepudding, @@ -7731,10 +7228,6 @@ dir = 4 }, /area/centcom/valhalla) -"kgI" = ( -/obj/structure/sign/vacuum, -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "kgL" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/decal/cleanable/blood/oil, @@ -7775,12 +7268,6 @@ dir = 5 }, /area/centcom/valhalla) -"klg" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) "kmb" = ( /obj/item/toy/plush/rouny, /turf/open/floor/plating/ground/mars/random/cave, @@ -7884,10 +7371,6 @@ /obj/structure/table/reinforced, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"krz" = ( -/obj/machinery/status_display, -/turf/closed/wall, -/area/centcom/valhalla) "krG" = ( /obj/effect/turf_decal/tile/gray{ dir = 1 @@ -7910,30 +7393,12 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"krR" = ( -/turf/open/floor/freezer, -/area/centcom/valhalla) -"ksv" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "ksY" = ( /obj/machinery/air_alarm{ dir = 1 }, /turf/open/floor/freezer, /area/centcom/valhalla) -"kuc" = ( -/obj/effect/turf_decal/tile/black{ - dir = 4 - }, -/obj/effect/turf_decal/tile/black{ - dir = 8 - }, -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) "kuq" = ( /obj/effect/decal/cleanable/blood/oil, /obj/structure/closet/crate, @@ -7978,15 +7443,6 @@ }, /turf/open/floor/tile/white/hall/full, /area/centcom/valhalla) -"kyR" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/white{ - dir = 1 - }, -/turf/open/floor/tile/neutral{ - dir = 1 - }, -/area/centcom/valhalla) "kyU" = ( /obj/structure/table/reinforced, /obj/item/stack/cable_coil, @@ -8006,12 +7462,6 @@ dir = 5 }, /area/centcom/valhalla) -"kBQ" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "kCa" = ( /obj/machinery/teleport/hub, /obj/effect/turf_decal/tile/black{ @@ -8024,9 +7474,6 @@ dir = 5 }, /area/centcom/valhalla) -"kCb" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "kCL" = ( /obj/machinery/vending/snack, /obj/structure/sign/securearea{ @@ -8045,10 +7492,6 @@ /obj/structure/bed/stool, /turf/open/floor/plating, /area/centcom/valhalla) -"kDw" = ( -/obj/structure/sign/electricshock, -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "kDS" = ( /obj/structure/sink{ dir = 8; @@ -8103,18 +7546,8 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"kGn" = ( -/obj/effect/turf_decal/warning_stripes/thick, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/obj/machinery/door/airlock/mainship/maint/free_access{ - dir = 1 - }, -/turf/open/floor/plating, -/area/centcom/valhalla) -"kGq" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +"kGq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, /obj/effect/turf_decal/warning_stripes/thick{ @@ -8153,12 +7586,6 @@ /obj/item/tool/stamp/qm, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"kJK" = ( -/obj/machinery/newscaster{ - dir = 4 - }, -/turf/closed/wall, -/area/centcom/valhalla) "kKa" = ( /obj/machinery/vending/valhalla_req, /obj/structure/window/reinforced{ @@ -8177,16 +7604,6 @@ /obj/structure/window, /turf/open/floor/grass, /area/centcom/valhalla) -"kLu" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/neutral/full, -/area/centcom/valhalla) -"kLI" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) "kME" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/warning_stripes/thick{ @@ -8219,10 +7636,6 @@ /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/mars/random/cave, /area/centcom/valhalla/xenocave) -"kPi" = ( -/obj/machinery/newscaster, -/turf/closed/wall, -/area/centcom/valhalla) "kPj" = ( /obj/effect/turf_decal/sandytile/sandyplating, /turf/open/floor/plating/ironsand, @@ -8265,10 +7678,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"kQR" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "kRr" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 4 @@ -8297,10 +7706,6 @@ /obj/item/ammo_magazine/revolver/mateba, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"kWn" = ( -/obj/effect/turf_decal/warning_stripes/thick, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "kWX" = ( /obj/effect/turf_decal/warning_stripes/thick, /obj/machinery/hydroponics, @@ -8351,10 +7756,6 @@ /obj/effect/spawner/random/misc/trash, /turf/open/floor/plating, /area/centcom/valhalla) -"lce" = ( -/obj/effect/ai_node, -/turf/open/floor/plating, -/area/centcom/valhalla) "lcR" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 @@ -8414,9 +7815,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/dmg1, /area/centcom/valhalla) -"lgU" = ( -/turf/closed/wall, -/area/centcom/valhalla) "lhE" = ( /obj/machinery/door/firedoor, /obj/structure/table/reinforced, @@ -8448,11 +7846,6 @@ dir = 1 }, /area/centcom/valhalla) -"ljc" = ( -/turf/open/floor/tile/brown{ - dir = 4 - }, -/area/centcom/valhalla) "ljt" = ( /obj/structure/sign/fixedinplace/command{ dir = 1; @@ -8466,31 +7859,6 @@ }, /turf/closed/wall, /area/centcom/valhalla) -"lkM" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/white{ - dir = 4 - }, -/turf/open/floor/tile/neutral, -/area/centcom/valhalla) -"llp" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"llJ" = ( -/obj/machinery/door/firedoor{ - dir = 2 - }, -/obj/effect/turf_decal/warning_stripes/thick, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "llS" = ( /obj/structure/table, /obj/item/storage/pill_bottle/dice, @@ -8499,10 +7867,6 @@ }, /turf/open/floor/marking/bot, /area/centcom/valhalla) -"llU" = ( -/obj/effect/turf_decal/warning_stripes/box/empty, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "lmc" = ( /obj/machinery/door/firedoor{ dir = 2 @@ -8595,9 +7959,6 @@ /obj/structure/closet/secure_closet/bar, /turf/open/floor/tile/white, /area/tdome/tdomeobserve) -"loD" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "lpv" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/warning_stripes/thick{ @@ -8611,10 +7972,6 @@ }, /turf/open/floor/mainship/sterile/dark, /area/centcom/valhalla) -"lqk" = ( -/obj/effect/turf_decal/warning_stripes/box/empty, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "lqn" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/green{ @@ -8622,9 +7979,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"lqw" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "lri" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/tile/black{ @@ -8733,10 +8087,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"lAU" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "lDM" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -8767,10 +8117,6 @@ /obj/effect/turf_decal/sandytile/sandyplating, /turf/open/floor/plating, /area/space) -"lEZ" = ( -/obj/machinery/status_display/ai, -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "lFj" = ( /obj/machinery/door/airlock/mainship/maint{ dir = 3; @@ -8783,16 +8129,6 @@ /obj/item/storage/donut_box, /turf/open/floor/grimy, /area/centcom/valhalla) -"lGH" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) -"lIl" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 9 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "lIC" = ( /turf/closed/wall/mainship, /area/tdome) @@ -8842,26 +8178,6 @@ /obj/item/flashlight, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"lMh" = ( -/obj/machinery/door/firedoor{ - dir = 2 - }, -/obj/effect/turf_decal/warning_stripes/thick, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/obj/machinery/door/airlock/mainship/command/free_access{ - dir = 2 - }, -/turf/open/floor/plating, -/area/centcom/valhalla) -"lMJ" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 10 - }, -/turf/open/floor/plating, -/area/centcom/valhalla) "lMV" = ( /obj/effect/turf_decal/warning_stripes/thick/corner{ dir = 4 @@ -8941,10 +8257,6 @@ /obj/effect/turf_decal/warning_stripes/box/empty, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"lSb" = ( -/obj/machinery/newscaster, -/turf/closed/wall, -/area/centcom/valhalla) "lTP" = ( /obj/structure/table/reinforced, /obj/item/clothing/suit/radiation, @@ -9025,10 +8337,6 @@ /obj/machinery/vending/cola/nopower, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"mbn" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/centcom/valhalla) "mbs" = ( /obj/structure/table, /obj/item/folder/white, @@ -9038,14 +8346,6 @@ /obj/item/tweezers, /turf/open/floor/mainship/sterile/side, /area/centcom/valhalla) -"mbJ" = ( -/obj/machinery/status_display, -/turf/closed/wall, -/area/centcom/valhalla) -"mbY" = ( -/obj/structure/sign/nosmoking_1, -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "mcf" = ( /obj/effect/turf_decal/warning_stripes/box/small{ dir = 1 @@ -9165,11 +8465,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"mhC" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 1 - }, -/area/centcom/valhalla) "mhD" = ( /obj/machinery/door/firedoor{ dir = 2 @@ -9189,19 +8484,6 @@ /obj/effect/mapping_helpers/airlock/locked, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"mhM" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 5 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"mhP" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/neutral/full, -/area/centcom/valhalla) -"mid" = ( -/turf/open/floor/plating/dmg2, -/area/centcom/valhalla) "mjv" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -9212,14 +8494,6 @@ /obj/effect/turf_decal/warning_stripes/box/empty, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"mjw" = ( -/turf/closed/wall, -/area/centcom/valhalla) -"mjI" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 4 - }, -/area/centcom/valhalla) "mln" = ( /obj/structure/window/reinforced{ dir = 4 @@ -9251,22 +8525,6 @@ }, /turf/open/floor/tile/red/yellowfull, /area/tdome/tdomeadmin) -"mnp" = ( -/obj/item/tank/oxygen/red, -/obj/structure/dispenser, -/obj/effect/turf_decal/warning_stripes/box, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"moJ" = ( -/obj/effect/turf_decal/warning_stripes/thick, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/obj/machinery/door/airlock/mainship/maint/free_access{ - dir = 1 - }, -/turf/open/floor/plating, -/area/centcom/valhalla) "moR" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 4 @@ -9324,18 +8582,6 @@ /obj/effect/turf_decal/tile/green, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"muO" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) -"mvm" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/neutral/corner{ - dir = 8 - }, -/area/centcom/valhalla) -"mvn" = ( -/turf/closed/wall/r_wall, -/area/centcom/valhalla) "mwU" = ( /obj/structure/bookcase, /obj/item/book/manual/supermatter_engine, @@ -9352,10 +8598,6 @@ /obj/machinery/recharger/nopower, /turf/open/floor/mainship/sterile/side, /area/centcom/valhalla) -"mxn" = ( -/obj/machinery/newscaster, -/turf/closed/wall, -/area/centcom/valhalla) "mxw" = ( /obj/machinery/nuclearbomb{ dir = 8 @@ -9404,9 +8646,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"mCH" = ( -/turf/open/floor/plating, -/area/centcom/valhalla) "mCI" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 8 @@ -9429,9 +8668,6 @@ dir = 1 }, /area/centcom/valhalla) -"mDO" = ( -/turf/closed/wall/r_wall, -/area/centcom/valhalla) "mEa" = ( /obj/structure/extinguisher_cabinet{ dir = 1 @@ -9464,26 +8700,10 @@ /obj/structure/flora/ausbushes/ywflowers, /turf/open/floor/grass, /area/centcom/valhalla) -"mEV" = ( -/obj/machinery/newscaster{ - dir = 4 - }, -/turf/closed/wall, -/area/centcom/valhalla) "mEY" = ( /obj/effect/ai_node, /turf/open/floor/mainship/sterile/dark, /area/centcom/valhalla) -"mFm" = ( -/obj/structure/sign/electricshock, -/turf/closed/wall/r_wall, -/area/centcom/valhalla) -"mFU" = ( -/obj/machinery/newscaster{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/centcom/valhalla) "mGe" = ( /obj/effect/turf_decal/tile/black{ dir = 1 @@ -9523,12 +8743,6 @@ /obj/machinery/power/port_gen/pacman, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"mHP" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "mHX" = ( /obj/item/radio/intercom{ dir = 8; @@ -9551,12 +8765,6 @@ }, /turf/open/floor, /area/tdome) -"mJJ" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 5 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "mKq" = ( /obj/structure/table/woodentable, /obj/item/flashlight/lamp/green{ @@ -9585,16 +8793,6 @@ dir = 5 }, /area/centcom/valhalla) -"mLC" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "mLF" = ( /obj/structure/table/mainship, /obj/item/reagent_containers/spray/cleaner, @@ -9623,10 +8821,6 @@ }, /turf/open/floor/engine, /area/centcom/valhalla) -"mNv" = ( -/obj/machinery/marine_selector/clothes/smartgun/valhalla, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "mOd" = ( /obj/structure/sign/nosmoking_1, /obj/machinery/newscaster{ @@ -9647,11 +8841,23 @@ /turf/closed/wall, /area/centcom/valhalla) "mPJ" = ( -/obj/machinery/marine_selector/clothes/leader/valhalla, +/obj/structure/table/fancywoodentable, +/obj/item/reagent_containers/food/drinks/bottle/whiskey{ + pixel_x = 1; + pixel_y = 15 + }, +/obj/item/reagent_containers/food/drinks/bottle/whiskey{ + pixel_x = 9; + pixel_y = 15 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/item/storage/fancy/cigar, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) "mPT" = ( -/obj/machinery/marine_selector/gear/leader/valhalla, +/obj/machinery/marine_selector/clothes/leader/valhalla, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) "mQe" = ( @@ -9694,15 +8900,6 @@ /obj/item/storage/box/lights/mixed, /turf/open/floor/plating, /area/centcom/valhalla) -"mSV" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/neutral/corner{ - dir = 8 - }, -/area/centcom/valhalla) -"mTe" = ( -/turf/open/floor/tile/neutral/full, -/area/centcom/valhalla) "mUA" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -9762,12 +8959,6 @@ /obj/effect/turf_decal/warning_stripes/box/empty, /turf/open/floor/tile/lightred, /area/centcom/valhalla) -"mXi" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "mXt" = ( /obj/machinery/computer/teleporter{ dir = 8 @@ -9818,17 +9009,10 @@ /obj/effect/decal/cleanable/blood/oil, /turf/open/floor/plating, /area/centcom/valhalla) -"naH" = ( -/obj/effect/turf_decal/warning_stripes/thick, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "naJ" = ( /obj/effect/turf_decal/sandytile/sandyplating, /turf/open/floor/plating/airless, /area/centcom/valhalla/exterior) -"nbd" = ( -/turf/open/floor/plating/scorched, -/area/centcom/valhalla) "nbQ" = ( /obj/structure/table, /obj/item/storage/toolbox/mechanical, @@ -9886,17 +9070,11 @@ }, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"ndm" = ( -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "ndu" = ( /obj/effect/landmark/thunderdome/two, /obj/machinery/camera/autoname/thunderdome/hidden, /turf/open/floor/plating, /area/tdome/tdome2) -"ndy" = ( -/turf/open/floor/plating/dmg3, -/area/centcom/valhalla) "ndM" = ( /obj/structure/table, /obj/item/storage/box/bodybags{ @@ -9952,13 +9130,6 @@ /obj/item/explosive/grenade/chem_grenade/antiweed, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"ngU" = ( -/obj/structure/girder, -/turf/open/floor/plating, -/area/centcom/valhalla) -"nhm" = ( -/turf/closed/wall, -/area/centcom/valhalla) "njt" = ( /obj/structure/table, /obj/item/folder, @@ -9974,12 +9145,6 @@ /obj/structure/sign/safety/high_radiation, /turf/closed/wall/r_wall/unmeltable, /area/centcom/valhalla) -"njU" = ( -/obj/machinery/newscaster{ - dir = 8 - }, -/turf/closed/wall/r_wall, -/area/centcom/valhalla) "nkB" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 5 @@ -10017,10 +9182,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/centcom/valhalla) -"nnW" = ( -/obj/machinery/newscaster, -/turf/closed/wall, -/area/centcom/valhalla) "noc" = ( /obj/machinery/newscaster{ dir = 4 @@ -10048,10 +9209,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"nrq" = ( -/obj/machinery/newscaster, -/turf/closed/wall, -/area/centcom/valhalla) "nsa" = ( /obj/structure/closet/crate, /obj/item/tool/crowbar/red, @@ -10148,12 +9305,6 @@ /obj/effect/ai_node, /turf/open/floor/plating, /area/centcom/valhalla) -"ntL" = ( -/obj/machinery/newscaster{ - dir = 4 - }, -/turf/closed/wall, -/area/centcom/valhalla) "num" = ( /obj/structure/sign/securearea{ dir = 1 @@ -10176,12 +9327,6 @@ /obj/effect/turf_decal/warning_stripes/thick, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"nvO" = ( -/obj/machinery/newscaster{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/centcom/valhalla) "nvQ" = ( /obj/structure/table/reinforced, /obj/item/storage/toolbox/electrical, @@ -10207,8 +9352,11 @@ dir = 1 }, /area/centcom/valhalla) -"nyE" = ( -/turf/closed/wall, +"nze" = ( +/obj/machinery/robotic_cradle, +/turf/open/floor/mainship/sterile/side{ + dir = 6 + }, /area/centcom/valhalla) "nzE" = ( /obj/machinery/door/airlock/mainship/generic{ @@ -10246,21 +9394,12 @@ /obj/item/storage/box/handcuffs, /turf/open/floor/tile/red/yellowfull, /area/tdome/tdomeadmin) -"nBt" = ( -/turf/open/floor/carpet/side{ - dir = 5 - }, -/area/centcom/valhalla) "nCA" = ( /obj/structure/bed/chair/office/dark{ dir = 8 }, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"nCB" = ( -/obj/structure/window/framed/colony/reinforced/hull, -/turf/open/floor/plating, -/area/centcom/valhalla) "nDm" = ( /obj/structure/sign/doors{ desc = "A sign that shows there are doors here. There are doors everywhere!"; @@ -10282,9 +9421,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"nDI" = ( -/turf/closed/wall, -/area/centcom/valhalla) "nDL" = ( /obj/machinery/door/firedoor{ dir = 2 @@ -10318,9 +9454,6 @@ /obj/item/storage/box/pillbottles, /turf/open/floor/plating, /area/centcom/valhalla) -"nFq" = ( -/turf/open/floor/wood, -/area/centcom/valhalla) "nFA" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/turf_decal/tile/pink, @@ -10378,10 +9511,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"nGT" = ( -/obj/structure/girder, -/turf/open/floor/plating, -/area/centcom/valhalla) "nHk" = ( /obj/structure/extinguisher_cabinet{ dir = 4 @@ -10390,12 +9519,6 @@ dir = 8 }, /area/centcom/valhalla) -"nHZ" = ( -/obj/machinery/newscaster{ - dir = 4 - }, -/turf/closed/wall, -/area/centcom/valhalla) "nIR" = ( /obj/structure/table, /obj/machinery/computer/guestpass, @@ -10427,12 +9550,6 @@ }, /turf/open/floor/mainship/sterile, /area/centcom/valhalla) -"nMc" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "nMn" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 1 @@ -10525,8 +9642,8 @@ /obj/structure/table/reinforced, /obj/item/stack/sheet/metal/large_stack, /obj/item/stack/sheet/metal/large_stack, -/obj/item/stack/sheet/glass/large_stack, -/obj/item/stack/sheet/glass/large_stack, +/obj/item/stack/sheet/glass/glass/large_stack, +/obj/item/stack/sheet/glass/glass/large_stack, /obj/item/stack/sheet/plasteel/large_stack, /obj/item/tool/crowbar, /obj/effect/turf_decal/warning_stripes/thick{ @@ -10535,17 +9652,6 @@ /obj/effect/spawner/random/engineering/tool, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"nVv" = ( -/obj/machinery/newscaster{ - dir = 4 - }, -/turf/closed/wall, -/area/centcom/valhalla) -"nVP" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 4 - }, -/area/centcom/valhalla) "nWJ" = ( /obj/structure/table, /obj/item/newspaper, @@ -10571,23 +9677,12 @@ }, /turf/open/floor/gcircuit, /area/centcom/valhalla) -"nYA" = ( -/turf/closed/wall/r_wall, -/area/centcom/valhalla) -"nZy" = ( -/obj/effect/turf_decal/warning_stripes/thick, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "obe" = ( /obj/machinery/computer/body_scanconsole, /turf/open/floor/mainship/sterile/corner{ dir = 8 }, /area/centcom/valhalla) -"obJ" = ( -/obj/machinery/newscaster, -/turf/closed/wall, -/area/centcom/valhalla) "obY" = ( /obj/structure/table, /obj/item/storage/fancy/candle_box{ @@ -10597,10 +9692,6 @@ /obj/item/storage/fancy/candle_box, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"oce" = ( -/obj/machinery/newscaster, -/turf/closed/wall, -/area/centcom/valhalla) "ocf" = ( /obj/structure/sign/electricshock, /obj/structure/window/framed/colony/reinforced/hull, @@ -10628,10 +9719,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"odc" = ( -/obj/machinery/status_display, -/turf/closed/wall, -/area/centcom/valhalla) "odj" = ( /obj/structure/rack, /obj/effect/turf_decal/warning_stripes/thick{ @@ -10689,16 +9776,6 @@ }, /turf/open/floor/engine, /area/centcom/valhalla) -"ofK" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/neutral/corner{ - dir = 8 - }, -/area/centcom/valhalla) -"ogI" = ( -/obj/effect/turf_decal/warning_stripes/box, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "ogJ" = ( /obj/effect/turf_decal/warning_stripes/thick, /obj/structure/sign/safety/high_radiation, @@ -10793,9 +9870,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"ojA" = ( -/turf/open/floor/plating/dmg3, -/area/centcom/valhalla) "ojF" = ( /obj/structure/table, /obj/machinery/light_switch{ @@ -10820,9 +9894,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"olK" = ( -/turf/closed/wall, -/area/centcom/valhalla) "omN" = ( /obj/effect/turf_decal/warning_stripes/thick/corner{ dir = 4 @@ -10880,22 +9951,12 @@ dir = 4 }, /area/centcom/valhalla) -"ots" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/turf/open/floor/grimy, -/area/centcom/valhalla) "otD" = ( /obj/machinery/air_alarm{ dir = 1 }, /turf/open/floor/tile/neutral/corner, /area/centcom/valhalla) -"otM" = ( -/obj/effect/ai_node, -/turf/open/floor/plating/scorched, -/area/centcom/valhalla) "oul" = ( /mob/living/simple_animal/hostile/retaliate/goat{ name = "Pete" @@ -10935,16 +9996,6 @@ dir = 5 }, /area/centcom/valhalla) -"ovg" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/obj/machinery/door/airlock/mainship/maint/free_access, -/turf/open/floor/plating, -/area/centcom/valhalla) "ovl" = ( /obj/machinery/vending/cola/nopower, /turf/open/floor/tile/dark, @@ -10980,9 +10031,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"oCv" = ( -/turf/open/floor/plating, -/area/centcom/valhalla) "oCB" = ( /turf/open/floor/tile/vault{ dir = 4 @@ -10994,12 +10042,6 @@ /obj/effect/ai_node, /turf/open/floor/plating, /area/centcom/valhalla) -"oEt" = ( -/obj/machinery/firealarm{ - dir = 1 - }, -/turf/open/floor/tile/neutral/corner, -/area/centcom/valhalla) "oFX" = ( /obj/structure/window/reinforced{ dir = 8 @@ -11020,19 +10062,6 @@ dir = 1 }, /area/centcom/valhalla) -"oHV" = ( -/obj/machinery/door/firedoor{ - dir = 2 - }, -/obj/effect/turf_decal/warning_stripes/thick, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"oIv" = ( -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "oIG" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -11116,10 +10145,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"oOW" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "oPa" = ( /obj/structure/bed/chair/wood/wings{ dir = 4 @@ -11189,20 +10214,6 @@ dir = 5 }, /area/centcom/valhalla) -"oUp" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/obj/machinery/door/airlock/mainship/maint/free_access, -/turf/open/floor/plating, -/area/centcom/valhalla) -"oUq" = ( -/obj/structure/window/framed/colony/reinforced/hull, -/turf/open/floor/plating, -/area/centcom/valhalla) "oUK" = ( /obj/machinery/firealarm, /obj/structure/extinguisher_cabinet, @@ -11212,11 +10223,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"oVG" = ( -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) "oVR" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 1 @@ -11253,11 +10259,6 @@ "oXf" = ( /turf/open/floor/plating/ground/mars/random/cave, /area/centcom/valhalla/xenocave) -"oXu" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 8 - }, -/area/centcom/valhalla) "oXK" = ( /obj/effect/decal/cleanable/cobweb2, /obj/machinery/power/smes{ @@ -11268,10 +10269,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"oXS" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "oYg" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 8 @@ -11367,13 +10364,6 @@ dir = 5 }, /area/centcom/valhalla) -"pbm" = ( -/obj/structure/bedsheetbin, -/turf/open/floor/tile/dark, -/area/centcom/valhalla) -"pcb" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "pcv" = ( /obj/structure/window/framed/colony/reinforced, /obj/machinery/door/poddoor/shutters/mainship/open{ @@ -11387,11 +10377,6 @@ /obj/structure/prop/mainship/pipeprop, /turf/closed/wall/r_wall/unmeltable, /area/centcom/valhalla) -"pdE" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 8 - }, -/area/centcom/valhalla) "pdK" = ( /obj/machinery/computer/atmoscontrol{ dir = 8 @@ -11421,9 +10406,6 @@ /obj/structure/sign/vacuum, /turf/open/floor/marking/delivery, /area/centcom/valhalla) -"pfh" = ( -/turf/open/floor/plating/scorched, -/area/centcom/valhalla) "pfu" = ( /obj/structure/prop/mainship/pipeprop/pump/on{ dir = 1; @@ -11439,12 +10421,6 @@ /obj/structure/prop/mainship/pipeprop, /turf/open/floor/engine, /area/centcom/valhalla) -"pgP" = ( -/obj/machinery/newscaster{ - dir = 4 - }, -/turf/closed/wall, -/area/centcom/valhalla) "pgQ" = ( /obj/effect/turf_decal/warning_stripes/box/empty, /obj/effect/turf_decal/tile/yellow{ @@ -11477,16 +10453,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/dmg2, /area/centcom/valhalla) -"pjm" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/mainship/sterile/dark, -/area/centcom/valhalla) -"pjR" = ( -/obj/effect/turf_decal/warning_stripes/box, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "pjX" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 8 @@ -11521,10 +10487,6 @@ dir = 8 }, /area/centcom/valhalla) -"pnn" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/neutral/corner, -/area/centcom/valhalla) "pon" = ( /obj/machinery/light_switch{ pixel_x = 38; @@ -11544,9 +10506,6 @@ /obj/machinery/vending/armor_supply/valhalla, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"pps" = ( -/turf/open/floor/tile/neutral/full, -/area/centcom/valhalla) "ppW" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/warning_stripes/thick{ @@ -11560,9 +10519,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"pqq" = ( -/turf/open/floor/plating/scorched, -/area/centcom/valhalla) "pqM" = ( /obj/machinery/marine_selector/clothes/valhalla, /turf/open/floor/plating, @@ -11634,13 +10590,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/centcom/valhalla) -"pwb" = ( -/turf/open/floor/tile/dark, -/area/centcom/valhalla) -"pww" = ( -/obj/machinery/newscaster, -/turf/closed/wall/r_wall, -/area/centcom/valhalla) "pwR" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/warning_stripes/thick{ @@ -11674,16 +10623,6 @@ dir = 8 }, /area/tdome) -"pBQ" = ( -/obj/effect/turf_decal/warning_stripes/box, -/obj/machinery/vending/cola/nopower, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"pCQ" = ( -/turf/open/floor/carpet/side{ - dir = 9 - }, -/area/centcom/valhalla) "pEk" = ( /turf/open/floor/tile/chapel{ dir = 8 @@ -11699,12 +10638,6 @@ dir = 8 }, /area/centcom/valhalla) -"pGk" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "pGN" = ( /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ @@ -11783,16 +10716,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"pOy" = ( -/obj/effect/ai_node, -/turf/open/floor/grimy, -/area/centcom/valhalla) -"pOU" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/neutral/corner{ - dir = 4 - }, -/area/centcom/valhalla) "pPo" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/warning_stripes/thick{ @@ -11804,12 +10727,6 @@ /obj/machinery/door/airlock/mainship/engineering/free_access, /turf/open/floor/plating, /area/centcom/valhalla) -"pQh" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "pSb" = ( /obj/structure/table, /obj/item/flashlight/lamp, @@ -11905,9 +10822,6 @@ }, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"pYY" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "pZI" = ( /obj/machinery/door_control/unmeltable{ id = "engsm"; @@ -11980,12 +10894,6 @@ /obj/structure/closet/secure_closet/engineering_personal, /turf/open/floor/engine, /area/centcom/valhalla) -"qbM" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "qcq" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/effect/turf_decal/warning_stripes/box/empty, @@ -11993,7 +10901,7 @@ /area/centcom/valhalla) "qcP" = ( /obj/structure/table/reinforced, -/obj/item/stack/sheet/glass/large_stack, +/obj/item/stack/sheet/glass/glass/large_stack, /obj/item/stack/rods, /obj/machinery/air_alarm, /obj/effect/turf_decal/tile/yellow{ @@ -12037,6 +10945,12 @@ dir = 4 }, /area/centcom/valhalla) +"qgs" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/suit/storage/apron, +/obj/item/tool/kitchen/rollingpin, +/turf/open/floor/mainship/sterile/white, +/area/centcom/valhalla) "qha" = ( /obj/structure/closet/secure_closet/personal/cabinet, /obj/item/clothing/under/suit_jacket, @@ -12082,10 +10996,6 @@ }, /turf/open/space/basic, /area/space) -"qiO" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "qjg" = ( /obj/effect/turf_decal/tile/white{ dir = 4 @@ -12099,10 +11009,6 @@ /obj/structure/bookcase, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"qlF" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "qlP" = ( /obj/machinery/vending/tool/nopower/valhalla, /obj/effect/turf_decal/warning_stripes/thick{ @@ -12141,13 +11047,6 @@ dir = 5 }, /area/centcom/valhalla) -"qmw" = ( -/turf/closed/wall/r_wall, -/area/centcom/valhalla) -"qnk" = ( -/obj/machinery/newscaster, -/turf/closed/wall, -/area/centcom/valhalla) "qnO" = ( /obj/machinery/door/airlock/mainship/generic{ dir = 1 @@ -12194,11 +11093,6 @@ /obj/structure/device/piano/full, /turf/open/floor/wood, /area/centcom/valhalla) -"qrx" = ( -/turf/open/floor/tile/brown{ - dir = 1 - }, -/area/centcom/valhalla) "qsK" = ( /obj/structure/prop/mainship/toolboxforacause2020, /turf/open/floor/tile/red/redblue/full, @@ -12213,10 +11107,6 @@ dir = 5 }, /area/centcom/valhalla) -"quQ" = ( -/obj/effect/turf_decal/warning_stripes/box/empty, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "qvl" = ( /obj/structure/table, /obj/item/storage/box/drinkingglasses, @@ -12246,21 +11136,6 @@ dir = 5 }, /area/centcom/valhalla) -"qyU" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/tile/dark, -/area/centcom/valhalla) -"qyX" = ( -/obj/machinery/status_display/ai, -/turf/closed/wall, -/area/centcom/valhalla) -"qzu" = ( -/obj/machinery/status_display/ai, -/turf/closed/wall, -/area/centcom/valhalla) -"qzG" = ( -/turf/closed/wall, -/area/centcom/valhalla) "qzU" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/turf_decal/warning_stripes/thick{ @@ -12278,16 +11153,6 @@ }, /turf/open/floor/tile/red/yellowfull, /area/tdome/tdomeadmin) -"qAn" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/obj/machinery/door/airlock/mainship/maint/free_access, -/turf/open/floor/plating, -/area/centcom/valhalla) "qAy" = ( /obj/structure/table, /obj/structure/reagent_dispensers/beerkeg, @@ -12310,7 +11175,7 @@ /area/tdome/tdomeadmin) "qBl" = ( /obj/item/tool/wrench, -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 30 }, /obj/item/stack/sheet/metal{ @@ -12332,22 +11197,6 @@ /obj/item/bedsheet/blue, /turf/open/floor/grimy, /area/centcom/valhalla) -"qCr" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/obj/machinery/door/airlock/mainship/maint/free_access, -/turf/open/floor/plating, -/area/centcom/valhalla) -"qCJ" = ( -/obj/machinery/air_alarm{ - dir = 8 - }, -/turf/open/floor/tile/neutral/corner, -/area/centcom/valhalla) "qCX" = ( /obj/machinery/power/port_gen/pacman, /obj/effect/turf_decal/warning_stripes/thick{ @@ -12355,11 +11204,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"qDL" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 8 - }, -/area/centcom/valhalla) "qDW" = ( /obj/machinery/vending/snack/nopower, /turf/open/floor/tile/black{ @@ -12384,10 +11228,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"qFr" = ( -/obj/effect/ai_node, -/turf/open/floor/wood, -/area/centcom/valhalla) "qFx" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 8 @@ -12413,9 +11253,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"qFW" = ( -/turf/open/floor/plating, -/area/centcom/valhalla) "qGp" = ( /obj/structure/table, /obj/item/clothing/gloves/black, @@ -12432,10 +11269,6 @@ dir = 10 }, /area/centcom/valhalla) -"qHx" = ( -/obj/machinery/newscaster, -/turf/closed/wall, -/area/centcom/valhalla) "qHA" = ( /obj/machinery/light_switch{ pixel_x = -24; @@ -12446,16 +11279,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"qHG" = ( -/obj/effect/turf_decal/warning_stripes/thick, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"qIk" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 6 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "qIJ" = ( /obj/structure/table, /obj/item/flashlight/lamp, @@ -12482,25 +11305,12 @@ /obj/structure/window/framed/colony/reinforced, /turf/open/floor/plating, /area/centcom/valhalla) -"qKJ" = ( -/obj/effect/turf_decal/warning_stripes/thick, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/obj/machinery/door/airlock/mainship/generic{ - dir = 1 - }, -/turf/open/floor/plating, -/area/centcom/valhalla) "qLa" = ( /obj/machinery/power/geothermal{ corrupted = "fallen_hive" }, /turf/open/floor/plating/ground/mars/random/cave, /area/centcom/valhalla/xenocave) -"qLl" = ( -/turf/open/floor/plating, -/area/centcom/valhalla) "qLI" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 8 @@ -12522,16 +11332,6 @@ }, /turf/open/floor/engine, /area/centcom/valhalla) -"qMD" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) -"qML" = ( -/obj/machinery/status_display/ai, -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "qMW" = ( /obj/machinery/computer/arcade{ dir = 4 @@ -12547,9 +11347,6 @@ }, /turf/closed/wall/r_wall/unmeltable, /area/centcom/valhalla) -"qNs" = ( -/turf/closed/wall/r_wall, -/area/centcom/valhalla) "qOf" = ( /obj/structure/prop/mainship/meterprop/random, /obj/structure/prop/mainship/pipeprop{ @@ -12597,10 +11394,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"qPi" = ( -/obj/machinery/status_display/ai, -/turf/closed/wall, -/area/centcom/valhalla) "qPq" = ( /obj/effect/turf_decal/tile/black{ dir = 8 @@ -12619,10 +11412,6 @@ }, /turf/open/floor/wood, /area/centcom/valhalla) -"qQJ" = ( -/obj/machinery/newscaster, -/turf/closed/wall, -/area/centcom/valhalla) "qQT" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 4 @@ -12642,10 +11431,6 @@ }, /turf/open/floor/tile/cafe, /area/centcom/valhalla) -"qRd" = ( -/obj/effect/turf_decal/warning_stripes/thick, -/turf/open/floor/plating, -/area/centcom/valhalla) "qRf" = ( /obj/item/reagent_containers/food/drinks/britcup, /obj/structure/table/woodentable, @@ -12733,9 +11518,6 @@ }, /turf/open/floor/tile/red/yellowfull, /area/tdome/tdomeadmin) -"qUU" = ( -/turf/open/floor/plating/dmg2, -/area/centcom/valhalla) "qVp" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -12759,11 +11541,6 @@ dir = 5 }, /area/centcom/valhalla) -"qWW" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 8 - }, -/area/centcom/valhalla) "qXz" = ( /obj/structure/table/mainship, /turf/open/floor/tile/red/yellowfull, @@ -12894,18 +11671,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"rgb" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/obj/structure/prop/mainship/doorblocker/external{ - dir = 4 - }, -/turf/open/floor/plating, -/area/centcom/valhalla) "rgf" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 5 @@ -12941,34 +11706,10 @@ /obj/machinery/newscaster, /turf/closed/wall/r_wall/unmeltable, /area/centcom/valhalla) -"rhB" = ( -/obj/machinery/newscaster{ - dir = 4 - }, -/turf/closed/wall, -/area/centcom/valhalla) "rhC" = ( /obj/machinery/marine_selector/gear/smartgun/valhalla, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"rib" = ( -/turf/open/floor/tile/brown{ - dir = 8 - }, -/area/centcom/valhalla) -"riU" = ( -/obj/machinery/door/firedoor{ - dir = 2 - }, -/obj/effect/turf_decal/warning_stripes/thick, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/obj/machinery/door/airlock/mainship/command/free_access{ - dir = 2 - }, -/turf/open/floor/plating, -/area/centcom/valhalla) "rjI" = ( /obj/effect/turf_decal/warning_stripes/thick/corner, /obj/effect/turf_decal/tile/black, @@ -12992,13 +11733,6 @@ /obj/effect/landmark/itemspawner/cutewitch, /turf/open/floor/plating, /area/centcom/valhalla) -"rnw" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) -"rnE" = ( -/turf/closed/wall/r_wall, -/area/centcom/valhalla) "rnH" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/warning_stripes/thick{ @@ -13035,18 +11769,6 @@ dir = 5 }, /area/centcom/valhalla) -"roF" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/obj/structure/prop/mainship/doorblocker/external{ - dir = 4 - }, -/turf/open/floor/plating, -/area/centcom/valhalla) "roM" = ( /turf/open/floor/tile/neutral{ dir = 8 @@ -13089,10 +11811,6 @@ /obj/item/taperecorder, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"rsu" = ( -/obj/machinery/newscaster, -/turf/closed/wall, -/area/centcom/valhalla) "rsX" = ( /obj/structure/table, /obj/effect/spawner/random/misc/plushie/nospawnninetyfive, @@ -13114,17 +11832,6 @@ /obj/machinery/smartfridge/chemistry/nopower, /turf/open/floor/tile/white, /area/centcom/valhalla) -"rvz" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/obj/machinery/door/airlock/mainship/security/free_access, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "rvU" = ( /obj/effect/turf_decal/sandedge/corner2{ dir = 4 @@ -13132,9 +11839,6 @@ /obj/item/target/alien, /turf/open/floor/plating, /area/centcom/valhalla) -"rvV" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "rwm" = ( /obj/structure/table, /obj/item/storage/box/drinkingglasses, @@ -13207,12 +11911,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"rzX" = ( -/obj/machinery/newscaster{ - dir = 8 - }, -/turf/closed/wall, -/area/centcom/valhalla) "rAT" = ( /obj/structure/window{ dir = 4 @@ -13250,10 +11948,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"rCR" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/tile/dark, -/area/centcom/valhalla) "rDY" = ( /obj/structure/table/reinforced, /obj/effect/spawner/random/misc/paperbin, @@ -13296,17 +11990,6 @@ }, /turf/open/floor/engine, /area/centcom/valhalla) -"rIB" = ( -/obj/effect/turf_decal/tile/black{ - dir = 8 - }, -/obj/effect/turf_decal/tile/black{ - dir = 4 - }, -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) "rJl" = ( /obj/structure/bed/chair/wood/wings{ dir = 8 @@ -13406,13 +12089,6 @@ dir = 5 }, /area/centcom/valhalla) -"rQk" = ( -/obj/item/explosive/grenade/flare/on, -/turf/open/floor/plating, -/area/centcom/valhalla) -"rQF" = ( -/turf/open/floor/plating/dmg2, -/area/centcom/valhalla) "rRM" = ( /obj/machinery/firealarm{ dir = 8 @@ -13428,20 +12104,11 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"rSv" = ( -/obj/machinery/newscaster, -/turf/closed/wall, -/area/centcom/valhalla) "rSA" = ( /obj/structure/girder, /obj/structure/sign/atmosplaque, /turf/open/floor/plating, /area/centcom/valhalla) -"rSR" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 1 - }, -/area/centcom/valhalla) "rTp" = ( /obj/effect/turf_decal/tile/black, /obj/effect/turf_decal/tile/black{ @@ -13451,10 +12118,6 @@ dir = 5 }, /area/centcom/valhalla) -"rTu" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "rVD" = ( /obj/effect/turf_decal/warning_stripes/box/arrow, /obj/effect/turf_decal/warning_stripes/box/small{ @@ -13463,15 +12126,6 @@ /obj/effect/turf_decal/warning_stripes/synth, /turf/open/floor/plating, /area/centcom/valhalla) -"rVI" = ( -/obj/effect/turf_decal/warning_stripes/box, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"rVK" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 1 - }, -/area/centcom/valhalla) "rXh" = ( /obj/structure/barricade/wooden, /turf/open/floor/plating, @@ -13483,9 +12137,6 @@ /obj/effect/ai_node, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"rXP" = ( -/turf/open/floor/plating, -/area/centcom/valhalla) "rYj" = ( /obj/machinery/firealarm{ dir = 8 @@ -13515,16 +12166,12 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"rYF" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "rYK" = ( /obj/structure/table/reinforced, /obj/item/stack/sheet/metal{ amount = 30 }, -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 30 }, /turf/open/floor/tile/dark/gray, @@ -13557,13 +12204,6 @@ dir = 5 }, /area/centcom/valhalla) -"scd" = ( -/turf/open/floor/wood/broken, -/area/centcom/valhalla) -"sch" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/dmg2, -/area/centcom/valhalla) "scz" = ( /obj/machinery/light_switch, /turf/closed/wall/r_wall/unmeltable, @@ -13603,11 +12243,6 @@ }, /turf/open/floor/tile/lightred/full, /area/centcom/valhalla) -"shy" = ( -/turf/open/floor/carpet/side{ - dir = 8 - }, -/area/centcom/valhalla) "sis" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/machinery/air_alarm{ @@ -13639,13 +12274,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"sjM" = ( -/obj/effect/ai_node, -/turf/open/floor/plating/scorched, -/area/centcom/valhalla) -"sjT" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "sjU" = ( /obj/structure/bed/chair/wood/wings{ dir = 8 @@ -13669,15 +12297,6 @@ }, /turf/open/floor/plating/ground/mars/random/cave, /area/space) -"skN" = ( -/obj/item/radio/intercom{ - dir = 4; - name = "Station Intercom" - }, -/turf/open/floor/tile/neutral/corner{ - dir = 8 - }, -/area/centcom/valhalla) "sld" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 8 @@ -13689,10 +12308,6 @@ /obj/effect/mapping_helpers/airlock/locked, /turf/open/floor/plating, /area/centcom/valhalla) -"slg" = ( -/obj/machinery/status_display/ai, -/turf/closed/wall, -/area/centcom/valhalla) "slv" = ( /turf/open/floor/tile/blue/taupeblue{ dir = 4 @@ -13703,9 +12318,6 @@ /obj/effect/turf_decal/warning_stripes/box/empty, /turf/open/floor/tile/dark2, /area/centcom/valhalla) -"smd" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "smh" = ( /obj/effect/turf_decal/sandedge{ dir = 1 @@ -13831,9 +12443,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"spM" = ( -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "sqp" = ( /obj/machinery/chem_dispenser/soda{ dir = 4; @@ -13852,9 +12461,6 @@ }, /turf/closed/mineral/smooth, /area/centcom/valhalla/exterior) -"srV" = ( -/turf/closed/wall, -/area/centcom/valhalla) "ssd" = ( /obj/machinery/door/firedoor{ dir = 2 @@ -13871,12 +12477,6 @@ /obj/structure/barricade/wooden, /turf/open/floor/plating/ground/mars/random/cave, /area/centcom/valhalla/exterior) -"ssX" = ( -/obj/machinery/newscaster{ - dir = 8 - }, -/turf/closed/wall/r_wall, -/area/centcom/valhalla) "sto" = ( /obj/machinery/status_display/ai{ pixel_x = -32 @@ -13902,9 +12502,6 @@ /obj/machinery/air_alarm, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"suW" = ( -/turf/open/floor/grimy, -/area/centcom/valhalla) "svr" = ( /obj/structure/bed/chair/office/dark{ dir = 4 @@ -13938,9 +12535,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/centcom/valhalla) -"syo" = ( -/turf/closed/wall, -/area/centcom/valhalla) "syY" = ( /obj/machinery/computer/telecomms/monitor{ dir = 8 @@ -13961,10 +12555,6 @@ /obj/structure/prop/mainship/pipeprop, /turf/open/floor/engine, /area/centcom/valhalla) -"szJ" = ( -/obj/effect/turf_decal/warning_stripes/box, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "sAb" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/tile/neutral/full, @@ -13999,10 +12589,6 @@ /obj/structure/prop/mainship/supermatter, /turf/open/floor/engine, /area/centcom/valhalla) -"sDZ" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "sEd" = ( /obj/effect/landmark/thunderdome/observe, /obj/structure/bed/chair/sofa/left, @@ -14049,12 +12635,6 @@ }, /turf/open/floor/engine, /area/centcom/valhalla) -"sFR" = ( -/obj/structure/sign/securearea{ - dir = 1 - }, -/turf/closed/wall, -/area/centcom/valhalla) "sGf" = ( /obj/structure/table, /obj/item/tool/soap/nanotrasen, @@ -14111,9 +12691,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"sKi" = ( -/turf/closed/wall, -/area/centcom/valhalla) "sKX" = ( /obj/machinery/computer/station_alert{ dir = 8 @@ -14151,14 +12728,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"sMN" = ( -/turf/closed/wall, -/area/centcom/valhalla) -"sNw" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 4 - }, -/area/centcom/valhalla) "sNQ" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/warning_stripes/thick{ @@ -14171,13 +12740,6 @@ dir = 1 }, /area/centcom/valhalla) -"sOJ" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/flora/ausbushes/ywflowers, -/turf/open/floor/grass, -/area/centcom/valhalla) "sPt" = ( /obj/structure/bedsheetbin, /obj/machinery/air_alarm{ @@ -14186,11 +12748,6 @@ }, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"sPV" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 1 - }, -/area/centcom/valhalla) "sQs" = ( /obj/structure/table, /obj/item/reagent_containers/food/drinks/drinkingglass, @@ -14222,11 +12779,6 @@ /obj/item/tool/lighter/random, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"sSb" = ( -/turf/open/floor/tile/brown{ - dir = 5 - }, -/area/centcom/valhalla) "sSz" = ( /obj/structure/closet/secure_closet/bar, /obj/machinery/light_switch{ @@ -14293,10 +12845,6 @@ dir = 5 }, /area/centcom/valhalla) -"sWH" = ( -/obj/effect/turf_decal/warning_stripes/thick, -/turf/open/floor/mainship/stripesquare, -/area/centcom/valhalla) "sWR" = ( /turf/open/floor/tile/escape, /area/centcom/valhalla) @@ -14307,10 +12855,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"sYg" = ( -/obj/machinery/status_display, -/turf/closed/wall, -/area/centcom/valhalla) "sYo" = ( /turf/open/floor/tile/dark/red2{ dir = 4 @@ -14356,21 +12900,10 @@ }, /turf/open/floor/grimy, /area/centcom/valhalla) -"sZY" = ( -/obj/machinery/newscaster{ - dir = 8 - }, -/turf/closed/wall, -/area/centcom/valhalla) "tbL" = ( /obj/machinery/air_alarm, /turf/open/floor/tile/neutral, /area/centcom/valhalla) -"tbW" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 4 - }, -/area/centcom/valhalla) "tcA" = ( /obj/structure/window/reinforced{ dir = 1; @@ -14417,13 +12950,6 @@ /obj/effect/turf_decal/warning_stripes/box/empty, /turf/open/floor/tile/lightred, /area/centcom/valhalla) -"tgW" = ( -/turf/open/floor/plating/scorched, -/area/centcom/valhalla) -"tgY" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "thx" = ( /obj/machinery/computer/security{ dir = 4 @@ -14562,16 +13088,6 @@ }, /turf/open/floor/engine, /area/centcom/valhalla) -"toj" = ( -/obj/structure/sign/securearea{ - dir = 1 - }, -/turf/closed/wall, -/area/centcom/valhalla) -"top" = ( -/obj/structure/sign/nosmoking_1, -/turf/closed/wall, -/area/centcom/valhalla) "tpj" = ( /obj/structure/window/reinforced{ dir = 4 @@ -14626,12 +13142,6 @@ /obj/structure/table/woodentable, /turf/open/floor/wood, /area/tdome/tdomeobserve) -"tsS" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "ttc" = ( /obj/item/tool/surgery/circular_saw, /obj/item/tool/surgery/surgicaldrill{ @@ -14647,16 +13157,12 @@ /obj/item/tool/surgery/cautery, /turf/open/floor/tile/dark2, /area/centcom/valhalla) -"ttg" = ( -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "ttw" = ( /obj/structure/table, /obj/item/stack/cable_coil, /obj/item/stack/cable_coil, -/obj/item/stack/sheet/glass, -/obj/item/stack/sheet/glass, +/obj/item/stack/sheet/glass/glass, +/obj/item/stack/sheet/glass/glass, /turf/open/floor/wood, /area/centcom/valhalla) "tuC" = ( @@ -14666,13 +13172,6 @@ /obj/structure/bedsheetbin, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"tuD" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/flora/ausbushes/ppflowers, -/turf/open/floor/grass, -/area/centcom/valhalla) "tvb" = ( /obj/effect/landmark/ai_multicam_room, /turf/open/ai_visible, @@ -14756,10 +13255,6 @@ /obj/item/clothing/shoes/slippers_worn, /turf/open/floor/tile/dark2, /area/centcom/valhalla) -"tzf" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "tzz" = ( /obj/structure/closet/wardrobe/black, /obj/effect/turf_decal/warning_stripes/box/empty, @@ -14811,10 +13306,6 @@ dir = 5 }, /area/centcom/valhalla) -"tBa" = ( -/obj/structure/girder, -/turf/open/floor/plating, -/area/centcom/valhalla) "tCf" = ( /obj/structure/bed/chair/comfy/brown{ dir = 1 @@ -14823,25 +13314,6 @@ dir = 4 }, /area/centcom/valhalla) -"tCS" = ( -/turf/open/floor/tile/dark, -/area/centcom/valhalla) -"tDD" = ( -/obj/effect/turf_decal/tile/green, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"tDN" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/tile/dark, -/area/centcom/valhalla) -"tDO" = ( -/obj/item/radio/intercom{ - name = "Station Intercom" - }, -/turf/open/floor/tile/neutral/corner{ - dir = 4 - }, -/area/centcom/valhalla) "tDV" = ( /obj/machinery/door/window{ dir = 8; @@ -14907,18 +13379,6 @@ "tGL" = ( /turf/open/floor/podhatch/floor, /area/tdome) -"tHw" = ( -/obj/structure/window/framed/colony/reinforced/hull, -/turf/open/floor/plating, -/area/centcom/valhalla) -"tIS" = ( -/obj/machinery/air_alarm{ - dir = 4 - }, -/turf/open/floor/tile/neutral/corner{ - dir = 1 - }, -/area/centcom/valhalla) "tJb" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -14931,16 +13391,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"tJM" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/neutral/corner, -/area/centcom/valhalla) -"tKb" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/neutral/corner{ - dir = 8 - }, -/area/centcom/valhalla) "tKu" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 8 @@ -14957,10 +13407,6 @@ /obj/machinery/biogenerator, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"tMS" = ( -/obj/machinery/newscaster, -/turf/closed/wall, -/area/centcom/valhalla) "tNc" = ( /obj/structure/noticeboard{ dir = 4; @@ -15017,18 +13463,6 @@ /obj/effect/turf_decal/warning_stripes/box, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"tQw" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/obj/structure/prop/mainship/doorblocker/external{ - dir = 4 - }, -/turf/open/floor/plating, -/area/centcom/valhalla) "tRh" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/effect/turf_decal/warning_stripes/box, @@ -15052,13 +13486,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"tRV" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/flora/ausbushes/fullgrass, -/turf/open/floor/grass, -/area/centcom/valhalla) "tSq" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/start/job/fallen, @@ -15069,9 +13496,6 @@ /obj/effect/turf_decal/warning_stripes/box, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"tSI" = ( -/turf/open/floor/tile/neutral/full, -/area/centcom/valhalla) "tSZ" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 4 @@ -15099,18 +13523,6 @@ dir = 5 }, /area/centcom/valhalla) -"tVp" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"tVB" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/neutral/corner{ - dir = 4 - }, -/area/centcom/valhalla) "tVS" = ( /obj/structure/table/reinforced, /obj/item/storage/belt/utility, @@ -15123,28 +13535,12 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"tWP" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "tXL" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/tile/neutral/corner{ dir = 4 }, /area/centcom/valhalla) -"tYL" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/obj/machinery/door/airlock/mainship/maint/free_access, -/turf/open/floor/plating, -/area/centcom/valhalla) "tZl" = ( /obj/machinery/air_alarm{ dir = 8 @@ -15154,26 +13550,6 @@ dir = 4 }, /area/centcom/valhalla) -"tZA" = ( -/obj/effect/ai_node, -/turf/open/floor/grimy, -/area/centcom/valhalla) -"tZJ" = ( -/turf/open/floor/plating/dmg3, -/area/centcom/valhalla) -"tZZ" = ( -/turf/open/floor/tile/dark, -/area/centcom/valhalla) -"uah" = ( -/turf/open/floor/tile/dark, -/area/centcom/valhalla) -"uai" = ( -/obj/structure/sign/nosmoking_1, -/obj/machinery/newscaster{ - dir = 4 - }, -/turf/closed/wall, -/area/centcom/valhalla) "uax" = ( /obj/structure/morgue/crematorium{ id = "cremawheat" @@ -15216,9 +13592,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"uaU" = ( -/turf/open/floor/tile/neutral, -/area/centcom/valhalla) "uaW" = ( /obj/structure/window/reinforced{ dir = 4 @@ -15253,28 +13626,11 @@ dir = 6 }, /area/centcom/valhalla) -"ucT" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) -"udp" = ( -/turf/open/floor/tile/neutral/corner, -/area/centcom/valhalla) "uez" = ( /obj/structure/disposalpipe/trunk, /obj/structure/disposaloutlet, /turf/open/floor/tile/red/redblue/full, /area/tdome/tdomeobserve) -"ufo" = ( -/obj/machinery/newscaster{ - dir = 4 - }, -/turf/closed/wall, -/area/centcom/valhalla) "uft" = ( /obj/machinery/conveyor{ dir = 8; @@ -15292,10 +13648,6 @@ /obj/machinery/loadout_vendor/valhalla, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"ufF" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/neutral/corner, -/area/centcom/valhalla) "ufQ" = ( /obj/structure/bed/chair/comfy/brown{ buildstackamount = 0; @@ -15306,9 +13658,6 @@ }, /turf/open/floor/grimy, /area/centcom/valhalla) -"ugl" = ( -/turf/open/floor/tile/neutral/full, -/area/centcom/valhalla) "ugp" = ( /obj/structure/table/reinforced, /obj/item/stack/rods{ @@ -15349,20 +13698,6 @@ dir = 5 }, /area/centcom/valhalla) -"uko" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/centcom/valhalla) -"ukD" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/obj/machinery/door/airlock/mainship/maint/free_access, -/turf/open/floor/plating, -/area/centcom/valhalla) "ukJ" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 1 @@ -15425,18 +13760,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"uqg" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) -"usm" = ( -/turf/open/floor/wood/broken, -/area/centcom/valhalla) -"usE" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/effect/ai_node, -/turf/open/floor/plating, -/area/centcom/valhalla) "usY" = ( /obj/structure/bed/chair/office/dark{ dir = 4 @@ -15501,12 +13824,6 @@ /obj/effect/landmark/thunderdome/one, /turf/open/floor/plating, /area/tdome/tdome1) -"uxN" = ( -/turf/open/floor/wood, -/area/centcom/valhalla) -"uyh" = ( -/turf/closed/wall, -/area/centcom/valhalla) "uze" = ( /obj/structure/closet/wardrobe/mixed, /obj/structure/extinguisher_cabinet{ @@ -15533,9 +13850,6 @@ dir = 9 }, /area/centcom/valhalla) -"uzL" = ( -/turf/open/floor/wood, -/area/centcom/valhalla) "uAf" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -15567,12 +13881,6 @@ }, /turf/open/floor/tile/cafe, /area/centcom/valhalla) -"uDy" = ( -/obj/machinery/newscaster{ - dir = 8 - }, -/turf/closed/wall, -/area/centcom/valhalla) "uEe" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/turf_decal/tile/yellow{ @@ -15580,10 +13888,6 @@ }, /turf/open/floor/mainship/sterile/dark, /area/centcom/valhalla) -"uEj" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "uEH" = ( /obj/structure/girder, /obj/effect/turf_decal/warning_stripes/box, @@ -15632,15 +13936,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"uHm" = ( -/turf/open/floor/carpet/side{ - dir = 1 - }, -/area/centcom/valhalla) -"uHB" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "uHR" = ( /obj/machinery/conveyor{ dir = 8; @@ -15660,21 +13955,11 @@ }, /turf/open/floor/mainship/sterile/white, /area/centcom/valhalla) -"uIP" = ( -/turf/closed/wall, -/area/centcom/valhalla) "uKg" = ( /turf/open/floor/tile/chapel{ dir = 4 }, /area/centcom/valhalla) -"uKQ" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) -"uMd" = ( -/turf/closed/wall, -/area/centcom/valhalla) "uOe" = ( /obj/machinery/teleport/station, /obj/effect/turf_decal/tile/black{ @@ -15727,10 +14012,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"uRH" = ( -/obj/effect/turf_decal/tile/red, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "uRW" = ( /obj/structure/table/woodentable, /obj/item/reagent_containers/food/snacks/hotdog, @@ -15761,9 +14042,6 @@ /obj/machinery/computer/pod, /turf/open/floor/tile/red/yellowfull, /area/tdome/tdomeadmin) -"uTg" = ( -/turf/open/floor/tile/neutral/corner, -/area/centcom/valhalla) "uTH" = ( /obj/machinery/atmospherics/components/unary/cryo_cell, /obj/effect/turf_decal/warning_stripes/thick{ @@ -15786,6 +14064,10 @@ /obj/structure/reagent_dispensers/beerkeg, /turf/open/floor/tile/red/yellowfull, /area/tdome/tdomeadmin) +"uUY" = ( +/obj/machinery/marine_selector/gear/leader/valhalla, +/turf/open/floor/tile/dark/gray, +/area/centcom/valhalla) "uUZ" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 1 @@ -15842,15 +14124,6 @@ }, /turf/open/floor/grimy, /area/centcom/valhalla) -"uXC" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 4 - }, -/area/centcom/valhalla) -"uXI" = ( -/obj/effect/turf_decal/warning_stripes/box, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "uYl" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 5 @@ -15869,9 +14142,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"uZp" = ( -/turf/open/floor/tile/dark, -/area/centcom/valhalla) "vaS" = ( /obj/effect/ai_node, /obj/structure/prop/mainship/pipeprop{ @@ -15922,10 +14192,6 @@ /obj/effect/turf_decal/sandedge, /turf/open/floor/plating, /area/centcom/valhalla) -"vff" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "vgc" = ( /obj/structure/table, /obj/effect/spawner/random/misc/paperbin, @@ -15944,11 +14210,6 @@ }, /turf/open/floor/tile/lightred, /area/centcom/valhalla) -"vgK" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 8 - }, -/area/centcom/valhalla) "vgS" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 1 @@ -16001,16 +14262,6 @@ }, /turf/open/floor/tile/cafe, /area/centcom/valhalla) -"vjb" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/open/floor/tile/dark, -/area/centcom/valhalla) -"vjO" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "vka" = ( /obj/effect/turf_decal/warning_stripes/box/small{ dir = 1 @@ -16033,14 +14284,6 @@ /obj/effect/turf_decal/warning_stripes/thick, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"vlt" = ( -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"vmi" = ( -/obj/effect/turf_decal/warning_stripes/thick, -/obj/effect/ai_node, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "vmJ" = ( /obj/machinery/computer/atmos_alert{ dir = 8 @@ -16054,11 +14297,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"vmM" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/turf_decal/warning_stripes/thick, -/turf/open/floor/tile/lightred, -/area/centcom/valhalla) "vmU" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /obj/effect/turf_decal/tile/yellow{ @@ -16082,16 +14320,6 @@ }, /turf/open/floor/tile/red/yellowfull, /area/tdome/tdomeadmin) -"vnN" = ( -/turf/open/floor/wood, -/area/centcom/valhalla) -"voa" = ( -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"voF" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "voO" = ( /obj/machinery/light_switch{ pixel_y = 24 @@ -16132,42 +14360,8 @@ dir = 1 }, /area/centcom/valhalla) -"vsE" = ( -/obj/effect/turf_decal/tile/black{ - dir = 1 - }, -/obj/effect/turf_decal/tile/black{ - dir = 8 - }, -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) -"vsK" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/obj/machinery/door/airlock/mainship/maint/free_access, -/obj/effect/ai_node, -/turf/open/floor/plating, -/area/centcom/valhalla) -"vsS" = ( -/turf/open/floor/carpet/side{ - dir = 6 - }, -/area/centcom/valhalla) -"vsV" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger/nopower, -/turf/open/floor/tile/dark/red2{ - dir = 8 - }, -/area/centcom/valhalla) -"vtf" = ( -/obj/machinery/door/firedoor, +"vtf" = ( +/obj/machinery/door/firedoor, /obj/effect/turf_decal/warning_stripes/thick{ dir = 8 }, @@ -16193,12 +14387,6 @@ /obj/structure/reagent_dispensers/beerkeg, /turf/open/floor/tile/red/redblue/full, /area/tdome/tdomeobserve) -"vuv" = ( -/obj/structure/sign/securearea{ - dir = 1 - }, -/turf/closed/wall, -/area/centcom/valhalla) "vvm" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 8 @@ -16225,20 +14413,6 @@ dir = 8 }, /area/centcom/valhalla) -"vxo" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/dark, -/area/centcom/valhalla) -"vxC" = ( -/obj/effect/turf_decal/warning_stripes/thick, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/obj/machinery/door/airlock/mainship/maint/free_access{ - dir = 1 - }, -/turf/open/floor/plating, -/area/centcom/valhalla) "vyq" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/warning_stripes/thick{ @@ -16283,10 +14457,6 @@ }, /turf/open/floor/tile/cafe, /area/centcom/valhalla) -"vAV" = ( -/obj/structure/window/framed/colony/reinforced/hull, -/turf/open/floor/plating, -/area/centcom/valhalla) "vBB" = ( /obj/effect/landmark/thunderdome/observe, /obj/structure/disposalpipe/segment/corner{ @@ -16338,9 +14508,6 @@ }, /turf/open/floor/engine, /area/centcom/valhalla) -"vFL" = ( -/turf/open/floor/gcircuit, -/area/centcom/valhalla) "vFU" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/warning_stripes/thick{ @@ -16382,18 +14549,12 @@ }, /turf/open/floor/marking/delivery, /area/centcom/valhalla) -"vGB" = ( -/turf/open/floor/plating/dmg1, -/area/centcom/valhalla) "vGG" = ( /obj/structure/prop/mainship/pipeprop{ dir = 5 }, /turf/open/floor/engine, /area/centcom/valhalla) -"vGP" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "vGZ" = ( /obj/structure/window/framed/colony/reinforced, /obj/machinery/door/poddoor/shutters/mainship/open{ @@ -16470,9 +14631,6 @@ /obj/item/clothing/under/suit_jacket/detective/alt, /turf/open/floor/plating, /area/centcom/valhalla) -"vLH" = ( -/turf/closed/wall/r_wall, -/area/centcom/valhalla) "vLP" = ( /obj/machinery/conveyor{ dir = 8; @@ -16592,9 +14750,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"vSy" = ( -/turf/closed/wall, -/area/centcom/valhalla) "vSS" = ( /obj/structure/closet/secure_closet/medical3, /obj/item/radio/intercom{ @@ -16736,27 +14891,6 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"vVa" = ( -/obj/effect/turf_decal/tile/pink{ - dir = 8 - }, -/turf/open/floor/tile/neutral/corner, -/area/centcom/valhalla) -"vVy" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/obj/machinery/door/airlock/mainship/engineering/free_access, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"vVU" = ( -/obj/structure/window/framed/colony/reinforced/hull, -/turf/open/floor/plating, -/area/centcom/valhalla) "vVY" = ( /obj/effect/turf_decal/warning_stripes/thick, /obj/effect/ai_node, @@ -16767,31 +14901,6 @@ /obj/item/flashlight/lamp, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"vXl" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/open/floor/wood, -/area/centcom/valhalla) -"vXr" = ( -/obj/structure/closet/cabinet, -/obj/item/clothing/suit/wizrobe/red, -/obj/item/clothing/suit/wizrobe/psypurple, -/obj/item/clothing/suit/wizrobe/magusred, -/obj/item/clothing/suit/wizrobe/gentlecoat, -/obj/item/clothing/suit/wizrobe, -/obj/item/clothing/head/wizard/amp, -/obj/item/clothing/head/wizard/cap, -/obj/item/clothing/head/wizard/magus, -/obj/item/clothing/head/wizard/marisa, -/obj/item/clothing/head/wizard/red, -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) -"vXK" = ( -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "vXO" = ( /obj/machinery/door/firedoor, /obj/structure/table/reinforced, @@ -16838,13 +14947,6 @@ }, /turf/closed/wall, /area/centcom/valhalla) -"vZJ" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/ai_node, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "vZO" = ( /obj/item/tank/oxygen/red, /obj/item/clothing/mask/gas, @@ -16911,9 +15013,6 @@ }, /turf/open/floor/tile/cafe, /area/centcom/valhalla) -"wcJ" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "wdt" = ( /obj/structure/closet/secure_closet/miner, /obj/effect/turf_decal/warning_stripes/thick{ @@ -16927,12 +15026,6 @@ }, /turf/open/floor/tile/red/yellowfull, /area/tdome/tdomeadmin) -"weH" = ( -/turf/open/floor/tile/neutral/full, -/area/centcom/valhalla) -"wff" = ( -/turf/closed/wall, -/area/centcom/valhalla) "wfk" = ( /obj/machinery/door/firedoor{ dir = 2 @@ -16997,25 +15090,6 @@ dir = 5 }, /area/centcom/valhalla) -"wgK" = ( -/obj/machinery/firealarm{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/turf_decal/tile/black{ - dir = 1 - }, -/obj/effect/turf_decal/tile/black, -/obj/structure/table/mainship, -/obj/structure/window/reinforced/windowstake{ - dir = 4 - }, -/obj/item/clothing/glasses/hud/xenohud, -/obj/item/clothing/glasses/hud/xenohud, -/turf/open/floor/mainship/stripesquare, -/area/centcom/valhalla) "wiL" = ( /obj/structure/bed/chair/office/dark{ dir = 4 @@ -17099,19 +15173,6 @@ dir = 5 }, /area/centcom/valhalla) -"wly" = ( -/obj/effect/turf_decal/tile/black{ - dir = 4 - }, -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) -"wlI" = ( -/obj/structure/sign/vacuum, -/obj/structure/window/framed/colony/reinforced/hull, -/turf/open/floor/plating, -/area/centcom/valhalla) "wnL" = ( /obj/effect/ai_node, /turf/open/floor/tile/neutral, @@ -17143,12 +15204,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"wnZ" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 10 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "woP" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/turf_decal/warning_stripes/thick/corner{ @@ -17161,47 +15216,10 @@ dir = 9 }, /area/centcom/valhalla) -"woQ" = ( -/turf/open/floor/tile/neutral/corner, -/area/centcom/valhalla) -"woU" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 10 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"woV" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) -"woW" = ( -/obj/machinery/status_display, -/turf/closed/wall, -/area/centcom/valhalla) -"wpm" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"wpn" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/neutral/full, -/area/centcom/valhalla) -"wpP" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 8 - }, -/area/centcom/valhalla) "wqU" = ( /obj/effect/landmark/start/job/fallen, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"wqZ" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "wrn" = ( /turf/open/floor/tile/red/redblue/full, /area/tdome/tdomeobserve) @@ -17228,19 +15246,6 @@ /obj/structure/closet/wardrobe/atmospherics_yellow, /turf/open/floor/plating, /area/centcom/valhalla) -"wsD" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"wtb" = ( -/turf/open/floor/plating/dmg2, -/area/centcom/valhalla) "wtu" = ( /turf/open/floor/marking/delivery, /area/centcom/valhalla) @@ -17277,37 +15282,11 @@ /obj/machinery/computer/forensic_scanning, /turf/open/floor/tile/dark/red2, /area/centcom/valhalla) -"wuY" = ( -/turf/open/floor/tile/dark/red2, -/area/centcom/valhalla) -"wuZ" = ( -/turf/closed/wall, -/area/centcom/valhalla) -"wva" = ( -/obj/machinery/status_display/ai, -/turf/closed/wall, -/area/centcom/valhalla) "wwD" = ( /obj/structure/lattice, /obj/structure/cable, /turf/open/space/basic, /area/space) -"wxd" = ( -/obj/machinery/door/airlock/external{ - name = "External Airlock" - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/turf/open/floor/plating, -/area/centcom/valhalla) -"wxi" = ( -/obj/structure/window/framed/colony/reinforced/hull, -/turf/open/floor/plating, -/area/centcom/valhalla) "wxr" = ( /obj/effect/turf_decal/warning_stripes/thick, /obj/effect/turf_decal/warning_stripes/thick{ @@ -17388,9 +15367,6 @@ }, /turf/open/floor/tile/dark2, /area/centcom/valhalla) -"wFc" = ( -/turf/open/floor/tile/dark, -/area/centcom/valhalla) "wFe" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ dir = 1 @@ -17421,24 +15397,10 @@ }, /turf/open/floor/tile/red/yellowfull, /area/tdome/tdomeadmin) -"wGV" = ( -/turf/closed/wall, -/area/centcom/valhalla) "wHz" = ( /obj/machinery/marine_selector/clothes/synth/valhalla, /turf/open/floor/plating/dmg3, /area/centcom/valhalla) -"wIl" = ( -/obj/effect/turf_decal/tile/black{ - dir = 4 - }, -/obj/effect/turf_decal/tile/black{ - dir = 8 - }, -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) "wIw" = ( /obj/structure/extinguisher_cabinet{ dir = 4 @@ -17482,15 +15444,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"wJG" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"wJL" = ( -/turf/closed/wall, -/area/centcom/valhalla) "wJN" = ( /obj/structure/table, /obj/effect/spawner/random/misc/paperbin, @@ -17498,9 +15451,6 @@ /obj/item/tool/stamp/hop, /turf/open/floor/wood/broken, /area/centcom/valhalla) -"wKu" = ( -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "wLk" = ( /obj/structure/table/reinforced, /turf/open/floor/tile/dark/gray, @@ -17544,11 +15494,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"wOu" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 1 - }, -/area/centcom/valhalla) "wOD" = ( /obj/structure/sign/fixedinplace/medical, /obj/structure/sign/fixedinplace/engineering{ @@ -17577,12 +15522,6 @@ }, /turf/open/floor/plating/ground/mars/random/cave, /area/centcom/valhalla/xenocave) -"wPC" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "wQi" = ( /obj/structure/prop/mainship/propcarp, /turf/open/space/basic, @@ -17596,9 +15535,6 @@ dir = 5 }, /area/centcom/valhalla) -"wQm" = ( -/turf/open/floor/tile/neutral/corner, -/area/centcom/valhalla) "wQr" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood/broken, @@ -17647,31 +15583,12 @@ }, /turf/open/floor/grass, /area/centcom/valhalla) -"wSe" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 8 - }, -/area/centcom/valhalla) -"wSF" = ( -/turf/open/floor/tile/neutral/corner, -/area/centcom/valhalla) "wSO" = ( /obj/effect/turf_decal/warning_stripes/thin{ dir = 4 }, /turf/open/floor, /area/tdome) -"wTe" = ( -/obj/effect/turf_decal/tile/black{ - dir = 1 - }, -/obj/effect/turf_decal/tile/black{ - dir = 8 - }, -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) "wTz" = ( /obj/structure/table/reinforced, /obj/item/flashlight/lamp, @@ -17719,28 +15636,13 @@ }, /turf/open/floor/tile/neutral, /area/centcom/valhalla) -"wVi" = ( -/turf/open/floor/tile/neutral/corner{ - dir = 8 +"wVM" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 }, -/area/centcom/valhalla) -"wVl" = ( -/obj/machinery/door/firedoor{ - dir = 2 - }, -/obj/effect/turf_decal/warning_stripes/thick, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"wVM" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/turf/open/floor/tile/dark/gray, +/turf/open/floor/tile/dark/gray, /area/centcom/valhalla) "wWg" = ( /obj/structure/table, @@ -17755,9 +15657,6 @@ /obj/item/tool/crowbar/red, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"wXk" = ( -/turf/open/floor/plating/dmg1, -/area/centcom/valhalla) "wXW" = ( /turf/open/floor/mainship/sterile/side{ dir = 9 @@ -17780,9 +15679,6 @@ /obj/machinery/vending/weapon/valhalla, /turf/open/floor/plating, /area/centcom/valhalla) -"wZp" = ( -/turf/open/floor/tile/neutral/full, -/area/centcom/valhalla) "wZJ" = ( /obj/structure/sign/botany, /mob/living/simple_animal/cow, @@ -17808,17 +15704,6 @@ dir = 5 }, /area/centcom/valhalla) -"xbj" = ( -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) -"xbI" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 4 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "xcd" = ( /obj/structure/bed, /obj/item/disk/nuclear{ @@ -17828,21 +15713,12 @@ /obj/item/bedsheet/red, /turf/open/floor/plating, /area/centcom/valhalla) -"xco" = ( -/turf/closed/wall, -/area/centcom/valhalla) "xdq" = ( /obj/structure/bed/chair/wood/wings{ dir = 8 }, /turf/open/floor/wood, /area/tdome/tdomeobserve) -"xdz" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/turf/open/floor/tile/neutral/corner, -/area/centcom/valhalla) "xeQ" = ( /obj/effect/turf_decal/warning_stripes/box/small{ dir = 4 @@ -17852,16 +15728,6 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"xeT" = ( -/turf/open/floor/tile/neutral, -/area/centcom/valhalla) -"xfa" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) -"xfB" = ( -/obj/machinery/status_display/ai, -/turf/closed/wall, -/area/centcom/valhalla) "xfO" = ( /obj/structure/sign/securearea{ pixel_x = 32; @@ -17912,17 +15778,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"xgy" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) -"xgK" = ( -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"xgQ" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "xgS" = ( /obj/structure/bed, /obj/item/bedsheet/brown, @@ -17964,9 +15819,6 @@ dir = 8 }, /area/centcom/valhalla) -"xil" = ( -/turf/open/floor/plating/dmg3, -/area/centcom/valhalla) "xiF" = ( /obj/effect/ai_node, /turf/open/floor/wood/broken, @@ -17992,10 +15844,6 @@ dir = 5 }, /area/centcom/valhalla) -"xjT" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/dmg1, -/area/centcom/valhalla) "xjX" = ( /obj/effect/turf_decal/warning_stripes/thick{ dir = 4 @@ -18021,10 +15869,6 @@ dir = 5 }, /area/centcom/valhalla) -"xky" = ( -/obj/machinery/status_display, -/turf/closed/wall, -/area/centcom/valhalla) "xkI" = ( /obj/structure/bed/chair{ dir = 4 @@ -18034,12 +15878,6 @@ }, /turf/open/floor/wood/broken, /area/centcom/valhalla) -"xlK" = ( -/obj/machinery/air_alarm{ - dir = 1 - }, -/turf/open/floor/freezer, -/area/centcom/valhalla) "xlM" = ( /obj/machinery/conveyor{ dir = 8; @@ -18053,9 +15891,6 @@ /obj/effect/turf_decal/warning_stripes/thick, /turf/open/floor/mainship/tcomms, /area/centcom/valhalla) -"xmq" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "xmt" = ( /obj/effect/turf_decal/warning_stripes/thick/corner{ dir = 8 @@ -18085,24 +15920,12 @@ /obj/effect/ai_node, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"xnt" = ( -/turf/open/floor/tile/neutral{ - dir = 4 - }, -/area/centcom/valhalla) -"xnM" = ( -/turf/open/floor/plating, -/area/centcom/valhalla) "xom" = ( /turf/open/floor/mainship/sterile/white, /area/centcom/valhalla) "xoR" = ( /turf/open/floor/tile/lightred/full, /area/centcom/valhalla) -"xoW" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "xpm" = ( /obj/item/target/alien, /turf/open/floor/plating/dmg3, @@ -18164,13 +15987,6 @@ }, /turf/open/floor/plating/ground/mars/random/cave, /area/centcom/valhalla/xenocave) -"xtw" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/flora/ausbushes/grassybush, -/turf/open/floor/grass, -/area/centcom/valhalla) "xtx" = ( /obj/machinery/hydroponics, /obj/effect/turf_decal/warning_stripes/thick{ @@ -18181,10 +15997,6 @@ "xtI" = ( /turf/open/floor/plating, /area/tdome) -"xux" = ( -/obj/effect/turf_decal/warning_stripes/box, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "xvP" = ( /obj/structure/table, /obj/item/storage/secure/briefcase, @@ -18210,9 +16022,6 @@ }, /turf/open/floor/tile/neutral/full, /area/centcom/valhalla) -"xyI" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "xzr" = ( /obj/machinery/hydroponics, /obj/item/radio/intercom{ @@ -18223,41 +16032,12 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"xzt" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) -"xzG" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/scorched, -/area/centcom/valhalla) -"xzU" = ( -/turf/open/floor/plating, -/area/centcom/valhalla) "xAJ" = ( /obj/structure/sign/securearea{ dir = 1 }, /turf/closed/mineral/smooth, /area/centcom/valhalla/exterior) -"xAL" = ( -/turf/open/floor/wood, -/area/centcom/valhalla) -"xAT" = ( -/turf/open/floor/grimy, -/area/centcom/valhalla) -"xBe" = ( -/obj/machinery/door/firedoor{ - dir = 2 - }, -/obj/effect/turf_decal/warning_stripes/thick, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/obj/machinery/door/airlock/mainship/engineering/free_access{ - dir = 1 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "xBx" = ( /obj/structure/window/framed/colony/reinforced/hull, /obj/machinery/door/poddoor/shutters/mainship{ @@ -18267,31 +16047,11 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"xCO" = ( -/obj/structure/plasticflaps, -/turf/open/floor/plating, -/area/centcom/valhalla) "xDj" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/ai_node, /turf/open/floor/wood, /area/centcom/valhalla) -"xDl" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) -"xEy" = ( -/obj/machinery/door/firedoor{ - dir = 2 - }, -/obj/effect/turf_decal/warning_stripes/thick, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/obj/machinery/door/airlock/mainship/generic{ - dir = 1 - }, -/turf/open/floor/tile/neutral/full, -/area/centcom/valhalla) "xEJ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/tile/neutral/full, @@ -18320,14 +16080,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"xES" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/neutral/corner, -/area/centcom/valhalla) -"xFa" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "xFH" = ( /obj/structure/table, /obj/item/storage/toolbox/mechanical{ @@ -18378,6 +16130,13 @@ /obj/structure/grille/smoothing, /turf/open/space, /area/space) +"xHy" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/marine_selector/clothes/commander/valhalla, +/turf/open/floor/tile/dark/gray, +/area/centcom/valhalla) "xIx" = ( /obj/structure/table/reinforced, /obj/item/clipboard, @@ -18396,28 +16155,6 @@ /obj/structure/bed/stool, /turf/open/floor/tile/cafe, /area/centcom/valhalla) -"xJf" = ( -/obj/structure/window/framed/colony/reinforced/hull, -/turf/open/floor/plating, -/area/centcom/valhalla) -"xJg" = ( -/turf/closed/wall, -/area/centcom/valhalla) -"xJj" = ( -/turf/closed/wall, -/area/centcom/valhalla) -"xJq" = ( -/turf/closed/wall/r_wall, -/area/centcom/valhalla) -"xJv" = ( -/obj/effect/turf_decal/tile/black{ - dir = 1 - }, -/obj/effect/turf_decal/tile/black, -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) "xKl" = ( /obj/structure/closet/secure_closet/freezer/fridge, /obj/item/storage/box/donkpockets, @@ -18433,14 +16170,6 @@ dir = 5 }, /area/centcom/valhalla) -"xKO" = ( -/obj/effect/ai_node, -/turf/open/floor/plating, -/area/centcom/valhalla) -"xKR" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "xKU" = ( /obj/structure/sign/fixedinplace/engineering{ pixel_y = 10 @@ -18486,25 +16215,6 @@ dir = 5 }, /area/centcom/valhalla) -"xLY" = ( -/obj/machinery/door/firedoor{ - dir = 2 - }, -/obj/effect/turf_decal/warning_stripes/thick, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"xLZ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/dmg2, -/area/centcom/valhalla) -"xMI" = ( -/turf/open/floor/tile/neutral{ - dir = 1 - }, -/area/centcom/valhalla) "xMP" = ( /obj/structure/table, /obj/item/book/manual/barman_recipes, @@ -18513,14 +16223,6 @@ /obj/item/reagent_containers/food/drinks/drinkingglass, /turf/open/floor/tile/dark, /area/centcom/valhalla) -"xNS" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/neutral/full, -/area/centcom/valhalla) -"xOi" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "xOF" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/red{ @@ -18567,10 +16269,6 @@ dir = 5 }, /area/centcom/valhalla) -"xPu" = ( -/obj/structure/window/framed/colony/reinforced, -/turf/open/floor/plating, -/area/centcom/valhalla) "xPv" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -18600,15 +16298,6 @@ /obj/item/tool/pen, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"xQq" = ( -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) -"xQP" = ( -/obj/structure/window/framed/colony/reinforced/hull, -/turf/open/floor/plating, -/area/centcom/valhalla) "xQU" = ( /obj/machinery/telecomms/relay, /turf/open/floor/gcircuit, @@ -18625,10 +16314,6 @@ /obj/effect/turf_decal/warning_stripes/box/empty, /turf/closed/wall/r_wall/unmeltable, /area/centcom/valhalla) -"xSv" = ( -/obj/structure/window/framed/colony/reinforced/hull, -/turf/open/floor/plating, -/area/centcom/valhalla) "xSK" = ( /obj/machinery/door/poddoor{ id = "engstorage"; @@ -18636,43 +16321,6 @@ }, /turf/open/floor/plating, /area/centcom/valhalla) -"xTa" = ( -/obj/machinery/door/firedoor{ - dir = 2 - }, -/obj/effect/turf_decal/warning_stripes/thick, -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 1 - }, -/obj/machinery/door/airlock/mainship/security/free_access{ - dir = 1 - }, -/turf/open/floor/plating, -/area/centcom/valhalla) -"xTc" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) -"xTn" = ( -/obj/effect/turf_decal/tile/black{ - dir = 8 - }, -/obj/effect/turf_decal/tile/black{ - dir = 1 - }, -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) -"xTw" = ( -/obj/effect/ai_node, -/turf/open/floor/plating, -/area/centcom/valhalla) -"xTH" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "xTN" = ( /obj/structure/table/reinforced, /obj/item/book/manual/chef_recipes, @@ -18683,49 +16331,16 @@ }, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"xTR" = ( -/obj/structure/window/framed/colony/reinforced/hull, -/obj/structure/sign/doors{ - desc = "A sign that shows there are doors here. There are doors everywhere!"; - name = "WARNING: EXTERNAL AIRLOCK" - }, -/turf/open/floor/plating, -/area/centcom/valhalla) "xTZ" = ( /obj/structure/window/framed/colony/reinforced/hull, /turf/open/floor/engine, /area/centcom/valhalla) -"xUc" = ( -/turf/open/floor/plating, -/area/centcom/valhalla) "xUk" = ( /obj/machinery/firealarm, /obj/structure/bedsheetbin, /obj/effect/turf_decal/warning_stripes/box/empty, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"xUt" = ( -/turf/open/floor/plating/dmg1, -/area/centcom/valhalla) -"xUy" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/shower{ - pixel_y = 16 - }, -/obj/structure/curtain, -/obj/machinery/door/window{ - name = "Shower" - }, -/obj/effect/spawner/random/misc/soap/regularweighted, -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/mainship/sterile/white, -/area/centcom/valhalla) -"xUS" = ( -/obj/structure/sign/vacuum, -/turf/closed/wall, -/area/centcom/valhalla) "xUV" = ( /obj/machinery/firealarm{ dir = 8 @@ -18735,10 +16350,6 @@ }, /turf/open/floor/gcircuit, /area/centcom/valhalla) -"xVt" = ( -/obj/structure/window/framed/colony/reinforced/hull, -/turf/open/floor/plating, -/area/centcom/valhalla) "xVz" = ( /obj/effect/turf_decal/sandytile/sandyplating, /turf/closed/wall/r_wall/unmeltable, @@ -18758,15 +16369,6 @@ }, /turf/closed/wall/r_wall/unmeltable, /area/centcom/valhalla) -"xWB" = ( -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) -"xWF" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "xWH" = ( /obj/machinery/firealarm{ dir = 4 @@ -18781,9 +16383,6 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"xWW" = ( -/turf/open/floor/plating/scorched, -/area/centcom/valhalla) "xXb" = ( /obj/effect/turf_decal/tile/black, /obj/effect/turf_decal/tile/yellow{ @@ -18857,15 +16456,6 @@ /obj/effect/turf_decal/warning_stripes/box, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"xYy" = ( -/obj/effect/ai_node, -/turf/open/floor/wood, -/area/centcom/valhalla) -"xYR" = ( -/turf/open/floor/tile/vault{ - dir = 5 - }, -/area/centcom/valhalla) "xYZ" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/warning_stripes/thick{ @@ -18903,30 +16493,11 @@ /obj/item/circuitboard/airlock, /turf/open/floor/wood, /area/centcom/valhalla) -"ybm" = ( -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"ybs" = ( -/obj/structure/window/framed/colony/reinforced/hull, -/turf/open/floor/plating, -/area/centcom/valhalla) "ybu" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/ai_node, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"ybT" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"ybY" = ( -/obj/effect/turf_decal/warning_stripes/thick{ - dir = 8 - }, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "ycL" = ( /obj/effect/ai_node, /turf/open/floor/tile/lightred/full, @@ -18938,18 +16509,12 @@ }, /turf/open/floor/tile/lightred/full, /area/centcom/valhalla) -"ycV" = ( -/turf/closed/wall, -/area/centcom/valhalla) "ydu" = ( /obj/structure/table, /obj/item/storage/firstaid/regular, /obj/effect/turf_decal/warning_stripes/box/empty, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"ydT" = ( -/turf/closed/wall, -/area/centcom/valhalla) "yec" = ( /obj/structure/extinguisher_cabinet{ dir = 1 @@ -18963,12 +16528,6 @@ /obj/item/tool/wrench, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"yew" = ( -/obj/structure/toilet{ - dir = 4 - }, -/turf/open/floor/mainship/sterile/white, -/area/centcom/valhalla) "yeH" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -18993,12 +16552,6 @@ /obj/effect/ai_node, /turf/open/floor/tile/dark/gray, /area/centcom/valhalla) -"yfy" = ( -/obj/structure/sign/securearea{ - dir = 1 - }, -/turf/closed/wall/r_wall/unmeltable, -/area/centcom/valhalla) "yfz" = ( /turf/open/floor/tile/cafe, /area/centcom/valhalla) @@ -19015,9 +16568,6 @@ }, /turf/open/floor/tile/dark2, /area/centcom/valhalla) -"yfE" = ( -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) "yga" = ( /obj/effect/turf_decal/warning_stripes/box/small{ dir = 1 @@ -19036,9 +16586,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/scorched, /area/centcom/valhalla) -"ygB" = ( -/turf/open/floor/tile/dark, -/area/centcom/valhalla) "yhb" = ( /turf/open/floor/plating/ground/mars/random/cave, /area/space) @@ -19048,9 +16595,6 @@ }, /turf/open/floor/tile/neutral/full, /area/centcom/valhalla) -"yhA" = ( -/turf/closed/wall/r_wall, -/area/centcom/valhalla) "yhB" = ( /turf/open/floor/tile/escape{ dir = 4 @@ -19060,9 +16604,6 @@ /obj/machinery/telecomms/allinone, /turf/open/floor/gcircuit, /area/centcom/valhalla) -"yhG" = ( -/turf/closed/wall/r_wall, -/area/centcom/valhalla) "yhP" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 @@ -19147,10 +16688,6 @@ dir = 5 }, /area/centcom/valhalla) -"yjA" = ( -/obj/effect/ai_node, -/turf/open/floor/plating, -/area/centcom/valhalla) "ykJ" = ( /obj/structure/table, /obj/item/toy/dice, @@ -19182,14 +16719,6 @@ }, /turf/open/floor/engine, /area/centcom/valhalla) -"ylG" = ( -/obj/effect/turf_decal/warning_stripes/box/empty, -/turf/open/floor/tile/dark/gray, -/area/centcom/valhalla) -"ylM" = ( -/obj/machinery/status_display, -/turf/closed/wall, -/area/centcom/valhalla) (1,1,1) = {" xrI @@ -22153,15 +19682,15 @@ xrI xrI jYG jYG -hTv -hTv -hTv -hTv -hTv -hTv -hTv -hTv -hTv +box +box +box +box +box +box +box +box +box jYG jYG jYG @@ -22291,7 +19820,7 @@ xrI jYG jYG jYG -hTv +box nKg jWH gzS @@ -22299,15 +19828,15 @@ bCd nKg fvw wZg -hTv +box jYG -muO +box njR -muO -muO -muO -muO -muO +box +box +box +box +box aMY fWu fWu @@ -22429,7 +19958,7 @@ xrI xrI jYG jYG -hTv +box foh jWH pqM @@ -22437,15 +19966,15 @@ sWX foh fvw eCf -hTv +box jYG -muO +box nmD nXU oCB ptt qCX -muO +box sqE fmR fmR @@ -22567,7 +20096,7 @@ vQc vQc jYG jYG -hTv +box lPX oNZ wkQ @@ -22575,15 +20104,15 @@ dFm wkQ mzH lPX -hTv +box fmR -muO +box nmD nXU oHc -pwb +acu qEL -muO +box ssF sTI ssF @@ -22705,7 +20234,7 @@ fmR fmR fmR jYG -hTv +box nKg jWH wZg @@ -22713,27 +20242,27 @@ fvw nKg fvw wZg -hTv -hTv -hTv -hTv -hTv +box +box +box +box +box oHK -pwb +acu qFF -rvV -rnE -ssX -rnE -rnE -rnE -rvV -rvV -rvV -rvV -rvV -rvV -rvV +box +bka +fCn +bka +bka +bka +box +box +box +box +box +box +box fmR fmR fmR @@ -22843,7 +20372,7 @@ fmR fmR vQc fmR -hTv +box foh jWH pqM @@ -22851,27 +20380,27 @@ xOF foh fvw pqM -duo +drL uOI ble etk -hTv -oUq +box +bSp pwR -oUq -rvV +bSp +box sto sVb -suW -uEj +ctr +cXT vtZ -wxi +bSp xmh xPe yhE bcJ bWc -rvV +box fWu fmR fmR @@ -22981,35 +20510,35 @@ fWu fWu fWu fWu -hTv +box bgz rBJ -tVp +mCI lMV xgU lMV -tVp +mCI gMl gJS myT noL -hTv +box oUK -pGk +mCI qHA -uEj +cXT suy sZE -suW -uEj +ctr +cXT vvm -wxi +bSp xmt mhk yhP mhk sad -rvV +box fmR fmR fmR @@ -23110,44 +20639,44 @@ fmR fWu fWu fmR -ngU +cYa fmR fmR fmR -ics -lgU +aEn +bcm fmR fmR bjQ -hTv +box bog -ndm -ndm -ndm -ndm -ndm -ndm +ivs +ivs +ivs +ivs +ivs +ivs gNi -ndm +ivs cdt gCD -hTv +box oVR pJE -qHG -riU -suW -suW -suW +cHJ +bWt +ctr +ctr +ctr uEJ -vxo +bve wxr xmh xQU yip gzl ukJ -rvV +box fmR fmR fmR @@ -23260,24 +20789,24 @@ boq boq wfL xVT -llp -ndm -gnR +jcx +ivs +aqy gzY lEp lEp lEp lEp -hTv -hTv +box +box oXa pNT -qIk -uEj +bGv +cXT svr tiz -suW -uEj +ctr +cXT vyL wxE xqi @@ -23285,7 +20814,7 @@ hXf yiC hXf ygh -rvV +box fWu fmR fmR @@ -23384,46 +20913,46 @@ xrI fmR fWu fmR -lgU +bcm aMq bqF aSD aMq bbR -icW +drS rvU bPK jvi boq boq qhT -sWH -llp -ndm -nZy +hdk +jcx +ivs +cHJ rei lEp wHz dyS mLF -muO -nYA +box +bka oXK -mCH +boq qKb -rnE +bka syY tiF -suW -uEj +ctr +cXT vzV -wxi +bSp xmh xRl yiP rJG bWc -rvV +box fWu fmR vQc @@ -23535,33 +21064,33 @@ dhA boq boq mGD -sWH -llp -ndm -nZy +hdk +jcx +ivs +cHJ rVD lFj dAJ dBD dAJ -pcb -nYA -oXS +box +bka +cXT pPo qKc -ssX -rnE -ssX -rnE -rnE -rnE -rvV -rvV -rvV -rvV -rvV -rvV -rvV +fCn +bka +fCn +bka +bka +bka +box +box +box +box +box +box +box fWu fmR fmR @@ -23673,16 +21202,16 @@ boq dAJ boq mGD -sWH -llp -tzf -nZy +hdk +jcx +kqf +cHJ ohu -hTv -hTv -gpt -hTv -pcb +box +box +bka +box +box ylD uSc pTn @@ -23694,7 +21223,7 @@ tES uSc vCR wAP -pcb +box xRJ fmR xRJ @@ -23798,29 +21327,29 @@ xrI fmR fWu fmR -lgU +bcm aLR aMq aMq dlQ bbO jvi -rQk +fdy boq boq xpm boq -wgK +ghB jvR rht iVt wqU -tWP +luM mEH -hTv +box hwl -ndm -pcb +ivs +box ody oZR pTA @@ -23833,10 +21362,10 @@ uTS vDx wAY xyv -pcb -xzt +box +box xRK -xzt +box fmR bRv vQc @@ -23937,44 +21466,44 @@ fmR fWu fWu fmR -lgU +bcm aLR bKo aMq bbR eFA boq -ngU -hTv -hTv -nCB -nCB -hTv +cYa +box +box +bSp +bSp +box hYu -llp -ndm +jcx +ivs sJF jkk -hTv +box ijc -ndm -pcb +ivs +box odW pac pTP -pcb +box rxk rxk rxk -pcb +box uUZ pVV pVV pVV xSK -lIl +gao iEJ -xzt +box xRJ bRv fWu @@ -24083,36 +21612,36 @@ gQk eGk boq fmR -hTv +box uut yeN mqB knm cnE -llp +jcx tSq -tWP +luM kQN -hTv +box hwl -ndm -pcb +ivs +box ofr paB pTP -qML +bFJ pVV pVV pVV -qML +bFJ uUZ vFG pVV pVV xSK -mJJ +jTE mHB -xzt +box xRJ bRv eCH @@ -24218,39 +21747,39 @@ fWu fWu fmR fmR -lgU +bcm rXh fmR -hTv +box psp -llp -ndm +jcx +ivs knm qlP -llp -ndm +jcx +ivs oYw cbS -hTv -ndm -ndm -pcb +box +ivs +ivs +box ogJ -pcb -pcb +box +box qNh rAT rAT tjg -pcb +box uVY vGG pVV pVV -pcb +box lOo iKC -xzt +box naJ xRJ dVf @@ -24356,39 +21885,39 @@ fmR num bRv fWu -ngU +cYa boq fmR -hTv +box uut -llp +jcx yeN iNh jaD rht wqU -tWP -hTv -hTv -hTv -hTv -pcb -ogS +luM +box +box +box +box +box +ogS pdz pVn qOf rFk rFk tlz -pcb +box uYl vIT wEk pVV -pcb +box nsa osZ -xzt +box naJ naJ fmR @@ -24497,20 +22026,20 @@ fWu fWu fWu fWu -hTv -hTv -nCB -nCB -hTv +box +box +bSp +bSp +box tvG -llp -ndm +jcx +ivs bZV knm ppm lYp epz -qML +bFJ ohN pec pVV @@ -24518,15 +22047,15 @@ pec pVV sDz pVV -tHw +bSp vaS vJz -wFc +acu pVV -pcb -xzt -xzt -xzt +box +box +box +box naJ xRJ fmR @@ -24635,20 +22164,20 @@ fmR fmR fmR fWu -hTv +box bqN -llp +jcx kIe knm cHN -llp +jcx wqU kjb kmz -ndm +ivs lYp oJr -pcb +box ojb pdz pZI @@ -24656,7 +22185,7 @@ qOm rIl rIl tmx -pcb +box vcW vKE wFe @@ -24664,7 +22193,7 @@ pVV mMK wIw wDv -xzt +box naJ fWu dVf @@ -24773,28 +22302,28 @@ vQc vQc fmR fWu -hTv +box gds yeN -tzf +kqf knm bCY -llp -ndm -jiU +jcx +ivs +jaW knm dHM lYp cre -pcb +box ogJ -pcb -pcb +box +box qOE rPe rPe tnl -pcb +box uUZ vMi pVV @@ -24802,7 +22331,7 @@ pVV xTZ nvt lXm -xzt +box oSl fWu bRv @@ -24813,16 +22342,16 @@ vQc lEv lEv lEv -hec -ycV -ycV -ycV -ycV -ycV -ycV -ycV -ycV -ycV +box +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm fWu fWu fWu @@ -24911,28 +22440,28 @@ vQc vQc fmR fWu -hTv +box bqN -llp -llp +jcx +jcx khV nXQ -llp +jcx wqU jtL -hTv -nCB -nCB -hTv -pcb +knm +mPJ +lYp +xHy +box ojb pfu qaL -qML +bFJ pVV pVV pVV -qML +bFJ ven vOH pVV @@ -24948,19 +22477,19 @@ fmR vQc vQc vQc -fLm -fLm -fLm -hec +bSp +bSp +bSp +box iCm ygo -xil -xTw +dAJ +ead cqb -jrN -xTw +hdN +ead jKc -ycV +bcm fmR fmR fmR @@ -25049,36 +22578,36 @@ vQc vQc fmR fWu -hTv -hTv -nCB -nCB -hTv +box +box +bSp +bSp +box kKa fPm -ndm -tWP +ivs +luM knm -mPJ -mHP -oJr -pcb +bSp +bSp +box +box ojb pfu qaL -pcb +box rRU sEP rRU -pcb +box vgS pVV pVV pVV -pcb -xzt -xzt -xzt +box +box +box +box fWu bRv fWu @@ -25086,19 +22615,19 @@ fmR vQc vQc vQc -fLm +bSp xvP kTE -hec -ycV -ycV -ycV -ovg -ycV -ycV +box +bcm +bcm +bcm +ncr +bcm +bcm cqb gtX -ycV +bcm fmR fmR fmR @@ -25187,20 +22716,20 @@ vQc vQc fmR fWu -hTv -mNv -llp +box +jCQ +jcx rhC knm sCM yeN wqU -tWP +luM knm -ndm -mHP -mPJ -pcb +mPT +hDW +oJr +box omN pgz qby @@ -25224,26 +22753,26 @@ vQc iyF fmR vQc -fLm +bSp vKP vTy -hec +box fML iWM pmg -uxN +dnm yaZ -ycV +bcm cqb -hec +box cYa -ycV -ycV -ycV +bcm +bcm +bcm cYa cYa -ycV -ycV +bcm +bcm fmR fmR fWu @@ -25325,20 +22854,20 @@ fmR fmR fmR fWu -hTv +box oJr -llp -tzf +jcx +kqf knm jtp -llp -tzf +jcx +kqf aoa frZ -mHP -mHP +ivs +hDW mPT -pcb +box onp qbK qbK @@ -25350,7 +22879,7 @@ qQT qQT vTB wIH -pcb +box xRJ kPj kPj @@ -25362,7 +22891,7 @@ gxS fmR fmR fWu -fLm +bSp aai pFs rGn @@ -25371,17 +22900,17 @@ wQr nnk xDj ttw -ycV -qFW -hec +bcm +boq +box edn -ckK +bve lfg hrC euF sAp oAl -ycV +bcm fmR fmR fWu @@ -25463,36 +22992,36 @@ fmR fmR fWu fWu -hTv -mNv -llp -llp +box +jCQ +jcx +jcx tFi aWz -llp +jcx wqU -tWP -bRv -hTv -mbY -hTv -pcb -mDO -mDO -mDO -mDO -mDO -mDO -mDO -nvO -vjO -vVy -vjO -xzt -xWB -xWB -xWB -xWB +htj +box +hDW +hDW +uUY +box +bka +bka +bka +bka +bka +bka +bka +afj +cXT +vFU +cXT +box +box +box +box +box naJ xRJ fWu @@ -25500,26 +23029,26 @@ fmR fmR fmR fWu -hec -hec -hec -hec +box +box +box +box jIi hqh xkI aqi aIN -ycV -qFW -hec +bcm +boq +box qGp qVp vgc -uxN +dnm ffn ffn -ipc -ycV +ckN +bcm fmR fmR fWu @@ -25601,36 +23130,36 @@ fmR fmR fWu fmR -hTv +box gae -woV +box fat -woV -woV -woV +box +box +box iXv jvG -woV -woV +box +box gae -woV -woV -mvn -mvn -mvn +box +box +bka +bka +bka dcS -xnM +boq ead -xnM +boq tQh vka -vZJ +dGm wMc -vjO +cXT xWH sJK jQD -xWB +box naJ naJ fWu @@ -25638,26 +23167,26 @@ fWu fWu fWu fWu -hec +box xcd -qFW -hec -ycV -ycV -ycV -ycV -ycV -ycV +boq +box +bcm +bcm +bcm +bcm +bcm +bcm cqb -hec +box bVr -ckK -ipc +bve +ckN hrC tFs fyE -ipc -ycV +ckN +bcm fmR fmR fWu @@ -25739,61 +23268,61 @@ fmR fmR fWu fmR -lgU +bcm eAp -mvn +bka iTP oYn epO -lGH +cXT jaW -jwi +hMu koR mYA mcN -lGH -ecT -ecT -ecT -mvn +cXT +ckN +ckN +ckN +bka gGv ead -vLH -vLH -vLH -kQR -vlt +bka +bka +bka +iYS +ivs wMo -vjO +cXT xXb dTl qjg -xWB -pcb +box +box ocC -pcb -pcb -pcb -pcb -pcb -hec -hec -hec -hec +box +box +box +box +box +box +box +box +box qed dVK dii eUe xjX -hec +box fuY -hec -ycV -ovg -ycV -ycV +box +bcm +ncr +bcm +bcm hrC -qFW +boq sYY cYa fmR @@ -25879,28 +23408,28 @@ fWu fmR baD eAt -mvn +bka fUN -hag -hag -ior +aYI +aYI +dGn jcb jxN kqf ivs mda -lGH +cXT nwK ouT nwK -mvn +bka wsm mZM -vLH +bka tpX tQl -vlt -vlt +ivs +ivs wNF vGZ xXb @@ -25910,31 +23439,31 @@ lcR sDo keE nUD -iZD -iZD +ivs +ivs ndS -mDO +bka fTH -qFW -qFW -qUU +boq +boq +dBD kYM cqb kJw -tgW -qFW -qFW -xTw -tgW -qFW +eFA +boq +boq +ead +eFA +boq isr dyf -kGn -uxN +hlc +dnm qhV -qFW -ycV -fmR +boq +bcm +fmR fmR fWu fmR @@ -26017,61 +23546,61 @@ fmR fmR dVr eAE -mvn +bka fVz iMw hCL -lGH +cXT jcx jAd kqG kYp mdp -lGH -ecT -ecT -ecT -mvn -xnM -ojA -vLH +cXT +ckN +ckN +ckN +bka +boq +dAJ +bka tpX tRh mcf -weH +dTl wMo -xBe +iWr xXb dTl dio yeH iWr -hNt +aIr ocH -tgY +iYS gVx hwk -mDO -qFW +bka +boq iQN -srV -srV -srV -srV -srV -srV -rzX -srV -srV -srV -rzX -srV -xTw -ycV +bcm +bcm +bcm +bcm +bcm +bcm +nvn +bcm +bcm +bcm +nvn +bcm +ead +bcm kCN pZK -ipc -ycV +ckN +bcm fmR fmR fWu @@ -26147,69 +23676,69 @@ fWu fmR fmR fmR -ngU -ngU +cYa +cYa fmR -lgU -ngU -lgU +bcm +cYa +bcm czV dsS gaN -mvn -lGH -lGH -mvn +bka +cXT +cXT +bka iXv jAF -mvn +bka lhE -lGH -mvn -lGH +cXT +bka +cXT kME -lGH -mvn -nbd +cXT +bka +eFA rSA -vLH +bka trx tRy vka wbh wMo -xCO +hUt xXb dTl dTl yeH -mDO +bka xUk -wqZ +gtX hjG -tgY +iYS kEE -mDO -qFW +bka +boq uEH -srV +bcm pSb cYU acu kkv rsh ojF -srV +bcm voO elO rKr -srV -wXk -tMS -qFW +bcm +drS +hhc +boq adx jGs -ycV +bcm fmR fmR fWu @@ -26293,13 +23822,13 @@ aMq aMq aMq bbR -fbp +boq geA ade hDu ioO ivu -jwi +hMu pLH lhK mdt @@ -26307,14 +23836,14 @@ mQt jXM pGN luM -moJ +hlc mZo rYw -pww +kQB qcq tSA vka -weH +dTl wPc vGZ xXb @@ -26323,30 +23852,30 @@ dTl yeH xgx hXM -wqZ +gtX qqo yiL ptA -mDO -tgW +bka +eFA jLk -srV +bcm xfX -vjb -vnN -qFr -ivQ +nCA +dnm +bPH +ckN fad rhs pii umc bgM -srV -tgW -ycV -ycV -ycV -ycV +bcm +eFA +bcm +bcm +bcm +bcm cYa fmR fmR @@ -26448,11 +23977,11 @@ lvE bIy mZM ojM -vLH +bka tvT cnL rjI -vlt +ivs wRz xEQ xXC @@ -26463,25 +23992,25 @@ rzm cgS rZp xjs -iZD +ivs lmF -mDO -wXk +bka +drS lOR -woW +iNd acu -klg -vnN -vnN +aNP +dnm +dnm pSb aSM -srV +bcm wae eUB hGs -srV -qFW -oOW +bcm +boq +cXT aqi sLz nWJ @@ -26569,7 +24098,7 @@ boq dAJ boq eFA -fbp +boq ghq hdk cKm @@ -26581,14 +24110,14 @@ ivi hGj ivi nAP -jwi +hMu cJf -mvn -nbd +bka +eFA ojW -vLH +bka qcP -weH +dTl rkT sID tEx @@ -26600,30 +24129,30 @@ yeH xgx pon wiL -hdP +dii nsT sis -mDO +bka qbx odj -srV +bcm aBf fad -scd -vnN -ivQ +hrC +dnm +ckN acu -qPi -srV -srV -srV -srV +cfQ +bcm +bcm +bcm +bcm oCR -kGn -uah -ckK +hlc +acu +bve sSN -ycV +bcm fmR fmR fmR @@ -26697,7 +24226,7 @@ fmR fWu fmR fmR -ngU +cYa aMq bbR bnV @@ -26707,7 +24236,7 @@ dfx boq dXi eFA -fbp +boq ghB dur hGL @@ -26721,55 +24250,55 @@ ivs kcp ivs xTN -mvn +bka ncr -olK -vLH +bcm +bka qdC tVS vmJ sKX wTz -vLH -xFa +bka +cXT vFU vFU -xFa -mDO +cXT +bka vWm ckl kdT mjv gks -mDO -ovg -ycV -qQJ +bka +ncr +bcm +hhc jAq vJN -vnN +dnm gxI pyx -ivQ +ckN gYp -srV +bcm dDH -qFW +boq dUh cqb -oOW +cXT gPw gPw -uah -ycV +acu +bcm fmR fmR fmR -sKi -sKi -uDy -sKi -gCo +bcm +bcm +nvn +bcm +box fmR fmR fWu @@ -26843,71 +24372,71 @@ boq boq boq dBm -ngU +cYa eGk gCr -mvn -mvn +bka +bka hJe ivu -nDI +bcm jCQ ivu -nDI +bcm jkS jkS -nDI +bcm kME -lGH -mvn -ygB +cXT +bka +acu vOm pJi -vLH +bka sMi sMi sMi -vLH -vLH +bka +bka wLk -wOu -mvm +eqJ +cJv bVK pat -mDO +bka aVA aVA aVA -mDO -mDO +bka +bka qTQ rPH -srV +bcm nek wAR -vnN -vnN +dnm +dnm gIH acu vFW -srV -qFW -ycV -ycV -ycV -ycV +bcm +boq +bcm +bcm +bcm +bcm jAu gIn gQv -ycV -sKi -sKi -sKi -sKi +bcm +bcm +bcm +bcm +bcm gCB lZp cIY -gCo +box fmR fmR vQc @@ -26976,76 +24505,76 @@ fWu fWu fWu fmR -ngU -ngU +cYa +cYa czV dgR -lgU -ngU +bcm +cYa boq fdA ghL -mvn +bka ufw iAc -nDI +bcm jDO iAc -nDI -xux -xux +bcm +aIr +aIr nDw -ecT +ckN lJm -mvn -wOu -wOu +bka +eqJ +eqJ pNw -wOu -wOu -wOu -wOu -tIS -wOu -wOu -wOu -vgK +eqJ +eqJ +eqJ +eqJ +ieT +eqJ +eqJ +eqJ +fHt xaB -vgK -vgK -vgK -vgK -vgK +fHt +fHt +fHt +fHt +fHt rNY -wVl -vgK -vgK -gKo -vjb -gAA -vnN -vnN +kYE +fHt +fHt +cXT +nCA +aNv +dnm +dnm wIE -ivQ +ckN tuC -srV -qFW -ycV +bcm +boq +bcm oSg aFd -jTH +iNd gDc eZa gEE -ycV -eNS +bcm +bZR suw uID eYv -xAL -pOy +dnm +cQa sPt -gCo +box fmR fmR vQc @@ -27115,7 +24644,7 @@ fmR fWu fmR fmR -hTv +box cGi dhA dBD @@ -27123,72 +24652,72 @@ boq dAJ feK gil -mvn +bka hJY iAH -nDI +bcm jGN krJ -nDI +bcm mdF -wPC +mCI nFR ovc daj -mvn +bka wYt orB -wVl -sNw -sNw -sNw -sNw -tJM -wQm -wQm +kYE +blf +blf +blf +blf +bSw +qPB +qPB dWe rRM -wQm -tJM +qPB +bSw nRL -wQm -wQm -wQm -wQm +qPB +qPB +qPB +qPB joH -sNw -vgK +blf +fHt kql -vnN -vnN -vnN -scd +dnm +dnm +dnm +hrC dJc acu mwU -srV +bcm vVY -kGn -qFW -qFW -kGn +hlc +boq +boq +hlc gDc hhR gDc -ycV -sKi -ufo -sKi -sKi -xgy -uGG -pZY -gCo -gCo -gCo -vQc -xrI -xrI +bcm +bcm +fZG +bcm +bcm +cXT +uGG +pZY +box +box +box +vQc +xrI +xrI xrI xrI xrI @@ -27254,76 +24783,76 @@ fWu fWu fWu box -fPe -fPe -fPe -fPe -fPe -fPe -fPe -mvn +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bka hMr iDF -mvn +bka hMr hMr ljt jkS jkS -mvn +bka vXO dap -mvn -wOu -wQm -sFR -uIP -rnw -rnw +bka +eqJ +qPB +aEn +bcm +cXT +cXT sNQ wUC -rnw -rnw -uIP -uIP -ceH -ygB -qzG -qzG -qzG -qzG +cXT +cXT +bcm +bcm +aok +acu +bcm +bcm +bcm +bcm uOH -qzG +bcm wYt -vgK +fHt sFI -vnN -scd -vnN -qFr +dnm +hrC +dnm +bPH icb -ivQ +ckN qkB -srV -qFW -ycV +bcm +boq +bcm qwh rou -ycV +bcm hiA keP dSR -ycV +bcm bGq -sKi +bcm wlk vwb -xAL -icr -icr +dnm +ctr +ctr rBN rrZ -gCo +box xrI xrI xrI @@ -27405,63 +24934,63 @@ hMu hMu hMu hMu -llJ -uRH -uRH -uRH -uRH -uRH -wOu -wOu +kYE +hMu +hMu +hMu +hMu +hMu +eqJ +eqJ otD -uIP +bcm twt qAB roM -sPV -tKb +eqJ +cJv roM roM rLk -sFR -ycV -ovg -qzG +aEn +bcm +ncr +bcm nsz gma gwH ipl -qzG -wOu +bcm +eqJ guA -gKo +cXT nIR fad -vnN -vnN -qMD +dnm +dnm +cAS acu -ivQ -kGn +ckN +hlc sdV -ycV -ycV -ycV -ycV -ycV -ycV -ycV -ycV -sKi -sKi -sKi -sKi +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm jZh kMK dGi xqp fwS -gCo +box xrI xrI xrI @@ -27531,75 +25060,75 @@ xrI xrI bSp cHk -dXp +bPH dGn -dXp -eHe -eHe -eHe +bPH +ctr +ctr +ctr dGn hMu bSw -jeH +blf jJz -jeH +blf vOu -pOU +hAb cCa -sNw -sNw -pOU -sNw -pOU -oEt -uIP +blf +blf +hAb +blf +hAb +clB +bcm twY -sPV +eqJ rsX -tSI -tSI +dTl +dTl vUD -wSe +fHt jhC -uIP -vmM -qFW -xky +bcm +bHu +boq +iNd fhh bYd iHX elc -qKJ +lOG wYt hRn -srV +bcm pSb njt mYF epY pYX -ivQ +ckN hMy -srV -qFW -xTw -qUU -qFW -wXk -qFW -qFW -tgW +bcm +boq +ead +dBD +boq +drS +boq +boq +eFA bcQ -sKi +bcm uax uEZ -sKi +bcm nPV -icr +ctr kbR nRC pNS -gCo +box xrI xrI xrI @@ -27670,7 +25199,7 @@ fWu box cHZ dnm -dGD +cXT dnm fRC fmy @@ -27678,66 +25207,66 @@ gle bCs hMu sdt -wGV -wGV -wGV -wGV -mEV -xco -xco +bcm +bcm +bcm +bcm +fZG +bcm +bcm cXT doS doS cXT -xco -uIP +bcm +bcm txW tXL rtA -tSI -tSI +dTl +dTl xFH -xdz +orB slY -uIP +bcm eQd kJw -kGn +hlc mVh nFA nAG snn -qzG -mLC +bcm +fbQ vtf -uMd -rhB -uMd -uMd -uMd -uMd -uMd -jYM -jYM -jYM -sZY -jYM -jYM +bcm +fZG +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm +nvn +bcm +bcm dNe keZ -lMJ +ghL cYa eiB rXw eYw -oVG +ckN gIJ -oVG +ckN eUG -sKi -ufo -sKi -gCo +bcm +fZG +bcm +box xrI xrI xrI @@ -27806,75 +25335,75 @@ fWu fWu box box -fPe -dnH -hOc -dYw -eHe +bcm +aVk +hhc +aLi +ctr foe glu bCs bLW -wpP -mxn +fHt +hhc jNR gFm hnQ mVF -xco +bcm kdt kMP lKR -qbM +hqk nkG kdU -uIP +bcm tzz tZl vpr -tbW -ufF +blf +bSw vpr vpr beB -uIP +bcm uvt cqb -qzG +bcm fKz uaJ iaa axF -qzG +bcm muI -vgK -ete +fHt +cXT phm ndM iSQ nSa wWg nSa -jYM +bcm dDK lAd aOX aqw -jYM -jYM -jYM -jYM -jYM -qFW -sKi -sKi -qyX -sKi -qyX +bcm +bcm +bcm +bcm +bcm +boq +bcm +bcm +cfQ +bcm +cfQ dpe -sKi +bcm cbG -qRd +dyf soG xrI xrI @@ -27945,75 +25474,75 @@ fmR box bZR cKf -doK +dcs vhy dnm eNk lKz glw -qmw -rSR -iHu +bka +eqJ +cJv caI fTj crv -wGV -mEV -xco +bcm +fZG +bcm keh yiI wrO lKY nmj gzk -uIP -uIP -uIP -uIP +bcm +bcm +bcm +bcm sZe -udp -uIP -nHZ -uIP -uIP -qFW -ycV -qzG -qzG -pgP -qzG -qzG -qzG +qPB +bcm +fZG +bcm +bcm +boq +bcm +bcm +bcm +fZG +bcm +bcm +bcm dJj -vgK +fHt tzB ckN -ucT +ouT ckN -cDn +cAS aWh lda -sYg +iNd tfU wXW woP bAZ -jYM +bcm lmv ttc vzA -jYM -qFW -sKi -tCS +bcm +boq +bcm +acu uXf tNc -icr +ctr ggF qnO xGF apI -xJf +bSp xrI xrI wQi @@ -28081,77 +25610,77 @@ fmR fmR fmR box -fPe +bcm fZG -fPe -fPe +bcm +bcm ncr -qmw -qmw -qmw -qmw -rSR -wpP -wGV +bka +bka +bka +bka +eqJ +fHt +bcm jPv -krR +dAC hnQ meb -xco +bcm yen wVM lKY jfk nsr oLe -uIP +bcm qha -tZA +cQa rxJ -tbW -ufF +blf +bSw rxJ -xYy +bPH cxp -uIP -qFW -syo +bcm +boq +bcm hOW fsd tLk jby pXS -syo +bcm suC -vgK -ete -wTe -wTe -wTe -wTe -wTe +fHt +cXT +tVa +tVa +tVa +tVa +tVa cEp -jYM +bcm vSS wXW fPS xwf -jYM +bcm jVk -uaU +fgD ctQ -jYM +bcm vVY -kGn -tCS +hlc +acu czZ aTe etV -iVx -gCo -gCo -gCo -gCo +bve +box +box +box +box xrI xrI xrI @@ -28218,72 +25747,72 @@ fWu fmR fmR fmR -boB +box caq -cKo +cbG drS -ojA +dAJ ead -xnM -fvU -xnM -jRW -rSR -iHu -wGV +boq +dBD +boq +hlc +eqJ +cJv +bcm jQy ksY -wGV -mEV -xco +bcm +fZG +bcm kgL uaK uYH uYH qUc rYK -odc +iNd wEP qBK -uIP -tbW -udp -odc +bcm +blf +qPB +iNd xgS fKX -uIP -qFW -syo +bcm +boq +bcm gPu jtz lqn mLW -kuc +bao avC -qlF +iYS bcc -jYM +bcm cPP -jYM -jYM +bcm +bcm rnH -jYM -jYM -jYM -xoW +bcm +bcm +bcm +cXT lpv lpv gmH -jYM +bcm aWN ily nEL -jYM -tgW -sKi +bcm +eFA +bcm rKv pEk -icr +ctr ajF pEk bMv @@ -28356,72 +25885,72 @@ fWu fWu fWu fmR -brs -xJq -xJq -xJq -xJq -xJq +box +bka +bka +bka +bka +bka eNF -fwP -xJq +dsS +bka kQB -rSR +eqJ iJw -wGV +bcm jRh gJX hnQ ctU -xco +bcm kis cYQ -pjR +aIr vUi nvQ ugp -uIP -uIP -uai -uIP -tbW -udp -uIP -nHZ -uIP -uIP -qFW -syo +bcm +bcm +mOd +bcm +blf +qPB +bcm +fZG +bcm +bcm +boq +bcm eOJ jbp eZf lXE bUK -vff -spM -vgK -rCR -rsu +cXT +ivs +fHt +aok +hhc ujr aBB oXe blB -xoW +cXT kPK leo aIr aIr noI -rsu +hhc jxS dqS aIA -jYM -tgW -sKi +bcm +eFA +bcm atU oYi -icr +ctr atU oYi bMv @@ -28494,52 +26023,52 @@ fmR fmR fWu fmR -brs -cdQ +box +bZR cMM dtT -dtV +bcm ebN -ePj -ePj +acu +acu glT -xJq +bka hOK bUs -qNs -qNs -qNs -qNs -mFU -cGB -cGB -xco +bka +bka +bka +bka +afj +bka +bka +bcm pjX qhn -xco -ntL -uIP +bcm +fZG +bcm oov uaG rxJ -tbW -ufF +blf +bSw rxJ -tZA +cQa tAQ -uIP -qFW -syo +bcm +boq +bcm kWX eIy oun jru xtx -qnk +hhc fik -vgK -tDN -jYM +fHt +jvA +bcm fTg kpH pgQ @@ -28550,16 +26079,16 @@ pFR hJN plk obe -jYM -xoW -xoW +bcm +cXT +cXT yfC -jYM -qFW -sKi +bcm +boq +bcm vrA pIu -icr +ctr sos sdG bMv @@ -28632,57 +26161,57 @@ aoZ aqQ fWu fmR -brs +box cfQ cNG -gqM -dtV -dtV +fZG +bcm +bcm ePH fyp gmE -xJq -rSR -iKO -fDX +bka +eqJ +aqy +cXT eBr kyU yjx mfj mRt -qNs -xTw -xil -qFW -tgW +bka +ead +dAJ +boq +eFA sbe -odc +iNd mLq uby -uIP +bcm tdj ujt -odc +iNd qBK wEP -uIP -tgW -syo +bcm +eFA +bcm aKc eIy jUa jru xtx -vff -ttg -vgK -pbm -jdQ +cXT +ehY +fHt +fYx +cfQ hLP mWa mWa hrg -xoW +cXT ulf rfF rfF @@ -28692,15 +26221,15 @@ lXt kDS kDS pmW -jYM -qFW -sKi +bcm +boq +bcm atU mcp -icr +ctr uKg oYi -gCo +box xrI xrI xrI @@ -28770,75 +26299,75 @@ xrI biW fWu bhl -brs +box cjh -cPT +ctr dwX -dHZ +cXT ecW -eQI +ctH fyz gox -xJq -rSR -iKV +bka +eqJ +cHJ odp fUn -xWF -xWF -xWF -woU -qNs -ovg -ycV -ycV -ycV -ycV -uIP -uIP -nHZ -uIP -uIP -uIP -uIP -nHZ -uIP -uIP +mCI +mCI +mCI +bPs +bka +ncr +bcm +bcm +bcm +bcm +bcm +bcm +fZG +bcm +bcm +bcm +bcm +fZG +bcm +bcm cqb -syo +bcm cbs eIy aWg jru xtx -syo +bcm jFg -vgK -nyE -nyE -xgQ -pjm +fHt +bcm +bcm +cXT +mWa mEf xEM -nyE +bcm mlO uTH -wnZ +bPs mEY rfF lJu fgO fgO qfs -vxC +hlc soB -sKi +bcm kIk mWF -icr +ctr obY ros -gCo +box xrI xrI xrI @@ -28910,73 +26439,73 @@ xrI biW bur cjO -cPT +ctr dxp -dHZ +cXT eff eRd fzO goF -xJq +bka hPu -iKV -fDX -jRm +cHJ +cXT +gtX gQK -llU +cYQ cAr cHJ -qNs -xTw -tgW -qFW -qUU -qFW -qFW -xTw -qFW -tgW -tgW -wXk -qFW -xil -qFW -jrN +bka +ead +eFA +boq +dBD +boq +boq +ead +boq +eFA +eFA +drS +boq +dAJ +boq +hdN dUh -syo +bcm lWa eIy tjb tJb xtx -vff -spM +cXT +ivs hqk hng nFd vMT -pjm -pjm +mWa +mWa qlV -xgQ +cXT ulf rus dFY -quQ -lJu +cYQ +nze kfP lRu lRu tdo -jYM -qFW -sKi -sKi -sKi +bcm +boq +bcm +bcm +bcm bYS pZY -gCo -gCo +box +box xrI xrI xrI @@ -29049,71 +26578,71 @@ biW bur coL cQa -dxV +dnm dIU -dxV +dnm cQa aJO aJO kQB -rSR +eqJ iMT bWt jTE -kBQ -kBQ +dii +dii uuR heM -qNs -qFW -xJj -xJj -xJj -xJj -xJj -xJj -xJj -xJj -xJj -xJj -xJj -xJj -xJj -xJj +bka +boq +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm pio -syo +bcm xzr eIy ngh jru idh -syo -mLC -mLC -nyE -xsr -xsr -pjm -pjm -wge -nyE +bcm +fbQ +fbQ +bcm +xsr +xsr +mWa +mWa +wge +bcm sEC ofb amL rfF mwV -jdQ +cfQ jCc jCc umP -jYM -xil +bcm +dAJ nkB hYZ -gQL +bcm wnL -kyR -xmq +akp +box xrI xrI xrI @@ -29184,27 +26713,27 @@ xrI biW xrI biW -diX +cae cpX cRl dxY -dHZ +cXT efJ -dxV -dbM +dnm +bPH gri -xJq -rSR +bka +eqJ eSl -fDX +cXT fXm kCa uOe mXt tPn -qNs -xil -xJj +bka +dAJ +bcm qpJ qWl sbu @@ -29212,27 +26741,27 @@ sGf qht ukb aWT -xJj +bcm xbe bSe dHm dQs -xJj -xTw -kGn +bcm +ead +hlc rTp mUA -iZc +ivs jru -rIB +bac nDL ybu -wKu +ivs ruB cRw vgF kym -pjm +mWa aHv ruB ulf @@ -29244,14 +26773,14 @@ tRG tee gnF hzZ -rsu -xTw +hhc +ead lgF pvX -kGn +hlc aAE jIr -xmq +box xrI xrI xrI @@ -29319,52 +26848,52 @@ xHr xrI sjH sjH -xDl +box aZs -xDl -brs +box +box afj cRz dzc -xJq -xJq +bka +bka eRZ fCK grG -xJq -hQT -hQT -qNs +bka +fbQ +fbQ +bka ocf -kCb -qNs -mFU -qNs -qNs -qFW -xJj +box +bka +afj +bka +bka +boq +bcm qqX nyg -shy -shy -shy +hbF +hbF +hbF qHk rHu -xJj -usm -vXl -uzL +bcm +hrC +eff +dnm dbd -xJj -xil -syo +bcm +dAJ +bcm kcW fgs qPa mpZ iqd -vff -tDD +cXT +jFg dGm oPW mWL @@ -29382,14 +26911,14 @@ tRG adT iaM cdI -jYM -jrN +bcm +hdN vZO cYa -gQL +bcm tbL sdE -xmq +box xrI xrI xrI @@ -29460,57 +26989,57 @@ awP aNj bac txr -xTn -xTn +fXm +fXm cRJ -xTn -xTn -xTn -xTn -xTn -xTn +fXm +fXm +fXm +fXm +fXm +fXm txr ehY -pdE -xSv +fHt +bSp biW biW -xSv +bSp bPs mSm -qFW -xTw +boq +ead lOG -usm -nBt +hrC +cuM sjq sGw tCf ulL -uzL +dnm wfk -uzL -uzL +dnm +dnm xiF paE -xJj -tgW -syo +bcm +eFA +bcm wQw cUo ahQ adc fXR -vff -jYh -ybT +cXT +ehY +hqk xqa hMi mtP vmU xgs xPs -xgQ +cXT wsg anC xhp @@ -29520,14 +27049,14 @@ blH hRz vQf eRr -jYM +bcm iJn bhD nGE -gQL +bcm aAE mDA -ybs +bSp biW xrI xrI @@ -29593,7 +27122,7 @@ xrI biW biW biW -xDl +box axw aNv axz @@ -29610,15 +27139,15 @@ dqZ txr ehY cJv -xSv +bSp biW biW -xSv +bSp idL mSG -tgW +eFA kSB -xJj +bcm qQt qQt qQt @@ -29626,46 +27155,46 @@ qQt qQt qQt vps -xJj +bcm uze -vXr -xYR +hWD +ckN fvd -oce -qFW -syo +hhc +boq +bcm dIg dMC dPO tcA wZJ -syo -tDD +bcm +jFg vEw -nyE +bcm dnz -nyE +bcm dnz -nyE +bcm dnz -top -jYM -xoW +cPP +bcm +cXT vyq vyq jHN -jYM -jYM +bcm +bcm jCc jCc -jYM -ycV -ovg +bcm +bcm +ncr dzb -wva +cfQ kTe jMW -xmq +box biW xrI xrI @@ -29736,27 +27265,27 @@ axA azA bao bka -bAx -xOi +bcm +cXT qRQ -xDl -xDl -xDl -xDl -xDl -yfy -xDl +box +box +box +box +box +xWb +box eqJ -pdE +fHt xKU -xSv -xSv -wJL +bSp +bSp +bcm rCe -qFW -sMN -sMN -sMN +boq +bcm +bcm +bcm quJ qYA sjU @@ -29764,23 +27293,23 @@ sjU sjU qSs vpU -xJj -xJj -xJj +bcm +bcm +bcm xYZ -xJj -xJj +bcm +bcm uPN -syo +bcm lDM dMF dTC -syo +bcm tRB -vff -wKu -ybT -ybT +cXT +ivs +hqk +hqk atR nyl nyl @@ -29801,9 +27330,9 @@ hNU oih fHt ssd -lkM -xMI -lEZ +aAE +mDA +bFJ biW xrI xrI @@ -29877,22 +27406,22 @@ bkL bDf csz wQk -dJw +bFJ dJt bIE snB oMa dhJ -pYY +box hSv -yfE -yfE +ivs +ivs fYx kCL -wJL -sMN -tYL -sMN +bcm +bcm +ncr +bcm uSd plj yfz @@ -29913,35 +27442,35 @@ yfz yfz yfz yfz -sMN -sMN +bcm +bcm wOD -qiO -wKu -wVi +iYS +ivs +fHt oir -ugl -ugl -wpn -ugl -ugl -ugl -ugl -xMI -jJC -xgK -jJC +dTl +dTl +dio +dTl +dTl +dTl +dTl +mDA +iYS +ivs +iYS lNM -xgK -xgK -xgK -xgK -jJC +ivs +ivs +ivs +ivs +iYS fHt kYE -xeT +fgD lhY -vAV +bSp biW xrI xrI @@ -30006,10 +27535,10 @@ xrI xrI apf biW -xDl +box arT azA -xQq +ckN rNK wQk wQk @@ -30017,20 +27546,20 @@ ctr cTQ bls nfl -vFL -vFL -vFL -vFL -dJw +gzl +gzl +gzl +gzl +bFJ eqJ -yfE -jlC -pdE -pdE -uHB +ivs +iNA +fHt +fHt +cXT hRa cIr -ksv +fat yfz yfz oPa @@ -30052,34 +27581,34 @@ yfz xkj itA yfz -ksv +fat qUn -wKu +ivs dot -wVi -xfB +fHt +cfQ qIJ rYt jhS rYt hTl -xfB -xeT -xMI -uyh -uyh -rvz -uqg -wsD -uqg +cfQ +fgD +mDA +bcm +bcm +jkS +cXT +fbQ +cXT fUc -uyh -xgK +bcm +ivs fHt -nhm +bcm eST -xMI -vAV +mDA +bSp xrI xrI xrI @@ -30147,28 +27676,28 @@ xrI xBx asl rqX -xQq -xQq -xQq -xQq +ckN +ckN +ckN +ckN god wRt -pYY +box gHI egz kov fdg -vFL -pYY +gzl +box gPF -xKR -yfE -gKR -pdE +iYS +ivs +dTl +fHt +lmc +eqJ +cJv lmc -mhC -mSV -xEy yfz yfz viZ @@ -30192,32 +27721,32 @@ xkj yfz qQY vbq -wKu -wKu -wVi -rYF +ivs +ivs +fHt +cXT qJT -pCQ +god hbF ieI ufQ -nhm -xeT -xMI -mbJ +bcm +fgD +mDA +iNd gzn cUs rDY vxi isj msP -nnW -xgK +hhc +ivs fHt -rYF +cXT vUA akp -vAV +bSp xrI xrI xrI @@ -30285,7 +27814,7 @@ xrI xBx ati heF -xQq +ckN cAS eKo xpE @@ -30296,17 +27825,17 @@ mxw eiq gbN fHG -gtc +acu mhD nMn -yfE -yfE -jVB +ivs +ivs +cYQ fgD lmc -mhP -mTe -xEy +dio +dTl +lmc yfz yfz qaI @@ -30330,32 +27859,32 @@ yfz xkj qQY vbq -qiO -wKu -wKu -rYF -xAT -uHm -hxf -dnY -xAT -rSv -xeT -xMI -uqg -hZN -bve -tZZ -nCA +iYS +ivs +ivs +cXT +ctr +ctH +hxf +dnY +ctr +hhc +fgD +mDA +cXT +hZN +bve +acu +nCA gbi aof tkB -jJC +iYS fHt -rYF -lkM -xMI -vAV +cXT +aAE +mDA +bSp xrI xrI xrI @@ -30423,10 +27952,10 @@ xrI xBx ato aAH -xQq -xQq -xQq -xQq +ckN +ckN +ckN +ckN cuM cYO scz @@ -30435,16 +27964,16 @@ bKw eSN fIC dkn -pYY +box sIO -yfE -yfE -gKR -wSF +ivs +ivs +dTl +qPB lmc -mjI +blf jpf -xEy +lmc yfz yfz wbL @@ -30468,32 +27997,32 @@ yfz yfz qQY vbq -wKu -wKu +ivs +ivs qPB -rYF +cXT qJT -cBF +cuM qpn -vsS +ulL vhv -nhm -xeT -xMI -mbJ +bcm +fgD +mDA +iNd dqB iuT sYo pYe ixm iFb -mbJ -xgK +iNd +ivs fHt -rYF -xeT +cXT +fgD akp -vAV +bSp xrI xrI xrI @@ -30558,31 +28087,31 @@ xrI xrI xHr biW -xDl +box aud aAJ -xQq +ckN ukm -xTn -xTn +fXm +fXm cwe ctr bls nfl -vFL -vFL -vFL +gzl +gzl +gzl gtN -pYY +box mfT -yfE -wJG -wSF -wSF -uHB +ivs +dot +qPB +qPB +cXT qzU mVG -ksv +fat yfz yfz yfz @@ -30604,34 +28133,34 @@ yfz vAP yfz yfz -ksv +fat pIc nKz -wKu +ivs qPB -xfB +cfQ lFG -ots +aJO fti -ots +aJO vJv -xfB -xeT -xMI -vuv -uyh -uyh -uyh -uqg -uyh -uyh -uyh -xgK +cfQ +fgD +mDA +aEn +bcm +bcm +bcm +cXT +bcm +bcm +bcm +ivs fHt iNd -lkM -xMI -vAV +aAE +mDA +bSp xrI xrI xrI @@ -30699,28 +28228,28 @@ xrI xBx avp aBz -xQq +ckN bar bmt bDI cwU tVa -dJw +bFJ dPP ejA eVf cAP tAV -pYY +box euI -yfE -yfE +ivs +ivs jvA kCM -wJL -tYL +bcm +ncr mXN -sMN +bcm ovl lVi xIU @@ -30742,34 +28271,34 @@ fkc fKF gry nDm -sMN +bcm vYZ -wKu -wKu -wKu +ivs +ivs +ivs atR -xgK -xgK -xgK -xgK -xgK -xgK -xgK -xgK +ivs +ivs +ivs +ivs +ivs +ivs +ivs +ivs ojp -xgK -xgK -xgK -xgK -xgK -xgK -xgK -xgK -xgK +ivs +ivs +ivs +ivs +ivs +ivs +ivs +ivs +ivs lQk iNA -xgK -vAV +ivs +bSp biW xrI qia @@ -30840,27 +28369,27 @@ aHO azA bac bka -bAx -xOi +bcm +cXT qRQ -xDl -xDl +box +box elF -xDl -xDl -yfy -xDl -evv -wSF +box +box +xWb +box +blf +qPB jnE -xSv -xSv -wJL -wtb -rXP -sMN -sMN -xJg +bSp +bSp +bcm +dBD +boq +bcm +bcm +bcm sVI nFB oPz @@ -30869,24 +28398,24 @@ tDV ulN xIU yfz -slg -wuZ +cfQ +bcm yac bWn sxh -wuZ -wuZ +bcm +bcm mOd -wuZ -wuZ -qCr -ydT +bcm +bcm +ncr +bcm aok -tVB -wKu +hAb +ivs pYN vIB -vVa +pzZ tSZ xXh tSZ @@ -30901,13 +28430,13 @@ wUj wUj wUj wUj -pQh +dii fhO kGq eGd -xgK -jJC -vAV +ivs +iYS +bSp biW xrI xrI @@ -30979,73 +28508,73 @@ aQF bac txr bFh -xTn -xTn +fXm +fXm cRJ -xTn +fXm elK -xTn -xTn -xTn +fXm +fXm +fXm txr -xTH -wSF -xSv +ifO +qPB +bSp biW biW -xSv -xKO -xWW -ndy +bSp +ead +eFA +dAJ vUJ -xJg -qyU -xbj -uZp -xbj +bcm +gbi +ckN +acu +ckN tEJ sQs xIU yfz -uKQ +cXT xIx xom xoR xom jWe -wuZ +bcm vYP tls -wuZ -sjM -ydT -ydT +bcm +fxP +bcm +bcm blf -wKu +ivs pzZ -sjT -vAV -vAV -vAV -vAV -vAV -sjT -wlI -sjT +box +bSp +bSp +bSp +bSp +bSp +box +oWn +box fiO -vAV +bSp aHF maE -rVI -rVI -vAV +aIr +aIr +bSp fiO -sjT -irn -sjT -sjT -vAV -vAV +box +ekB +box +box +bSp +bSp xrI xrI xrI @@ -31126,42 +28655,42 @@ wQk cCN dqZ txr -xTH -fHO -xSv +ifO +bSw +bSp biW biW -xSv +bSp bvh jpn -nGT -rXP -xJg +cYa +boq +bcm bVq rbj -kLI +cAS xMP chk qTr itl xkj uRy -xJv +mGe ycL -ebZ +qgs oIG lYl -slg +cfQ dAC -xlK -wuZ -xUt -xKO -ydT -tDO -wKu +ksY +bcm +drS +ead +bcm +euI +ivs pzZ -sjT +box xXc xXc xXc @@ -31169,16 +28698,16 @@ biW biW biW biW -vAV -oCv -vAV -tRV +bSp +boq +bSp +oFX wnS dfR -sOJ -vAV -oCv -vAV +mEQ +bSp +boq +bSp biW biW biW @@ -31251,55 +28780,55 @@ biW xXc sjH sjH -xDl +box baT -xDl -vGP +box +box fCn -mFm -yhA +dzc +bka qET bMI qET -yhA +bka gDk -hiF +bka fbQ fbQ -yhG -fZE -kDw -yhG -yhG -yhG -yhG -rXP -xJg -qzu -xJg +bka +bSp +gae +bka +bka +bka +bka +boq +bcm +cfQ +bcm oSc sRc -xJg -nVv -ydT -qCr -wuZ +bcm +fZG +bcm +ncr +bcm waP xom jQw xom -wIl +bao uRy dAC wBe -wuZ -wuZ -xWW -ydT +bcm +bcm +eFA +bcm bTq -wKu +ivs pzZ -sjT +box xXc xXc xXc @@ -31307,16 +28836,16 @@ xrI xrI xrI xrI -vAV -roF -vAV -vAV -vAV -vAV -vAV -vAV -roF -vAV +bSp +oYg +bSp +bSp +bSp +bSp +bSp +bSp +oYg +bSp xrI xrI xrI @@ -31392,52 +28921,52 @@ xXc xXc xXc xXc -vGP +box cxi eFg -dLi +cXT mGe -nFq +dnm haq -yhA -ylG +bka +cYQ hkw ifO -kWn -sDZ +cHJ +cXT jXn kFc lmR mlv xXF -yhG -xWW -nrq +bka +eFA +hhc qAy hKX -xbj +ckN sRd -xJg +bcm qUd -rXP -rXP -wuZ +boq +boq +bcm wbj xoR jau xoR dyZ -wuZ +bcm gYE dAC gbI -wuZ -rXP -qHx +bcm +boq +hhc blf -wKu +ivs pzZ -sjT +box xXc xXc xXc @@ -31530,54 +29059,54 @@ xrI xrI xXc xXc -vGP +box cxq bPH -lMh +bWt mGe bPH -nFq +dnm pcv -ylG -jrR +cYQ +cXT ifO -vmi -jow +iMT +bWt gao oNj mCI mCI mYR -yhG -xWW -xJg +bka +eFA +bcm mCY -xbj -xbj +ckN +ckN sRK -xJg +bcm qVI -rXP -ndy -obJ +boq +dAJ +hhc xKl xqU xoR xom rdX -wuZ +bcm jij oul cCt -wuZ -uko -ydT +bcm +cqb +bcm aAN fOn fOn -xyI -xyI -xyI +box +box +box xXc xrI xrI @@ -31671,51 +29200,51 @@ xXc bFJ aBY aUT -dLi +cXT dPZ -nFq +dnm cmc cDG -ylG -jrR +cYQ +cXT ifO -kWn -sDZ -mXi +cHJ +cXT +gtX xsU -lqk -mnp -naH -yhG -rXP -xJg +cYQ +cAr +cHJ +bka +boq +bcm qBl nFD oTz sSz -xJg +bcm umq -xUt +drS mQf -wuZ +bcm xLH ycN xom sgC igK -wuZ +bcm utM dAC gbI -wuZ -sch -ydT +bcm +pio +bcm hAb -uTg +qPB pUr pUr hIR -fSc +bSp xXc xrI xrI @@ -31808,52 +29337,52 @@ xXc bmG cae xLo -nFq -dLi +dnm +cXT dQg -nFq +dnm wJN pcv -ylG -jrR +cYQ +cXT ifO -kWn +cHJ jpY -mhM -tsS -tsS -tsS +jTE +dii +dii +dii ncv -yhG -xUt -xJg -xJg -xJg -oUp -xJg -xJg -jtw -sjM -rXP -toj -wuZ -wuZ -ukD -wuZ -wuZ -wuZ -wuZ -ukD -wuZ -wuZ -uko +bka +drS +bcm +bcm +bcm +ncr +bcm +bcm +cYa +fxP +boq +aEn +bcm +bcm +ncr +bcm +bcm +bcm +bcm +ncr +bcm +bcm +cqb ntE -nVP +blf nsv -vXK +ivs apm -uTg -fSc +qPB +bSp xXc xrI xrI @@ -31943,55 +29472,55 @@ xrI xrI ohJ xXc -vGP -vGP +box +box bcm aVk -krz +iNd uVb aLi fSA wnV -uXI +aIr dUE ifO -iPn -sDZ +eSl +cXT jCt rYj -lqw +box moR ndk -yhG -xKO -xWW -wtb -ndy -xKO -rXP -xWW -rXP -rXP -xKO -rXP -rXP -xWW -xKO -rXP -ndy -rXP -xUt -xWW +bka +ead +eFA +dBD +dAJ +ead +boq +eFA +boq +boq +ead +boq +boq +eFA +ead +boq +dAJ +boq +drS +eFA hdN -uko -fJY -ydT -nVP +cqb +dUh +bcm +blf kKv -vXK +ivs wRG -uTg -fSc +qPB +bSp xXc xrI xrI @@ -32081,55 +29610,55 @@ xrI xrI ohJ fmR -vGP -xUy -yew +box +bZR +cKf dcs hhc dQh mGE xfO -yhA +bka gEA -dve -uXC +bcm +blf kEn -yhG -yhG -yhG -yhG -njU -yhG -yhG -ydT -ydT -ydT -ydT -ydT -ydT +bka +bka +bka +bka +fCn +bka +bka +bcm +bcm +bcm +bcm +bcm +bcm nvn -ydT -qCr -ydT -ydT -ydT -ydT -ydT -ydT -ydT -ydT -ydT -ydT -ydT -ydT -ydT -ydT -nVP +bcm +ncr +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm +bcm +blf rqo -vXK +ivs wRG -uTg -fSc +qPB +bSp xXc xrI xrI @@ -32219,55 +29748,55 @@ xrI xAJ apL fWu -vGP -yhA -fIF -yhA -yhA -yhA -yhA -yhA -yhA -kJK -dve -uXC +box +bka +afj +bka +bka +bka +bka +bka +bka +fZG +bcm +blf iYS -oIv +ivs jXp -oHV +kYE lsy -oXu -oXu +fHt +fHt nHk -oXu -oXu +fHt +fHt mKz -oXu -skN -qWW -qWW -qWW -qWW -qWW +fHt +rNY +fHt +fHt +fHt +fHt +fHt xid -xLY -rVK -rVK +kYE +eqJ +eqJ jXT -rVK -rVK +eqJ +eqJ ieT -rVK +eqJ jnb -qWW +fHt xKY -xLY -rVK +kYE +eqJ eap -vXK +ivs vQp clB -xyI +box xXc xrI xrI @@ -32357,70 +29886,70 @@ fmR fmR fmR fWu -smd +box bHj -lce -mid -qLl -qLl -qLl +ead +dBD +boq +boq +boq fxP -vGB -qLl +drS +boq hlc fiJ -oIv +ivs oJp oJp -oHV +kYE wfB hTO jqT -woQ -woQ -pnn -qCJ +qPB +qPB +bSw +nRL rex -woQ -uTg -uTg -uTg -xES -uTg -uTg -xLY -nVP -nVP -rTu -nVP -nVP +qPB +qPB +qPB +qPB +bSw +qPB +qPB +kYE +blf +blf +iYS +blf +blf otn -nVP +blf hAb -uTg -uTg -xLY -xES -uTg -uTg -vXK -xES -xyI +qPB +qPB +kYE +bSw +qPB +qPB +ivs +bSw +box xXc xXc xrI xrI xrI -ybs +bSp oYg -ybs -ybs -ybs -ybs -ybs -ybs +bSp +bSp +bSp +bSp +bSp +bSp oYg -ybs +bSp xrI xrI xrI @@ -32495,70 +30024,70 @@ fmR fmR fmR fWu -smd +box bHu -pfh -wcJ -vSy -vSy -vSy -vSy -vSy -vSy -vSy +eFA +box +bcm +bcm +bcm +bcm +bcm +bcm +bcm hUt -xPu -xPu -xPu -ylM +cXT +cXT +cXT +iNd fbQ fbQ -jrR +cXT nPx -wff -qAn -wff -wff +bcm +ncr +bcm +bcm sld -wff -wff +bcm +bcm umx -vsE +tVa wla xjS -dxX +cfQ ydu fNa -vXK -vXK +ivs +ivs dJb -dxX +cfQ lri eDu eDu iys -dxX +cfQ csU eDu rhu -vXK -uTg -xyI +ivs +qPB +box xXc biW biW biW biW -ybs -xUc -ybs +bSp +boq +bSp uaW fPG tpj mln -ybs -xUc -ybs +bSp +boq +bSp biW biW biW @@ -32634,73 +30163,73 @@ fmR fmR fWu bmS -smd -wxd -wcJ +box +prD +box bfK yga bWB ldw hIc -xPu +cXT hmG uHf iQT jrx gaw -xPu +cXT hvP hZa jsn -wff +bcm php -mbn -wff +cqb +bcm nNR smw sSC -wff -wff -vsK -wff -wff -wff -wff -wff +bcm +bcm +pjX +bcm +bcm +bcm +bcm +bcm aYI aYI -wff -wff -wff -qAn -xfa -xyI -xyI -xyI -xyI -xyI -ybm +bcm +bcm +bcm +ncr +box +box +box +box +box +box +ivs fEt -ybs -ybs -ybs -xmq -xmq +bSp +bSp +bSp +box +box ekB -xmq -fqV -ybs -szJ +box +fiO +bSp +aIr xYu xYu -szJ -ybs -fqV -xmq +aIr +bSp +fiO +box oWn -xmq -ybs -ybs +box +bSp +bSp biW xrI xrI @@ -32771,7 +30300,7 @@ vQc fmR fmR fWu -smd +box bLb aDS dye @@ -32779,66 +30308,66 @@ uHR bzq fgt eVH -jlF +aIr vGc hmM hUy sAb -kLu +dio eSa fpP lsI hZa -jxj -wff +cgS +bcm aHl -tZJ -wff +dAJ +bcm rgf smG sSZ -wff -usE -xzU -pqq -xjT -xLZ -yjA -wff +bcm +fTH +boq +eFA +lgF +pio +ead +bcm vDN -voa -wff +ivs +bcm rlZ -pqq -eMT -xfa +eFA +drS +box biW biW biW biW -xyI -ybm +box +ivs tmc -wpm -wpm -wpm -wpm -wpm -wpm -wpm +mCI +mCI +mCI +mCI +mCI +mCI +mCI gwf -wpm -wpm -wpm -wpm -wpm -wpm +mCI +mCI +mCI +mCI +mCI +mCI gwf -wpm -wpm -dEO -ybm -ybs +mCI +mCI +bPs +ivs +bSp xrI xrI xrI @@ -32910,73 +30439,73 @@ fmR fmR fWu bmS -smd -rgb -wcJ +box +oYg +box iwx dSO sAb -wZp -fKS -xPu +dTl +cYQ +cXT hnG sAb sAb -wZp +dTl pdK -xPu +cXT hvP hZa -jxj -wff +cgS +bcm wiM -pqq -wff -wff -wff -wff -wff -xzU -tBa -wff -wff -wff -xzU -wff +eFA +bcm +bcm +bcm +bcm +bcm +boq +cYa +bcm +bcm +bcm +boq +bcm qaH sWR -xfa +box xWb -xfa +box qOB -xfa +box xrI xrI xrI aoZ -xyI -ybm +box +ivs aqy -xbI -xbI -xbI -xbI -xbI -xbI -xbI -xbI -xbI -xbI -xbI -xbI -xbI -xbI -xbI -xbI -xbI +dii +dii +dii +dii +dii +dii +dii +dii +dii +dii +dii +dii +dii +dii +dii +dii +dii bGv -ybm -ybs +ivs +bSp xrI xrI xrI @@ -33050,13 +30579,13 @@ fWu yfo yfo cxu -wcJ +box uHR dTJ -wZp +dTl sAb xeQ -ylM +iNd hnR eAe iRm @@ -33066,55 +30595,55 @@ mPI lsN moY nez -lSb +hhc rqp -yjA -xzU -rQF +ead +boq +dBD fLJ -eMT -pqq -yjA -wff +drS +eFA +ead +bcm wll uWM -wff -xzU -wff +bcm +boq +bcm eTf -voa -xTc +ivs +box biW rfV -xzU +boq rfV biW xrI xrI xrI -ybs -ybm -hOX -ybs -ybs -ybs -xmq -xmq +bSp +ivs +eSl +bSp +bSp +bSp +box +box oWn -xmq -fqV -ybs -fHH -pBQ -szJ -szJ -ybs -fqV -xmq +box +fiO +bSp +aHF +maE +aIr +aIr +bSp +fiO +box ekB -xmq -ybs -ybs +box +bSp +bSp xXc xrI xrI @@ -33192,63 +30721,63 @@ dye iwx dSO euB -wZp +dTl fMV gEU hqq -jlF +aIr tOL -wZp +dTl nsc -xPu +cXT oJp iaL xhC -wff +bcm oAm -mbn -tBa +cqb +cYa dtb oYh wFf -tBa -xzU +cYa +boq xni qPq xku -wff -yjA -wff +bcm +ead +bcm ajh sWR dWn -xrI +xXc rfV -xzU +boq rfV xrI xrI xrI xrI -ybs -ybm -qDL -xmq +bSp +ivs +fHt +box xrI biW biW biW biW -ybs -xUc -ybs +bSp +boq +bSp oFX -xtw -tuD +wnS +dfR mEQ -ybs -xUc -ybs +bSp +boq +bSp biW biW biW @@ -33326,67 +30855,67 @@ iDZ fmR fmR sqZ -wcJ +box uHR eAe tUI eAe vUQ -xPu +cXT htq hVs tOL -kLu +dio nsc kFd oJp ihP -jxj -xUS -wff +cgS +dgR +bcm prD -xfa -xfa -xfa -xfa -xfa -xfa -xfa -wly +box +box +box +box +box +box +box +rNK veH xni -xzG -wff +hdN +bcm vDN -voa -xTc +ivs +box biW rfV -otM +fxP rfV biW xrI xrI xXc -ybs -ybm -qDL -xmq +bSp +ivs +fHt +box xrI xrI xrI xrI xrI -ybs +bSp oYg -ybs -ybs -ybs -ybs -ybs -ybs +bSp +bSp +bSp +bSp +bSp +bSp oYg -ybs +bSp xrI xrI xrI @@ -33464,52 +30993,52 @@ iDZ iDZ fmR fmR -vVU +bSp iwx -jlF +aIr eys -jlF +aIr fNM -kPi +hhc htx jzz iRE -ljc +czk kfk -xPu -uXI -ylG +cXT +aIr +cYQ yec -wff +bcm oBm -yjA -xfa +ead +box fmR xAJ bRv fWu fWu -tBa +cYa wtX fpi -wff -xzU -wff -voa +bcm +boq +bcm +ivs mEa -xTc -xfa -xfa +box +box +box cnV -xfa +box xrI xrI xrI biW -xmq -ybm -qDL -xmq +box +ivs +fHt +box xXc xrI xrI @@ -33602,52 +31131,52 @@ xrI xrI xrI iDZ -wcJ +box uft cok -vSy +bcm cok cFb -wcJ -vVU -wcJ -vVU -wcJ -ger -jID +box +bSp +box +bSp +box +elF +bcm ltq vRp -lAU -jID -loD +cXT +bcm +box knL -xfa +box fmR sni vQc fmR fmR -xfa -wff -wff -tBa -tZJ -lSb +box +bcm +bcm +cYa +dAJ +hhc vDN -voa +ivs tcF -wff +bcm soi -xzU -xfa +boq +box biW xrI xrI aoZ -xmq -ybm -qDL -xmq +box +ivs +fHt +box xXc xrI xrI @@ -33740,24 +31269,24 @@ xrI xrI xrI aHM -vVU +bSp vLP -jAQ -ylM -jAQ +dyf +iNd +dyf fOG -vVU +bSp biW biW biW biW -loD +box kFx jZU -ogI +aIr jyu xPQ -loD +box yhb yhb rgM @@ -33765,27 +31294,27 @@ nXO biW vQc fmR -xfa +box wtZ -xzU -pqq -yjA -wff -voa +boq +eFA +ead +bcm +ivs sWR -mjw -wff -wff -qAn -xfa +bcm +bcm +bcm +ncr +box biW xHr xHr biW -xmq -ybm -qDL -xmq +box +ivs +fHt +box xrI xrI xrI @@ -33878,24 +31407,24 @@ xrI xrI xrI xrI -vVU +bSp xlM -tQw +oYg njM -tQw +oYg mxM -vVU +bSp xrI xrI xrI xrI -xVt +bSp kJx xPv ilh usY lDR -loD +box mOn mOn nXO @@ -33904,26 +31433,26 @@ biW vQc uub xWb -xfa -wff -vsK -wff -wff +box +bcm +pjX +bcm +bcm hDt qFx -mjw +bcm xGq qDW tcJ -xTc -xTc -xTc -xTc -xTc -xTc -ybm -qDL -xmq +box +box +box +box +box +box +ivs +fHt +box xrI xrI xrI @@ -34027,13 +31556,13 @@ xrI xrI xrI xrI -loD +box wdt ltw iqy jzI nQK -loD +box vQc xrI xrI @@ -34047,21 +31576,21 @@ vlm wUB yhn wUB -pps -pps -pps +dTl +dTl +dTl wUB -pps +dTl wUB -voa +ivs wUB -voa +ivs wUB -voa +ivs wUB -ybm -qDL -xmq +ivs +fHt +box xXc xrI xrI @@ -34165,13 +31694,13 @@ xrI xrI xrI xrI -kgI -loD -lAU +bmS +box +cXT iwk dEl noc -loD +box xrI xrI xrI @@ -34182,24 +31711,24 @@ uub smh xPH wJk -xNS +dio yhB -xnt +vpr dZC -xnt +vpr yhB -pps +dTl yhB -xNS -voa -voa +dio +ivs +ivs yhB -voa +ivs yhB -voa -ybm -ofK -xmq +ivs +ivs +cJv +box xXc xrI xrI @@ -34304,40 +31833,40 @@ xrI xrI xrI biW -xVt +bSp tPH iAa jAf -xVt +bSp biW biW xHr xHr biW biW -xTc -xTc -xQP -xTc -mjw -mjw -voF -xnt -xnt -xnt -voF +box +box +bSp +box +bcm +bcm +cXT +vpr +vpr +vpr +cXT aEn -mjw +bcm vJn -xQP -xTc -xTc -xTc -xTc -xTc -xmq -xmq -xmq +bSp +box +box +box +box +box +box +box +box xXc xrI xrI @@ -34442,34 +31971,34 @@ xrI xrI xrI biW -xVt +bSp lEo jWn kuq -xVt +bSp biW xrI xrI xrI xrI biW -xTc +box uzv -vsV +isj thx -voF +cXT xOY qMW -ybY -ybY -ybY +mCI +mCI +mCI rgF llS -voF +cXT hCh -rib +ilh iIb -xQP +bSp biW xHr xXc @@ -34580,34 +32109,34 @@ xrI wQi xrI xrI -xVt -xVt +bSp +bSp ppW -xVt -xVt +bSp +bSp xrI xrI xrI xrI xHr biW -xTc +box qYV wFb wua vMa -voa +ivs xEJ -pps -pps -pps +dTl +dTl +dTl xGQ -voa +ivs aYe -qrx +hmM xGQ oJI -xTc +box biW xrI xrI @@ -34729,23 +32258,23 @@ xrI xrI xHr biW -xTc +box qZS vtm wuj -voF -voa +cXT +ivs jys jys jys jys jys -voa -jgQ +ivs +hUt kPV dWA fMM -xTc +box biW xrI xrI @@ -34867,23 +32396,23 @@ xrI xrI xHr biW -xTc +box rao snh -wuY -xTa -nMc +aof +dGn +dii xLw xLw cRR xLw xLw -nMc +dii jeD sLI fLl gMd -xTc +box biW xHr xrI @@ -35005,11 +32534,11 @@ xrI xrI xrI biW -xTc +box uBB gUo sor -voF +cXT wtu jOC jOC @@ -35017,11 +32546,11 @@ jOC jOC jOC wtu -voF -sSb +cXT +ltw czk kxq -xTc +box biW xHr xrI @@ -35143,23 +32672,23 @@ xrI xrI xHr biW -xTc -xQP -xTc +box +bSp +box pfd -xTc +box jTw -xTc -xTR -xQP -xQP -xTc +box +aZs +bSp +bSp +box pfd -xTc +box pur -xTc -xQP -xTc +box +bSp +box biW xHr xrI @@ -35283,19 +32812,19 @@ xHr biW biW biW -xQP +bSp wtu -xQP +bSp wtu -xQP +bSp biW biW biW -xQP +bSp wtu -xQP +bSp wtu -xQP +bSp biW biW biW @@ -35421,19 +32950,19 @@ xrI xrI xrI xrI -xQP +bSp vGv -xQP +bSp vGv -xQP +bSp xrI xrI xrI -xQP +bSp vGv -xQP +bSp owf -xQP +bSp xrI xrI wQi diff --git a/_maps/map_files/icy_caves/icy_caves.dmm b/_maps/map_files/icy_caves/icy_caves.dmm index a4a22c2e3f5d6..705a317d8ef4d 100644 --- a/_maps/map_files/icy_caves/icy_caves.dmm +++ b/_maps/map_files/icy_caves/icy_caves.dmm @@ -413,7 +413,7 @@ /turf/open/floor/tile/dark, /area/icy_caves/outpost/security) "bS" = ( -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/icy_caves/caves/northern) "bU" = ( /obj/structure/cable, @@ -558,9 +558,6 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 8 - }, /turf/open/floor/tile/dark/red2{ dir = 5 }, @@ -575,7 +572,7 @@ /turf/closed/wall/r_wall, /area/icy_caves/caves/northwestmonorail/breakroom) "cK" = ( -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/icy_caves/caves/northwestmonorail) "cL" = ( /obj/structure/monorail, @@ -2118,10 +2115,6 @@ dir = 9 }, /area/icy_caves/caves/cavesbrig) -"mo" = ( -/obj/machinery/miner/damaged/platinum, -/turf/open/floor/plating/ground/snow/layer1, -/area/icy_caves/outpost/outside/center) "mp" = ( /obj/structure/cable, /obj/effect/ai_node, @@ -2162,9 +2155,6 @@ /obj/machinery/vending/security, /turf/open/floor/prison/bright_clean/two, /area/icy_caves/caves/northwestmonorail) -"mv" = ( -/turf/closed/mineral/smooth/darkfrostwall, -/area/space) "mw" = ( /obj/structure/bookcase/manuals/research_and_development, /obj/machinery/light{ @@ -2842,7 +2832,7 @@ /obj/machinery/door/poddoor/timed_late/containment/landing_zone{ dir = 2 }, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/icy_caves/outpost/outside) "qg" = ( /obj/structure/closet/secure_closet/miner, @@ -4363,7 +4353,7 @@ /turf/open/floor/wood, /area/icy_caves/outpost/dorms) "xa" = ( -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/icy_caves/caves/west) "xc" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -4795,9 +4785,6 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 8 - }, /turf/open/floor/tile/dark/blue2{ dir = 1 }, @@ -7395,7 +7382,7 @@ /turf/open/floor/tile/dark, /area/icy_caves/outpost/refinery) "LY" = ( -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/icy_caves/outpost/outside) "LZ" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden{ @@ -7443,7 +7430,7 @@ /turf/open/floor/plating, /area/icy_caves/outpost/mining/east) "Ml" = ( -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/icy_caves/outpost/LZ1) "Mm" = ( /obj/effect/turf_decal/warning_stripes/thin{ @@ -7459,7 +7446,7 @@ /area/icy_caves/outpost/medbay) "Mr" = ( /obj/effect/landmark/lv624/fog_blocker/xeno_spawn, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/icy_caves/caves/rock) "Ms" = ( /obj/machinery/door/poddoor/timed_late/containment/landing_zone/lz2, @@ -7974,7 +7961,7 @@ /area/icy_caves/caves/east) "OU" = ( /obj/structure/sign/double/barsign/carp, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/icy_caves/caves/rock) "OZ" = ( /obj/structure/cargo_container/gorg, @@ -8705,7 +8692,7 @@ /obj/machinery/door/poddoor/timed_late/containment/landing_zone{ dir = 2 }, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/icy_caves/outpost/LZ1) "Tg" = ( /obj/machinery/light/small{ @@ -9035,7 +9022,7 @@ /area/icy_caves/caves/northwestmonorail) "US" = ( /obj/structure/table, -/obj/item/clothing/suit/chef/classic, +/obj/item/clothing/suit/storage/chef/classic, /turf/open/floor/prison/kitchen, /area/icy_caves/outpost/kitchen) "UT" = ( @@ -9080,7 +9067,7 @@ /area/icy_caves/caves/northwestmonorail) "Vd" = ( /obj/machinery/door/poddoor/timed_late/containment/landing_zone/lz2, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/icy_caves/caves) "Ve" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, @@ -9386,7 +9373,7 @@ /obj/machinery/door/poddoor/timed_late/containment/landing_zone{ dir = 2 }, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/icy_caves/caves) "Wx" = ( /turf/open/floor/plating/ground/snow/layer2, @@ -9491,6 +9478,9 @@ dir = 4 }, /obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 8 + }, /turf/open/floor/tile/dark, /area/icy_caves/outpost/LZ2) "Xc" = ( @@ -9565,7 +9555,7 @@ /obj/machinery/door/poddoor/timed_late/containment/landing_zone/lz2{ dir = 1 }, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/icy_caves/caves) "Xp" = ( /obj/structure/cable, @@ -9751,7 +9741,7 @@ /turf/open/floor/plating, /area/icy_caves/outpost/security) "Yf" = ( -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/icy_caves/caves) "Yi" = ( /obj/machinery/computer/intel_computer, @@ -9807,7 +9797,7 @@ /obj/machinery/door/poddoor/timed_late/containment/landing_zone/lz2{ dir = 2 }, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/icy_caves/caves) "Yy" = ( /obj/structure/bed/roller, @@ -10065,7 +10055,7 @@ }, /area/icy_caves/outpost/LZ2) "ZP" = ( -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/icy_caves/caves/rock) "ZR" = ( /turf/closed/wall/r_wall, @@ -10097,7 +10087,7 @@ /area/icy_caves/outpost/refinery) "ZY" = ( /obj/machinery/door/poddoor/timed_late/containment/landing_zone, -/turf/closed/mineral/smooth/darkfrostwall, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, /area/icy_caves/caves) "ZZ" = ( /obj/structure/morgue{ @@ -10267,9 +10257,9 @@ EM MN MN MN -mv -mv -mv +EM +EM +EM ZP ZP ZP @@ -10423,9 +10413,9 @@ EM MN Qb MN -mv -mv -mv +EM +EM +EM ZP ZP ZP @@ -10579,9 +10569,9 @@ EM MN MN MN -mv -mv -mv +EM +EM +EM ZP ZP ZP @@ -10732,12 +10722,12 @@ EM "} (5,1,1) = {" EM -mv -mv -mv -mv -mv -mv +EM +EM +EM +EM +EM +EM ZP ZP ZP @@ -10888,12 +10878,12 @@ EM "} (6,1,1) = {" EM -mv -mv -mv -mv -mv -mv +EM +EM +EM +EM +EM +EM ZP ZP ZP @@ -19870,7 +19860,7 @@ ow ow nL ZI -mo +li li ow ZI diff --git a/_maps/map_files/oscar_outpost/oscar_outpost.dmm b/_maps/map_files/oscar_outpost/oscar_outpost.dmm index a1b710dba4078..4384c613e13d9 100644 --- a/_maps/map_files/oscar_outpost/oscar_outpost.dmm +++ b/_maps/map_files/oscar_outpost/oscar_outpost.dmm @@ -675,7 +675,7 @@ /turf/open/floor/tile/dark, /area/oscar_outpost/base) "eN" = ( -/obj/structure/bed/chair/wheelchair, +/obj/vehicle/ridden/wheelchair, /turf/open/floor/wood, /area/oscar_outpost/village/east) "eT" = ( @@ -1139,7 +1139,7 @@ /turf/open/floor/plating/ground/dirtgrassborder/corner2, /area/oscar_outpost/village/fairgrounds) "hX" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 8 }, /turf/open/floor/plating/ground/dirt2, @@ -1367,29 +1367,29 @@ /turf/open/floor/tile/dark, /area/oscar_outpost) "jw" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /obj/effect/ai_node, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/village/fairgrounds) @@ -1453,7 +1453,7 @@ /turf/open/floor/tile/dark, /area/oscar_outpost/base) "jS" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 8 }, /turf/open/floor/plating/ground/dirt2, @@ -2449,29 +2449,29 @@ /turf/open/floor/plating/ground/dirt, /area/oscar_outpost/outside/road) "qZ" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /obj/structure/barricade/sandbags{ name = "trench lining"; pixel_y = -7 @@ -2615,29 +2615,29 @@ /turf/open/floor/tile/dark, /area/oscar_outpost) "rP" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /obj/structure/barricade/sandbags{ dir = 4; name = "trench lining"; @@ -2903,10 +2903,10 @@ /area/oscar_outpost/outside/west) "tM" = ( /obj/structure/closet/crate, -/obj/item/stack/sheet/glass/large_stack, -/obj/item/stack/sheet/glass/large_stack, -/obj/item/stack/sheet/glass/large_stack, -/obj/item/stack/sheet/glass/large_stack, +/obj/item/stack/sheet/glass/glass/large_stack, +/obj/item/stack/sheet/glass/glass/large_stack, +/obj/item/stack/sheet/glass/glass/large_stack, +/obj/item/stack/sheet/glass/glass/large_stack, /obj/machinery/camera/autoname/mainship{ dir = 1 }, @@ -3029,7 +3029,7 @@ /turf/open/floor, /area/oscar_outpost/village/south) "uA" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 1; pixel_y = 7 }, @@ -3387,29 +3387,29 @@ /turf/open/floor/plating/ground/dirt, /area/oscar_outpost/village/fairgrounds) "xd" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/village/fairgrounds) "xe" = ( @@ -3625,7 +3625,7 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/underground) "yn" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 1; pixel_y = 7 }, @@ -6761,7 +6761,7 @@ /turf/open/floor, /area/oscar_outpost/village) "Md" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 4 }, /obj/structure/cable, @@ -8512,10 +8512,10 @@ /area/oscar_outpost) "Tv" = ( /obj/structure/closet/crate, -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 30 }, -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 30 }, /turf/open/floor/tile/dark, diff --git a/_maps/map_files/slumbridge/slumbridge.dmm b/_maps/map_files/slumbridge/slumbridge.dmm index 8cd121860b21a..0ce27b6e43838 100644 --- a/_maps/map_files/slumbridge/slumbridge.dmm +++ b/_maps/map_files/slumbridge/slumbridge.dmm @@ -18,6 +18,12 @@ /obj/effect/ai_node, /turf/open/floor/marking/asteroidwarning, /area/slumbridge/outside/northwest/nearlz) +"abi" = ( +/obj/structure/platform/rockcliff/icycliff{ + dir = 5 + }, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/slumbridge/caves/rock) "abr" = ( /obj/structure/closet/wardrobe/orange, /turf/open/floor/prison/plate, @@ -52,12 +58,6 @@ /obj/effect/landmark/corpsespawner/engineer/regular, /turf/open/floor/plating, /area/slumbridge/inside/engi/engine) -"adD" = ( -/obj/structure/prop/mainship/hangar_stencil/two, -/turf/open/floor/tile/dark/yellow2{ - dir = 10 - }, -/area/slumbridge/landingzonetwo) "adG" = ( /obj/structure/table, /obj/item/reagent_containers/glass/bottle/ammonia, @@ -845,7 +845,7 @@ /turf/open/floor/tile/white, /area/slumbridge/inside/pmcdome/dorms) "aLp" = ( -/obj/item/trash/barcardine, +/obj/item/trash/barcaridine, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/green/hidden, /turf/open/floor/tile/green/whitegreen{ @@ -1355,13 +1355,6 @@ /obj/effect/ai_node, /turf/open/floor/plating/ground/concrete, /area/slumbridge/outside/northeast) -"beC" = ( -/obj/machinery/computer/shuttle/shuttle_control/dropship, -/obj/structure/table/mainship, -/turf/open/floor/tile/dark/red2{ - dir = 1 - }, -/area/slumbridge/landingzoneone) "beH" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/gibspawner/human, @@ -2114,14 +2107,6 @@ "bDN" = ( /turf/open/floor/stairs/rampbottom, /area/slumbridge/outside/northeast/bridges) -"bDO" = ( -/obj/structure/platform/metalplatform{ - dir = 4 - }, -/turf/open/floor/tile/dark/yellow2{ - dir = 6 - }, -/area/slumbridge/landingzonetwo) "bDT" = ( /obj/effect/spawner/random/misc/structure/supplycrate/normalweighted, /turf/open/floor/plating, @@ -2566,6 +2551,12 @@ /obj/structure/flora/ausbushes/fullgrass, /turf/open/ground/grass/weedable, /area/slumbridge/outside/southeast) +"bSw" = ( +/obj/structure/platform/rockcliff/icycliff{ + dir = 1 + }, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/slumbridge/caves/rock) "bSF" = ( /turf/open/floor/bcircuit, /area/slumbridge/inside/engi/engineroom) @@ -2785,7 +2776,7 @@ /turf/open/floor/tile/dark, /area/slumbridge/outside/southwest) "caS" = ( -/obj/structure/bed/chair/wheelchair, +/obj/vehicle/ridden/wheelchair, /turf/open/floor/prison/sterilewhite, /area/slumbridge/inside/prison/outerringsouth) "cbt" = ( @@ -3089,7 +3080,7 @@ /area/slumbridge/inside/houses/dorms) "cnf" = ( /obj/machinery/light, -/obj/structure/bed/chair/wheelchair, +/obj/vehicle/ridden/wheelchair, /turf/open/floor/prison/sterilewhite, /area/slumbridge/inside/prison/outerringsouth) "cni" = ( @@ -4153,9 +4144,6 @@ /obj/structure/cable, /turf/open/floor/plating/asteroidfloor, /area/slumbridge/outside/northeast/bridges) -"ddg" = ( -/turf/closed/mineral/smooth/darkfrostwall, -/area/slumbridge/caves/rock) "ddk" = ( /obj/effect/spawner/random/misc/structure/supplycrate/secureweighted, /turf/open/floor/marking/bot, @@ -4781,7 +4769,7 @@ /area/slumbridge/outside/southeast) "dDF" = ( /obj/structure/rack, -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 30 }, /turf/open/floor/tile/dark, @@ -5558,6 +5546,12 @@ }, /turf/open/floor/plating/ground/mars/random/cave/darker, /area/slumbridge/outside/northeast) +"ekp" = ( +/obj/structure/platform/rockcliff/icycliff{ + dir = 9 + }, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/slumbridge/caves/rock) "ekz" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/green/hidden, @@ -6718,7 +6712,7 @@ /area/slumbridge/outside/southeast) "fiB" = ( /obj/structure/coatrack, -/obj/item/clothing/suit/security/formal/senior_officer/tan{ +/obj/item/clothing/suit/storage/security/formal/senior_officer/tan{ pixel_x = -1; pixel_y = 4 }, @@ -7822,7 +7816,7 @@ /area/slumbridge/inside/pmcdome) "fYc" = ( /obj/structure/table, -/obj/item/trash/barcardine, +/obj/item/trash/barcaridine, /turf/open/floor/tile/green/whitegreen{ dir = 1 }, @@ -9303,7 +9297,7 @@ /turf/open/floor/tile/yellow/full, /area/slumbridge/inside/engi/central) "hey" = ( -/obj/item/ammo_magazine/tank/ltaaap_minigun, +/obj/item/ammo_magazine/tank/ltaap_chaingun, /obj/structure/cable, /turf/open/floor/plating, /area/slumbridge/inside/sombase/east) @@ -11677,12 +11671,6 @@ /obj/effect/ai_node, /turf/open/floor/plating/ground/concrete, /area/slumbridge/outside/northeast) -"iKb" = ( -/obj/machinery/computer/shuttle/shuttle_control/dropship, -/obj/structure/table/mainship, -/obj/structure/cable, -/turf/open/floor/plating/ground/snow, -/area/slumbridge/landingzonetwo) "iKz" = ( /obj/structure/barricade/snow{ dir = 8 @@ -11890,10 +11878,6 @@ }, /turf/open/floor/tile/green/greentaupe, /area/slumbridge/inside/medical/surgery) -"iSc" = ( -/obj/effect/landmark/patrol_point/som/som_11, -/turf/open/floor/tile/dark/yellow2, -/area/slumbridge/landingzonetwo) "iSw" = ( /obj/structure/window_frame/wood, /turf/open/floor/wood/variable, @@ -12866,7 +12850,7 @@ /area/slumbridge/inside/colony/bar) "jFz" = ( /obj/structure/table, -/obj/item/clothing/suit/chef/classic, +/obj/item/clothing/suit/storage/chef/classic, /obj/effect/spawner/random/food_or_drink/kitchen, /obj/effect/decal/cleanable/dirt, /turf/open/floor/prison/kitchen, @@ -13145,12 +13129,6 @@ /obj/structure/cable, /turf/open/floor, /area/slumbridge/inside/engi/south) -"jPl" = ( -/obj/structure/platform/rockcliff/icycliff{ - dir = 5 - }, -/turf/closed/mineral/smooth/darkfrostwall, -/area/slumbridge/caves/rock) "jPE" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 5 @@ -14110,12 +14088,6 @@ /obj/structure/cable, /turf/open/floor/plating/ground/mars/random/cave/darker, /area/slumbridge/caves/mining) -"kCD" = ( -/obj/structure/platform/rockcliff/icycliff{ - dir = 6 - }, -/turf/closed/mineral/smooth/darkfrostwall, -/area/slumbridge/caves/rock) "kCH" = ( /obj/structure/bed/chair{ dir = 4 @@ -15045,12 +15017,6 @@ }, /turf/open/floor/asteroidfloor, /area/slumbridge/landingzoneone) -"ljW" = ( -/obj/machinery/door/poddoor/timed_late/containment/landing_zone/lz2{ - dir = 2 - }, -/turf/closed/mineral/smooth/darkfrostwall, -/area/slumbridge/caves/rock/nearlz) "lka" = ( /obj/structure/prop/mainship/telecomms/hub, /turf/open/floor/mainship/tcomms, @@ -15902,12 +15868,6 @@ /obj/effect/landmark/weed_node, /turf/open/floor/tile/white, /area/slumbridge/inside/colony/southerndome) -"lOS" = ( -/obj/structure/platform/rockcliff/icycliff{ - dir = 9 - }, -/turf/closed/mineral/smooth/darkfrostwall, -/area/slumbridge/caves/rock) "lOZ" = ( /obj/effect/landmark/lv624/fog_blocker/xeno_spawn, /obj/effect/landmark/xeno_resin_door, @@ -15956,16 +15916,6 @@ /obj/structure/prop/mainship/holobarrier/passthrough, /turf/open/floor/plating/fake_space, /area/slumbridge/outside/northwest) -"lRh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/flasher/portable, -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 4 - }, -/turf/open/floor/prison/darkred{ - dir = 1 - }, -/area/slumbridge/inside/prison/outerringnorth) "lRi" = ( /turf/open/floor/plating/ground/snow/layer2{ dir = 10 @@ -18317,6 +18267,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/slumbridge/inside/colony/dorms) +"nCu" = ( +/turf/open/floor/tile/dark/yellow2{ + dir = 10 + }, +/area/slumbridge/landingzonetwo) "nCw" = ( /obj/machinery/light, /turf/open/floor, @@ -18753,6 +18708,12 @@ /obj/effect/ai_node, /turf/open/floor/prison/kitchen, /area/slumbridge/inside/colony/kitchen) +"nSK" = ( +/obj/structure/stairs/seamless/edge{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/slumbridge/landingzonetwo) "nTb" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 5 @@ -21688,6 +21649,10 @@ /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/snow/layer0, /area/slumbridge/outside/southwest) +"qdz" = ( +/obj/structure/prop/mainship/hangar_stencil/two, +/turf/open/floor/tile/dark, +/area/slumbridge/landingzonetwo) "qdH" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/structure/cable, @@ -22468,6 +22433,12 @@ }, /turf/open/floor/plating/ground/snow, /area/slumbridge/outside/southwest/nearlz) +"qFO" = ( +/obj/structure/stairs/seamless{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/slumbridge/landingzonetwo) "qFT" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -25831,6 +25802,10 @@ /obj/structure/cable, /turf/open/floor/tile/green/greentaupe, /area/slumbridge/inside/hydrotreatment) +"tak" = ( +/obj/effect/landmark/patrol_point/som/som_11, +/turf/open/floor/tile/dark, +/area/slumbridge/landingzonetwo) "taC" = ( /obj/structure/rock/basalt/pile, /turf/open/floor/plating/ground/mars/random/cave, @@ -26353,7 +26328,7 @@ "twh" = ( /obj/structure/table/gamblingtable, /obj/item/toy/dice/d20, -/obj/item/trash/barcardine, +/obj/item/trash/barcaridine, /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 5 }, @@ -26444,10 +26419,6 @@ }, /turf/open/floor/plating/fake_space, /area/slumbridge/outside/southeast) -"tyJ" = ( -/obj/structure/prop/mainship/hangar_stencil/two, -/turf/open/floor/tile/dark/yellow2, -/area/slumbridge/landingzonetwo) "tzA" = ( /obj/structure/disposalpipe/junction/flipped{ dir = 4 @@ -26654,6 +26625,12 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor/tile/blue, /area/slumbridge/inside/houses/surgery/garbledradio) +"tGR" = ( +/obj/structure/platform/rockcliff/icycliff{ + dir = 6 + }, +/turf/closed/mineral/smooth/darkfrostwall/indestructible, +/area/slumbridge/caves/rock) "tGX" = ( /obj/structure/rock/basalt/pile/alt, /obj/effect/ai_node, @@ -28098,12 +28075,6 @@ /obj/effect/landmark/weed_node, /turf/open/floor/tile/bar, /area/slumbridge/inside/houses/recreational) -"uPi" = ( -/obj/structure/platform/rockcliff/icycliff{ - dir = 1 - }, -/turf/closed/mineral/smooth/darkfrostwall, -/area/slumbridge/caves/rock) "uPr" = ( /obj/effect/landmark/corpsespawner/scientist, /obj/effect/turf_decal/tracks/wheels/bloody{ @@ -28492,6 +28463,11 @@ /obj/machinery/atmospherics/pipe/manifold/green/hidden, /turf/open/floor/tile/white, /area/slumbridge/inside/medical/southern) +"veW" = ( +/obj/structure/table/mainship, +/obj/machinery/computer/shuttle/shuttle_control/dropship, +/turf/open/floor/tile/dark/red2, +/area/slumbridge/landingzoneone) "vfe" = ( /obj/effect/landmark/corpsespawner/engineer/regular, /turf/open/floor, @@ -29464,6 +29440,12 @@ "vNL" = ( /turf/open/floor/plating/ground/desertdam/asphalt, /area/slumbridge/outside/northeast) +"vNM" = ( +/obj/structure/prop/mainship/hangar_stencil/two, +/turf/open/floor/tile/dark/yellow2{ + dir = 8 + }, +/area/slumbridge/landingzonetwo) "vOb" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -31277,10 +31259,6 @@ "wYo" = ( /turf/open/liquid/lava/single, /area/slumbridge/inside/prison/outside) -"wYt" = ( -/obj/machinery/door/poddoor/timed_late/containment/landing_zone/lz2, -/turf/closed/mineral/smooth/darkfrostwall, -/area/slumbridge/caves/rock/nearlz) "wYT" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/structure/cable, @@ -33790,13 +33768,13 @@ vqW vqW vdE vqW -ddg -ddg +vyM +vyM vqW -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM vqW vdE vqW @@ -33841,7 +33819,7 @@ tUr tUr tUr xvW -vyM +xvW vyM "} (6,1,1) = {" @@ -33956,9 +33934,9 @@ vqW vqW vqW vqW -ddg -ddg -ddg +vyM +vyM +vyM vqW vqW vqW @@ -33972,14 +33950,14 @@ vqW vqW vqW vqW -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vdE vqW vqW @@ -34021,9 +33999,9 @@ pjL pjL pjL pjL +pjL xvW vyM -vyM "} (7,1,1) = {" dHe @@ -34124,9 +34102,9 @@ fqe lJL lJL lJL -ddg -ddg -ddg +vyM +vyM +vyM vqW vqW vqW @@ -34138,10 +34116,10 @@ vqW vqW vqW vqW -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM vqW vqW vqW @@ -34154,10 +34132,10 @@ vqW vqW vqW vqW -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM vqW vqW vdE @@ -34200,11 +34178,11 @@ pzJ fBt pzJ ffG -adD +vNM +nCu pjL xvW vyM -vyM "} (8,1,1) = {" dHe @@ -34304,29 +34282,29 @@ ycB lJL lJL lJL -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM vqW vqW vqW vqW -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM vqW vqW vqW vqW -ddg +vyM vqW vqW vqW vqW vqW -ddg +vyM vqW vqW vqW @@ -34381,11 +34359,11 @@ sfW sfW sfW sfW +sfW fVX pjL xvW vyM -vyM "} (9,1,1) = {" dHe @@ -34487,14 +34465,14 @@ dHe dHe vyM vyM -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vqW vqW vqW @@ -34506,15 +34484,15 @@ vqW vqW vqW vqW -ddg -ddg -ddg +vyM +vyM +vyM vqW vqW vqW -ddg -ddg -ddg +vyM +vyM +vyM vqW vdE vqW @@ -34524,8 +34502,8 @@ vdE vqW vqW vqW -ddg -ddg +vyM +vyM vqW vqW skd @@ -34562,11 +34540,11 @@ wia wia tqd sfW +sfW yiz pjL xvW vyM -vyM "} (10,1,1) = {" dHe @@ -34668,12 +34646,12 @@ uSb uSb vyM vyM -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM vqW vqW vqW @@ -34685,32 +34663,32 @@ vqW vqW vqW vqW -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM skd vdE vqW vqW skd -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM skd vqW vqW skd -ljW +xvW pjL ooG ooG @@ -34743,11 +34721,11 @@ iTj gWB vBZ cUJ +sfW yiz pjL xvW vyM -vyM "} (11,1,1) = {" dHe @@ -34849,10 +34827,10 @@ uSb uSb uSb vyM -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM vqW vqW vqW @@ -34866,11 +34844,11 @@ vqW vqW vqW skd -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM skd skd skd @@ -34886,12 +34864,12 @@ skd skd skd skd -ddg +vyM vqW vqW vqW skd -ljW +xvW pjL ooG ooG @@ -34924,11 +34902,11 @@ iEk oXX vBZ sfW +sfW yiz pjL xvW vyM -vyM "} (12,1,1) = {" dHe @@ -35031,8 +35009,8 @@ uSb uSb vyM vyM -ddg -ddg +vyM +vyM vqW vqW vqW @@ -35072,7 +35050,7 @@ vqW vqW vqW skd -ljW +xvW pjL pjL ahF @@ -35105,11 +35083,11 @@ iEk oXX vBZ sfW +sfW fVX pjL xvW vyM -vyM "} (13,1,1) = {" dHe @@ -35212,8 +35190,8 @@ uSb uSb uSb vyM -ddg -ddg +vyM +vyM vqW vqW vqW @@ -35223,7 +35201,7 @@ vqW vqW vqW skd -ddg +vyM vqW vqW vqW @@ -35253,8 +35231,8 @@ vqW vdE vqW skd -wYt -ljW +tUr +xvW pjL ooG ooG @@ -35286,11 +35264,11 @@ iEk oXX vBZ iPr +sfW yiz pjL xvW vyM -vyM "} (14,1,1) = {" dHe @@ -35393,9 +35371,9 @@ uSb uSb uSb vyM -ddg -ddg -ddg +vyM +vyM +vyM vqW vqW vqW @@ -35404,9 +35382,9 @@ skd skd skd skd -ddg -ddg -ddg +vyM +vyM +vyM vqW vqW vqW @@ -35435,7 +35413,7 @@ vqW vqW vqW lFL -ljW +xvW pjL ooG ooG @@ -35467,11 +35445,11 @@ iEk oXX khO uSH +sfW yiz pjL xvW vyM -vyM "} (15,1,1) = {" dHe @@ -35575,8 +35553,8 @@ uSb uSb vyM vyM -ddg -ddg +vyM +vyM vqW vqW skd @@ -35587,7 +35565,7 @@ skd skd skd skd -ddg +vyM vqW vqW vqW @@ -35609,7 +35587,7 @@ vqW vqW vqW vqW -ddg +vyM vqW vqW vqW @@ -35648,11 +35626,11 @@ iEk oXX khO uSH +sfW yiz pjL xvW vyM -vyM "} (16,1,1) = {" dHe @@ -35756,8 +35734,8 @@ uSb uSb uSb vyM -ddg -ddg +vyM +vyM jbT jbT bHk @@ -35790,7 +35768,7 @@ skd vqW vqW skd -ddg +vyM vqW vqW vqW @@ -35829,11 +35807,11 @@ iEk oXX khO uSH +sfW fVX pjL xvW vyM -vyM "} (17,1,1) = {" dHe @@ -35938,7 +35916,7 @@ uSb uSb vyM vyM -ddg +vyM bYo bYo bYo @@ -35963,16 +35941,16 @@ vqW vqW vqW skd -ddg +vyM skd skd -ddg +vyM skd -ddg -ddg +vyM +vyM skd -ddg -ddg +vyM +vyM vqW vqW vqW @@ -36010,11 +35988,11 @@ iEk oXX vBZ sfW -iSc +tak +yiz pjL xvW vyM -vyM "} (18,1,1) = {" dHe @@ -36144,15 +36122,15 @@ vqW vqW vqW skd -ddg -ddg +vyM +vyM skd -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM skd vqW vdE @@ -36191,11 +36169,11 @@ iEk oXX vBZ sfW +sfW yiz pjL xvW vyM -vyM "} (19,1,1) = {" dHe @@ -36325,15 +36303,15 @@ bLr vqW vqW skd -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM skd -ddg -ddg -ddg +vyM +vyM +vyM skd vdE vqW @@ -36372,11 +36350,11 @@ iEk oXX vBZ sfW +sfW yiz pjL xvW vyM -vyM "} (20,1,1) = {" dHe @@ -36507,13 +36485,13 @@ tKZ vqW skd skd -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM skd vqW vqW @@ -36553,11 +36531,11 @@ nxw wpm vBZ sfW +sfW fVX pjL xvW vyM -vyM "} (21,1,1) = {" dHe @@ -36688,20 +36666,20 @@ tKZ vqW skd skd -ddg -ddg +vyM +vyM skd -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM skd vqW vqW vqW vqW skd -ljW +xvW pjL ooG ooG @@ -36734,11 +36712,11 @@ qWU qWU tqd sfW -tyJ +qdz +yiz pjL xvW vyM -vyM "} (22,1,1) = {" dHe @@ -36869,12 +36847,12 @@ tKZ vqW vqW skd -ddg +vyM skd vqW skd skd -ddg +vyM skd skd vqW @@ -36882,7 +36860,7 @@ vdE vqW skd skd -ljW +xvW pjL ooG ooG @@ -36915,11 +36893,11 @@ sfW sfW sfW sfW +sfW yiz pjL xvW vyM -vyM "} (23,1,1) = {" dHe @@ -37062,8 +37040,8 @@ vqW vqW vqW skd -ddg -ljW +vyM +xvW pjL ooG ooG @@ -37095,12 +37073,12 @@ egI egI egI egI -egI -bDO +nSK +qFO +qFO pjL xvW vyM -vyM "} (24,1,1) = {" dHe @@ -37243,8 +37221,8 @@ vqW vqW vqW skd -ddg -ljW +vyM +xvW pjL ooG ooG @@ -37277,11 +37255,11 @@ ooG ooG ooG ooG +ooG bPI pjL xvW vyM -vyM "} (25,1,1) = {" dHe @@ -37424,8 +37402,8 @@ vqW vqW vqW skd -ddg -ljW +vyM +xvW pjL pjL ahF @@ -37453,16 +37431,16 @@ ooG ooG ooG aEa -gGN -iKb -gGN -gGN +ooG +ooG +ooG +ooG +ooG ooG ooG pjL xvW vyM -vyM "} (26,1,1) = {" dHe @@ -37606,8 +37584,8 @@ vqW vqW skd skd -wYt -ljW +tUr +xvW pjL fnu fnu @@ -37634,16 +37612,16 @@ fnu fnu fnu ooG -nrN -pjL -pjL -uUd -pjL -pjL +gGN +gGN +gGN +gGN +ooG +ooG +ooG pjL xvW vyM -vyM "} (27,1,1) = {" dHe @@ -37769,9 +37747,9 @@ vTh oSy nmr bIq -lOS -ddg -ddg +ekp +vyM +vyM skd vqW vqW @@ -37787,8 +37765,8 @@ vqW vqW vqW skd -ddg -ljW +vyM +xvW pjL pjL kYx @@ -37817,13 +37795,13 @@ kwy ooG gGN pjL -kfE -ddr -cCV +pjL +uUd +pjL +pjL +pjL pjL xvW -tUr -vyM vyM "} (28,1,1) = {" @@ -37950,9 +37928,9 @@ alt mmJ nmr lRi -uPi -ddg -ddg +bSw +vyM +vyM skd vqW vqW @@ -37970,7 +37948,7 @@ vqW vqW skd lFL -ljW +xvW pjL sfW akB @@ -37997,14 +37975,14 @@ fnu plp ooG gGN -pbh -cCV +pjL +kfE +ddr cCV -aVn pjL xvW -vyM -vyM +tUr +tUr vyM "} (29,1,1) = {" @@ -38042,7 +38020,7 @@ bkz bkz nwg aWu -beC +qKi qYu aTh bYh @@ -38131,14 +38109,14 @@ alt qNF nmr lRi -jPl -ddg -ddg +abi +vyM +vyM vqW vqW vqW skd -ddg +vyM skd skd vqW @@ -38151,7 +38129,7 @@ vqW vqW vqW skd -ljW +xvW pjL sfW pTB @@ -38181,7 +38159,7 @@ gGN pbh cCV cCV -cCV +aVn pjL xvW vyM @@ -38225,7 +38203,7 @@ nwg aWu qKi nHt -qKi +veW bYh fjl kSa @@ -38313,26 +38291,26 @@ qNF nmr uvc oge -jPl -ddg +abi +vyM vqW vqW vqW skd -ddg +vyM skd skd vqW vqW vqW vqW -ddg +vyM vdE vqW vdE vqW skd -ljW +xvW pjL sfW pTB @@ -38359,10 +38337,10 @@ cgP fLs ooG nrN -pjL -pjL -pjL -pjL +pbh +cCV +cCV +cCV pjL xvW vyM @@ -38500,20 +38478,20 @@ jbT jbT vqW skd -ddg -ddg +vyM +vyM skd vqW vqW vqW vqW -ddg +vyM vqW vqW vqW vqW skd -ljW +xvW pjL sfW pTB @@ -38541,11 +38519,11 @@ kwy ooG gGN pjL -ljW -wYt -wYt -wYt -wYt +pjL +pjL +pjL +pjL +xvW vyM vyM vyM @@ -38681,20 +38659,20 @@ bYo bYo bLr bHk -ddg -ddg +vyM +vyM skd vqW vqW vqW vqW -ddg -ddg +vyM +vyM vqW vqW vqW -ddg -ljW +vyM +xvW pjL sfW icx @@ -38722,11 +38700,11 @@ fnu gGN gGN pjL -ljW -ddg -ddg -ddg -ddg +xvW +tUr +tUr +tUr +tUr vyM vyM vyM @@ -38863,19 +38841,19 @@ bYo bYo bYo wCj -ddg +vyM skd vqW vqW vqW -ddg -ddg -ddg +vyM +vyM +vyM vqW vqW vqW skd -ljW +xvW pjL pjL xWP @@ -38903,11 +38881,11 @@ fnu nde pjL pjL -ljW -ddg -ddg -ddg -ddg +xvW +vyM +vyM +vyM +vyM vyM vyM vyM @@ -39044,20 +39022,20 @@ bYo bYo bYo yhc -ddg +vyM skd vqW vqW vqW -ddg +vyM skd -ddg +vyM vqW vqW vqW skd -wYt -ljW +tUr +xvW pjL fnu wAW @@ -39083,12 +39061,12 @@ plp kwy gGN pjL -ljW -wYt -ddg -ddg -ddg -ddg +xvW +tUr +vyM +vyM +vyM +vyM vyM vyM vyM @@ -39225,20 +39203,20 @@ bYo lFH bYo bYo -uPi +bSw skd vqW vqW vqW skd skd -ddg +vyM vqW vqW vqW skd -ddg -ljW +vyM +xvW pjL lKA sfW @@ -39264,12 +39242,12 @@ gGN gGN gGN pjL -ljW -ddg -ddg -ddg -ddg -ddg +xvW +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -39408,18 +39386,18 @@ bYo bYo yhc bHk -ddg +vyM vqW vqW skd skd -ddg -ddg +vyM +vyM vqW vqW vqW -ddg -ljW +vyM +xvW pjL sfW sfW @@ -39445,12 +39423,12 @@ pjL pjL pjL pjL -ljW -ddg -ddg -ddg -ddg -ddg +xvW +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -39589,18 +39567,18 @@ bYo bYo bYo bYo -jPl +abi vqW vqW skd -ddg -ddg +vyM +vyM skd vdE vqW vqW skd -ljW +xvW pjL pLY sfW @@ -39623,15 +39601,15 @@ sfW fKN pjL pjL -ljW -wYt -wYt -wYt -ddg -ddg -ddg -ddg -ddg +xvW +tUr +tUr +tUr +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -39774,14 +39752,14 @@ bYo bLr vqW skd -ddg -ddg +vyM +vyM skd skd vdE vqW skd -ljW +xvW pjL ckW sfW @@ -39803,16 +39781,16 @@ jhV jhV jhV pjL -ljW -wYt -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +xvW +tUr +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -39956,13 +39934,13 @@ qCL bLr skd skd -ddg -ddg +vyM +vyM skd vqW vqW bHk -ljW +xvW pjL pjL pbh @@ -39984,16 +39962,16 @@ pjL pjL pjL pjL -ljW -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +xvW +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -40135,11 +40113,11 @@ bYo lFH qCL qCL -jPl +abi skd -ddg -ddg -ddg +vyM +vyM +vyM vqW rEK qCL @@ -40163,18 +40141,18 @@ mAd mAd mAd mAd -wYt -wYt -ljW -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +tUr +tUr +xvW +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -40319,8 +40297,8 @@ qCL qCL yhc skd -ddg -ddg +vyM +vyM rEK qCL qCL @@ -40345,17 +40323,17 @@ qCL qCL qCL qCL -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -40500,8 +40478,8 @@ qCL qCL qCL wCj -ddg -kCD +vyM +tGR qCL qCL qCL @@ -40526,17 +40504,17 @@ qCL qCL qCL qCL -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -40708,16 +40686,16 @@ iIa qCL qCL qCL -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -40889,16 +40867,16 @@ qCL qCL qCL qCL -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -41070,16 +41048,16 @@ qCL qCL iIa qCL -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -41252,15 +41230,15 @@ qCL qCL qCL qCL -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -41434,14 +41412,14 @@ oyi iIa qCL qCL -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -41615,14 +41593,14 @@ qCL oyi qCL qCL -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -41796,14 +41774,14 @@ qCL qCL qCL qCL -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -41978,13 +41956,13 @@ gIw qCL qCL qCL -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -42159,14 +42137,14 @@ gIw iIa qCL qCL -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM "} @@ -42341,13 +42319,13 @@ qCL qCL qCL qCL -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM "} @@ -42522,13 +42500,13 @@ qCL qCL qCL qCL -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM "} @@ -42703,13 +42681,13 @@ bYo bYo bYo bYo -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM "} @@ -42884,13 +42862,13 @@ bYo lFH bYo bYo -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM "} @@ -43065,13 +43043,13 @@ bYo bYo bYo bYo -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM "} @@ -43246,12 +43224,12 @@ bYo bYo bYo bYo -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -43427,12 +43405,12 @@ bYo bYo bYo bYo -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -43608,12 +43586,12 @@ bYo bYo bYo bYo -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -43789,12 +43767,12 @@ lFH bYo bYo bYo -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -43971,10 +43949,10 @@ bYo bYo lFH bYo -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM vyM vyM vyM @@ -44151,11 +44129,11 @@ bYo bYo bYo bYo -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -44332,11 +44310,11 @@ bYo bYo bYo bYo -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -44513,11 +44491,11 @@ bYo bYo bYo bYo -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -44693,12 +44671,12 @@ qRS lFH bYo bYo -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -44874,12 +44852,12 @@ qRS bYo bYo bYo -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -45055,12 +45033,12 @@ ocz bYo bYo bYo -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -45236,12 +45214,12 @@ xxj bYo bYo bYo -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -45416,12 +45394,12 @@ evR qRS bYo bYo -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -45596,13 +45574,13 @@ xWi evR qRS qRS -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -45777,13 +45755,13 @@ evR evR qRS qRS -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -45958,13 +45936,13 @@ lRi rfs xxj qRS -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -46139,13 +46117,13 @@ lRi rfs qRS qRS -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -46320,13 +46298,13 @@ qRS lRi qRS qRS -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -46501,13 +46479,13 @@ uvc rfs qRS qRS -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -46682,13 +46660,13 @@ lRi rfs xxj qRS -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -46864,12 +46842,12 @@ qRS ocz qRS qRS -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -47045,12 +47023,12 @@ qRS qRS qRS qRS -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -47225,14 +47203,14 @@ rfs qRS qRS qRS -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -47405,15 +47383,15 @@ nmr qRS qRS qRS -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -47586,15 +47564,15 @@ nmr qRS qRS xxj -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -47768,14 +47746,14 @@ nmr dkI rfs rfs -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -47949,15 +47927,15 @@ nmr dkI rfs lRi -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -48130,15 +48108,15 @@ dkI dkI qRS lRi -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -48312,14 +48290,14 @@ qRS rfs rfs lRi -ddg -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -48494,13 +48472,13 @@ uAZ uiq qRS qRS -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -48675,13 +48653,13 @@ qRS lRi rfs lRi -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM vyM @@ -48857,13 +48835,13 @@ rfs lRi qRS qRS -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM "} @@ -49038,13 +49016,13 @@ qRS lRi rfs qRS -ddg -ddg -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM +vyM +vyM vyM vyM "} @@ -49221,11 +49199,11 @@ rfs qRS hZV rfs -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM vyM vyM "} @@ -49402,11 +49380,11 @@ rfs lRi uvc qRS -ddg -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM +vyM vyM vyM "} @@ -49584,10 +49562,10 @@ qRS qRS uvc rfs -ddg -ddg -ddg -ddg +vyM +vyM +vyM +vyM vyM vyM "} @@ -49766,9 +49744,9 @@ ceW uvc qRS lRi -ddg -ddg -ddg +vyM +vyM +vyM vyM vyM "} @@ -49948,8 +49926,8 @@ rfs lRi lJC lRi -ddg -ddg +vyM +vyM vyM vyM "} @@ -50129,7 +50107,7 @@ lRi qRS qRS lRi -ddg +vyM vyM vyM vyM @@ -50310,7 +50288,7 @@ lRi rfs lRi lRi -ddg +vyM vyM vyM vyM diff --git a/_maps/modularmaps/EORG/cs_mansion.dmm b/_maps/modularmaps/EORG/cs_mansion.dmm index 5fb22d5bcf08b..99a4286f678f8 100644 --- a/_maps/modularmaps/EORG/cs_mansion.dmm +++ b/_maps/modularmaps/EORG/cs_mansion.dmm @@ -392,8 +392,8 @@ /obj/structure/platform{ dir = 1 }, -/obj/structure/stairs/edge{ - dir = 4 +/obj/structure/stairs/seamless/edge{ + dir = 8 }, /turf/open/floor/tile/dark, /area/deathmatch) @@ -598,8 +598,8 @@ /area/deathmatch) "Ay" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/stairs/edge{ - dir = 4 +/obj/structure/stairs/seamless/edge{ + dir = 8 }, /turf/open/floor/tile/dark, /area/deathmatch) @@ -654,6 +654,13 @@ /obj/effect/decal/remains/human, /turf/open/floor/wood, /area/deathmatch) +"CK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/stairs/seamless/edge{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/deathmatch) "CV" = ( /obj/structure/platform{ dir = 4 @@ -929,6 +936,13 @@ "Oh" = ( /turf/open/floor/grime, /area/deathmatch) +"Oj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/stairs/seamless{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/deathmatch) "Op" = ( /obj/structure/barricade/wooden{ dir = 1 @@ -1086,8 +1100,8 @@ "Vm" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/platform, -/obj/structure/stairs/edge{ - dir = 4 +/obj/structure/stairs/seamless/edge{ + dir = 1 }, /turf/open/floor/tile/dark, /area/deathmatch) @@ -1704,7 +1718,7 @@ wz (11,1,1) = {" wz Ay -Ay +CK wz Gl Gl @@ -1786,7 +1800,7 @@ BK Wk yM Ay -Ay +CK Db Gl Gl @@ -2157,7 +2171,7 @@ Gl Gl jU tm -Ay +Oj Vm tN Gl diff --git a/_maps/modularmaps/EORG/cs_militia.dmm b/_maps/modularmaps/EORG/cs_militia.dmm index 9622c071d4bab..ea1e6aa1fa301 100644 --- a/_maps/modularmaps/EORG/cs_militia.dmm +++ b/_maps/modularmaps/EORG/cs_militia.dmm @@ -158,6 +158,9 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/ground/mars/random/sand, /area/deathmatch) +"rx" = ( +/turf/closed/mineral/smooth/desertdamrockwall/indestructible, +/area/deathmatch) "rK" = ( /obj/machinery/door/window/right, /turf/open/floor/wood, @@ -550,55 +553,55 @@ /area/deathmatch) (1,1,1) = {" -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx "} (2,1,1) = {" -Uv +rx Uv Uv Uv @@ -643,10 +646,10 @@ WC WC WC WC -Uv +rx "} (3,1,1) = {" -Uv +rx Uv Uv Uv @@ -691,10 +694,10 @@ WV GH WV WC -Uv +rx "} (4,1,1) = {" -Uv +rx Uv Uv Uv @@ -739,10 +742,10 @@ WV NB WV WC -Uv +rx "} (5,1,1) = {" -Uv +rx Uv Uv Uv @@ -787,10 +790,10 @@ GB GB WV WC -Uv +rx "} (6,1,1) = {" -Uv +rx Uv Uv Uv @@ -835,10 +838,10 @@ WC WC WC WC -Uv +rx "} (7,1,1) = {" -Uv +rx Uv Uv Uv @@ -883,10 +886,10 @@ Uv Uv Uv Uv -Uv +rx "} (8,1,1) = {" -Uv +rx Uv Uv Uv @@ -931,10 +934,10 @@ Uv Uv Uv Uv -Uv +rx "} (9,1,1) = {" -Uv +rx Uv Uv Uv @@ -979,10 +982,10 @@ Uv Uv Uv Uv -Uv +rx "} (10,1,1) = {" -Uv +rx Uv Uv Uv @@ -1027,10 +1030,10 @@ Uv Uv Uv Uv -Uv +rx "} (11,1,1) = {" -Uv +rx Uv Uv Uv @@ -1075,10 +1078,10 @@ Uv Uv Uv Uv -Uv +rx "} (12,1,1) = {" -Uv +rx Uv Uv Uv @@ -1123,10 +1126,10 @@ Uv Uv Uv Uv -Uv +rx "} (13,1,1) = {" -Uv +rx Uv Uv Uv @@ -1171,10 +1174,10 @@ WC WC Uv Uv -Uv +rx "} (14,1,1) = {" -Uv +rx Uv Uv Uv @@ -1219,10 +1222,10 @@ WV WC Uv Uv -Uv +rx "} (15,1,1) = {" -Uv +rx Uv Uv Uv @@ -1267,10 +1270,10 @@ hw WC Uv Uv -Uv +rx "} (16,1,1) = {" -Uv +rx Uv Uv Uv @@ -1315,10 +1318,10 @@ WV WC Uv Uv -Uv +rx "} (17,1,1) = {" -Uv +rx Uv Uv Uv @@ -1363,10 +1366,10 @@ WV WC Uv Uv -Uv +rx "} (18,1,1) = {" -Uv +rx Uv Uv Uv @@ -1411,10 +1414,10 @@ WV WC Uv Uv -Uv +rx "} (19,1,1) = {" -Uv +rx Uv Uv Uv @@ -1459,10 +1462,10 @@ WV WC Uv Uv -Uv +rx "} (20,1,1) = {" -Uv +rx Uv Uv Uv @@ -1507,10 +1510,10 @@ WV WC Uv Uv -Uv +rx "} (21,1,1) = {" -Uv +rx Uv Uv Uv @@ -1555,10 +1558,10 @@ cR WC Uv Uv -Uv +rx "} (22,1,1) = {" -Uv +rx Uv Uv Uv @@ -1603,10 +1606,10 @@ WV WC Uv Uv -Uv +rx "} (23,1,1) = {" -Uv +rx Uv Uv Uv @@ -1651,10 +1654,10 @@ WV WC Uv Uv -Uv +rx "} (24,1,1) = {" -Uv +rx Uv Uv Uv @@ -1699,10 +1702,10 @@ hw WC Uv Uv -Uv +rx "} (25,1,1) = {" -Uv +rx Uv Uv Uv @@ -1747,10 +1750,10 @@ WC WC Uv Uv -Uv +rx "} (26,1,1) = {" -Uv +rx Uv Uv Uv @@ -1795,10 +1798,10 @@ Uv Uv Uv Uv -Uv +rx "} (27,1,1) = {" -Uv +rx Uv Uv Uv @@ -1843,10 +1846,10 @@ Uv Uv Uv Uv -Uv +rx "} (28,1,1) = {" -Uv +rx Uv Uv mY @@ -1891,10 +1894,10 @@ Uv Uv Uv Uv -Uv +rx "} (29,1,1) = {" -Uv +rx Uv Uv mY @@ -1939,10 +1942,10 @@ Uv Uv Uv Uv -Uv +rx "} (30,1,1) = {" -Uv +rx Uv aB kv @@ -1987,10 +1990,10 @@ Uv Uv Uv Uv -Uv +rx "} (31,1,1) = {" -Uv +rx Uv mY uR @@ -2035,10 +2038,10 @@ Uv Uv Uv Uv -Uv +rx "} (32,1,1) = {" -Uv +rx Uv mY uR @@ -2083,10 +2086,10 @@ WC WC WC WC -Uv +rx "} (33,1,1) = {" -Uv +rx Uv mY uR @@ -2131,10 +2134,10 @@ WV sv NB WC -Uv +rx "} (34,1,1) = {" -Uv +rx aB kv rf @@ -2179,10 +2182,10 @@ WV GB GB WC -Uv +rx "} (35,1,1) = {" -Uv +rx kv uR uR @@ -2227,10 +2230,10 @@ WC WC WC WC -Uv +rx "} (36,1,1) = {" -Uv +rx uR uR uR @@ -2275,10 +2278,10 @@ Uv Uv Uv Uv -Uv +rx "} (37,1,1) = {" -Uv +rx uR uR Gx @@ -2323,10 +2326,10 @@ Uv Uv Uv Uv -Uv +rx "} (38,1,1) = {" -Uv +rx uR uR vb @@ -2371,10 +2374,10 @@ Uv Uv Uv Uv -Uv +rx "} (39,1,1) = {" -Uv +rx bP Vo Yq @@ -2419,10 +2422,10 @@ Uv Uv Uv Uv -Uv +rx "} (40,1,1) = {" -Uv +rx mY uR uR @@ -2467,10 +2470,10 @@ Uv Uv Uv Uv -Uv +rx "} (41,1,1) = {" -Uv +rx Uv bP uR @@ -2515,10 +2518,10 @@ Uv Uv Uv Uv -Uv +rx "} (42,1,1) = {" -Uv +rx Uv Uv bP @@ -2563,10 +2566,10 @@ Uv Uv Uv Uv -Uv +rx "} (43,1,1) = {" -Uv +rx Uv Uv Uv @@ -2611,10 +2614,10 @@ Uv Uv Uv Uv -Uv +rx "} (44,1,1) = {" -Uv +rx Uv Uv Uv @@ -2659,10 +2662,10 @@ Uv Uv Uv Uv -Uv +rx "} (45,1,1) = {" -Uv +rx Uv Uv Uv @@ -2707,53 +2710,53 @@ Uv Uv Uv Uv -Uv +rx "} (46,1,1) = {" -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx +rx "} diff --git a/_maps/modularmaps/EORG/cs_office.dmm b/_maps/modularmaps/EORG/cs_office.dmm index 5a829e60fcca1..617bd70f0ddde 100644 --- a/_maps/modularmaps/EORG/cs_office.dmm +++ b/_maps/modularmaps/EORG/cs_office.dmm @@ -4,8 +4,8 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/stairs/edge{ - dir = 8 +/obj/structure/stairs/seamless/edge{ + dir = 4 }, /turf/open/floor/tile/dark, /area/deathmatch) @@ -623,6 +623,11 @@ }, /turf/open/floor/tile/dark2, /area/deathmatch) +"pm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/stairs/seamless/edge, +/turf/open/floor/tile/dark, +/area/deathmatch) "pn" = ( /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/tile/dark/blue2{ @@ -813,6 +818,13 @@ "tn" = ( /turf/open/floor/tile/dark/blue2, /area/deathmatch) +"tp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/stairs/seamless/edge{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/deathmatch) "tv" = ( /obj/structure/window/framed/mainship/gray/toughened/hull, /obj/structure/platform{ @@ -1103,6 +1115,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/tile/dark2, /area/deathmatch) +"zD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/stairs/seamless/edge{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/deathmatch) "zR" = ( /obj/structure/cargo_container/hd, /turf/open/floor/plating/ground/snow/layer1, @@ -1450,8 +1469,8 @@ /area/deathmatch) "HB" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/stairs/edge{ - dir = 4 +/obj/structure/stairs/seamless/edge{ + dir = 8 }, /turf/open/floor/tile/dark, /area/deathmatch) @@ -1567,7 +1586,7 @@ /area/deathmatch) "Le" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/stairs/edge{ +/obj/structure/stairs/seamless{ dir = 8 }, /turf/open/floor/tile/dark, @@ -2112,8 +2131,8 @@ /obj/effect/spawner/random/food_or_drink/kitchenknife/butcherweighted, /obj/item/tool/kitchen/rollingpin, /obj/item/clothing/head/chefhat, -/obj/item/clothing/suit/chef/classic, -/obj/item/clothing/suit/chef, +/obj/item/clothing/suit/storage/chef/classic, +/obj/item/clothing/suit/storage/chef, /turf/open/floor/tile/cmo, /area/deathmatch) "Xo" = ( @@ -2241,7 +2260,7 @@ /turf/open/floor/stairs, /area/deathmatch) "ZD" = ( -/turf/closed/brock, +/turf/closed/mineral/smooth/basalt, /area/deathmatch) "ZF" = ( /obj/structure/table, @@ -2876,7 +2895,7 @@ qe qe ad Le -Le +pm Xv Mr Mr @@ -3356,8 +3375,8 @@ ZD ZD ZD Xv -Le -Le +tp +pm Nm YU YU @@ -3412,7 +3431,7 @@ gE WK Nm HB -HB +zD Nm Xv "} @@ -3452,8 +3471,8 @@ ZD ZD ZD Xv -Le -Le +tp +pm If Jz tl diff --git a/_maps/modularmaps/EORG/de_inferno.dmm b/_maps/modularmaps/EORG/de_inferno.dmm index f9eacf5d5c216..dd783e275d187 100644 --- a/_maps/modularmaps/EORG/de_inferno.dmm +++ b/_maps/modularmaps/EORG/de_inferno.dmm @@ -517,6 +517,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/ground/dirt_desert, /area/deathmatch) +"hS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/stairs/seamless{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/deathmatch) "hX" = ( /obj/machinery/door/airlock/mainship/medical/glass/free_access{ name = "\improper Civilian Housing" @@ -592,6 +599,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/ground/dirt_desert, /area/deathmatch) +"kE" = ( +/obj/structure/platform_decoration{ + dir = 4 + }, +/turf/open/floor/plating/asteroidfloor, +/area/deathmatch) "kI" = ( /obj/structure/largecrate/guns/merc, /obj/effect/decal/cleanable/dirt, @@ -608,6 +621,13 @@ /obj/effect/ai_node, /turf/open/floor/wood, /area/deathmatch) +"kR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/stairs/seamless/edge{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/deathmatch) "lc" = ( /obj/effect/decal/cleanable/blood/gibs/xeno, /obj/structure/platform, @@ -820,6 +840,13 @@ /obj/structure/flora/ausbushes/leafybush, /turf/open/ground/grass, /area/deathmatch) +"rT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/stairs/seamless/edge{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/deathmatch) "sa" = ( /obj/structure/bed/chair/wood/wings{ dir = 4 @@ -907,6 +934,11 @@ /obj/effect/decal/cleanable/cobweb2, /turf/open/floor/wood, /area/deathmatch) +"uF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/stairs/seamless/edge, +/turf/open/floor/tile/dark, +/area/deathmatch) "uG" = ( /obj/structure/table/gamblingtable, /obj/item/toy/plush/rouny{ @@ -1059,8 +1091,8 @@ /obj/effect/turf_decal/warning_stripes/thin{ dir = 8 }, -/obj/structure/stairs/edge{ - dir = 4 +/obj/structure/stairs/seamless/edge{ + dir = 8 }, /turf/open/floor/tile/dark, /area/deathmatch) @@ -1167,6 +1199,13 @@ /obj/structure/flora/ausbushes/brflowers, /turf/open/ground/grass, /area/deathmatch) +"Gf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/stairs/seamless/edge{ + dir = 1 + }, +/turf/open/floor/plating/asteroidfloor, +/area/deathmatch) "Gr" = ( /obj/structure/largecrate/random/secure, /obj/effect/decal/cleanable/dirt, @@ -1458,10 +1497,10 @@ /area/deathmatch) "OK" = ( /obj/effect/landmark/deathmatch, -/obj/structure/platform_decoration{ - dir = 4 - }, /obj/effect/decal/cleanable/dirt, +/obj/structure/platform{ + dir = 8 + }, /turf/open/floor/plating/asteroidfloor, /area/deathmatch) "OS" = ( @@ -1474,6 +1513,13 @@ /obj/structure/largecrate/random/barrel/yellow, /turf/open/floor/wood, /area/deathmatch) +"Pq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/stairs/seamless/edge{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/deathmatch) "PO" = ( /obj/structure/table/gamblingtable, /obj/item/toy/plush/moth, @@ -1499,6 +1545,13 @@ /obj/structure/prop/mainship/ship_memorial, /turf/open/floor/plating/mainship, /area/deathmatch) +"RH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/stairs/seamless{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/deathmatch) "RO" = ( /obj/effect/landmark/deathmatch, /obj/effect/landmark/weapon_spawn/tier2_weapon_spawn, @@ -1666,6 +1719,16 @@ /obj/structure/table/woodentable, /turf/open/floor/wood, /area/deathmatch) +"YM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/warning_stripes/thin{ + dir = 8 + }, +/obj/structure/stairs/seamless{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/deathmatch) "YO" = ( /obj/effect/landmark/weapon_spawn/tier1_weapon_spawn, /obj/effect/decal/cleanable/dirt, @@ -2544,9 +2607,9 @@ eB Sq eB eB -dT -dT -dT +Pq +RH +uF yG ce ce @@ -2594,7 +2657,7 @@ dG Ow eB eB -nu +eB ce ce ce @@ -2641,10 +2704,10 @@ zD dG ei Ba -Ba -Bs +YM +Gf OK -fI +kE fI fI Xz @@ -3610,9 +3673,9 @@ fI pj pj pj -si -si -si +kR +hS +rT dG jA Dn diff --git a/_maps/modularmaps/EORG/de_nuke.dmm b/_maps/modularmaps/EORG/de_nuke.dmm index b587035c92d58..e486c7412288b 100644 --- a/_maps/modularmaps/EORG/de_nuke.dmm +++ b/_maps/modularmaps/EORG/de_nuke.dmm @@ -6,6 +6,12 @@ "bi" = ( /turf/open/floor/plating/ground/mars/random/dirt, /area/deathmatch) +"cW" = ( +/obj/structure/stairs/seamless/edge{ + color = "#888888" + }, +/turf/open/floor/tile/dark, +/area/deathmatch) "db" = ( /obj/effect/landmark/weapon_spawn/tier2_weapon_spawn, /turf/open/floor/plating/ground/mars/random/sand, @@ -50,13 +56,19 @@ /obj/effect/landmark/deathmatch, /turf/open/floor/plating/ground/mars/random/dirt, /area/deathmatch) +"hM" = ( +/obj/structure/stairs/seamless{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/deathmatch) "ix" = ( /obj/structure/rack, /obj/effect/landmark/weapon_spawn/tier3_weapon_spawn, /turf/open/floor/plating/asteroidfloor, /area/deathmatch) "jb" = ( -/obj/structure/stairs/edge{ +/obj/structure/stairs/seamless{ color = "#888888"; dir = 8 }, @@ -158,7 +170,7 @@ /turf/open/floor/plating/asteroidplating, /area/deathmatch) "rF" = ( -/obj/structure/stairs/edge{ +/obj/structure/stairs/seamless{ dir = 8 }, /turf/open/floor/tile/dark, @@ -177,6 +189,16 @@ /obj/structure/largecrate, /turf/open/floor/plating/asteroidplating, /area/deathmatch) +"to" = ( +/obj/machinery/door/poddoor/railing{ + dir = 1 + }, +/obj/structure/stairs/seamless{ + color = "#888888"; + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/deathmatch) "tF" = ( /obj/structure/rack, /turf/open/floor/plating/asteroidplating, @@ -233,12 +255,15 @@ /obj/machinery/door/poddoor/railing{ dir = 1 }, -/obj/structure/stairs/edge{ +/obj/structure/stairs/seamless/edge{ color = "#888888"; - dir = 8 + dir = 4 }, /turf/open/floor/tile/dark, /area/deathmatch) +"xv" = ( +/turf/closed/mineral/smooth/desertdamrockwall/indestructible, +/area/deathmatch) "xE" = ( /obj/effect/landmark/eord_roomba, /turf/open/floor/plating/ground/mars/random/sand, @@ -286,16 +311,28 @@ }, /turf/open/floor/plating/ground/mars/random/sand, /area/deathmatch) +"AR" = ( +/obj/structure/stairs/seamless/edge{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/deathmatch) +"BY" = ( +/obj/structure/stairs/seamless/edge{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/deathmatch) "De" = ( /obj/effect/landmark/weapon_spawn/tier2_weapon_spawn, -/obj/structure/stairs/edge{ - dir = 4 +/obj/structure/stairs/seamless/edge{ + dir = 8 }, /turf/open/floor/tile/dark, /area/deathmatch) "Do" = ( /obj/effect/landmark/deathmatch, -/obj/structure/stairs/edge{ +/obj/structure/stairs/seamless{ dir = 8 }, /turf/open/floor/tile/dark, @@ -306,6 +343,13 @@ }, /turf/open/floor/plating/asteroidfloor, /area/deathmatch) +"Ej" = ( +/obj/effect/landmark/weapon_spawn/tier2_weapon_spawn, +/obj/structure/stairs/seamless/edge{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/deathmatch) "Fc" = ( /obj/structure/table/reinforced, /turf/open/floor/plating/asteroidfloor, @@ -333,6 +377,12 @@ dir = 8 }, /area/deathmatch) +"Hl" = ( +/obj/structure/stairs/seamless/edge{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/deathmatch) "HV" = ( /obj/structure/window/framed/wood, /turf/open/floor/wood, @@ -377,14 +427,14 @@ /area/deathmatch) "LA" = ( /obj/effect/landmark/weapon_spawn/tier2_weapon_spawn, -/obj/structure/stairs/edge{ +/obj/structure/stairs/seamless{ dir = 8 }, /turf/open/floor/tile/dark, /area/deathmatch) "LY" = ( /obj/effect/landmark/weapon_spawn/tier3_weapon_spawn, -/obj/structure/stairs/edge{ +/obj/structure/stairs/seamless{ color = "#888888"; dir = 8 }, @@ -413,9 +463,8 @@ /obj/machinery/door/poddoor/railing{ dir = 2 }, -/obj/structure/stairs/edge{ - color = "#888888"; - dir = 8 +/obj/structure/stairs/seamless/edge{ + color = "#888888" }, /turf/open/floor/tile/dark, /area/deathmatch) @@ -454,6 +503,10 @@ }, /turf/open/floor/plating/asteroidfloor, /area/deathmatch) +"UO" = ( +/obj/structure/stairs/seamless/edge, +/turf/open/floor/tile/dark, +/area/deathmatch) "VQ" = ( /obj/structure/cargo_container/ch_red, /turf/open/floor/plating/ground/mars/random/sand, @@ -477,7 +530,7 @@ desc = "You can't get in. Heh."; name = "Blocker" }, -/turf/closed/wall, +/turf/closed/wall/r_wall/unmeltable/regular, /area/deathmatch) "WO" = ( /obj/effect/landmark/deathmatch, @@ -553,55 +606,55 @@ /area/deathmatch) (1,1,1) = {" -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv Wn Wn Wn Wn Wn -XY -XY -XY -XY -XY +xv +xv +xv +xv +xv "} (2,1,1) = {" -XY +xv XY XY XY @@ -649,7 +702,7 @@ od Wn "} (3,1,1) = {" -XY +xv XY XY XY @@ -697,7 +750,7 @@ Mn Wn "} (4,1,1) = {" -XY +xv XY XY XY @@ -745,7 +798,7 @@ Mn Wn "} (5,1,1) = {" -XY +xv XY XY XY @@ -793,7 +846,7 @@ Mn Wn "} (6,1,1) = {" -XY +xv XY XY XY @@ -841,7 +894,7 @@ Mn Wn "} (7,1,1) = {" -XY +xv XY XY XY @@ -873,7 +926,7 @@ XY XY od rF -rF +UO od od Sf @@ -889,7 +942,7 @@ Mn Wn "} (8,1,1) = {" -XY +xv XY XY XY @@ -937,7 +990,7 @@ MV Wn "} (9,1,1) = {" -XY +xv XY XY XY @@ -985,7 +1038,7 @@ Mn Wn "} (10,1,1) = {" -XY +xv XY XY XY @@ -1033,7 +1086,7 @@ Mn Wn "} (11,1,1) = {" -XY +xv XY XY XY @@ -1081,7 +1134,7 @@ My Wn "} (12,1,1) = {" -XY +xv XY XY XY @@ -1129,7 +1182,7 @@ Mn Wn "} (13,1,1) = {" -XY +xv XY XY XY @@ -1177,7 +1230,7 @@ od Wn "} (14,1,1) = {" -XY +xv XY XY XY @@ -1225,7 +1278,7 @@ Mn Wn "} (15,1,1) = {" -XY +xv XY XY XY @@ -1262,9 +1315,9 @@ od od Sf Fp +AR rF -rF -rF +UO Fp jc od @@ -1273,7 +1326,7 @@ ix Wn "} (16,1,1) = {" -XY +xv XY XY XY @@ -1321,7 +1374,7 @@ od Wn "} (17,1,1) = {" -XY +xv XY XY XY @@ -1366,10 +1419,10 @@ od od XY XY -XY +xv "} (18,1,1) = {" -XY +xv XY XY XY @@ -1414,10 +1467,10 @@ od XY XY XY -XY +xv "} (19,1,1) = {" -XY +xv XY XY XY @@ -1462,10 +1515,10 @@ od XY XY XY -XY +xv "} (20,1,1) = {" -XY +xv XY XY XY @@ -1510,10 +1563,10 @@ od XY XY XY -XY +xv "} (21,1,1) = {" -XY +xv XY XY XY @@ -1552,16 +1605,16 @@ od od jb jb -jb +cW od od XY XY XY -XY +xv "} (22,1,1) = {" -XY +xv XY XY XY @@ -1600,16 +1653,16 @@ XY od jb LY -jb +cW od XY XY XY XY -XY +xv "} (23,1,1) = {" -XY +xv XY XY XY @@ -1654,10 +1707,10 @@ XY XY XY XY -XY +xv "} (24,1,1) = {" -XY +xv XY XY XY @@ -1702,10 +1755,10 @@ XY XY XY XY -XY +xv "} (25,1,1) = {" -XY +xv XY XY XY @@ -1750,10 +1803,10 @@ XY XY XY XY -XY +xv "} (26,1,1) = {" -XY +xv XY XY XY @@ -1798,10 +1851,10 @@ XY XY XY XY -XY +xv "} (27,1,1) = {" -XY +xv XY dj dj @@ -1846,10 +1899,10 @@ XY XY XY XY -XY +xv "} (28,1,1) = {" -XY +xv db Go Ax @@ -1894,10 +1947,10 @@ XY ZH ZH XY -XY +xv "} (29,1,1) = {" -XY +xv dj dj dj @@ -1942,10 +1995,10 @@ db dj dj Ax -XY +xv "} (30,1,1) = {" -XY +xv ZH ZH XY @@ -1990,10 +2043,10 @@ dj dj dj Go -XY +xv "} (31,1,1) = {" -XY +xv XY XY XY @@ -2038,10 +2091,10 @@ dj dj dj dj -XY +xv "} (32,1,1) = {" -XY +xv XY XY XY @@ -2086,10 +2139,10 @@ dj dj dj dj -XY +xv "} (33,1,1) = {" -XY +xv XY XY XY @@ -2134,10 +2187,10 @@ dj dj dj dj -XY +xv "} (34,1,1) = {" -XY +xv XY XY XY @@ -2182,10 +2235,10 @@ dj dj db XY -XY +xv "} (35,1,1) = {" -XY +xv XY XY XY @@ -2230,10 +2283,10 @@ dj dj XY XY -XY +xv "} (36,1,1) = {" -XY +xv XY XY XY @@ -2278,10 +2331,10 @@ XY XY XY XY -XY +xv "} (37,1,1) = {" -XY +xv XY XY XY @@ -2326,10 +2379,10 @@ XY XY XY XY -XY +xv "} (38,1,1) = {" -XY +xv XY XY XY @@ -2346,13 +2399,13 @@ XY XY XY od -YO -YO +hM +Hl xu jb Px -YO -YO +hM +Hl od XY XY @@ -2374,10 +2427,10 @@ XY XY XY XY -XY +xv "} (39,1,1) = {" -XY +xv XY XY XY @@ -2394,13 +2447,13 @@ XY XY XY od -YO -YO -xu +hM +Hl +to LY Px -YO -YO +hM +Hl od XY XY @@ -2422,10 +2475,10 @@ XY XY XY XY -XY +xv "} (40,1,1) = {" -XY +xv XY XY XY @@ -2443,12 +2496,12 @@ XY XY od De -YO -xu +Hl +to jb Px -YO -De +BY +Ej od XY XY @@ -2470,10 +2523,10 @@ XY XY XY XY -XY +xv "} (41,1,1) = {" -XY +xv XY XY XY @@ -2518,10 +2571,10 @@ XY XY XY XY -XY +xv "} (42,1,1) = {" -XY +xv XY XY XY @@ -2566,10 +2619,10 @@ XY XY XY XY -XY +xv "} (43,1,1) = {" -XY +xv XY XY XY @@ -2614,10 +2667,10 @@ XY XY XY XY -XY +xv "} (44,1,1) = {" -XY +xv XY XY XY @@ -2662,10 +2715,10 @@ XY XY XY XY -XY +xv "} (45,1,1) = {" -XY +xv XY XY XY @@ -2710,53 +2763,53 @@ XY XY XY XY -XY +xv "} (46,1,1) = {" -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv Wn Wn Wn Wn Wn -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY -XY +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv +xv "} diff --git a/_maps/modularmaps/big_red/bigredatmosvar2.dmm b/_maps/modularmaps/big_red/bigredatmosvar2.dmm index 3dbead73d2c07..b264398de35f8 100644 --- a/_maps/modularmaps/big_red/bigredatmosvar2.dmm +++ b/_maps/modularmaps/big_red/bigredatmosvar2.dmm @@ -618,7 +618,7 @@ "JO" = ( /obj/structure/cryofeed, /turf/open/floor/engine, -/area/bigredv2/outside/filtration_plant) +/area/space) "JQ" = ( /obj/effect/ai_node, /turf/open/floor/plating/ground/mars/random/sand, @@ -688,11 +688,13 @@ name = "\improper coolant feed" }, /turf/open/floor/engine, -/area/bigredv2/outside/filtration_plant) +/area/space) "PY" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/effect/landmark/weed_node, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, /turf/open/floor, /area/bigredv2/outside/filtration_plant) "Qh" = ( @@ -708,6 +710,9 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, /turf/open/floor, /area/bigredv2/outside/filtration_plant) "Rh" = ( diff --git a/_maps/modularmaps/big_red/bigredatmosvar3.dmm b/_maps/modularmaps/big_red/bigredatmosvar3.dmm index 03746d4adb74c..28f8253b9e1dc 100644 --- a/_maps/modularmaps/big_red/bigredatmosvar3.dmm +++ b/_maps/modularmaps/big_red/bigredatmosvar3.dmm @@ -364,7 +364,7 @@ "wk" = ( /obj/structure/cryofeed, /turf/open/floor/engine, -/area/bigredv2/outside/filtration_plant) +/area/space) "wY" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 5 @@ -416,7 +416,7 @@ name = "\improper coolant feed" }, /turf/open/floor/engine, -/area/bigredv2/outside/filtration_plant) +/area/space) "yj" = ( /obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, /obj/structure/sign/safety/vent, @@ -538,7 +538,9 @@ /area/bigredv2/outside/filtration_plant) "FY" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, /turf/open/floor, /area/bigredv2/outside/filtration_plant) "GD" = ( @@ -736,6 +738,9 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, /turf/open/floor, /area/bigredv2/outside/filtration_plant) "Tm" = ( diff --git a/_maps/modularmaps/big_red/bigredatmosvar4.dmm b/_maps/modularmaps/big_red/bigredatmosvar4.dmm index 617e2d707c66d..b7c84fc725f47 100644 --- a/_maps/modularmaps/big_red/bigredatmosvar4.dmm +++ b/_maps/modularmaps/big_red/bigredatmosvar4.dmm @@ -505,7 +505,7 @@ /area/bigredv2/outside/se) "Uj" = ( /turf/open/liquid/water/river, -/area/bigredv2/caves/rock) +/area/space) "Uu" = ( /obj/structure/nuke_disk_candidate, /turf/open/floor, diff --git a/_maps/modularmaps/big_red/bigredatmosvar5.dmm b/_maps/modularmaps/big_red/bigredatmosvar5.dmm index f7b3188d9189e..d3c1e24e3307c 100644 --- a/_maps/modularmaps/big_red/bigredatmosvar5.dmm +++ b/_maps/modularmaps/big_red/bigredatmosvar5.dmm @@ -266,6 +266,9 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 5 + }, /turf/open/floor, /area/bigredv2/outside/filtration_plant) "rJ" = ( @@ -763,7 +766,7 @@ "OG" = ( /obj/structure/cryofeed, /turf/open/floor/bcircuit/anim, -/area/bigredv2/outside/filtration_plant) +/area/space) "Qe" = ( /obj/effect/landmark/weed_node, /turf/open/floor/asteroidfloor, @@ -895,7 +898,7 @@ name = "\improper coolant feed" }, /turf/open/floor/bcircuit/anim, -/area/bigredv2/outside/filtration_plant) +/area/space) "WO" = ( /obj/effect/landmark/lv624/fog_blocker, /obj/effect/landmark/weed_node, @@ -974,8 +977,10 @@ /area/bigredv2/outside/se) "ZL" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/effect/landmark/weed_node, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 10 + }, /turf/open/floor, /area/bigredv2/outside/filtration_plant) "ZP" = ( diff --git a/_maps/modularmaps/big_red/bigredatmosvar6.dmm b/_maps/modularmaps/big_red/bigredatmosvar6.dmm index 16dc9d747d6ed..7a29b99425d4a 100644 --- a/_maps/modularmaps/big_red/bigredatmosvar6.dmm +++ b/_maps/modularmaps/big_red/bigredatmosvar6.dmm @@ -387,7 +387,7 @@ /area/bigredv2/outside/se) "zz" = ( /turf/open/liquid/water/river, -/area/bigredv2/caves/rock) +/area/space) "zI" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/modularmaps/big_red/bigredengineeringvar1.dmm b/_maps/modularmaps/big_red/bigredengineeringvar1.dmm index 8b030c77edab0..63dcaaa03ba42 100644 --- a/_maps/modularmaps/big_red/bigredengineeringvar1.dmm +++ b/_maps/modularmaps/big_red/bigredengineeringvar1.dmm @@ -1,4 +1,13 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ae" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) +"ai" = ( +/obj/structure/table, +/obj/item/tool/lighter/random, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "aN" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/green/hidden, @@ -13,7 +22,7 @@ /obj/effect/decal/cleanable/dirt, /obj/item/clothing/head/welding, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "bJ" = ( /obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, /turf/open/floor/plating, @@ -36,35 +45,52 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"cL" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/machinery/power/apc/drained{ + dir = 8 + }, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "cO" = ( /turf/closed/wall/r_wall, /area/bigredv2/outside/s) "cT" = ( /obj/machinery/vending/snack, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "da" = ( /obj/effect/decal/cleanable/blood/oil, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "db" = ( /obj/structure/bed/chair{ dir = 8 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"ds" = ( +/obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, +/obj/machinery/door/poddoor/mainship{ + dir = 2; + id = "rad_door"; + name = "\improper Radiation Shielding" + }, +/turf/open/floor/plating, +/area/bigredv2/outside/engineering/east) "dB" = ( /obj/effect/ai_node, /obj/structure/cable, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "dW" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/weed_node, /obj/effect/ai_node, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "dZ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump{ @@ -87,7 +113,11 @@ /obj/effect/landmark/weed_node, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"fW" = ( +/obj/structure/closet/radiation, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "gs" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/machinery/door/airlock/mainship/engineering/free_access{ @@ -97,6 +127,13 @@ /obj/structure/cable, /turf/open/floor, /area/bigredv2/outside/engineering) +"hr" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "hx" = ( /obj/machinery/shower{ dir = 8 @@ -107,7 +144,7 @@ "hG" = ( /obj/effect/landmark/excavation_site_spawner, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "ik" = ( /obj/structure/sign/safety/hazard, /turf/open/floor, @@ -116,11 +153,11 @@ /obj/machinery/computer/station_alert, /obj/structure/table, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "iV" = ( /obj/structure/cable, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "jb" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 5 @@ -128,7 +165,7 @@ /obj/structure/cable, /obj/effect/ai_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "jc" = ( /turf/open/floor/plating/ground/mars/random/dirt, /area/bigredv2/outside/s) @@ -139,7 +176,7 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "jn" = ( /obj/effect/landmark/weed_node, /obj/effect/ai_node, @@ -161,7 +198,7 @@ /obj/effect/decal/cleanable/blood/xeno, /obj/structure/window_frame/colony, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "jF" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/structure/cable, @@ -190,20 +227,20 @@ /obj/structure/cable, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "kZ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/ai_node, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "lc" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/multi_tile/mainship/generic{ name = "\improper Engineering Complex" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "lr" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor, @@ -211,7 +248,7 @@ "lE" = ( /obj/effect/landmark/start/job/survivor, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "mo" = ( /obj/structure/table, /obj/machinery/light, @@ -227,7 +264,7 @@ "nf" = ( /obj/machinery/computer/area_atmos, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "nl" = ( /obj/effect/decal/cleanable/dirt, /obj/item/clothing/mask/breath, @@ -249,6 +286,9 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor, /area/bigredv2/outside/engineering) +"pu" = ( +/turf/closed/wall, +/area/bigredv2/outside/engineering/east) "pC" = ( /obj/structure/cable, /obj/effect/landmark/weed_node, @@ -258,23 +298,27 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "qe" = ( /obj/structure/table, /obj/item/tool/lighter/random, /obj/item/lightreplacer, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "qg" = ( /obj/structure/closet/radiation, /turf/open/floor, /area/bigredv2/outside/engineering) +"qi" = ( +/obj/structure/cable, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "qq" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden, /obj/structure/cable, /obj/effect/ai_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "qu" = ( /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/mars/dirttosand/autosmooth{ @@ -285,7 +329,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/ai_node, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "qD" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/machinery/door/airlock/mainship/engineering/free_access{ @@ -304,7 +348,7 @@ /obj/effect/decal/cleanable/blood/oil, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "rq" = ( /turf/open/floor/plating/ground/mars/random/cave, /area/bigredv2/caves/southwest) @@ -319,7 +363,7 @@ "sk" = ( /obj/machinery/computer/arcade, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "sH" = ( /turf/open/floor/plating/ground/mars/random/sand, /area/bigredv2/outside/sw) @@ -327,7 +371,15 @@ /obj/structure/table, /obj/effect/spawner/random/engineering/toolbox, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"td" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "ty" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/safety/electronics{ @@ -338,7 +390,7 @@ "tQ" = ( /obj/item/tool/multitool, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "tW" = ( /obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, /obj/machinery/door/poddoor/mainship{ @@ -352,7 +404,12 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/sign/safety/high_radiation, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"uA" = ( +/obj/structure/table, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "uJ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -366,7 +423,7 @@ /turf/open/floor, /area/bigredv2/outside/engineering) "wg" = ( -/obj/item/stack/sheet/glass, +/obj/item/stack/sheet/glass/glass, /obj/structure/cable, /turf/open/floor, /area/bigredv2/outside/engineering) @@ -391,18 +448,18 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "wL" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/effect/decal/cleanable/dirt, /obj/structure/cable, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "wT" = ( /obj/effect/landmark/weed_node, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "wW" = ( /obj/effect/decal/cleanable/dirt, /obj/item/stack/sheet/metal, @@ -413,6 +470,11 @@ /obj/effect/landmark/excavation_site_spawner, /turf/open/floor, /area/bigredv2/outside/engineering) +"xh" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "xm" = ( /obj/effect/landmark/excavation_site_spawner, /turf/open/floor, @@ -422,7 +484,7 @@ /obj/effect/landmark/weed_node, /obj/structure/cable, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "xG" = ( /turf/closed/wall/r_wall, /area/bigredv2/outside/engineering) @@ -435,20 +497,28 @@ /obj/structure/cable, /obj/effect/landmark/weed_node, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "yi" = ( /obj/structure/table, /obj/effect/spawner/random/engineering/toolbox, /obj/effect/decal/cleanable/dirt, /turf/open/floor, /area/bigredv2/outside/engineering) +"yk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "yn" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; on = 1 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "yT" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -457,7 +527,7 @@ "zl" = ( /obj/structure/table, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "zn" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -479,13 +549,13 @@ "zR" = ( /obj/machinery/light, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Aa" = ( /obj/machinery/light{ dir = 4 }, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "At" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 9 @@ -496,13 +566,13 @@ /area/bigredv2/outside/engineering) "AJ" = ( /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "BG" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, /obj/item/clothing/glasses/welding, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "BH" = ( /obj/effect/ai_node, /turf/open/floor/plating/ground/mars/random/dirt, @@ -516,18 +586,18 @@ /obj/structure/cable, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Cn" = ( /obj/machinery/vending/cigarette/colony, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "CA" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden{ dir = 8 }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "CU" = ( /obj/machinery/light{ dir = 1 @@ -537,11 +607,18 @@ }, /turf/open/floor, /area/bigredv2/outside/engineering) +"Em" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor/plating, +/area/bigredv2/outside/engineering/east) "Ev" = ( /turf/open/floor/plating/ground/mars/cavetodirt{ dir = 9 }, /area/bigredv2/outside/sw) +"Ft" = ( +/turf/closed/wall/r_wall, +/area/bigredv2/outside/engineering/east) "Fz" = ( /obj/structure/cable, /obj/machinery/door/airlock/mainship/secure/free_access{ @@ -566,7 +643,7 @@ name = "\improper Engineering Complex" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "FJ" = ( /obj/machinery/light{ dir = 8 @@ -610,12 +687,18 @@ }, /obj/effect/spawner/random/engineering/technology_scanner, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"GA" = ( +/obj/structure/table, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/engineering/technology_scanner, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "GD" = ( /obj/structure/table, /obj/item/tool/analyzer, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "GE" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -640,23 +723,29 @@ }, /turf/open/floor, /area/bigredv2/outside/engineering) +"Iu" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "IK" = ( /obj/machinery/light{ dir = 8 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "IS" = ( /obj/structure/table, /obj/effect/spawner/random/misc/earmuffs, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Jb" = ( /obj/machinery/vending/cola, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "JM" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -671,7 +760,7 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "JS" = ( /obj/effect/spawner/random/engineering/structure/tank/fuelweighted, /turf/open/floor, @@ -689,17 +778,17 @@ dir = 8 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Ko" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/weed_node, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "KI" = ( /obj/effect/landmark/weed_node, /obj/structure/cable, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Lf" = ( /obj/effect/decal/cleanable/dirt, /obj/item/stack/sheet/metal{ @@ -722,7 +811,7 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Ln" = ( /turf/open/floor/plating/ground/mars/random/dirt, /area/bigredv2/outside/sw) @@ -735,7 +824,7 @@ /obj/machinery/computer/atmos_alert, /obj/structure/table, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "LO" = ( /obj/effect/landmark/corpsespawner/engineer{ corpseback = /obj/item/storage/backpack; @@ -745,7 +834,11 @@ name = "Colonist Ted Jarka" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"Ma" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "Md" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/structure/cable, @@ -757,10 +850,10 @@ name = "\improper Engine Reactor Control" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Mq" = ( /turf/open/liquid/water/river, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Nb" = ( /obj/item/stack/sheet/metal, /turf/open/floor, @@ -791,7 +884,7 @@ dir = 4 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Ol" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/machinery/machine_frame, @@ -802,7 +895,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "OB" = ( /turf/open/floor/plating/ground/mars/random/sand, /area/bigredv2/outside/c) @@ -825,7 +918,7 @@ dir = 8 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Ql" = ( /obj/machinery/bot/mulebot, /turf/open/floor, @@ -833,24 +926,31 @@ "Qo" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"QE" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "QY" = ( /turf/closed/wall/mineral/gold, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Ro" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 10 }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Sl" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/structure/cable, /obj/effect/ai_node, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "SC" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -863,7 +963,7 @@ /obj/effect/ai_node, /obj/effect/landmark/weed_node, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "TD" = ( /obj/effect/ai_node, /turf/open/floor/plating/ground/mars/random/dirt, @@ -886,7 +986,7 @@ "Ud" = ( /obj/structure/bed/chair/office/light, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Uf" = ( /turf/closed/wall, /area/bigredv2/outside/engineering) @@ -898,14 +998,14 @@ name = "Reactor Radiation Shielding control" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "UJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "UO" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor, @@ -917,7 +1017,7 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Va" = ( /obj/effect/ai_node, /obj/effect/landmark/weed_node, @@ -931,7 +1031,7 @@ /obj/structure/cable, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "VC" = ( /turf/open/floor/plating/ground/mars/cavetodirt{ dir = 9 @@ -949,7 +1049,7 @@ /obj/structure/cable, /obj/effect/ai_node, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Wq" = ( /obj/structure/cable, /turf/open/floor, @@ -961,7 +1061,12 @@ name = "Storm Shutters" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"WK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "Xa" = ( /obj/effect/decal/cleanable/dirt, /obj/item/tool/weldpack, @@ -980,7 +1085,18 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"YN" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) +"YP" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "Zc" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden{ dir = 4 @@ -988,12 +1104,12 @@ /obj/structure/cable, /obj/effect/ai_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Zn" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/safety/hazard, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Zp" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -1010,6 +1126,13 @@ }, /turf/open/floor, /area/bigredv2/outside/engineering) +"Zs" = ( +/turf/open/floor, +/area/bigredv2/outside/engineering/east) +"Zx" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "ZJ" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -1020,13 +1143,17 @@ /obj/effect/landmark/weed_node, /turf/open/floor, /area/bigredv2/outside/engineering) +"ZM" = ( +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "ZV" = ( /obj/structure/bed/chair{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) (1,1,1) = {" hx @@ -1157,19 +1284,19 @@ bJ xG xG xG -xG -xG -xG -xG -xG -xG -xG -xG -xG -xG -xG -xG -xG +Ft +Ft +Ft +Ft +Ft +Ft +Ft +Ft +Ft +Ft +Ft +Ft +Ft nP nP "} @@ -1198,7 +1325,7 @@ IK Qo Qo AJ -xG +Ft nP nP "} @@ -1227,8 +1354,8 @@ dW Qo Qo Ko -xG -xG +Ft +Ft nP "} (8,1,1) = {" @@ -1257,7 +1384,7 @@ Qo Qo AJ AJ -xG +Ft nP "} (9,1,1) = {" @@ -1286,8 +1413,8 @@ Mq Mq Mq AJ -xG -xG +Ft +Ft "} (10,1,1) = {" vr @@ -1316,7 +1443,7 @@ QY Mq wT zR -xG +Ft "} (11,1,1) = {" lr @@ -1345,7 +1472,7 @@ Mq Mq AJ AJ -xG +Ft "} (12,1,1) = {" UO @@ -1374,7 +1501,7 @@ QY Mq AJ AJ -xG +Ft "} (13,1,1) = {" wZ @@ -1382,14 +1509,14 @@ jR bJ Gu UO -Uf -Uf -Uf +pu +pu +pu Ml -Uf -Uf -xG -xG +pu +pu +Ft +Ft Mq Mq Mq @@ -1403,7 +1530,7 @@ Mq Mq AJ AJ -xG +Ft "} (14,1,1) = {" vr @@ -1411,14 +1538,14 @@ Pz Uf JM Nb -Uf +pu Gy -Pz -vr -vr -Nb +uA +Zs +Zs +ae iS -tW +ds Mq QY Mq @@ -1432,7 +1559,7 @@ QY Mq wT AJ -xG +Ft "} (15,1,1) = {" vr @@ -1440,14 +1567,14 @@ Nn bJ Gu qF -Uf -vr +pu +Zs PK -vr -UO +Zs +Zx Ud -Pz -tW +uA +ds Mq Mq Mq @@ -1461,7 +1588,7 @@ Mq Mq AJ AJ -xG +Ft "} (16,1,1) = {" Pz @@ -1474,9 +1601,9 @@ pZ pZ Sl wF -Wq +qi JO -tW +ds Mq QY Mq @@ -1490,7 +1617,7 @@ QY Mq AJ AJ -xG +Ft "} (17,1,1) = {" Uf @@ -1498,14 +1625,14 @@ Uf Uf CU Ib -Uf -UO -UO -vr -UO +pu +Zx +Zx +Zs +Zx Ud GD -tW +ds Mq Mq Mq @@ -1519,22 +1646,22 @@ Mq Mq AJ hG -xG +Ft "} (18,1,1) = {" zl -bJ +Em Kn -GE -UO -Uf -vr +hr +Zx +pu +Zs Um -vr -vr -vr +Zs +Zs +Zs Lz -tW +ds Mq QY Mq @@ -1548,22 +1675,22 @@ QY Mq wT AJ -xG +Ft "} (19,1,1) = {" -Wq +qi jy LO -ZJ +Iu WA -Uf -Uf -Uf +pu +pu +pu Ml -Uf -Uf -xG -xG +pu +pu +Ft +Ft Mq Mq Mq @@ -1577,21 +1704,21 @@ Mq Mq AJ AJ -xG +Ft "} (20,1,1) = {" -pC -bJ -vr -ZJ -UO -vr -vr +xh +Em +Zs +Iu +Zx +Zs +Zs Kn -ZL -UO -vr -tW +Ma +Zx +Zs +ds Mq Mq QY @@ -1606,21 +1733,21 @@ QY Mq AJ AJ -xG +Ft "} (21,1,1) = {" -jF +YP Ll -jF +YP qq ZV NN NN -UO -xm -UO -vr -tW +Zx +ZM +Zx +Zs +ds Mq Mq Mq @@ -1635,21 +1762,21 @@ Mq Mq AJ AJ -xG +Ft "} (22,1,1) = {" -vr -bJ -vr -JM +Zs +Em +Zs +td BG -ks +GA qe -Ht -vr -vr -ZL -tW +WK +Zs +Zs +Ma +ds Mq Mq QY @@ -1664,21 +1791,21 @@ QY Mq wT zR -xG +Ft "} (23,1,1) = {" -Uf -Uf +pu +pu lE YK sS IS -jR -vr -vr -vr +ai +Zs +Zs +Zs nf -xG +Ft Mq Mq Mq @@ -1692,22 +1819,22 @@ Mq Mq Mq AJ -xG -xG +Ft +Ft "} (24,1,1) = {" -UO +Zx lc -vr +Zs YK db db db -UO +Zx up -xG -xG -xG +Ft +Ft +Ft wT AJ AJ @@ -1729,8 +1856,8 @@ wL Op kx Zc -jF -jF +cL +YP CA UV kZ @@ -1749,23 +1876,23 @@ qy AJ AJ wT -xG +Ft xG ek "} (26,1,1) = {" -xG -xG -xG -xG -xG +Ft +Ft +Ft +Ft +Ft sk yn Vq Zn -xG -qg -xG +Ft +fW +Ft AJ Ko Aa @@ -1778,7 +1905,7 @@ Aa wT AJ AJ -xG +Ft ek uN "} @@ -1787,27 +1914,27 @@ Nr Nr Nr Nr -xG -xG +Ft +Ft Cn -Zp +yk bp -xG -xG -xG -xG -xG -xG -xG -xG -xG -xG -xG -xG -xG -xG -xG -xG +Ft +Ft +Ft +Ft +Ft +Ft +Ft +Ft +Ft +Ft +Ft +Ft +Ft +Ft +Ft +Ft uN uN "} @@ -1817,16 +1944,16 @@ OB OB OB OB -xG +Ft cT Ro -Md -jF -jF -jF -jF +YN +YP +YP +YP +YP jb -xG +Ft TK Xp Xp @@ -1846,16 +1973,16 @@ OB kf OB OB -xG +Ft Jb -vr +Zs re -TO -UO -vr -ZL +QE +Zx +Zs +Ma UJ -xG +Ft Xp Xp Xp @@ -1875,16 +2002,16 @@ OB OB OB OB -xG -xG -xG -xG -xG -xG -xG -vr +Ft +Ft +Ft +Ft +Ft +Ft +Ft +Zs FH -xG +Ft Xp Xp HL diff --git a/_maps/modularmaps/big_red/bigredengineeringvar2.dmm b/_maps/modularmaps/big_red/bigredengineeringvar2.dmm index 16c6af69fdbe3..553818f3b3a2e 100644 --- a/_maps/modularmaps/big_red/bigredengineeringvar2.dmm +++ b/_maps/modularmaps/big_red/bigredengineeringvar2.dmm @@ -2,7 +2,7 @@ "aa" = ( /obj/machinery/vending/snack, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "ax" = ( /obj/machinery/door_control{ dir = 1; @@ -10,7 +10,7 @@ name = "Storm Shutters" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "bb" = ( /obj/structure/rack, /obj/item/camera_film, @@ -35,6 +35,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/freezer, /area/bigredv2/outside/engineering) +"ck" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "cD" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/air_alarm{ @@ -64,7 +72,7 @@ /obj/structure/cable, /obj/effect/ai_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "dY" = ( /turf/open/floor/plating/ground/mars/cavetodirt{ dir = 10 @@ -75,7 +83,7 @@ dir = 8 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "en" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -99,18 +107,22 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "eC" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "fr" = ( /obj/structure/bed/chair{ dir = 4 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"gb" = ( +/obj/structure/cable, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "ge" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/safety/electronics{ @@ -151,15 +163,15 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "hV" = ( /obj/machinery/computer/atmos_alert, /obj/structure/table, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "ib" = ( /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "iu" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -176,7 +188,7 @@ name = "\improper Engine Reactor Control" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "jo" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/machinery/machine_frame, @@ -230,12 +242,15 @@ /obj/item/tool/pen, /turf/open/floor, /area/bigredv2/outside/engineering) +"mV" = ( +/turf/closed/wall/r_wall, +/area/bigredv2/outside/engineering/east) "nC" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, /obj/item/clothing/glasses/welding, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "oq" = ( /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/mars/dirttosand/autosmooth{ @@ -259,6 +274,13 @@ /obj/effect/spawner/random/misc/structure/supplycrate, /turf/open/floor, /area/bigredv2/outside/engineering) +"pX" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "pZ" = ( /obj/effect/spawner/random/engineering/structure/tank/waterweighted, /obj/effect/decal/cleanable/dirt, @@ -299,29 +321,38 @@ name = "\improper Engineering Complex" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "su" = ( /turf/open/floor/plating/ground/mars/random/cave, /area/bigredv2/caves/southwest) +"sw" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) +"sL" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "sZ" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden, /obj/structure/cable, /obj/effect/ai_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "tt" = ( /obj/structure/table, /obj/effect/spawner/random/misc/earmuffs, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "tv" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "tK" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -336,6 +367,12 @@ "tV" = ( /turf/open/floor/plating/ground/mars/random/dirt, /area/bigredv2/outside/s) +"ua" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "uk" = ( /obj/effect/decal/cleanable/dirt, /obj/item/stack/sheet/metal, @@ -378,7 +415,13 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"wr" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "wt" = ( /obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, /turf/open/floor/plating, @@ -409,7 +452,7 @@ /obj/structure/cable, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "yb" = ( /obj/machinery/door/airlock/mainship/engineering/free_access{ dir = 1; @@ -418,15 +461,23 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "yf" = ( /turf/open/floor/plating/ground/mars/random/dirt, /area/bigredv2/outside/sw) +"yz" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/machinery/power/apc/drained{ + dir = 8 + }, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "yB" = ( /obj/machinery/computer/station_alert, /obj/structure/table, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "zj" = ( /obj/structure/table, /obj/effect/spawner/random/engineering/toolbox, @@ -442,6 +493,9 @@ dir = 1 }, /area/bigredv2/caves/southwest) +"Ao" = ( +/turf/closed/wall, +/area/bigredv2/outside/engineering/east) "At" = ( /obj/machinery/door_control{ desc = "A remote control-switch for opening the engines blast doors."; @@ -450,13 +504,13 @@ name = "Reactor Radiation Shielding control" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Ax" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/effect/decal/cleanable/dirt, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Az" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/mainship/secure/free_access{ @@ -473,7 +527,7 @@ /obj/effect/decal/cleanable/dirt, /obj/item/clothing/head/welding, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "AS" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump{ @@ -490,6 +544,10 @@ /obj/effect/ai_node, /turf/open/floor/plating/ground/mars/random/cave, /area/bigredv2/caves/southwest) +"BF" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "Ca" = ( /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/mars/random/sand, @@ -504,7 +562,7 @@ /obj/item/tool/lighter/random, /obj/item/lightreplacer, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "CS" = ( /turf/open/floor/plating/ground/mars/cavetodirt{ dir = 5 @@ -519,7 +577,7 @@ "Dx" = ( /obj/machinery/computer/arcade, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "DH" = ( /obj/item/stack/sheet/metal, /turf/open/floor, @@ -558,13 +616,18 @@ /obj/structure/cable, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Fy" = ( /obj/effect/ai_node, /turf/open/floor/plating/ground/mars/random/dirt, /area/bigredv2/caves/southwest) +"Gc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "Ge" = ( -/obj/item/stack/sheet/glass, +/obj/item/stack/sheet/glass/glass, /obj/structure/cable, /turf/open/floor, /area/bigredv2/outside/engineering) @@ -574,18 +637,25 @@ "Gp" = ( /obj/effect/landmark/start/job/survivor, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Gv" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor, /area/bigredv2/outside/engineering) +"Gw" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "GE" = ( /obj/item/shard, /obj/effect/decal/cleanable/blood/xeno, /obj/structure/window_frame/colony, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "GH" = ( /turf/closed/wall/r_wall, /area/bigredv2/outside/engineering) @@ -610,7 +680,7 @@ name = "Colonist Ted Jarka" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Jb" = ( /turf/open/floor/plating/ground/mars/dirttosand/autosmooth{ dir = 9 @@ -659,12 +729,12 @@ /obj/structure/cable, /obj/effect/ai_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "KV" = ( /obj/structure/table, /obj/effect/spawner/random/engineering/toolbox, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "LF" = ( /turf/closed/mineral/smooth/bigred, /area/bigredv2/caves/rock) @@ -676,6 +746,11 @@ /obj/effect/ai_node, /turf/open/floor/plating/ground/mars/random/dirt, /area/bigredv2/outside/s) +"LU" = ( +/obj/structure/table, +/obj/item/tool/lighter/random, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "MD" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/machinery/door/airlock/mainship/engineering/free_access{ @@ -700,7 +775,7 @@ /obj/effect/ai_node, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "NQ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/safety/electronics{ @@ -727,15 +802,15 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Ow" = ( /obj/structure/bed/chair/office/light, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "OF" = ( /obj/machinery/computer/area_atmos, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "OH" = ( /turf/open/floor/plating/ground/mars/dirttosand/autosmooth{ dir = 8 @@ -744,21 +819,21 @@ "OK" = ( /obj/machinery/vending/cigarette/colony, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "ON" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; on = 1 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Pc" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden{ dir = 8 }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Pp" = ( /turf/open/floor/plating/ground/mars/dirttosand/autosmooth{ dir = 4 @@ -773,7 +848,7 @@ name = "\improper Engineering Complex" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Qn" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden{ dir = 1 @@ -789,13 +864,18 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Qv" = ( /obj/structure/bed/chair/office/light{ dir = 8 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"QC" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "Sg" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/structure/cable, @@ -815,7 +895,7 @@ dir = 8 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "SP" = ( /obj/structure/cable, /obj/effect/landmark/weed_node, @@ -836,14 +916,14 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "TL" = ( /obj/machinery/power/monitor{ name = "Main Power Grid Monitoring" }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "UB" = ( /obj/structure/table, /obj/machinery/light{ @@ -851,7 +931,7 @@ }, /obj/effect/spawner/random/engineering/technology_scanner, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "US" = ( /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/mars/random/dirt, @@ -860,7 +940,7 @@ /obj/structure/table, /obj/item/tool/analyzer, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Vs" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 9 @@ -883,13 +963,21 @@ /obj/effect/decal/cleanable/blood/oil, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "VL" = ( /turf/closed/wall/r_wall, /area/bigredv2/caves/rock) +"Wi" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "Wo" = ( /turf/open/floor, /area/bigredv2/outside/engineering) +"Ww" = ( +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "WD" = ( /obj/machinery/light{ dir = 1 @@ -909,20 +997,37 @@ dir = 1 }, /area/bigredv2/caves/southwest) +"XN" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "Yq" = ( /obj/machinery/vending/cola, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Yy" = ( /obj/structure/table, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"YE" = ( +/obj/structure/table, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "YG" = ( /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/mars/cavetodirt{ dir = 4 }, /area/bigredv2/caves/southwest) +"Zq" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor/plating, +/area/bigredv2/outside/engineering/east) "Zt" = ( /obj/structure/cable, /obj/machinery/power/apc/drained{ @@ -936,7 +1041,13 @@ /obj/structure/cable, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"ZK" = ( +/obj/structure/table, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/engineering/technology_scanner, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "ZV" = ( /obj/structure/table, /obj/effect/spawner/random/engineering/tool, @@ -1300,13 +1411,13 @@ bN wt Ie Jv -Pt -Pt -Pt +Ao +Ao +Ao jf -Pt -Pt -GH +Ao +Ao +mV LF LF Gh @@ -1329,13 +1440,13 @@ wW Pt Oa DH -Pt +Ao UB -wW -Wo -DH +YE +ib +sw yB -GH +mV LF LF LF @@ -1358,13 +1469,13 @@ zj wt Ie qO -Pt -Wo +Ao +ib Qv -Jv +Wi Ow -wW -GH +YE +mV LF LF LF @@ -1391,9 +1502,9 @@ yb eC eC wo -Jq +gb TL -GH +mV LF LF LF @@ -1416,13 +1527,13 @@ Pt Pt WD cD -Pt -Jv -Jv -Jv +Ao +Wi +Wi +Wi Ow Vj -GH +mV LF LF LF @@ -1441,17 +1552,17 @@ su "} (18,1,1) = {" Yy -wt +Zq Sv -tK -Jv -Pt +pX +Wi +Ao ib At -Wo -Wo +ib +ib hV -GH +mV LF LF LF @@ -1469,18 +1580,18 @@ qm su "} (19,1,1) = {" -Jq +gb GE Ih -Ds +ua ax -Pt -Pt -Pt +Ao +Ao +Ao jf -Pt -Pt -GH +Ao +Ao +mV LF LF Gh @@ -1498,18 +1609,18 @@ Bi su "} (20,1,1) = {" -SP -wt -Wo -Ds -Jv -Wo -Wo +QC +Zq +ib +ua +Wi +ib +ib Sv -Vv -Jv -Wo -GH +BF +Wi +ib +mV LF Gh Gh @@ -1527,18 +1638,18 @@ su su "} (21,1,1) = {" -JU +sL eu -JU +sL sZ TD fr fr -Jv -dv -Jv -Wo -GH +Wi +Ww +Wi +ib +mV LF ox Gh @@ -1556,18 +1667,18 @@ Bn su "} (22,1,1) = {" -Wo -wt -Wo -Oa +ib +Zq +ib +XN nC -jG +ZK CN -DO -Wo -Wo -Vv -GH +Gc +ib +ib +BF +mV LF Gh Tg @@ -1585,18 +1696,18 @@ Al su "} (23,1,1) = {" -Pt -Pt +Ao +Ao Gp Of KV tt -bN -Wo -Wo -Wo +LU +ib +ib +ib OF -GH +mV LF Gh Gh @@ -1614,18 +1725,18 @@ Al su "} (24,1,1) = {" -Jv +Wi Px -Wo +ib Of eh eh eh -Jv -Jv -Wo -Wo -GH +Wi +Wi +ib +ib +mV LF LF Gh @@ -1647,14 +1758,14 @@ ZJ Ax xP KS -JU -JU +yz +sL Pc Qt NA -Jq -Jq -GH +gb +gb +mV VL LF LF @@ -1672,18 +1783,18 @@ su qm "} (26,1,1) = {" -GH -GH -GH -GH -GH +mV +mV +mV +mV +mV Dx ON Fq -Jv -Wo -Wo -GH +Wi +ib +ib +mV VL VL LF @@ -1706,16 +1817,16 @@ cL cL cL GH -GH +mV OK -en +ck AQ -Wo -Wo -GH -GH -GH -GH +ib +ib +mV +mV +mV +mV LF LF LF @@ -1735,16 +1846,16 @@ xH xH xH xH -GH +mV aa hL -Sg -JU -JU -JU -JU +wr +sL +sL +sL +sL dw -GH +mV LF LF wm @@ -1764,16 +1875,16 @@ xH Ca xH xH -GH +mV Yq -Wo +ib VI -bq -Jv -Wo -Vv +Gw +Wi +ib +BF tv -GH +mV wm wm wm @@ -1793,16 +1904,16 @@ xH xH xH xH -GH -GH -GH -GH -GH -GH -GH -Wo +mV +mV +mV +mV +mV +mV +mV +ib sg -GH +mV wm lo Jb diff --git a/_maps/modularmaps/big_red/bigredengineeringvar3.dmm b/_maps/modularmaps/big_red/bigredengineeringvar3.dmm index ac8ea070fa8b6..66c9f79399229 100644 --- a/_maps/modularmaps/big_red/bigredengineeringvar3.dmm +++ b/_maps/modularmaps/big_red/bigredengineeringvar3.dmm @@ -5,13 +5,13 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "aU" = ( /obj/effect/landmark/corpsespawner/engineer, /obj/effect/landmark/weed_node, /obj/structure/cable, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "bh" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -31,7 +31,7 @@ /obj/structure/table, /obj/effect/spawner/random/engineering/toolbox, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "bB" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/air_alarm{ @@ -56,7 +56,7 @@ "cQ" = ( /obj/effect/decal/cleanable/blood/oil, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "de" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden{ dir = 8 @@ -72,7 +72,7 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "dp" = ( /turf/open/floor/plating/ground/mars/random/cave/rock, /area/bigredv2/caves/southwest) @@ -81,7 +81,7 @@ dir = 8 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "dY" = ( /obj/machinery/light{ dir = 8 @@ -89,13 +89,13 @@ /obj/effect/landmark/weed_node, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "ea" = ( /obj/machinery/light{ dir = 4 }, /turf/open/liquid/water/river, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "ee" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump{ @@ -104,30 +104,46 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "eQ" = ( /obj/structure/table, /obj/item/tool/lighter/random, /obj/item/lightreplacer, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"eR" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/machinery/power/apc/drained{ + dir = 8 + }, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) +"fe" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "fK" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/oil, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "fM" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/structure/cable, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "gx" = ( /obj/structure/cable, /obj/effect/ai_node, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "gy" = ( /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/mars/dirttosand/autosmooth{ @@ -139,7 +155,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "gH" = ( /turf/open/floor/plating/ground/mars/cavetodirt{ dir = 9 @@ -148,7 +164,11 @@ "hj" = ( /obj/effect/landmark/weed_node, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"ho" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "hJ" = ( /obj/machinery/light{ dir = 8 @@ -166,10 +186,10 @@ /obj/effect/decal/cleanable/dirt, /obj/item/clothing/glasses/welding, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "ix" = ( /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "iT" = ( /obj/effect/decal/cleanable/dirt, /obj/item/lightreplacer, @@ -196,7 +216,7 @@ /obj/effect/ai_node, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "jR" = ( /obj/machinery/light{ dir = 1 @@ -242,7 +262,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/sign/safety/hazard, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "ma" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -250,13 +270,21 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"nx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "nz" = ( /obj/structure/bed/chair{ dir = 4 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "nR" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/safety/electronics{ @@ -264,6 +292,9 @@ }, /turf/open/floor, /area/bigredv2/outside/engineering) +"nV" = ( +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "nZ" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor, @@ -274,7 +305,7 @@ on = 1 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "op" = ( /turf/closed/mineral/smooth/bigred, /area/bigredv2/caves/rock) @@ -288,13 +319,17 @@ dir = 4 }, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "oP" = ( /obj/structure/bed/chair/office/light{ dir = 4 }, /turf/open/floor, /area/bigredv2/outside/engineering) +"oX" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor/plating, +/area/bigredv2/outside/engineering/east) "pa" = ( /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/mars/random/sand, @@ -303,7 +338,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/sign/safety/high_radiation, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "pE" = ( /obj/structure/sign/safety/hazard, /turf/open/floor, @@ -316,7 +351,7 @@ /obj/structure/cable, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "qg" = ( /obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, /obj/machinery/door/poddoor/shutters/mainship{ @@ -330,7 +365,7 @@ "qi" = ( /obj/machinery/vending/cigarette/colony, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "qs" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/mainship/secure/free_access{ @@ -343,7 +378,7 @@ /obj/structure/cable, /obj/effect/landmark/weed_node, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "qP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -354,7 +389,7 @@ name = "\improper Engineering Complex" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "qT" = ( /obj/structure/closet/radiation, /turf/open/floor, @@ -367,11 +402,16 @@ }, /turf/open/floor, /area/bigredv2/outside/engineering) +"rG" = ( +/obj/structure/table, +/obj/item/tool/lighter/random, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "rK" = ( /obj/machinery/computer/atmos_alert, /obj/structure/table, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "rM" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/structure/cable, @@ -396,6 +436,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor, /area/bigredv2/outside/engineering) +"sK" = ( +/obj/structure/table, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "tc" = ( /obj/machinery/door/airlock/mainship/engineering/free_access{ dir = 1; @@ -409,7 +454,7 @@ dir = 8 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "tS" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -428,7 +473,7 @@ /turf/open/floor, /area/bigredv2/outside/engineering) "uj" = ( -/obj/item/stack/sheet/glass, +/obj/item/stack/sheet/glass/glass, /obj/structure/cable, /turf/open/floor, /area/bigredv2/outside/engineering) @@ -446,13 +491,13 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "uP" = ( /obj/machinery/light{ dir = 8 }, /turf/open/liquid/water/river, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "uU" = ( /obj/machinery/atmospherics/components/unary/vent_pump, /turf/open/floor, @@ -468,7 +513,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "vv" = ( /obj/structure/table, /obj/machinery/light, @@ -478,14 +523,14 @@ "vw" = ( /obj/effect/landmark/start/job/survivor, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "vR" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/multi_tile/mainship/generic{ name = "\improper Engineering Complex" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "we" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -512,7 +557,7 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "wY" = ( /obj/effect/decal/cleanable/dirt, /obj/item/stack/sheet/metal{ @@ -528,13 +573,13 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "xk" = ( /obj/item/shard, /obj/effect/decal/cleanable/blood/xeno, /obj/structure/window_frame/colony, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "xu" = ( /turf/open/floor/plating/ground/mars/random/sand, /area/bigredv2/outside/s) @@ -543,7 +588,7 @@ name = "\improper Engine Reactor Control" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "yi" = ( /turf/open/floor/plating/ground/mars/random/cave/rock, /area/bigredv2/outside/s) @@ -553,20 +598,24 @@ /obj/structure/cable, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"yD" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "yN" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "yQ" = ( /obj/item/tool/multitool, /obj/effect/ai_node, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "yR" = ( /obj/machinery/computer/area_atmos, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "yS" = ( /turf/open/floor/plating/ground/mars/cavetodirt{ dir = 9 @@ -581,7 +630,7 @@ "zt" = ( /obj/machinery/computer/arcade, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "zx" = ( /obj/effect/decal/cleanable/dirt, /obj/item/stack/sheet/metal, @@ -599,16 +648,30 @@ "zN" = ( /obj/machinery/vending/snack, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Am" = ( /obj/effect/landmark/weed_node, /turf/open/floor, /area/bigredv2/outside/engineering) +"Ay" = ( +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "AT" = ( /obj/structure/sign/safety/high_radiation, /obj/effect/landmark/weed_node, /turf/open/floor, /area/bigredv2/outside/engineering) +"Bc" = ( +/obj/structure/cable, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) +"Bg" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "BK" = ( /obj/item/stack/sheet/metal, /turf/open/floor, @@ -621,7 +684,7 @@ /obj/effect/spawner/random/misc/earmuffs, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Cx" = ( /obj/structure/table, /obj/effect/spawner/random/engineering/tool, @@ -646,11 +709,31 @@ /obj/effect/landmark/weed_node, /obj/structure/cable, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"DO" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) +"DZ" = ( +/obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, +/obj/machinery/door/poddoor/mainship{ + dir = 2; + id = "rad_door"; + name = "\improper Radiation Shielding" + }, +/turf/open/floor/plating, +/area/bigredv2/outside/engineering/east) +"Eq" = ( +/obj/structure/table, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/engineering/technology_scanner, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "Ex" = ( /obj/structure/cable, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "EV" = ( /turf/closed/wall, /area/bigredv2/outside/engineering) @@ -669,13 +752,13 @@ /obj/effect/ai_node, /obj/structure/cable, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "FY" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden, /obj/structure/cable, /obj/effect/ai_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Gl" = ( /turf/open/floor/plating/ground/mars/random/sand, /area/bigredv2/outside/sw) @@ -686,12 +769,12 @@ /obj/structure/cable, /obj/effect/ai_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "GE" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "GG" = ( /obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, /turf/open/floor/plating, @@ -702,10 +785,10 @@ dir = 4 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Hk" = ( /turf/open/liquid/water/river, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Hz" = ( /turf/open/floor/plating/ground/mars/dirttosand/autosmooth{ dir = 9 @@ -717,13 +800,13 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "HK" = ( /obj/machinery/light{ dir = 8 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "HO" = ( /obj/structure/table, /obj/effect/spawner/random/engineering/tool, @@ -736,30 +819,41 @@ /obj/structure/cable, /obj/effect/ai_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "HX" = ( /obj/effect/landmark/excavation_site_spawner, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Ib" = ( /turf/closed/wall/r_wall, /area/bigredv2/outside/engineering) "Ic" = ( /obj/structure/bed/chair/office/light, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Jk" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 }, /turf/open/floor, /area/bigredv2/outside/engineering) +"Ke" = ( +/obj/structure/closet/radiation, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "Kv" = ( /obj/machinery/light{ dir = 8 }, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"KP" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "Lm" = ( /obj/machinery/door/airlock/mainship/engineering/free_access{ dir = 1; @@ -768,16 +862,19 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"Lx" = ( +/turf/closed/wall/r_wall, +/area/bigredv2/outside/engineering/east) "Ly" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/ai_node, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Mk" = ( /turf/closed/wall/mineral/gold, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Mr" = ( /obj/effect/landmark/corpsespawner/engineer{ corpseback = /obj/item/storage/backpack; @@ -787,17 +884,17 @@ name = "Colonist Ted Jarka" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "MJ" = ( /obj/structure/table, /obj/item/tool/analyzer, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Nh" = ( /obj/effect/decal/cleanable/dirt, /obj/item/clothing/head/welding, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Np" = ( /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/mars/random/cave, @@ -821,7 +918,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/weed_node, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Os" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump{ @@ -844,6 +941,13 @@ /obj/item/clothing/mask/breath, /turf/open/floor, /area/bigredv2/outside/engineering) +"OS" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "Pk" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/machinery/machine_frame, @@ -860,7 +964,7 @@ name = "Storm Shutters" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "PB" = ( /turf/open/floor/marking/asteroidwarning{ dir = 4 @@ -878,7 +982,13 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/ai_node, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"Qe" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "QH" = ( /obj/effect/spawner/random/engineering/structure/tank/fuelweighted, /turf/open/floor, @@ -886,7 +996,7 @@ "QO" = ( /obj/machinery/vending/cola, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "QT" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/machinery/door/airlock/mainship/engineering/free_access{ @@ -917,15 +1027,15 @@ /obj/machinery/computer/station_alert, /obj/structure/table, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "RD" = ( /obj/machinery/power/geothermal/bigred, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "RW" = ( /obj/structure/table, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Si" = ( /turf/open/floor/plating/ground/mars/random/sand, /area/bigredv2/outside/c) @@ -944,7 +1054,7 @@ }, /obj/effect/spawner/random/engineering/technology_scanner, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Tt" = ( /obj/structure/cable, /obj/machinery/power/apc/drained{ @@ -964,6 +1074,13 @@ /obj/item/tool/analyzer, /turf/open/floor, /area/bigredv2/outside/engineering) +"UM" = ( +/turf/closed/wall, +/area/bigredv2/outside/engineering/east) +"Vk" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "Vy" = ( /obj/effect/decal/cleanable/dirt, /obj/item/tool/weldpack, @@ -980,30 +1097,40 @@ /obj/effect/landmark/weed_node, /turf/open/floor, /area/bigredv2/outside/engineering) +"Ww" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "WA" = ( /obj/machinery/light{ dir = 8 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Xe" = ( /obj/machinery/light, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "XF" = ( /obj/machinery/power/monitor{ name = "Main Power Grid Monitoring" }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "XS" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/weed_node, /obj/effect/ai_node, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"XZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "Yk" = ( /obj/machinery/door_control{ desc = "A remote control-switch for opening the engines blast doors."; @@ -1012,7 +1139,7 @@ name = "Reactor Radiation Shielding control" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "YJ" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden{ dir = 4 @@ -1036,7 +1163,7 @@ /obj/effect/ai_node, /obj/effect/landmark/weed_node, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "ZE" = ( /obj/structure/table, /obj/effect/spawner/random/engineering/powercell, @@ -1180,19 +1307,19 @@ GG Ib Ib Ib -Ib -Ib -Ib -Ib -Ib -Ib -Ib -Ib -Ib -Ib -Ib -Ib -Ib +Lx +Lx +Lx +Lx +Lx +Lx +Lx +Lx +Lx +Lx +Lx +Lx +Lx op op "} @@ -1221,7 +1348,7 @@ WA yN yN ix -Ib +Lx op op "} @@ -1250,8 +1377,8 @@ XS yN yN Od -Ib -Ib +Lx +Lx op "} (8,1,1) = {" @@ -1280,7 +1407,7 @@ yN yN ix ix -Ib +Lx op "} (9,1,1) = {" @@ -1309,8 +1436,8 @@ Hk Hk Hk ix -Ib -Ib +Lx +Lx "} (10,1,1) = {" lU @@ -1339,7 +1466,7 @@ Mk Hk hj Xe -Ib +Lx "} (11,1,1) = {" Nz @@ -1368,7 +1495,7 @@ Hk Hk ix ix -Ib +Lx "} (12,1,1) = {" nZ @@ -1397,7 +1524,7 @@ Mk Hk ix ix -Ib +Lx "} (13,1,1) = {" wv @@ -1405,14 +1532,14 @@ CS GG Ri nZ -EV -EV -EV +UM +UM +UM xT -EV -EV -Ib -Ib +UM +UM +Lx +Lx Hk Hk Hk @@ -1426,7 +1553,7 @@ Hk Hk ix ix -Ib +Lx "} (14,1,1) = {" lU @@ -1434,20 +1561,20 @@ HO EV kV BK -EV +UM ST -HO -lU -lU -BK +sK +nV +nV +Vk Rl -wL +DZ Hk Mk Hk Ex ix -Ib +Lx ix ix Hk @@ -1455,7 +1582,7 @@ Mk Hk hj ix -Ib +Lx "} (15,1,1) = {" lU @@ -1463,14 +1590,14 @@ Wq GG Ri iT -EV -lU +UM +nV dI -lU -nZ +nV +ho Ic -HO -wL +sK +DZ Hk Hk Hk @@ -1484,7 +1611,7 @@ Hk Hk ix ix -Ib +Lx "} (16,1,1) = {" HO @@ -1497,9 +1624,9 @@ vj vj jG ee -SK +Bc XF -wL +DZ Hk Mk Hk @@ -1513,7 +1640,7 @@ Mk Hk ix ix -Ib +Lx "} (17,1,1) = {" EV @@ -1521,14 +1648,14 @@ EV EV jR bB -EV -nZ -nZ -lU -nZ +UM +ho +ho +nV +ho Ic MJ -wL +DZ Hk Hk Hk @@ -1542,28 +1669,28 @@ Hk Hk ix HX -Ib +Lx "} (18,1,1) = {" RW -GG +oX HK -vi -nZ -EV -lU +KP +ho +UM +nV Yk -lU -lU -lU +nV +nV +nV rK -wL +DZ Hk Mk Hk Ex ix -Ib +Lx ix ix Hk @@ -1571,22 +1698,22 @@ Mk Hk hj ix -Ib +Lx "} (19,1,1) = {" -SK +Bc xk Mr -Jk +Qe Pz -EV -EV -EV +UM +UM +UM xT -EV -EV -Ib -Ib +UM +UM +Lx +Lx Hk Hk Hk @@ -1600,21 +1727,21 @@ Hk Hk ix ix -Ib +Lx "} (20,1,1) = {" -CL -GG -lU -Jk -nZ -lU -lU +DO +oX +nV +Qe +ho +nV +nV HK -Am -nZ -lU -wL +yD +ho +nV +DZ Hk Hk Mk @@ -1629,21 +1756,21 @@ Mk Hk ix ix -Ib +Lx "} (21,1,1) = {" -hQ +Ww xc -hQ +Ww FY HF nz nz -nZ -kS -nZ -lU -wL +ho +Ay +ho +nV +DZ Hk Hk Hk @@ -1658,21 +1785,21 @@ Hk Hk ix ix -Ib +Lx "} (22,1,1) = {" -lU -GG -lU -kV +nV +oX +nV +fe hU -Cx +Eq eQ -EX -lU -lU -Am -wL +XZ +nV +nV +yD +DZ Hk Hk Mk @@ -1687,21 +1814,21 @@ Mk Hk hj Xe -Ib +Lx "} (23,1,1) = {" -EV -EV +UM +UM vw uv bA Cr -CS -lU -lU -lU +rG +nV +nV +nV yR -Ib +Lx Hk Hk Hk @@ -1715,22 +1842,22 @@ Hk Hk Hk ix -Ib -Ib +Lx +Lx "} (24,1,1) = {" -nZ +ho vR -lU +nV uv tJ tJ tJ -nZ +ho pe -Ib -Ib -Ib +Lx +Lx +Lx hj ix ix @@ -1744,7 +1871,7 @@ ix ix ix ix -Ib +Lx jq "} (25,1,1) = {" @@ -1752,8 +1879,8 @@ yk gE fM Gr -hQ -hQ +eR +Ww wN ma Ly @@ -1772,23 +1899,23 @@ PZ ix ix hj -Ib -Ib +Lx +Lx yi "} (26,1,1) = {" -Ib -Ib -Ib -Ib -Ib +Lx +Lx +Lx +Lx +Lx zt ok pH lX -Ib -qT -Ib +Lx +Ke +Lx ix Od oI @@ -1801,7 +1928,7 @@ oI hj ix ix -Ib +Lx yi jq "} @@ -1810,27 +1937,27 @@ PB PB PB PB -Ib -Ib +Lx +Lx qi -tS +nx Nh -Ib -Ib -Ib -Ib -Ib -Ib -Ib -Ib -Ib -Ib -Ib -Ib -Ib -Ib -Ib -Ib +Lx +Lx +Lx +Lx +Lx +Lx +Lx +Lx +Lx +Lx +Lx +Lx +Lx +Lx +Lx +Lx jq jq "} @@ -1840,16 +1967,16 @@ Si Si Si Si -Ib +Lx zN aA -rM -hQ -hQ -hQ -hQ +Bg +Ww +Ww +Ww +Ww HP -Ib +Lx Pu xu xu @@ -1869,16 +1996,16 @@ Si pa Si Si -Ib +Lx QO -lU +nV fK -kT -nZ -lU -Am +OS +ho +nV +yD Ha -Ib +Lx xu xu xu @@ -1898,16 +2025,16 @@ Si Si Si Si -Ib -Ib -Ib -Ib -Ib -Ib -Ib -lU +Lx +Lx +Lx +Lx +Lx +Lx +Lx +nV qP -Ib +Lx xu xu Hz diff --git a/_maps/modularmaps/big_red/bigredengineeringvar4.dmm b/_maps/modularmaps/big_red/bigredengineeringvar4.dmm index 7c336abf7808e..55e5f94dc8fa0 100644 --- a/_maps/modularmaps/big_red/bigredengineeringvar4.dmm +++ b/_maps/modularmaps/big_red/bigredengineeringvar4.dmm @@ -5,7 +5,7 @@ name = "\improper Engineering Complex" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "aZ" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden{ dir = 8 @@ -24,7 +24,7 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "bK" = ( /obj/structure/table, /obj/effect/spawner/random/engineering/powercell, @@ -33,14 +33,14 @@ "bO" = ( /obj/structure/bed/chair/office/light, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "cx" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 10 }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "cD" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -62,7 +62,7 @@ /obj/structure/cable, /obj/effect/ai_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "dz" = ( /obj/effect/spawner/random/engineering/structure/tank/waterweighted, /obj/effect/decal/cleanable/dirt, @@ -76,7 +76,12 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"dQ" = ( +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "dZ" = ( /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/mars/random/sand, @@ -120,11 +125,23 @@ dir = 4 }, /area/bigredv2/caves/southwest) +"gY" = ( +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "ha" = ( /turf/open/floor/plating/ground/mars/dirttosand/autosmooth{ dir = 1 }, /area/bigredv2/caves/southwest) +"hx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "hH" = ( /turf/open/floor/plating/ground/mars/dirttosand/autosmooth{ dir = 5 @@ -138,7 +155,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "jb" = ( /obj/structure/cable, /obj/effect/landmark/weed_node, @@ -159,7 +176,7 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "ko" = ( /obj/effect/spawner/random/engineering/structure/tank/fuelweighted, /turf/open/floor, @@ -182,24 +199,38 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "lx" = ( /obj/machinery/power/monitor{ name = "Main Power Grid Monitoring" }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"mi" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/machinery/power/apc/drained{ + dir = 8 + }, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "mN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/ai_node, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "nu" = ( /obj/effect/landmark/excavation_site_spawner, /turf/open/floor, /area/bigredv2/outside/engineering) +"oH" = ( +/obj/structure/table, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/engineering/technology_scanner, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "oX" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/green/hidden{ @@ -232,13 +263,20 @@ /obj/effect/decal/cleanable/blood/oil, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "pX" = ( /obj/structure/bed/chair{ dir = 4 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"pY" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "qd" = ( /obj/effect/ai_node, /turf/open/floor/plating/ground/mars/random/dirt, @@ -251,9 +289,19 @@ /obj/structure/closet/radiation, /turf/open/floor, /area/bigredv2/outside/engineering) +"qN" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "qS" = ( /turf/open/floor/plating/ground/mars/random/sand, /area/bigredv2/outside/s) +"ro" = ( +/turf/closed/wall/r_wall, +/area/bigredv2/outside/engineering/east) "rt" = ( /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/mars/dirttosand/autosmooth{ @@ -264,18 +312,18 @@ /obj/machinery/computer/atmos_alert, /obj/structure/table, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "rN" = ( /obj/machinery/vending/cigarette/colony, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "se" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/effect/decal/cleanable/dirt, /obj/structure/cable, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "sl" = ( /turf/open/floor/plating/ground/mars/cavetodirt{ dir = 10 @@ -290,7 +338,7 @@ "sV" = ( /obj/structure/table, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "ta" = ( /obj/effect/decal/cleanable/dirt, /obj/item/tool/weldpack, @@ -306,7 +354,7 @@ name = "\improper Engineering Complex" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "tF" = ( /turf/open/floor/plating/ground/mars/dirttosand/autosmooth{ dir = 4 @@ -318,7 +366,7 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "tN" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/green/hidden, @@ -333,6 +381,10 @@ /obj/structure/cable, /turf/open/floor, /area/bigredv2/outside/engineering) +"ug" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "uD" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden{ dir = 4 @@ -348,7 +400,7 @@ dir = 8 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "vP" = ( /turf/closed/wall/r_wall, /area/bigredv2/outside/engineering) @@ -358,6 +410,10 @@ /obj/effect/ai_node, /turf/open/floor, /area/bigredv2/outside/engineering) +"wd" = ( +/obj/effect/landmark/excavation_site_spawner, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "wG" = ( /obj/effect/decal/cleanable/dirt, /obj/item/stack/sheet/metal, @@ -370,7 +426,7 @@ /obj/structure/cable, /obj/effect/ai_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "xo" = ( /obj/structure/table, /obj/effect/spawner/random/engineering/toolbox, @@ -393,7 +449,7 @@ dir = 8 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "yc" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/air_alarm{ @@ -406,7 +462,7 @@ name = "\improper Engine Reactor Control" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "yH" = ( /obj/effect/decal/cleanable/dirt, /obj/item/stack/sheet/metal{ @@ -443,7 +499,7 @@ "Aq" = ( /obj/effect/landmark/start/job/survivor, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Au" = ( /obj/effect/ai_node, /turf/open/floor/plating/ground/mars/random/sand, @@ -451,22 +507,27 @@ "AW" = ( /obj/machinery/computer/area_atmos, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Bb" = ( /obj/machinery/vending/snack, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Be" = ( /obj/structure/bed/chair/office/light{ dir = 4 }, /turf/open/floor, /area/bigredv2/outside/engineering) +"Bx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "BC" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "BO" = ( /obj/effect/ai_node, /obj/effect/landmark/weed_node, @@ -475,7 +536,7 @@ "BS" = ( /obj/machinery/computer/arcade, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Cu" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/machinery/door/airlock/mainship/engineering/free_access{ @@ -485,6 +546,12 @@ /obj/structure/cable, /turf/open/floor, /area/bigredv2/outside/engineering) +"Cx" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/obj/effect/ai_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "CC" = ( /obj/structure/rack, /obj/item/camera_film, @@ -502,7 +569,7 @@ /obj/structure/cable, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "De" = ( /obj/structure/cable, /obj/machinery/power/apc/drained{ @@ -523,6 +590,19 @@ /obj/effect/spawner/random/engineering/tool, /turf/open/floor, /area/bigredv2/outside/engineering) +"Ed" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/structure/cable, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) +"Ef" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/weed_node, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "Ej" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -539,6 +619,11 @@ }, /turf/open/floor, /area/bigredv2/outside/engineering) +"EY" = ( +/obj/structure/table, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "Fs" = ( /obj/structure/cable, /turf/open/floor, @@ -562,7 +647,7 @@ /area/bigredv2/outside/engineering) "GK" = ( /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Hz" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /obj/structure/cable, @@ -572,7 +657,7 @@ /obj/structure/table, /obj/effect/spawner/random/engineering/toolbox, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "HQ" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden{ dir = 8 @@ -595,7 +680,7 @@ "IN" = ( /obj/machinery/vending/cola, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "IZ" = ( /turf/closed/wall/r_wall, /area/bigredv2/outside/s) @@ -604,7 +689,7 @@ /obj/structure/cable, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Jx" = ( /obj/machinery/door/airlock/mainship/engineering/free_access{ dir = 1; @@ -635,7 +720,7 @@ /obj/item/tool/lighter/random, /obj/item/lightreplacer, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "KR" = ( /obj/effect/decal/cleanable/dirt, /obj/item/lightreplacer, @@ -645,7 +730,7 @@ /obj/machinery/computer/station_alert, /obj/structure/table, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Mw" = ( /obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, /turf/open/floor/plating, @@ -655,7 +740,7 @@ /obj/effect/decal/cleanable/dirt, /obj/item/clothing/glasses/welding, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "MU" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden{ dir = 1 @@ -669,7 +754,7 @@ /obj/structure/cable, /obj/effect/ai_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Nr" = ( /turf/open/floor/plating/ground/mars/dirttosand/autosmooth{ dir = 9 @@ -692,6 +777,9 @@ "NS" = ( /turf/open/floor/plating/ground/mars/random/sand, /area/bigredv2/outside/sw) +"Oo" = ( +/turf/closed/wall, +/area/bigredv2/outside/engineering/east) "OA" = ( /obj/structure/table, /obj/item/tool/lighter/random, @@ -713,7 +801,7 @@ /obj/effect/spawner/random/misc/earmuffs, /obj/effect/landmark/weed_node, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Pi" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/excavation_site_spawner, @@ -724,7 +812,7 @@ /obj/effect/decal/cleanable/blood/xeno, /obj/structure/window_frame/colony, /turf/open/floor/plating, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Pw" = ( /obj/machinery/door_control{ desc = "A remote control-switch for opening the engines blast doors."; @@ -733,7 +821,11 @@ name = "Reactor Radiation Shielding control" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) +"Pz" = ( +/obj/structure/cable, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "PH" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 @@ -750,7 +842,7 @@ }, /obj/structure/cable, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "PW" = ( /turf/open/floor/plating/ground/mars/dirttosand/autosmooth{ dir = 8 @@ -768,12 +860,16 @@ name = "Colonist Ted Jarka" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Qv" = ( /obj/structure/rack, /obj/item/tool/analyzer, /turf/open/floor, /area/bigredv2/outside/engineering) +"Rb" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "Rp" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -789,11 +885,21 @@ }, /turf/open/floor, /area/bigredv2/outside/engineering) +"RM" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "RR" = ( /obj/effect/decal/cleanable/dirt, /obj/item/clothing/mask/breath, /turf/open/floor, /area/bigredv2/outside/engineering) +"Sv" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor/plating, +/area/bigredv2/outside/engineering/east) "Sw" = ( /obj/machinery/atmospherics/components/unary/vent_pump, /turf/open/floor, @@ -815,7 +921,7 @@ on = 1 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Ta" = ( /obj/effect/ai_node, /turf/open/floor/plating/ground/mars/dirttosand/autosmooth{ @@ -827,7 +933,7 @@ dir = 8 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "TQ" = ( /obj/effect/landmark/weed_node, /turf/open/floor/plating/ground/mars/dirttosand/autosmooth{ @@ -866,14 +972,14 @@ /obj/effect/decal/cleanable/dirt, /obj/item/clothing/head/welding, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Xh" = ( /obj/structure/bed/chair{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Xz" = ( /obj/structure/table, /obj/effect/spawner/random/engineering/tool, @@ -887,12 +993,12 @@ name = "Storm Shutters" }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "XU" = ( /obj/structure/table, /obj/item/tool/analyzer, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Yb" = ( /turf/open/floor/plating/ground/mars/cavetodirt{ dir = 5 @@ -906,6 +1012,11 @@ }, /turf/open/floor, /area/bigredv2/outside/engineering) +"Yo" = ( +/obj/structure/table, +/obj/item/tool/lighter/random, +/turf/open/floor, +/area/bigredv2/outside/engineering/east) "Yq" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump{ @@ -924,7 +1035,7 @@ dir = 4 }, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Zj" = ( /obj/structure/table, /obj/machinery/light{ @@ -932,9 +1043,9 @@ }, /obj/effect/spawner/random/engineering/technology_scanner, /turf/open/floor, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/engineering/east) "Zv" = ( -/obj/item/stack/sheet/glass, +/obj/item/stack/sheet/glass/glass, /obj/structure/cable, /turf/open/floor, /area/bigredv2/outside/engineering) @@ -1296,13 +1407,13 @@ OA Mw ky jg -Qe -Qe -Qe +Oo +Oo +Oo yu -Qe -Qe -vP +Oo +Oo +ro ZD ZD fd @@ -1325,13 +1436,13 @@ DP Qe PH eH -Qe +Oo Zj -DP -OK -eH +EY +GK +Rb LP -vP +ro ZD ZD ZD @@ -1354,13 +1465,13 @@ xo Mw ky KR -Qe -OK +Oo +GK vN -jg +ug bO -DP -vP +EY +ro ZD ZD ZD @@ -1387,9 +1498,9 @@ if BC BC PT -Fs +Pz lx -vP +ro ZD ZD ZD @@ -1412,13 +1523,13 @@ Qe Qe fe yc -Qe -jg -jg -jg +Oo +ug +ug +ug bO XU -vP +ro ZD ZD ZD @@ -1437,17 +1548,17 @@ RB "} (18,1,1) = {" sV -Mw +Sv TA -cD -jg -Qe +pY +ug +Oo GK Pw -OK -OK +GK +GK rL -vP +ro ZD ZD ZD @@ -1465,18 +1576,18 @@ zc RB "} (19,1,1) = {" -Fs +Pz Pp Qo -EF +RM XI -Qe -Qe -Qe +Oo +Oo +Oo yu -Qe -Qe -vP +Oo +Oo +ro ZD ZD fd @@ -1494,18 +1605,18 @@ fm RB "} (20,1,1) = {" -jb -Mw -OK -EF -jg -OK -OK +dQ +Sv +GK +RM +ug +GK +GK TA -Ek -jg -OK -vP +gY +ug +GK +ro ZD fd fd @@ -1523,18 +1634,18 @@ RB RB "} (21,1,1) = {" -Hz +Ed dI -Hz +Ed Ne Xh pX pX -jg -nu -jg -OK -vP +ug +wd +ug +GK +ro ZD Au fd @@ -1552,18 +1663,18 @@ vs RB "} (22,1,1) = {" -OK -Mw -OK -PH +GK +Sv +GK +Ef Mx -Xz +oH Kz -Ns -OK -OK -Ek -vP +Bx +GK +GK +gY +ro ZD fd Yr @@ -1581,18 +1692,18 @@ Dw RB "} (23,1,1) = {" -Qe -Qe +Oo +Oo Aq km HC Pd -OA -OK -OK -OK +Yo +GK +GK +GK AW -vP +ro ZD fd fd @@ -1610,18 +1721,18 @@ Dw RB "} (24,1,1) = {" -jg +ug ax -OK +GK km yb yb yb -jg -jg -OK -OK -vP +ug +ug +GK +GK +ro ZD ZD fd @@ -1643,14 +1754,14 @@ se kC Jq dk -Hz -Hz +mi +Ed tG bo mN -Fs -Fs -vP +Pz +Pz +ro bf ZD ZD @@ -1668,18 +1779,18 @@ RB zc "} (26,1,1) = {" -vP -vP -vP -vP -vP +ro +ro +ro +ro +ro BS SZ Db -jg -OK -OK -vP +ug +GK +GK +ro bf bf ZD @@ -1701,17 +1812,17 @@ pe pe pe pe -vP -vP +ro +ro rN -OZ +hx Wy -OK -OK -vP -vP -vP -vP +GK +GK +ro +ro +ro +ro ZD ZD ZD @@ -1731,16 +1842,16 @@ xM xM xM xM -vP +ro Bb cx -vS -Hz -Hz -Hz -Hz +Cx +Ed +Ed +Ed +Ed wK -vP +ro ZD ZD ZD @@ -1760,16 +1871,16 @@ xM ff xM xM -vP +ro IN -OK +GK pV -cI -jg -OK -Ek +qN +ug +GK +gY YW -vP +ro ZD ZD ZD @@ -1789,16 +1900,16 @@ xM xM xM xM -vP -vP -vP -vP -vP -vP -vP -OK +ro +ro +ro +ro +ro +ro +ro +GK tr -vP +ro qS dZ Nr diff --git a/_maps/modularmaps/big_red/bigredmedbayvar4.dmm b/_maps/modularmaps/big_red/bigredmedbayvar4.dmm index 8627503c405c5..2dd4502df625a 100644 --- a/_maps/modularmaps/big_red/bigredmedbayvar4.dmm +++ b/_maps/modularmaps/big_red/bigredmedbayvar4.dmm @@ -314,6 +314,9 @@ /area/bigredv2/outside/medical) "js" = ( /obj/structure/bed/roller, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, /turf/open/floor/tile/green/whitegreen{ dir = 8 }, @@ -334,6 +337,13 @@ /obj/effect/spawner/random/engineering/toolbox, /turf/open/floor/plating, /area/bigredv2/outside/medical) +"kC" = ( +/obj/effect/ai_node, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/turf/open/floor/tile/white, +/area/bigredv2/outside/medical) "kD" = ( /obj/item/healthanalyzer, /turf/open/floor/tile/green/whitegreencorner, @@ -2002,7 +2012,7 @@ Zg bx nl hQ -Hm +fk zx SR tC @@ -2030,7 +2040,7 @@ OI Yk jh rB -hQ +kC ys Cp OC diff --git a/_maps/modularmaps/big_red/bigredmedbayvar5.dmm b/_maps/modularmaps/big_red/bigredmedbayvar5.dmm index e6a82f580326c..0d8c08470604e 100644 --- a/_maps/modularmaps/big_red/bigredmedbayvar5.dmm +++ b/_maps/modularmaps/big_red/bigredmedbayvar5.dmm @@ -843,6 +843,9 @@ /area/bigredv2/outside/medical) "vV" = ( /obj/structure/bed/roller, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 4 + }, /turf/open/floor/tile/green/whitegreen{ dir = 8 }, @@ -1442,6 +1445,13 @@ /obj/effect/spawner/random/engineering/toolbox, /turf/open/floor/plating, /area/bigredv2/outside/medical) +"Mk" = ( +/obj/effect/ai_node, +/obj/machinery/atmospherics/pipe/simple/green/hidden{ + dir = 9 + }, +/turf/open/floor/tile/white, +/area/bigredv2/outside/medical) "Mp" = ( /obj/structure/morgue{ dir = 1 @@ -2055,7 +2065,7 @@ Yn lv HT gj -gL +Re na oG IT @@ -2083,7 +2093,7 @@ Zu Ko Uv fI -gj +Mk MO KD GW diff --git a/_maps/modularmaps/big_red/bigredofficevar1.dmm b/_maps/modularmaps/big_red/bigredofficevar1.dmm index bf715e873222e..bd827bd805a3a 100644 --- a/_maps/modularmaps/big_red/bigredofficevar1.dmm +++ b/_maps/modularmaps/big_red/bigredofficevar1.dmm @@ -99,13 +99,6 @@ /obj/effect/landmark/weed_node, /turf/open/floor/tile/white/warningstripe, /area/bigredv2/outside/office_complex) -"fQ" = ( -/obj/structure/cable, -/obj/effect/ai_node, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 4 - }, -/area/bigredv2/outside/office_complex) "fW" = ( /obj/structure/table, /obj/machinery/computer3/laptop/secure_data, @@ -198,7 +191,6 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/cable, /turf/open/floor, /area/bigredv2/outside/office_complex) "jz" = ( @@ -270,7 +262,6 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/cable, /obj/effect/ai_node, /turf/open/floor/tile/red/redtaupecorner, /area/bigredv2/outside/office_complex) @@ -396,11 +387,6 @@ dir = 4 }, /area/bigredv2/outside/office_complex) -"qF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor, -/area/bigredv2/outside/office_complex) "qU" = ( /obj/structure/closet/jcloset, /obj/item/clothing/head/beret/jan, @@ -454,10 +440,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor, /area/bigredv2/outside/office_complex) -"ua" = ( -/obj/structure/cable, -/turf/open/floor, -/area/bigredv2/outside/office_complex) "um" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/green/hidden, @@ -651,13 +633,6 @@ "BM" = ( /turf/open/floor/tile/dark, /area/bigredv2/outside/office_complex) -"Cr" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) "Cz" = ( /obj/machinery/light{ dir = 8 @@ -683,7 +658,6 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/cable, /obj/effect/ai_node, /obj/effect/landmark/weed_node, /turf/open/floor, @@ -901,11 +875,9 @@ /area/bigredv2/outside/office_complex) "Np" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc, -/obj/structure/cable, /obj/effect/ai_node, /turf/open/floor, -/area/bigredv2/outside/e) +/area/bigredv2/outside/office_complex) "Nq" = ( /turf/open/floor/marking/asteroidwarning{ dir = 9 @@ -1563,7 +1535,7 @@ ov ov ov VI -Cr +ei ov kz tt @@ -1588,7 +1560,7 @@ Hm zI ov VI -Cr +ei ov ov ov @@ -1634,10 +1606,10 @@ ov ov ov Np -ua -qF +As +JI We -fQ +qB jl LH mq diff --git a/_maps/modularmaps/big_red/bigredofficevar2.dmm b/_maps/modularmaps/big_red/bigredofficevar2.dmm index 1e398128e39f4..fba660813183f 100644 --- a/_maps/modularmaps/big_red/bigredofficevar2.dmm +++ b/_maps/modularmaps/big_red/bigredofficevar2.dmm @@ -4,30 +4,22 @@ /obj/effect/landmark/weed_node, /turf/open/floor/mainship/sterile, /area/bigredv2/outside/office_complex) -"aB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor, -/area/bigredv2/outside/office_complex) "aC" = ( /obj/machinery/atmospherics/pipe/manifold/green/hidden{ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/cable, /turf/open/floor, /area/bigredv2/outside/office_complex) "aT" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/cable, /obj/effect/ai_node, /obj/effect/turf_decal/tracks/wheels/bloody{ dir = 4 }, /obj/effect/landmark/weed_node, -/obj/machinery/power/apc/drained, /turf/open/floor, -/area/bigredv2/outside/e) +/area/bigredv2/outside/office_complex) "aU" = ( /obj/machinery/light{ dir = 4 @@ -271,7 +263,7 @@ "hw" = ( /obj/structure/cable, /obj/effect/spawner/random/weaponry/gun, -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 50; pixel_x = 3; pixel_y = 3 @@ -488,7 +480,6 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 }, -/obj/structure/cable, /turf/open/floor/plating/icefloor, /area/bigredv2/outside/office_complex) "pC" = ( @@ -1015,7 +1006,6 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/cable, /obj/effect/ai_node, /obj/effect/landmark/weed_node, /turf/open/floor/plating/icefloor, @@ -1043,10 +1033,6 @@ "Fp" = ( /turf/open/floor/marking/asteroidwarning, /area/bigredv2/outside/se) -"Fs" = ( -/obj/structure/cable, -/turf/open/floor, -/area/bigredv2/outside/office_complex) "Ft" = ( /obj/structure/window/reinforced/toughened{ dir = 4 @@ -1224,13 +1210,6 @@ /obj/item/ammo_casing, /turf/open/floor/mainship/mono, /area/bigredv2/outside/office_complex) -"LC" = ( -/obj/structure/cable, -/obj/effect/ai_node, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 4 - }, -/area/bigredv2/outside/office_complex) "LE" = ( /obj/item/stack/sheet/metal, /turf/open/floor/mainship/mono, @@ -1532,14 +1511,6 @@ /obj/effect/landmark/excavation_site_spawner, /turf/open/floor/mainship/mono, /area/bigredv2/outside/office_complex) -"Vv" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/mainship/generic{ - dir = 1; - name = "\improper Private Office" - }, -/turf/open/floor, -/area/bigredv2/outside/office_complex) "VH" = ( /obj/machinery/light{ dir = 8 @@ -2200,10 +2171,10 @@ Tx Tx Tx aT -Fs -aB -Vv -LC +mv +Am +Cj +Xu aC yn eK diff --git a/_maps/modularmaps/big_red/bigredofficevar3.dmm b/_maps/modularmaps/big_red/bigredofficevar3.dmm index 98acd1a3a1619..cc332685cf1da 100644 --- a/_maps/modularmaps/big_red/bigredofficevar3.dmm +++ b/_maps/modularmaps/big_red/bigredofficevar3.dmm @@ -215,13 +215,6 @@ /obj/effect/landmark/weed_node, /turf/open/floor, /area/bigredv2/outside/office_complex) -"lo" = ( -/obj/structure/cable, -/obj/effect/ai_node, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 4 - }, -/area/bigredv2/outside/office_complex) "lt" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/green/hidden, @@ -315,7 +308,6 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/cable, /obj/effect/ai_node, /obj/effect/landmark/weed_node, /turf/open/floor, @@ -407,7 +399,6 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/cable, /turf/open/floor, /area/bigredv2/outside/office_complex) "to" = ( @@ -435,14 +426,6 @@ /obj/item/folder/red, /turf/open/floor, /area/bigredv2/outside/office_complex) -"uG" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/mainship/generic{ - dir = 1; - name = "\improper Private Office" - }, -/turf/open/floor, -/area/bigredv2/outside/office_complex) "uH" = ( /obj/structure/table, /obj/machinery/computer/pod/old{ @@ -450,13 +433,6 @@ }, /turf/open/floor, /area/bigredv2/outside/office_complex) -"uK" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) "vl" = ( /obj/machinery/light{ dir = 1 @@ -543,7 +519,6 @@ /obj/machinery/atmospherics/pipe/simple/green/hidden{ dir = 4 }, -/obj/structure/cable, /obj/effect/spawner/random/misc/trash, /turf/open/floor/tile/red/redtaupecorner, /area/bigredv2/outside/office_complex) @@ -789,7 +764,6 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/cable, /obj/effect/ai_node, /turf/open/floor/tile/red/redtaupecorner, /area/bigredv2/outside/office_complex) @@ -843,10 +817,6 @@ }, /turf/open/floor/plating, /area/bigredv2/outside/office_complex) -"Ne" = ( -/obj/structure/cable, -/turf/open/floor, -/area/bigredv2/outside/office_complex) "NA" = ( /obj/structure/table, /obj/item/paper, @@ -962,11 +932,6 @@ /obj/structure/cable, /turf/open/floor/tile/red/redtaupecorner, /area/bigredv2/outside/office_complex) -"TA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor, -/area/bigredv2/outside/office_complex) "TN" = ( /obj/machinery/atmospherics/pipe/simple/green/hidden, /turf/open/floor/tile/red/redtaupecorner, @@ -993,11 +958,9 @@ /area/bigredv2/outside/office_complex) "Vi" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc, -/obj/structure/cable, /obj/effect/ai_node, /turf/open/floor, -/area/bigredv2/outside/e) +/area/bigredv2/outside/office_complex) "Vp" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -1534,7 +1497,7 @@ EO EX eB Yj -uK +Bl eB eB eB @@ -1580,10 +1543,10 @@ eB eB eB Vi -Ne -TA -uG -lo +VB +kj +aL +Cl sL Za TN diff --git a/_maps/modularmaps/big_red/bigredofficevar4.dmm b/_maps/modularmaps/big_red/bigredofficevar4.dmm deleted file mode 100644 index c8c749e255a1d..0000000000000 --- a/_maps/modularmaps/big_red/bigredofficevar4.dmm +++ /dev/null @@ -1,2116 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ak" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/prop1, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"ao" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 6 - }, -/obj/effect/decal/cleanable/blood, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"av" = ( -/obj/machinery/atmospherics/pipe/manifold/green/hidden, -/obj/structure/cable, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"az" = ( -/obj/structure/table, -/obj/item/trash/semki, -/turf/open/floor/tile/dark, -/area/bigredv2/outside/office_complex) -"bb" = ( -/turf/open/floor/marking/asteroidwarning{ - dir = 9 - }, -/area/bigredv2/outside/c) -"bQ" = ( -/obj/structure/janitorialcart, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"bS" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/open/floor/grimy, -/area/bigredv2/outside/office_complex) -"bY" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/effect/landmark/corpsespawner/colonist, -/obj/item/ammo_casing/bullet, -/turf/open/floor/grimy, -/area/bigredv2/outside/office_complex) -"cd" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/obj/structure/cable, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 8 - }, -/area/bigredv2/outside/office_complex) -"ch" = ( -/obj/structure/bed/chair/office/light, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"cj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/job/survivor, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"cE" = ( -/obj/effect/landmark/weed_node, -/turf/open/floor/marking/asteroidwarning, -/area/bigredv2/outside/se) -"cM" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 8 - }, -/area/bigredv2/outside/office_complex) -"dk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"do" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/item/trash/syndi_cakes, -/turf/open/floor/tile/dark, -/area/bigredv2/outside/office_complex) -"dp" = ( -/obj/effect/landmark/weed_node, -/turf/open/floor/marking/asteroidwarning{ - dir = 4 - }, -/area/bigredv2/outside/se) -"ds" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/turf/open/floor/plating, -/area/bigredv2/outside/office_complex) -"du" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/mainship/generic{ - dir = 1; - name = "\improper Private Office" - }, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"dv" = ( -/obj/effect/landmark/corpsespawner/engineer, -/obj/effect/landmark/weed_node, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"dC" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/landmark/weed_node, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"dX" = ( -/turf/open/floor/marking/asteroidwarning{ - dir = 4 - }, -/area/bigredv2/outside/e) -"es" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 4 - }, -/area/bigredv2/outside/office_complex) -"ey" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/obj/effect/turf_decal/tracks/wheels/bloody, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"eV" = ( -/obj/effect/landmark/weed_node, -/obj/structure/cable, -/turf/open/floor/wood, -/area/bigredv2/outside/office_complex) -"fr" = ( -/obj/effect/landmark/weed_node, -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"fu" = ( -/obj/item/ammo_casing/bullet, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 4 - }, -/area/bigredv2/outside/office_complex) -"fw" = ( -/obj/machinery/door/airlock/mainship/generic{ - dir = 1; - name = "\improper Private Office" - }, -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"fy" = ( -/obj/item/mass_spectrometer, -/obj/effect/landmark/weed_node, -/turf/open/floor/tile/white, -/area/bigredv2/outside/office_complex) -"ga" = ( -/obj/effect/landmark/weed_node, -/turf/open/floor/marking/asteroidwarning, -/area/bigredv2/outside/c) -"gs" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"gw" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 4 - }, -/area/bigredv2/outside/office_complex) -"gy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/corpsespawner/colonist, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"gP" = ( -/obj/effect/landmark/weed_node, -/turf/open/floor/plating/ground/mars/dirttosand/autosmooth, -/area/bigredv2/outside/c) -"gW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/obj/effect/landmark/corpsespawner/colonist, -/turf/open/floor/tile/white, -/area/bigredv2/outside/office_complex) -"hk" = ( -/obj/machinery/door/airlock/multi_tile/mainship/generic{ - name = "\improper Office Complex Janitor Room" - }, -/obj/machinery/door/poddoor/shutters/mainship{ - dir = 2; - id = "Office Complex 1"; - name = "\improper Office Complex Shutters" - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"hl" = ( -/turf/open/floor/tile/red/redtaupecorner{ - dir = 8 - }, -/area/bigredv2/outside/office_complex) -"ht" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"hE" = ( -/obj/structure/table, -/obj/item/tool/multitool, -/turf/open/floor/tile/dark, -/area/bigredv2/outside/office_complex) -"hL" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/landmark/weed_node, -/turf/open/floor/tile/dark, -/area/bigredv2/outside/office_complex) -"hP" = ( -/turf/open/floor/tile/dark, -/area/bigredv2/outside/office_complex) -"hS" = ( -/turf/open/floor/marking/asteroidwarning{ - dir = 6 - }, -/area/bigredv2/outside/se) -"ic" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/obj/effect/landmark/weed_node, -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 8 - }, -/area/bigredv2/outside/office_complex) -"in" = ( -/obj/effect/landmark/weed_node, -/turf/open/floor/marking/asteroidwarning{ - dir = 8 - }, -/area/bigredv2/outside/c) -"iB" = ( -/obj/structure/table, -/obj/item/clothing/mask/cigarette, -/turf/open/floor/tile/dark, -/area/bigredv2/outside/office_complex) -"iH" = ( -/turf/open/floor/marking/asteroidwarning, -/area/bigredv2/outside/se) -"iQ" = ( -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"iX" = ( -/turf/open/floor/grimy, -/area/bigredv2/outside/office_complex) -"je" = ( -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 4 - }, -/area/bigredv2/outside/office_complex) -"jj" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/wood, -/area/bigredv2/outside/office_complex) -"jw" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 8 - }, -/area/bigredv2/outside/office_complex) -"ke" = ( -/obj/structure/cable, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"ks" = ( -/obj/effect/decal/cleanable/blood, -/obj/item/ammo_casing/bullet, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 8 - }, -/area/bigredv2/outside/office_complex) -"kt" = ( -/obj/machinery/vending/cola, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"kL" = ( -/obj/machinery/atmospherics/pipe/manifold/green/hidden{ - dir = 1 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 8 - }, -/area/bigredv2/outside/office_complex) -"kU" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/table, -/obj/item/paper, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"ld" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/grimy, -/area/bigredv2/outside/office_complex) -"le" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/ai_node, -/obj/effect/turf_decal/tracks/wheels/bloody{ - dir = 4 - }, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"lJ" = ( -/obj/structure/table, -/turf/open/floor/tile/white, -/area/bigredv2/outside/office_complex) -"mi" = ( -/obj/effect/landmark/weed_node, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"ms" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/ai_node, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"my" = ( -/obj/effect/landmark/start/job/survivor, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 8 - }, -/area/bigredv2/outside/office_complex) -"mG" = ( -/obj/structure/bed/chair/office/light{ - dir = 8 - }, -/turf/open/floor/grimy, -/area/bigredv2/outside/office_complex) -"ne" = ( -/obj/structure/table, -/obj/structure/flora/pottedplant/fifteen{ - pixel_y = 10 - }, -/turf/open/floor/tile/white, -/area/bigredv2/outside/office_complex) -"ni" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 4 - }, -/turf/open/floor/tile/dark, -/area/bigredv2/outside/office_complex) -"ns" = ( -/obj/effect/landmark/weed_node, -/turf/open/floor/tile/dark, -/area/bigredv2/outside/office_complex) -"nR" = ( -/obj/item/clothing/shoes/galoshes, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"nZ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"pe" = ( -/obj/effect/landmark/weed_node, -/turf/open/floor/asteroidfloor, -/area/bigredv2/outside/e) -"pf" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 8 - }, -/area/bigredv2/outside/office_complex) -"px" = ( -/turf/open/floor/plating/ground/mars/random/dirt, -/area/bigredv2/outside/e) -"pA" = ( -/obj/structure/table, -/obj/item/paper, -/turf/open/floor/grimy, -/area/bigredv2/outside/office_complex) -"pH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/misc/trash, -/turf/open/floor/tile/white, -/area/bigredv2/outside/office_complex) -"pO" = ( -/turf/open/floor/plating/ground/mars/dirttosand/autosmooth, -/area/bigredv2/outside/c) -"pV" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 9 - }, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"qd" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/obj/effect/landmark/weed_node, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"ql" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"qL" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"qR" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/obj/machinery/door/poddoor/shutters/mainship{ - dir = 2; - id = "Office Complex 1"; - name = "\improper Office Complex Shutters" - }, -/turf/open/floor/plating, -/area/bigredv2/outside/office_complex) -"rf" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/drinks/flask, -/turf/open/floor/tile/dark, -/area/bigredv2/outside/office_complex) -"ro" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/obj/machinery/door/airlock/multi_tile/mainship/generic{ - name = "\improper Office Complex" - }, -/obj/machinery/door/poddoor/shutters/mainship{ - dir = 2; - id = "Office Complex 1"; - name = "\improper Office Complex Shutters" - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"rE" = ( -/obj/docking_port/stationary/crashmode, -/turf/closed/wall, -/area/bigredv2/outside/office_complex) -"sb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/drip, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/tile/white, -/area/bigredv2/outside/office_complex) -"sw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/open/floor/tile/white, -/area/bigredv2/outside/office_complex) -"sy" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tracks/wheels/bloody, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"sL" = ( -/obj/machinery/vending/snack, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"sO" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"td" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/weed_node, -/turf/closed/wall, -/area/bigredv2/outside/office_complex) -"tz" = ( -/obj/structure/bed/chair/comfy/lime{ - dir = 4 - }, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"tE" = ( -/obj/item/ammo_casing/bullet, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"tO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/tool/lighter/random, -/obj/effect/ai_node, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"tQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/weed_node, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"uh" = ( -/obj/effect/landmark/corpsespawner/engineer{ - corpseback = /obj/item/storage/backpack; - corpseidjob = "Engineer"; - corpseshoes = /obj/item/clothing/shoes/black; - corpseuniform = /obj/item/clothing/under/colonist; - name = "Colonist Everett Mison" - }, -/obj/item/reagent_containers/pill/cyanide, -/obj/item/ammo_magazine/pistol/holdout, -/obj/effect/decal/cleanable/blood, -/obj/item/ammo_casing/shell, -/turf/open/floor/tile/dark, -/area/bigredv2/outside/office_complex) -"ui" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 8 - }, -/area/bigredv2/outside/office_complex) -"uj" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/obj/machinery/door/poddoor/shutters/mainship{ - dir = 2; - id = "Office Complex 1"; - name = "\improper Office Complex Shutters" - }, -/turf/open/floor/asteroidfloor, -/area/bigredv2/outside/office_complex) -"um" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/ai_node, -/obj/effect/landmark/weed_node, -/obj/item/ammo_casing/bullet, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"ur" = ( -/obj/effect/spawner/random/misc/trash, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"uD" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 8 - }, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"vu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/weed_node, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"vU" = ( -/turf/open/floor/marking/asteroidwarning{ - dir = 10 - }, -/area/bigredv2/outside/c) -"wj" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/bed/chair/office/light{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"wq" = ( -/obj/structure/noticeboard{ - dir = 1; - pixel_y = -27 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"wz" = ( -/obj/machinery/door/airlock/mainship/generic{ - dir = 1; - name = "\improper Private Office" - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"wG" = ( -/obj/structure/closet/jcloset, -/obj/item/clothing/head/beret/jan, -/obj/item/clothing/head/beret/jan, -/obj/item/clothing/head/beret/jan, -/obj/item/clothing/head/beret/jan, -/obj/item/clothing/head/beret/jan, -/obj/item/clothing/head/beret/jan, -/obj/item/clothing/head/beret/jan, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"wO" = ( -/obj/structure/mopbucket, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"wP" = ( -/obj/structure/table, -/obj/item/paper, -/obj/item/tool/pen/blue, -/turf/open/floor/tile/white, -/area/bigredv2/outside/office_complex) -"xx" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"xQ" = ( -/obj/structure/table, -/obj/item/tool/pen/blue, -/turf/open/floor/grimy, -/area/bigredv2/outside/office_complex) -"xY" = ( -/turf/open/floor/plating/ground/mars/dirttosand/autosmooth{ - dir = 6 - }, -/area/bigredv2/outside/c) -"ya" = ( -/obj/effect/landmark/weed_node, -/obj/effect/spawner/random/misc/trash, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"yd" = ( -/turf/open/floor/plating/ground/mars/random/sand, -/area/bigredv2/outside/c) -"ye" = ( -/obj/machinery/atmospherics/components/unary/vent_pump{ - dir = 1; - on = 1 - }, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"yg" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/obj/effect/landmark/weed_node, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"yh" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 8 - }, -/area/bigredv2/outside/office_complex) -"yD" = ( -/turf/open/floor/wood, -/area/bigredv2/outside/office_complex) -"yR" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/obj/structure/cable, -/obj/machinery/door/poddoor/shutters/mainship{ - dir = 2; - id = "Office Complex 1"; - name = "\improper Office Complex Shutters" - }, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 8 - }, -/area/bigredv2/outside/office_complex) -"zm" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 10 - }, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"zq" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"zu" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"zw" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"Af" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/turf_decal/tracks/wheels/bloody{ - dir = 4 - }, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"AL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/weed_node, -/turf/open/floor/marking/asteroidwarning, -/area/bigredv2/outside/se) -"AQ" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 4 - }, -/area/bigredv2/outside/office_complex) -"Bp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/wood, -/area/bigredv2/outside/office_complex) -"Bu" = ( -/obj/machinery/door_control{ - dir = 4; - id = "Office Complex 1"; - name = "Storm Shutters" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/obj/effect/landmark/weed_node, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 8 - }, -/area/bigredv2/outside/office_complex) -"BD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/green/hidden, -/obj/structure/cable, -/obj/effect/landmark/weed_node, -/obj/effect/turf_decal/tracks/wheels/bloody{ - dir = 4 - }, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"BF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"BH" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"BV" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/marking/asteroidwarning, -/area/bigredv2/outside/se) -"Ck" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tracks/wheels/bloody{ - dir = 4 - }, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"Cw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/obj/structure/cable, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 8 - }, -/area/bigredv2/outside/office_complex) -"CQ" = ( -/obj/structure/table, -/turf/open/floor/tile/dark, -/area/bigredv2/outside/office_complex) -"CT" = ( -/obj/structure/table, -/obj/effect/spawner/random/misc/paperbin, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"DD" = ( -/obj/effect/ai_node, -/turf/open/floor/asteroidfloor, -/area/bigredv2/outside/e) -"DV" = ( -/turf/open/floor/marking/asteroidwarning{ - dir = 8 - }, -/area/bigredv2/outside/e) -"Ea" = ( -/obj/machinery/atmospherics/components/unary/vent_pump{ - dir = 1; - on = 1 - }, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"Ei" = ( -/obj/structure/table, -/obj/machinery/computer3/laptop/secure_data, -/turf/open/floor/tile/white, -/area/bigredv2/outside/office_complex) -"El" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/mainship/generic{ - name = "\improper Office Complex Storage" - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"EF" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/door/poddoor/shutters/mainship{ - dir = 2; - id = "Office Complex 1"; - name = "\improper Office Complex Shutters" - }, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"EH" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/ai_node, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"Fb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"Fj" = ( -/obj/effect/landmark/corpsespawner/colonist, -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 4 - }, -/area/bigredv2/outside/office_complex) -"Fm" = ( -/turf/open/floor/marking/asteroidwarning{ - dir = 5 - }, -/area/bigredv2/outside/e) -"Fu" = ( -/obj/structure/flora/pottedplant, -/turf/open/floor/wood, -/area/bigredv2/outside/office_complex) -"FC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"FF" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tracks/wheels/bloody, -/obj/item/ammo_casing/bullet, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"FH" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 4 - }, -/area/bigredv2/outside/office_complex) -"FN" = ( -/obj/machinery/light, -/obj/effect/decal/cleanable/dirt, -/obj/effect/ai_node, -/turf/open/floor/tile/white, -/area/bigredv2/outside/office_complex) -"FW" = ( -/obj/structure/closet/jcloset, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"FY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc, -/obj/structure/cable, -/obj/effect/ai_node, -/turf/open/floor, -/area/bigredv2/outside/e) -"Gm" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 4 - }, -/area/bigredv2/outside/office_complex) -"GB" = ( -/obj/effect/landmark/weed_node, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"GD" = ( -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"GM" = ( -/turf/open/floor/asteroidfloor, -/area/bigredv2/outside/e) -"Hu" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/mainship/generic{ - dir = 1; - name = "\improper Private Office" - }, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"HV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/trash/eat, -/obj/effect/decal/cleanable/blood, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"Ia" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"If" = ( -/obj/structure/cable, -/obj/effect/ai_node, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 4 - }, -/area/bigredv2/outside/office_complex) -"Iu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"IH" = ( -/obj/effect/decal/cleanable/dirt, -/turf/closed/wall, -/area/bigredv2/outside/office_complex) -"IU" = ( -/obj/structure/sign/safety/breakroom, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"Jk" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"Jy" = ( -/turf/open/floor/tile/red/redtaupecorner{ - dir = 4 - }, -/area/bigredv2/outside/office_complex) -"JL" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 4 - }, -/obj/item/trash/cheesie, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"JT" = ( -/obj/structure/table, -/obj/item/trash/kepler, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"Kd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/paper, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"Km" = ( -/obj/structure/table, -/obj/machinery/microwave, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"Kt" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/spawner/random/misc/trash, -/obj/effect/turf_decal/tracks/wheels/bloody{ - dir = 4 - }, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"Kx" = ( -/turf/open/floor/asteroidfloor, -/area/bigredv2/outside/c) -"Lv" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/obj/effect/decal/cleanable/dirt, -/obj/item/ammo_casing/bullet, -/obj/effect/spawner/random/misc/folder/nooffset, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"LF" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/tile/dark, -/area/bigredv2/outside/office_complex) -"LG" = ( -/obj/machinery/door/poddoor/shutters/mainship{ - dir = 2; - id = "Office Complex 1"; - name = "\improper Office Complex Shutters" - }, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"LY" = ( -/obj/effect/landmark/corpsespawner/colonist, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"Md" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/bed/chair/comfy/black{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/weed_node, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"My" = ( -/turf/open/floor/marking/asteroidwarning{ - dir = 1 - }, -/area/bigredv2/outside/e) -"MN" = ( -/obj/machinery/door_control{ - dir = 4; - id = "Office Complex 1"; - name = "Storm Shutters" - }, -/obj/effect/landmark/weed_node, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 8 - }, -/area/bigredv2/outside/office_complex) -"Nq" = ( -/obj/machinery/atmospherics/pipe/manifold/green/hidden{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/turf_decal/tracks/wheels/bloody{ - dir = 5 - }, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"NG" = ( -/obj/structure/janitorialcart, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"NH" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/table, -/obj/item/storage/box/m94, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"NW" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 4 - }, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"Ok" = ( -/obj/structure/flora/pottedplant/ten, -/turf/open/floor/wood, -/area/bigredv2/outside/office_complex) -"Op" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 8 - }, -/area/bigredv2/outside/office_complex) -"ON" = ( -/obj/item/trash/raisins, -/turf/open/floor/tile/dark, -/area/bigredv2/outside/office_complex) -"Ph" = ( -/obj/effect/landmark/weed_node, -/turf/open/floor/plating/ground/mars/random/sand, -/area/bigredv2/outside/c) -"Pz" = ( -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"PG" = ( -/turf/open/floor/marking/asteroidwarning{ - dir = 4 - }, -/area/bigredv2/outside/se) -"PO" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/obj/machinery/door/airlock/multi_tile/mainship/generic{ - name = "\improper Office Complex Janitor Room" - }, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"PS" = ( -/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, -/obj/machinery/door/poddoor/shutters/mainship{ - id = "Office Complex 1"; - name = "\improper Office Complex Shutters" - }, -/turf/open/floor/plating, -/area/bigredv2/outside/office_complex) -"PX" = ( -/obj/effect/landmark/weed_node, -/turf/open/floor/tile/white, -/area/bigredv2/outside/office_complex) -"Qb" = ( -/obj/structure/table, -/obj/machinery/computer/pod/old{ - name = "Personal Computer" - }, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"Qd" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/item/paper/janitor, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"QF" = ( -/obj/effect/landmark/weed_node, -/obj/machinery/atmospherics/components/unary/vent_pump, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"QI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/docking_port/stationary/crashmode, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"QQ" = ( -/obj/structure/table, -/obj/machinery/computer3/laptop/secure_data, -/turf/open/floor/grimy, -/area/bigredv2/outside/office_complex) -"Rm" = ( -/obj/machinery/door/airlock/multi_tile/mainship/generic{ - name = "\improper Office Complex" - }, -/obj/machinery/door/poddoor/shutters/mainship{ - dir = 2; - id = "Office Complex 1"; - name = "\improper Office Complex Shutters" - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"Rq" = ( -/obj/effect/landmark/weed_node, -/turf/open/floor/marking/asteroidwarning{ - dir = 4 - }, -/area/bigredv2/outside/e) -"Rs" = ( -/obj/effect/landmark/weed_node, -/turf/open/floor/wood, -/area/bigredv2/outside/office_complex) -"RA" = ( -/obj/structure/table, -/obj/structure/flora/pottedplant/fifteen{ - pixel_y = 10 - }, -/turf/open/floor/grimy, -/area/bigredv2/outside/office_complex) -"RD" = ( -/obj/structure/bed/chair/office/light{ - dir = 1 - }, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"RT" = ( -/turf/open/floor/marking/asteroidwarning{ - dir = 8 - }, -/area/bigredv2/outside/c) -"RZ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/bigredv2/outside/office_complex) -"Sg" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/tile/dark, -/area/bigredv2/outside/office_complex) -"Sl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"Sq" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/marking/asteroidwarning, -/area/bigredv2/outside/c) -"Su" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/obj/machinery/door/airlock/multi_tile/mainship/generic{ - name = "\improper Robotics" - }, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"Sy" = ( -/obj/structure/table, -/obj/structure/sign/prop3, -/obj/effect/landmark/weed_node, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"SC" = ( -/turf/open/floor/marking/asteroidwarning, -/area/bigredv2/outside/c) -"SE" = ( -/obj/effect/decal/cleanable/blood/gibs/down, -/turf/open/floor/tile/dark, -/area/bigredv2/outside/office_complex) -"Tr" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/obj/structure/cable, -/obj/item/ammo_casing/cartridge, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 8 - }, -/area/bigredv2/outside/office_complex) -"Un" = ( -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/floor/marking/asteroidwarning, -/area/bigredv2/outside/c) -"Uw" = ( -/obj/machinery/door/airlock/mainship/generic{ - name = "\improper Private Office" - }, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"UR" = ( -/turf/open/floor/marking/asteroidwarning{ - dir = 1 - }, -/area/bigredv2/outside/c) -"UY" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/tile/white, -/area/bigredv2/outside/office_complex) -"Vh" = ( -/turf/open/floor/plating/ground/mars/dirttosand/autosmooth{ - dir = 1 - }, -/area/bigredv2/outside/e) -"Vk" = ( -/obj/structure/table, -/obj/item/paper, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"Vp" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/ai_node, -/obj/effect/landmark/weed_node, -/obj/effect/turf_decal/tracks/wheels/bloody{ - dir = 4 - }, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"VR" = ( -/obj/machinery/atmospherics/pipe/simple/green/hidden{ - dir = 4 - }, -/obj/effect/landmark/weed_node, -/turf/open/floor/tile/red/redtaupecorner, -/area/bigredv2/outside/office_complex) -"Wg" = ( -/obj/machinery/door/poddoor/shutters/mainship{ - id = "Office Complex 1"; - name = "\improper Office Complex Shutters" - }, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"Wq" = ( -/obj/machinery/atmospherics/components/unary/vent_pump{ - dir = 4; - on = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/tile/dark, -/area/bigredv2/outside/office_complex) -"Ws" = ( -/obj/machinery/photocopier, -/turf/open/floor/tile/white, -/area/bigredv2/outside/office_complex) -"Ww" = ( -/obj/effect/ai_node, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 4 - }, -/area/bigredv2/outside/office_complex) -"WQ" = ( -/obj/effect/landmark/excavation_site_spawner, -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"Xo" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/ammo_casing/bullet, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"XX" = ( -/obj/machinery/air_alarm{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/tile/red/redtaupecorner{ - dir = 8 - }, -/area/bigredv2/outside/office_complex) -"Yf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/power/apc/drained, -/turf/open/floor/wood, -/area/bigredv2/outside/office_complex) -"Yq" = ( -/turf/open/floor/tile/whiteyellow/full, -/area/bigredv2/outside/office_complex) -"Ys" = ( -/obj/structure/bed/chair/comfy/lime{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"Yv" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/landmark/start/job/survivor, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"YB" = ( -/turf/open/floor/tile/white, -/area/bigredv2/outside/office_complex) -"YQ" = ( -/obj/machinery/door/airlock/mainship/generic{ - name = "\improper Private Office" - }, -/obj/structure/cable, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"Za" = ( -/obj/structure/table, -/obj/item/paper, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"Zi" = ( -/obj/item/taperecorder, -/obj/effect/landmark/weed_node, -/turf/open/floor/tile/white, -/area/bigredv2/outside/office_complex) -"Zp" = ( -/obj/machinery/door/airlock/multi_tile/mainship/generic{ - dir = 1; - name = "\improper Office Complex" - }, -/obj/machinery/door/poddoor/shutters/mainship{ - id = "Office Complex 1"; - name = "\improper Office Complex Shutters" - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor, -/area/bigredv2/outside/office_complex) -"Zu" = ( -/turf/closed/wall, -/area/bigredv2/outside/office_complex) -"ZQ" = ( -/obj/machinery/prop/autolathe, -/turf/open/floor/tile/white, -/area/bigredv2/outside/office_complex) - -(1,1,1) = {" -pO -yd -yd -bb -RT -RT -RT -in -RT -RT -RT -in -RT -RT -RT -in -RT -RT -RT -in -vU -yd -yd -"} -(2,1,1) = {" -pO -yd -yd -UR -Kx -Kx -Kx -Kx -Zu -Zu -Zu -Zu -Zu -Zu -Zu -PS -PS -PS -Zu -Zu -SC -yd -yd -"} -(3,1,1) = {" -gP -yd -yd -UR -Kx -Kx -Kx -Kx -Zu -YB -Ws -Ws -ZQ -Zu -rf -CQ -hP -CQ -az -Zu -SC -yd -yd -"} -(4,1,1) = {" -pO -yd -yd -UR -Zu -IH -IH -Zu -IH -pH -gW -fy -YB -Zu -CQ -ON -LF -LF -iB -qR -ga -yd -yd -"} -(5,1,1) = {" -pO -yd -yd -UR -Zu -ch -Vk -RD -IH -sb -UY -pH -FN -Zu -hL -hP -SE -ns -hP -ds -Un -yd -yd -"} -(6,1,1) = {" -pO -yd -yd -UR -uj -GB -GB -GD -du -YB -ne -sw -Zi -Zu -Wq -LF -uh -hP -hE -qR -SC -yd -Ph -"} -(7,1,1) = {" -gP -yd -yd -UR -Zu -Zu -Zu -td -IH -PX -lJ -wP -Ei -Zu -ni -hP -hP -do -Sg -Zu -Sq -yd -yd -"} -(8,1,1) = {" -pO -yd -yd -UR -Zu -ch -Vk -RD -Zu -Uw -Zu -Zu -Zu -Zu -El -Zu -Zu -Zu -Zu -Zu -IH -Zu -Zu -"} -(9,1,1) = {" -pO -yd -yd -UR -uj -GB -GD -GD -wz -gs -Ys -tz -Zu -jw -kL -cd -cd -cd -Tr -pf -Cw -yR -yh -"} -(10,1,1) = {" -xY -yd -yd -UR -Zu -Zu -IH -IH -Zu -GD -vu -GD -Zu -fu -um -sO -gy -ht -fr -Pz -iQ -EF -dv -"} -(11,1,1) = {" -Ph -yd -yd -UR -Zu -ch -Vk -RD -Zu -ao -Lv -qd -Su -gw -av -Zu -Zu -YQ -Zu -Zu -Zu -Zu -Zu -"} -(12,1,1) = {" -Zu -Zu -Zu -Zu -Zu -GB -QF -zw -fw -pV -GB -zq -GD -Jy -EH -Zu -Yf -eV -yD -Rs -Ok -Zu -iH -"} -(13,1,1) = {" -Zu -sL -kt -Km -Zu -Zu -Zu -Zu -Zu -Zu -Zu -Zu -Zu -Gm -Af -Zu -yD -jj -RZ -Bp -yD -qR -BV -"} -(14,1,1) = {" -ro -FC -FC -yg -yh -yh -ui -ic -Op -Op -yh -Bu -yh -Iu -BD -Zu -bS -iX -bY -RZ -RZ -Zu -AL -"} -(15,1,1) = {" -LG -GD -LY -zq -sO -Sl -sO -ur -ms -Jk -sO -sO -qL -cj -le -Zu -QQ -xQ -pA -Rs -yD -qR -BV -"} -(16,1,1) = {" -qR -Xo -HV -IU -Zu -Zu -Zu -Zu -Zu -Zu -Zu -Zu -Zu -AQ -Kt -Zu -RA -mG -ld -yD -Fu -Zu -BV -"} -(17,1,1) = {" -Zu -xx -Md -uD -Zu -ch -Za -RD -Zu -ql -ql -Sy -Zu -Jy -Ck -Zu -Zu -Zu -Zu -Zu -Zu -Zu -iH -"} -(18,1,1) = {" -Zu -Zu -Zu -Zu -Zu -GD -dC -GD -wz -zq -tE -BH -Zu -FH -Vp -cM -XX -hl -MN -my -ks -Rm -cE -"} -(19,1,1) = {" -Vh -My -pe -DD -Zu -rE -Zu -Zu -Zu -FY -ke -BF -Hu -If -Nq -FF -ey -FF -sy -ye -iQ -LG -iH -"} -(20,1,1) = {" -px -My -GM -GM -qR -ch -Za -RD -Zu -zq -GD -ak -Zu -je -JL -Zu -Zu -Zu -Zu -Zu -Zu -Zu -iH -"} -(21,1,1) = {" -DV -My -GM -GM -Zu -GB -Yv -GD -wz -LY -ya -zu -Zu -Fj -NW -Zu -bQ -Yq -NH -JT -Qd -Zu -BV -"} -(22,1,1) = {" -dX -My -GM -GM -Zu -Zu -Zu -Zu -Zu -GD -QI -BH -Zu -es -VR -Zu -bQ -WQ -tQ -nZ -nR -Zu -AL -"} -(23,1,1) = {" -px -My -pe -GM -Zu -GD -LY -GB -wz -tE -zq -BH -Zu -fu -NW -Zu -NG -Ia -dk -nZ -Ia -hk -BV -"} -(24,1,1) = {" -Vh -My -GM -GM -qR -ch -kU -RD -Zu -Zu -Uw -Zu -Zu -Ww -zm -PO -Fb -Fb -Ea -tO -nZ -LG -BV -"} -(25,1,1) = {" -Vh -My -GM -GM -Zu -Zu -Zu -Zu -Zu -CT -GB -GD -Zu -Jy -iQ -Yq -Yq -nZ -tQ -Kd -wq -Zu -iH -"} -(26,1,1) = {" -Vh -My -GM -DD -GM -GM -GM -GM -Zu -Qb -wj -zq -Zu -Jy -mi -Zu -wO -wO -Yq -wG -FW -Zu -cE -"} -(27,1,1) = {" -Vh -My -pe -GM -GM -GM -GM -GM -Zu -Zu -Zu -Zu -Zu -Wg -Zp -Zu -Zu -Zu -Zu -Zu -Zu -Zu -iH -"} -(28,1,1) = {" -Vh -Fm -dX -dX -dX -dX -Rq -dX -dX -dX -Rq -dX -PG -PG -PG -dp -PG -PG -PG -dp -PG -PG -hS -"} diff --git a/_maps/modularmaps/big_red/bigredsouthwestetavar4.dmm b/_maps/modularmaps/big_red/bigredsouthwestetavar4.dmm index d85d6ca7df721..70719334ae1d5 100644 --- a/_maps/modularmaps/big_red/bigredsouthwestetavar4.dmm +++ b/_maps/modularmaps/big_red/bigredsouthwestetavar4.dmm @@ -11,12 +11,6 @@ dir = 1 }, /area/bigredv2/outside/nanotrasen_lab/inside) -"aF" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/plating/ground/mars/random/cave, -/area/bigredv2/caves/south) "bp" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; @@ -3022,7 +3016,7 @@ dO IX vo IX -aF +IX dO dO Jd diff --git a/_maps/modularmaps/jungle_outpost/joutpostengi1.dmm b/_maps/modularmaps/jungle_outpost/joutpostengi1.dmm new file mode 100644 index 0000000000000..f20283d66c367 --- /dev/null +++ b/_maps/modularmaps/jungle_outpost/joutpostengi1.dmm @@ -0,0 +1,1063 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aS" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"aW" = ( +/obj/structure/platform{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"bi" = ( +/obj/effect/landmark/campaign_structure/phoron_crate, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"cf" = ( +/obj/machinery/door/airlock/mainship/engineering/free_access{ + name = "\improper Engineering Dome" + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"cS" = ( +/obj/machinery/door/airlock/mainship/engineering/free_access{ + dir = 1; + name = "\improper Engineering Dome" + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"dn" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"dE" = ( +/obj/effect/spawner/random/engineering/structure/tank/fuelweighted, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"dX" = ( +/obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"fT" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"gp" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"gN" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"gW" = ( +/obj/effect/spawner/random/misc/structure/closet/electrical, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"hk" = ( +/obj/machinery/power/smes/buildable/empty{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"ia" = ( +/turf/open/ground/grass/beach{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"id" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"is" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2/corner2, +/area/campaign/jungle_outpost/ground/jungle/east) +"iI" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"iV" = ( +/obj/machinery/power/smes/buildable/empty{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"jJ" = ( +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"jL" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"jS" = ( +/obj/structure/rock/variable/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"jW" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"lC" = ( +/obj/machinery/power/monitor, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"lD" = ( +/obj/machinery/light, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"lU" = ( +/obj/structure/bookcase, +/obj/item/book/manual/engineering_singularity_safety, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"mt" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"nb" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"oM" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"pa" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/engineering/tool, +/obj/machinery/vending/nanomed, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"pp" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"pG" = ( +/obj/structure/stairs/railstairs_vert{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle/east) +"qa" = ( +/obj/structure/reagent_dispensers/fueltank/barrel, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"qg" = ( +/obj/machinery/power/apc/drained, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"qx" = ( +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle/east) +"rR" = ( +/obj/effect/spawner/random/misc/structure/closet/welding, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"sh" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2, +/area/campaign/jungle_outpost/ground/jungle/east) +"sm" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"su" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/engibelt, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"th" = ( +/obj/item/trash/chips, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"tD" = ( +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/east) +"ub" = ( +/obj/machinery/power/monitor{ + name = "Main Power Grid Monitoring" + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"vA" = ( +/turf/open/floor/plating/ground/dirt2, +/area/campaign/jungle_outpost/ground/jungle/east) +"wu" = ( +/obj/structure/largecrate/random/barrel/yellow, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"wH" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/misc/folder/nooffset, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"xs" = ( +/obj/structure/bed/stool, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"xG" = ( +/obj/structure/flora/tree/jungle, +/obj/structure/platform_decoration{ + dir = 5 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"zd" = ( +/obj/structure/closet/radiation, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"zI" = ( +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"zK" = ( +/obj/structure/bookcase, +/obj/item/book/manual/atmospipes, +/obj/machinery/light, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Au" = ( +/obj/effect/spawner/random/misc/structure/flavorvending/coffeeweighted, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"AZ" = ( +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"BU" = ( +/obj/effect/spawner/random/engineering/structure/powergenerator/superweighted, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"CA" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/engineering) +"CI" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"CO" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"Dp" = ( +/obj/structure/platform_decoration{ + dir = 5 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"DI" = ( +/turf/closed/gm/dense, +/area/campaign/jungle_outpost/ground/jungle/east) +"DM" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/structure/handheld_lighting, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"DQ" = ( +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"Eo" = ( +/obj/structure/rack, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Er" = ( +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"EL" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/jungle_outpost/ground/jungle/east) +"FR" = ( +/obj/structure/platform{ + dir = 10 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"FS" = ( +/obj/structure/stairs/edge, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle/east) +"Go" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Gx" = ( +/obj/structure/stairs/railstairs_vert{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"Ho" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Hy" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"HG" = ( +/obj/structure/flora/tree/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"IJ" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/engineering/toolbox, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"IV" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"JE" = ( +/obj/structure/platform{ + dir = 9 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"Kf" = ( +/obj/structure/bookcase, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Kr" = ( +/obj/effect/spawner/random/misc/structure/closet/welding, +/obj/machinery/light, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"KC" = ( +/obj/structure/rock/variable/jungle/big, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"KG" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Lo" = ( +/obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, +/obj/structure/platform{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Lq" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Mc" = ( +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/engineering) +"Mr" = ( +/obj/effect/spawner/random/misc/structure/flavorvending/snackweighted, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"MH" = ( +/obj/effect/spawner/random/misc/structure/closet/tool, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Nq" = ( +/obj/effect/spawner/random/misc/structure/flavorvending/engitool, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Nv" = ( +/obj/effect/spawner/random/misc/structure/flavorvending/engivend, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Nw" = ( +/obj/structure/stairs/edge{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"NE" = ( +/obj/machinery/door/airlock/mainship/engineering/free_access{ + name = "\improper Engineering Dome" + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"NJ" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/misc/earmuffs, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Ov" = ( +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"OQ" = ( +/obj/structure/table/reinforced, +/obj/item/radio/survivor, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Pe" = ( +/obj/structure/platform, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"Qk" = ( +/obj/structure/platform{ + dir = 1 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"QW" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"QY" = ( +/obj/machinery/power/geothermal, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Rc" = ( +/obj/structure/cable, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/engineering) +"Rr" = ( +/obj/structure/table/reinforced, +/obj/item/assembly/prox_sensor, +/obj/item/tool/multitool, +/obj/item/clothing/head/hardhat/orange, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"RW" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/floor/plating/ground/dirtgrassborder2/corner2, +/area/campaign/jungle_outpost/ground/jungle/east) +"SI" = ( +/obj/machinery/door/airlock/mainship/engineering/free_access{ + dir = 1; + name = "\improper Engineering Dome" + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"SR" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"Ty" = ( +/obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, +/obj/structure/platform, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Vc" = ( +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"Vw" = ( +/obj/structure/table/reinforced, +/obj/item/t_scanner, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Xb" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"Xe" = ( +/obj/structure/platform{ + dir = 6 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"XM" = ( +/obj/structure/platform{ + dir = 5 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"Yn" = ( +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"Yz" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"YG" = ( +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Za" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/powercell, +/obj/effect/spawner/random/engineering/powercell, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Zn" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"ZG" = ( +/obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"ZU" = ( +/obj/machinery/vending/engineering, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"ZV" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) + +(1,1,1) = {" +DI +DI +nb +nb +EL +sm +sm +RW +vA +vA +Gx +CA +Mc +Rc +CA +pG +vA +id +DQ +CO +DI +"} +(2,1,1) = {" +DI +HG +nb +DQ +qx +SR +Yz +Yz +Yz +AZ +JE +dX +YG +fT +dX +FR +Er +Xb +DQ +DQ +DQ +"} +(3,1,1) = {" +DQ +DQ +DQ +DQ +qx +id +JE +ZG +ZG +ZG +Yn +su +YG +Lq +zK +Yn +ZG +ZG +FR +iI +DQ +"} +(4,1,1) = {" +sm +sm +sm +sm +sh +id +Qk +YG +YG +lD +Yn +pa +YG +Lq +YG +Rr +BU +BU +Ty +Vc +CO +"} +(5,1,1) = {" +Yz +Yz +Yz +oM +QW +Xb +Qk +QY +YG +QY +Yn +MH +YG +Lq +YG +xs +YG +IV +Ty +CO +CO +"} +(6,1,1) = {" +DQ +DQ +DQ +DQ +DQ +Ov +Qk +QY +YG +QY +Yn +rR +jW +Lq +YG +Eo +dE +gW +Ty +jJ +DQ +"} +(7,1,1) = {" +JE +Hy +Hy +Hy +Hy +Hy +Yn +QY +Lq +QY +Yn +Yn +Yn +Lq +ZV +Yn +Yn +Yn +Yn +FR +DI +"} +(8,1,1) = {" +Qk +wu +jL +YG +jL +qa +Yn +YG +Lq +YG +jL +YG +YG +Lq +YG +YG +OQ +IJ +YG +Ty +EL +"} +(9,1,1) = {" +Qk +wu +YG +th +YG +YG +SI +YG +Lq +Lq +Lq +Lq +Lq +Lq +Lq +Lq +Lq +YG +YG +SI +FS +"} +(10,1,1) = {" +Qk +BU +Ho +zI +YG +Mr +Yn +KG +dn +YG +YG +bi +lU +Kf +YG +Nv +Lq +jW +Au +Ty +qx +"} +(11,1,1) = {" +Qk +Yn +dX +dX +cf +Yn +Yn +Yn +Yn +Vw +YG +KG +Yn +Yn +Yn +Yn +NE +Yn +Yn +Xe +qx +"} +(12,1,1) = {" +Lo +YG +YG +YG +YG +jL +YG +pp +Yn +wH +YG +lD +Yn +Za +DM +YG +Lq +YG +Pe +xG +qx +"} +(13,1,1) = {" +gN +YG +YG +YG +YG +YG +YG +Kr +Yn +NJ +YG +YG +Yn +qg +Lq +Lq +Lq +YG +Pe +EL +sh +"} +(14,1,1) = {" +YG +YG +YG +QY +YG +QY +YG +rR +Yn +aS +Lq +Lq +cS +Lq +YG +Go +Go +Go +Ty +qx +SR +"} +(15,1,1) = {" +Lo +YG +zI +QY +YG +QY +YG +Nq +Yn +KG +Lq +KG +Yn +ub +jW +iV +hk +iV +Ty +qx +mt +"} +(16,1,1) = {" +Qk +CI +YG +QY +YG +QY +YG +Yn +Yn +dX +NE +dX +Yn +aW +aW +aW +aW +aW +Xe +qx +id +"} +(17,1,1) = {" +Qk +YG +YG +QY +YG +QY +lD +Yn +KG +YG +Lq +YG +Pe +Dp +DQ +DQ +DQ +DQ +iI +qx +Zn +"} +(18,1,1) = {" +Qk +lC +YG +Lq +Lq +Lq +Lq +cS +Lq +Lq +Lq +YG +Pe +DQ +DQ +DQ +DQ +DQ +DQ +qx +KC +"} +(19,1,1) = {" +Qk +Yn +KG +YG +YG +ZU +YG +Yn +Yn +zd +Yn +zd +Pe +DI +DQ +DQ +jS +CO +DQ +qx +id +"} +(20,1,1) = {" +XM +aW +aW +cf +aW +aW +aW +aW +aW +aW +aW +aW +Xe +DI +DQ +DQ +EL +sm +sm +is +id +"} +(21,1,1) = {" +tD +ia +EL +Nw +gp +DQ +nb +nb +DI +DI +DI +DI +DI +DI +DI +Vc +qx +SR +Yz +Yz +Xb +"} diff --git a/_maps/modularmaps/jungle_outpost/joutpostengi2.dmm b/_maps/modularmaps/jungle_outpost/joutpostengi2.dmm new file mode 100644 index 0000000000000..6df6eeb4dca3a --- /dev/null +++ b/_maps/modularmaps/jungle_outpost/joutpostengi2.dmm @@ -0,0 +1,1060 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ay" = ( +/turf/closed/gm/dense, +/area/campaign/jungle_outpost/ground/jungle/east) +"bg" = ( +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"bL" = ( +/obj/machinery/power/apc/drained{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"bR" = ( +/obj/structure/rock/variable/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"cH" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/obj/machinery/light, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"cP" = ( +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"ef" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"eg" = ( +/obj/structure/rack, +/obj/item/radio/survivor, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"fz" = ( +/obj/structure/closet/radiation, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"fQ" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering/glass{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"gr" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/jungle_outpost/ground/jungle/east) +"hh" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2/corner2, +/area/campaign/jungle_outpost/ground/jungle/east) +"iu" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/glasses/welding, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"jE" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"jN" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"ln" = ( +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"lD" = ( +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/east) +"lX" = ( +/obj/structure/table/reinforced, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"mT" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/obj/item/trash/cigbutt, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"of" = ( +/obj/structure/platform{ + dir = 6 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"om" = ( +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/engineering) +"os" = ( +/obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"pQ" = ( +/obj/structure/table/reinforced, +/obj/item/clipboard, +/obj/item/paper, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"qQ" = ( +/obj/structure/flora/tree/jungle, +/obj/structure/platform_decoration{ + dir = 5 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"rl" = ( +/obj/structure/stairs/railstairs_vert{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"sG" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"sH" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"tv" = ( +/obj/machinery/power/smes/buildable/empty{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"tA" = ( +/obj/structure/cable, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/engineering) +"tV" = ( +/turf/open/floor/plating/ground/dirt2, +/area/campaign/jungle_outpost/ground/jungle/east) +"un" = ( +/obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, +/obj/structure/platform, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"uv" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"vv" = ( +/obj/effect/spawner/random/misc/structure/closet/electrical, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"vC" = ( +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"we" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"ww" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"wI" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"wQ" = ( +/obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, +/obj/structure/platform{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"xi" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"xF" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"xH" = ( +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"xQ" = ( +/obj/effect/spawner/random/misc/structure/closet/welding, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"xV" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"yf" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/engineering/powercell, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"yg" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"ys" = ( +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"yD" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"yL" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"Ah" = ( +/obj/structure/bed/stool, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Al" = ( +/obj/structure/platform{ + dir = 9 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"AE" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"AO" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"AX" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/engineering) +"Cm" = ( +/turf/open/ground/grass/beach{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"CN" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/misc/book, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"CU" = ( +/obj/structure/table/reinforced, +/obj/item/t_scanner, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"DX" = ( +/obj/machinery/power/smes/buildable/empty{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"EA" = ( +/obj/effect/spawner/random/misc/structure/closet/tool, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"EF" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"FE" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/floor/plating/ground/dirtgrassborder2/corner2, +/area/campaign/jungle_outpost/ground/jungle/east) +"FI" = ( +/obj/structure/rock/variable/jungle/big, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"Gp" = ( +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle/east) +"Ht" = ( +/obj/machinery/door/airlock/glass_engineering, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"HA" = ( +/obj/structure/table/reinforced, +/obj/item/book/manual/atmospipes, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Ia" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"IJ" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"IM" = ( +/obj/structure/cable, +/obj/structure/rack, +/obj/effect/spawner/random/engineering/engibelt, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"IT" = ( +/obj/machinery/door/airlock/mainship/engineering/free_access{ + name = "\improper Engineering Dome" + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Jp" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"JB" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"JF" = ( +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"JS" = ( +/obj/structure/stairs/edge, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle/east) +"Lp" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"Ly" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/misc/folder/nooffset, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"LC" = ( +/obj/machinery/light, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"LN" = ( +/obj/structure/stairs/edge{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"LW" = ( +/obj/structure/bed/stool, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Mn" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/misc/earmuffs, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Ne" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2, +/area/campaign/jungle_outpost/ground/jungle/east) +"Nh" = ( +/obj/machinery/door/airlock/mainship/engineering/free_access{ + dir = 1; + name = "\improper Engineering Dome" + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Nn" = ( +/obj/structure/closet/radiation, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"NE" = ( +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"NJ" = ( +/obj/effect/spawner/random/engineering/structure/powergenerator/superweighted, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"NL" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/head/hardhat/orange, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"OF" = ( +/obj/structure/platform{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"OM" = ( +/obj/effect/landmark/campaign_structure/phoron_crate, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"OV" = ( +/obj/structure/sign/nosmoking_1{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"PR" = ( +/obj/effect/spawner/random/misc/structure/closet/welding, +/obj/machinery/light, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"PT" = ( +/obj/machinery/door/airlock/glass_engineering{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Qm" = ( +/obj/structure/stairs/railstairs_vert{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle/east) +"QD" = ( +/obj/structure/flora/tree/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"QV" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"QZ" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"RO" = ( +/obj/structure/platform{ + dir = 5 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"Sa" = ( +/obj/structure/platform_decoration{ + dir = 5 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"St" = ( +/obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"ST" = ( +/obj/effect/spawner/random/misc/structure/fire_closet, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Ti" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"Uh" = ( +/obj/machinery/door/airlock/mainship/engineering/free_access{ + name = "\improper Engineering Dome" + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Uu" = ( +/obj/machinery/power/monitor{ + name = "Main Power Grid Monitoring" + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"UX" = ( +/obj/effect/spawner/random/engineering/structure/tank/fuelweighted, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Vc" = ( +/obj/machinery/door/airlock/glass_engineering{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Vq" = ( +/obj/machinery/power/geothermal, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Wn" = ( +/obj/structure/platform{ + dir = 1 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"Wu" = ( +/obj/structure/table/reinforced, +/obj/item/tool/multitool, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Xm" = ( +/obj/effect/spawner/random/misc/structure/flavorvending/engitool, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Yn" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"YT" = ( +/obj/structure/platform{ + dir = 10 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"ZJ" = ( +/obj/structure/platform, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) + +(1,1,1) = {" +ay +ay +we +we +gr +yL +yL +FE +tV +tV +rl +AX +om +tA +AX +Qm +tV +AO +ys +Lp +ay +"} +(2,1,1) = {" +ay +QD +we +ys +Gp +QZ +jE +jE +jE +NE +Al +St +vC +wI +St +YT +xH +Ti +ys +ys +ys +"} +(3,1,1) = {" +ys +ys +ys +ys +Gp +AO +Al +sG +sG +sG +cP +Nn +vC +Ia +EA +cP +os +os +YT +QV +ys +"} +(4,1,1) = {" +yL +yL +yL +yL +Ne +AO +Wn +NJ +JB +vv +cP +fz +vC +Ia +PR +cP +pQ +Uu +un +ln +Lp +"} +(5,1,1) = {" +jE +jE +jE +IJ +AE +Ti +Wn +NJ +vC +LC +cP +vC +vC +Ia +ST +St +mT +vC +un +Lp +Lp +"} +(6,1,1) = {" +ys +ys +ys +ys +ys +bg +Wn +UX +vC +vC +Ia +Ia +sH +Ia +vC +St +OV +vC +un +JF +ys +"} +(7,1,1) = {" +Al +sG +sG +sG +sG +sG +cP +cP +vC +vC +Ia +iu +Mn +vC +vC +cP +cP +Uh +cP +YT +ay +"} +(8,1,1) = {" +Wn +Xm +vC +Jp +vC +vC +vC +cP +St +vC +fQ +St +cP +vC +vC +vC +Nh +vC +ST +un +gr +"} +(9,1,1) = {" +Wn +xQ +vC +Vq +vC +Vq +vC +St +Wu +vC +Ia +NL +cP +St +cP +cP +cP +yg +vC +Nh +JS +"} +(10,1,1) = {" +Wn +xQ +vC +Vq +vC +Vq +vC +St +vC +vC +Ia +jN +cP +yf +yD +uv +eg +vC +vC +un +Gp +"} +(11,1,1) = {" +Wn +xF +vC +Vq +vC +Vq +vC +St +vC +OM +Ia +vC +Vc +vC +vC +vC +vC +vC +cP +of +Gp +"} +(12,1,1) = {" +wQ +vC +Ia +Vq +Ia +Vq +LC +cP +yg +vC +Ia +cH +cP +vC +Vq +Ia +Vq +vC +ZJ +qQ +Gp +"} +(13,1,1) = {" +xV +vC +Ia +vC +vC +vC +vC +cP +UX +vC +Ia +jN +cP +yg +Vq +vC +Vq +LC +ZJ +gr +Ne +"} +(14,1,1) = {" +vC +vC +IM +xF +vC +cP +cP +cP +St +St +IT +St +cP +vC +Vq +vC +Vq +vC +un +Gp +QZ +"} +(15,1,1) = {" +wQ +vC +Ia +Ia +Ia +PT +Ia +Ia +Ia +Ia +Ia +Ia +PT +Ia +Ia +OV +vC +vC +un +Gp +EF +"} +(16,1,1) = {" +Wn +St +Ht +St +cP +cP +yg +LW +CN +CU +LW +LC +cP +OF +OF +OF +OF +OF +of +Gp +AO +"} +(17,1,1) = {" +Wn +Uu +Ia +vC +bL +St +vC +Ah +lX +HA +LW +vC +un +Sa +ys +ys +ys +ys +QV +Gp +Yn +"} +(18,1,1) = {" +Wn +ww +xi +xi +Ia +Vc +vC +LW +Ly +lX +LW +vC +un +ys +ys +ys +ys +ys +ys +Gp +FI +"} +(19,1,1) = {" +Wn +DX +tv +DX +vC +St +vC +vC +OV +ef +vC +vC +ZJ +ay +ys +ys +bR +Lp +ys +Gp +AO +"} +(20,1,1) = {" +RO +OF +OF +OF +Uh +OF +OF +OF +OF +OF +OF +OF +of +ay +ys +ys +gr +yL +yL +hh +AO +"} +(21,1,1) = {" +lD +Cm +gr +yL +LN +ys +we +we +ay +ay +ay +ay +ay +ay +ay +ln +Gp +QZ +jE +jE +Ti +"} diff --git a/_maps/modularmaps/jungle_outpost/joutpostengi3.dmm b/_maps/modularmaps/jungle_outpost/joutpostengi3.dmm new file mode 100644 index 0000000000000..c2c4fdd0130d3 --- /dev/null +++ b/_maps/modularmaps/jungle_outpost/joutpostengi3.dmm @@ -0,0 +1,1238 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ar" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"bi" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"bq" = ( +/obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, +/obj/structure/platform, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"ci" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"cl" = ( +/obj/structure/catwalk, +/turf/open/ground/grass/beach{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"cx" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering/glass, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"cO" = ( +/obj/structure/rack, +/obj/item/radio/survivor, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"dt" = ( +/obj/structure/stairs/railstairs_vert{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle/east) +"dD" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"dS" = ( +/obj/structure/platform{ + dir = 6 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"ee" = ( +/obj/structure/rock/variable/jungle/big, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/east) +"eC" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/east) +"eD" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"fJ" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"ga" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 1 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"gy" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 5 + }, +/turf/open/ground/grass/beach{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"hB" = ( +/obj/structure/platform{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"hZ" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"ir" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/engibelt, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"iP" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"jm" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 5 + }, +/turf/open/ground/grass/beach{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"js" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 9 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"jE" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"ke" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 6 + }, +/obj/machinery/floodlight/colony, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"kn" = ( +/obj/structure/stairs/railstairs_vert{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"ko" = ( +/obj/effect/spawner/random/misc/structure/flavorvending/engivend, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"kS" = ( +/obj/structure/platform_decoration{ + dir = 9 + }, +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"lu" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"lw" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/ground/grass/beach{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"ly" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/engineering) +"lN" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/jungle_outpost/ground/jungle/east) +"my" = ( +/obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"nk" = ( +/obj/structure/cable, +/obj/structure/table/reinforced, +/obj/effect/spawner/random/misc/folder/nooffset, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"nl" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"nn" = ( +/obj/structure/stairs/seamless/edge, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"oS" = ( +/obj/structure/catwalk, +/turf/open/ground/grass/beach, +/area/campaign/jungle_outpost/ground/jungle/east) +"pn" = ( +/obj/structure/cable, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/engineering) +"qv" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"rr" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"rP" = ( +/obj/structure/catwalk, +/obj/structure/reagent_dispensers/fueltank/barrel, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/east) +"sd" = ( +/turf/open/ground/grass/beach{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"sf" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"sj" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"sr" = ( +/obj/machinery/light, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"sz" = ( +/obj/effect/spawner/random/misc/structure/closet/tool, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"tx" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"tG" = ( +/obj/effect/spawner/random/engineering/structure/powergenerator/superweighted, +/obj/machinery/light, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"tY" = ( +/obj/structure/catwalk, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/east) +"up" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/jungle_outpost/ground/jungle/east) +"ur" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering/glass{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"vO" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"vP" = ( +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle/east) +"wA" = ( +/obj/machinery/power/geothermal, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"wT" = ( +/obj/structure/platform, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"xl" = ( +/obj/structure/catwalk, +/obj/structure/largecrate/random/barrel, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/east) +"xm" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"xC" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"xV" = ( +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/beach{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"yB" = ( +/obj/effect/landmark/campaign_structure/phoron_crate, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"yL" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"zy" = ( +/obj/structure/catwalk, +/obj/structure/cable, +/turf/open/ground/grass/beach{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"zA" = ( +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Ab" = ( +/turf/open/ground/grass/beach{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"Ad" = ( +/obj/machinery/power/smes/buildable/empty{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"AL" = ( +/obj/structure/platform_decoration{ + dir = 6 + }, +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"AY" = ( +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"Bd" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"Bf" = ( +/obj/structure/table/reinforced, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Bu" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"Cs" = ( +/obj/structure/table/reinforced, +/obj/item/t_scanner, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"CG" = ( +/obj/structure/platform{ + dir = 10 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"DA" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"DV" = ( +/turf/closed/gm/dense, +/area/campaign/jungle_outpost/ground/jungle/east) +"Ep" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/jungle_outpost/ground/jungle/east) +"Fb" = ( +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/engineering) +"Fd" = ( +/obj/structure/closet/radiation, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Fi" = ( +/obj/structure/stairs/seamless/edge{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"Ga" = ( +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"Gg" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/ground/grass/beach, +/area/campaign/jungle_outpost/ground/jungle/east) +"GA" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"GX" = ( +/obj/structure/table/reinforced, +/obj/item/book/manual/atmospipes, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Hx" = ( +/obj/structure/cable, +/obj/structure/table/reinforced, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Ia" = ( +/obj/effect/spawner/random/misc/structure/closet/electrical, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Ie" = ( +/obj/effect/spawner/random/misc/structure/fire_closet, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Ir" = ( +/obj/machinery/power/geothermal, +/obj/structure/cable, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Iu" = ( +/obj/effect/spawner/random/misc/structure/flavorvending/engitool, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"IA" = ( +/obj/machinery/power/monitor{ + name = "Main Power Grid Monitoring" + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"IB" = ( +/obj/structure/rock/variable/jungle/big, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"IT" = ( +/obj/structure/platform_decoration{ + dir = 10 + }, +/obj/structure/flora/jungle/grass/thin, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/east) +"IY" = ( +/obj/structure/platform{ + dir = 1 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"Jd" = ( +/obj/structure/platform_decoration{ + dir = 10 + }, +/turf/closed/gm/dense, +/area/campaign/jungle_outpost/ground/jungle/east) +"Jv" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"Jw" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2, +/area/campaign/jungle_outpost/ground/jungle/east) +"JC" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 4 + }, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/east) +"JT" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Kn" = ( +/turf/open/floor/plating/ground/dirt2, +/area/campaign/jungle_outpost/ground/jungle/east) +"KA" = ( +/obj/structure/cable, +/obj/structure/table/reinforced, +/obj/effect/spawner/random/misc/earmuffs, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"KG" = ( +/obj/structure/platform_decoration{ + dir = 6 + }, +/obj/structure/flora/jungle/large_bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"LB" = ( +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"LX" = ( +/obj/structure/catwalk, +/turf/open/ground/grass/beach{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"Ma" = ( +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"Mr" = ( +/obj/effect/spawner/random/misc/structure/broken_reinforced_window/colonyspawn, +/obj/structure/platform{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"MS" = ( +/obj/structure/catwalk, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"Nm" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 4 + }, +/turf/open/ground/grass/beach, +/area/campaign/jungle_outpost/ground/jungle/east) +"NJ" = ( +/obj/structure/cable, +/obj/structure/table/reinforced, +/obj/effect/spawner/random/misc/trash, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"NL" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"NQ" = ( +/obj/structure/table/reinforced, +/obj/item/clipboard, +/obj/item/paper, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Oj" = ( +/obj/structure/catwalk, +/obj/structure/cable, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/east) +"OU" = ( +/turf/open/ground/grass/beach/corner{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"Pm" = ( +/obj/structure/cable, +/obj/structure/table/reinforced, +/obj/effect/spawner/random/engineering/powercell, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Po" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"PD" = ( +/obj/structure/catwalk, +/obj/structure/platform, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"Ri" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"RE" = ( +/obj/structure/platform{ + dir = 9 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"RH" = ( +/obj/machinery/door/airlock/multi_tile/mainship/engineering/glass{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"RQ" = ( +/obj/effect/spawner/random/misc/structure/closet/welding, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"SM" = ( +/obj/structure/stairs/seamless/edge_vert, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"Tc" = ( +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/east) +"Um" = ( +/obj/structure/rock/variable/jungle/big, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"Un" = ( +/obj/structure/catwalk, +/obj/structure/cable, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"UH" = ( +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"UK" = ( +/obj/machinery/power/geothermal, +/obj/structure/cable, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"UY" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle/east) +"Vt" = ( +/obj/structure/stairs/seamless/edge{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/jungle_outpost/ground/jungle/east) +"VL" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"Wn" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirt2, +/area/campaign/jungle_outpost/ground/jungle/east) +"Xm" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Xq" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/east) +"Ye" = ( +/obj/structure/catwalk, +/turf/open/ground/grass/beach/corner{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) +"Yf" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"Ym" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"YK" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/tile/dark, +/area/campaign/jungle_outpost/outpost/engineering) +"YP" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2/corner2, +/area/campaign/jungle_outpost/ground/jungle/east) +"Zb" = ( +/obj/structure/platform{ + dir = 5 + }, +/turf/closed/wall/r_wall, +/area/campaign/jungle_outpost/outpost/engineering) +"ZF" = ( +/obj/structure/stairs/seamless/edge{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/east) + +(1,1,1) = {" +DV +DV +Xq +Xq +AY +UH +Ep +YP +Kn +Kn +kn +ly +Fb +pn +ly +dt +Kn +ci +hZ +rr +DV +"} +(2,1,1) = {" +DV +RE +my +my +my +CG +vP +VL +yL +Ma +RE +Ga +zA +RH +Ga +CG +LB +yL +fJ +sf +UH +"} +(3,1,1) = {" +IB +IY +xC +zA +Ia +wT +Fi +nn +KG +RE +Ga +Fd +zA +qv +Ie +Ga +CG +kS +vP +sf +UH +"} +(4,1,1) = {" +SM +cx +qv +zA +RQ +Ga +MS +MS +Po +Ga +YK +zA +zA +qv +zA +lu +Ga +CG +Fi +nn +Bu +"} +(5,1,1) = {" +GA +zA +qv +zA +zA +DA +cl +cl +Ga +Yf +zA +qv +Hx +nk +zA +zA +tG +Ga +MS +PD +DV +"} +(6,1,1) = {" +Bu +IY +ar +vO +vO +qv +Oj +Oj +sj +qv +qv +Hx +Ga +Ga +NQ +zA +zA +cx +MS +PD +DV +"} +(7,1,1) = {" +UH +IY +Ad +Ad +Ad +Ga +tY +tY +zA +zA +zA +KA +Ga +Ga +Bf +zA +zA +zA +MS +PD +DV +"} +(8,1,1) = {" +UH +IY +Ga +Ga +Ga +Ga +tY +tY +Ga +cO +zA +qv +NJ +Hx +zA +zA +tG +Ga +MS +PD +lN +"} +(9,1,1) = {" +AL +ga +MS +oS +tY +tY +tY +tY +Ga +Ga +yB +zA +zA +qv +zA +sz +Ga +Ga +MS +PD +vP +"} +(10,1,1) = {" +js +MS +MS +oS +tY +tY +tY +tY +rP +Ga +Ga +Iu +zA +qv +ko +Ga +Ga +MS +MS +PD +vP +"} +(11,1,1) = {" +ga +MS +Ga +Ga +Ga +Ga +tY +tY +xl +xl +Ga +Ga +zA +tx +Ga +Ga +MS +MS +Bd +ke +vP +"} +(12,1,1) = {" +ga +Ga +JT +Ym +Ym +sr +Ga +tY +tY +tY +tY +tY +tY +Oj +tY +LX +MS +MS +up +dD +Jw +"} +(13,1,1) = {" +MS +cx +zA +Cs +Bf +iP +Ga +tY +tY +tY +tY +tY +tY +Oj +Oj +zy +Un +MS +Ri +xm +Wn +"} +(14,1,1) = {" +MS +zA +zA +NL +GX +iP +Ga +tY +tY +Ga +Ga +Ga +Ga +Ga +Ga +Ga +qv +ur +CG +vP +VL +"} +(15,1,1) = {" +ga +Ga +IA +zA +zA +sr +Ga +tY +tY +Ga +wA +Ir +wA +wA +Ir +wA +qv +zA +wT +vP +nl +"} +(16,1,1) = {" +ga +MS +Ga +zA +ur +Ga +tY +tY +tY +DA +zA +zA +zA +zA +zA +zA +qv +Xm +bq +UY +sf +"} +(17,1,1) = {" +gy +Ye +MS +MS +MS +oS +tY +tY +tY +zA +zA +zA +zA +zA +zA +zA +qv +bi +bq +vP +eD +"} +(18,1,1) = {" +IT +jm +Bd +MS +MS +Nm +JC +JC +JC +Ga +wA +UK +wA +wA +UK +wA +Pm +ir +wT +vP +Um +"} +(19,1,1) = {" +Tc +xV +UH +Vt +ZF +Gg +ee +Tc +Jd +Zb +hB +hB +hB +hB +hB +hB +Mr +hB +dS +vP +sf +"} +(20,1,1) = {" +Tc +Ab +UH +vP +sf +OU +sd +lw +DV +DV +DV +DV +DV +DV +DV +Bu +Ep +jE +hZ +YP +sf +"} +(21,1,1) = {" +eC +Ab +lN +Jw +sf +UH +Xq +Xq +DV +DV +DV +DV +DV +DV +DV +AY +vP +VL +yL +yL +Jv +"} diff --git a/_maps/modularmaps/jungle_outpost/joutposthydro1.dmm b/_maps/modularmaps/jungle_outpost/joutposthydro1.dmm new file mode 100644 index 0000000000000..895cea2abafbf --- /dev/null +++ b/_maps/modularmaps/jungle_outpost/joutposthydro1.dmm @@ -0,0 +1,918 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ak" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"al" = ( +/obj/structure/stairs/edge, +/turf/open/liquid/water, +/area/campaign/jungle_outpost/ground/jungle) +"bt" = ( +/obj/structure/cable, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/living/hydro) +"bQ" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"cg" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"cn" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"cy" = ( +/obj/structure/bed/stool, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"cQ" = ( +/obj/structure/flora/jungle/large_bush, +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"da" = ( +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"dN" = ( +/obj/structure/flora/jungle/grass, +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"dS" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"ec" = ( +/turf/closed/gm/dense, +/area/campaign/jungle_outpost/ground/jungle) +"ey" = ( +/obj/structure/flora/jungle/grass, +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"eH" = ( +/obj/structure/closet/crate/hydroponics, +/obj/item/tool/plantspray/pests, +/obj/item/tool/plantspray/pests/old/lindane, +/obj/item/tool/scythe, +/obj/item/tool/shovel/spade, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"eK" = ( +/obj/item/reagent_containers/glass/bucket, +/obj/machinery/vending/hydroseeds, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"fi" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"gP" = ( +/obj/machinery/botany/editor, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"gY" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"hk" = ( +/turf/open/ground/grass/beach/corner2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"ht" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"hO" = ( +/obj/machinery/door/airlock/colony/medical/hydroponics{ + dir = 1 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"hQ" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 10 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"hS" = ( +/obj/structure/cable, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"ie" = ( +/obj/structure/flora/jungle/grass/thin, +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"iK" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"kv" = ( +/turf/open/ground/grass/beach{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"kJ" = ( +/turf/open/ground/grass/beach/corner{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"kU" = ( +/obj/structure/table, +/obj/item/tool/pen, +/obj/effect/spawner/random/misc/folder, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"lI" = ( +/obj/machinery/light, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"nh" = ( +/obj/structure/platform_decoration{ + dir = 10 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"nB" = ( +/obj/structure/stairs/edge{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"oM" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"pi" = ( +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"qp" = ( +/obj/machinery/vending/hydronutrients, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"qR" = ( +/obj/structure/platform_decoration{ + dir = 5 + }, +/turf/open/liquid/water, +/area/campaign/jungle_outpost/ground/jungle) +"sq" = ( +/obj/structure/flora/tree/jungle, +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"ss" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"sO" = ( +/obj/structure/platform, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/living/hydro) +"sP" = ( +/obj/machinery/hydroponics, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"sX" = ( +/obj/machinery/hydroponics, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"tc" = ( +/obj/structure/closet/crate/hydroponics, +/obj/item/tool/plantspray/pests, +/obj/item/tool/plantspray/pests/old/carbaryl, +/obj/item/tool/shovel, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"tk" = ( +/obj/effect/landmark/campaign_structure/phoron_crate, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"tG" = ( +/obj/machinery/power/apc/drained, +/obj/structure/cable, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"vt" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"vF" = ( +/obj/structure/sink{ + dir = 4 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"vJ" = ( +/turf/open/ground/grass/beach{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"wa" = ( +/turf/open/ground/grass/beach/corner2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"wv" = ( +/obj/machinery/door/airlock/colony/medical/hydroponics, +/obj/structure/cable, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"wF" = ( +/obj/machinery/hydroponics, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"wP" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"xI" = ( +/obj/structure/flora/jungle/large_bush, +/obj/structure/platform_decoration{ + dir = 10 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"xQ" = ( +/obj/machinery/vending/hydroseeds, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"yg" = ( +/turf/open/ground/grass/beach/corner2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"yK" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/jungle_outpost/ground/jungle) +"Al" = ( +/turf/open/liquid/water, +/area/campaign/jungle_outpost/ground/jungle) +"Am" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 4 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"AQ" = ( +/obj/structure/table, +/obj/item/storage/box/botanydisk, +/obj/item/tool/analyzer/plant_analyzer, +/obj/item/reagent_containers/food/drinks/flask/vacuumflask, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Bc" = ( +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Bx" = ( +/obj/structure/table, +/obj/item/reagent_containers/glass/bucket, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"BE" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"BW" = ( +/obj/structure/flora/tree/jungle/small, +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"CF" = ( +/obj/item/clothing/gloves/botanic_leather, +/obj/structure/table, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Db" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/obj/structure/platform_decoration{ + dir = 10 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"EL" = ( +/obj/structure/platform{ + dir = 5 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Fs" = ( +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/living/hydro) +"FJ" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"GL" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle) +"GO" = ( +/obj/structure/platform{ + dir = 9 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/living/hydro) +"GU" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 6 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"HH" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Ig" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/obj/effect/landmark/mob_spawner/farwa, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"In" = ( +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"IW" = ( +/obj/machinery/door/airlock/colony/medical/hydroponics, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"JS" = ( +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/living/hydro) +"KH" = ( +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"KR" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 1 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Mb" = ( +/obj/machinery/hydroponics, +/obj/machinery/light, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Ni" = ( +/obj/structure/flora/jungle/bush, +/obj/structure/flora/grass/tallgrass/autosmooth, +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"NT" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 9 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Ol" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"OO" = ( +/obj/machinery/hydroponics, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Pd" = ( +/obj/item/reagent_containers/glass/bucket, +/obj/structure/table, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Pq" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Pw" = ( +/obj/structure/platform{ + dir = 6 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Qb" = ( +/obj/structure/platform{ + dir = 10 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/living/hydro) +"QS" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"RD" = ( +/obj/structure/sink, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"RG" = ( +/obj/machinery/botany/extractor, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Tl" = ( +/turf/open/ground/grass/beach{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"Ua" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 5 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"UE" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Vn" = ( +/obj/structure/sink{ + dir = 1 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"VD" = ( +/obj/structure/platform_decoration{ + dir = 5 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Wp" = ( +/obj/structure/table, +/obj/item/tool/hatchet{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/tool/analyzer/plant_analyzer, +/obj/effect/spawner/random/weaponry/melee, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Wq" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle) +"WE" = ( +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/river/west) +"XJ" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"Zn" = ( +/obj/structure/closet/secure_closet/hydroponics, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"ZD" = ( +/obj/structure/table, +/obj/item/clothing/gloves/botanic_leather, +/obj/machinery/light{ + dir = 8 + }, +/obj/item/clothing/suit/storage/apron, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) + +(1,1,1) = {" +da +wP +ss +pi +FJ +Bc +NT +oM +oM +oM +hQ +Ni +da +da +da +WE +WE +WE +"} +(2,1,1) = {" +ht +pi +pi +ie +GO +oM +Pq +sX +KH +sX +Pq +oM +Qb +sq +da +da +WE +WE +"} +(3,1,1) = {" +FJ +pi +NT +oM +Pq +sX +Fs +sX +KH +sX +sX +sX +Pq +oM +hQ +da +da +da +"} +(4,1,1) = {" +pi +cQ +KR +sX +sX +KH +hO +KH +KH +sX +sX +KH +sX +sX +dS +BW +FJ +da +"} +(5,1,1) = {" +pi +GO +Pq +KH +KH +KH +Pq +sX +KH +KH +KH +KH +KH +KH +Pq +Qb +ss +da +"} +(6,1,1) = {" +dN +KR +sX +sX +sX +KH +Fs +OO +KH +vF +Bx +KH +wF +sX +sX +dS +ey +FJ +"} +(7,1,1) = {" +NT +Pq +sX +sX +sX +lI +Fs +Fs +IW +Fs +Fs +IW +Fs +Pq +Fs +Fs +Qb +pi +"} +(8,1,1) = {" +KR +AQ +KH +KH +KH +Vn +Fs +eK +KH +Pd +ZD +KH +sX +sX +sP +BE +sO +yK +"} +(9,1,1) = {" +KR +kU +cy +KH +KH +CF +Pq +qp +KH +KH +tk +KH +KH +KH +KH +KH +HH +GL +"} +(10,1,1) = {" +KR +gP +cy +KH +KH +KH +HH +KH +hS +hS +hS +hS +hS +hS +hS +hS +hS +Wq +"} +(11,1,1) = {" +KR +RG +KH +KH +KH +KH +KH +KH +hS +KH +KH +KH +KH +KH +KH +Zn +sO +fi +"} +(12,1,1) = {" +Ua +Pq +sX +sX +sX +KH +Pq +RD +hS +sX +sX +KH +sX +sX +Mb +Fs +Pw +pi +"} +(13,1,1) = {" +xI +KR +sX +sX +sX +KH +Fs +qp +hS +sX +sX +KH +sX +sX +sX +dS +VD +pi +"} +(14,1,1) = {" +FJ +EL +Pq +KH +KH +lI +Fs +xQ +hS +KH +KH +KH +KH +KH +Pq +Pw +pi +pi +"} +(15,1,1) = {" +Ol +Db +KR +sX +sX +KH +Fs +Wp +hS +KH +KH +KH +sX +sX +dS +VD +pi +pi +"} +(16,1,1) = {" +gY +UE +Ua +Am +Pq +tc +Fs +ak +hS +KH +vt +eH +Pq +Am +GU +pi +pi +In +"} +(17,1,1) = {" +gY +UE +UE +Db +EL +Am +Fs +tG +hS +KH +Fs +Am +Pw +qR +wa +kv +kJ +ec +"} +(18,1,1) = {" +QS +iK +Ig +cg +iK +nh +EL +wv +Fs +IW +Pw +qR +Al +Al +Al +Al +Tl +ec +"} +(19,1,1) = {" +XJ +cn +cn +cn +cn +bQ +nB +bt +JS +JS +al +hk +vJ +vJ +yg +Al +wa +kJ +"} diff --git a/_maps/modularmaps/jungle_outpost/joutposthydro2.dmm b/_maps/modularmaps/jungle_outpost/joutposthydro2.dmm new file mode 100644 index 0000000000000..c4087fbc70732 --- /dev/null +++ b/_maps/modularmaps/jungle_outpost/joutposthydro2.dmm @@ -0,0 +1,878 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aj" = ( +/obj/machinery/light, +/obj/machinery/hydroponics, +/obj/structure/cable, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"au" = ( +/obj/machinery/door/airlock/colony/medical/hydroponics, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"bp" = ( +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"bU" = ( +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"ck" = ( +/obj/effect/landmark/campaign_structure/phoron_crate, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"cw" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 1 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"fl" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"fu" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"gI" = ( +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/living/hydro) +"gZ" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"hF" = ( +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/living/hydro) +"ip" = ( +/obj/item/clothing/gloves/botanic_leather, +/obj/structure/table, +/obj/item/clothing/suit/storage/apron, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"iS" = ( +/obj/structure/flora/tree/jungle, +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"jO" = ( +/obj/structure/cable, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/living/hydro) +"jS" = ( +/turf/closed/gm/dense, +/area/campaign/jungle_outpost/ground/jungle) +"kq" = ( +/turf/open/ground/grass/beach/corner2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"kM" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"lo" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"lE" = ( +/obj/machinery/light, +/obj/structure/closet/secure_closet/hydroponics, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"lL" = ( +/obj/structure/platform{ + dir = 10 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/living/hydro) +"lO" = ( +/obj/structure/table, +/obj/item/clothing/gloves/botanic_leather, +/obj/item/reagent_containers/glass/bucket, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"nj" = ( +/obj/structure/platform{ + dir = 1 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/living/hydro) +"nN" = ( +/obj/structure/platform, +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"nZ" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle) +"om" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"oD" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"pa" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"qK" = ( +/obj/machinery/door/airlock/colony/medical/hydroponics, +/obj/structure/cable, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"rk" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"rR" = ( +/obj/structure/platform, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/living/hydro) +"rY" = ( +/obj/structure/table, +/obj/item/tool/hatchet{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/tool/analyzer/plant_analyzer, +/obj/effect/spawner/random/weaponry/melee, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"sm" = ( +/obj/structure/flora/jungle/grass, +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"st" = ( +/obj/machinery/vending/hydronutrients, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"sX" = ( +/turf/open/ground/grass/beach/corner{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"sZ" = ( +/turf/open/ground/grass/beach/corner2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"to" = ( +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/river/west) +"uP" = ( +/obj/structure/closet/crate/hydroponics, +/obj/item/tool/plantspray/pests, +/obj/item/tool/plantspray/pests/old/carbaryl, +/obj/item/tool/shovel, +/obj/machinery/light, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"uR" = ( +/obj/structure/platform_decoration{ + dir = 10 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"uU" = ( +/obj/structure/platform_decoration{ + dir = 5 + }, +/turf/open/liquid/water, +/area/campaign/jungle_outpost/ground/jungle) +"vA" = ( +/obj/structure/platform{ + dir = 9 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/living/hydro) +"vF" = ( +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"vH" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle) +"vW" = ( +/obj/structure/stairs/edge{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"wd" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"wz" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"wY" = ( +/obj/structure/flora/jungle/large_bush, +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"yc" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/jungle_outpost/ground/jungle) +"BC" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"BG" = ( +/obj/structure/platform{ + dir = 5 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Di" = ( +/turf/open/ground/grass/beach{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"Dp" = ( +/obj/machinery/hydroponics, +/obj/item/reagent_containers/glass/bucket, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"DF" = ( +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"DG" = ( +/obj/structure/table, +/obj/item/storage/box/botanydisk, +/obj/item/tool/analyzer/plant_analyzer, +/obj/item/reagent_containers/food/drinks/flask/vacuumflask, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"FE" = ( +/obj/machinery/power/apc/drained, +/obj/structure/cable, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"HE" = ( +/turf/open/ground/grass/beach{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"HF" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/obj/effect/landmark/mob_spawner/farwa, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"IA" = ( +/turf/open/ground/grass/beach/corner2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"IT" = ( +/obj/structure/cable, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Jl" = ( +/obj/structure/sink{ + dir = 1 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"JW" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"KB" = ( +/obj/machinery/botany/extractor, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"KQ" = ( +/obj/machinery/light, +/obj/machinery/hydroponics, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"La" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"Lr" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"LN" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Mx" = ( +/turf/open/liquid/water, +/area/campaign/jungle_outpost/ground/jungle) +"Ni" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"Nv" = ( +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Ol" = ( +/obj/structure/stairs/edge, +/turf/open/liquid/water, +/area/campaign/jungle_outpost/ground/jungle) +"Oz" = ( +/obj/structure/table, +/obj/item/tool/pen, +/obj/effect/spawner/random/misc/folder, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"QM" = ( +/obj/structure/flora/jungle/large_bush, +/obj/structure/platform_decoration{ + dir = 10 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"QO" = ( +/obj/machinery/botany/editor, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"QX" = ( +/obj/structure/flora/jungle/grass/thin, +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Rt" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 4 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Se" = ( +/obj/structure/flora/jungle/grass, +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Sq" = ( +/obj/structure/platform{ + dir = 6 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/living/hydro) +"SN" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/obj/structure/platform_decoration{ + dir = 10 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Te" = ( +/obj/structure/bed/stool, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Tr" = ( +/turf/open/ground/grass/beach{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"Um" = ( +/obj/machinery/vending/hydroseeds, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"UO" = ( +/obj/machinery/hydroponics, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"UT" = ( +/obj/structure/platform_decoration{ + dir = 5 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Wq" = ( +/obj/structure/flora/jungle/bush, +/obj/structure/flora/grass/tallgrass/autosmooth, +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"WB" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"XD" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"XQ" = ( +/obj/structure/sink, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Yu" = ( +/obj/structure/flora/tree/jungle/small, +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Yv" = ( +/obj/structure/sink, +/obj/structure/cable, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"YF" = ( +/obj/machinery/hydroponics, +/obj/structure/cable, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"YQ" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/closet/secure_closet/hydroponics, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"ZR" = ( +/obj/structure/closet/crate/hydroponics, +/obj/item/tool/plantspray/pests, +/obj/item/tool/plantspray/pests/old/lindane, +/obj/item/tool/scythe, +/obj/item/tool/shovel/spade, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) +"ZY" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor/tile/hydro, +/area/campaign/jungle_outpost/outpost/living/hydro) + +(1,1,1) = {" +bU +wd +pa +DF +WB +Nv +vA +ZY +ZY +ZY +lL +Wq +bU +bU +bU +to +to +to +"} +(2,1,1) = {" +lo +DF +DF +QX +vA +ZY +oD +UO +UO +UO +oD +ZY +lL +iS +bU +bU +to +to +"} +(3,1,1) = {" +WB +DF +vA +ZY +oD +UO +UO +bp +bp +bp +UO +UO +oD +ZY +lL +bU +bU +bU +"} +(4,1,1) = {" +DF +wY +cw +UO +UO +UO +bp +bp +lO +bp +bp +UO +UO +UO +LN +Yu +WB +bU +"} +(5,1,1) = {" +DF +vA +gI +UO +bp +bp +bp +rk +bp +rk +bp +bp +bp +UO +gI +lL +pa +bU +"} +(6,1,1) = {" +Se +nj +QO +bp +bp +bp +gI +gI +au +gI +gI +bp +bp +Dp +UO +rR +sm +WB +"} +(7,1,1) = {" +vA +gI +Oz +Te +bp +gI +gI +st +bp +Um +gI +gI +bp +bp +KQ +gI +lL +DF +"} +(8,1,1) = {" +cw +bp +bp +bp +bp +gI +ZR +bp +bp +bp +uP +gI +bp +bp +bp +bp +nN +yc +"} +(9,1,1) = {" +cw +bp +Jl +gI +bp +gZ +bp +bp +ck +bp +bp +gZ +bp +gI +XQ +bp +gZ +nZ +"} +(10,1,1) = {" +cw +bp +Jl +gI +bp +bp +bp +bp +rY +bp +bp +bp +bp +gI +Yv +IT +IT +vH +"} +(11,1,1) = {" +cw +bp +bp +bp +bp +gI +YQ +bp +bp +bp +lE +gI +bp +bp +IT +bp +nN +JW +"} +(12,1,1) = {" +BG +gI +DG +Te +bp +gI +gI +Um +bp +st +gI +gI +bp +bp +aj +gI +Sq +DF +"} +(13,1,1) = {" +QM +nj +KB +bp +bp +bp +gI +gI +au +gI +gI +IT +IT +YF +YF +rR +UT +DF +"} +(14,1,1) = {" +WB +BG +gI +UO +bp +bp +bp +fu +bp +fu +bp +IT +bp +UO +gI +Sq +DF +DF +"} +(15,1,1) = {" +BC +SN +cw +UO +UO +Dp +bp +bp +ip +bp +bp +YF +UO +UO +LN +UT +DF +DF +"} +(16,1,1) = {" +Ni +wz +BG +Rt +oD +UO +UO +IT +IT +IT +YF +YF +oD +Rt +Sq +DF +DF +vF +"} +(17,1,1) = {" +Ni +wz +wz +SN +BG +Rt +gI +FE +bp +bp +gI +Rt +Sq +uU +sZ +HE +sX +jS +"} +(18,1,1) = {" +Lr +om +HF +kM +om +uR +BG +qK +gI +au +Sq +uU +Mx +Mx +Mx +Mx +Tr +jS +"} +(19,1,1) = {" +fl +XD +XD +XD +XD +La +vW +jO +hF +hF +Ol +kq +Di +Di +IA +Mx +sZ +sX +"} diff --git a/_maps/modularmaps/jungle_outpost/joutposthydro3.dmm b/_maps/modularmaps/jungle_outpost/joutposthydro3.dmm new file mode 100644 index 0000000000000..73d666737cced --- /dev/null +++ b/_maps/modularmaps/jungle_outpost/joutposthydro3.dmm @@ -0,0 +1,799 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ar" = ( +/obj/machinery/hydroponics/soil, +/obj/item/seeds/sugarcaneseed, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"aw" = ( +/turf/open/ground/grass/beach{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"aB" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"bb" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"cd" = ( +/obj/structure/table/woodentable, +/obj/item/clothing/gloves/botanic_leather, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/living/hydro) +"cx" = ( +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"cI" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"dm" = ( +/obj/structure/mineral_door/wood, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/living/hydro) +"dt" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"dK" = ( +/obj/structure/rock/variable/jungle/big, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle) +"eX" = ( +/obj/machinery/hydroponics/soil, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"fl" = ( +/obj/structure/window/framed/wood, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/living/hydro) +"gg" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"gU" = ( +/obj/structure/table/woodentable, +/obj/item/reagent_containers/glass/bucket, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/living/hydro) +"hp" = ( +/obj/structure/rock/variable/jungle, +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/river/west) +"hH" = ( +/turf/open/floor/plating/ground/dirt2, +/area/campaign/jungle_outpost/ground/jungle) +"iy" = ( +/obj/structure/table/woodentable, +/obj/item/tool/shovel, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/living/hydro) +"iJ" = ( +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/river/west) +"iT" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"jC" = ( +/turf/open/ground/grass/beach{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"ko" = ( +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"kz" = ( +/obj/machinery/hydroponics/soil, +/obj/item/tool/scythe, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"kK" = ( +/obj/structure/platform_decoration{ + dir = 5 + }, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"lh" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"ll" = ( +/obj/structure/stairs/seamless/edge_vert, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"ln" = ( +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"lp" = ( +/turf/closed/wall/wood, +/area/campaign/jungle_outpost/outpost/living/hydro) +"mj" = ( +/obj/machinery/hydroponics/soil, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"mB" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 1 + }, +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"mD" = ( +/obj/structure/table/woodentable, +/obj/item/reagent_containers/glass/bucket, +/obj/item/seeds/sugarcaneseed, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/living/hydro) +"oY" = ( +/obj/structure/catwalk, +/turf/open/ground/grass/beach/corner2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"pf" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"rd" = ( +/obj/structure/rock/variable/jungle, +/turf/open/ground/grass/beach/corner2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"rn" = ( +/obj/structure/table/woodentable, +/obj/item/tool/scythe, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/living/hydro) +"rI" = ( +/turf/open/liquid/water, +/area/campaign/jungle_outpost/ground/jungle) +"sb" = ( +/obj/structure/rock/variable/jungle/big, +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"uf" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"uo" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"ut" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"uB" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"uR" = ( +/obj/structure/rock/variable/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"vd" = ( +/turf/open/ground/grass/beach/corner2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"wi" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"wZ" = ( +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/living/hydro) +"zM" = ( +/obj/structure/flora/jungle/bush, +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"Az" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"BN" = ( +/obj/structure/platform_decoration{ + dir = 10 + }, +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"BO" = ( +/turf/open/ground/grass/beach{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"CQ" = ( +/obj/structure/catwalk, +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"DM" = ( +/turf/open/ground/grass/beach/corner2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"DU" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle) +"Fe" = ( +/obj/structure/table/woodentable, +/obj/item/clothing/gloves/botanic_leather, +/obj/item/clothing/suit/storage/apron, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/living/hydro) +"FE" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"FG" = ( +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle) +"FL" = ( +/obj/machinery/hydroponics/soil, +/obj/item/seeds/bananaseed, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Gl" = ( +/obj/structure/table/woodentable, +/obj/item/tool/analyzer/plant_analyzer, +/obj/item/tool/hatchet{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/effect/spawner/random/weaponry/melee, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Gt" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"Gz" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"GW" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"Hl" = ( +/obj/structure/rock/variable/jungle/big, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"HY" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle) +"If" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"JP" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"JT" = ( +/obj/machinery/hydroponics/soil, +/obj/item/reagent_containers/glass/bucket, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Kq" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirt2, +/area/campaign/jungle_outpost/ground/jungle) +"KE" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/jungle_outpost/ground/jungle) +"Lu" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirt2, +/area/campaign/jungle_outpost/ground/jungle) +"LL" = ( +/turf/open/ground/grass/beach/corner{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"Ma" = ( +/obj/structure/catwalk, +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"Mn" = ( +/turf/closed/wall, +/area/campaign/jungle_outpost/ground/jungle) +"MB" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 4 + }, +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"OK" = ( +/obj/structure/catwalk, +/obj/structure/platform, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"PU" = ( +/obj/structure/catwalk, +/obj/structure/platform, +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"Rl" = ( +/obj/structure/flora/jungle/grass, +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"Rq" = ( +/obj/structure/catwalk, +/obj/effect/landmark/campaign_structure/phoron_crate, +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"RG" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"Sx" = ( +/turf/closed/gm/dense, +/area/campaign/jungle_outpost/ground/jungle) +"SD" = ( +/obj/structure/catwalk, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"To" = ( +/obj/structure/catwalk, +/turf/open/liquid/water, +/area/campaign/jungle_outpost/ground/jungle) +"WC" = ( +/obj/structure/rock/variable/jungle, +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"WH" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"Yb" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"YA" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"YX" = ( +/obj/structure/closet/secure_closet/hydroponics, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/living/hydro) +"Zs" = ( +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"ZH" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) + +(1,1,1) = {" +Zs +Zs +Az +ko +JP +ko +Az +ko +ko +uo +uo +uo +Zs +sb +Rl +iJ +iJ +iJ +"} +(2,1,1) = {" +ko +lp +lp +lp +lp +lp +lp +lp +ko +ko +Zs +aB +Zs +zM +cx +cx +iJ +hp +"} +(3,1,1) = {" +Az +lp +rn +YX +gU +Gl +wZ +dm +Zs +GW +Zs +WC +cx +cx +cx +cx +Zs +Zs +"} +(4,1,1) = {" +ko +lp +cd +wZ +wZ +wZ +wZ +lp +aB +Zs +cx +cx +cx +cx +cx +Zs +uB +Zs +"} +(5,1,1) = {" +ko +lp +mD +wZ +wZ +Fe +iy +lp +cx +cx +cx +cx +cx +Sx +Sx +Sx +GW +Zs +"} +(6,1,1) = {" +ln +lp +lp +dm +lp +fl +fl +lp +cx +cx +cx +cx +Sx +Sx +Sx +Sx +ln +Az +"} +(7,1,1) = {" +ko +ko +FG +hH +wi +ko +Zs +cx +cx +cx +GW +Zs +Sx +Sx +Sx +uf +ko +ko +"} +(8,1,1) = {" +ar +ko +FG +Kq +wi +uB +aB +cx +cx +sb +Zs +KE +dt +dt +dt +dt +dt +Hl +"} +(9,1,1) = {" +JT +ko +FG +hH +ll +FE +ZH +ZH +ZH +ZH +FE +DU +hH +Lu +hH +Kq +hH +hH +"} +(10,1,1) = {" +ko +ko +dK +hH +gg +iT +MB +CQ +Rq +CQ +Ma +HY +Kq +hH +hH +hH +hH +Lu +"} +(11,1,1) = {" +ko +Az +RG +Gt +pf +WH +BN +mB +CQ +OK +kK +RG +Gt +Gt +Gt +Gt +Gt +Gt +"} +(12,1,1) = {" +eX +ko +eX +ko +FL +Zs +Mn +CQ +CQ +SD +Mn +ko +JP +Sx +Sx +Sx +ko +uR +"} +(13,1,1) = {" +eX +ko +kz +ko +eX +Zs +sb +mB +CQ +PU +WH +Zs +Sx +Sx +Sx +Sx +JP +ko +"} +(14,1,1) = {" +FL +ko +eX +ko +JT +Zs +cx +mB +CQ +PU +cx +Zs +Sx +Sx +Sx +Sx +uo +ko +"} +(15,1,1) = {" +mj +ko +eX +ko +eX +Zs +uB +mB +CQ +PU +cx +Sx +Sx +Sx +Sx +Sx +uo +ko +"} +(16,1,1) = {" +wi +uo +uo +JP +ko +ko +bb +mB +CQ +PU +cx +Sx +Sx +Sx +Sx +Sx +ko +ln +"} +(17,1,1) = {" +wi +uo +uo +uo +ko +uo +bb +cI +CQ +PU +cx +WC +Sx +Sx +Sx +aw +LL +Sx +"} +(18,1,1) = {" +Yb +dt +YA +dt +dt +dt +If +cI +CQ +PU +cx +rI +rI +rI +rI +rI +jC +Sx +"} +(19,1,1) = {" +lh +Gt +Gt +Gt +ut +Gz +Mn +SD +oY +To +Mn +DM +BO +BO +rd +rI +vd +LL +"} diff --git a/_maps/modularmaps/jungle_outpost/joutpostmedbay1.dmm b/_maps/modularmaps/jungle_outpost/joutpostmedbay1.dmm new file mode 100644 index 0000000000000..04dd33437c32d --- /dev/null +++ b/_maps/modularmaps/jungle_outpost/joutpostmedbay1.dmm @@ -0,0 +1,1248 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"am" = ( +/obj/structure/bed/roller, +/obj/machinery/light, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"at" = ( +/obj/structure/platform_decoration{ + dir = 10 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"au" = ( +/obj/structure/closet/secure_closet/medical3/colony, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"aY" = ( +/obj/structure/cable, +/turf/open/floor/tile/blue/whitebluecorner{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"br" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"cf" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"cD" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"cH" = ( +/obj/machinery/vending/MarineMed/Blood, +/turf/open/floor/tile/blue/whiteblue{ + dir = 9 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"cP" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle) +"dV" = ( +/obj/structure/table, +/obj/structure/flora/pottedplant/two, +/obj/machinery/power/apc/drained, +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue{ + dir = 5 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"dZ" = ( +/obj/structure/catwalk, +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/river/north) +"ec" = ( +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"eD" = ( +/obj/item/staff/broom, +/obj/item/stool, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mainship/mono, +/area/campaign/jungle_outpost/outpost/medbay) +"eS" = ( +/obj/structure/closet/secure_closet/medical3/colony, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"fa" = ( +/obj/structure/stairs/seamless, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle) +"ff" = ( +/obj/structure/sign/greencross{ + dir = 1 + }, +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"fW" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"gY" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"hD" = ( +/obj/structure/table/reinforced, +/obj/item/healthanalyzer, +/obj/item/healthanalyzer, +/obj/item/clothing/glasses/hud/health, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"hP" = ( +/obj/structure/bed/chair/sofa/right, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"iF" = ( +/obj/machinery/atmospherics/components/unary/cryo_cell, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"iM" = ( +/obj/structure/sign/greencross{ + dir = 1 + }, +/obj/structure/platform_decoration{ + dir = 5 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"iS" = ( +/obj/structure/bed/roller, +/obj/machinery/power/apc/drained, +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"jf" = ( +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle) +"jm" = ( +/obj/structure/bed/chair/sofa{ + dir = 1 + }, +/obj/machinery/light, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"jo" = ( +/obj/structure/table/reinforced, +/obj/item/folder/blue, +/obj/item/tool/pen/blue, +/turf/open/floor/mainship/mono, +/area/campaign/jungle_outpost/outpost/medbay) +"jN" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"kg" = ( +/turf/open/floor/mainship/mono, +/area/campaign/jungle_outpost/outpost/medbay) +"kB" = ( +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/river/north) +"kC" = ( +/obj/structure/flora/jungle/grass, +/obj/structure/platform_decoration{ + dir = 5 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"ld" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/glass/beaker/cryoxadone, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"lk" = ( +/obj/structure/closet/secure_closet/medical2, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"lm" = ( +/obj/structure/flora/jungle/large_bush, +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"lp" = ( +/obj/machinery/door/airlock/mainship/medical/free_access, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"lD" = ( +/obj/structure/bed/chair/sofa/left{ + dir = 8 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"lO" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"mc" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"mG" = ( +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"mS" = ( +/obj/effect/landmark/campaign_structure/phoron_crate, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"nr" = ( +/obj/machinery/vending/medical, +/turf/open/floor/tile/blue/whiteblue{ + dir = 10 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"nt" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"ny" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"nC" = ( +/obj/structure/platform{ + dir = 5 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"nZ" = ( +/obj/machinery/iv_drip, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"oc" = ( +/obj/machinery/vending/nanomed, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"oh" = ( +/obj/structure/table, +/obj/effect/spawner/random/medical/firstaid, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 9 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"oB" = ( +/obj/structure/bed/chair/sofa/right{ + dir = 1 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"oQ" = ( +/obj/structure/table, +/obj/item/paper, +/obj/item/tool/pen/red, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"oW" = ( +/obj/structure/platform{ + dir = 10 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"pn" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 1 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"pT" = ( +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"ql" = ( +/obj/machinery/computer/med_data, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"re" = ( +/obj/structure/table, +/obj/item/storage/donut_box, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"rT" = ( +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"sm" = ( +/obj/structure/table/reinforced, +/obj/item/storage/surgical_tray, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"sK" = ( +/obj/machinery/computer/med_data, +/turf/open/floor/tile/blue/whiteblue{ + dir = 9 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"sV" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"tj" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/spray/surgery, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/suit/surgical, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"tV" = ( +/obj/structure/table, +/obj/item/storage/firstaid/adv, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"uf" = ( +/obj/structure/morgue{ + dir = 8 + }, +/turf/open/floor/mainship/mono, +/area/campaign/jungle_outpost/outpost/medbay) +"uD" = ( +/turf/open/floor/tile/blue/whitebluecorner{ + dir = 2 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"uZ" = ( +/obj/structure/cable, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"wk" = ( +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"xY" = ( +/obj/structure/platform{ + dir = 6 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"yj" = ( +/obj/structure/window/reinforced/tinted, +/obj/structure/bed/chair/comfy{ + dir = 8 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"yw" = ( +/obj/structure/bed/chair/sofa/corner, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"yF" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"yP" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/toxin, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"yR" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"Au" = ( +/obj/structure/bed/chair/office/light{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Aw" = ( +/obj/machinery/light, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"Ax" = ( +/obj/structure/platform{ + dir = 6 + }, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/medbay) +"Bi" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"BB" = ( +/obj/machinery/computer/body_scanconsole, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"CE" = ( +/obj/structure/platform{ + dir = 10 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"DM" = ( +/obj/machinery/computer/body_scanconsole, +/obj/machinery/light, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"Er" = ( +/obj/structure/sink{ + dir = 8 + }, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"EI" = ( +/obj/machinery/vending/snack, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"Fh" = ( +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"Fu" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"FG" = ( +/obj/structure/table, +/obj/effect/spawner/random/medical/health_analyzer, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"FR" = ( +/obj/vehicle/ridden/wheelchair{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Ga" = ( +/obj/structure/table, +/obj/item/storage/firstaid, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Gq" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Gt" = ( +/obj/machinery/bioprinter, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"Hl" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"Hq" = ( +/obj/machinery/iv_drip, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"HY" = ( +/obj/effect/decal/cleanable/blood/writing{ + dir = 4 + }, +/obj/machinery/door/airlock/mainship/medical/free_access, +/turf/open/floor/mainship/mono, +/area/campaign/jungle_outpost/outpost/medbay) +"Iu" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"IJ" = ( +/obj/structure/bed/chair/sofa{ + dir = 1 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"Jc" = ( +/turf/open/floor/tile/blue/whitebluecorner{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Jq" = ( +/obj/machinery/door/airlock/mainship/medical/free_access{ + dir = 1 + }, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"JO" = ( +/obj/structure/platform{ + dir = 4 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"JQ" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/bodybags, +/obj/item/roller, +/turf/open/floor/tile/blue/whiteblue{ + dir = 5 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Kc" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Kq" = ( +/obj/structure/platform{ + dir = 1 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"Ks" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 10 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"KR" = ( +/obj/machinery/vending/MarineMed/Blood, +/turf/open/floor/tile/blue/whiteblue{ + dir = 5 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Ls" = ( +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"LB" = ( +/obj/structure/table, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/regular, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"LF" = ( +/turf/open/floor/tile/blue/whitebluecorner{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"LT" = ( +/obj/structure/platform{ + dir = 10 + }, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/medbay) +"Ms" = ( +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Mt" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"MN" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle) +"Nf" = ( +/obj/structure/table/reinforced, +/obj/item/tool/surgery/FixOVein, +/obj/item/storage/pill_bottle/inaprovaline{ + pixel_x = 7 + }, +/obj/effect/spawner/random/medical/pillbottle, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Nx" = ( +/obj/structure/flora/tree/jungle, +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"NB" = ( +/obj/structure/table, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"Og" = ( +/obj/machinery/vending/medical, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Oj" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"Ok" = ( +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"OK" = ( +/obj/structure/table, +/turf/open/floor/tile/blue/whiteblue{ + dir = 6 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"Pc" = ( +/obj/machinery/sleeper, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"Pz" = ( +/obj/structure/bed/roller, +/turf/open/floor/tile/blue/whiteblue{ + dir = 6 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"PL" = ( +/obj/structure/bed/roller, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"PX" = ( +/obj/structure/platform, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"Qj" = ( +/obj/machinery/sleeper, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"QD" = ( +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/medbay) +"QX" = ( +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"Rc" = ( +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Rq" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/glasses/eyepatch, +/obj/item/storage/box/rxglasses{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/box/masks, +/obj/item/storage/box/gloves{ + pixel_x = -5; + pixel_y = -5 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"RD" = ( +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/river/north) +"RK" = ( +/obj/structure/cable, +/turf/open/floor/tile/blue/whitebluecorner{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"RN" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 9 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Sc" = ( +/obj/structure/table, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"Sw" = ( +/obj/structure/bed/chair/sofa/left{ + dir = 1 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"SS" = ( +/obj/machinery/door/airlock/mainship/medical/free_access{ + dir = 1 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"ST" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Tt" = ( +/obj/structure/table, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/roller, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"TL" = ( +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"Ul" = ( +/obj/vehicle/ridden/wheelchair{ + dir = 8 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Uo" = ( +/obj/effect/decal/cleanable/blood/writing{ + dir = 5 + }, +/turf/open/floor/mainship/mono, +/area/campaign/jungle_outpost/outpost/medbay) +"VX" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 6 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Wh" = ( +/obj/structure/closet/secure_closet/medical1, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Wz" = ( +/obj/machinery/iv_drip, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"WZ" = ( +/turf/open/floor/tile/blue/whitebluecorner{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Xy" = ( +/obj/machinery/optable, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"XO" = ( +/obj/machinery/door/airlock/mainship/medical/free_access, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"XW" = ( +/obj/structure/platform{ + dir = 9 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"YO" = ( +/obj/structure/platform{ + dir = 9 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"Zd" = ( +/obj/structure/platform{ + dir = 1 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"Zp" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"Zy" = ( +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay/lobby) + +(1,1,1) = {" +kB +kB +kB +kB +RD +dZ +pT +Hl +Hl +jN +jN +Ms +yF +ec +Ms +Ms +cD +Gq +ec +cD +Ms +Ms +Ms +jf +"} +(2,1,1) = {" +YO +yR +yR +br +br +HY +br +br +br +br +br +br +br +yR +yR +br +br +br +br +br +br +oW +Ms +jf +"} +(3,1,1) = {" +pn +rT +rT +oB +Ok +Uo +kg +uf +uf +uf +Ok +cH +yP +lk +Wh +Og +nr +Ok +sK +Au +Ks +PX +ff +jf +"} +(4,1,1) = {" +pn +rT +NB +IJ +Ok +eD +kg +kg +kg +kg +Ok +eS +rT +rT +rT +rT +Aw +Ok +Tt +rT +TL +Zp +LT +jf +"} +(5,1,1) = {" +pn +rT +re +jm +Ok +jo +uf +uf +uf +kg +Ok +au +rT +rT +rT +rT +TL +Ok +Ga +rT +TL +Zp +QD +MN +"} +(6,1,1) = {" +pn +rT +rT +Sw +Ok +Ok +Ok +Ok +Ok +lp +Ok +JQ +Rq +Nf +hD +LF +TL +Ok +oc +rT +Jc +Fu +QD +fa +"} +(7,1,1) = {" +pn +hP +rT +rT +rT +rT +SS +Jc +Kc +rT +Ok +Ok +Zp +Ok +Zp +ST +gY +Ok +iS +rT +uD +Iu +QD +fa +"} +(8,1,1) = {" +Zd +yw +lD +ny +EI +Oj +Zp +ST +rT +rT +Kc +iF +ld +iF +fW +WZ +Jc +Kc +RK +rT +TL +Zp +QD +cP +"} +(9,1,1) = {" +Zd +Ok +Ok +Ok +Ok +Ok +Ok +ST +rT +rT +rT +rT +rT +rT +rT +rT +uZ +uZ +uZ +rT +TL +Zp +Ax +jf +"} +(10,1,1) = {" +Zd +Gt +Xy +Er +Zp +RN +fW +WZ +rT +rT +rT +rT +rT +rT +rT +rT +uZ +rT +Pc +rT +Qj +PX +iM +jf +"} +(11,1,1) = {" +Zd +QX +QX +QX +Jq +rT +rT +rT +rT +rT +rT +rT +rT +rT +rT +rT +uZ +rT +BB +rT +DM +PX +Ms +jf +"} +(12,1,1) = {" +Zd +tj +sm +nZ +Zp +KR +Wz +yj +Hq +yj +FR +Ul +tV +LB +rT +mS +aY +rT +uD +Iu +VX +PX +Nx +jf +"} +(13,1,1) = {" +nC +JO +JO +JO +JO +JO +JO +JO +JO +JO +Zy +mc +mc +mc +XO +Zy +Ls +rT +PL +Ok +JO +xY +cD +jf +"} +(14,1,1) = {" +Ms +Ms +jN +jN +jN +jN +Ms +Ms +Ms +at +Kq +oh +Sc +Mt +Fh +mc +Ls +rT +am +PX +kC +cD +Ms +jf +"} +(15,1,1) = {" +Ms +Ms +Bi +jN +jN +cD +Ms +Ms +Ms +Rc +Kq +ql +Fh +lO +wk +mc +Ls +uD +Pz +PX +lm +Ms +Ms +jf +"} +(16,1,1) = {" +Ms +Ms +Ms +Ms +Ms +Ms +cD +Rc +XW +nt +Zy +dV +FG +oQ +OK +Zy +mG +sV +mc +Zy +cf +CE +Ms +jf +"} diff --git a/_maps/modularmaps/jungle_outpost/joutpostmedbay2.dmm b/_maps/modularmaps/jungle_outpost/joutpostmedbay2.dmm new file mode 100644 index 0000000000000..9693ecc1b3f66 --- /dev/null +++ b/_maps/modularmaps/jungle_outpost/joutpostmedbay2.dmm @@ -0,0 +1,1160 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ak" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"bN" = ( +/obj/structure/bed/roller, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"bY" = ( +/obj/structure/table, +/obj/item/paper, +/obj/item/tool/pen/red, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"ch" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"cp" = ( +/obj/structure/platform{ + dir = 1 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"dh" = ( +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"dm" = ( +/obj/structure/platform_decoration{ + dir = 10 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"dn" = ( +/obj/structure/bed/roller, +/turf/open/floor/tile/blue/whiteblue{ + dir = 6 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"dI" = ( +/obj/structure/table, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"dR" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/turf/open/floor/tile/blue/whiteblue{ + dir = 10 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"eG" = ( +/obj/machinery/door/airlock/mainship/medical/free_access, +/turf/open/floor/mainship/mono, +/area/campaign/jungle_outpost/outpost/medbay) +"eI" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"ff" = ( +/obj/machinery/atmospherics/components/unary/cryo_cell{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"fA" = ( +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"fK" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"gn" = ( +/obj/structure/platform{ + dir = 9 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"gD" = ( +/obj/structure/cable, +/obj/effect/landmark/campaign_structure/phoron_crate, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"gW" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 1 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"hn" = ( +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/river/north) +"hA" = ( +/obj/structure/table, +/obj/item/storage/firstaid/adv, +/turf/open/floor/tile/blue/whiteblue{ + dir = 10 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"iD" = ( +/turf/open/floor/tile/blue/whitebluecorner{ + dir = 2 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"iQ" = ( +/obj/machinery/light, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"iV" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/glass/beaker/cryoxadone, +/obj/machinery/light, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"jj" = ( +/obj/machinery/door/airlock/mainship/medical/free_access, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"jo" = ( +/obj/machinery/vending/nanomed{ + dir = 4 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"js" = ( +/obj/machinery/light/small, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"jB" = ( +/obj/structure/closet/secure_closet/medical2, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 5 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"jH" = ( +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"jI" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"kd" = ( +/obj/structure/cable, +/turf/open/floor/tile/blue/whitebluecorner, +/area/campaign/jungle_outpost/outpost/medbay) +"kj" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"ku" = ( +/obj/machinery/iv_drip, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"lI" = ( +/obj/structure/platform{ + dir = 10 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"mi" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/toxin, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"mW" = ( +/obj/structure/closet/secure_closet/medical3/colony, +/turf/open/floor/tile/blue/whiteblue{ + dir = 10 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"mX" = ( +/turf/open/floor/tile/blue/whitebluecorner{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"nf" = ( +/obj/structure/platform_decoration{ + dir = 6 + }, +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"nn" = ( +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle) +"no" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"oN" = ( +/obj/machinery/iv_drip, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"pe" = ( +/obj/machinery/vending/MarineMed/Blood, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 9 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"pj" = ( +/obj/structure/flora/tree/jungle, +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"pC" = ( +/obj/machinery/atmospherics/components/unary/cryo_cell{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 10 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"pZ" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"qb" = ( +/obj/structure/table, +/obj/effect/spawner/random/medical/firstaid, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 9 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"rY" = ( +/obj/structure/flora/jungle/grass/thin, +/obj/structure/sign/greencross{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"sw" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"sR" = ( +/obj/machinery/iv_drip, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"sX" = ( +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"tS" = ( +/obj/machinery/vending/nanomed, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"un" = ( +/obj/machinery/bioprinter, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"uo" = ( +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"uY" = ( +/obj/structure/cable, +/obj/machinery/light, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"vu" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"vJ" = ( +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"vK" = ( +/turf/open/floor/tile/blue/whitebluecorner{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"vQ" = ( +/obj/machinery/vending/medical, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"wp" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"xg" = ( +/obj/structure/platform{ + dir = 4 + }, +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"xG" = ( +/obj/structure/platform{ + dir = 1 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"ym" = ( +/obj/machinery/optable, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"yM" = ( +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"yY" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Aa" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"AE" = ( +/obj/structure/platform{ + dir = 1 + }, +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"AK" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/tile/blue/whiteblue{ + dir = 5 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"AP" = ( +/obj/machinery/iv_drip, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"AT" = ( +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"AW" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"Bb" = ( +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/river/north) +"Bi" = ( +/obj/structure/table, +/obj/structure/flora/pottedplant/two, +/obj/machinery/power/apc/drained, +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue{ + dir = 5 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"BL" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"BZ" = ( +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"Cx" = ( +/obj/vehicle/ridden/wheelchair{ + dir = 4 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"CG" = ( +/obj/structure/flora/jungle/large_bush, +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"CP" = ( +/obj/structure/platform, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"CW" = ( +/obj/structure/cable, +/turf/open/floor/tile/blue/whitebluecorner{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Dv" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"DH" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"Eg" = ( +/obj/structure/flora/jungle/grass, +/obj/structure/sign/greencross{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"El" = ( +/obj/structure/platform{ + dir = 10 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"Eq" = ( +/obj/structure/cable, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"EC" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Fa" = ( +/obj/structure/catwalk, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"FH" = ( +/obj/structure/table, +/obj/effect/spawner/random/medical/heal_pack/bruteweighted, +/obj/effect/spawner/random/medical/heal_pack/burnweighted, +/obj/machinery/light, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"FO" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 4 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"FQ" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/turf/open/floor/tile/blue/whiteblue{ + dir = 9 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Gf" = ( +/obj/structure/cable, +/turf/open/floor/tile/blue/whitebluecorner{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Gj" = ( +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"GH" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"GN" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Hn" = ( +/obj/machinery/computer/med_data, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"Ho" = ( +/obj/machinery/power/apc/drained, +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue{ + dir = 5 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"HX" = ( +/obj/machinery/door/airlock/mainship/medical/free_access, +/obj/structure/cable, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"Iz" = ( +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"IU" = ( +/obj/structure/closet/secure_closet/medical1, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Jm" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"Jn" = ( +/obj/structure/bed/roller, +/obj/machinery/light, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"Kq" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 6 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Le" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"Ls" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/turf/open/floor/tile/blue/whiteblue{ + dir = 5 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"LI" = ( +/obj/structure/table, +/obj/effect/spawner/random/medical/health_analyzer, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"Mj" = ( +/obj/item/clothing/glasses/eyepatch, +/obj/item/storage/box/rxglasses{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/box/masks, +/obj/item/storage/box/gloves{ + pixel_x = -5; + pixel_y = -5 + }, +/obj/structure/table, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"Mk" = ( +/obj/structure/flora/jungle/grass, +/obj/structure/platform_decoration{ + dir = 5 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Mn" = ( +/obj/structure/platform{ + dir = 5 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"Mz" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"NQ" = ( +/obj/machinery/sleeper, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"Ok" = ( +/obj/structure/sink{ + dir = 8 + }, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"OE" = ( +/obj/structure/table, +/turf/open/floor/tile/blue/whiteblue{ + dir = 6 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"OP" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/spray/surgery, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/suit/surgical, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"OZ" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/turf/open/floor/tile/blue/whiteblue{ + dir = 6 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Pc" = ( +/obj/structure/table/reinforced, +/obj/item/healthanalyzer, +/obj/item/healthanalyzer, +/obj/item/clothing/glasses/hud/health, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"Ps" = ( +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"PG" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"PH" = ( +/turf/open/floor/tile/blue/whitebluecorner{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Qs" = ( +/obj/structure/platform{ + dir = 9 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"QN" = ( +/obj/structure/platform{ + dir = 6 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"RU" = ( +/obj/structure/table/reinforced, +/obj/item/storage/surgical_tray, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"Sk" = ( +/obj/machinery/computer/body_scanconsole, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"TA" = ( +/obj/structure/catwalk, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"TW" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Ub" = ( +/obj/structure/closet/secure_closet/medical3/colony, +/turf/open/floor/tile/blue/whiteblue{ + dir = 6 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Uy" = ( +/obj/machinery/door/airlock/mainship/medical/free_access{ + dir = 1 + }, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"Va" = ( +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"Vl" = ( +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Yq" = ( +/obj/structure/platform{ + dir = 4 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"YG" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"YO" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"YU" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"YX" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) + +(1,1,1) = {" +hn +hn +hn +hn +hn +Bb +Aa +TA +Mz +sw +sw +Vl +ak +Eg +Fa +Fa +rY +PG +sX +GH +Vl +Vl +GH +nn +"} +(2,1,1) = {" +gn +YX +Jm +Jm +Jm +YX +YX +eG +YX +YX +YX +YX +YX +YX +BL +AW +YX +YX +YX +YX +YX +lI +sX +nn +"} +(3,1,1) = {" +cp +FQ +oN +YO +oN +dR +uo +Iz +hA +uo +un +ym +Ok +eI +BL +vJ +uo +pe +Cx +Cx +mW +CP +Vl +nn +"} +(4,1,1) = {" +cp +vu +Iz +Iz +Iz +iQ +uo +BL +Mj +uo +Va +Va +Va +Uy +Iz +vJ +uo +vQ +Iz +Iz +mi +Le +Vl +nn +"} +(5,1,1) = {" +AE +pZ +ku +YU +ku +Dv +uo +BL +js +uo +OP +RU +AP +eI +BL +vJ +uo +IU +Iz +Iz +Pc +Le +ak +nn +"} +(6,1,1) = {" +gW +BL +Iz +Iz +Iz +vJ +uo +Ho +Eq +uo +uo +uo +uo +uo +vu +vJ +uo +jB +mX +iD +Ub +CP +TW +nn +"} +(7,1,1) = {" +cp +pZ +ku +YU +Iz +FH +uo +uo +HX +uo +un +ym +Ok +eI +BL +vJ +uo +uo +BL +AW +uo +CP +GH +nn +"} +(8,1,1) = {" +cp +BL +Iz +Iz +Iz +vK +ch +PH +kd +uo +Va +Va +Va +Uy +Iz +vK +yY +jo +PH +vK +pC +CP +Vl +nn +"} +(9,1,1) = {" +gW +BL +Iz +Iz +Iz +iD +GN +mX +uY +uo +OP +RU +AP +eI +BL +Iz +Iz +Iz +Iz +Iz +iV +CP +sX +nn +"} +(10,1,1) = {" +gW +pZ +ku +YU +Iz +bN +uo +BL +BZ +uo +uo +uo +uo +uo +BL +Iz +NQ +Iz +NQ +Iz +ff +CP +ak +nn +"} +(11,1,1) = {" +cp +vu +Iz +Iz +Iz +iQ +uo +tS +CW +yY +yY +EC +yY +yY +PH +Iz +Sk +Iz +Sk +Iz +vJ +CP +Vl +nn +"} +(12,1,1) = {" +cp +Ls +sR +kj +sR +OZ +uo +AK +dh +dh +dh +dh +dh +dh +Eq +gD +Gf +Iz +iD +GN +Kq +CP +pj +nn +"} +(13,1,1) = {" +Mn +Yq +xg +FO +FO +Yq +Yq +FO +FO +Yq +AT +DH +DH +DH +jj +AT +fA +Iz +bN +uo +Yq +QN +GH +nn +"} +(14,1,1) = {" +GH +Vl +Vl +ak +Vl +Vl +PG +sX +Vl +dm +xG +qb +dI +jI +jH +DH +fA +Iz +Jn +CP +Mk +GH +Vl +nn +"} +(15,1,1) = {" +Vl +Vl +Vl +Vl +Vl +GH +Vl +Vl +GH +nf +xG +Hn +jH +no +Ps +DH +fA +iD +dn +CP +CG +Vl +Vl +nn +"} +(16,1,1) = {" +Vl +ak +sX +Vl +Vl +TW +GH +yM +Qs +fK +AT +Bi +LI +bY +OE +AT +Gj +YG +DH +AT +wp +El +Vl +nn +"} diff --git a/_maps/modularmaps/jungle_outpost/joutpostmedbay3.dmm b/_maps/modularmaps/jungle_outpost/joutpostmedbay3.dmm new file mode 100644 index 0000000000000..ff0500ad9e63a --- /dev/null +++ b/_maps/modularmaps/jungle_outpost/joutpostmedbay3.dmm @@ -0,0 +1,1156 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"bp" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"cl" = ( +/obj/machinery/door/airlock/mainship/medical/glass/free_access{ + dir = 1 + }, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"dm" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 8 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/corner2, +/area/campaign/jungle_outpost/ground/jungle) +"dy" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"dz" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle) +"dC" = ( +/obj/structure/platform{ + dir = 10 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"ew" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"eM" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"fa" = ( +/obj/machinery/iv_drip, +/turf/open/floor/tile/blue/whiteblue{ + dir = 5 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"fi" = ( +/obj/structure/table, +/obj/item/storage/firstaid/adv, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"fx" = ( +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"fH" = ( +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"fT" = ( +/obj/structure/platform{ + dir = 9 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"go" = ( +/obj/structure/stairs/seamless/edge_vert, +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"gy" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"gA" = ( +/obj/structure/table/reinforced, +/obj/item/healthanalyzer, +/obj/item/healthanalyzer, +/obj/item/clothing/glasses/hud/health, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"gH" = ( +/obj/structure/closet/secure_closet/medical3/colony, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 5 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"gK" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 1 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"gT" = ( +/obj/structure/cable, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"hl" = ( +/obj/structure/platform{ + dir = 9 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"hG" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"hI" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"ix" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"jg" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"jB" = ( +/obj/structure/flora/jungle/grass, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"kh" = ( +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"lj" = ( +/obj/machinery/bioprinter, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"lA" = ( +/obj/structure/table, +/obj/effect/spawner/random/medical/firstaid, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"lC" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"mo" = ( +/obj/machinery/power/apc/drained, +/obj/structure/cable, +/obj/structure/table, +/turf/open/floor/tile/blue/whiteblue{ + dir = 5 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"mw" = ( +/obj/structure/sign/greencross{ + dir = 1 + }, +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"mK" = ( +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"na" = ( +/obj/structure/platform, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"nd" = ( +/obj/machinery/light, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"oa" = ( +/obj/structure/stairs/seamless/edge, +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"oo" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/jungle_outpost/ground/jungle) +"ot" = ( +/obj/structure/table, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/regular, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"pp" = ( +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"qg" = ( +/obj/structure/table, +/obj/effect/spawner/random/medical/health_analyzer, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"qi" = ( +/obj/structure/table, +/obj/item/storage/firstaid, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"qv" = ( +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"qP" = ( +/obj/machinery/vending/MarineMed/Blood, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 9 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"rk" = ( +/obj/structure/sign/greencross{ + dir = 1 + }, +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle) +"rx" = ( +/obj/structure/bed/roller, +/obj/machinery/iv_drip, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"sd" = ( +/turf/open/floor/tile/blue/whitebluecorner{ + dir = 2 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"sA" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"sD" = ( +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"uo" = ( +/obj/structure/platform{ + dir = 4 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"uq" = ( +/obj/structure/table, +/obj/effect/spawner/random/medical/health_analyzer, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"uE" = ( +/obj/machinery/iv_drip, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"uK" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 4 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"vi" = ( +/obj/structure/platform{ + dir = 10 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"vA" = ( +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"vK" = ( +/turf/open/floor/tile/blue/whitebluecorner{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"wa" = ( +/obj/machinery/power/apc/drained, +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"wZ" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"xa" = ( +/obj/vehicle/ridden/wheelchair, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"xi" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"xW" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"xY" = ( +/obj/structure/sink{ + dir = 8 + }, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"yG" = ( +/obj/machinery/iv_drip, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"zg" = ( +/obj/structure/stairs/edge{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirt2, +/area/campaign/jungle_outpost/ground/jungle) +"zD" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Ae" = ( +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"Bf" = ( +/obj/machinery/atmospherics/components/unary/cryo_cell, +/turf/open/floor/tile/blue/whiteblue{ + dir = 9 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"BP" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"Cs" = ( +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Da" = ( +/obj/structure/platform, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"Df" = ( +/obj/structure/table, +/obj/effect/spawner/random/medical/firstaid, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 9 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"DA" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/toxin, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"DB" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"EK" = ( +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"ES" = ( +/obj/structure/platform{ + dir = 1 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"Fs" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"FF" = ( +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"FU" = ( +/obj/machinery/vending/medical, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 10 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Gj" = ( +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"Gt" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Hs" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"Hv" = ( +/turf/open/liquid/water/river/autosmooth, +/area/campaign/jungle_outpost/ground/river/north) +"HL" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 10 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Iy" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/glass/beaker/cryoxadone, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"IR" = ( +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"JC" = ( +/obj/machinery/atmospherics/components/unary/cryo_cell, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Ka" = ( +/obj/structure/bed, +/obj/machinery/vending/nanomed{ + dir = 1 + }, +/obj/item/bedsheet/medical, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"LU" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/spray/surgery, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/suit/surgical, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"Mj" = ( +/obj/machinery/sleeper, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"Mk" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"Mx" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/turf/open/floor/tile/blue/whiteblue, +/area/campaign/jungle_outpost/outpost/medbay) +"MA" = ( +/obj/machinery/optable, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"No" = ( +/obj/machinery/door/window, +/turf/open/floor/tile/blue/whiteblue{ + dir = 6 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"NF" = ( +/obj/structure/platform{ + dir = 5 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"Oa" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"OE" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle) +"OL" = ( +/obj/machinery/computer/med_data, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"OR" = ( +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle) +"OY" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"Pe" = ( +/obj/structure/closet/secure_closet/medical1, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"PA" = ( +/obj/structure/table, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"Qf" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"Qj" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"Qu" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"QW" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2, +/area/campaign/jungle_outpost/ground/jungle) +"Rh" = ( +/obj/structure/platform_decoration{ + dir = 9 + }, +/obj/structure/flora/grass/tallgrass/autosmooth, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"RA" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle) +"RM" = ( +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"RR" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 10 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"Sk" = ( +/obj/structure/table/reinforced, +/obj/item/storage/surgical_tray, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/blue/whitebluefull, +/area/campaign/jungle_outpost/outpost/medbay) +"SI" = ( +/obj/machinery/computer/body_scanconsole, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"SS" = ( +/obj/structure/cable, +/obj/machinery/computer/body_scanconsole, +/turf/open/floor/tile/white, +/area/campaign/jungle_outpost/outpost/medbay) +"Ts" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic, +/obj/structure/cable, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"TC" = ( +/obj/structure/platform{ + dir = 1 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"TM" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"TQ" = ( +/obj/structure/table, +/obj/item/paper, +/obj/item/tool/pen/red, +/turf/open/floor/tile/blue/whiteblue{ + dir = 4 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"TW" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay/lobby) +"Ub" = ( +/obj/structure/stairs/seamless/edge{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle) +"UD" = ( +/obj/structure/bed/roller, +/turf/open/floor/tile/blue/whiteblue{ + dir = 6 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"UG" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"UL" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"Vg" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder2/corner2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle) +"VD" = ( +/obj/structure/platform{ + dir = 6 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/medbay) +"VT" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/turf/open/floor/tile/blue/whiteblue{ + dir = 10 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Wh" = ( +/obj/effect/landmark/campaign_structure/phoron_crate, +/turf/open/floor/tile/blue/whiteblue{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Wv" = ( +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Wx" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle) +"Xs" = ( +/obj/structure/cable, +/turf/open/floor/tile/blue/whitebluecorner{ + dir = 8 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Yf" = ( +/obj/structure/closet/secure_closet/medical3/colony, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/blue/whiteblue{ + dir = 6 + }, +/area/campaign/jungle_outpost/outpost/medbay) +"Ym" = ( +/obj/structure/flora/jungle/bush, +/turf/open/floor/plating/ground/dirtgrassborder/autosmooth, +/area/campaign/jungle_outpost/ground/jungle) +"Yv" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 4 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle) +"YH" = ( +/obj/structure/closet/secure_closet/medical2, +/turf/open/floor/tile/blue/whiteblue{ + dir = 1 + }, +/area/campaign/jungle_outpost/outpost/medbay) + +(1,1,1) = {" +Hv +Hv +Hv +Hv +Hv +Hv +RM +wZ +wZ +Cs +Cs +qv +zD +mK +qv +qv +gy +Wx +mK +gy +qv +zD +qv +OR +"} +(2,1,1) = {" +vA +vA +UL +RM +hI +RM +RM +qv +Cs +qv +zD +qv +qv +qv +qv +gy +qv +qv +hl +bp +bp +bp +vi +OR +"} +(3,1,1) = {" +vA +hl +bp +eM +bp +vi +qv +qv +oo +xW +hl +bp +eM +eM +bp +vi +oo +ix +TC +lj +MA +xY +na +OE +"} +(4,1,1) = {" +Ym +TC +Bf +TM +VT +na +qv +Fs +OR +jg +TC +qP +rx +Wh +FU +na +OR +zg +cl +fx +fx +fx +na +OR +"} +(5,1,1) = {" +RM +TC +Iy +Ae +Ka +na +qv +qv +dz +go +Oa +Wv +Ae +Ae +DA +na +dz +RA +TC +LU +Sk +yG +na +dz +"} +(6,1,1) = {" +qv +TC +JC +Ae +Mx +na +Cs +qv +OR +Qj +Ae +Wv +Ae +Ae +gA +na +OR +Qu +NF +uo +uo +uo +VD +dz +"} +(7,1,1) = {" +qv +TC +xa +Ae +pp +na +Rh +Cs +OR +Qu +TC +Pe +Ae +Ae +vK +lC +dm +hG +ix +ix +ix +sA +ix +QW +"} +(8,1,1) = {" +Wx +TC +wa +gT +IR +fH +bp +vi +OR +jg +TC +YH +Ae +Ae +sd +Gt +Vg +RA +OY +Hs +OY +OY +DB +UG +"} +(9,1,1) = {" +qv +TC +xi +Ae +Xs +TM +HL +na +OR +Qu +TC +gH +fi +ot +Yf +na +dz +Qu +hl +bp +bp +bp +vi +OR +"} +(10,1,1) = {" +qv +gK +Wv +Mj +gT +Mj +nd +na +rk +Qu +NF +uo +uK +uK +uo +VD +OR +dy +TC +lj +MA +xY +na +OR +"} +(11,1,1) = {" +qv +gK +Wv +SI +gT +SS +Xs +Ts +dm +hG +ix +ix +ix +sA +ix +ix +QW +zg +cl +fx +fx +fx +na +OE +"} +(12,1,1) = {" +zD +gK +uE +Ae +Ae +Ae +sd +Gt +Yv +Hs +OY +OY +OY +OY +OY +jB +UG +RA +TC +LU +Sk +yG +na +dz +"} +(13,1,1) = {" +qv +TC +fa +qi +qg +lA +UD +na +mw +qv +fT +ew +Qf +Qf +ew +dC +OR +Qu +NF +uo +uo +uo +VD +OR +"} +(14,1,1) = {" +gy +NF +uo +uK +uK +uK +uo +VD +zD +qv +ES +Df +PA +TW +RR +Da +OR +hG +ix +sA +ix +ix +ix +QW +"} +(15,1,1) = {" +gy +qv +Wx +qv +gy +gy +qv +qv +qv +FF +ES +OL +kh +Mk +Gj +Da +Ub +oa +OY +OY +OY +OY +Hs +UG +"} +(16,1,1) = {" +qv +qv +zD +qv +qv +Fs +gy +FF +fT +ew +EK +mo +uq +TQ +No +EK +sD +BP +Qf +ew +Qf +dC +qv +OR +"} diff --git a/_maps/modularmaps/jungle_outpost/joutpostscrates1.dmm b/_maps/modularmaps/jungle_outpost/joutpostscrates1.dmm new file mode 100644 index 0000000000000..5bb7a21b58525 --- /dev/null +++ b/_maps/modularmaps/jungle_outpost/joutpostscrates1.dmm @@ -0,0 +1,409 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"c" = ( +/obj/structure/cargo_container/horizontal{ + dir = 8 + }, +/obj/structure/cargo_container/horizontal{ + dir = 2 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"e" = ( +/obj/structure/cargo_container{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"f" = ( +/obj/structure/cargo_container/red{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"g" = ( +/obj/structure/cargo_container/hd, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"h" = ( +/obj/structure/stairs/seamless/edge, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"i" = ( +/obj/structure/cargo_container{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"j" = ( +/obj/structure/cargo_container/horizontal{ + dir = 1 + }, +/obj/structure/cargo_container/horizontal{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"k" = ( +/obj/structure/cargo_container/horizontal{ + dir = 2 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"l" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"n" = ( +/obj/effect/turf_decal/grassdecal/corner2{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"o" = ( +/obj/effect/turf_decal/grassdecal{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"p" = ( +/obj/effect/turf_decal/grassdecal{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"q" = ( +/obj/structure/cargo_container/hd_blue{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"s" = ( +/obj/structure/cargo_container/ch_green, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"t" = ( +/obj/structure/cargo_container/green, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"v" = ( +/obj/structure/cargo_container/nt{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"x" = ( +/obj/structure/cargo_container/nt, +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"z" = ( +/obj/effect/landmark/campaign_structure/asat_system, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"A" = ( +/obj/structure/cargo_container/horizontal{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"B" = ( +/obj/structure/cargo_container/hd{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"C" = ( +/obj/structure/cargo_container/red, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"D" = ( +/obj/structure/cargo_container, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"G" = ( +/obj/effect/turf_decal/grassdecal{ + dir = 1 + }, +/obj/structure/flora/jungle/large_bush, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"K" = ( +/obj/structure/stairs/seamless/edge{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"L" = ( +/obj/effect/turf_decal/grassdecal/corner{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"N" = ( +/obj/structure/cargo_container/nt{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"O" = ( +/obj/structure/cargo_container/ch_green{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"P" = ( +/obj/structure/cargo_container/horizontal{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"Q" = ( +/obj/structure/cargo_container/hd_blue, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"R" = ( +/obj/effect/turf_decal/grassdecal{ + dir = 1 + }, +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"T" = ( +/obj/structure/cargo_container/hd{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"U" = ( +/obj/structure/cargo_container/hd_blue{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"V" = ( +/obj/structure/cargo_container/green{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"W" = ( +/obj/effect/turf_decal/grassdecal, +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"X" = ( +/obj/structure/cargo_container/ch_green{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"Y" = ( +/obj/structure/cargo_container/horizontal{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"Z" = ( +/obj/effect/turf_decal/grassdecal, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) + +(1,1,1) = {" +W +a +a +l +l +l +l +l +l +a +a +a +a +p +"} +(2,1,1) = {" +Z +D +a +x +C +t +a +a +s +a +a +a +a +p +"} +(3,1,1) = {" +Z +i +a +v +f +V +a +a +X +a +a +a +a +p +"} +(4,1,1) = {" +Z +i +a +N +f +V +a +a +O +a +a +Q +a +R +"} +(5,1,1) = {" +Z +e +a +l +f +V +a +a +a +a +a +U +a +G +"} +(6,1,1) = {" +Z +a +a +l +a +a +a +a +a +a +a +q +a +p +"} +(7,1,1) = {" +Z +a +a +l +a +a +a +a +a +a +a +a +a +p +"} +(8,1,1) = {" +Z +a +a +Y +j +c +k +a +a +a +D +a +a +R +"} +(9,1,1) = {" +Z +g +a +l +a +a +a +a +a +a +i +z +a +R +"} +(10,1,1) = {" +Z +B +a +l +a +P +A +k +a +a +e +a +a +p +"} +(11,1,1) = {" +Z +T +a +l +a +a +a +a +a +a +a +a +a +p +"} +(12,1,1) = {" +Z +a +a +K +h +a +a +a +a +n +o +o +o +L +"} diff --git a/_maps/modularmaps/jungle_outpost/joutpostscrates2.dmm b/_maps/modularmaps/jungle_outpost/joutpostscrates2.dmm new file mode 100644 index 0000000000000..c0767b0877daf --- /dev/null +++ b/_maps/modularmaps/jungle_outpost/joutpostscrates2.dmm @@ -0,0 +1,405 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"b" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/south) +"c" = ( +/obj/structure/cable, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"d" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/south) +"f" = ( +/obj/structure/table, +/obj/effect/spawner/random/misc/folder, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"g" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"h" = ( +/obj/item/reagent_containers/glass/bucket/janibucket, +/obj/item/tool/mop, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"i" = ( +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/south) +"j" = ( +/obj/structure/cable, +/obj/effect/turf_decal/grassdecal, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/ground/jungle/south) +"k" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/snacks/pastries/birthdaycakeslice, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"l" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 1 + }, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"m" = ( +/obj/structure/bed/chair/sofa, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"n" = ( +/obj/effect/landmark/campaign_structure/asat_system, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"o" = ( +/obj/structure/janitorialcart, +/obj/machinery/light/small, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"p" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"r" = ( +/obj/structure/stairs/seamless/edge{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/grassdecal, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/ground/jungle/south) +"s" = ( +/obj/structure/sink, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"t" = ( +/obj/structure/bed/chair/sofa/corner, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"u" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"v" = ( +/obj/machinery/vending/cigarette/colony, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"x" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + dir = 1 + }, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"z" = ( +/obj/structure/table, +/obj/machinery/computer/camera, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"A" = ( +/obj/effect/turf_decal/grassdecal/corner2{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/ground/jungle/south) +"B" = ( +/obj/structure/rack, +/obj/item/reagent_containers/spray/cleaner, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"C" = ( +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"E" = ( +/obj/structure/table, +/obj/item/ashtray/bronze, +/obj/item/trash/cigbutt, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"F" = ( +/obj/structure/bed/chair/sofa/left{ + dir = 8 + }, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"G" = ( +/obj/structure/table, +/obj/item/pizzabox, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"H" = ( +/obj/machinery/door/airlock/colony/medical/hydroponics{ + dir = 1 + }, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"I" = ( +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"J" = ( +/obj/structure/stairs/seamless/edge, +/obj/effect/turf_decal/grassdecal{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/ground/jungle/south) +"L" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"N" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"P" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/south) +"Q" = ( +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/drink_cans, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"R" = ( +/obj/effect/turf_decal/grassdecal{ + dir = 1 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/south) +"S" = ( +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/ground/jungle/south) +"T" = ( +/obj/structure/bed/chair/sofa/right, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"U" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/cable, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"V" = ( +/obj/machinery/vending/snack, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"W" = ( +/obj/effect/spawner/random/misc/plant, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) +"X" = ( +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/req/depot) +"Z" = ( +/obj/effect/spawner/random/engineering/structure/tank/waterweighted, +/turf/open/floor/tile/dark/gray, +/area/campaign/jungle_outpost/outpost/req/depot) + +(1,1,1) = {" +X +G +k +V +X +W +W +X +U +C +x +X +X +X +"} +(2,1,1) = {" +a +T +C +C +H +c +c +c +c +C +C +C +W +X +"} +(3,1,1) = {" +a +m +C +I +X +c +C +C +p +C +C +C +C +a +"} +(4,1,1) = {" +X +t +F +Q +X +c +C +X +X +X +X +C +C +a +"} +(5,1,1) = {" +X +X +X +X +X +c +C +X +Z +B +X +g +C +X +"} +(6,1,1) = {" +X +v +C +c +c +c +C +X +s +C +l +C +C +X +"} +(7,1,1) = {" +X +E +C +c +C +p +W +X +h +o +X +C +C +a +"} +(8,1,1) = {" +X +L +C +c +C +X +X +X +X +X +X +n +C +a +"} +(9,1,1) = {" +X +a +X +c +x +X +W +u +N +X +C +C +C +X +"} +(10,1,1) = {" +P +i +b +j +S +X +f +z +C +H +C +C +W +X +"} +(11,1,1) = {" +d +P +i +j +A +X +a +a +X +X +a +a +X +X +"} +(12,1,1) = {" +i +i +R +r +J +i +P +b +i +i +P +b +P +i +"} diff --git a/_maps/modularmaps/jungle_outpost/joutpostscrates3.dmm b/_maps/modularmaps/jungle_outpost/joutpostscrates3.dmm new file mode 100644 index 0000000000000..7a56d0fee34e5 --- /dev/null +++ b/_maps/modularmaps/jungle_outpost/joutpostscrates3.dmm @@ -0,0 +1,423 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"b" = ( +/obj/structure/cable, +/obj/structure/cargo_container{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"c" = ( +/obj/structure/cargo_container/hd_blue{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"e" = ( +/obj/structure/cargo_container/red{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"f" = ( +/obj/structure/cargo_container/nt{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"g" = ( +/obj/structure/cargo_container/gorg{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"h" = ( +/obj/structure/stairs/seamless/edge, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"i" = ( +/obj/structure/cargo_container/hd{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"j" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"k" = ( +/obj/structure/prop/vehicle/crane{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"m" = ( +/obj/structure/cargo_container, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"o" = ( +/obj/structure/cargo_container/red{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"q" = ( +/obj/structure/cable, +/obj/structure/cargo_container/ch_green{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"r" = ( +/obj/structure/cargo_container{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"s" = ( +/obj/structure/cargo_container/horizontal, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"t" = ( +/obj/effect/turf_decal/grassdecal{ + dir = 1 + }, +/obj/structure/flora/jungle/large_bush, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"v" = ( +/obj/structure/prop/vehicle/truck, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"x" = ( +/obj/structure/cargo_container{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"y" = ( +/obj/effect/landmark/campaign_structure/asat_system, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"z" = ( +/obj/structure/cargo_container/nt{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"A" = ( +/obj/structure/cargo_container/horizontal{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"B" = ( +/obj/structure/cargo_container/nt, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"C" = ( +/obj/structure/cargo_container/gorg, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"E" = ( +/obj/effect/turf_decal/grassdecal{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"F" = ( +/obj/structure/cargo_container/hd, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"G" = ( +/obj/effect/turf_decal/grassdecal/corner2{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"H" = ( +/obj/structure/cable, +/obj/structure/cargo_container, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"I" = ( +/obj/structure/stairs/seamless/edge{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"J" = ( +/obj/structure/cargo_container/horizontal{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"K" = ( +/obj/effect/turf_decal/grassdecal{ + dir = 1 + }, +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"L" = ( +/obj/effect/turf_decal/grassdecal, +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"M" = ( +/obj/structure/cable, +/obj/structure/cargo_container/ch_green, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"N" = ( +/obj/structure/cargo_container/hd_blue{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"O" = ( +/obj/structure/cable, +/obj/structure/cargo_container{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"P" = ( +/obj/effect/turf_decal/grassdecal/corner{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"Q" = ( +/obj/structure/cargo_container/horizontal{ + dir = 2 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"S" = ( +/obj/structure/cable, +/obj/structure/cargo_container/ch_green{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"U" = ( +/obj/structure/cargo_container/hd_blue, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"W" = ( +/obj/effect/turf_decal/grassdecal{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"X" = ( +/obj/structure/cargo_container/hd{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"Y" = ( +/obj/structure/cargo_container/red, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) +"Z" = ( +/obj/effect/turf_decal/grassdecal, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/containers) + +(1,1,1) = {" +L +a +a +j +j +j +j +j +j +a +a +a +a +W +"} +(2,1,1) = {" +Z +m +a +M +a +U +a +a +a +a +a +a +k +W +"} +(3,1,1) = {" +Z +r +a +S +a +N +a +a +a +B +a +a +a +W +"} +(4,1,1) = {" +Z +x +a +q +a +c +a +a +a +f +a +a +a +K +"} +(5,1,1) = {" +Z +a +a +j +a +a +a +a +a +z +a +a +a +t +"} +(6,1,1) = {" +Z +F +a +H +a +Y +a +a +A +J +Q +s +a +W +"} +(7,1,1) = {" +Z +X +a +O +a +e +a +a +a +a +a +a +a +W +"} +(8,1,1) = {" +Z +i +a +b +a +o +a +a +a +C +a +a +a +K +"} +(9,1,1) = {" +Z +a +a +j +a +a +a +a +a +g +a +y +a +K +"} +(10,1,1) = {" +Z +a +a +j +a +a +a +a +a +a +a +a +v +W +"} +(11,1,1) = {" +Z +a +a +j +a +a +a +k +a +a +a +a +a +W +"} +(12,1,1) = {" +Z +a +a +I +h +a +a +a +a +G +E +E +E +P +"} diff --git a/_maps/modularmaps/jungle_outpost/joutpostscrates4.dmm b/_maps/modularmaps/jungle_outpost/joutpostscrates4.dmm new file mode 100644 index 0000000000000..f1f140495c7e0 --- /dev/null +++ b/_maps/modularmaps/jungle_outpost/joutpostscrates4.dmm @@ -0,0 +1,369 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/machinery/light{ + light_color = "#da2f1b" + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"b" = ( +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"c" = ( +/obj/effect/turf_decal/grassdecal, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/ground/jungle/south) +"d" = ( +/obj/structure/largecrate/random/barrel, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"e" = ( +/obj/structure/stairs/seamless/edge, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"h" = ( +/obj/structure/extinguisher_cabinet/mini{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"i" = ( +/obj/effect/turf_decal/grassdecal{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"k" = ( +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/south) +"l" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/engibelt, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"m" = ( +/obj/effect/turf_decal/grassdecal, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"n" = ( +/obj/structure/largecrate/random, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"o" = ( +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"r" = ( +/obj/structure/largecrate/random/barrel/red, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"s" = ( +/obj/structure/rack, +/obj/item/radio/survivor, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"t" = ( +/obj/effect/turf_decal/grassdecal/corner{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"u" = ( +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/req/depot) +"v" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"x" = ( +/obj/effect/turf_decal/grassdecal/corner2{ + dir = 1 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"z" = ( +/obj/structure/largecrate/random/case/small, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"B" = ( +/obj/structure/largecrate/random/barrel/yellow, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"C" = ( +/obj/effect/spawner/random/misc/structure/supplycrate, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"F" = ( +/obj/structure/largecrate/random/case, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"H" = ( +/obj/structure/largecrate/random/case/double, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"I" = ( +/obj/structure/prop/vehicle/truck/truckcargo, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"M" = ( +/obj/structure/cable, +/obj/structure/prop/vehicle/truck/truckcargo, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"N" = ( +/obj/effect/turf_decal/grassdecal{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"O" = ( +/obj/structure/stairs/seamless/edge{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"Q" = ( +/obj/effect/turf_decal/grassdecal{ + dir = 1 + }, +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"R" = ( +/obj/structure/largecrate/random/barrel/white, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"S" = ( +/obj/structure/largecrate/random/barrel/green, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"T" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"U" = ( +/obj/effect/turf_decal/grassdecal, +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"V" = ( +/obj/structure/largecrate/random/secure, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"W" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"X" = ( +/obj/effect/landmark/campaign_structure/asat_system, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"Y" = ( +/obj/effect/spawner/random/engineering/structure/tank/fuelweighted, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) +"Z" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/plating/ground/concrete, +/area/campaign/jungle_outpost/outpost/req/depot) + +(1,1,1) = {" +u +I +W +M +b +M +b +b +b +o +o +o +s +u +"} +(2,1,1) = {" +u +o +o +b +o +o +o +o +o +o +o +o +Z +u +"} +(3,1,1) = {" +u +o +o +b +o +o +o +o +o +o +o +o +a +u +"} +(4,1,1) = {" +u +o +o +b +o +z +z +F +R +o +o +o +h +u +"} +(5,1,1) = {" +U +o +o +b +B +d +u +u +d +H +o +o +o +i +"} +(6,1,1) = {" +m +o +o +b +n +u +u +u +u +H +o +o +o +i +"} +(7,1,1) = {" +m +o +o +b +V +u +u +u +u +V +o +o +o +i +"} +(8,1,1) = {" +u +o +o +b +H +S +u +u +r +n +o +o +o +Q +"} +(9,1,1) = {" +u +l +o +b +o +n +n +d +d +o +o +X +Y +u +"} +(10,1,1) = {" +u +Z +o +b +o +o +o +o +T +o +o +o +v +u +"} +(11,1,1) = {" +u +u +o +b +o +o +C +C +u +u +o +o +u +u +"} +(12,1,1) = {" +c +o +o +O +e +o +o +o +x +N +N +N +t +k +"} diff --git a/_maps/modularmaps/jungle_outpost/joutpostwtower1.dmm b/_maps/modularmaps/jungle_outpost/joutpostwtower1.dmm new file mode 100644 index 0000000000000..efbe78eed2fcd --- /dev/null +++ b/_maps/modularmaps/jungle_outpost/joutpostwtower1.dmm @@ -0,0 +1,444 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"b" = ( +/obj/structure/table/reinforced, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"c" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/engineering/engibelt, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"d" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/jungle_outpost/ground/jungle/west) +"e" = ( +/obj/effect/spawner/random/misc/structure/supplycrate/normalweighted, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"f" = ( +/obj/structure/cable, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"g" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"h" = ( +/obj/effect/spawner/random/engineering/structure/tank/fuelweighted, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"i" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 1 + }, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"j" = ( +/obj/machinery/door/airlock/colony/medical/hydroponics{ + dir = 1 + }, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"k" = ( +/obj/item/trash/cheesie, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"l" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/outer/west) +"m" = ( +/obj/effect/landmark/campaign_structure/phoron_crate, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"n" = ( +/obj/item/trash/raisins, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"o" = ( +/obj/machinery/light, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"p" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"q" = ( +/obj/structure/platform_decoration{ + dir = 5 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"r" = ( +/obj/structure/platform{ + dir = 1 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/outer/west) +"s" = ( +/obj/structure/platform{ + dir = 5 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/outer/west) +"t" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"u" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"v" = ( +/obj/structure/table/reinforced, +/obj/item/paper, +/obj/effect/spawner/random/medical/pillbottle, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"w" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"x" = ( +/obj/structure/stairs/edge, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle/west) +"y" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"z" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic{ + dir = 1 + }, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"A" = ( +/obj/structure/platform, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/outer/west) +"B" = ( +/obj/structure/table/reinforced, +/obj/item/clipboard, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"C" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"E" = ( +/obj/structure/platform_decoration{ + dir = 10 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"F" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"G" = ( +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/outer/west) +"H" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"I" = ( +/obj/structure/platform{ + dir = 4 + }, +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"J" = ( +/obj/structure/platform{ + dir = 10 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/outer/west) +"K" = ( +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"L" = ( +/obj/structure/platform{ + dir = 6 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/outer/west) +"M" = ( +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"N" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"O" = ( +/obj/structure/platform{ + dir = 9 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/outer/west) +"P" = ( +/obj/item/trash/cigbutt, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"Q" = ( +/obj/structure/stairs/seamless/edge_vert, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"R" = ( +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"T" = ( +/obj/machinery/power/apc/drained{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"U" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"V" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/obj/structure/platform, +/turf/open/floor, +/area/campaign/jungle_outpost/outpost/outer/west) +"W" = ( +/obj/structure/platform{ + dir = 4 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/outer/west) +"X" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"Y" = ( +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) + +(1,1,1) = {" +Y +R +O +l +l +l +l +l +p +p +l +J +K +u +"} +(2,1,1) = {" +Y +O +G +c +b +a +G +a +a +a +C +G +J +Y +"} +(3,1,1) = {" +Y +r +a +P +n +a +g +a +a +a +a +a +A +d +"} +(4,1,1) = {" +y +i +a +a +a +a +j +a +a +a +a +a +j +x +"} +(5,1,1) = {" +w +i +a +a +a +o +G +U +a +a +a +a +A +H +"} +(6,1,1) = {" +w +r +U +a +f +T +G +G +a +z +G +G +A +u +"} +(7,1,1) = {" +w +r +a +a +f +m +G +h +a +a +C +M +A +N +"} +(8,1,1) = {" +Q +t +a +a +f +a +t +a +M +a +P +a +V +Y +"} +(9,1,1) = {" +X +f +f +f +f +a +a +a +a +a +a +B +V +Y +"} +(10,1,1) = {" +F +r +a +a +a +o +G +U +a +a +k +v +A +Y +"} +(11,1,1) = {" +Y +s +G +a +e +e +G +h +a +a +a +G +L +Y +"} +(12,1,1) = {" +Y +E +s +W +W +W +W +W +I +I +W +L +q +u +"} diff --git a/_maps/modularmaps/jungle_outpost/joutpostwtower2.dmm b/_maps/modularmaps/jungle_outpost/joutpostwtower2.dmm new file mode 100644 index 0000000000000..a6de48b048e29 --- /dev/null +++ b/_maps/modularmaps/jungle_outpost/joutpostwtower2.dmm @@ -0,0 +1,523 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aB" = ( +/obj/structure/bed/stool, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/grimy, +/area/campaign/jungle_outpost/outpost/bar) +"cS" = ( +/obj/structure/platform{ + dir = 4 + }, +/turf/closed/wall/wood, +/area/campaign/jungle_outpost/outpost/bar) +"di" = ( +/obj/machinery/light, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"dz" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"eU" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/jungle_outpost/ground/jungle/west) +"fj" = ( +/obj/structure/platform, +/turf/closed/wall/wood, +/area/campaign/jungle_outpost/outpost/bar) +"fT" = ( +/turf/open/floor/cult, +/area/campaign/jungle_outpost/outpost/bar) +"go" = ( +/obj/structure/platform{ + dir = 9 + }, +/turf/closed/wall/wood, +/area/campaign/jungle_outpost/outpost/bar) +"ji" = ( +/obj/structure/table/reinforced, +/obj/machinery/chem_dispenser/soda{ + pixel_y = 32 + }, +/turf/open/floor/grimy, +/area/campaign/jungle_outpost/outpost/bar) +"jA" = ( +/obj/structure/cable, +/obj/machinery/power/apc/drained, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"mp" = ( +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"mP" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"mY" = ( +/obj/structure/platform{ + dir = 6 + }, +/turf/closed/wall/wood, +/area/campaign/jungle_outpost/outpost/bar) +"na" = ( +/obj/structure/window/framed/wood, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"qT" = ( +/obj/machinery/door/window, +/turf/open/floor/grimy, +/area/campaign/jungle_outpost/outpost/bar) +"rp" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 8 + }, +/turf/open/floor/cult/clock, +/area/campaign/jungle_outpost/outpost/bar) +"tG" = ( +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"tS" = ( +/obj/structure/stairs/seamless/edge_vert, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"uS" = ( +/obj/structure/table/gamblingtable, +/obj/item/toy/dice/d20, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"ve" = ( +/obj/machinery/vending/boozeomat, +/turf/open/floor/grimy, +/area/campaign/jungle_outpost/outpost/bar) +"wB" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 4 + }, +/turf/open/floor/cult/clock, +/area/campaign/jungle_outpost/outpost/bar) +"xf" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"zb" = ( +/turf/open/floor/grimy, +/area/campaign/jungle_outpost/outpost/bar) +"zi" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"Ax" = ( +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"AH" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 8 + }, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"AT" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"Bu" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 1 + }, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"BH" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 4 + }, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"Ed" = ( +/obj/structure/platform{ + dir = 1 + }, +/turf/closed/wall/wood, +/area/campaign/jungle_outpost/outpost/bar) +"Ez" = ( +/obj/structure/device/piano/full, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"ET" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 8 + }, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"FU" = ( +/turf/closed/wall/wood, +/area/campaign/jungle_outpost/outpost/bar) +"Ge" = ( +/obj/structure/stairs/edge, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle/west) +"Gj" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 1 + }, +/turf/open/floor/cult/clock, +/area/campaign/jungle_outpost/outpost/bar) +"GX" = ( +/obj/structure/table/woodentable, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_y = 4 + }, +/obj/effect/spawner/random/misc/cigar, +/turf/open/floor/grimy, +/area/campaign/jungle_outpost/outpost/bar) +"Hm" = ( +/obj/machinery/door/airlock/colony/medical/hydroponics{ + dir = 1 + }, +/obj/structure/platform, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"HO" = ( +/obj/structure/platform_decoration{ + dir = 10 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"HS" = ( +/obj/structure/table/woodentable, +/obj/item/reagent_containers/food/drinks/shaker, +/turf/open/floor/grimy, +/area/campaign/jungle_outpost/outpost/bar) +"Jp" = ( +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"Jv" = ( +/obj/structure/bed/chair/wood/normal, +/turf/open/floor/cult/clock, +/area/campaign/jungle_outpost/outpost/bar) +"KV" = ( +/obj/structure/cable, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"Nx" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"Oe" = ( +/obj/structure/table/woodentable, +/obj/effect/spawner/random/food_or_drink/drink_alcohol_bottle, +/turf/open/floor/cult/clock, +/area/campaign/jungle_outpost/outpost/bar) +"Og" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"Oi" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"Ok" = ( +/obj/structure/platform{ + dir = 5 + }, +/turf/closed/wall/wood, +/area/campaign/jungle_outpost/outpost/bar) +"OY" = ( +/obj/structure/bed/chair/wood/normal, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"Pv" = ( +/obj/structure/window/framed/wood, +/obj/structure/platform{ + dir = 4 + }, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"QQ" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/closed/wall/wood, +/area/campaign/jungle_outpost/outpost/bar) +"QX" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"RP" = ( +/obj/structure/table/woodentable, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_y = 4 + }, +/turf/open/floor/grimy, +/area/campaign/jungle_outpost/outpost/bar) +"So" = ( +/obj/machinery/door/airlock/multi_tile/mainship/generic, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"SG" = ( +/obj/effect/landmark/campaign_structure/phoron_crate, +/turf/open/floor/cult, +/area/campaign/jungle_outpost/outpost/bar) +"SH" = ( +/obj/structure/bed/chair/wood/normal, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"Tn" = ( +/obj/structure/bed/stool, +/turf/open/floor/grimy, +/area/campaign/jungle_outpost/outpost/bar) +"TB" = ( +/obj/structure/platform{ + dir = 10 + }, +/turf/closed/wall/wood, +/area/campaign/jungle_outpost/outpost/bar) +"Ve" = ( +/obj/structure/table/woodentable, +/obj/effect/spawner/random/misc/cigarettes, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) +"Wr" = ( +/obj/structure/table/woodentable, +/turf/open/floor/cult/clock, +/area/campaign/jungle_outpost/outpost/bar) +"Xm" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"XS" = ( +/obj/structure/platform_decoration{ + dir = 5 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"YX" = ( +/obj/structure/table/woodentable, +/obj/effect/spawner/random/food_or_drink/drink_cans, +/turf/open/floor/wood, +/area/campaign/jungle_outpost/outpost/bar) + +(1,1,1) = {" +mp +Ax +go +QQ +QQ +QQ +na +na +QQ +QQ +QQ +TB +tG +Oi +"} +(2,1,1) = {" +mp +go +FU +zb +RP +aB +Jp +Jp +AT +Jp +Jp +FU +TB +mp +"} +(3,1,1) = {" +mp +Ed +ve +zb +RP +Tn +Jp +fT +wB +fT +Jp +Jp +fj +eU +"} +(4,1,1) = {" +QX +Ed +ji +zb +GX +Tn +Jp +Jv +Oe +Gj +Jp +Jp +Hm +Ge +"} +(5,1,1) = {" +mP +Ed +HS +qT +RP +Tn +Jp +fT +rp +fT +Jp +BH +fj +Xm +"} +(6,1,1) = {" +mP +Ed +xf +Jp +Jp +Jp +Jp +Jp +Jp +Jp +SH +uS +fj +Oi +"} +(7,1,1) = {" +mP +Ed +jA +fT +wB +SG +Jp +fT +wB +fT +Jp +ET +fj +Og +"} +(8,1,1) = {" +tS +So +KV +Jv +Oe +Gj +Jp +Jv +Wr +Gj +Jp +di +fj +mp +"} +(9,1,1) = {" +dz +KV +KV +fT +rp +fT +Jp +fT +rp +fT +Jp +Ez +fj +mp +"} +(10,1,1) = {" +zi +Ed +Jp +Jp +Jp +Jp +Jp +Jp +Jp +Jp +Jp +AH +fj +mp +"} +(11,1,1) = {" +mp +Ok +FU +SH +Ve +Nx +Jp +Jp +OY +YX +Bu +FU +mY +mp +"} +(12,1,1) = {" +mp +HO +Ok +cS +cS +cS +Pv +Pv +cS +cS +cS +mY +XS +Oi +"} diff --git a/_maps/modularmaps/jungle_outpost/joutpostwtower3.dmm b/_maps/modularmaps/jungle_outpost/joutpostwtower3.dmm new file mode 100644 index 0000000000000..bd5421c8e427d --- /dev/null +++ b/_maps/modularmaps/jungle_outpost/joutpostwtower3.dmm @@ -0,0 +1,469 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/platform{ + dir = 10 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/ground/jungle/west) +"b" = ( +/obj/structure/catwalk, +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/effect/spawner/random/food_or_drink/beer, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"c" = ( +/obj/structure/platform_decoration{ + dir = 10 + }, +/obj/structure/rock/variable/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"d" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 8 + }, +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/effect/spawner/random/food_or_drink/beer, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"e" = ( +/obj/structure/table/fancywoodentable, +/obj/item/radio, +/turf/open/floor/wood/alt_four, +/area/campaign/jungle_outpost/outpost/outer/west) +"f" = ( +/obj/effect/landmark/campaign_structure/phoron_crate, +/turf/open/floor/carpet, +/area/campaign/jungle_outpost/outpost/outer/west) +"g" = ( +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"h" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 10 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"i" = ( +/obj/structure/bed, +/obj/effect/spawner/random/misc/bedsheet, +/turf/open/floor/wood/alt_four, +/area/campaign/jungle_outpost/outpost/outer/west) +"j" = ( +/obj/structure/flora/tree/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"k" = ( +/obj/structure/table/fancywoodentable, +/obj/effect/spawner/random/misc/cigarettes, +/turf/open/floor/wood/alt_four, +/area/campaign/jungle_outpost/outpost/outer/west) +"l" = ( +/obj/structure/rock/variable/jungle, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"m" = ( +/obj/structure/platform{ + dir = 5 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/ground/jungle/west) +"n" = ( +/obj/effect/spawner/random/misc/structure/broken_window/colonyspawn, +/turf/open/floor/wood/alt_four, +/area/campaign/jungle_outpost/outpost/outer/west) +"o" = ( +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"p" = ( +/obj/structure/stairs/edge, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle/west) +"q" = ( +/obj/structure/rock/variable/jungle/big, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"r" = ( +/obj/structure/stairs/railstairs_vert{ + dir = 1 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"s" = ( +/turf/closed/wall, +/area/campaign/jungle_outpost/outpost/outer/west) +"t" = ( +/obj/structure/cable, +/turf/open/floor/carpet, +/area/campaign/jungle_outpost/outpost/outer/west) +"u" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 5 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"v" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"w" = ( +/obj/structure/stairs/seamless/edge_vert, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"x" = ( +/obj/structure/platform_decoration{ + dir = 10 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"y" = ( +/obj/machinery/power/apc/drained, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/campaign/jungle_outpost/outpost/outer/west) +"z" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"A" = ( +/obj/structure/table/fancywoodentable, +/obj/item/toy/plush/farwa, +/turf/open/floor/wood/alt_four, +/area/campaign/jungle_outpost/outpost/outer/west) +"B" = ( +/turf/open/floor/carpet, +/area/campaign/jungle_outpost/outpost/outer/west) +"C" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"D" = ( +/obj/structure/platform{ + dir = 6 + }, +/turf/closed/wall, +/area/campaign/jungle_outpost/ground/jungle/west) +"E" = ( +/turf/open/floor/wood/alt_four, +/area/campaign/jungle_outpost/outpost/outer/west) +"F" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"G" = ( +/obj/structure/catwalk, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"H" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"I" = ( +/obj/structure/closet/cabinet, +/obj/item/tool/lighter/random, +/turf/open/floor/wood/alt_four, +/area/campaign/jungle_outpost/outpost/outer/west) +"J" = ( +/obj/structure/catwalk, +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"K" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"L" = ( +/obj/structure/cable, +/turf/open/floor/wood/alt_four, +/area/campaign/jungle_outpost/outpost/outer/west) +"M" = ( +/obj/structure/catwalk, +/obj/structure/bed/chair, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"N" = ( +/obj/structure/catwalk, +/obj/structure/platform, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"O" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"P" = ( +/obj/structure/table/fancywoodentable, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/wood/alt_four, +/area/campaign/jungle_outpost/outpost/outer/west) +"R" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"S" = ( +/obj/structure/table/fancywoodentable, +/obj/item/binoculars, +/turf/open/floor/wood/alt_four, +/area/campaign/jungle_outpost/outpost/outer/west) +"T" = ( +/obj/structure/catwalk, +/obj/structure/catwalk, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"U" = ( +/obj/structure/platform_decoration{ + dir = 5 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"V" = ( +/obj/machinery/door/airlock/colony/medical/hydroponics{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/wood/alt_four, +/area/campaign/jungle_outpost/outpost/outer/west) +"W" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 6 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"X" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"Y" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/jungle_outpost/ground/jungle/west) +"Z" = ( +/obj/structure/table/fancywoodentable, +/obj/machinery/light, +/obj/machinery/light, +/turf/open/floor/wood/alt_four, +/area/campaign/jungle_outpost/outpost/outer/west) + +(1,1,1) = {" +g +q +g +g +g +g +g +g +r +H +h +o +g +C +"} +(2,1,1) = {" +g +g +g +g +g +q +g +s +d +T +G +a +g +g +"} +(3,1,1) = {" +g +g +g +j +g +g +g +s +n +s +G +N +o +Y +"} +(4,1,1) = {" +O +g +g +g +g +g +s +s +k +s +s +G +H +p +"} +(5,1,1) = {" +z +g +l +g +g +s +s +f +L +L +V +G +N +X +"} +(6,1,1) = {" +z +g +g +g +s +s +y +t +t +Z +s +G +N +C +"} +(7,1,1) = {" +z +s +s +s +s +i +E +B +E +A +s +M +N +F +"} +(8,1,1) = {" +w +G +G +G +s +P +E +E +I +s +s +G +N +g +"} +(9,1,1) = {" +v +K +G +T +s +s +e +S +s +s +G +G +D +g +"} +(10,1,1) = {" +R +x +u +G +G +s +s +n +s +G +G +W +U +g +"} +(11,1,1) = {" +g +g +c +u +G +G +b +J +G +G +W +U +g +g +"} +(12,1,1) = {" +g +g +g +x +m +K +K +K +K +D +U +g +q +C +"} diff --git a/_maps/modularmaps/jungle_outpost/joutpostwtower4.dmm b/_maps/modularmaps/jungle_outpost/joutpostwtower4.dmm new file mode 100644 index 0000000000000..7a520a1172823 --- /dev/null +++ b/_maps/modularmaps/jungle_outpost/joutpostwtower4.dmm @@ -0,0 +1,431 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/flora/jungle/large_bush, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/west) +"b" = ( +/obj/structure/catwalk, +/obj/structure/platform, +/turf/open/ground/grass/beach/corner2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"c" = ( +/obj/structure/flora/jungle/bush, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"d" = ( +/turf/open/ground/grass/beach/corner{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"f" = ( +/obj/structure/catwalk, +/turf/open/ground/grass/beach/corner2{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"g" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/west) +"h" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 4 + }, +/turf/open/ground/grass/beach{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"i" = ( +/obj/structure/flora/jungle/grass, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"j" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 4 + }, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/west) +"k" = ( +/obj/structure/platform_decoration{ + dir = 10 + }, +/turf/open/ground/grass/beach, +/area/campaign/jungle_outpost/ground/jungle/west) +"m" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner, +/area/campaign/jungle_outpost/ground/jungle/west) +"n" = ( +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/west) +"o" = ( +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"p" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 4 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"q" = ( +/obj/structure/stairs/seamless/edge_vert{ + dir = 1 + }, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"r" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 9 + }, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/west) +"t" = ( +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/ground/grass/beach, +/area/campaign/jungle_outpost/ground/jungle/west) +"u" = ( +/obj/structure/stairs/railstairs_vert{ + dir = 1 + }, +/turf/open/ground/grass/beach, +/area/campaign/jungle_outpost/ground/jungle/west) +"v" = ( +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/west) +"w" = ( +/obj/structure/catwalk, +/obj/structure/platform, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/west) +"x" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 1 + }, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/west) +"A" = ( +/obj/structure/platform_decoration{ + dir = 5 + }, +/turf/open/ground/grass/beach{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"D" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/west) +"E" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"F" = ( +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/west) +"G" = ( +/obj/structure/catwalk, +/turf/open/ground/grass/beach{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"H" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 4 + }, +/obj/effect/landmark/campaign_structure/phoron_crate, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/west) +"I" = ( +/obj/structure/catwalk, +/turf/open/ground/grass/beach, +/area/campaign/jungle_outpost/ground/jungle/west) +"J" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 4 + }, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"K" = ( +/obj/structure/stairs/edge, +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"M" = ( +/obj/structure/flora/jungle/grass, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/west) +"N" = ( +/obj/structure/flora/jungle/grass/thin, +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 8 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"O" = ( +/obj/structure/stairs/seamless/edge_vert, +/turf/open/floor/plating/ground/dirtgrassborder2{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"P" = ( +/obj/structure/catwalk, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/ground/grass/beach/corner{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"Q" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/west) +"R" = ( +/turf/open/floor/plating/ground/dirtgrassborder2/corner{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"S" = ( +/obj/structure/flora/jungle/large_bush, +/obj/structure/platform_decoration{ + dir = 5 + }, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/west) +"U" = ( +/obj/structure/platform_decoration{ + dir = 10 + }, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/west) +"V" = ( +/obj/structure/catwalk, +/turf/open/liquid/water/river, +/area/campaign/jungle_outpost/ground/jungle/west) +"W" = ( +/turf/open/ground/grass/weedable, +/area/campaign/jungle_outpost/ground/jungle/west) +"X" = ( +/turf/open/ground/grass/beach{ + dir = 1 + }, +/area/campaign/jungle_outpost/ground/jungle/west) +"Y" = ( +/turf/closed/gm/dense, +/area/campaign/jungle_outpost/ground/jungle/west) +"Z" = ( +/obj/structure/stairs/edge, +/turf/open/floor/plating/ground/dirtgrassborder2, +/area/campaign/jungle_outpost/ground/jungle/west) + +(1,1,1) = {" +W +W +W +W +Y +Y +Y +Y +Y +Y +Y +Y +E +E +"} +(2,1,1) = {" +W +i +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +W +"} +(3,1,1) = {" +W +Y +Y +Y +Y +M +n +n +n +n +a +Y +Y +m +"} +(4,1,1) = {" +N +Y +Y +w +n +n +n +D +n +n +r +V +h +Z +"} +(5,1,1) = {" +o +u +V +w +v +Q +n +n +n +F +x +w +A +R +"} +(6,1,1) = {" +o +k +x +V +g +g +g +g +g +g +V +w +X +E +"} +(7,1,1) = {" +o +t +x +V +j +H +j +j +j +j +V +w +X +c +"} +(8,1,1) = {" +O +P +f +w +S +n +n +n +Q +U +x +b +d +W +"} +(9,1,1) = {" +q +J +I +w +n +D +n +n +n +n +x +G +K +W +"} +(10,1,1) = {" +p +W +Y +Y +n +n +n +n +M +Y +Y +Y +W +W +"} +(11,1,1) = {" +W +W +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +W +W +"} +(12,1,1) = {" +W +W +i +Y +Y +Y +Y +Y +Y +Y +i +W +W +E +"} diff --git a/_maps/modularmaps/lv624/auxbotany.dmm b/_maps/modularmaps/lv624/auxbotany.dmm index b8c99e5ab8472..999c7a5e40b46 100644 --- a/_maps/modularmaps/lv624/auxbotany.dmm +++ b/_maps/modularmaps/lv624/auxbotany.dmm @@ -425,7 +425,7 @@ "IZ" = ( /obj/structure/table, /obj/item/clothing/gloves/botanic_leather, -/obj/item/clothing/suit/apron, +/obj/item/clothing/suit/storage/apron, /obj/item/clothing/under/colonist, /turf/open/floor/tile/green/whitegreen, /area/lv624/lazarus/hydroponics/aux) diff --git a/_maps/modularmaps/lv624/medbayone.dmm b/_maps/modularmaps/lv624/medbayone.dmm index 084009766f2b2..759f327a7f452 100644 --- a/_maps/modularmaps/lv624/medbayone.dmm +++ b/_maps/modularmaps/lv624/medbayone.dmm @@ -396,7 +396,7 @@ }, /area/lv624/lazarus/medbay) "IB" = ( -/obj/structure/bed/chair/wheelchair, +/obj/vehicle/ridden/wheelchair, /obj/effect/landmark/weed_node, /obj/effect/ai_node, /turf/open/floor/tile/blue/whitebluecorner{ diff --git a/_maps/modularmaps/lv624/robotics.dmm b/_maps/modularmaps/lv624/robotics.dmm index dbcc032111e50..d9b26ffaae6a7 100644 --- a/_maps/modularmaps/lv624/robotics.dmm +++ b/_maps/modularmaps/lv624/robotics.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "ar" = ( -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 30 }, /obj/structure/rack, diff --git a/_maps/modularmaps/oscaroutpost/oscarnorthvar1.dmm b/_maps/modularmaps/oscaroutpost/oscarnorthvar1.dmm index 446d920a733f7..7edd580102042 100644 --- a/_maps/modularmaps/oscaroutpost/oscarnorthvar1.dmm +++ b/_maps/modularmaps/oscaroutpost/oscarnorthvar1.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "ad" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 4 }, /turf/open/floor/plating/ground/dirt2, @@ -84,36 +84,36 @@ "aT" = ( /obj/structure/table/rusticwoodentable, /obj/machinery/light, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /turf/open/floor, /area/oscar_outpost) "aU" = ( @@ -191,7 +191,7 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/northwest) "bx" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 1; pixel_y = 7 }, @@ -413,29 +413,29 @@ /turf/open/floor/plating/ground/dirtgrassborder/corner, /area/oscar_outpost/outside/east) "dV" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /obj/structure/barricade/sandbags{ name = "trench lining"; pixel_y = -7 @@ -468,7 +468,7 @@ /turf/open/floor, /area/oscar_outpost) "ez" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 1; pixel_y = 7 }, @@ -484,26 +484,26 @@ "eE" = ( /obj/structure/table/mainship, /obj/item/tool/pen, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /turf/open/floor, /area/oscar_outpost) "eF" = ( @@ -556,7 +556,7 @@ name = "trench lining"; pixel_y = 6 }, -/obj/item/weapon/gun/tl102/hsg_nest, +/obj/item/weapon/gun/hsg_102/hsg_nest, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/west) "eW" = ( @@ -620,29 +620,29 @@ }, /area/oscar_outpost/outside/east) "fA" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /obj/structure/barricade/sandbags{ dir = 1; name = "trench lining"; @@ -895,29 +895,29 @@ }, /area/oscar_outpost) "jd" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /obj/structure/barricade/sandbags{ name = "trench lining"; pixel_y = -7 @@ -1041,29 +1041,29 @@ /turf/open/ground/grass, /area/oscar_outpost/outside/west) "ly" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /obj/structure/barricade/sandbags{ dir = 8; name = "trench lining"; @@ -1300,7 +1300,7 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/northeast) "ow" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 1; pixel_y = 7 }, @@ -1545,13 +1545,13 @@ }, /area/oscar_outpost/outside/northeast) "pQ" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 4 }, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/northwest) "pU" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 8 }, /turf/open/floor/plating/ground/dirt2, @@ -1786,7 +1786,7 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/north) "tl" = ( -/obj/item/weapon/gun/tl102/hsg_nest, +/obj/item/weapon/gun/hsg_102/hsg_nest, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/east) "tm" = ( @@ -1854,7 +1854,7 @@ /turf/open/floor/plating/ground/dirt, /area/oscar_outpost/outside/road) "uB" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 1 }, /turf/open/floor/engine/cult{ @@ -1873,7 +1873,7 @@ }, /area/oscar_outpost) "uN" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 4 }, /obj/structure/barricade/metal{ @@ -1977,7 +1977,7 @@ }, /area/oscar_outpost) "wr" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 8 }, /obj/structure/barricade/metal{ @@ -2065,7 +2065,7 @@ }, /area/oscar_outpost/outside/northeast) "xh" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 1 }, /obj/structure/barricade/metal{ @@ -2184,29 +2184,29 @@ /turf/open/floor, /area/oscar_outpost) "zh" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /turf/open/floor/engine/cult{ dir = 2 }, @@ -2244,7 +2244,7 @@ name = "trench lining"; pixel_y = 1 }, -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 4 }, /turf/open/floor/plating/ground/dirt2, @@ -2876,7 +2876,7 @@ /turf/open/floor/plating/ground/dirt, /area/oscar_outpost/outside/north) "FW" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 8 }, /turf/open/floor/plating/ground/dirt2, @@ -3166,29 +3166,29 @@ }, /area/oscar_outpost/outside/road) "JN" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /obj/structure/barricade/sandbags{ dir = 8; name = "trench lining"; @@ -3239,7 +3239,7 @@ name = "trench lining"; pixel_y = 1 }, -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 8 }, /turf/open/floor/plating/ground/dirt2, @@ -3349,7 +3349,7 @@ /turf/open/floor, /area/oscar_outpost) "Lj" = ( -/obj/item/weapon/gun/tl102/hsg_nest, +/obj/item/weapon/gun/hsg_102/hsg_nest, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/west) "Lu" = ( @@ -3436,7 +3436,7 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/west) "Mq" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 1; pixel_y = 7 }, @@ -3710,7 +3710,7 @@ }, /area/oscar_outpost) "PI" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 1; pixel_y = 7 }, @@ -3745,29 +3745,29 @@ }, /area/oscar_outpost/outside/northeast) "PQ" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/northeast) "PU" = ( @@ -3812,29 +3812,29 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/east) "Qu" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /obj/structure/barricade/sandbags{ dir = 1; name = "trench lining"; @@ -4467,29 +4467,29 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/north) "Zu" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/northwest) "Zz" = ( @@ -4498,29 +4498,29 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/northwest) "ZD" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /obj/structure/barricade/sandbags{ dir = 4; name = "trench lining"; diff --git a/_maps/modularmaps/oscaroutpost/oscarnorthvar2.dmm b/_maps/modularmaps/oscaroutpost/oscarnorthvar2.dmm index f60d2ca7bf816..583fb87c41747 100644 --- a/_maps/modularmaps/oscaroutpost/oscarnorthvar2.dmm +++ b/_maps/modularmaps/oscaroutpost/oscarnorthvar2.dmm @@ -119,34 +119,34 @@ name = "trench lining"; pixel_y = 10 }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, @@ -276,7 +276,7 @@ name = "trench lining"; pixel_y = 1 }, -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 8; name = "\improper T37 Medium Machinegun" }, @@ -360,55 +360,55 @@ /area/oscar_outpost) "dd" = ( /obj/structure/rack, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/engine/cult{ @@ -701,55 +701,55 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/road) "fP" = ( -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, @@ -1053,7 +1053,7 @@ name = "trench lining"; pixel_y = 1 }, -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 8; name = "\improper T37 Medium Machinegun" }, @@ -1115,7 +1115,7 @@ name = "trench lining"; pixel_y = 1 }, -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 4 }, /turf/open/floor/plating/ground/dirt2, @@ -1798,52 +1798,52 @@ name = "trench lining"; pixel_y = 10 }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, @@ -2040,14 +2040,14 @@ name = "trench lining"; pixel_y = 10 }, -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 1; name = "\improper T37 Medium Machinegun" }, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/northwest) "tz" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 1; pixel_y = 7 }, @@ -2183,34 +2183,34 @@ name = "trench lining"; pixel_y = 10 }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /obj/structure/barricade/sandbags{ @@ -2318,7 +2318,7 @@ /turf/open/floor/plating/ground/dirt, /area/oscar_outpost/outside/north) "wf" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 8; name = "\improper T37 Medium Machinegun" }, @@ -2456,7 +2456,7 @@ /obj/structure/barricade/metal{ dir = 1 }, -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 1; name = "\improper T37 Medium Machinegun" }, @@ -2837,7 +2837,7 @@ /turf/open/floor/plating/ground/dirt, /area/oscar_outpost/outside/north) "Bo" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 4 }, /turf/open/floor/plating/ground/dirt2, @@ -2956,7 +2956,7 @@ /turf/open/floor, /area/oscar_outpost) "Dg" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 1; pixel_y = 7 }, @@ -3023,52 +3023,52 @@ name = "trench lining"; pixel_y = 10 }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, @@ -3081,7 +3081,7 @@ /turf/open/floor/mainship/sterile, /area/oscar_outpost) "Dm" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 1; pixel_y = 7 }, @@ -3172,7 +3172,7 @@ name = "trench lining"; pixel_y = 1 }, -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 1; pixel_y = 7 }, @@ -3241,40 +3241,40 @@ name = "trench lining"; pixel_y = 10 }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, @@ -3327,7 +3327,7 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/north) "FM" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 4; name = "\improper T37 Medium Machinegun" }, @@ -3416,7 +3416,7 @@ /turf/open/liquid/water/river, /area/oscar_outpost/outside/north) "GR" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 1; pixel_y = 7 }, @@ -3606,34 +3606,34 @@ name = "trench lining"; pixel_y = 10 }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /obj/structure/barricade/sandbags{ @@ -3880,7 +3880,7 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/west) "Mj" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 1; pixel_y = 7 }, @@ -4296,7 +4296,7 @@ }, /area/oscar_outpost/outside/east) "Pn" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 8; name = "\improper T37 Medium Machinegun" }, @@ -4331,43 +4331,43 @@ /area/oscar_outpost/outside/northwest) "PF" = ( /obj/structure/table/mainship, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/weapon/gun/tl102{ +/obj/item/weapon/gun/hsg_102{ name = "\improper T37 Medium Machinegun" }, -/obj/item/weapon/gun/tl102{ +/obj/item/weapon/gun/hsg_102{ name = "\improper T37 Medium Machinegun" }, /obj/machinery/light{ @@ -4395,67 +4395,67 @@ name = "trench lining"; pixel_y = 1 }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, @@ -4517,55 +4517,55 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/north) "QH" = ( -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /obj/effect/ai_node, @@ -4734,7 +4734,7 @@ }, /area/oscar_outpost) "RD" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ name = "\improper T37 Medium Machinegun" }, /turf/open/floor/plating/ground/dirt2, @@ -4745,40 +4745,40 @@ name = "trench lining"; pixel_y = 10 }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/east) "Sh" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 1; pixel_y = 7 }, @@ -4943,7 +4943,7 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/west) "Ug" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 8; name = "\improper T37 Medium Machinegun" }, @@ -5138,7 +5138,7 @@ /turf/open/floor/plating/ground/dirtgrassborder/corner, /area/oscar_outpost/outside/west) "WC" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 4; name = "\improper T37 Medium Machinegun" }, @@ -5207,34 +5207,34 @@ name = "trench lining"; pixel_y = 10 }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, @@ -5388,19 +5388,19 @@ /turf/open/floor, /area/oscar_outpost) "Yh" = ( -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, @@ -5463,20 +5463,20 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/north) "YM" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 4 }, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/northeast) "YO" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ dir = 1; pixel_y = 7 }, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/north) "YT" = ( -/obj/item/weapon/gun/tl102/hsg_nest{ +/obj/item/weapon/gun/hsg_102/hsg_nest{ name = "\improper T37 Medium Machinegun" }, /turf/open/floor/plating/ground/dirt2, @@ -5598,80 +5598,80 @@ /turf/open/floor, /area/oscar_outpost) "Zu" = ( -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/northwest) "Zz" = ( -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, /obj/structure/barricade/sandbags{ dir = 4; name = "trench lining"; diff --git a/_maps/modularmaps/oscaroutpost/oscarnorthvar3.dmm b/_maps/modularmaps/oscaroutpost/oscarnorthvar3.dmm index 7676a305ae11a..8adcf95936aa9 100644 --- a/_maps/modularmaps/oscaroutpost/oscarnorthvar3.dmm +++ b/_maps/modularmaps/oscaroutpost/oscarnorthvar3.dmm @@ -220,34 +220,34 @@ /turf/open/ground/grass, /area/oscar_outpost/outside/northwest) "bn" = ( -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, @@ -597,55 +597,55 @@ /area/oscar_outpost/outside/northeast) "dd" = ( /obj/structure/rack, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/engine/cult{ @@ -1032,55 +1032,55 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/road) "fP" = ( -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, @@ -1781,7 +1781,7 @@ /turf/open/ground/grass, /area/oscar_outpost/outside/west) "ll" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 4 }, /turf/open/floor/plating/ground/dirt2, @@ -1948,7 +1948,7 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/northwest) "mR" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 1; pixel_y = -5 }, @@ -2729,52 +2729,52 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/northwest) "rw" = ( -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, @@ -2932,7 +2932,7 @@ /obj/structure/platform/trench{ dir = 1 }, -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 1; pixel_y = -5 }, @@ -3143,34 +3143,34 @@ }, /area/oscar_outpost/outside/northwest) "vg" = ( -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, @@ -3256,7 +3256,7 @@ /turf/open/ground/grass, /area/oscar_outpost/outside/east) "wf" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 8; name = "\improper T37 Medium Machinegun" }, @@ -3397,7 +3397,7 @@ /obj/structure/barricade/metal{ dir = 1 }, -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 1 }, /turf/open/floor/engine/cult{ @@ -3903,7 +3903,7 @@ /turf/open/floor/plating, /area/oscar_outpost/outside/north) "Bo" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 4 }, /turf/open/floor/plating/ground/dirt2, @@ -4156,7 +4156,7 @@ /turf/open/floor, /area/oscar_outpost) "Dg" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 1; pixel_y = -5 }, @@ -4225,52 +4225,52 @@ /turf/open/floor/wood, /area/oscar_outpost) "Dk" = ( -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, @@ -4331,7 +4331,7 @@ }, /area/oscar_outpost/outside/northeast) "DB" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 1; pixel_y = -5 }, @@ -4523,40 +4523,40 @@ /turf/closed/wall/r_wall, /area/oscar_outpost) "Fu" = ( -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, @@ -4611,7 +4611,7 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/north) "FM" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 4; name = "\improper T37 Medium Machinegun" }, @@ -4719,7 +4719,7 @@ /turf/open/floor/plating/ground/dirtgrassborder/corner, /area/oscar_outpost/outside/northeast) "GR" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 1; pixel_y = -5 }, @@ -5000,34 +5000,34 @@ /turf/open/floor/plating/ground/dirtgrassborder, /area/oscar_outpost/outside/northwest) "IT" = ( -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, @@ -5133,7 +5133,7 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/northeast) "Kp" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 1; pixel_y = -5 }, @@ -5917,7 +5917,7 @@ }, /area/oscar_outpost/outside/east) "Pn" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 8; name = "\improper T37 Medium Machinegun" }, @@ -5955,43 +5955,43 @@ /area/oscar_outpost) "PF" = ( /obj/structure/table/mainship, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/weapon/gun/tl102{ +/obj/item/weapon/gun/hsg_102{ name = "\improper T37 Medium Machinegun" }, -/obj/item/weapon/gun/tl102{ +/obj/item/weapon/gun/hsg_102{ name = "\improper T37 Medium Machinegun" }, /obj/machinery/light{ @@ -6026,67 +6026,67 @@ }, /area/oscar_outpost/outside/northwest) "PM" = ( -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, @@ -6359,7 +6359,7 @@ /turf/open/floor/mainship/sterile, /area/oscar_outpost) "RA" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 1; pixel_y = -5 }, @@ -6376,7 +6376,7 @@ }, /area/oscar_outpost) "RD" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless, +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/west) "RL" = ( @@ -6406,34 +6406,34 @@ }, /area/oscar_outpost/outside/east) "Sd" = ( -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, @@ -6673,7 +6673,7 @@ /turf/open/ground/grass, /area/oscar_outpost/outside/east) "Ug" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 8; name = "\improper T37 Medium Machinegun" }, @@ -6858,7 +6858,7 @@ /turf/open/floor/plating/ground/dirtgrassborder/corner, /area/oscar_outpost/outside/west) "WC" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 4; name = "\improper T37 Medium Machinegun" }, @@ -6894,34 +6894,34 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/east) "Xn" = ( -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, @@ -7021,19 +7021,19 @@ /turf/open/floor, /area/oscar_outpost) "Yh" = ( -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, @@ -7075,13 +7075,13 @@ }, /area/oscar_outpost/outside/northwest) "YM" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 4 }, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/northeast) "YT" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless, +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/east) "YV" = ( @@ -7177,80 +7177,80 @@ }, /area/oscar_outpost/outside/road) "Zu" = ( -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, -/obj/item/ammo_magazine/tl102{ +/obj/item/ammo_magazine/hsg_102{ name = "T37 MMG ammunition box (10x28mm tungsten rounds)" }, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/northwest) "Zz" = ( -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, -/obj/item/ammo_magazine/tl102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, +/obj/item/ammo_magazine/hsg_102, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/west) "ZB" = ( diff --git a/_maps/modularmaps/oscaroutpost/oscarnorthvar4.dmm b/_maps/modularmaps/oscaroutpost/oscarnorthvar4.dmm index eed7f3f8b9e63..adf274436d4ad 100644 --- a/_maps/modularmaps/oscaroutpost/oscarnorthvar4.dmm +++ b/_maps/modularmaps/oscaroutpost/oscarnorthvar4.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "ad" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 4 }, /turf/open/floor/plating/ground/dirt2, @@ -76,36 +76,36 @@ "aT" = ( /obj/structure/table/rusticwoodentable, /obj/machinery/light, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /turf/open/floor, /area/oscar_outpost) "aU" = ( @@ -174,7 +174,7 @@ /turf/open/floor/plating/ground/dirtgrassborder/corner, /area/oscar_outpost/outside/northeast) "bx" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 1; pixel_y = -5 }, @@ -485,26 +485,26 @@ "eE" = ( /obj/structure/table/mainship, /obj/item/tool/pen, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /turf/open/floor, /area/oscar_outpost) "eF" = ( @@ -1396,7 +1396,7 @@ /turf/open/ground/grass, /area/oscar_outpost/outside/east) "ow" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 1; pixel_y = -5 }, @@ -1666,13 +1666,13 @@ }, /area/oscar_outpost/outside/northeast) "pQ" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 4 }, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/northwest) "pU" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 8 }, /turf/open/floor/plating/ground/dirt2, @@ -2049,7 +2049,7 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/north) "tl" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless, +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/east) "tm" = ( @@ -2170,7 +2170,7 @@ }, /area/oscar_outpost) "uN" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 4 }, /obj/structure/barricade/metal{ @@ -2330,7 +2330,7 @@ /turf/open/ground/grass, /area/oscar_outpost/outside/west) "wr" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 8 }, /obj/structure/barricade/metal{ @@ -2415,7 +2415,7 @@ }, /area/oscar_outpost/outside/northeast) "xh" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 1; pixel_y = -5 }, @@ -2533,29 +2533,29 @@ /turf/open/floor, /area/oscar_outpost) "zh" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /turf/open/floor/engine/cult{ dir = 2 }, @@ -2588,7 +2588,7 @@ }, /area/oscar_outpost/outside/northeast) "zF" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 4 }, /turf/open/floor/plating/ground/dirt2, @@ -3263,7 +3263,7 @@ /turf/open/floor/plating/ground/dirt, /area/oscar_outpost/outside/north) "FW" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 8 }, /turf/open/floor/plating/ground/dirt2, @@ -3636,7 +3636,7 @@ }, /area/oscar_outpost) "Kj" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 8 }, /turf/open/floor/plating/ground/dirt2, @@ -3744,7 +3744,7 @@ /turf/open/floor, /area/oscar_outpost) "Lj" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless, +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/west) "Lk" = ( @@ -4329,7 +4329,7 @@ }, /area/oscar_outpost) "PI" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 1; pixel_y = -5 }, @@ -4381,29 +4381,29 @@ }, /area/oscar_outpost/outside/northeast) "PQ" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/northeast) "PU" = ( @@ -4452,29 +4452,29 @@ /turf/closed/wall, /area/oscar_outpost/outside/west) "Qu" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/west) "Qz" = ( @@ -5260,7 +5260,7 @@ /turf/open/floor/tile/dark, /area/oscar_outpost) "YO" = ( -/obj/item/weapon/gun/tl102/hsg_nest/sandless{ +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless{ dir = 1; pixel_y = -5 }, @@ -5321,29 +5321,29 @@ /turf/open/ground/grass, /area/oscar_outpost/outside/northeast) "Zu" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/northwest) "Zz" = ( @@ -5376,29 +5376,29 @@ /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/east) "ZD" = ( -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, +/obj/item/ammo_magazine/hsg_102/hsg_nest, /turf/open/floor/plating/ground/dirt2, /area/oscar_outpost/outside/east) "ZE" = ( diff --git a/_maps/shuttles/alamo.dmm b/_maps/shuttles/alamo.dmm index 65f4cf7e6ec8b..178c5773e7825 100644 --- a/_maps/shuttles/alamo.dmm +++ b/_maps/shuttles/alamo.dmm @@ -12,7 +12,9 @@ dir = 8 }, /obj/machinery/door/airlock/dropship_hatch/left, -/turf/open/shuttle/dropship/floor, +/turf/open/shuttle/dropship/floor/out{ + dir = 1 + }, /area/shuttle/dropship/alamo) "ad" = ( /obj/structure/dropship_piece/one/front/right, @@ -48,9 +50,6 @@ /obj/machinery/computer/security/dropship/one, /turf/closed/shuttle/dropship1/panel, /area/shuttle/dropship/alamo) -"al" = ( -/turf/open/shuttle/dropship/floor, -/area/shuttle/dropship/alamo) "am" = ( /obj/machinery/computer/dropship_weapons/dropship1, /turf/closed/shuttle/dropship1/panel{ @@ -83,18 +82,13 @@ /turf/closed/shuttle/dropship1/interiorwindow, /area/shuttle/dropship/alamo) "as" = ( +/obj/machinery/light, /obj/structure/bed/chair/dropship/pilot{ dir = 1 }, -/obj/machinery/light, -/turf/open/shuttle/dropship/floor, -/area/shuttle/dropship/alamo) -"at" = ( -/obj/item/radio/intercom/dropship{ - pixel_x = 21; - pixel_y = 16 +/turf/open/shuttle/dropship/floor/out{ + dir = 8 }, -/turf/open/shuttle/dropship/floor, /area/shuttle/dropship/alamo) "au" = ( /obj/structure/bed/chair/dropship/pilot{ @@ -104,7 +98,9 @@ pixel_x = -6; pixel_y = -16 }, -/turf/open/shuttle/dropship/floor, +/turf/open/shuttle/dropship/floor/out{ + dir = 4 + }, /area/shuttle/dropship/alamo) "av" = ( /turf/closed/shuttle/dropship1/interiorwindow{ @@ -135,7 +131,7 @@ /area/shuttle/dropship/alamo) "aC" = ( /obj/machinery/door/airlock/hatch/cockpit, -/turf/open/shuttle/dropship/floor, +/turf/open/shuttle/dropship/floor/out, /area/shuttle/dropship/alamo) "aD" = ( /turf/closed/shuttle/dropship1/interiormisc{ @@ -160,27 +156,33 @@ }, /area/shuttle/dropship/alamo) "aI" = ( -/obj/structure/bed/chair/dropship/passenger{ - dir = 4 - }, +/obj/structure/bed/chair/dropship/doublewide/left, +/obj/structure/bed/chair/dropship/doublewide/right, /turf/open/shuttle/dropship/floor, /area/shuttle/dropship/alamo) "aJ" = ( -/obj/item/radio/intercom/dropship, -/turf/open/shuttle/dropship/six, +/obj/machinery/vending/nanomed, +/turf/open/shuttle/dropship/nine, /area/shuttle/dropship/alamo) "aK" = ( /turf/open/shuttle/dropship/five, /area/shuttle/dropship/alamo) "aM" = ( -/obj/item/radio/intercom/dropship, -/turf/open/shuttle/dropship/seven, +/obj/structure/bed/chair/dropship/doublewide/left, +/obj/structure/bed/chair/dropship/doublewide/right, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/shuttle/dropship/floor/out{ + dir = 1 + }, /area/shuttle/dropship/alamo) "aN" = ( -/obj/structure/bed/chair/dropship/passenger{ +/obj/structure/bed/chair/dropship/doublewide/right/bravo, +/obj/structure/bed/chair/dropship/doublewide/left/alpha, +/turf/open/shuttle/dropship/floor/out{ dir = 8 }, -/turf/open/shuttle/dropship/floor, /area/shuttle/dropship/alamo) "aO" = ( /turf/closed/shuttle/dropship1/finright{ @@ -204,18 +206,15 @@ "aS" = ( /turf/open/shuttle/dropship/three, /area/shuttle/dropship/alamo) -"aT" = ( -/turf/closed/shuttle/dropship1/aisle, -/area/shuttle/dropship/alamo) "aU" = ( -/obj/structure/bed/chair/dropship/passenger{ - dir = 8 +/obj/structure/bed/chair/dropship/doublewide/right, +/obj/structure/bed/chair/dropship/doublewide/left, +/obj/machinery/light{ + dir = 4 }, -/obj/machinery/camera/autoname/mainship/dropship_one{ - dir = 8; - pixel_x = 16 +/turf/open/shuttle/dropship/floor/out{ + dir = 1 }, -/turf/open/shuttle/dropship/floor, /area/shuttle/dropship/alamo) "aV" = ( /turf/closed/shuttle/dropship1/finright{ @@ -228,26 +227,25 @@ }, /area/shuttle/dropship/alamo) "aX" = ( -/obj/effect/attach_point/weapon/dropship1{ - dir = 8; - }, -/obj/structure/dropship_piece/one/wing/left/bottom, -/turf/template_noop, +/obj/machinery/vending/snack/alamo, +/turf/open/shuttle/dropship/thirtyeight, /area/shuttle/dropship/alamo) "aY" = ( /turf/closed/shuttle/dropship1/finleft, /area/shuttle/dropship/alamo) "aZ" = ( -/turf/closed/shuttle/dropship1/aisle{ - dir = 4 +/obj/machinery/camera/autoname/mainship/dropship_one{ + pixel_y = 32 }, +/turf/open/shuttle/dropship/five, /area/shuttle/dropship/alamo) "ba" = ( -/turf/closed/shuttle/dropship1/finright, +/obj/structure/bed/chair/dropship/doublewide/fieldcommander, +/turf/open/shuttle/dropship/floor/alt, /area/shuttle/dropship/alamo) "bb" = ( /obj/effect/attach_point/weapon/dropship1{ - dir = 4; + dir = 4 }, /obj/structure/dropship_piece/one/wing/right/bottom, /turf/template_noop, @@ -255,78 +253,56 @@ "bc" = ( /obj/machinery/door/poddoor/shutters/transit, /obj/machinery/door/airlock/dropship_hatch/right, -/turf/open/shuttle/dropship/floor, +/turf/open/shuttle/dropship/floor/out{ + dir = 1 + }, /area/shuttle/dropship/alamo) "bd" = ( -/obj/structure/bed/chair/dropship/passenger{ - dir = 8 - }, -/obj/machinery/vending/nanomed{ - dir = 8 +/obj/docking_port/mobile/marine_dropship/one, +/turf/closed/shuttle/dropship1/aislewindow{ + dir = 1 }, -/turf/open/shuttle/dropship/floor, /area/shuttle/dropship/alamo) "be" = ( -/obj/structure/bed/chair/dropship/passenger{ - dir = 4 - }, -/obj/machinery/vending/nanomed{ - dir = 4 - }, -/turf/open/shuttle/dropship/floor, -/area/shuttle/dropship/alamo) -"bg" = ( -/obj/docking_port/mobile/marine_dropship/one, -/turf/closed/shuttle/dropship1/aisle{ - dir = 4 +/obj/machinery/door/poddoor/shutters/transit{ + dir = 8 }, +/obj/machinery/door/airlock/dropship_hatch/left, +/turf/open/shuttle/dropship/floor/out, /area/shuttle/dropship/alamo) "bi" = ( -/turf/closed/shuttle/dropship1/edge{ - dir = 4 - }, +/obj/structure/bed/chair/dropship/doublewide/right, +/obj/structure/bed/chair/dropship/doublewide/left, +/turf/open/shuttle/dropship/floor, /area/shuttle/dropship/alamo) "bj" = ( -/obj/structure/bed/chair/dropship/passenger{ - dir = 8 - }, /obj/machinery/light{ dir = 4 }, /turf/open/shuttle/dropship/floor, /area/shuttle/dropship/alamo) "bk" = ( -/turf/closed/shuttle/dropship1/aisle{ - dir = 8 +/obj/structure/dropship_piece/one/wing/left/bottom, +/obj/effect/attach_point/weapon/dropship1{ + dir = 4 }, +/turf/template_noop, /area/shuttle/dropship/alamo) "bl" = ( -/obj/structure/bed/chair/dropship/passenger{ - dir = 4 - }, /obj/machinery/light{ dir = 8 }, /turf/open/shuttle/dropship/floor, /area/shuttle/dropship/alamo) -"bm" = ( -/turf/closed/shuttle/dropship1/edge{ - dir = 8 - }, -/area/shuttle/dropship/alamo) "bn" = ( -/obj/machinery/telecomms/relay/preset/telecomms/onboard, -/turf/closed/shuttle/dropship1/aisle{ - dir = 4 - }, +/turf/open/shuttle/dropship, /area/shuttle/dropship/alamo) "bo" = ( /turf/open/shuttle/dropship/four, /area/shuttle/dropship/alamo) "bp" = ( -/obj/item/radio/intercom/dropship, -/obj/machinery/holopad, -/turf/open/shuttle/dropship/five, +/obj/effect/attach_point/crew_weapon/dropship1, +/turf/open/shuttle/dropship/floor, /area/shuttle/dropship/alamo) "bq" = ( /turf/open/shuttle/dropship/eight, @@ -353,34 +329,20 @@ }, /area/shuttle/dropship/alamo) "bw" = ( -/obj/structure/bed/chair/dropship/passenger, -/turf/open/shuttle/dropship/floor, -/area/shuttle/dropship/alamo) -"bx" = ( -/obj/structure/bed/chair/dropship/passenger{ - dir = 4 - }, -/obj/machinery/camera/autoname/mainship/dropship_one{ - dir = 4; - pixel_x = -16 - }, -/obj/machinery/vending/nanomed{ - dir = 4 - }, -/turf/open/shuttle/dropship/floor, +/turf/open/shuttle/dropship/eleven, /area/shuttle/dropship/alamo) "by" = ( /turf/closed/shuttle/dropship1/edge/alt, /area/shuttle/dropship/alamo) "bD" = ( -/obj/structure/bed/chair/dropship/passenger{ - dir = 4 +/obj/structure/bed/chair/dropship/doublewide/left, +/obj/structure/bed/chair/dropship/doublewide/right, +/obj/machinery/light{ + dir = 8 }, -/obj/machinery/camera/autoname/mainship/dropship_one{ - dir = 4; - pixel_x = -16 +/turf/open/shuttle/dropship/floor/out{ + dir = 1 }, -/turf/open/shuttle/dropship/floor, /area/shuttle/dropship/alamo) "bE" = ( /obj/structure/dropship_piece/one/engine/lefttop, @@ -399,8 +361,13 @@ }, /area/shuttle/dropship/alamo) "bI" = ( -/obj/effect/attach_point/crew_weapon/dropship1, -/turf/open/shuttle/dropship/floor, +/obj/machinery/camera/autoname/mainship/dropship_one{ + dir = 8; + pixel_x = 16 + }, +/turf/open/shuttle/dropship/floor/out{ + dir = 1 + }, /area/shuttle/dropship/alamo) "bJ" = ( /turf/closed/shuttle/dropship1/wall, @@ -459,17 +426,10 @@ /turf/closed/shuttle/dropship1/interiormisc, /area/shuttle/dropship/alamo) "bY" = ( -/obj/machinery/door/airlock/multi_tile/mainship/dropshiprear/ds1, -/obj/machinery/door/poddoor/shutters/transit{ - dir = 1 - }, -/turf/open/shuttle/dropship/floor, -/area/shuttle/dropship/alamo) -"bZ" = ( /obj/machinery/door/poddoor/shutters/transit{ dir = 1 }, -/turf/open/shuttle/dropship/floor, +/turf/open/shuttle/dropship/floor/alt, /area/shuttle/dropship/alamo) "ca" = ( /turf/closed/shuttle/dropship1/interiormisc{ @@ -512,56 +472,193 @@ /obj/structure/dropship_piece/one/rearwing/rightrrbottom, /turf/template_noop, /area/shuttle/dropship/alamo) +"di" = ( +/obj/machinery/telecomms/relay/preset/telecomms/onboard/nondense, +/turf/open/shuttle/dropship/five, +/area/shuttle/dropship/alamo) "dS" = ( /turf/closed/shuttle/dropship1/enginetwo{ dir = 4 }, /area/shuttle/dropship/alamo) +"ec" = ( +/obj/machinery/door/poddoor/shutters/transit, +/obj/machinery/door/airlock/dropship_hatch/right, +/turf/open/shuttle/dropship/floor/out, +/area/shuttle/dropship/alamo) +"ez" = ( +/obj/structure/bed/chair/dropship/doublewide/left, +/obj/structure/bed/chair/dropship/doublewide/right, +/obj/structure/closet/walllocker/hydrant/extinguisher{ + dir = 4 + }, +/turf/open/shuttle/dropship/floor/out, +/area/shuttle/dropship/alamo) +"gl" = ( +/turf/open/shuttle/dropship/thirtytwo, +/area/shuttle/dropship/alamo) "gB" = ( /turf/closed/shuttle/dropship1/edge/alt{ dir = 4 }, /area/shuttle/dropship/alamo) -"iV" = ( -/obj/structure/bed/chair/dropship/passenger{ +"hm" = ( +/obj/structure/bed/chair/dropship/doublewide/left, +/obj/structure/bed/chair/dropship/doublewide/right, +/obj/item/radio/intercom/dropship{ dir = 4 }, -/obj/structure/closet/walllocker/hydrant/extinguisher{ +/turf/open/shuttle/dropship/floor, +/area/shuttle/dropship/alamo) +"ie" = ( +/obj/machinery/door/poddoor/shutters/transit{ + dir = 1 + }, +/turf/open/shuttle/dropship/floor/out{ + dir = 4 + }, +/area/shuttle/dropship/alamo) +"ji" = ( +/obj/structure/bed/chair/dropship/doublewide/left, +/obj/structure/bed/chair/dropship/doublewide/right, +/obj/item/radio/intercom/dropship{ + dir = 8 + }, +/turf/open/shuttle/dropship/floor/out{ + dir = 8 + }, +/area/shuttle/dropship/alamo) +"jI" = ( +/obj/structure/bed/chair/dropship/doublewide/left, +/obj/structure/bed/chair/dropship/doublewide/right, +/turf/open/shuttle/dropship/floor/out{ + dir = 1 + }, +/area/shuttle/dropship/alamo) +"jS" = ( +/turf/closed/shuttle/dropship1/aislewindow{ + dir = 8 + }, +/area/shuttle/dropship/alamo) +"li" = ( +/turf/closed/shuttle/dropship1/aislewindow{ dir = 4 }, +/area/shuttle/dropship/alamo) +"me" = ( +/obj/structure/bed/chair/dropship/doublewide/left, +/obj/structure/bed/chair/dropship/doublewide/right, +/turf/open/shuttle/dropship/floor/out, +/area/shuttle/dropship/alamo) +"nt" = ( +/obj/structure/bed/chair/dropship/doublewide/left, +/obj/structure/bed/chair/dropship/doublewide/right, +/turf/open/shuttle/dropship/floor/out{ + dir = 4 + }, +/area/shuttle/dropship/alamo) +"nO" = ( +/obj/machinery/holopad, /turf/open/shuttle/dropship/floor, /area/shuttle/dropship/alamo) +"og" = ( +/obj/structure/bed/chair/dropship/doublewide/right/delta, +/obj/structure/bed/chair/dropship/doublewide/left/charlie, +/turf/open/shuttle/dropship/floor/out{ + dir = 4 + }, +/area/shuttle/dropship/alamo) +"oO" = ( +/obj/machinery/vending/nanomed{ + dir = 4 + }, +/turf/open/shuttle/dropship/thirtyeight, +/area/shuttle/dropship/alamo) +"pw" = ( +/turf/open/shuttle/dropship/thirtythree, +/area/shuttle/dropship/alamo) +"sk" = ( +/turf/open/shuttle/dropship/thirtyseven, +/area/shuttle/dropship/alamo) +"tf" = ( +/turf/open/shuttle/dropship/thirtysix, +/area/shuttle/dropship/alamo) "vw" = ( /obj/structure/dropship_piece/one/engine/leftbottom, /turf/template_noop, /area/shuttle/dropship/alamo) +"vQ" = ( +/turf/open/shuttle/dropship/floor/out, +/area/shuttle/dropship/alamo) +"yv" = ( +/turf/closed/shuttle/dropship1/finright, +/area/shuttle/dropship/alamo) "yA" = ( -/obj/structure/bed/chair/dropship/passenger{ - dir = 8 +/turf/open/shuttle/dropship/floor/alt{ + dir = 1 }, -/obj/structure/closet/walllocker/hydrant/extinguisher{ +/area/shuttle/dropship/alamo) +"Aq" = ( +/turf/open/shuttle/dropship/thirtyfour, +/area/shuttle/dropship/alamo) +"Bi" = ( +/obj/machinery/door/poddoor/shutters/transit{ + dir = 1 + }, +/obj/machinery/door/airlock/multi_tile/mainship/dropshiprear/ds1, +/turf/open/shuttle/dropship/floor/out{ dir = 8 }, -/turf/open/shuttle/dropship/floor, /area/shuttle/dropship/alamo) "Dp" = ( /turf/open/shuttle/dropship/ten, /area/shuttle/dropship/alamo) +"DE" = ( +/turf/open/shuttle/dropship/nine, +/area/shuttle/dropship/alamo) "FA" = ( /turf/closed/shuttle/dropship1/enginetwo{ dir = 8 }, /area/shuttle/dropship/alamo) +"IA" = ( +/obj/machinery/camera/autoname/mainship/dropship_one{ + dir = 4; + pixel_x = -16 + }, +/turf/open/shuttle/dropship/floor/out{ + dir = 1 + }, +/area/shuttle/dropship/alamo) "Ki" = ( /obj/machinery/computer/shuttle/marine_dropship/one, /turf/closed/shuttle/dropship1/panel{ dir = 1 }, /area/shuttle/dropship/alamo) +"MG" = ( +/turf/closed/shuttle/dropship1/aislewindow, +/area/shuttle/dropship/alamo) +"Nj" = ( +/turf/open/shuttle/dropship/thirtyone, +/area/shuttle/dropship/alamo) +"OZ" = ( +/obj/machinery/vending/nanomed{ + dir = 8 + }, +/turf/open/shuttle/dropship/thirtynine, +/area/shuttle/dropship/alamo) "QK" = ( /obj/structure/dropship_piece/one/engine/rightbottom, /turf/template_noop, /area/shuttle/dropship/alamo) +"VW" = ( +/turf/open/shuttle/dropship/thirtyfive, +/area/shuttle/dropship/alamo) +"Yd" = ( +/obj/machinery/vending/cola/alamo, +/turf/open/shuttle/dropship/thirtynine, +/area/shuttle/dropship/alamo) "Zx" = ( /turf/closed/shuttle/dropship1/wall{ dir = 1 @@ -576,7 +673,7 @@ ao ao aG aQ -aX +bk ao ao ao @@ -600,10 +697,10 @@ ay aH aR aY -ac +bu +be ac bu -bi bu bt bF @@ -620,14 +717,14 @@ ao ao aq aE -aI +aX bD -aI -al -al -aI -aI -aI +hm +ez +Dp +bw +bD +me br bu bu @@ -645,17 +742,17 @@ ar aE aJ aS +Nj aS -aS -aS -aS +Aq +tf aS bo -aI -bx -iV +nt +oO +IA bl -aI +vQ bX cc cg @@ -666,20 +763,20 @@ af ak as aB -aK -bj -aN -bd -yA +aZ aN -bj -Dp -aS -aS +aK +jI +aI +aI +me +DE aS +sk aS aS -bY +pw +Bi ao ao "} @@ -687,22 +784,22 @@ ao ab ag Ki -at +yA aC -aK -aT bn -aZ -aZ -bg -bk +ba +di +jS +li +bd +MG +aK +jI +aK bp -bw -bI -al -al -al -bZ +nO +Dp +bY ao ao "} @@ -713,19 +810,19 @@ am au aD aK -bl +og +aK +jI aI -be -iV aI -bl -Dp -aS +me +DE aS +sk aS aS -aS -bZ +Aq +ie ao ao "} @@ -735,19 +832,19 @@ ai an av aE -aM -aS -aS -aS +aJ aS +gl aS +pw +VW aS bq -aN -bd -yA +ji +OZ +bI bj -aN +vQ ca cd ci @@ -758,14 +855,14 @@ ao ao aw aE -aN +Yd aU -aN -al -al -aN -aN -aN +bi +me +Dp +bw +aM +me bv by by @@ -783,11 +880,11 @@ ax aF aO aV -ba -bc +yv +gB bc +ec gB -bm by bs bE diff --git a/_maps/shuttles/big_ert.dmm b/_maps/shuttles/big_ert.dmm index b4462c11ccf5d..0ce329b580dc8 100644 --- a/_maps/shuttles/big_ert.dmm +++ b/_maps/shuttles/big_ert.dmm @@ -588,10 +588,10 @@ /obj/item/stack/sheet/plasteel{ amount = 30 }, -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 50 }, -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 50 }, /obj/item/stack/cable_coil, diff --git a/_maps/shuttles/distress.dmm b/_maps/shuttles/distress.dmm index 5352cc09e2569..b1794c00b5f28 100644 --- a/_maps/shuttles/distress.dmm +++ b/_maps/shuttles/distress.dmm @@ -177,11 +177,30 @@ dir = 1 }, /area/shuttle/ert) +"R" = ( +/obj/structure/barricade/plasteel{ + dir = 4 + }, +/obj/effect/mapping_helpers/barricade/closed, +/turf/open/shuttle/dropship/floor, +/area/shuttle/ert) "S" = ( /turf/closed/shuttle/ert/engines/right{ dir = 1 }, /area/shuttle/ert) +"U" = ( +/obj/structure/barricade/plasteel, +/obj/effect/mapping_helpers/barricade/closed, +/turf/open/shuttle/dropship/floor, +/area/shuttle/ert) +"W" = ( +/obj/structure/barricade/plasteel{ + dir = 8 + }, +/obj/effect/mapping_helpers/barricade/closed, +/turf/open/shuttle/dropship/floor, +/area/shuttle/ert) "X" = ( /turf/closed/shuttle/ert/engines/right/two{ dir = 1 @@ -212,11 +231,11 @@ O a e j -g +W s s s -g +W u y i @@ -235,7 +254,7 @@ q v g D -g +U I "} (4,1,1) = {" @@ -265,18 +284,18 @@ q w g E -g +U I "} (6,1,1) = {" a e n -g +R t t t -g +R u A o diff --git a/_maps/shuttles/distress_pmc.dmm b/_maps/shuttles/distress_pmc.dmm index afdd205c5c635..bb2959314ac06 100644 --- a/_maps/shuttles/distress_pmc.dmm +++ b/_maps/shuttles/distress_pmc.dmm @@ -183,6 +183,13 @@ "N" = ( /turf/closed/shuttle/dropship_white/engine_corner, /area/shuttle/ert/pmc) +"O" = ( +/obj/effect/mapping_helpers/barricade/closed, +/obj/structure/barricade/plasteel{ + dir = 4 + }, +/turf/open/shuttle/dropship/floor, +/area/shuttle/ert/pmc) "P" = ( /turf/closed/shuttle/ert/engines/right/two{ dir = 1 @@ -201,6 +208,13 @@ dir = 4 }, /area/shuttle/ert/pmc) +"T" = ( +/obj/effect/mapping_helpers/barricade/closed, +/obj/structure/barricade/plasteel{ + dir = 8 + }, +/turf/open/shuttle/dropship/floor, +/area/shuttle/ert/pmc) "U" = ( /turf/closed/shuttle/ert/engines/right/three{ dir = 1 @@ -226,6 +240,11 @@ dir = 1 }, /area/shuttle/ert/pmc) +"Z" = ( +/obj/effect/mapping_helpers/barricade/closed, +/obj/structure/barricade/plasteel, +/turf/open/shuttle/dropship/floor, +/area/shuttle/ert/pmc) (1,1,1) = {" a @@ -246,11 +265,11 @@ V a e j -g +T t t t -g +T H L F @@ -269,7 +288,7 @@ q v g E -g +Z I "} (4,1,1) = {" @@ -299,18 +318,18 @@ q w g G -g +Z I "} (6,1,1) = {" a e n -g +O u u u -g +O H M J diff --git a/_maps/shuttles/distress_ufo.dmm b/_maps/shuttles/distress_ufo.dmm index d452516ae7c52..db5021569ad4f 100644 --- a/_maps/shuttles/distress_ufo.dmm +++ b/_maps/shuttles/distress_ufo.dmm @@ -103,6 +103,8 @@ /turf/open/floor/light, /area/shuttle/ert) "x" = ( +/obj/structure/barricade/plasteel, +/obj/effect/mapping_helpers/barricade/closed, /turf/open/floor/podhatch/floor, /area/shuttle/ert) "y" = ( diff --git a/_maps/shuttles/distress_upp.dmm b/_maps/shuttles/distress_upp.dmm index 16337ebf08d74..6e98a999f1449 100644 --- a/_maps/shuttles/distress_upp.dmm +++ b/_maps/shuttles/distress_upp.dmm @@ -184,11 +184,23 @@ dir = 1 }, /area/shuttle/ert/upp) +"P" = ( +/obj/effect/mapping_helpers/barricade/closed, +/obj/structure/barricade/plasteel{ + dir = 4 + }, +/turf/open/shuttle/dropship/floor, +/area/shuttle/ert/upp) "Q" = ( /turf/closed/shuttle/ert/engines/left/three{ dir = 1 }, /area/shuttle/ert/upp) +"S" = ( +/obj/effect/mapping_helpers/barricade/closed, +/obj/structure/barricade/plasteel, +/turf/open/shuttle/dropship/floor, +/area/shuttle/ert/upp) "V" = ( /turf/closed/shuttle/ert/engines/right/three{ dir = 1 @@ -197,6 +209,13 @@ "W" = ( /turf/closed/shuttle/dropship_dark/interior_wall, /area/shuttle/ert/upp) +"Y" = ( +/obj/effect/mapping_helpers/barricade/closed, +/obj/structure/barricade/plasteel{ + dir = 8 + }, +/turf/open/shuttle/dropship/floor, +/area/shuttle/ert/upp) "Z" = ( /turf/closed/shuttle/ert/engines/right{ dir = 1 @@ -222,11 +241,11 @@ N a e j -g +Y t t t -g +Y x B W @@ -245,7 +264,7 @@ q v g E -g +S I "} (4,1,1) = {" @@ -275,18 +294,18 @@ q w g G -g +S I "} (6,1,1) = {" a e n -g +P u u u -g +P y D o diff --git a/_maps/shuttles/minidropship_combat_tad.dmm b/_maps/shuttles/minidropship_combat_tad.dmm deleted file mode 100644 index 4fc60b9931bac..0000000000000 --- a/_maps/shuttles/minidropship_combat_tad.dmm +++ /dev/null @@ -1,144 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/obj/structure/barricade/plasteel{ - dir = 8 - }, -/obj/structure/barricade/plasteel, -/turf/open/floor/mainship/mono, -/area/shuttle/minidropship) -"b" = ( -/obj/structure/barricade/plasteel{ - dir = 4 - }, -/turf/open/floor/mainship/mono, -/area/shuttle/minidropship) -"c" = ( -/obj/docking_port/mobile/marine_dropship/minidropship, -/obj/structure/bed/chair/dropship/pilot{ - dir = 1 - }, -/turf/open/floor/plating/plating_catwalk, -/area/shuttle/minidropship) -"f" = ( -/obj/structure/barricade/plasteel{ - dir = 8 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/mainship/mono, -/area/shuttle/minidropship) -"h" = ( -/obj/machinery/computer/camera_advanced/shuttle_docker/minidropship, -/obj/machinery/camera/autoname/mainship, -/turf/open/floor/mainship/mono, -/area/shuttle/minidropship) -"k" = ( -/obj/structure/barricade/plasteel{ - dir = 8 - }, -/obj/structure/barricade/plasteel{ - dir = 1 - }, -/turf/open/floor/mainship/mono, -/area/shuttle/minidropship) -"m" = ( -/obj/structure/barricade/plasteel{ - dir = 8 - }, -/turf/open/floor/mainship/mono, -/area/shuttle/minidropship) -"n" = ( -/obj/structure/barricade/plasteel{ - dir = 4 - }, -/obj/structure/barricade/plasteel{ - dir = 1 - }, -/turf/open/floor/mainship/mono, -/area/shuttle/minidropship) -"s" = ( -/obj/machinery/light, -/turf/open/floor/plating/plating_catwalk, -/area/shuttle/minidropship) -"u" = ( -/obj/machinery/light, -/obj/machinery/telecomms/relay/preset/telecomms/onboard/nondense, -/turf/open/floor/plating/plating_catwalk, -/area/shuttle/minidropship) -"v" = ( -/obj/structure/barricade/plasteel{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/shuttle/minidropship) -"y" = ( -/obj/structure/barricade/plasteel{ - dir = 8 - }, -/turf/open/floor/plating/plating_catwalk, -/area/shuttle/minidropship) -"A" = ( -/obj/structure/barricade/plasteel, -/turf/open/floor/plating/plating_catwalk, -/area/shuttle/minidropship) -"P" = ( -/obj/structure/barricade/plasteel{ - dir = 1 - }, -/turf/open/floor/plating/plating_catwalk, -/area/shuttle/minidropship) -"W" = ( -/obj/structure/barricade/plasteel, -/obj/structure/barricade/plasteel{ - dir = 4 - }, -/turf/open/floor/mainship/mono, -/area/shuttle/minidropship) -"X" = ( -/obj/effect/attach_point/crew_weapon/minidropship, -/turf/open/floor/mainship/mono, -/area/shuttle/minidropship) -"Y" = ( -/obj/structure/barricade/plasteel{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/mainship/mono, -/area/shuttle/minidropship) - -(1,1,1) = {" -k -y -f -y -m -y -m -y -a -"} -(2,1,1) = {" -P -X -s -h -c -X -u -X -A -"} -(3,1,1) = {" -n -v -Y -v -b -v -b -v -W -"} diff --git a/_maps/shuttles/minidropship_factorio.dmm b/_maps/shuttles/minidropship_factorio.dmm index ba0f82638ee13..02e7df7403c0e 100644 --- a/_maps/shuttles/minidropship_factorio.dmm +++ b/_maps/shuttles/minidropship_factorio.dmm @@ -72,9 +72,7 @@ /turf/open/floor/plating/plating_catwalk, /area/shuttle/minidropship) "w" = ( -/obj/machinery/camera/autoname/mainship{ - pixel_y = 16 - }, +/obj/machinery/camera/autoname/mainship/dropship_two, /turf/open/floor/mainship/mono, /area/shuttle/minidropship) "x" = ( diff --git a/_maps/shuttles/minidropship_food.dmm b/_maps/shuttles/minidropship_food.dmm index fa49947f571d2..035d16e222f98 100644 --- a/_maps/shuttles/minidropship_food.dmm +++ b/_maps/shuttles/minidropship_food.dmm @@ -7,7 +7,7 @@ /area/shuttle/minidropship) "c" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/minidropship, -/obj/machinery/camera/autoname/mainship, +/obj/machinery/camera/autoname/mainship/dropship_two, /turf/open/floor/iron/white/textured_half, /area/shuttle/minidropship) "d" = ( @@ -18,7 +18,7 @@ pixel_x = 25; pixel_y = 8 }, -/obj/item/clothing/suit/chef/classic, +/obj/item/clothing/suit/storage/chef/classic, /obj/item/tool/kitchen/rollingpin, /obj/item/clothing/head/chefhat, /turf/open/floor/iron/white/textured_half{ diff --git a/_maps/shuttles/minidropship_mobile_bar.dmm b/_maps/shuttles/minidropship_mobile_bar.dmm index deaa00309655e..6f15eb67c53ef 100644 --- a/_maps/shuttles/minidropship_mobile_bar.dmm +++ b/_maps/shuttles/minidropship_mobile_bar.dmm @@ -280,10 +280,10 @@ /area/shuttle/minidropship) "S" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/minidropship, -/obj/machinery/camera/autoname/mainship, /obj/structure/barricade/metal{ dir = 1 }, +/obj/machinery/camera/autoname/mainship/dropship_two, /turf/open/floor/carpet/side{ dir = 1 }, diff --git a/_maps/shuttles/minidropship_standard.dmm b/_maps/shuttles/minidropship_standard.dmm index 9f47352a0ad55..0f9df376d8d4b 100644 --- a/_maps/shuttles/minidropship_standard.dmm +++ b/_maps/shuttles/minidropship_standard.dmm @@ -52,6 +52,9 @@ name = "inner door-control" }, /obj/item/stack/barbed_wire/half_stack, +/obj/structure/closet/walllocker/hydrant/extinguisher{ + pixel_x = -25 + }, /turf/open/floor/mainship/mono, /area/shuttle/minidropship) "n" = ( @@ -78,9 +81,6 @@ /obj/machinery/vending/nanomed/tadpolemed{ pixel_x = 5 }, -/obj/structure/closet/walllocker/hydrant/extinguisher{ - pixel_x = -25 - }, /turf/open/floor/mainship/mono, /area/shuttle/minidropship) "s" = ( @@ -88,7 +88,7 @@ /area/shuttle/minidropship) "u" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/minidropship, -/obj/machinery/camera/autoname/mainship, +/obj/machinery/camera/autoname/mainship/dropship_two, /turf/open/floor/plating/plating_catwalk, /area/shuttle/minidropship) "v" = ( diff --git a/_maps/shuttles/minidropship_umbilical.dmm b/_maps/shuttles/minidropship_umbilical.dmm index 5a832d0a50fd0..c7787ac4aa938 100644 --- a/_maps/shuttles/minidropship_umbilical.dmm +++ b/_maps/shuttles/minidropship_umbilical.dmm @@ -42,9 +42,8 @@ dir = 8 }, /obj/effect/turf_decal/tile/transparent/dark_blue/full, -/obj/machinery/camera/autoname/mainship{ - dir = 8; - pixel_x = 14 +/obj/machinery/camera/autoname/mainship/dropship_two{ + dir = 8 }, /turf/open/floor/mainship/mono, /area/shuttle/minidropship) diff --git a/_maps/shuttles/tgs_bigbury.dmm b/_maps/shuttles/tgs_bigbury.dmm index 5411251a36ba0..ca0bc190fc712 100644 --- a/_maps/shuttles/tgs_bigbury.dmm +++ b/_maps/shuttles/tgs_bigbury.dmm @@ -116,11 +116,6 @@ /obj/machinery/computer/cryopod, /turf/open/floor/mainship/mono, /area/shuttle/canterbury) -"aG" = ( -/obj/machinery/light, -/obj/structure/cable, -/turf/open/floor/plating/plating_catwalk, -/area/shuttle/canterbury) "aH" = ( /obj/machinery/vending/MarineMed, /turf/open/floor/mainship/sterile, @@ -219,13 +214,7 @@ /turf/open/floor/mainship/sterile/dark, /area/shuttle/canterbury/medical) "aX" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/marine_selector/clothes, +/obj/machinery/quick_vendor/beginner, /turf/open/floor/mainship/mono, /area/shuttle/canterbury) "aY" = ( @@ -275,6 +264,12 @@ /area/shuttle/canterbury/medical) "bg" = ( /obj/machinery/vending/uniform_supply, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/floor/mainship/mono, /area/shuttle/canterbury) "bh" = ( @@ -300,6 +295,13 @@ /obj/machinery/light{ dir = 8 }, +/obj/structure/rack, +/obj/item/fuel_cell/random, +/obj/item/fuel_cell/random, +/obj/item/fuel_cell/random, +/obj/item/fuel_cell/random, +/obj/item/fuel_cell/random, +/obj/item/fuel_cell/random, /turf/open/floor/mainship/tcomms, /area/shuttle/canterbury) "bk" = ( @@ -349,8 +351,6 @@ /area/shuttle/canterbury) "br" = ( /obj/structure/table/mainship, -/obj/item/fuel_cell/full, -/obj/item/fuel_cell/full, /obj/effect/spawner/random/engineering/extinguisher/miniweighted, /obj/effect/spawner/random/engineering/extinguisher/regularweighted, /obj/item/t_scanner, @@ -360,7 +360,7 @@ /obj/item/clothing/suit/storage/hazardvest, /obj/item/clothing/suit/storage/hazardvest, /obj/item/facepaint/black, -/obj/item/stack/sheet/glass{ +/obj/item/stack/sheet/glass/glass{ amount = 50; pixel_x = 3; pixel_y = 3 @@ -504,6 +504,9 @@ }, /area/shuttle/canterbury/cic) "bS" = ( +/obj/machinery/air_alarm{ + dir = 1 + }, /turf/open/floor/mainship, /area/shuttle/canterbury/cic) "bT" = ( @@ -559,12 +562,6 @@ "cR" = ( /turf/open/floor/mainship/floor, /area/shuttle/canterbury) -"ds" = ( -/obj/effect/turf_decal/warning_stripes/box/arrow{ - dir = 8 - }, -/turf/open/floor/mainship/mono, -/area/shuttle/canterbury) "fL" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/glass/beaker/bluespace, @@ -616,12 +613,6 @@ /obj/machinery/vending/medical, /turf/open/floor/mainship/sterile/dark, /area/shuttle/canterbury/medical) -"lX" = ( -/obj/structure/cable, -/obj/effect/attach_point/crew_weapon/dropship1, -/obj/effect/turf_decal/stripes/end, -/turf/open/floor/plating/plating_catwalk, -/area/shuttle/canterbury) "ma" = ( /obj/machinery/vending/marineFood, /turf/open/floor/mainship/mono, @@ -696,12 +687,6 @@ /obj/machinery/vending/weapon/crash, /turf/open/floor/mainship/mono, /area/shuttle/canterbury) -"pT" = ( -/obj/effect/turf_decal/warning_stripes/box/arrow{ - dir = 4 - }, -/turf/open/floor/mainship/mono, -/area/shuttle/canterbury) "pY" = ( /obj/structure/barricade/plasteel{ dir = 8 @@ -710,9 +695,6 @@ /area/shuttle/canterbury) "qh" = ( /obj/structure/rack, -/obj/machinery/air_alarm{ - dir = 8 - }, /obj/item/stack/sheet/metal/large_stack, /obj/item/stack/sheet/metal/large_stack, /obj/item/stack/sheet/plasteel/medium_stack, @@ -748,6 +730,10 @@ }, /turf/open/floor/mainship/mono, /area/shuttle/canterbury) +"rb" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/mainship/mono, +/area/shuttle/canterbury) "su" = ( /obj/structure/bed/chair/dropship/passenger{ dir = 1 @@ -853,6 +839,9 @@ dir = 8 }, /obj/machinery/vending/armor_supply, +/obj/structure/window/reinforced{ + dir = 4 + }, /turf/open/floor/mainship, /area/shuttle/canterbury) "zc" = ( @@ -865,12 +854,6 @@ }, /turf/open/floor/mainship/mono, /area/shuttle/canterbury) -"zk" = ( -/obj/machinery/air_alarm, -/turf/open/floor/mainship/blue{ - dir = 4 - }, -/area/shuttle/canterbury/cic) "zy" = ( /obj/machinery/door/poddoor/mainship{ dir = 2; @@ -881,10 +864,10 @@ /area/shuttle/canterbury) "AS" = ( /obj/structure/rack, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, +/obj/item/storage/belt/utility/full, +/obj/item/t_scanner, +/obj/item/clothing/suit/storage/hazardvest, +/obj/effect/spawner/random/engineering/extinguisher/regularweighted, /turf/open/floor/mainship/cargo, /area/shuttle/canterbury) "BZ" = ( @@ -900,6 +883,12 @@ /area/shuttle/canterbury) "DF" = ( /obj/machinery/vending/armor_supply, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, /turf/open/floor/mainship, /area/shuttle/canterbury) "DI" = ( @@ -927,16 +916,6 @@ /obj/item/storage/toolbox/mechanical, /turf/open/floor/mainship/cargo, /area/shuttle/canterbury) -"GE" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/marine_selector/clothes, -/turf/open/floor/mainship/mono, -/area/shuttle/canterbury) "JM" = ( /obj/machinery/marine_selector/gear/smartgun, /turf/open/floor/mainship/mono, @@ -962,11 +941,17 @@ /turf/open/floor/mainship/mono, /area/shuttle/canterbury) "Kk" = ( -/obj/machinery/air_alarm{ +/obj/machinery/vending/uniform_supply, +/obj/structure/window/reinforced{ dir = 4 }, -/obj/vehicle/ridden/powerloader, -/turf/open/floor/mainship/cargo, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/mainship/mono, /area/shuttle/canterbury) "KD" = ( /obj/machinery/marine_selector/clothes, @@ -976,11 +961,11 @@ /turf/open/floor/mainship, /area/shuttle/canterbury) "Mj" = ( -/obj/machinery/mech_bay_recharge_port{ - dir = 2 +/obj/machinery/air_alarm{ + dir = 4 }, -/obj/structure/cable, -/turf/open/floor/mainship/cargo, +/obj/structure/bed/chair/dropship/passenger, +/turf/open/floor/mainship/mono, /area/shuttle/canterbury) "MY" = ( /turf/open/floor/mainship/blue/full, @@ -1073,15 +1058,11 @@ /turf/open/floor/mainship/blue, /area/shuttle/canterbury/cic) "Ui" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, /obj/machinery/light/small{ dir = 1 }, -/obj/structure/cable, -/obj/structure/dropship_equipment/shuttle/weapon_holder/machinegun, -/turf/open/floor/plating/plating_catwalk, +/obj/structure/bed/chair/dropship/passenger, +/turf/open/floor/mainship/mono, /area/shuttle/canterbury) "Ul" = ( /obj/machinery/vending/nanomed, @@ -1158,11 +1139,6 @@ }, /turf/open/floor/mainship/sterile/dark, /area/shuttle/canterbury/medical) -"Xp" = ( -/obj/machinery/door/window, -/obj/structure/cable, -/turf/open/floor/plating/plating_catwalk, -/area/shuttle/canterbury) "XO" = ( /obj/structure/bed/chair/dropship/passenger{ dir = 4 @@ -1233,7 +1209,7 @@ Uo Uo al Mj -Kk +rb ab bU bU @@ -1266,7 +1242,7 @@ Uo Uo al Ui -Xp +ac ab bi pY @@ -1299,7 +1275,7 @@ ad ad al UE -as +ac ab CA an @@ -1328,11 +1304,11 @@ Uo Uo al al -zk +uu bL al Rd -aG +jq ab iy an @@ -1365,7 +1341,7 @@ MY bM al AS -as +ac ab YN an @@ -1398,7 +1374,7 @@ uu bN al FZ -as +ac ab uZ an @@ -1431,7 +1407,7 @@ MY bS al qh -as +ac ab Wk an @@ -1464,11 +1440,11 @@ bK Ul ad ac -as +ac ki ac an -pT +ac ac ac ac @@ -1501,7 +1477,7 @@ as nM as as -lX +as as as aa @@ -1534,7 +1510,7 @@ ac zy ac an -ds +ac ac ac ac @@ -1570,7 +1546,7 @@ wB ac FQ Fl -Fl +aX bG an ma @@ -1708,12 +1684,12 @@ ow ab Wb UO -GE +aX bA aT UO aX -bg +Kk bA bg ab @@ -1779,7 +1755,7 @@ bA cF DI aQ -aM +cF DI aQ ab diff --git a/_maps/shuttles/tgs_canterbury.dmm b/_maps/shuttles/tgs_canterbury.dmm index 4f139d2ada904..e9d0761157bfd 100644 --- a/_maps/shuttles/tgs_canterbury.dmm +++ b/_maps/shuttles/tgs_canterbury.dmm @@ -80,12 +80,6 @@ /obj/machinery/firealarm{ dir = 1 }, -/obj/item/radio/intercom{ - dir = 4; - freerange = 1; - name = "General Listening Channel"; - pixel_y = -28 - }, /turf/open/floor/mainship/blue{ dir = 10 }, @@ -146,9 +140,6 @@ /obj/item/tool/wrench, /obj/item/storage/toolbox/mechanical, /obj/item/tool/screwdriver, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, -/obj/item/ammo_magazine/tl102/hsg_nest, /turf/open/floor/mainship/cargo, /area/shuttle/canterbury) "aw" = ( @@ -163,8 +154,12 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/structure/cable, -/obj/machinery/mech_bay_recharge_port, +/obj/structure/rack, +/obj/item/storage/toolbox/mechanical, +/obj/item/tool/wrench, +/obj/item/tool/screwdriver, +/obj/item/tool/crowbar, +/obj/effect/spawner/random/engineering/extinguisher/regularweighted, /turf/open/floor/mainship/cargo, /area/shuttle/canterbury) "ay" = ( @@ -174,7 +169,14 @@ id = "starboard_umbilical_outer"; name = "outer door-control" }, -/obj/vehicle/ridden/powerloader, +/obj/structure/rack, +/obj/effect/spawner/random/engineering/extinguisher/regularweighted, +/obj/item/storage/belt/utility/full, +/obj/item/clothing/suit/storage/hazardvest, +/obj/item/radio/intercom{ + freerange = 1; + name = "General Listening Channel" + }, /turf/open/floor/mainship/cargo, /area/shuttle/canterbury) "aA" = ( @@ -222,14 +224,20 @@ /area/shuttle/canterbury) "aL" = ( /obj/effect/landmark/start/job/crash/squadmarine, -/obj/structure/bed/chair/dropship/passenger{ - dir = 1 - }, +/obj/structure/bed/chair/dropship/passenger, /turf/open/floor/mainship/mono, /area/shuttle/canterbury) "aN" = ( -/obj/structure/dropship_equipment/shuttle/weapon_holder/machinegun, -/turf/open/floor/mainship/cargo, +/obj/item/radio/intercom{ + freerange = 1; + name = "General Listening Channel"; + dir = 4 + }, +/obj/machinery/vending/tool, +/obj/structure/window/reinforced/toughened{ + dir = 1 + }, +/turf/open/floor/mainship/orange/full, /area/shuttle/canterbury) "aO" = ( /obj/machinery/loadout_vendor/crash, @@ -242,7 +250,7 @@ /area/shuttle/canterbury) "aQ" = ( /obj/machinery/fuelcell_recycler, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/orange/full, /area/shuttle/canterbury) "aR" = ( /obj/structure/window/framed/mainship/canterbury, @@ -275,12 +283,16 @@ dir = 8 }, /obj/structure/cable, +/obj/structure/rack, +/obj/item/fuel_cell/random, +/obj/item/fuel_cell/random, +/obj/item/fuel_cell/random, /turf/open/floor/mainship/tcomms, /area/shuttle/canterbury) "bb" = ( /obj/machinery/door/airlock/mainship/engineering/free_access, /obj/structure/cable, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/orange/full, /area/shuttle/canterbury) "bd" = ( /obj/structure/window/reinforced/toughened{ @@ -290,7 +302,8 @@ /turf/open/floor/mainship/cargo, /area/shuttle/canterbury) "be" = ( -/turf/open/floor/mainship, +/obj/machinery/marine_selector/clothes/synth, +/turf/open/floor/mainship/mono, /area/shuttle/canterbury) "bg" = ( /obj/structure/cable, @@ -310,7 +323,7 @@ name = "Core Power Monitoring" }, /obj/structure/cable, -/turf/open/floor/mainship, +/turf/open/floor/mainship/orange/full, /area/shuttle/canterbury) "bk" = ( /obj/structure/window/reinforced/toughened{ @@ -326,11 +339,11 @@ /obj/machinery/cell_charger, /obj/item/radio, /obj/item/tool/crowbar, -/obj/structure/table/reinforced, /obj/item/storage/box/crate/sentry, /obj/item/storage/box/crate/sentry, /obj/item/storage/box/crate/sentry, -/turf/open/floor/mainship/mono, +/obj/structure/rack, +/turf/open/floor/mainship/orange/full, /area/shuttle/canterbury) "bn" = ( /obj/machinery/cryopod, @@ -412,10 +425,7 @@ /turf/open/floor/mainship/red/full, /area/shuttle/canterbury) "bC" = ( -/obj/item/fuel_cell/full, -/obj/item/fuel_cell/random, -/obj/item/fuel_cell/random, -/turf/open/floor/mainship/mono, +/turf/open/floor/mainship/orange/full, /area/shuttle/canterbury) "bD" = ( /obj/effect/landmark/start/job/crash/squadsmartgunner, @@ -520,13 +530,11 @@ /turf/open/floor/mainship/sterile/dark, /area/shuttle/canterbury/medical) "cc" = ( -/obj/machinery/door/window/right{ - dir = 1 - }, +/obj/effect/landmark/start/job/crash/squadsmartgunner, /obj/structure/window/reinforced/toughened{ - dir = 4 + dir = 1 }, -/obj/effect/landmark/start/job/crash/squadsmartgunner, +/obj/machinery/door/window/right, /turf/open/floor/mainship/red, /area/shuttle/canterbury) "cd" = ( @@ -552,24 +560,6 @@ /obj/machinery/vending/MarineMed, /turf/open/floor/mainship/sterile, /area/shuttle/canterbury/medical) -"ci" = ( -/obj/structure/bed/chair/dropship/passenger, -/obj/effect/landmark/start/job/crash/squadsmartgunner, -/obj/structure/cable, -/turf/open/floor/plating/plating_catwalk, -/area/shuttle/canterbury) -"ck" = ( -/obj/item/radio/intercom{ - dir = 1; - freerange = 1; - name = "General Listening Channel"; - pixel_y = -28 - }, -/obj/structure/barricade/plasteel{ - dir = 8 - }, -/turf/open/floor/mainship/stripesquare, -/area/shuttle/canterbury) "cl" = ( /obj/structure/shuttle/engine/propulsion/burst/left, /turf/open/floor/podhatch/floor, @@ -723,18 +713,6 @@ /obj/effect/landmark/start/job/crash/medicalofficer, /turf/open/floor/mainship/mono, /area/shuttle/canterbury) -"cW" = ( -/obj/item/radio/intercom{ - dir = 1; - freerange = 1; - name = "General Listening Channel"; - pixel_y = -28 - }, -/obj/structure/barricade/plasteel{ - dir = 4 - }, -/turf/open/floor/mainship/stripesquare, -/area/shuttle/canterbury) "cY" = ( /obj/machinery/light/small{ dir = 8 @@ -766,6 +744,10 @@ }, /turf/open/floor/mainship/red, /area/shuttle/canterbury) +"nN" = ( +/obj/machinery/quick_vendor/beginner, +/turf/open/floor/mainship/red/full, +/area/shuttle/canterbury) "pY" = ( /obj/machinery/door/airlock/mainship/marine/canterbury{ dir = 8 @@ -773,13 +755,15 @@ /turf/open/floor/mainship/mono, /area/shuttle/canterbury) "vY" = ( -/obj/machinery/vending/tool, -/turf/open/floor/mainship/orange/full, +/obj/structure/bed/chair/dropship/passenger{ + dir = 1 + }, +/turf/open/floor/mainship/mono, /area/shuttle/canterbury) "zE" = ( /obj/structure/window/framed/mainship/canterbury, /obj/structure/cable, -/turf/open/floor/plating, +/turf/open/floor/mainship/orange/full, /area/shuttle/canterbury) "zN" = ( /obj/machinery/vending/engivend, @@ -808,7 +792,7 @@ /obj/structure/window/reinforced/toughened{ dir = 4 }, -/obj/machinery/loadout_vendor/crash, +/obj/machinery/quick_vendor/beginner, /turf/open/floor/mainship/cargo, /area/shuttle/canterbury) "KE" = ( @@ -816,13 +800,14 @@ /turf/open/floor/mainship/mono, /area/shuttle/canterbury) "RS" = ( -/obj/structure/cable, -/obj/effect/attach_point/crew_weapon/dropship1, -/turf/open/floor/plating/plating_catwalk, +/obj/structure/window/framed/mainship/canterbury, +/turf/open/floor/mainship/orange/full, /area/shuttle/canterbury) "UG" = ( -/obj/machinery/marine_selector/clothes/synth, -/turf/open/floor/mainship/cargo, +/obj/structure/window/reinforced/toughened{ + dir = 1 + }, +/turf/open/floor/mainship/orange/full, /area/shuttle/canterbury) "YI" = ( /obj/machinery/iv_drip, @@ -883,7 +868,7 @@ an au aA aA -ck +aA an aQ bC @@ -908,7 +893,7 @@ aB aJ Bu an -aR +RS bb zE bo @@ -929,7 +914,7 @@ ab ab cV aJ -aD +vY aN zN cv @@ -954,7 +939,7 @@ cF aJ cR UG -vY +bC bg bl bo @@ -998,7 +983,7 @@ ar aw bO bO -RS +bO bO ao bO @@ -1020,10 +1005,10 @@ aj as ab aL -bO +aJ +aD aD aD -be aD aJ aD @@ -1043,7 +1028,7 @@ am at ab cP -bO +aJ cS aO Hv @@ -1053,7 +1038,7 @@ bJ Cq cH aJ -cK +nN bD bF an @@ -1066,17 +1051,17 @@ ac ab ab cQ -bO +aJ cT an aV aD -aD +aJ bt br br aJ -aD +be cc cE an @@ -1088,8 +1073,8 @@ aa aa an ax -ci -bO +cQ +aJ cU an aW @@ -1113,7 +1098,7 @@ an ay aF aF -cW +aF an bp bq diff --git a/code/__DEFINES/__game.dm b/code/__DEFINES/__game.dm index ad4fa14628f99..0258676febbc0 100644 --- a/code/__DEFINES/__game.dm +++ b/code/__DEFINES/__game.dm @@ -14,6 +14,9 @@ #define MAP_GELIDA_IV "Gelida IV" #define MAP_DELTA_STATION "Delta Station" #define MAP_OSCAR_OUTPOST "Oscar Outpost" +#define MAP_DESPARITY "Desparity" +#define MAP_LAWANKA_OUTPOST "Lawanka Outpost" +#define MAP_DAEDALUS_PRISON "Daedalus Prison" #define MAP_PILLAR_OF_SPRING "Pillar of Spring" #define MAP_SULACO "Sulaco" @@ -75,7 +78,7 @@ #define CEILING_UNDERGROUND 4 #define CEILING_UNDERGROUND_METAL 5 #define CEILING_DEEP_UNDERGROUND 6 -#define CEILING_DEEP_UNDERGROUND_METAL 6 +#define CEILING_DEEP_UNDERGROUND_METAL 7 // Default font settings diff --git a/code/__DEFINES/_helpers.dm b/code/__DEFINES/_helpers.dm new file mode 100644 index 0000000000000..f1b1b21df3308 --- /dev/null +++ b/code/__DEFINES/_helpers.dm @@ -0,0 +1,34 @@ +// Stuff that is relatively "core" and is used in other defines/helpers + +//Returns the hex value of a decimal number +//len == length of returned string +#define num2hex(X, len) num2text(X, len, 16) + +//Returns an integer given a hex input, supports negative values "-ff" +//skips preceding invalid characters +#define hex2num(X) text2num(X, 16) + +/// Stringifies whatever you put into it. +#define STRINGIFY(argument) #argument + +/// subtypesof(), typesof() without the parent path +#define subtypesof(typepath) ( typesof(typepath) - typepath ) + +/// Until a condition is true, sleep +#define UNTIL(X) while(!(X)) stoplag() + +/// Sleep if we haven't been deleted +/// Otherwise, return +#define SLEEP_NOT_DEL(time) \ + if(QDELETED(src)) { \ + return; \ + } \ + sleep(time); + +/// Takes a datum as input, returns its ref string +#define text_ref(datum) ref(datum) + +// Refs contain a type id within their string that can be used to identify byond types. +// Custom types that we define don't get a unique id, but this is useful for identifying +// types that don't normally have a way to run istype() on them. +#define TYPEID(thing) copytext(REF(thing), 4, 6) diff --git a/code/__DEFINES/_radio.dm b/code/__DEFINES/_radio.dm index 07a1a131fca61..3931febdac31e 100644 --- a/code/__DEFINES/_radio.dm +++ b/code/__DEFINES/_radio.dm @@ -52,6 +52,7 @@ #define RADIO_CHANNEL_COLONIST "Colonist" #define RADIO_CHANNEL_PMC "NT PMC" +#define RADIO_CHANNEL_RETIRED "Terragov Retirees" #define RADIO_CHANNEL_USL "USL" #define RADIO_CHANNEL_DEATHSQUAD "Deathsquad" #define RADIO_CHANNEL_IMPERIAL "Imperial" @@ -79,6 +80,7 @@ #define FREQ_WHISKEY 1247 #define MIN_ERT_FREQ 1331 #define FREQ_PMC 1331 +#define FREQ_RETIRED 1334 #define FREQ_COLONIST 1335 #define FREQ_USL 1337 #define FREQ_DEATHSQUAD 1339 diff --git a/code/__DEFINES/_subsystems.dm b/code/__DEFINES/_subsystems.dm index 6c25cd626164a..ade35e0ec2694 100644 --- a/code/__DEFINES/_subsystems.dm +++ b/code/__DEFINES/_subsystems.dm @@ -47,7 +47,7 @@ //type and all subtypes should always call Initialize in New() #define INITIALIZE_IMMEDIATE(X) ##X/New(loc, ...){\ ..();\ - if(!(flags_atom & INITIALIZED)) {\ + if(!(atom_flags & INITIALIZED)) {\ args[1] = TRUE;\ SSatoms.InitAtom(src, FALSE, args);\ }\ @@ -80,6 +80,7 @@ #define INIT_ORDER_DBCORE 25 #define INIT_ORDER_SERVER_MAINT 23 #define INIT_ORDER_INPUT 21 +#define INIT_ORDER_VIS 20 #define INIT_ORDER_SOUNDS 19 #define INIT_ORDER_INSTRUMENTS 17 #define INIT_ORDER_GREYSCALE 16 @@ -125,6 +126,7 @@ #define FIRE_PRIORITY_AMBIENCE 10 #define FIRE_PRIORITY_WEED 11 #define FIRE_PRIORITY_GARBAGE 15 +#define FIRE_PRIORITY_VIS 15 #define FIRE_PRIORITY_MINIMAPS 17 #define FIRE_PRIORITY_DIRECTION 19 #define FIRE_PRIORITY_SPAWNING 20 diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm index 5fca2c8b79eae..b0b790b636d50 100644 --- a/code/__DEFINES/access.dm +++ b/code/__DEFINES/access.dm @@ -27,6 +27,8 @@ GLOBAL_LIST_EMPTY(all_req_one_access) #define ACCESS_MARINE_WO 45 #define ACCESS_MARINE_RO 46 #define ACCESS_MARINE_MECH 47 +#define ACCESS_MARINE_TADPOLE 48 +#define ACCESS_MARINE_ARMORED 49 #define ACCESS_MARINE_REMOTEBUILD 60 @@ -58,13 +60,13 @@ GLOBAL_LIST_EMPTY(all_req_one_access) #define PAYGRADES_ENLISTED list("C","CMN","E1","E2","E3", "E3E","E4","E5","E6","E7","E8","E9","PO3","PO2","PO1") //Just marines -#define ALL_MARINE_ACCESS list(ACCESS_MARINE_CAPTAIN, ACCESS_MARINE_COMMANDER, ACCESS_MARINE_LOGISTICS, ACCESS_MARINE_BRIDGE, ACCESS_MARINE_BRIG, ACCESS_MARINE_ARMORY, ACCESS_MARINE_WO, ACCESS_MARINE_CMO, ACCESS_MARINE_CE, ACCESS_MARINE_ENGINEERING, ACCESS_MARINE_MEDBAY, ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_ENGPREP,ACCESS_MARINE_SMARTPREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_ALPHA, ACCESS_MARINE_BRAVO, ACCESS_MARINE_CHARLIE, ACCESS_MARINE_DELTA, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_CARGO, ACCESS_MARINE_RO, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT, ACCESS_MARINE_MECH, ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_RESEARCH, ACCESS_CIVILIAN_ENGINEERING, ACCESS_CIVILIAN_LOGISTICS, ACCESS_MARINE_REMOTEBUILD) +#define ALL_MARINE_ACCESS list(ACCESS_MARINE_CAPTAIN, ACCESS_MARINE_COMMANDER, ACCESS_MARINE_LOGISTICS, ACCESS_MARINE_BRIDGE, ACCESS_MARINE_BRIG, ACCESS_MARINE_ARMORY, ACCESS_MARINE_WO, ACCESS_MARINE_CMO, ACCESS_MARINE_CE, ACCESS_MARINE_ENGINEERING, ACCESS_MARINE_MEDBAY, ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_ENGPREP,ACCESS_MARINE_SMARTPREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_ALPHA, ACCESS_MARINE_BRAVO, ACCESS_MARINE_CHARLIE, ACCESS_MARINE_DELTA, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_CARGO, ACCESS_MARINE_RO, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT, ACCESS_MARINE_TADPOLE, ACCESS_MARINE_MECH, ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_RESEARCH, ACCESS_CIVILIAN_ENGINEERING, ACCESS_CIVILIAN_LOGISTICS, ACCESS_MARINE_REMOTEBUILD) //Literally everything -#define ALL_ACCESS list(ACCESS_MARINE_CAPTAIN, ACCESS_MARINE_LOGISTICS, ACCESS_MARINE_BRIDGE, ACCESS_MARINE_BRIG, ACCESS_MARINE_ARMORY, ACCESS_MARINE_WO, ACCESS_MARINE_CMO, ACCESS_MARINE_CE, ACCESS_MARINE_ENGINEERING, ACCESS_MARINE_MEDBAY, ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_ENGPREP,ACCESS_MARINE_SMARTPREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_ALPHA, ACCESS_MARINE_BRAVO, ACCESS_MARINE_CHARLIE, ACCESS_MARINE_DELTA, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_CARGO, ACCESS_MARINE_RO, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT, ACCESS_MARINE_MECH, ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_RESEARCH, ACCESS_CIVILIAN_ENGINEERING, ACCESS_CIVILIAN_LOGISTICS, ACCESS_NT_PMC_GREEN, ACCESS_NT_PMC_ORANGE, ACCESS_NT_PMC_RED, ACCESS_NT_PMC_BLACK, ACCESS_NT_PMC_WHITE, ACCESS_NT_CORPORATE, ACCESS_ILLEGAL_PIRATE, ACCESS_MARINE_REMOTEBUILD) +#define ALL_ACCESS list(ACCESS_MARINE_CAPTAIN, ACCESS_MARINE_LOGISTICS, ACCESS_MARINE_BRIDGE, ACCESS_MARINE_BRIG, ACCESS_MARINE_ARMORY, ACCESS_MARINE_WO, ACCESS_MARINE_CMO, ACCESS_MARINE_CE, ACCESS_MARINE_ENGINEERING, ACCESS_MARINE_MEDBAY, ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_ENGPREP,ACCESS_MARINE_SMARTPREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_ALPHA, ACCESS_MARINE_BRAVO, ACCESS_MARINE_CHARLIE, ACCESS_MARINE_DELTA, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_CARGO, ACCESS_MARINE_RO, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT, ACCESS_MARINE_TADPOLE, ACCESS_MARINE_MECH, ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_RESEARCH, ACCESS_CIVILIAN_ENGINEERING, ACCESS_CIVILIAN_LOGISTICS, ACCESS_NT_PMC_GREEN, ACCESS_NT_PMC_ORANGE, ACCESS_NT_PMC_RED, ACCESS_NT_PMC_BLACK, ACCESS_NT_PMC_WHITE, ACCESS_NT_CORPORATE, ACCESS_ILLEGAL_PIRATE, ACCESS_MARINE_REMOTEBUILD) //PMC menk -#define ALL_PMC_ACCESS list(ACCESS_MARINE_CAPTAIN, ACCESS_MARINE_LOGISTICS, ACCESS_MARINE_BRIDGE, ACCESS_MARINE_BRIG, ACCESS_MARINE_ARMORY, ACCESS_MARINE_WO, ACCESS_MARINE_CMO, ACCESS_MARINE_CE, ACCESS_MARINE_ENGINEERING, ACCESS_MARINE_MEDBAY, ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_ENGPREP,ACCESS_MARINE_SMARTPREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_ALPHA, ACCESS_MARINE_BRAVO, ACCESS_MARINE_CHARLIE, ACCESS_MARINE_DELTA, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_CARGO, ACCESS_MARINE_RO, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT, ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_RESEARCH, ACCESS_CIVILIAN_ENGINEERING, ACCESS_CIVILIAN_LOGISTICS, ACCESS_NT_PMC_GREEN, ACCESS_NT_PMC_ORANGE, ACCESS_NT_PMC_RED, ACCESS_NT_PMC_BLACK, ACCESS_NT_PMC_WHITE, ACCESS_NT_CORPORATE, ACCESS_MARINE_REMOTEBUILD) +#define ALL_PMC_ACCESS list(ACCESS_MARINE_CAPTAIN, ACCESS_MARINE_LOGISTICS, ACCESS_MARINE_BRIDGE, ACCESS_MARINE_BRIG, ACCESS_MARINE_ARMORY, ACCESS_MARINE_WO, ACCESS_MARINE_CMO, ACCESS_MARINE_CE, ACCESS_MARINE_ENGINEERING, ACCESS_MARINE_MEDBAY, ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_ENGPREP,ACCESS_MARINE_SMARTPREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_ALPHA, ACCESS_MARINE_BRAVO, ACCESS_MARINE_CHARLIE, ACCESS_MARINE_DELTA, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_CARGO, ACCESS_MARINE_RO, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT, ACCESS_MARINE_TADPOLE, ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_RESEARCH, ACCESS_CIVILIAN_ENGINEERING, ACCESS_CIVILIAN_LOGISTICS, ACCESS_NT_PMC_GREEN, ACCESS_NT_PMC_ORANGE, ACCESS_NT_PMC_RED, ACCESS_NT_PMC_BLACK, ACCESS_NT_PMC_WHITE, ACCESS_NT_CORPORATE, ACCESS_MARINE_REMOTEBUILD) //Removes PMC and Marine IFF -#define ALL_ANTAGONIST_ACCESS list(ACCESS_MARINE_CAPTAIN, ACCESS_MARINE_LOGISTICS, ACCESS_MARINE_BRIDGE, ACCESS_MARINE_BRIG, ACCESS_MARINE_ARMORY, ACCESS_MARINE_WO, ACCESS_MARINE_CMO, ACCESS_MARINE_CE, ACCESS_MARINE_ENGINEERING, ACCESS_MARINE_MEDBAY, ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_ENGPREP,ACCESS_MARINE_SMARTPREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_ALPHA, ACCESS_MARINE_BRAVO, ACCESS_MARINE_CHARLIE, ACCESS_MARINE_DELTA, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_CARGO, ACCESS_MARINE_RO, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT, ACCESS_MARINE_MECH, ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_RESEARCH, ACCESS_CIVILIAN_ENGINEERING, ACCESS_CIVILIAN_LOGISTICS, ACCESS_NT_PMC_GREEN, ACCESS_NT_PMC_ORANGE, ACCESS_NT_PMC_RED, ACCESS_NT_PMC_BLACK, ACCESS_NT_PMC_WHITE, ACCESS_NT_CORPORATE, ACCESS_ILLEGAL_PIRATE, ACCESS_MARINE_REMOTEBUILD) +#define ALL_ANTAGONIST_ACCESS list(ACCESS_MARINE_CAPTAIN, ACCESS_MARINE_LOGISTICS, ACCESS_MARINE_BRIDGE, ACCESS_MARINE_BRIG, ACCESS_MARINE_ARMORY, ACCESS_MARINE_WO, ACCESS_MARINE_CMO, ACCESS_MARINE_CE, ACCESS_MARINE_ENGINEERING, ACCESS_MARINE_MEDBAY, ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_ENGPREP,ACCESS_MARINE_SMARTPREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_ALPHA, ACCESS_MARINE_BRAVO, ACCESS_MARINE_CHARLIE, ACCESS_MARINE_DELTA, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_CARGO, ACCESS_MARINE_RO, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT, ACCESS_MARINE_TADPOLE, ACCESS_MARINE_MECH, ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_RESEARCH, ACCESS_CIVILIAN_ENGINEERING, ACCESS_CIVILIAN_LOGISTICS, ACCESS_NT_PMC_GREEN, ACCESS_NT_PMC_ORANGE, ACCESS_NT_PMC_RED, ACCESS_NT_PMC_BLACK, ACCESS_NT_PMC_WHITE, ACCESS_NT_CORPORATE, ACCESS_ILLEGAL_PIRATE, ACCESS_MARINE_REMOTEBUILD) diff --git a/code/__DEFINES/action.dm b/code/__DEFINES/action.dm index a62a864a60c8c..e9b6068d23a36 100644 --- a/code/__DEFINES/action.dm +++ b/code/__DEFINES/action.dm @@ -24,6 +24,8 @@ #define VREF_IMAGE_XENO_CLOCK "VREF_ACTION_CLOCK" /// A reference for the build counter of a xeno #define VREF_MUTABLE_BUILDING_COUNTER "VREF_BUILD_COUNTER" +//A reference for the special resin build counter of a xeno +#define VREF_MUTABLE_SPECIAL_RESIN_COUNTER "VREF_SPECIAL_RESIN_COUNTER" // extra reference for the amount of landslide charges we have #define VREF_MUTABLE_LANDSLIDE "VREF_LANDSLIDE" // extra reference for the amount of earth pillars we have diff --git a/code/__DEFINES/actions.dm b/code/__DEFINES/actions.dm index f7649a678ee8f..cb4202abef14b 100644 --- a/code/__DEFINES/actions.dm +++ b/code/__DEFINES/actions.dm @@ -14,7 +14,6 @@ #define ABILITY_IGNORE_SELECTED_ABILITY (1 << 14) // bypass the check of the selected ability #define ABILITY_DO_AFTER_ATTACK (1 << 15) //Let the xeno attack the object and perform the ability. #define ABILITY_USE_BURROWED (1 << 16) // ignore being burrowed -#define ABILITY_USE_ROOTED (1 << 17) // ignore being currently rooted #define ABILITY_TURF_TARGET (1 << 0) // ability targets turfs #define ABILITY_MOB_TARGET (1 << 1) // ability targets mobs @@ -25,3 +24,7 @@ #define ABILITY_CRASH (1<<0) #define ABILITY_NUCLEARWAR (1<<1) #define ABILITY_ALL_GAMEMODE (ABILITY_CRASH|ABILITY_NUCLEARWAR) + +#define PSIONIC_INTERACTION_STRENGTH_WEAK 1 +#define PSIONIC_INTERACTION_STRENGTH_STANDARD 2 +#define PSIONIC_INTERACTION_STRENGTH_STRONG 3 diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 1ccd8fe39597c..828b937a8046d 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -43,15 +43,16 @@ #define R_DBRANKS (1<<13) #define R_RUNTIME (1<<14) #define R_LOG (1<<15) +#define R_POLLS (1<<16) -#define R_EVERYTHING (1<<16)-1 //the sum of all other rank permissions, used for +EVERYTHING +#define R_EVERYTHING (ALL) //the sum of all other rank permissions, used for +EVERYTHING #define ADMIN_QUE(user) "(?)" #define ADMIN_FLW(user) "(FLW)" #define ADMIN_JMP(src) "(JMP)" #define ADMIN_JMP_USER(user) "(JMP)" #define ADMIN_PP(user) "(PP)" -#define ADMIN_VV(atom) "(VV)" +#define ADMIN_VV(atom) "(VV)" #define ADMIN_SM(user) "(SM)" #define ADMIN_IF(user) "(IF)" #define ADMIN_TP(user) "(TP)" @@ -70,6 +71,7 @@ #define ADMIN_COORDJMP(src) "[src ? "[COORD(src)] [ADMIN_JMP(src)]" : "nonexistent location"]" #define ADMIN_VERBOSEJMP(src) "[src ? "[AREACOORD(src)] [ADMIN_JMP(src)]" : "nonexistent location"]" #define ADMIN_INDIVIDUALLOG(user) "(LOGS)" +#define ADMIN_TAG(datum) "(TAG)" #define AHELP_ACTIVE 1 #define AHELP_CLOSED 2 diff --git a/code/__DEFINES/apc_defines.dm b/code/__DEFINES/apc_defines.dm new file mode 100644 index 0000000000000..53d27679e075e --- /dev/null +++ b/code/__DEFINES/apc_defines.dm @@ -0,0 +1,81 @@ + +#define APC_WIRE_IDSCAN (1<<0) +#define APC_WIRE_MAIN_POWER1 (1<<1) +#define APC_WIRE_MAIN_POWER2 (1<<2) +#define APC_WIRE_AI_CONTROL (1<<3) + +#define APC_RESET_EMP 5 + +// APC electronics status: +/// There are no electronics in the APC. +#define APC_ELECTRONICS_MISSING 0 +/// The electronics are installed but not secured. +#define APC_ELECTRONICS_INSTALLED 1 +/// The electronics are installed and secured. +#define APC_ELECTRONICS_SECURED 2 + +// APC cover status: +/// The APCs cover is closed. +#define APC_COVER_CLOSED 0 +/// The APCs cover is open. +#define APC_COVER_OPENED 1 +/// The APCs cover is missing. +#define APC_COVER_REMOVED 2 + +// APC charging status: +/// The APC is not charging. +#define APC_NOT_CHARGING 0 +/// The APC is charging. +#define APC_CHARGING 1 +/// The APC is fully charged. +#define APC_FULLY_CHARGED 2 + +#define APC_EXTERNAL_POWER_NONE 0 +#define APC_EXTERNAL_POWER_LOW 1 +#define APC_EXTERNAL_POWER_GOOD 2 + +// APC channel status: +/// The APCs power channel is manually set off. +#define APC_CHANNEL_OFF 0 +/// The APCs power channel is automatically off. +#define APC_CHANNEL_AUTO_OFF 1 +/// The APCs power channel is manually set on. +#define APC_CHANNEL_ON 2 +/// The APCs power channel is automatically on. +#define APC_CHANNEL_AUTO_ON 3 + +#define APC_CHANNEL_IS_ON(channel) (channel >= APC_CHANNEL_ON) + +// update_state +// Bitshifts: (If you change the status values to be something other than an int or able to exceed 3 you will need to change these too) +/// The bit shift for the APCs cover status. +#define UPSTATE_COVER_SHIFT (0) + /// The bitflag representing the APCs cover being open for icon purposes. + #define UPSTATE_OPENED1 (APC_COVER_OPENED << UPSTATE_COVER_SHIFT) + /// The bitflag representing the APCs cover being missing for icon purposes. + #define UPSTATE_OPENED2 (APC_COVER_REMOVED << UPSTATE_COVER_SHIFT) + +// Bitflags: +/// The APC is broken or damaged. +#define UPSTATE_BROKE (1<<2) +/// The APC is undergoing maintenance. +#define UPSTATE_MAINT (1<<3) +/// The APCs wires are exposed. +#define UPSTATE_WIREEXP (1<<4) + +// update_overlay +// Bitflags: +/// Bitflag indicating that the APCs operating status overlay should be shown. +#define UPOVERLAY_OPERATING (1<<0) +/// Bitflag indicating that the APCs locked status overlay should be shown. +#define UPOVERLAY_LOCKED (1<<1) + +// Bitshifts: (If you change the status values to be something other than an int or able to exceed 3 you will need to change these too) +/// Bit shift for the charging status of the APC. +#define UPOVERLAY_CHARGING_SHIFT (2) +/// Bit shift for the equipment status of the APC. +#define UPOVERLAY_EQUIPMENT_SHIFT (4) +/// Bit shift for the lighting channel status of the APC. +#define UPOVERLAY_LIGHTING_SHIFT (6) +/// Bit shift for the environment channel status of the APC. +#define UPOVERLAY_ENVIRON_SHIFT (8) diff --git a/code/__DEFINES/area.dm b/code/__DEFINES/area.dm index 69f79abf673fd..e5ccd08bb201c 100644 --- a/code/__DEFINES/area.dm +++ b/code/__DEFINES/area.dm @@ -5,7 +5,7 @@ #define ALARM_WARNING_READY (1<<3) #define ALARM_WARNING_DOWN (1<<4) -//flags_area +//area_flags ///When present prevents xenos from weeding this area #define DISALLOW_WEEDING (1<<0) ///When present, monitor will consider marines inside it to be at FOB diff --git a/code/__DEFINES/assert.dm b/code/__DEFINES/assert.dm new file mode 100644 index 0000000000000..532beeb8d43db --- /dev/null +++ b/code/__DEFINES/assert.dm @@ -0,0 +1,14 @@ +#undef ASSERT + +/// Override BYOND's native ASSERT to optionally specify a message +#define ASSERT(condition, message...) \ + if (!(condition)) { \ + CRASH(assertion_message(__FILE__, __LINE__, #condition, ##message)) \ + } + +///Used by ASSERT to add a more detailed context to CRASH messages +/proc/assertion_message(file, line, condition, message) + if (!isnull(message)) + message = " - [message]" + + return "[file]:[line]:Assertion failed: [condition][message]" diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index fb243c58a207f..c62019e94e918 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -1,7 +1,7 @@ // Pressure limits. -#define HAZARD_HIGH_PRESSURE 550 //This determins at what pressure the ultra-high pressure red icon is displayed. (This one is set as a constant) -#define WARNING_HIGH_PRESSURE 325 //This determins when the orange pressure icon is displayed (it is 0.7 * HAZARD_HIGH_PRESSURE) +#define HAZARD_HIGH_PRESSURE 550 //This determines at what pressure the ultra-high pressure red icon is displayed. (This one is set as a constant) +#define WARNING_HIGH_PRESSURE 325 //This determines when the orange pressure icon is displayed (it is 0.7 * HAZARD_HIGH_PRESSURE) #define WARNING_LOW_PRESSURE 50 //This is when the gray low pressure icon is displayed. (it is 2.5 * HAZARD_LOW_PRESSURE) #define HAZARD_LOW_PRESSURE 20 //This is when the black ultra-low pressure icon is displayed. (This one is set as a constant) diff --git a/code/__DEFINES/attachments.dm b/code/__DEFINES/attachments.dm index 61d0e6f50b176..4cc43a80e4976 100644 --- a/code/__DEFINES/attachments.dm +++ b/code/__DEFINES/attachments.dm @@ -7,7 +7,7 @@ #define CAN_ATTACH "can_attach" #define PIXEL_SHIFT_X "pixel_shift_x" #define PIXEL_SHIFT_Y "pixel_shift_y" -#define FLAGS_ATTACH_FEATURES "flags_attach_features" +#define FLAGS_ATTACH_FEATURES "attach_features_flags" #define ATTACH_DELAY "attach_delay" #define DETACH_DELAY "detach_delay" #define ATTACH_SKILL "attach_skill" @@ -19,7 +19,7 @@ #define MOB_PIXEL_SHIFT_Y "mob_pixel_shift_y" #define ATTACHMENT_LAYER "attachment_layer" -//flags_attach_features +//attach_features_flags #define ATTACH_REMOVABLE (1<<0) #define ATTACH_ACTIVATION (1<<1) #define ATTACH_SAME_ICON (1<<2) @@ -28,6 +28,7 @@ #define ATTACH_NO_HANDS (1<<5) #define ATTACH_BYPASS_ALLOWED_LIST (1<<6) #define ATTACH_DIFFERENT_MOB_ICON_STATE (1<<7) +#define ATTACH_GREYSCALE_PARENT_COPY (1<<8) //gun attachment slot defines #define ATTACHMENT_SLOT_RAIL "rail" diff --git a/code/__DEFINES/campaign.dm b/code/__DEFINES/campaign.dm index 41668478b2c4b..a2155879e3f66 100644 --- a/code/__DEFINES/campaign.dm +++ b/code/__DEFINES/campaign.dm @@ -1,5 +1,5 @@ ///Number of victory points before a faction wins a campaign -#define CAMPAIGN_MAX_VICTORY_POINTS 12 +#define CAMPAIGN_MAX_VICTORY_POINTS 7 ///Respawn time in campaign mode #define CAMPAIGN_RESPAWN_TIME 2 MINUTES @@ -10,6 +10,10 @@ #define AFTER_MISSION_TELEPORT_DELAY 10 SECONDS ///How long after a mission ends a new leader is picked #define AFTER_MISSION_LEADER_DELAY 1 MINUTES +///How long after a mission is selected that team balance is checked +#define CAMPAIGN_AUTOBALANCE_DELAY 1 MINUTES +///How long players get to choose to autobalance or not +#define CAMPAIGN_AUTOBALANCE_DECISION_TIME 30 SECONDS ///Standard amount of missions for a faction to have #define CAMPAIGN_STANDARD_MISSION_QUANTITY 3 ///Attrition bonus for losing diff --git a/code/__DEFINES/cas.dm b/code/__DEFINES/cas.dm index fe9f2d637ee2a..eae4a6a61e3f2 100644 --- a/code/__DEFINES/cas.dm +++ b/code/__DEFINES/cas.dm @@ -3,10 +3,14 @@ #define PLANE_STATE_PREPARED 2 #define PLANE_STATE_FLYING 3 -#define LOW_FUEL_THRESHOLD 5 #define CAS_FUEL_PER_CAN_POUR 3 +///fuel count at which to forbid pilot from taking off +#define LOW_FUEL_TAKEOFF_THRESHOLD 10 +///fuel count at which to force plane to land due to low fuel #define LOW_FUEL_LANDING_THRESHOLD 4 +///% at which to warn pilot that there is low fuel +#define LOW_FUEL_WARNING_THRESHOLD 0.2 #ifdef TESTING #define CAS_USABLE TRUE diff --git a/code/__DEFINES/chat.dm b/code/__DEFINES/chat.dm index 7b694dfefb179..816261237f64d 100644 --- a/code/__DEFINES/chat.dm +++ b/code/__DEFINES/chat.dm @@ -3,6 +3,11 @@ * SPDX-License-Identifier: MIT */ +/// How many chat payloads to keep in history +#define CHAT_RELIABILITY_HISTORY_SIZE 5 +/// How many resends to allow before giving up +#define CHAT_RELIABILITY_MAX_RESENDS 3 + #define MESSAGE_TYPE_SYSTEM "system" #define MESSAGE_TYPE_LOCALCHAT "localchat" #define MESSAGE_TYPE_RADIO "radio" diff --git a/code/__DEFINES/chat_filter.dm b/code/__DEFINES/chat_filter.dm index ba4004fb4cba0..6b478edcaba34 100644 --- a/code/__DEFINES/chat_filter.dm +++ b/code/__DEFINES/chat_filter.dm @@ -6,7 +6,7 @@ /// Given a chat filter result, will send a to_chat to the user telling them about why their message was blocked #define REPORT_CHAT_FILTER_TO_USER(user, filter_result) \ - to_chat(user, span_warning("The word [html_encode(filter_result[CHAT_FILTER_INDEX_WORD])] is prohibited: [html_encode(filter_result[CHAT_FILTER_INDEX_REASON])]")) + to_chat(user, span_boldwarning("The word [html_encode(filter_result[CHAT_FILTER_INDEX_WORD])] is prohibited: [html_encode(filter_result[CHAT_FILTER_INDEX_REASON])]")) /// Given a user, returns TRUE if they are allowed to bypass the filter. #define CAN_BYPASS_FILTER(user) (FALSE)//(!isnull(user?.client?.holder)) deleted by decree of tgmc headmins diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm index 7c1db748a55af..f0407827ecb7c 100644 --- a/code/__DEFINES/colors.dm +++ b/code/__DEFINES/colors.dm @@ -256,6 +256,8 @@ Important note: colors can end up significantly different from the basic html pi #define LIGHT_COLOR_FLAME "#F88818" /// Rich and bright blue. rgb(0, 183, 255) #define LIGHT_COLOR_BLUE_FLAME "#00b8ff" +///Strong red orange +#define LIGHT_COLOR_RED_ORANGE "#ff2802" //Ammo and grenade colors #define COLOR_AMMO_AIRBURST "#2272eb" @@ -263,6 +265,7 @@ Important note: colors can end up significantly different from the basic html pi #define COLOR_AMMO_TACTICAL_SMOKE "#2F7B00" #define COLOR_AMMO_SMOKE "#0F98BD" #define COLOR_AMMO_TANGLEFOOT "#AA1FDC" +#define COLOR_AMMO_ACID "#25dc1f" #define COLOR_AMMO_RAZORBURN "#FBF236" #define COLOR_AMMO_HIGH_EXPLOSIVE "#b02323" @@ -277,3 +280,8 @@ Important note: colors can end up significantly different from the basic html pi #define LIGHT_COLOR_EMISSIVE_RED "#fa6464" #define LIGHT_COLOR_EMISSIVE_YELLOW "#f0fa64" #define LIGHT_COLOR_EMISSIVE_ORANGE "#faac64" + +//Colors used by special resin walls. +#define COLLOR_WALL_BULLETPROOF "#ed99f6" +#define COLOR_WALL_FIREPROOF "#ff696e" +#define COLOR_WALL_HARDY "#6699ff" diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 1db1631d1200b..7850d5ca22073 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -52,13 +52,19 @@ #define EMBEDDED_FALL_CHANCE 5 //Percentage chance for an embeddedd object fall out of the victim on its own, each process. #define EMBEDDED_FALL_DMG_MULTIPLIER 3 //Coefficient of multiplication for the damage the item does when it falls out (this*(embed_limb_damage or embed_body_damage)) +///Melee damage #define COMBAT_MELEE_ATTACK "melee_attack" +///Projectile damage #define COMBAT_PROJ_ATTACK "proj_attack" +///Potentially hostile interactions that aren't actually damage, such as disarms or grabs #define COMBAT_TOUCH_ATTACK "touch_attack" -#define SHIELD_TOGGLE (1<<0) //Can be toggled on and off. -#define SHIELD_PURE_BLOCKING (1<<1) //Only runs a percentage chance to block, and doesn't interact in other ways. -#define SHIELD_PARENT_INTEGRITY (1<<2) //Transfers damage to parent's integrity. +///Can be toggled on and off +#define SHIELD_TOGGLE (1<<0) +///Shield works by % chance to simply block the attack entirely, instead of normal reductive calc +#define SHIELD_PURE_BLOCKING (1<<1) +///Transfers damage to parent's integrity +#define SHIELD_PARENT_INTEGRITY (1<<2) /* RUTGMC REMOVAL - Explosions update #define EXPLODE_NONE 0 @@ -67,3 +73,6 @@ #define EXPLODE_LIGHT 3 #define EXPLODE_WEAK 4 RU TGMC REMOVAL END */ + +///Xenomorph accuracy +#define XENO_DEFAULT_ACCURACY 70 diff --git a/code/__DEFINES/conflict.dm b/code/__DEFINES/conflict.dm index e4664a5d551dc..e6b4f171a7aee 100644 --- a/code/__DEFINES/conflict.dm +++ b/code/__DEFINES/conflict.dm @@ -4,11 +4,11 @@ #define CLICK_CD_RANGE 4 #define CLICK_CD_CLICK_ABILITY 6 #define CLICK_CD_MELEE 8 +#define CLICK_CD_THROWING 4 #define CLICK_CD_HANDCUFFED 10 #define CLICK_CD_GRABBING 10 #define CLICK_CD_RESIST 10 #define CLICK_CD_LONG 20 -#define CLICK_CD_RESIST_PSYCHIC_GRAB 30 #define CLICK_CD_BREAKOUT 100 //Grab levels @@ -37,33 +37,45 @@ #define INTENT_NUMBER_HARM 3 //Ammo defines for gun/projectile related things. -//flags_ammo_behavior -#define AMMO_EXPLOSIVE (1<<0) //Ammo will impact a targeted open turf instead of continuing past it +//ammo_behavior_flags + +///Ammo will impact a targeted open turf instead of continuing past it +#define AMMO_TARGET_TURF (1<<0) +///Xeno type projectile #define AMMO_XENO (1<<1) -#define AMMO_UNWIELDY (1<<2) //poor accuracy against humans -#define AMMO_ENERGY (1<<3) //Ammo will pass through windows and has damage reduced by smokes with SMOKE_NERF_BEAM -#define AMMO_ROCKET (1<<4) //Ammo is more likely to continue past cover such as cades -#define AMMO_SNIPER (1<<5) //Ammo is more likely to continue past cover such as cades -#define AMMO_INCENDIARY (1<<6) //Ammo will attempt to add firestacks and ignite a hit mob if it deals any damage. Armor applies, regardless of AMMO_IGNORE_ARMOR -#define AMMO_SKIPS_ALIENS (1<<7) -#define AMMO_IS_SILENCED (1<<8) //Unused right now. -#define AMMO_IGNORE_ARMOR (1<<9) //Projectile direct damage will ignore both hard and soft armor -#define AMMO_IGNORE_RESIST (1<<10) //Unused. -#define AMMO_BALLISTIC (1<<11) //Generates blood splatters on mob hit -#define AMMO_SUNDERING (1<<12) -#define AMMO_SPECIAL_PROCESS (1<<13) -#define AMMO_SENTRY (1<<14) //Used to identify ammo from sentry guns and other automated sources -#define AMMO_FLAME (1<<15) //Used to identify flamethrower projectiles and similar projectiles -#define AMMO_IFF (1<<16) //Used to identify ammo that have intrinsec IFF properties -#define AMMO_HITSCAN (1<<17) //If the projectile from this ammo is hitscan -#define AMMO_LEAVE_TURF (1<<18) //If the projectile does something with on_leave_turf() -#define AMMO_PASS_THROUGH_TURF (1<<19) //If the projectile passes through walls causing damage to them -#define AMMO_PASS_THROUGH_MOVABLE (1<<20) //If the projectile passes through mobs and objects causing damage to them -#define AMMO_PASS_THROUGH_MOB (1<<21) //If the projectile passes through mobs only causing damage to them -#define AMMO_SOUND_PITCH (1<<22) //If the projectile ricochet and miss sound is pitched up +///poor accuracy against humans +#define AMMO_UNWIELDY (1<<2) +///Ammo will pass through windows and has damage reduced by smokes with SMOKE_NERF_BEAM +#define AMMO_ENERGY (1<<3) +///Ammo is more likely to continue past cover such as cades +#define AMMO_SNIPER (1<<4) +///Ammo will attempt to add firestacks and ignite a hit mob if it deals any damage. Armor applies, regardless of AMMO_IGNORE_ARMOR +#define AMMO_INCENDIARY (1<<5) +///Ammo type entirely ignores xenos +#define AMMO_SKIPS_ALIENS (1<<6) +///Generates blood splatters on mob hit +#define AMMO_BALLISTIC (1<<7) +///Ammo processes while traveling +#define AMMO_SPECIAL_PROCESS (1<<8) +///Used to identify flamethrower projectiles and similar projectiles +#define AMMO_FLAME (1<<9) +///Used to identify ammo that have intrinsec IFF properties +#define AMMO_IFF (1<<10) +///If the projectile from this ammo is hitscan +#define AMMO_HITSCAN (1<<11) +///If the projectile does something with on_leave_turf() +#define AMMO_LEAVE_TURF (1<<12) +///If the projectile passes through walls causing damage to them +#define AMMO_PASS_THROUGH_TURF (1<<13) +///If the projectile passes through mobs and objects causing damage to them +#define AMMO_PASS_THROUGH_MOVABLE (1<<14) +///If the projectile passes through mobs only causing damage to them +#define AMMO_PASS_THROUGH_MOB (1<<15) +///If the projectile ricochet and miss sound is pitched up +#define AMMO_SOUND_PITCH (1<<16) //Gun defines for gun related thing. More in the projectile folder. -//flags_gun_features +//gun_features_flags #define GUN_CAN_POINTBLANK (1<<0) #define GUN_UNUSUAL_DESIGN (1<<1) #define GUN_AMMO_COUNTER (1<<2) @@ -114,7 +126,7 @@ #define AUTOFIRE_CONTINUE (1<<0) #define AUTOFIRE_SUCCESS (1<<1) -//Ammo magazine defines, for flags_magazine +//Ammo magazine defines, for magazine_flags #define MAGAZINE_REFILLABLE (1<<0) #define MAGAZINE_HANDFUL (1<<1) #define MAGAZINE_WORN (1<<2) @@ -123,8 +135,8 @@ //Slowdown from various armors. #define SHOES_SLOWDOWN -1.0 // How much shoes slow you down by default. Negative values speed you up -#define SLOWDOWN_ARMOR_VERY_LIGHT 0.20 -#define SLOWDOWN_ARMOR_LIGHT 0.3 +#define SLOWDOWN_ARMOR_VERY_LIGHT 0.15 +#define SLOWDOWN_ARMOR_LIGHT 0.2 #define SLOWDOWN_ARMOR_MEDIUM 0.5 #define SLOWDOWN_ARMOR_HEAVY 0.7 #define SLOWDOWN_ARMOR_VERY_HEAVY 1 @@ -139,6 +151,7 @@ //Define sniper laser multipliers #define SNIPER_LASER_DAMAGE_MULTIPLIER 1.5 //+50% damage vs the aimed target +#define SNIPER_LASER_SLOWDOWN_STACKS 3 // Slowdown applied on hit vs the aimed target. //Define lasrifle #define ENERGY_STANDARD_AMMO_COST 20 @@ -171,6 +184,7 @@ #define SMOKE_XENO_OZELOMELYN (1<<19) //Smoke that purges chemicals and does minor capped toxin damage for Defiler. #define SMOKE_SATRAPINE (1<<20) //nerve agent that purges painkillers and causes increasing pain #define SMOKE_XENO_TOXIC (1<<21) //deals damage to anyone inside it and inflicts the intoxicated debuff, dealing damage over time +#define SMOKE_PURGER (1<<22) // This smoke removes any smoke has this in its effects_cycle, that removes certain types of smokes. //Incapacitated #define INCAPACITATED_IGNORE_RESTRAINED (1<<0) @@ -219,3 +233,10 @@ #define X_FIRE_LAYER 1 // #define X_TOTAL_LAYERS 9 RU TGMC EDIT ///////////////////////////////// + +//Cave comms defines +#define CAVE_NO_INTERFERENCE 0 //! No impact on comms. +#define CAVE_MINOR_INTERFERENCE 1 //! Scrambles outgoing messages, no impact on incoming. +#define CAVE_FULL_INTERFERENCE 2 //! Prevents incoming and outgoing messages. + +#define ANTENNA_SYNCING_TIME 30 SECONDS //! Time needed to initially configure an antenna module after equipping. diff --git a/code/__DEFINES/cooldowns.dm b/code/__DEFINES/cooldowns.dm index 1bd8a7acf7ad0..5f849a9e07aff 100644 --- a/code/__DEFINES/cooldowns.dm +++ b/code/__DEFINES/cooldowns.dm @@ -50,6 +50,10 @@ #define COOLDOWN_RAVAGER_FLAMER_ACT "cooldown_ravager_flamer_act" #define COOLDOWN_DROPPOD_TARGETTING "cooldown_droppod_targetting" #define COOLDOWN_TRY_TTS "cooldown_try_tts" +#define COOLDOWN_EVASION_ACTIVATION "cooldown_evasion_activation" +#define COOLDOWN_TANK_SWIVEL "tank_turret_swivel" +#define COOLDOWN_WHISTLE_BLOW "cooldown_whistle_blow" +#define COOLDOWN_WHISTLE_WARCRY "cooldown_whistle_warcry" //Mecha cooldowns #define COOLDOWN_MECHA "mecha" @@ -61,6 +65,7 @@ #define COOLDOWN_MECHA_SKYFALL "mecha_skyfall" #define COOLDOWN_MECHA_MISSILE_STRIKE "mecha_missile_strike" +#define COOLDOWN_VEHICLE_CRUSHSOUND "cooldown_vehicle_crushsound" //// COOLDOWN SYSTEMS /* * We have 2 cooldown systems: timer cooldowns (divided between stoppable and regular) and world.time cooldowns. @@ -100,6 +105,7 @@ #define TIMER_COOLDOWN_START(cd_source, cd_index, cd_time) LAZYSET(cd_source.cooldowns, cd_index, addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(end_cooldown), cd_source, cd_index), cd_time)) +/// Returns TRUE if still cooling down, FALSE otherwise #define TIMER_COOLDOWN_CHECK(cd_source, cd_index) LAZYACCESS(cd_source.cooldowns, cd_index) #define TIMER_COOLDOWN_END(cd_source, cd_index) LAZYREMOVE(cd_source.cooldowns, cd_index) diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm old mode 100644 new mode 100755 index cc9a8693a5a25..9c550d5df19f1 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -8,6 +8,7 @@ ///from base of datum/controller/subsystem/mapping/proc/add_new_zlevel(): (list/args) #define COMSIG_GLOB_NEW_Z "!new_z" +#define COMSIG_GLOB_DEPLOY_TIMELOCK_ENDED "!deploy_timelock_ended" #define COMSIG_GLOB_OPEN_TIMED_SHUTTERS_LATE "!open_timed_shutters_late" #define COMSIG_GLOB_OPEN_TIMED_SHUTTERS_XENO_HIVEMIND "!open_timed_shutters_xeno_hivemind" #define COMSIG_GLOB_OPEN_TIMED_SHUTTERS_CRASH "!open_timed_shutters_crash" @@ -28,9 +29,15 @@ /// from /obj/machinery/setAnchored(): (machine, anchoredstate) #define COMSIG_GLOB_MACHINERY_ANCHORED_CHANGE "!machinery_anchored_change" - +/// called after a successful var edit somewhere in the world: (list/args) +#define COMSIG_GLOB_VAR_EDIT "!var_edit" /// called after an explosion happened : (epicenter, devastation_range, heavy_impact_range, light_impact_range, weak_impact_range, took, orig_dev_range, orig_heavy_range, orig_light_range) #define COMSIG_GLOB_EXPLOSION "!explosion" +///Gamemode has successfully loaded +#define COMSIG_GLOB_GAMEMODE_LOADED "!gamemode_loaded" + +#define COMSIG_GLOB_PLAYER_ROUNDSTART_SPAWNED "!player_roundstart_spawned" +#define COMSIG_GLOB_PLAYER_LATE_SPAWNED "!player_late_spawned" #define COMSIG_GLOB_MOB_LOGIN "!mob_login" #define COMSIG_GLOB_MOB_LOGOUT "!mob_logout" @@ -60,6 +67,9 @@ #define COMSIG_GLOB_CAS_LASER_CREATED "!cas_laser_sent" #define COMSIG_GLOB_RAILGUN_LASER_CREATED "!railgun_laser_sent" +//Sent when a supply beacon is activated +#define COMSIG_GLOB_SUPPLY_BEACON_CREATED "!supply_beacon_created" + //Signals for shuttle #define COMSIG_GLOB_SHUTTLE_TAKEOFF "!shuttle_take_off" @@ -100,31 +110,16 @@ #define COMSIG_GLOB_CAMPAIGN_DROPBLOCKER_DISABLED "!campaign_dropblocker_disabled" ///Override code for NT base rescue mission #define COMSIG_GLOB_CAMPAIGN_NT_OVERRIDE_CODE "!campaign_nt_override_code" - -///Campaign asset activation successful -#define COMSIG_CAMPAIGN_ASSET_ACTIVATION "campaign_asset_activation" -///Campaign asset disabler activated -#define COMSIG_CAMPAIGN_DISABLER_ACTIVATION "campaign_disabler_activation" +///Code computer starts running +#define COMSIG_GLOB_CAMPAIGN_NT_OVERRIDE_RUNNING "!campaign_nt_override_running" +///Code computer stops running +#define COMSIG_GLOB_CAMPAIGN_NT_OVERRIDE_STOP_RUNNING "!campaign_nt_override_stop_running" +///Campaign OB beacon deployed +#define COMSIG_GLOB_CAMPAIGN_OB_BEACON_ACTIVATION "!campaign_ob_beacon_activation" +///Campaign OB beacon going off +#define COMSIG_GLOB_CAMPAIGN_OB_BEACON_TRIGGERED "!campaign_ob_beacon_triggered" ////////////////////////////////////////////////////////////////// - -// /datum signals -/// when a component is added to a datum: (/datum/component) -#define COMSIG_COMPONENT_ADDED "component_added" -/// before a component is removed from a datum because of RemoveComponent: (/datum/component) -#define COMSIG_COMPONENT_REMOVING "component_removing" -/// before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation -#define COMSIG_PREQDELETED "parent_preqdeleted" -/// just before a datum's Destroy() is called: (force), at this point none of the other components chose to interrupt qdel and Destroy will be called -#define COMSIG_QDELETING "parent_qdeleting" -/// generic topic handler (usr, href_list) -#define COMSIG_TOPIC "handle_topic" - -/// fires on the target datum when an element is attached to it (/datum/element) -#define COMSIG_ELEMENT_ATTACH "element_attach" -/// fires on the target datum when an element is attached to it (/datum/element) -#define COMSIG_ELEMENT_DETACH "element_detach" - // /datum/component signals #define COMSIG_AUTOFIRE_ONMOUSEDOWN "autofire_onmousedown" #define COMPONENT_AUTOFIRE_ONMOUSEDOWN_BYPASS (1<<0) @@ -222,6 +217,8 @@ #define COMSIG_ATOM_ATTACK_GHOST "atom_attack_ghost" //from base of atom/attack_ghost(): (mob/dead/observer/ghost) #define COMPONENT_NO_ATTACK_HAND (1<<0) //works on all attack_hands. #define COMSIG_ATOM_ATTACK_POWERLOADER "atom_attack_powerloader"//from base of atom/attack_powerloader: (mob/living/user, obj/item/powerloader_clamp/attached_clamp) +///from base of atom/emp_act(): (severity) +#define COMSIG_ATOM_EMP_ACT "atom_emp_act" #define COMSIG_ATOM_EXAMINE "atom_examine" //from base of atom/examine(): (/mob) ///from base of atom/get_examine_name(): (/mob, list/overrides) #define COMSIG_ATOM_GET_EXAMINE_NAME "atom_examine_name" @@ -233,10 +230,32 @@ ///from base of atom/get_mechanics_info(): (/mob) #define COMSIG_ATOM_GET_MECHANICS_INFO "atom_mechanics_info" #define COMPONENT_MECHANICS_CHANGE (1<<0) -#define COMSIG_ATOM_UPDATE_ICON "atom_update_icon" //from base of atom/update_icon(): () - #define COMSIG_ATOM_NO_UPDATE_ICON_STATE (1<<0) - #define COMSIG_ATOM_NO_UPDATE_OVERLAYS (1<<1) -#define COMSIG_ATOM_UPDATE_OVERLAYS "atom_update_overlays" //from base of atom/update_overlays(): (list/new_overlays) + +///from base of [/atom/proc/update_appearance]: (updates) +#define COMSIG_ATOM_UPDATE_APPEARANCE "atom_update_appearance" + /// If returned from [COMSIG_ATOM_UPDATE_APPEARANCE] it prevents the atom from updating its name. + #define COMSIG_ATOM_NO_UPDATE_NAME UPDATE_NAME + /// If returned from [COMSIG_ATOM_UPDATE_APPEARANCE] it prevents the atom from updating its desc. + #define COMSIG_ATOM_NO_UPDATE_DESC UPDATE_DESC + /// If returned from [COMSIG_ATOM_UPDATE_APPEARANCE] it prevents the atom from updating its icon. + #define COMSIG_ATOM_NO_UPDATE_ICON UPDATE_ICON +///from base of [/atom/proc/update_name]: (updates) +#define COMSIG_ATOM_UPDATE_NAME "atom_update_name" +///from base of [/atom/proc/update_desc]: (updates) +#define COMSIG_ATOM_UPDATE_DESC "atom_update_desc" +///from base of [/atom/update_icon]: () +#define COMSIG_ATOM_UPDATE_ICON "atom_update_icon" + /// If returned from [COMSIG_ATOM_UPDATE_ICON] it prevents the atom from updating its icon state. + #define COMSIG_ATOM_NO_UPDATE_ICON_STATE UPDATE_ICON_STATE + /// If returned from [COMSIG_ATOM_UPDATE_ICON] it prevents the atom from updating its overlays. + #define COMSIG_ATOM_NO_UPDATE_OVERLAYS UPDATE_OVERLAYS +///from base of [atom/update_icon_state]: () +#define COMSIG_ATOM_UPDATE_ICON_STATE "atom_update_icon_state" +///from base of [/atom/update_overlays]: (list/new_overlays) +#define COMSIG_ATOM_UPDATE_OVERLAYS "atom_update_overlays" +///from base of [/atom/update_icon]: (signalOut, did_anything) +#define COMSIG_ATOM_UPDATED_ICON "atom_updated_icon" + #define COMSIG_ATOM_EX_ACT "atom_ex_act" //from base of atom/ex_act(): (severity, target) #define COMSIG_ATOM_SET_LIGHT "atom_set_light" //from base of atom/set_light(): (l_range, l_power, l_color) #define COMSIG_ATOM_BULLET_ACT "atom_bullet_act" //from base of atom/bullet_act(): (/obj/projectile) @@ -280,6 +299,8 @@ #define COMSIG_MOVABLE_BUCKLE "buckle" //from base of atom/movable/buckle_mob(): (mob, force) #define COMPONENT_MOVABLE_BUCKLE_STOPPED (1<<0) #define COMSIG_MOVABLE_UNBUCKLE "unbuckle" //from base of atom/movable/unbuckle_mob(): (mob, force) +///from /obj/vehicle/sealed/proc/driver_move +#define COMSIG_VEHICLE_MOVE "vehicle_move" ///from /obj/vehicle/proc/driver_move, caught by the riding component to check and execute the driver trying to drive the vehicle #define COMSIG_RIDDEN_DRIVER_MOVE "driver_move" #define COMPONENT_DRIVER_BLOCK_MOVE (1<<0) @@ -300,6 +321,8 @@ #define COMSIG_MOVABLE_UPDATE_GLIDE_SIZE "movable_glide_size" //from base of /atom/movable/proc/set_glide_size(): (target) /// sent before a thing is crushed by a shuttle #define COMSIG_MOVABLE_SHUTTLE_CRUSH "movable_shuttle_crush" +///Movable deployed via a patrol point +#define COMSIG_MOVABLE_PATROL_DEPLOYED "movable_patrol_deployed" // /turf signals #define COMSIG_TURF_CHANGE "turf_change" //from base of turf/ChangeTurf(): (path, list/new_baseturfs, flags, list/transferring_comps) @@ -338,6 +361,7 @@ #define COMSIG_ITEM_ATTACK_ALTERNATE "item_attack_alt" //from base of obj/item/attack_alternate(): (/mob/living/target, /mob/living/user) #define COMSIG_ITEM_ATTACK_SELF "item_attack_self" //from base of obj/item/attack_self(): (/mob) #define COMPONENT_NO_INTERACT (1<<0) +#define COMSIG_ITEM_ATTACK_SELF_ALTERNATE "item_attack_self_alternate" //from base of obj/item/attack_self_alternate(): (/mob) #define COMSIG_ITEM_EQUIPPED "item_equip" //from base of obj/item/equipped(): (/mob/equipper, slot) #define COMSIG_ITEM_EQUIPPED_TO_SLOT "item_equip_to_slot" //from base of obj/item/equipped(): (/mob/equipper, slot) #define COMSIG_ITEM_EQUIPPED_NOT_IN_SLOT "item_equip_not_in_slot" //from base of obj/item/equipped(): (/mob/equipper, slot) @@ -361,7 +385,6 @@ #define COMSIG_ITEM_TOGGLE_ACTION "item_toggle_action" //from base of obj/item/ui_interact(): (/mob/user) #define COMSIG_ITEM_TOGGLE_ACTIVE "item_toggle_active" //from base of /obj/item/toggle_active(): (new_state) -#define COMSIG_ITEM_EXCLUSIVE_TOGGLE "item_exclusive_toggle" #define COMSIG_ITEM_MIDDLECLICKON "item_middleclickon" //from base of mob/living/carbon/human/MiddleClickOn(): (/atom, /mob) #define COMSIG_ITEM_SHIFTCLICKON "item_shiftclickon" //from base of mob/living/carbon/human/ShiftClickOn(): (/atom, /mob) @@ -427,6 +450,8 @@ #define COMSIG_MECH_FIRE "mech_fire" #define COMSIG_MECH_STOP_FIRE "mech_stop_fire" +#define COMSIG_ARMORED_FIRE "armored_fire" +#define COMSIG_ARMORED_STOP_FIRE "armored_stop_fire" // /obj/item/clothing signals #define COMSIG_SHOES_STEP_ACTION "shoes_step_action" //from base of obj/item/clothing/shoes/proc/step_action(): () @@ -435,11 +460,6 @@ #define COMSIG_GRAB_SELF_ATTACK "grab_self_attack" //from base of obj/item/grab/attack() if attacked is the same as attacker: (mob/living/user) #define COMSIG_GRAB_SUCCESSFUL_SELF_ATTACK (1<<0) -// /obj/projectile signals -#define COMSIG_PROJ_SCANTURF "proj_scanturf" - #define COMPONENT_PROJ_SCANTURF_TURFCLEAR (1<<0) - #define COMPONENT_PROJ_SCANTURF_TARGETFOUND (1<<1) - // /mob signals #define COMSIG_MOB_DEATH "mob_death" //from base of mob/death(): (gibbing) #define COMSIG_MOB_PRE_DEATH "mob_pre_death" @@ -623,7 +643,7 @@ ///from /mob/living/proc/attack_alien_harm(mob/living/carbon/xenomorph/X, dam_bonus, set_location, random_location, no_head, no_crit, force_intent) #define COMSIG_XENOMORPH_ATTACK_LIVING "xenomorph_attack_living" #define COMSIG_XENOMORPH_BONUS_APPLIED (1<<0) -///from /mob/living/carbon/xenomorph/attack_alien(mob/living/carbon/xenomorph/X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) +///from /mob/living/carbon/xenomorph/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) ///only on INTENT_HARM, INTENT_DISARM, IF it does damaage #define COMSIG_XENOMORPH_ATTACK_HOSTILE_XENOMORPH "xenomorph_attack_xenomorph" @@ -675,18 +695,13 @@ #define COMSIG_KB_ACTIVATED (1<<0) #define COMSIG_KB_NOT_ACTIVATED (1<<1) //used in unique action -#define COMSIG_KB_ADMIN_ASAY_DOWN "keybinding_admin_asay_down" -#define COMSIG_KB_ADMIN_MSAY_DOWN "keybinding_admin_msay_down" -#define COMSIG_KB_ADMIN_DSAY_DOWN "keybinding_admin_dsay_down" #define COMSIG_KB_CARBON_HOLDRUNMOVEINTENT_DOWN "keybinding_carbon_holdrunmoveintent_down" -#define COMSIG_KB_ADMIN_TOGGLEBUILDMODE_DOWN "keybinding_admin_togglebuildmode_down" #define COMSIG_KB_CARBON_TOGGLETHROWMODE_DOWN "keybinding_carbon_togglethrowmode_down" #define COMSIG_KB_CARBON_TOGGLEREST_DOWN "kebinding_carbon_togglerest_down" #define COMSIG_KB_CARBON_SELECTHELPINTENT_DOWN "keybinding_carbon_selecthelpintent_down" #define COMSIG_KB_CARBON_SELECTDISARMINTENT_DOWN "keybinding_carbon_selectdisarmintent_down" #define COMSIG_KB_CARBON_SELECTGRABINTENT_DOWN "keybinding_carbon_selectgrabintent_down" #define COMSIG_KB_CARBON_SELECTHARMINTENT_DOWN "keybinding_carbon_selectharmintent_down" -#define COMSIG_KB_CARBON_SPECIALCLICK_DOWN "keybinding_carbon_specialclick_down" #define COMSIG_KB_CLIENT_GETHELP_DOWN "keybinding_client_gethelp_down" #define COMSIG_KB_CLIENT_SCREENSHOT_DOWN "keybinding_client_screenshot_down" #define COMSIG_KB_CLIENT_MINIMALHUD_DOWN "keybinding_client_minimalhud_down" @@ -723,12 +738,20 @@ #define COMSIG_KB_MOVEMENT_WEST_DOWN "keybinding_movement_west_down" #define COMSIG_KB_MOVEMENT_EAST_DOWN "keybinding_movement_east_down" +//Admin +#define COMSIG_KB_ADMIN_ASAY_DOWN "keybinding_admin_asay_down" +#define COMSIG_KB_ADMIN_DSAY_DOWN "keybinding_admin_dsay_down" +#define COMSIG_KB_ADMIN_MSAY_DOWN "keybinding_admin_msay_down" +#define COMSIG_KB_ADMIN_TOGGLEBUILDMODE_DOWN "keybinding_admin_togglebuildmode_down" +#define COMSIG_KB_ADMIN_VIEWTAGS_DOWN "keybinding_admin_viewtags_down" + // mob keybinds #define COMSIG_KB_HOLD_RUN_MOVE_INTENT_UP "keybinding_hold_run_move_intent_up" #define COMSIG_KB_EMOTE "keybinding_emote" #define COMSIG_KB_TOGGLE_MINIMAP "toggle_minimap" #define COMSIG_KB_TOGGLE_EXTERNAL_MINIMAP "toggle_external_minimap" #define COMSIG_KB_SELFHARM "keybind_selfharm" +#define COMSIG_KB_INTERACTIVE_EMOTE "keybinding_interactive_emote" // mecha keybinds #define COMSIG_MECHABILITY_TOGGLE_INTERNALS "mechability_toggle_internals" @@ -738,7 +761,10 @@ #define COMSIG_MECHABILITY_TOGGLE_ZOOM "mechability_toggle_zoom" #define COMSIG_MECHABILITY_SKYFALL "mechability_skyfall" #define COMSIG_MECHABILITY_STRIKE "mechability_strike" +#define COMSIG_MECHABILITY_RELOAD "mechability_reload" +#define COMSIG_MECHABILITY_TOGGLE_ACTUATORS "mechability_toggle_actuators" +#define COMSIG_ACTION_EXCLUSIVE_TOGGLE "action_exclusive_toggle" // xeno abilities for keybindings #define COMSIG_XENOABILITY_REST "xenoability_rest" @@ -750,6 +776,7 @@ #define COMSIG_XENOABILITY_DROP_PLANT "xenoability_drop_plant" #define COMSIG_XENOABILITY_CHOOSE_PLANT "xenoability_choose_plant" #define COMSIG_XENOABILITY_SECRETE_RESIN "xenoability_secrete_resin" +#define COMSIG_XENOABILITY_SECRETE_SPECIAL_RESIN "xenoability_secrete_special_resin" #define COMSIG_XENOABILITY_PLACE_ACID_WELL "place_acid_well" #define COMSIG_XENOABILITY_EMIT_RECOVERY "xenoability_emit_recovery" #define COMSIG_XENOABILITY_EMIT_WARDING "xenoability_emit_warding" @@ -783,7 +810,6 @@ #define COMSIG_XENOABILITY_TOGGLE_BOMB "xenoability_toggle_bomb" #define COMSIG_XENOABILITY_TOGGLE_BOMB_RADIAL "xenoability_toggle_bomb_radial" #define COMSIG_XENOABILITY_CREATE_BOMB "xenoability_create_bomb" -#define COMSIG_XENOABILITY_ROOT "xenoability_root" #define COMSIG_XENOABILITY_BOMBARD "xenoability_bombard" #define COMSIG_XENOABILITY_THROW_HUGGER "xenoability_throw_hugger" @@ -803,7 +829,7 @@ #define COMSIG_XENOABILITY_DEVOUR "xenoability_devour" #define COMSIG_XENOABILITY_DRAIN "xenoability_drain" #define COMSIG_XENOABILITY_TRANSFUSION "xenoability_transfusion" -#define COMSIG_XENOABILITY_REJUVENATE "xenoability_rejuvenate" +#define COMSIG_XENOABILITY_OPPOSE "xenoability_oppose" #define COMSIG_XENOABILITY_PSYCHIC_LINK "xenoability_psychic_link" #define COMSIG_XENOABILITY_CARNAGE "xenoability_carnage" #define COMSIG_XENOABILITY_FEAST "xenoability_feast" @@ -938,6 +964,15 @@ RU TGMC EDIT */ #define COMSIG_XENOABILITY_SEISMIC_FRACTURE "xenoability_seismic_fracture" #define COMSIG_XENOABILITY_PRIMAL_WRATH "xenoability_primal_wrath" +//sectoid abilities +#define COMSIG_ABILITY_MINDMELD "ability_mindmeld" +#define COMSIG_ABILITY_MINDFRAY "ability_mindfray" +#define COMSIG_ABILITY_REKNIT_FORM "ability_reknit_form" +#define COMSIG_ABILITY_FUSE "ability_fuse" +#define COMSIG_ABILITY_STASIS "ability_stasis" +#define COMSIG_ABILITY_TELEKINESIS "ability_telekinesis" +#define COMSIG_ABILITY_REANIMATE "ability_reanimate" + // throw parry signals #define COMSIG_THROW_PARRY_CHECK "throw_parry_check" #define COMSIG_PARRY_TRIGGER "parry_trigger" @@ -975,6 +1010,13 @@ RU TGMC EDIT */ #define COMSIG_KB_DEFENDORDER "keybind_defendorder" #define COMSIG_KB_RETREATORDER "keybind_retreatorder" +//Item toggle keybinds +#define COMSIG_ITEM_TOGGLE_JETPACK "item_toggle_jetpack" +#define COMSIG_ITEM_TOGGLE_BLINKDRIVE "item_toggle_blinkdrive" + +//Weapon related ability keybinds +#define COMSIG_WEAPONABILITY_AXESWEEP "weaponability_axesweep" +#define COMSIG_WEAPONABILITY_SWORDLUNGE "weaponability_swordlunge" // human modules signals for keybindings #define COMSIG_KB_VALI_CONFIGURE "keybinding_vali_configure" @@ -1041,9 +1083,6 @@ RU TGMC EDIT */ #define COMSIG_ESCORTED_ATOM_CHANGING "escorted_atom_changing" #define COMSIG_POINT_TO_ATOM "point_to_atom" -/// from datum ui_act (usr, action) -#define COMSIG_UI_ACT "COMSIG_UI_ACT" - /// From reequip components #define COMSIG_REEQUIP_FAILURE "reequip failure" @@ -1066,3 +1105,12 @@ RU TGMC EDIT */ #define COMSIG_PUPPET_CHANGE_ORDER "puppetchangeorder" #define COMSIG_PUPPET_CHANGE_ALL_ORDER "puppetglobalorder" RU TGMC EDIT */ +#define COMSIG_CAVE_INTERFERENCE_CHECK "cave_interference_check" //! Cave comms interference check signal. + +//Campaign signals +///Campaign asset obtained for the first time +#define COMSIG_CAMPAIGN_NEW_ASSET "campaign_new_asset" +///Campaign asset activation successful +#define COMSIG_CAMPAIGN_ASSET_ACTIVATION "campaign_asset_activation" +///Campaign asset disabler activated +#define COMSIG_CAMPAIGN_DISABLER_ACTIVATION "campaign_disabler_activation" diff --git a/code/__DEFINES/dcs/signals/signals_datum.dm b/code/__DEFINES/dcs/signals/signals_datum.dm new file mode 100644 index 0000000000000..925be22b1ba4b --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_datum.dm @@ -0,0 +1,28 @@ +// Datum signals. Format: +// When the signal is called: (signal arguments) +// All signals send the source datum of the signal as the first argument + +// /datum signals +/// when a component is added to a datum: (/datum/component) +#define COMSIG_COMPONENT_ADDED "component_added" +/// before a component is removed from a datum because of ClearFromParent: (/datum/component) +#define COMSIG_COMPONENT_REMOVING "component_removing" + +/// before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation +/// you should only be using this if you want to block deletion +/// that's the only functional difference between it and COMSIG_QDELETING, outside setting QDELETING to detect +#define COMSIG_PREQDELETED "parent_preqdeleted" +/// just before a datum's Destroy() is called: (force), at this point none of the other components chose to interrupt qdel and Destroy will be called +#define COMSIG_QDELETING "parent_qdeleting" +/// generic topic handler (usr, href_list) +#define COMSIG_TOPIC "handle_topic" +/// handler for vv_do_topic (usr, href_list) +#define COMSIG_VV_TOPIC "vv_topic" + #define COMPONENT_VV_HANDLED (1<<0) +/// from datum ui_act (usr, action) +#define COMSIG_UI_ACT "COMSIG_UI_ACT" + +/// fires on the target datum when an element is attached to it (/datum/element) +#define COMSIG_ELEMENT_ATTACH "element_attach" +/// fires on the target datum when an element is attached to it (/datum/element) +#define COMSIG_ELEMENT_DETACH "element_detach" diff --git a/code/__DEFINES/dcs/signals/signals_hud.dm b/code/__DEFINES/dcs/signals/signals_hud.dm new file mode 100644 index 0000000000000..d2c86ffc6c388 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_hud.dm @@ -0,0 +1 @@ +#define COMSIG_XENOMORPH_UPDATE_ICONS "xenomorph_update_icons" diff --git a/code/__DEFINES/dropship_equipment.dm b/code/__DEFINES/dropship_equipment.dm index 49cb471d38f89..b13f432068f62 100644 --- a/code/__DEFINES/dropship_equipment.dm +++ b/code/__DEFINES/dropship_equipment.dm @@ -17,6 +17,8 @@ #define CAS_MISSILE 3 #define CAS_30MM 4 #define RAILGUN_AMMO 5 +#define CAS_BOMBLET 6 +#define CAS_BOMB 7 //Ammo impact type defines #define CAS_AMMO_EXPLOSIVE 1//Uses explosive ammo. Missiles/bombs, etc. diff --git a/code/__DEFINES/equipment.dm b/code/__DEFINES/equipment.dm index cc6c9743148fa..1bb08eff3222a 100644 --- a/code/__DEFINES/equipment.dm +++ b/code/__DEFINES/equipment.dm @@ -22,6 +22,8 @@ #define PASS_AIR (1<<9) ///Mobs can walk freely between turfs with walkover flagged objects #define PASS_WALKOVER (1<<10) +///when jumping, mobs can pass onto tanks +#define PASS_TANK (1<<11) #define PASSABLE (PASS_THROW|PASS_PROJECTILE|PASS_AIR) #define HOVERING (PASS_LOW_STRUCTURE|PASS_MOB|PASS_DEFENSIVE_STRUCTURE|PASS_FIRE) @@ -30,7 +32,7 @@ -//flags_atom +//atom_flags #define UNUSED_RESERVATION_TURF_1 (1<<0) #define AI_BLOCKED (1<<1) //Prevent ai from going onto this turf @@ -56,45 +58,71 @@ //========================================================================================== -//flags_barrier +//barrier_flags #define HANDLE_BARRIER_CHANCE (1<<0) #define HANDLE_BARRIER_BLOCK (1<<1) -//bitflags that were previously under flags_atom, these only apply to items. -//clothing specific stuff uses flags_inventory. -//flags_item -#define NOBLUDGEON (1<<0) // when an item has this it produces no "X has been hit by Y with Z" message with the default handler -#define DELONDROP (1<<1) // Deletes on drop instead of falling on the floor. -#define TWOHANDED (1<<2) // The item is twohanded. -#define WIELDED (1<<3) // The item is wielded with both hands. -#define ITEM_ABSTRACT (1<<4) //The item is abstract (grab, powerloader_clamp, etc) -#define DOES_NOT_NEED_HANDS (1<<5) //Dont need hands to use it -#define SYNTH_RESTRICTED (1<<6) //Prevents synths from wearing items with this flag -#define IMPEDE_JETPACK (1<<7) //Reduce the range of jetpack -#define CAN_BUMP_ATTACK (1<<8) //Item triggers bump attack -#define IS_DEPLOYABLE (1<<9) //Item can be deployed into a machine +//bitflags that were previously under atom_flags, these only apply to items. +//clothing specific stuff uses inventory_flags. +//item_flags +/// when an item has this it produces no "X has been hit by Y with Z" message with the default handler +#define NOBLUDGEON (1<<0) +/// Deletes on drop instead of falling on the floor. +#define DELONDROP (1<<1) +/// The item is twohanded. +#define TWOHANDED (1<<2) +/// The item is wielded with both hands. +#define WIELDED (1<<3) +///The item is abstract (grab, powerloader_clamp, etc) +#define ITEM_ABSTRACT (1<<4) +///Dont need hands to use it +#define DOES_NOT_NEED_HANDS (1<<5) +///Prevents synths from wearing items with this flag +#define SYNTH_RESTRICTED (1<<6) +///Reduce the range of jetpack +#define IMPEDE_JETPACK (1<<7) +///Item triggers bump attack +#define CAN_BUMP_ATTACK (1<<8) +///Item can be deployed into a machine +#define IS_DEPLOYABLE (1<<9) +///Item deploys on initialize #define DEPLOY_ON_INITIALIZE (1<<10) -#define IS_DEPLOYED (1<<11) //If this is on an item, said item is currently deployed -#define DEPLOYED_NO_PICKUP (1<<12) //Disables deployed item pickup -#define DEPLOYED_NO_ROTATE (1<<13) //Disables deployed item rotation abilities to rotate. -#define DEPLOYED_NO_ROTATE_ANCHORED (1<<14) //Disables deployed item rotation if anchored. -#define DEPLOYED_WRENCH_DISASSEMBLE (1<<15) //If this is on an item, the item can only be disassembled using a wrench once deployed. -#define DEPLOYED_ANCHORED_FIRING_ONLY (1<<16) //Disables firing deployable if it is not anchored. -#define FULLY_WIELDED (1<<17) //If the item is properly wielded. Used for guns +///If this is on an item, said item is currently deployed +#define IS_DEPLOYED (1<<11) +///Disables deployed item pickup +#define DEPLOYED_NO_PICKUP (1<<12) +///Disables deployed item rotation abilities to rotate. +#define DEPLOYED_NO_ROTATE (1<<13) +///Disables deployed item rotation if anchored. +#define DEPLOYED_NO_ROTATE_ANCHORED (1<<14) +///If this is on an item, the item can only be disassembled using a wrench once deployed. +#define DEPLOYED_WRENCH_DISASSEMBLE (1<<15) +///Disables firing deployable if it is not anchored. +#define DEPLOYED_ANCHORED_FIRING_ONLY (1<<16) +///If the item is properly wielded. Used for guns +#define FULLY_WIELDED (1<<17) ///If a holster has underlay sprites #define HAS_UNDERLAY (1<<18) ///is this item equipped into an inventory slot or hand of a mob? #define IN_INVENTORY (1<<19) +///This item is used for autobalance calculations or excluded, such as valhalla items +#define AUTOBALANCE_CHECK (1<<20) -//flags_storage +//storage_flags ///If a storage container can be restocked into a vendor #define BYPASS_VENDOR_CHECK (1<<0) +//id_flags +///If you can get buy a loadout +#define CAN_BUY_LOADOUT (1<<0) +///If you have used the GHMME +#define USED_GHMME (1<<1) + //========================================================================================== -//flags_inv_hide -//Bit flags for the flags_inv_hide variable, which determine when a piece of clothing hides another. IE a helmet hiding glasses. +//inv_hide_flags +//Bit flags for the inv_hide_flags variable, which determine when a piece of clothing hides another. IE a helmet hiding glasses. #define HIDEGLOVES (1<<0) #define HIDESUITSTORAGE (1<<1) @@ -112,7 +140,7 @@ //========================================================================================== -//flags_inventory +//inventory_flags //SHOES ONLY=========================================================================================== #define NOSLIPPING (1<<0) //prevents from slipping on wet floors, in space etc @@ -148,7 +176,7 @@ //=========================================================================================== -//Marine armor only, use for flags_armor_features. +//Marine armor only, use for armor_features_flags. #define ARMOR_SQUAD_OVERLAY (1<<0) #define ARMOR_LAMP_OVERLAY (1<<1) #define ARMOR_LAMP_ON (1<<2) @@ -158,7 +186,7 @@ //=========================================================================================== //=========================================================================================== -//Marine helmet only, use for flags_marine_helmet. +//Marine helmet only, use for marine_helmet_flags. #define HELMET_SQUAD_OVERLAY (1<<0) #define HELMET_GARB_OVERLAY (1<<1) #define HELMET_STORE_GARB (1<<2) @@ -166,7 +194,7 @@ //=========================================================================================== //ITEM INVENTORY SLOT BITMASKS - These determine to which slot an item can be equipped to -//flags_equip_slot +//equip_slot_flags #define ITEM_SLOT_OCLOTHING (1<<0) //outer clothing, so armor, vests, etc #define ITEM_SLOT_ICLOTHING (1<<1) //inner clothing, so jumpsuits/uniforms, etc #define ITEM_SLOT_GLOVES (1<<2) //gloves, any type of gloves @@ -183,6 +211,29 @@ #define ITEM_SLOT_POCKET (ITEM_SLOT_R_POCKET|ITEM_SLOT_L_POCKET) //a combo of the above #define ITEM_SLOT_SUITSTORE (1<<13) //the suit storage slot #define ITEM_SLOT_HANDCUFF (1<<14) //the slot for handcuffs +#define ITEM_SLOT_L_HAND (1<<15) //left hand +#define ITEM_SLOT_R_HAND (1<<16) //right hand + +///Inventory slot bits to plain english strings +GLOBAL_LIST_INIT(inventory_slots_to_string, list( + "[ITEM_SLOT_OCLOTHING]" = "Suit", + "[ITEM_SLOT_ICLOTHING]" = "Uniform", + "[ITEM_SLOT_GLOVES]" = "Gloves", + "[ITEM_SLOT_EYES]" = "Eyes", + "[ITEM_SLOT_EARS]" = "Ears", + "[ITEM_SLOT_MASK]" = "Mask", + "[ITEM_SLOT_HEAD]" = "Head", + "[ITEM_SLOT_FEET]" = "Feet", + "[ITEM_SLOT_ID]" = "ID", + "[ITEM_SLOT_BELT]" = "Belt", + "[ITEM_SLOT_BACK]" = "Back", + "[ITEM_SLOT_R_POCKET]" = "R pocket", + "[ITEM_SLOT_L_POCKET]" = "L pocket", + "[ITEM_SLOT_SUITSTORE]" = "Suit storage", + "[ITEM_SLOT_HANDCUFF]" = "Handcuffs", + "[ITEM_SLOT_L_HAND]" = "Left hand", + "[ITEM_SLOT_R_HAND]" = "Right hand", +)) //================================================= @@ -329,6 +380,10 @@ GLOBAL_LIST_INIT(slot_str_to_slot, list( . = SLOT_S_STORE if(ITEM_SLOT_HANDCUFF) . = SLOT_HANDCUFFED + if(ITEM_SLOT_L_HAND) + . = SLOT_L_HAND + if(ITEM_SLOT_R_HAND) + . = SLOT_R_HAND //================================================= // bitflags for clothing parts @@ -354,7 +409,7 @@ GLOBAL_LIST_INIT(slot_str_to_slot, list( //================================================= // bitflags for the percentual amount of protection a piece of clothing which covers the body part offers. -// Used with human/proc/get_flags_heat_protection() and human/proc/get_flags_cold_protection() +// Used with human/proc/get_heat_protection_flags() and human/proc/get_cold_protection_flags() // The values here should add up to 1. // Hands and feet have 2.5%, arms and legs 7.5%, each of the torso parts has 15% and the head has 30% #define THERMAL_PROTECTION_HEAD 0.3 diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 79addbd1b663b..3eff083c0eebc 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -24,3 +24,19 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define DF_USE_TAG (1<<0) #define DF_VAR_EDITED (1<<1) #define DF_ISPROCESSING (1<<2) + +// Update flags for [/atom/proc/update_appearance] +/// Update the atom's name +#define UPDATE_NAME (1<<0) +/// Update the atom's desc +#define UPDATE_DESC (1<<1) +/// Update the atom's icon state +#define UPDATE_ICON_STATE (1<<2) +/// Update the atom's overlays +#define UPDATE_OVERLAYS (1<<3) +/// Update the atom's icon +#define UPDATE_ICON (UPDATE_ICON_STATE|UPDATE_OVERLAYS) + +//alternate appearance flags +#define AA_TARGET_SEE_APPEARANCE (1<<0) +#define AA_MATCH_TARGET_OVERLAYS (1<<1) diff --git a/code/_onclick/hud/_defines.dm b/code/__DEFINES/hud.dm similarity index 69% rename from code/_onclick/hud/_defines.dm rename to code/__DEFINES/hud.dm index 08f3ff8af20d4..02d75895e8e11 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/__DEFINES/hud.dm @@ -1,17 +1,24 @@ -/* - These defines specificy screen locations. For more information, see the byond documentation on the screen_loc var. - - The short version: - - Everything is encoded as strings because apparently that's how Byond rolls. - - "1,1" is the bottom left square of the user's screen. This aligns perfectly with the turf grid. - "1:2,3:4" is the square (1,3) with pixel offsets (+2, +4); slightly right and slightly above the turf grid. - Pixel offsets are used so you don't perfectly hide the turf under them, that would be crappy. - - The size of the user's screen is defined by client.view (indirectly by WORLD_VIEW), in our case "15x15". - Therefore, the top right corner (except during admin shenanigans) is at "15,15" -*/ +//HUD styles. Index order defines how they are cycled in F12. +/// Standard hud +#define HUD_STYLE_STANDARD 1 +/// Reduced hud (just hands and intent switcher) +#define HUD_STYLE_REDUCED 2 +/// No hud (for screenshots) +#define HUD_STYLE_NOHUD 3 + +/// Used in show_hud(); Please ensure this is the same as the maximum index. +#define HUD_VERSIONS 3 + +//defines for datum/hud +#define HUD_SL_LOCATOR_COOLDOWN 0.5 SECONDS +#define HUD_SL_LOCATOR_PROCESS_COOLDOWN 10 SECONDS + +// Consider these images/atoms as part of the UI/HUD (apart of the appearance_flags) +/// Used for progress bars and chat messages +#define APPEARANCE_UI_IGNORE_ALPHA (RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR|RESET_ALPHA|PIXEL_SCALE) +/// Used for HUD objects +#define APPEARANCE_UI (RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR|PIXEL_SCALE) +#define APPEARANCE_UI_TRANSFORM (RESET_COLOR|NO_CLIENT_COLOR|RESET_ALPHA|PIXEL_SCALE) //Lower left, persistant menu #define ui_inventory "WEST:6,1:5" @@ -99,6 +106,13 @@ #define ui_ai_camera_light "SOUTH:6,WEST+3" #define ui_ai_announcement "SOUTH:6,WEST+4" #define ui_ai_announcement_help "SOUTH:6,WEST+5" -#define ui_ai_bioscan "SOUTH:6,WEST+6" +#define ui_ai_supply "SOUTH:6,WEST+6" +#define ui_ai_bioscan "SOUTH:6,WEST+7" #define ui_ai_multicam "SOUTH:6,WEST+17" #define ui_ai_add_multicam "SOUTH:6,WEST+18" + +// Plane group keys, used to group swaths of plane masters that need to appear in subwindows +/// The primary group, holds everything on the main window +#define PLANE_GROUP_MAIN "main" +/// A secondary group, used when a client views a generic window +#define PLANE_GROUP_POPUP_WINDOW(screen) "popup-[REF(screen)]" diff --git a/code/__DEFINES/icon_smoothing.dm b/code/__DEFINES/icon_smoothing.dm index 3a53bcb459dae..033235546899a 100644 --- a/code/__DEFINES/icon_smoothing.dm +++ b/code/__DEFINES/icon_smoothing.dm @@ -70,6 +70,7 @@ #define SMOOTH_GROUP_BASALT S_TURF(38) #define SMOOTH_GROUP_RIVER S_TURF(39) #define SMOOTH_GROUP_ICE_WALL S_TURF(40) +#define SMOOTH_GROUP_SAND S_TURF(41) #define MAX_S_TURF SMOOTH_GROUP_ICE_WALL //Always match this value with the one above it. diff --git a/code/__DEFINES/interaction.dm b/code/__DEFINES/interaction.dm index 51961cf4ce3f3..402e383ac8c41 100644 --- a/code/__DEFINES/interaction.dm +++ b/code/__DEFINES/interaction.dm @@ -1,3 +1,5 @@ +// interaction_flags - interactinon flags + #define INTERACT_REQUIRES_DEXTERITY (1<<0) #define INTERACT_CHECK_INCAPACITATED (1<<1) #define INTERACT_UI_INTERACT (1<<2) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index adf6054dc0fe8..f33774348825f 100755 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -10,6 +10,15 @@ #define isweakref(D) (istype(D, /datum/weakref)) +#define isimage(thing) (istype(thing, /image)) + +GLOBAL_VAR_INIT(magic_appearance_detecting_image, new /image) // appearances are awful to detect safely, but this seems to be the best way ~ninjanomnom +#define isappearance(thing) (!isimage(thing) && !ispath(thing) && istype(GLOB.magic_appearance_detecting_image, thing)) + +// The filters list has the same ref type id as a filter, but isnt one and also isnt a list, so we have to check if the thing has Cut() instead +GLOBAL_VAR_INIT(refid_filter, TYPEID(filter(type="angular_blur"))) +#define isfilter(thing) (!hascall(thing, "Cut") && TYPEID(thing) == GLOB.refid_filter) + #define isgenerator(A) (istype(A, /generator)) //Turfs @@ -216,6 +225,8 @@ #define iscrowbar(I) (istype(I, /obj/item/tool/crowbar)) +#define isplasmacutter(I) istype(I, /obj/item/tool/pickaxe/plasmacutter) + #define iscell(I) (istype(I, /obj/item/cell)) #define isfactorypart(I) (istype(I, /obj/item/factory_part)) @@ -240,6 +251,8 @@ #define ismecha(A) (istype(A, /obj/vehicle/sealed/mecha)) +#define isarmoredvehicle(A) (istype(A, /obj/vehicle/sealed/armored)) + #define isorgan(A) (istype(A, /datum/limb)) #define isidcard(A) (istype(A, /obj/item/card/id)) @@ -256,6 +269,8 @@ #define isearthpillar(A) (istype(A, /obj/structure/earth_pillar)) +#define isbarricade(A) (istype(A, /obj/structure/barricade)) + //Assemblies #define isassembly(O) (istype(O, /obj/item/assembly)) diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index 853c42af8de5d..ffa1ee2344d02 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -12,6 +12,7 @@ #define JOB_DISPLAY_ORDER_CORPORATE_LIAISON 8 #define JOB_DISPLAY_ORDER_SYNTHETIC 9 #define JOB_DISPLAY_ORDER_AI 10 +#define JOB_DISPLAY_ORDER_TRANSPORT_OFFICER 11 #define JOB_DISPLAY_ORDER_CHIEF_ENGINEER 13 #define JOB_DISPLAY_ORDER_SHIP_TECH 14 #define JOB_DISPLAY_ORDER_REQUISITIONS_OFFICER 15 @@ -47,8 +48,11 @@ #define EXECUTIVE_OFFICER "Executive Officer" //Currently disabled. #define FIELD_COMMANDER "Field Commander" #define STAFF_OFFICER "Staff Officer" +#define TRANSPORT_OFFICER "Transport Officer" #define PILOT_OFFICER "Pilot Officer" #define MECH_PILOT "Mech Pilot" +#define ASSAULT_CREWMAN "Assault Crewman" +#define TRANSPORT_CREWMAN "Transport Crewman" #define REQUISITIONS_OFFICER "Requisitions Officer" #define CHIEF_SHIP_ENGINEER "Chief Ship Engineer" #define CHIEF_MEDICAL_OFFICER "Chief Medical Officer" @@ -106,15 +110,15 @@ #define ROLE_FALLEN(role) ("Fallen " + ##role) GLOBAL_LIST_EMPTY(jobs_command) -GLOBAL_LIST_INIT(jobs_officers, list(CAPTAIN, FIELD_COMMANDER, STAFF_OFFICER, PILOT_OFFICER, MECH_PILOT, CORPORATE_LIAISON, SYNTHETIC, SILICON_AI, SQUAD_LEADER, CHIEF_MEDICAL_OFFICER, CHIEF_SHIP_ENGINEER, REQUISITIONS_OFFICER)) -GLOBAL_LIST_INIT(jobs_support, list(PILOT_OFFICER, MECH_PILOT, REQUISITIONS_OFFICER, SYNTHETIC, SILICON_AI)) +GLOBAL_LIST_INIT(jobs_officers, list(CAPTAIN, FIELD_COMMANDER, STAFF_OFFICER, PILOT_OFFICER, TRANSPORT_OFFICER, MECH_PILOT, ASSAULT_CREWMAN, TRANSPORT_CREWMAN, CORPORATE_LIAISON, SYNTHETIC, SILICON_AI, SQUAD_LEADER, CHIEF_MEDICAL_OFFICER, CHIEF_SHIP_ENGINEER, REQUISITIONS_OFFICER)) +GLOBAL_LIST_INIT(jobs_support, list(PILOT_OFFICER, TRANSPORT_OFFICER, MECH_PILOT, REQUISITIONS_OFFICER, SYNTHETIC, SILICON_AI)) GLOBAL_LIST_INIT(jobs_engineering, list(CHIEF_SHIP_ENGINEER, SHIP_TECH, SQUAD_ENGINEER)) GLOBAL_LIST_INIT(jobs_requisitions, list(REQUISITIONS_OFFICER)) GLOBAL_LIST_INIT(jobs_medical, list(CHIEF_MEDICAL_OFFICER, MEDICAL_DOCTOR, MEDICAL_RESEARCHER, SQUAD_CORPSMAN)) GLOBAL_LIST_INIT(jobs_marines, list(SQUAD_LEADER, SQUAD_SMARTGUNNER, SQUAD_CORPSMAN, SQUAD_ENGINEER, SQUAD_MARINE)) GLOBAL_LIST_INIT(jobs_som, list(SOM_SQUAD_MARINE, SOM_SQUAD_VETERAN, SOM_SQUAD_ENGINEER, SOM_SQUAD_CORPSMAN, SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER, SOM_STAFF_OFFICER, SOM_COMMANDER)) -GLOBAL_LIST_INIT(jobs_regular_all, list(CAPTAIN, FIELD_COMMANDER, STAFF_OFFICER, PILOT_OFFICER, MECH_PILOT, REQUISITIONS_OFFICER, CHIEF_SHIP_ENGINEER, \ -CHIEF_MEDICAL_OFFICER, SYNTHETIC, SILICON_AI, CORPORATE_LIAISON, SHIP_TECH, \ +GLOBAL_LIST_INIT(jobs_regular_all, list(CAPTAIN, FIELD_COMMANDER, STAFF_OFFICER, PILOT_OFFICER, TRANSPORT_OFFICER, MECH_PILOT, REQUISITIONS_OFFICER, CHIEF_SHIP_ENGINEER, \ +CHIEF_MEDICAL_OFFICER, SYNTHETIC, SILICON_AI, CORPORATE_LIAISON, SHIP_TECH, ASSAULT_CREWMAN, TRANSPORT_CREWMAN, \ MEDICAL_DOCTOR, MEDICAL_RESEARCHER, SQUAD_LEADER, SQUAD_SMARTGUNNER, SQUAD_CORPSMAN, SQUAD_ENGINEER, SQUAD_MARINE, \ SOM_SQUAD_MARINE, SOM_SQUAD_VETERAN, SOM_SQUAD_ENGINEER, SOM_SQUAD_CORPSMAN, SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER, SOM_STAFF_OFFICER, SOM_COMMANDER)) GLOBAL_LIST_INIT(jobs_xenos, list(ROLE_XENOMORPH, ROLE_XENO_QUEEN)) @@ -148,13 +152,12 @@ GLOBAL_LIST_INIT(jobs_fallen_marine, typecacheof(list(/datum/job/fallen/marine), #define XP_REQ_UNSEASONED 600 //RuTGMC Edit 60 #define XP_REQ_INTERMEDIATE 1200 //RuTGMC Edit 180 #define XP_REQ_EXPERIENCED 2400 //RuTGMC Edit 600 -#define XP_REQ_EXPERT 3600 //RuTGMC Edit 900 +#define XP_REQ_EXPERT 3600 //RuTGMC Edit 1500 // how much a job is going to contribute towards burrowed larva. see config for points required to larva. old balance was 1 larva per 3 humans. #define LARVA_POINTS_SHIPSIDE 1 #define LARVA_POINTS_SHIPSIDE_STRONG 1.5 #define LARVA_POINTS_REGULAR 3.25 -#define LARVA_POINTS_STRONG 6 #define SURVIVOR_POINTS_REGULAR 1 @@ -163,6 +166,7 @@ GLOBAL_LIST_INIT(jobs_fallen_marine, typecacheof(list(/datum/job/fallen/marine), #define SMARTIE_POINTS_HIGH 3 #define SYNTH_POINTS_REGULAR 1 #define MECH_POINTS_REGULAR 1 +#define ARMORED_VEHICLE_POINTS_REGULAR 1 #define VETERAN_POINTS_REGULAR 1 diff --git a/code/__DEFINES/keybind.dm b/code/__DEFINES/keybind.dm index 7a371496fe228..2740ea4b8a3c8 100644 --- a/code/__DEFINES/keybind.dm +++ b/code/__DEFINES/keybind.dm @@ -7,6 +7,9 @@ #define CATEGORY_LIVING "LIVING" #define CATEGORY_CARBON "CARBON" #define CATEGORY_HUMAN "HUMAN" +#define CATEGORY_PSIONIC "PSIONIC" +#define CATEGORY_WEAPON "WEAPON" +#define CATEGORY_ITEM "ITEM" #define CATEGORY_MISC "MISC" #define CATEGORY_EMOTE "EMOTE" #define CATEGORY_CUSTOM_EMOTE "CUSTOM_EMOTE" diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 8d62d64dbe75e..2046c2032d72e 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -28,6 +28,8 @@ #define FLOOR_PLANE -5 #define GAME_PLANE -4 +///Slightly above the game plane but does not catch mouse clicks. Useful for certain visuals that should be clicked through, like seethrough trees +#define SEETHROUGH_PLANE -2 #define BLACKNESS_PLANE 0 //To keep from conflicts with SEE_BLACKNESS internals @@ -128,14 +130,15 @@ #define ABOVE_LYING_MOB_LAYER 3.9 //drone (not the xeno) //#define MOB_LAYER 4 -#define RIVER_OVERLAY_LAYER 4.01 + +#define MOB_JUMP_LAYER 4.05 #define ABOVE_MOB_LAYER 4.1 ///for platform corner structures #define ABOVE_MOB_PLATFORM_LAYER 4.11 -#define TANK_BARREL_LAYER 4.2 +#define ABOVE_MOB_PROP_LAYER 4.2 #define TANK_TURRET_LAYER 4.27 @@ -244,3 +247,28 @@ #define SPLASHSCREEN_LAYER 9999 #define SPLASHSCREEN_PLANE 9999 + +// Lummox I swear to god I will find you +// NOTE! You can only ever have planes greater then -10000, if you add too many with large offsets you will brick multiz +// Same can be said for large multiz maps. Tread carefully mappers +#define HIGHEST_EVER_PLANE 10000 +/// The range unique planes can be in +/// Try and keep this to a nice whole number, so it's easy to look at a plane var and know what's going on +#define PLANE_RANGE (HIGHEST_EVER_PLANE - LOWEST_EVER_PLANE) + +///Plane master controller keys +#define PLANE_MASTERS_GAME "plane_masters_game" +#define PLANE_MASTERS_NON_MASTER "plane_masters_non_master" +#define PLANE_MASTERS_COLORBLIND "plane_masters_colorblind" + +//Plane master critical flags +//Describes how different plane masters behave when they are being culled for performance reasons +/// This plane master will not go away if its layer is culled. useful for preserving effects +#define PLANE_CRITICAL_DISPLAY (1<<0) +/// This plane master will temporarially remove relays to all other planes +/// Allows us to retain the effects of a plane while cutting off the changes it makes +#define PLANE_CRITICAL_NO_RELAY (1<<1) +/// We assume this plane master has a render target starting with *, it'll be removed, forcing it to render in place +#define PLANE_CRITICAL_CUT_RENDER (1<<2) + +#define PLANE_CRITICAL_FUCKO_PARALLAX (PLANE_CRITICAL_DISPLAY|PLANE_CRITICAL_NO_RELAY|PLANE_CRITICAL_CUT_RENDER) diff --git a/code/__DEFINES/loadout.dm b/code/__DEFINES/loadout.dm index 98dca0542209e..b864a0e3bc037 100644 --- a/code/__DEFINES/loadout.dm +++ b/code/__DEFINES/loadout.dm @@ -84,12 +84,13 @@ GLOBAL_LIST_INIT(engineer_gear_listed_products, list( /obj/item/storage/box/explosive_mines = list(CAT_ENGSUP, "M20 mine box", 18, "black"), /obj/item/storage/box/explosive_mines/large = list(CAT_ENGSUP, "Large M20 mine box", 35, "black"), /obj/item/minelayer = list(CAT_ENGSUP, "M21 APRDS \"Minelayer\"", 5, "black"), + /obj/item/supply_beacon = list(CAT_ENGSUP, "Supply beacon", 5, "black"), /obj/item/minerupgrade/overclock = list(CAT_ENGSUP, "Mining well overclock upgrade", 4, "black"), /obj/item/minerupgrade/reinforcement = list(CAT_ENGSUP, "Mining well reinforcement upgrade", 4, "black"), /obj/item/minerupgrade/automatic = list(CAT_ENGSUP, "Mining well automation upgrade", 4, "black"), /obj/item/storage/pouch/explosive/razorburn = list(CAT_ENGSUP, "Pack of Razorburn grenades", 11, "orange"), /obj/item/explosive/grenade/chem_grenade/razorburn_large = list(CAT_ENGSUP, "Razorburn canister", 7, "black"), - /obj/item/explosive/grenade/chem_grenade/razorburn_smol = list(CAT_ENGSUP, "Razorburn grenade", 3, "black"), + /obj/item/explosive/grenade/chem_grenade/razorburn_small = list(CAT_ENGSUP, "Razorburn grenade", 3, "black"), /obj/item/mortal_shell/he = list(CAT_ENGSUP, "HE Mortar shell", 2, "black"), /obj/item/mortal_shell/incendiary = list(CAT_ENGSUP, "Incendiary Mortar shell", 2, "black"), /obj/item/mortal_shell/plasmaloss = list(CAT_ENGSUP, "Tanglefoot Mortar shell", 2, "black"), @@ -121,14 +122,14 @@ GLOBAL_LIST_INIT(medic_gear_listed_products, list( /obj/item/reagent_containers/hypospray/advanced/big = list(CAT_MEDSUP, "Big hypospray", 10, "orange"), /obj/item/clothing/glasses/hud/health = list(CAT_MEDSUP, "Medical HUD glasses", 2, "black"), /obj/item/healthanalyzer/gloves = list(CAT_MEDSUP, "Health scanner gloves", 2, "black"), - /obj/item/defibrillator/gloves = list(CAT_MEDSUP, "Advanced medical gloves", 5, "black"), + /obj/item/clothing/gloves/defibrillator = list(CAT_MEDSUP, "Advanced medical gloves", 5, "black"), /obj/effect/vendor_bundle/stretcher = list(CAT_MEDSUP, "Medivac Stretcher", 45, "black"), )) GLOBAL_LIST_INIT(leader_gear_listed_products, list( /obj/effect/vendor_bundle/leader = list(CAT_ESS, "Essential SL Set", 0, "white"), /obj/item/whistle = list(CAT_LEDSUP, "Whistle", 5, "black"), - /obj/item/beacon/supply_beacon = list(CAT_LEDSUP, "Supply beacon", 10, "black"), + /obj/item/supply_beacon = list(CAT_LEDSUP, "Supply beacon", 10, "black"), /obj/item/fulton_extraction_pack = list(CAT_LEDSUP, "Fulton Extraction Pack", 20, "orange"), /obj/item/deployable_camera = list(CAT_LEDSUP, "Deployable Overwatch Camera", 2, "orange"), /obj/item/megaphone = list(CAT_LEDSUP, "Megaphone", 5, "orange"), @@ -139,13 +140,13 @@ GLOBAL_LIST_INIT(leader_gear_listed_products, list( /obj/item/explosive/grenade/smokebomb/cloak = list(CAT_LEDSUP, "Cloak grenade", 7, "black"), /obj/item/explosive/grenade/incendiary = list(CAT_LEDSUP, "M40 HIDP incendiary grenade", 3, "black"), /obj/item/storage/pouch/explosive/razorburn = list(CAT_LEDSUP, "Pack of Razorburn grenades", 24, "orange"), + /obj/item/storage/pouch/explosive/antigas = list(CAT_LEDSUP, "Pack of M40-AG Antigas grenades", 16, "orange"), /obj/item/explosive/grenade/chem_grenade/razorburn_large = list(CAT_LEDSUP, "Razorburn canister", 21, "black"), - /obj/item/explosive/grenade/chem_grenade/razorburn_smol = list(CAT_LEDSUP, "Razorburn grenade", 6, "black"), + /obj/item/explosive/grenade/chem_grenade/razorburn_small = list(CAT_LEDSUP, "Razorburn grenade", 6, "black"), /obj/item/weapon/gun/flamer/big_flamer/marinestandard = list(CAT_LEDSUP, "FL-84 flamethrower", 12, "black"), /obj/item/ammo_magazine/flamer_tank/large = list(CAT_LEDSUP, "Flamethrower tank", 4, "black"), /obj/item/storage/backpack/marine/radiopack = list(CAT_LEDSUP, "Radio Pack", 15, "black"), /obj/item/weapon/gun/revolver/standard_magnum = list(CAT_LEDSUP, "R-76 Magnum", 12, "black"), - /obj/item/storage/firstaid/adv = list(CAT_LEDSUP, "Advanced firstaid kit", 10, "orange"), /obj/item/reagent_containers/hypospray/autoinjector/synaptizine = list(CAT_LEDSUP, "Injector (Synaptizine)", 10, "black"), /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced = list(CAT_LEDSUP, "Injector (Advanced)", 15, "orange"), )) @@ -153,7 +154,7 @@ GLOBAL_LIST_INIT(leader_gear_listed_products, list( GLOBAL_LIST_INIT(commander_gear_listed_products, list( /obj/effect/vendor_bundle/commander = list(CAT_ESS, "Essential FC Set", 0, "white"), /obj/item/whistle = list(CAT_FCSUP, "Whistle", 5, "black"), - /obj/item/beacon/supply_beacon = list(CAT_FCSUP, "Supply beacon", 10, "black"), + /obj/item/supply_beacon = list(CAT_FCSUP, "Supply beacon", 10, "black"), /obj/item/fulton_extraction_pack = list(CAT_FCSUP, "Fulton Extraction Pack", 20, "orange"), /obj/item/deployable_camera = list(CAT_FCSUP, "Deployable Overwatch Camera", 2, "orange"), /obj/item/stack/sandbags_empty/half = list(CAT_FCSUP, "Sandbags x25", SANDBAG_PRICE_IN_GEAR_VENDOR, "black"), @@ -163,20 +164,19 @@ GLOBAL_LIST_INIT(commander_gear_listed_products, list( /obj/item/explosive/grenade/smokebomb/cloak = list(CAT_FCSUP, "Cloak grenade", 7, "black"), /obj/item/explosive/grenade/incendiary = list(CAT_FCSUP, "M40 HIDP incendiary grenade", 3, "black"), /obj/item/storage/pouch/explosive/razorburn = list(CAT_FCSUP, "Pack of Razorburn grenades", 24, "orange"), + /obj/item/storage/pouch/explosive/antigas = list(CAT_FCSUP, "Pack of M40-AG Antigas grenades", 16, "orange"), /obj/item/explosive/grenade/chem_grenade/razorburn_large = list(CAT_FCSUP, "Razorburn canister", 21, "black"), - /obj/item/explosive/grenade/chem_grenade/razorburn_smol = list(CAT_FCSUP, "Razorburn grenade", 6, "black"), + /obj/item/explosive/grenade/chem_grenade/razorburn_small = list(CAT_FCSUP, "Razorburn grenade", 6, "black"), /obj/item/weapon/gun/flamer/big_flamer/marinestandard = list(CAT_FCSUP, "FL-84 flamethrower", 12, "black"), /obj/item/ammo_magazine/flamer_tank/large = list(CAT_FCSUP, "Flamethrower tank", 4, "black"), /obj/item/storage/backpack/marine/radiopack = list(CAT_FCSUP, "Radio Pack", 15, "black"), /obj/item/weapon/gun/revolver/standard_magnum = list(CAT_FCSUP, "R-76 Magnum", 12, "black"), - /obj/item/storage/firstaid/adv = list(CAT_FCSUP, "Advanced firstaid kit", 10, "orange"), /obj/item/reagent_containers/hypospray/autoinjector/synaptizine = list(CAT_FCSUP, "Injector (Synaptizine)", 10, "black"), /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced = list(CAT_FCSUP, "Injector (Advanced)", 15, "orange"), )) //A way to give them everything at once that still works with loadouts would be nice, but barring that make sure that your point calculation is set up so they don't get more than what they're supposed to GLOBAL_LIST_INIT(smartgunner_gear_listed_products, list( - /obj/item/clothing/glasses/night/m56_goggles = list(CAT_ESS, "KLTD Smart Goggles", 0, "white"), /obj/effect/vendor_bundle/smartgunner_pistol = list(CAT_ESS, "SP-13 smart pistol and KLTD Smart Goggles bundle", 0, "white"), /obj/item/ammo_magazine/pistol/standard_pistol/smart_pistol = list(CAT_SGSUP, "SP-13 smart pistol ammo", 2, "black"), /obj/item/weapon/gun/rifle/standard_smartmachinegun = list(CAT_SGSUP, "SG-29 Smart Machine Gun", 29, "orange"), //If a smartgunner buys a SG-29, then they will have 16 points to purchase 4 SG-29 drums @@ -186,6 +186,7 @@ GLOBAL_LIST_INIT(smartgunner_gear_listed_products, list( /obj/item/ammo_magazine/packet/smart_minigun = list(CAT_SGSUP, "SG-85 Ammo Bin", 4, "black"), /obj/item/weapon/gun/rifle/standard_smarttargetrifle = list(CAT_SGSUP, "SG-62 Target Rifle", 25, "orange"), //If a SG buys a SG-62, they'll have 15 points left, should be enough to buy some mags and or extra SR ammo. /obj/item/ammo_magazine/rifle/standard_smarttargetrifle = list(CAT_SGSUP, "SG-62 Target Rifle Magazine", 3, "orange"), + /obj/item/ammo_magazine/packet/smart_targetrifle = list(CAT_SGSUP, "SG-62 Target Rifle Ammo Bin", 4, "black"), /obj/item/ammo_magazine/rifle/standard_spottingrifle = list(CAT_SGSUP, "SG-153 Spotting Rifle Magazine", 2, "black"), /obj/item/ammo_magazine/rifle/standard_spottingrifle/highimpact = list(CAT_SGSUP, "SG-153 Spotting Rifle High Impact Magazine", 2, "black"), /obj/item/ammo_magazine/rifle/standard_spottingrifle/heavyrubber = list(CAT_SGSUP, "SG-153 Spotting Rifle Heavy Rubber Magazine", 2, "black"), @@ -310,7 +311,7 @@ GLOBAL_LIST_INIT(marine_clothes_listed_products, list( /obj/item/storage/pouch/magazine/large = list(CAT_POU, "Magazine pouch", 0, "black"), /obj/item/storage/holster/flarepouch/full = list(CAT_POU, "Flare pouch", 0, "orange"), /obj/item/storage/pouch/medkit/firstaid = list(CAT_POU, "First aid pouch", 0,"orange"), - /obj/item/storage/pouch/medical_injectors/firstaid = list(CAT_POU, "Combat injector pouch", 0,"orange"), + /obj/item/storage/pouch/medical_injectors/standard = list(CAT_POU, "Combat injector pouch", 0,"orange"), /obj/item/storage/pouch/tools/full = list(CAT_POU, "Tool pouch (tools included)", 0,"black"), /obj/item/storage/pouch/grenade/slightlyfull = list(CAT_POU, "Grenade pouch (grenades included)", 0,"black"), /obj/item/storage/pouch/construction/full = list(CAT_POU, "Construction pouch (materials included)", 0,"black"), @@ -390,7 +391,7 @@ GLOBAL_LIST_INIT(engineer_clothes_listed_products, list( /obj/item/storage/pouch/general/medium = list(CAT_POU, "Medium general pouch", 0, "black"), /obj/item/storage/holster/flarepouch/full = list(CAT_POU, "Flare pouch", 0, "black"), /obj/item/storage/pouch/medkit/firstaid = list(CAT_POU, "First aid pouch", 0, "orange"), - /obj/item/storage/pouch/medical_injectors/firstaid = list(CAT_POU, "Combat injector pouch", 0, "orange"), + /obj/item/storage/pouch/medical_injectors/standard = list(CAT_POU, "Combat injector pouch", 0, "orange"), /obj/item/storage/pouch/magazine/pistol/large = list(CAT_POU, "Pistol magazine pouch", 0, "black"), /obj/item/storage/pouch/pistol = list(CAT_POU, "Sidearm pouch", 0, "black"), /obj/effect/vendor_bundle/mimir = list(CAT_HEL, "Mimir Resistance set", 0,"orange"), @@ -436,7 +437,7 @@ GLOBAL_LIST_INIT(medic_clothes_listed_products, list( /obj/item/armor_module/storage/uniform/holster = list(CAT_WEB, "Shoulder handgun holster", 0, "black"), /obj/item/storage/belt/lifesaver/full = list(CAT_BEL, "Lifesaver belt", 0, "orange"), /obj/item/storage/belt/rig/medical = list(CAT_BEL, "Rig belt", 0, "black"), - /obj/item/storage/belt/hypospraybelt = list(CAT_BEL, "Hypospray belt", 0, "black"), + /obj/item/storage/belt/hypospraybelt/full = list(CAT_BEL, "Hypospray belt", 0, "black"), /obj/item/armor_module/module/welding = list(CAT_HEL, "Jaeger welding module", 0, "orange"), /obj/item/armor_module/module/binoculars = list(CAT_HEL, "Jaeger binoculars module", 0, "orange"), /obj/item/armor_module/module/artemis = list(CAT_HEL, "Jaeger Freyr module", 0, "orange"), @@ -507,7 +508,7 @@ GLOBAL_LIST_INIT(smartgunner_clothes_listed_products, list( /obj/item/storage/pouch/magazine/large = list(CAT_POU, "Magazine pouch", 0, "black"), /obj/item/storage/pouch/general/medium = list(CAT_POU, "Medium general pouch", 0, "black"), /obj/item/storage/holster/flarepouch/full = list(CAT_POU, "Flare pouch", 0, "orange"), - /obj/item/storage/pouch/medical_injectors/firstaid = list(CAT_POU, "Combat injector pouch", 0,"orange"), + /obj/item/storage/pouch/medical_injectors/standard = list(CAT_POU, "Combat injector pouch", 0,"orange"), /obj/item/storage/pouch/medkit/firstaid = list(CAT_POU, "First aid pouch", 0, "orange"), /obj/item/storage/pouch/magazine/pistol/large = list(CAT_POU, "Pistol magazine pouch", 0, "black"), /obj/item/storage/pouch/pistol = list(CAT_POU, "Sidearm pouch", 0, "black"), @@ -569,7 +570,7 @@ GLOBAL_LIST_INIT(leader_clothes_listed_products, list( /obj/item/storage/pouch/general/large = list(CAT_POU, "General pouch", 0, "black"), /obj/item/storage/pouch/magazine/large = list(CAT_POU, "Magazine pouch", 0, "black"), /obj/item/storage/holster/flarepouch/full = list(CAT_POU, "Flare pouch", 0, "black"), - /obj/item/storage/pouch/medical_injectors/firstaid = list(CAT_POU, "Combat injector pouch", 0,"orange"), + /obj/item/storage/pouch/medical_injectors/standard = list(CAT_POU, "Combat injector pouch", 0,"orange"), /obj/item/storage/pouch/medkit/firstaid = list(CAT_POU, "First aid pouch", 0, "orange"), /obj/item/storage/pouch/tools/full = list(CAT_POU, "Tool pouch (tools included)", 0, "black"), /obj/item/storage/pouch/grenade/slightlyfull = list(CAT_POU, "Grenade pouch (grenades included)", 0,"black"), @@ -586,7 +587,7 @@ RU TGMC EDIT */ /obj/item/armor_module/module/ballistic_armor = list(CAT_ARMMOD, "Hod Accident Prevention Plating", 0,"black"), /obj/item/armor_module/module/better_shoulder_lamp = list(CAT_ARMMOD, "Baldur light armor module", 0,"black"), /obj/effect/vendor_bundle/vali = list(CAT_ARMMOD, "Vali chemical enhancement set", 0,"black"), - /obj/item/armor_module/module/eshield = list(CAT_ARMMOD, "Arrowhead Energy Shield System", 0 , "black"), + /obj/item/armor_module/module/eshield = list(CAT_ARMMOD, "Svallin Energy Shield System", 0 , "black"), /obj/item/clothing/mask/gas = list(CAT_MAS, "Transparent gas mask", 0,"black"), /obj/item/clothing/mask/gas/tactical = list(CAT_MAS, "Tactical gas mask", 0,"black"), /obj/item/clothing/mask/gas/tactical/coif = list(CAT_MAS, "Tactical coifed gas mask", 0,"black"), @@ -623,27 +624,27 @@ GLOBAL_LIST_INIT(synthetic_clothes_listed_products, list( /obj/item/clothing/under/waiter = list(CAT_STD, "Waiter's uniform", 0, "black"), /obj/item/clothing/suit/modular/xenonauten/pilot = list(CAT_SMR, "M70 flak jacket", 0, "synth-rcmarmstorage"), /obj/item/clothing/suit/armor/bulletproof = list(CAT_SMR, "Bulletproof Vest", 0, "synth-armor"), - /obj/item/clothing/suit/surgical = list(CAT_SMR, "Surgical apron", 0, "synth-cosmetic"), - /obj/item/clothing/suit/storage/labcoat = list(CAT_SMR, "Labcoat", 0, "synth-cosmetic"), - /obj/item/clothing/suit/storage/labcoat/researcher = list(CAT_SMR, "Researcher's labcoat", 0, "synth-cosmetic"), - /obj/item/clothing/suit/storage/hazardvest = list(CAT_SMR, "Orange reflective safety vest", 0, "synth-cosmetic"), - /obj/item/clothing/suit/storage/hazardvest/lime = list(CAT_SMR, "Lime reflective safety vest", 0, "synth-cosmetic"), - /obj/item/clothing/suit/storage/hazardvest/blue = list(CAT_SMR, "Blue reflective safety vest", 0, "synth-cosmetic"), - /obj/item/clothing/suit/storage/CMB = list(CAT_SMR, "CMB Jacket", 0, "synth-cosmetic"), - /obj/item/clothing/suit/storage/RO = list(CAT_SMR, "TGMC RO Jacket", 0, "synth-cosmetic"), - /obj/item/clothing/suit/storage/lawyer/bluejacket = list(CAT_SMR, "Blue Jacket", 0, "synth-cosmetic"), - /obj/item/clothing/suit/storage/lawyer/purpjacket = list(CAT_SMR, "Purple Jacket", 0, "synth-cosmetic"), - /obj/item/clothing/suit/storage/snow_suit = list(CAT_SMR, "Snowsuit", 0, "synth-cosmetic"), - /obj/item/clothing/suit/chef = list(CAT_SMR, "Chef's apron", 0, "synth-cosmetic"), + /obj/item/clothing/suit/surgical = list(CAT_SMR, "Surgical apron", 0, "synth-storage"), + /obj/item/clothing/suit/storage/labcoat = list(CAT_SMR, "Labcoat", 0, "synth-storage"), + /obj/item/clothing/suit/storage/labcoat/researcher = list(CAT_SMR, "Researcher's labcoat", 0, "synth-storage"), + /obj/item/clothing/suit/storage/hazardvest = list(CAT_SMR, "Orange reflective safety vest", 0, "synth-storage"), + /obj/item/clothing/suit/storage/hazardvest/lime = list(CAT_SMR, "Lime reflective safety vest", 0, "synth-storage"), + /obj/item/clothing/suit/storage/hazardvest/blue = list(CAT_SMR, "Blue reflective safety vest", 0, "synth-storage"), + /obj/item/clothing/suit/storage/CMB = list(CAT_SMR, "CMB Jacket", 0, "synth-storage"), + /obj/item/clothing/suit/storage/RO = list(CAT_SMR, "TGMC RO Jacket", 0, "synth-storage"), + /obj/item/clothing/suit/storage/lawyer/bluejacket = list(CAT_SMR, "Blue Jacket", 0, "synth-storage"), + /obj/item/clothing/suit/storage/lawyer/purpjacket = list(CAT_SMR, "Purple Jacket", 0, "synth-storage"), + /obj/item/clothing/suit/storage/snow_suit = list(CAT_SMR, "Snowsuit", 0, "synth-storage"), + /obj/item/clothing/suit/storage/chef = list(CAT_SMR, "Chef's apron", 0, "synth-storage"), + /obj/item/clothing/suit/storage/wizrobe/gentlecoat = list(CAT_SMR, "Gentleman's Coat", 0, "synth-storage"), + /obj/item/clothing/suit/storage/bomber = list(CAT_SMR, "Bomber Jacket", 0, "synth-storage"), + /obj/item/clothing/suit/storage/security/formal/senior_officer = list(CAT_SMR, "Navy HoS Jacket", 0, "synth-storage"), + /obj/item/clothing/suit/storage/chef/classic = list(CAT_SMR, "Classic Chef vest", 0, "synth-storage"), + /obj/item/clothing/suit/storage/apron = list(CAT_SMR, "Apron", 0, "synth-storage"), + /obj/item/clothing/suit/storage/apron/overalls = list(CAT_SMR, "Overalls", 0, "synth-storage"), /obj/item/clothing/suit/wcoat = list(CAT_SMR, "Waistcoat", 0, "synth-cosmetic"), - /obj/item/clothing/suit/wizrobe/gentlecoat = list(CAT_SMR, "Gentleman's Coat", 0, "synth-cosmetic"), - /obj/item/clothing/suit/bomber = list(CAT_SMR, "Bomber Jacket", 0, "synth-cosmetic"), - /obj/item/clothing/suit/security/formal/senior_officer = list(CAT_SMR, "Navy HoS Jacket", 0, "synth-cosmetic"), - /obj/item/clothing/suit/chef/classic = list(CAT_SMR, "Classic Chef vest", 0, "synth-cosmetic"), /obj/item/clothing/suit/ianshirt = list(CAT_SMR, "Ian Shirt", 0, "synth-cosmetic"), /obj/item/clothing/suit/suspenders = list(CAT_SMR, "Suspenders", 0, "synth-cosmetic"), - /obj/item/clothing/suit/apron = list(CAT_SMR, "Apron", 0, "synth-cosmetic"), - /obj/item/clothing/suit/apron/overalls = list(CAT_SMR, "Overalls", 0, "synth-cosmetic"), /obj/item/storage/backpack/industrial = list(CAT_BAK, "Industrial backpack", 0, "black"), /obj/item/storage/backpack/marine/corpsman = list(CAT_BAK, "TGMC corpsman backpack", 0, "black"), /obj/item/storage/backpack/marine/tech = list(CAT_BAK, "TGMC technician backpack", 0, "black"), @@ -665,7 +666,7 @@ GLOBAL_LIST_INIT(synthetic_clothes_listed_products, list( /obj/item/clothing/gloves/white = list(CAT_GLO, "White gloves", 0, "black"), /obj/item/storage/belt/lifesaver/full = list(CAT_BEL, "Lifesaver belt", 0, "orange", "synth-attachable"), /obj/item/storage/belt/rig/medical = list(CAT_BEL, "Rig belt", 0, "black"), - /obj/item/storage/belt/hypospraybelt = list(CAT_BEL, "Hypospray belt", 0, "black"), + /obj/item/storage/belt/hypospraybelt/full = list(CAT_BEL, "Hypospray belt", 0, "black"), /obj/item/clothing/shoes/marine = list(CAT_SHO, "Marine combat boots", 0, "synth-rcmarmor"), /obj/item/clothing/shoes/white = list(CAT_SHO, "White shoes", 0, "synth-armor"), /obj/item/clothing/shoes/brown = list(CAT_SHO, "Brown shoes", 0, "synth-armor"), @@ -722,7 +723,7 @@ GLOBAL_LIST_INIT(job_specific_clothes_vendor, list( GLOBAL_LIST_INIT(loadout_role_essential_set, list( SQUAD_ENGINEER = list ( /obj/item/explosive/plastique = 1, - /obj/item/explosive/grenade/chem_grenade/razorburn_smol = 1, + /obj/item/explosive/grenade/chem_grenade/razorburn_small = 1, /obj/item/clothing/gloves/marine/insulated = 1, /obj/item/cell/high = 1, /obj/item/lightreplacer = 1, @@ -738,16 +739,18 @@ GLOBAL_LIST_INIT(loadout_role_essential_set, list( /obj/item/roller = 1, /obj/item/tweezers = 1, /obj/item/reagent_containers/hypospray/advanced/oxycodone = 1, - /obj/item/storage/firstaid/adv = 1, /obj/item/clothing/glasses/hud/health = 1, /obj/item/clothing/under/marine/corpsman = 1, ), SQUAD_SMARTGUNNER = list( /obj/item/clothing/glasses/night/m56_goggles = 1, + /obj/item/storage/holster/belt/pistol/smart_pistol = 1, + /obj/item/weapon/gun/pistol/smart_pistol = 1, + /obj/item/ammo_magazine/pistol/standard_pistol/smart_pistol = 2, ), SQUAD_LEADER = list( /obj/item/explosive/plastique = 1, - /obj/item/beacon/supply_beacon = 2, + /obj/item/supply_beacon = 2, /obj/item/whistle = 1, /obj/item/binoculars/tactical = 1, /obj/item/pinpointer = 1, diff --git a/code/__DEFINES/loadout_variants.dm b/code/__DEFINES/loadout_variants.dm index 4bd8f183046c7..00d6abdcf0771 100644 --- a/code/__DEFINES/loadout_variants.dm +++ b/code/__DEFINES/loadout_variants.dm @@ -18,17 +18,11 @@ #define CAPE_FULL "cape_full" #define CAPE_BACK "cape_back" #define CAPE_COVER "cape_cover" -#define CAPE_COVER_ALT "cape_cover_alt" -#define CAPE_OVERLORD "cape_overlord" -#define CAPE_OVERLORD_ALT "cape_overlord_alt" -#define CAPE_OVERLORD_ALT_2 "cape_overlord_alt_2" #define CAPE_SHOAL "cape_shoal" #define CAPE_SHOAL_BACK "cape_shoal_back" #define CAPE_SHOAL_ALT "cape_shoal_alt" -#define CAPE_STAR "cape_star" #define CAPE_RAPIER_R "cape_rapier_r" #define CAPE_RAPIER_L "cape_rapier_l" -#define CAPE_JACKET "cape_jacket" #define CAPE_KAMA "cape_kama" #define CAPE_KILT "cape_kilt" #define CAPE_KILT_ALT "cape_kilt_alt" @@ -47,6 +41,13 @@ #define MARK_THREE_WEBBING "mark_three_webbing" #define MARK_ONE_WEBBING "mark_one_webbing" +// Ballistic Vest Variants +#define BALLISTIC_VEST_URBAN "ballistic_vest_urban" +#define BALLISTIC_VEST_DESERT "ballistic_vest_desert" +#define BALLISTIC_VEST_JUNGLE "ballistic_vest_jungle" +#define BALLISTIC_VEST_SNOW "ballistic_vest_snow" + +// Each key AND value HAS to be unique. /* RUTGMC REDEFINITION ///saved loadout key = icon_state, AGAIN DO NOT EDIT THE KEYS IT WILL BREAK LOADOUTS GLOBAL_LIST_INIT(loadout_variant_keys, list( @@ -69,16 +70,11 @@ GLOBAL_LIST_INIT(loadout_variant_keys, list( CAPE_BACK = "back", CAPE_COVER = "cover", CAPE_COVER_ALT = "cover (alt)", - CAPE_OVERLORD = "overlord", - CAPE_OVERLORD_ALT = "overlord (alt 1)", - CAPE_OVERLORD_ALT_2 = "overlord (alt 2)", CAPE_SHOAL = "shoal", CAPE_SHOAL_BACK = "shoal (back)", CAPE_SHOAL_ALT = "shoal (alt)", - CAPE_STAR = "star", CAPE_RAPIER_R = "rapier (right)", CAPE_RAPIER_L = "rapier (left)", - CAPE_JACKET = "jacket", CAPE_KAMA = "kama", CAPE_KILT = "kilt", CAPE_KILT_ALT = "kilt (alt)", @@ -91,5 +87,9 @@ GLOBAL_LIST_INIT(loadout_variant_keys, list( MARK_ONE_WEBBING = "webbing", FOUR_EYE_FACEPLATE = "Four Eye", FOUR_EYE_FACEPLATE_VISOR = "Four Eye", + BALLISTIC_VEST_URBAN = "urban", + BALLISTIC_VEST_JUNGLE = "jungle", + BALLISTIC_VEST_DESERT = "desert", + BALLISTIC_VEST_SNOW = "snow", )) */ diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index 574fc8f03b125..e7fc83bf0b083 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -50,37 +50,6 @@ #define NSDIRFLIP(d) (d^(NORTH|SOUTH)) #define EWDIRFLIP(d) (d^(EAST|WEST)) -//update_state -#define UPSTATE_OPENED1 (1<<0) -#define UPSTATE_OPENED2 (1<<1) -#define UPSTATE_MAINT (1<<2) -#define UPSTATE_BROKE (1<<3) -#define UPSTATE_WIREEXP (1<<4) -#define UPSTATE_ALLGOOD (1<<5) - -//update_overlay -#define APC_UPOVERLAY_CHARGEING0 (1<<0) -#define APC_UPOVERLAY_CHARGEING1 (1<<1) -#define APC_UPOVERLAY_CHARGEING2 (1<<2) -#define APC_UPOVERLAY_EQUIPMENT0 (1<<3) -#define APC_UPOVERLAY_EQUIPMENT1 (1<<4) -#define APC_UPOVERLAY_EQUIPMENT2 (1<<5) -#define APC_UPOVERLAY_LIGHTING0 (1<<6) -#define APC_UPOVERLAY_LIGHTING1 (1<<7) -#define APC_UPOVERLAY_LIGHTING2 (1<<8) -#define APC_UPOVERLAY_ENVIRON0 (1<<9) -#define APC_UPOVERLAY_ENVIRON1 (1<<10) -#define APC_UPOVERLAY_ENVIRON2 (1<<11) -#define APC_UPOVERLAY_LOCKED (1<<12) -#define APC_UPOVERLAY_OPERATING (1<<13) -#define APC_UPOVERLAY_CELL_IN (1<<14) -#define APC_UPOVERLAY_BLUESCREEN (1<<15) - -#define APC_WIRE_IDSCAN (1<<0) -#define APC_WIRE_MAIN_POWER1 (1<<1) -#define APC_WIRE_MAIN_POWER2 (1<<2) -#define APC_WIRE_AI_CONTROL (1<<3) - #define MACHINE_NOT_ELECTRIFIED 0 #define MACHINE_ELECTRIFIED_PERMANENT -1 #define MACHINE_DEFAULT_ELECTRIFY_TIME 30 diff --git a/code/__DEFINES/mecha.dm b/code/__DEFINES/mecha.dm index f2195ed8b59ff..98268209f26d4 100644 --- a/code/__DEFINES/mecha.dm +++ b/code/__DEFINES/mecha.dm @@ -97,6 +97,8 @@ ///degree of cone in front of which mech is allowed to fire at #define MECH_FIRE_CONE_ALLOWED 120 +///degree of cone in front of which armored vehicles are allowed to fire at +#define ARMORED_FIRE_CONE_ALLOWED 110 /** * greyscale mech shenanigans */ diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index cf1d14383f57b..5b0b8efe44ef3 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -13,11 +13,6 @@ //Force the config directory to be something other than "config" #define OVERRIDE_CONFIG_DIRECTORY_PARAMETER "config-directory" -// Consider these images/atoms as part of the UI/HUD -#define APPEARANCE_UI_IGNORE_ALPHA (RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR|RESET_ALPHA|PIXEL_SCALE) -#define APPEARANCE_UI (RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR|PIXEL_SCALE) -#define APPEARANCE_UI_TRANSFORM (RESET_COLOR|NO_CLIENT_COLOR|RESET_ALPHA|PIXEL_SCALE) - //dirt type for each turf types. #define NO_DIRT 0 #define DIRT_TYPE_GROUND 1 @@ -25,6 +20,11 @@ #define DIRT_TYPE_SNOW 3 #define DIRT_TYPE_LAVALAND 4 +///How many variations of bullethole patterns there are +#define BULLETHOLE_STATES 10 +///Maximum possible bullet holes in a closed turf +#define BULLETHOLE_MAX 24 + //wet floors #define FLOOR_WET_WATER 1 @@ -35,12 +35,6 @@ #define SHOES_TIED 1 #define SHOES_KNOTTED 2 -//subtypesof(), typesof() without the parent path -#define subtypesof(typepath) ( typesof(typepath) - typepath ) - -/// Takes a datum as input, returns its ref string -#define text_ref(datum) ref(datum) - #define RESIZE_DEFAULT_SIZE 1 GLOBAL_VAR_INIT(global_unique_id, 1) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index d1fad63f8cd46..a237ae51e4cb2 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -51,7 +51,6 @@ #define ALIEN_SELECT_AFK_BUFFER 1 // How many minutes that a person can be AFK before not being allowed to be an alien. //Life variables -#define CARBON_BREATH_DELAY 2 // The interval in life ticks between breathe() ///The amount of damage you'll take per tick when you can't breath. Default value is 1 #define CARBON_CRIT_MAX_OXYLOSS (round(SSmobs.wait/5, 0.1)) @@ -378,17 +377,6 @@ GLOBAL_LIST_INIT(xenoupgradetiers, list(XENO_UPGRADE_BASETYPE, XENO_UPGRADE_INVA #define TASTE_DULL 30 //anything below 30% #define TASTE_NUMB 101 //no taste - -//defins for datum/hud - -#define HUD_STYLE_STANDARD 1 -#define HUD_STYLE_REDUCED 2 -#define HUD_STYLE_NOHUD 3 -#define HUD_VERSIONS 3 -#define HUD_SL_LOCATOR_COOLDOWN 0.5 SECONDS -#define HUD_SL_LOCATOR_PROCESS_COOLDOWN 10 SECONDS - - //Blood levels #define BLOOD_VOLUME_MAXIMUM 600 #define BLOOD_VOLUME_NORMAL 560 @@ -397,18 +385,13 @@ GLOBAL_LIST_INIT(xenoupgradetiers, list(XENO_UPGRADE_BASETYPE, XENO_UPGRADE_INVA #define BLOOD_VOLUME_BAD 224 #define BLOOD_VOLUME_SURVIVE 122 -#define HUMAN_MAX_PALENESS 30 //this is added to human skin tone to get value of pale_max variable - - -// Human Overlay Indexes +// Overlay Indexes /* RU TGMC EDIT -#define LASER_LAYER 29 //For sniper targeting laser -#define MOTH_WINGS_LAYER 28 -#define MUTATIONS_LAYER 27 -#define DAMAGE_LAYER 26 +#define WOUND_LAYER 27 +#define MOTH_WINGS_LAYER 26 +#define DAMAGE_LAYER 25 RU TGMC EDIT */ -#define UNIFORM_LAYER 25 -#define TAIL_LAYER 24 //bs12 specific. this hack is probably gonna come back to haunt me +#define UNIFORM_LAYER 24 #define ID_LAYER 23 #define SHOES_LAYER 22 #define GLOVES_LAYER 21 @@ -430,17 +413,16 @@ RU TGMC EDIT */ #define R_HAND_LAYER 5 #define BURST_LAYER 4 //Chestburst overlay #define OVERHEALTH_SHIELD_LAYER 3 -#define TARGETED_LAYER 2 //for target sprites when held at gun point, and holo cards. -#define FIRE_LAYER 1 //If you're on fire +#define FIRE_LAYER 2 //If you're on fire /* RU TGMC EDIT -#define TOTAL_LAYERS 29 +#define LASER_LAYER 1 //For sniper targeting laser + +#define TOTAL_LAYERS 27 RU TGMC EDIT */ #define MOTH_WINGS_BEHIND_LAYER 1 #define TOTAL_UNDERLAYS 1 -#define ANTI_CHAINSTUN_TICKS 2 - #define BASE_GRAB_SLOWDOWN 3 //Slowdown called by /mob/setGrabState(newstate) in mob.dm when grabbing a target aggressively. ///Stamina exhaustion @@ -459,6 +441,15 @@ RU TGMC EDIT */ //Xeno flags ///Xeno is currently performing a leap/dash attack #define XENO_LEAPING (1<<0) +///Hive leader +#define XENO_LEADER (1<<1) +///Zoomed out +#define XENO_ZOOMED (1<<2) +///mobhud on +#define XENO_MOBHUD (1<<3) +///rouny mode +#define XENO_ROUNY (1<<4) + #define XENO_DEFAULT_VENT_ENTER_TIME 4.5 SECONDS //Standard time for a xeno to enter a vent. #define XENO_DEFAULT_VENT_EXIT_TIME 2 SECONDS //Standard time for a xeno to exit a vent. @@ -494,6 +485,11 @@ RU TGMC EDIT */ #define XENO_SILO_DAMAGE_POINTER_DURATION 10 SECONDS //How long the alert directional pointer lasts when silos are damaged #define XENO_SILO_DETECTION_COOLDOWN 1 MINUTES #define XENO_SILO_DETECTION_RANGE 10//How far silos can detect hostiles +#define XENO_GARGOYLE_DETECTION_COOLDOWN 30 SECONDS +#define XENO_GARGOYLE_DETECTION_RANGE 10//How far gargoyles can detect hostiles +#define XENO_RESTING_COOLDOWN 2 SECONDS +#define XENO_UNRESTING_COOLDOWN 0.5 SECONDS + #define XENO_HIVEMIND_DETECTION_RANGE 10 //How far out (in tiles) can the hivemind detect hostiles #define XENO_HIVEMIND_DETECTION_COOLDOWN 1 MINUTES @@ -607,11 +603,8 @@ RU TGMC EDIT */ #define GORGER_DRAIN_HEAL 40 // overheal gained each time the target is drained #define GORGER_DRAIN_BLOOD_DRAIN 20 // amount of plasma drained when feeding on something #define GORGER_TRANSFUSION_HEAL 0.3 // in % -#define GORGER_REJUVENATE_DURATION -1 -#define GORGER_REJUVENATE_COST 20 -#define GORGER_REJUVENATE_SLOWDOWN 6 -#define GORGER_REJUVENATE_HEAL 0.05 //in % -#define GORGER_REJUVENATE_THRESHOLD 0.10 //in % +#define GORGER_OPPOSE_COST 100 +#define GORGER_OPPOSE_HEAL 0.2 // in % #define GORGER_PSYCHIC_LINK_CHANNEL 10 SECONDS #define GORGER_PSYCHIC_LINK_RANGE 15 #define GORGER_PSYCHIC_LINK_REDIRECT 0.5 //in % @@ -857,3 +850,12 @@ GLOBAL_LIST_INIT(human_body_parts, list(BODY_ZONE_HEAD, #define SPECIES_HUMAN "species_human" ///Combat robot species #define SPECIES_COMBAT_ROBOT "species_combat_robot" + +///Nextmove delay after performing an interaction with a grab on something +#define GRAB_SLAM_DELAY 0.7 SECONDS +///Default damage for slamming a mob against an object +#define BASE_OBJ_SLAM_DAMAGE 10 +///Default damage for slamming a mob against a wall +#define BASE_WALL_SLAM_DAMAGE 15 +///Default damage for slamming a mob against another mob +#define BASE_MOB_SLAM_DAMAGE 8 diff --git a/code/__DEFINES/mode.dm b/code/__DEFINES/mode.dm index 01bf039d89bff..35d1e5ac51c3b 100644 --- a/code/__DEFINES/mode.dm +++ b/code/__DEFINES/mode.dm @@ -49,6 +49,7 @@ #define MODE_SILOS_SPAWN_MINIONS (1<<13) #define MODE_ALLOW_XENO_QUICKBUILD (1<<14) #define MODE_DISALLOW_RAILGUN (1<<15) +#define MODE_FORCE_CUSTOMSQUAD_UI (1<<16) #define MODE_INFESTATION_X_MAJOR "Xenomorph Major Victory" #define MODE_INFESTATION_M_MAJOR "Marine Major Victory" diff --git a/code/__DEFINES/modular_armor.dm b/code/__DEFINES/modular_armor.dm index b2eb9e05f3a4a..1c634039bf86e 100644 --- a/code/__DEFINES/modular_armor.dm +++ b/code/__DEFINES/modular_armor.dm @@ -40,7 +40,7 @@ //Pink #define ARMOR_PALETTE_PEARL_PINK "#673c3d#9b6b6b#b08a8b#d5ccc3#efe6dc" -#define ARMOR_PALETTE_MOUNTBATTEN "#3b2f53#5a456e#877499#D0ABD6#F2D2E" +#define ARMOR_PALETTE_MOUNTBATTEN "#3b2f53#5a456e#877499#D0ABD6#f0d5e8" #define ARMOR_PALETTE_CORAL_PINK "#150e10#402139#59184c#972b78#e46c92" #define ARMOR_PALETTE_AZALEA_PINK "#230911#661A31#A23354#CC5073#E67395" diff --git a/code/__DEFINES/monitor.dm b/code/__DEFINES/monitor.dm index e57d7ca622679..b0297bb936c89 100644 --- a/code/__DEFINES/monitor.dm +++ b/code/__DEFINES/monitor.dm @@ -52,7 +52,7 @@ GLOBAL_VAR_INIT(xeno_stat_multiplicator_buff, 1) ///50% is the maximum buff that xeno can receive -#define MAXIMUM_XENO_BUFF_POSSIBLE 1.5 +#define MAXIMUM_XENO_BUFF_POSSIBLE 1.5 #define MAX_SPAWNABLE_MOB_PER_PLAYER 0.15 //So for 50 players, each spawner can generate 7 mobs -#define SPAWN_RATE_PER_PLAYER 36 //For each player, the time between two consecutive spawns is reduced by 36 ticks. So for 35 players, it's one mob every minute +#define SPAWN_RATE_PER_PLAYER 72 //For each player, the time between two consecutive spawns is reduced by 72ticks. So for 35 players, it's one mob every 30 seconds diff --git a/code/__DEFINES/move_force.dm b/code/__DEFINES/move_force.dm index 1f8819b0c8577..75eef6fd77284 100644 --- a/code/__DEFINES/move_force.dm +++ b/code/__DEFINES/move_force.dm @@ -11,6 +11,7 @@ #define MOVE_FORCE_THROW_RATIO 1 //Same force throw as resist to throw objects #define MOVE_FORCE_OVERPOWERING (MOVE_FORCE_DEFAULT * MOVE_FORCE_CRUSH_RATIO * 10) +#define MOVE_FORCE_EXCEPTIONALLY_STRONG (MOVE_FORCE_DEFAULT * MOVE_FORCE_CRUSH_RATIO * 5) #define MOVE_FORCE_EXTREMELY_STRONG (MOVE_FORCE_DEFAULT * MOVE_FORCE_CRUSH_RATIO * 3) #define MOVE_FORCE_VERY_STRONG ((MOVE_FORCE_DEFAULT * MOVE_FORCE_CRUSH_RATIO) - 1) #define MOVE_FORCE_STRONG (MOVE_FORCE_DEFAULT * 2) diff --git a/code/__DEFINES/movespeed_modification.dm b/code/__DEFINES/movespeed_modification.dm index 08df1f003d8ca..c677922ff9d8e 100644 --- a/code/__DEFINES/movespeed_modification.dm +++ b/code/__DEFINES/movespeed_modification.dm @@ -55,5 +55,7 @@ #define MOVESPEED_ID_CHEM_CONNECT "CHEM_CONNECT" #define MOVESPEED_ID_VALI_BOOST "VALI_BOOST" +#define MOVESPEED_ID_MINDMELD "MINDMELD" + //Specific slowdown bitfield #define SLOWDOWN_IMPEDE_JETPACK (1<<0) //Reduce the range of jetpack diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm index a6c1d7acca603..1379d105a3188 100644 --- a/code/__DEFINES/obj_flags.dm +++ b/code/__DEFINES/obj_flags.dm @@ -1,10 +1,15 @@ // Flags for the obj_flags var on /obj -#define IN_USE (1<<0) // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING! -#define CAN_BE_HIT (1<<1) //can this be bludgeoned by items? -#define PROJ_IGNORE_DENSITY (1<<2) // If non-dense structures can still get hit by projectiles -#define LIGHT_CAN_BE_SHUT (1<<3) // Is sensible to nightfall ability, and its light will be turned off -#define AUTOBALANCE_CHECK (1<<4) //If this item is used for autobalance calculations or excluded, such as valhalla items +///If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING! +#define IN_USE (1<<0) +///an this be bludgeoned by items? +#define CAN_BE_HIT (1<<1) +///If non-dense structures can still get hit by projectiles +#define PROJ_IGNORE_DENSITY (1<<2) +///Is sensible to nightfall ability, and its light will be turned off +#define LIGHT_CAN_BE_SHUT (1<<3) +///Admin possession yes/no +#define DANGEROUS_POSSESSION (1<<4) //Fire and Acid stuff, for resistance_flags #define INDESTRUCTIBLE (1<<0) //doesn't take damage @@ -21,5 +26,9 @@ #define RESIST_ALL (UNACIDABLE|INDESTRUCTIBLE|PLASMACUTTER_IMMUNE) //projectile flags -#define PROJECTILE_FROZEN (1<<0) //indicates a projectile is no longer moving +///Indicates a projectile is no longer moving +#define PROJECTILE_FROZEN (1<<0) +///Indicates we've hit something #define PROJECTILE_HIT (1<<1) +///This projectile will ignore non targetted mobs +#define PROJECTILE_PRECISE_TARGET (1<<2) diff --git a/code/__DEFINES/overlays.dm b/code/__DEFINES/overlays.dm index a4488cea61936..b95a460168f19 100644 --- a/code/__DEFINES/overlays.dm +++ b/code/__DEFINES/overlays.dm @@ -15,7 +15,6 @@ /// Performs any operations that ought to run after an appearance change #define POST_OVERLAY_CHANGE(changed_on) \ - /* TODO port alternate appearances already if(alternate_appearances) { \ for(var/I in changed_on.alternate_appearances){\ var/datum/atom_hud/alternate_appearance/AA = changed_on.alternate_appearances[I];\ @@ -24,4 +23,3 @@ }\ } \ } - */ diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index c676b30fa471f..0ccc24dabb6e5 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -84,6 +84,7 @@ #define RADIAL_STACKS (1<<2) #define AUTO_INTERACT_DEPLOYABLES (1<<3) #define RADIAL_LASERGUNS (1<<4) +#define DIRECTIONAL_ATTACKS (1<<5) #define PARALLAX_INSANE -1 //for show offs #define PARALLAX_HIGH 0 //default. @@ -105,7 +106,7 @@ #define SCALING_METHOD_DISTORT "distort" #define SCALING_METHOD_BLUR "blur" -#define TOGGLES_GAMEPLAY_DEFAULT (RADIAL_MEDICAL|MIDDLESHIFTCLICKING|RADIAL_STACKS|AUTO_INTERACT_DEPLOYABLES|RADIAL_LASERGUNS) +#define TOGGLES_GAMEPLAY_DEFAULT (RADIAL_MEDICAL|MIDDLESHIFTCLICKING|RADIAL_STACKS|AUTO_INTERACT_DEPLOYABLES|RADIAL_LASERGUNS|DIRECTIONAL_ATTACKS) #define CHARACTER_CUSTOMIZATION 1 /* RU TGMC EDIT diff --git a/code/__DEFINES/rust_g.dm b/code/__DEFINES/rust_g.dm index 2aed8a38c0e56..9136b98efa85e 100644 --- a/code/__DEFINES/rust_g.dm +++ b/code/__DEFINES/rust_g.dm @@ -118,7 +118,7 @@ #define rustg_dmi_icon_states(fname) RUSTG_CALL(RUST_G, "dmi_icon_states")(fname) #define rustg_file_read(fname) RUSTG_CALL(RUST_G, "file_read")(fname) -#define rustg_file_exists(fname) RUSTG_CALL(RUST_G, "file_exists")(fname) +#define rustg_file_exists(fname) (RUSTG_CALL(RUST_G, "file_exists")(fname) == "true") #define rustg_file_write(text, fname) RUSTG_CALL(RUST_G, "file_write")(text, fname) #define rustg_file_append(text, fname) RUSTG_CALL(RUST_G, "file_append")(text, fname) #define rustg_file_get_line_count(fname) text2num(RUSTG_CALL(RUST_G, "file_get_line_count")(fname)) @@ -129,7 +129,13 @@ #define text2file(text, fname) rustg_file_append(text, "[fname]") #endif +/// Returns the git hash of the given revision, ex. "HEAD". #define rustg_git_revparse(rev) RUSTG_CALL(RUST_G, "rg_git_revparse")(rev) + +/** + * Returns the date of the given revision in the format YYYY-MM-DD. + * Returns null if the revision is invalid. + */ #define rustg_git_commit_date(rev) RUSTG_CALL(RUST_G, "rg_git_commit_date")(rev) #define RUSTG_HTTP_METHOD_GET "get" @@ -179,7 +185,7 @@ /**² * Remove every link to the node with unique_id. Replace that node by null */ -#define rustg_remove_node_astart(unique_id) RUSTG_CALL(RUST_G, "remove_node_astar")(unique_id) +#define rustg_remove_node_astar(unique_id) RUSTG_CALL(RUST_G, "remove_node_astar")(unique_id) /** * Compute the shortest path between start_node and goal_node using A*. Heuristic used is simple geometric distance diff --git a/code/__DEFINES/skills.dm b/code/__DEFINES/skills.dm index 81941381c0679..ea5dcd37c2513 100644 --- a/code/__DEFINES/skills.dm +++ b/code/__DEFINES/skills.dm @@ -71,16 +71,16 @@ #define SKILL_CONSTRUCTION_METAL 1 //metal barricade construction (CT) #define SKILL_CONSTRUCTION_PLASTEEL 2 //plasteel barricade,(RO, SL) #define SKILL_CONSTRUCTION_ADVANCED 3 //windows and girder construction (combat engi, CO) -#define SKILL_CONSTRUCTION_MASTER 4 //building machine&computer frames (MT, CE) -#define SKILL_CONSTRUCTION_INHUMAN 5 //Early synth level. +#define SKILL_CONSTRUCTION_EXPERT 4 //building machine&computer frames (MT, CE) +#define SKILL_CONSTRUCTION_MASTER 5 //Early synth level. // engineer skill #define SKILL_ENGINEER_DEFAULT 0 #define SKILL_ENGINEER_METAL 1 //metal barricade repair && c4 use #define SKILL_ENGINEER_PLASTEEL 2 //plasteel barricade repair #define SKILL_ENGINEER_ENGI 3 //hacking&&planet engine fixing&&apc building (combat engi) -#define SKILL_ENGINEER_MASTER 4 //Telecomms fixing, faster engine fixing (ST) -#define SKILL_ENGINEER_INHUMAN 5 //Early synth level. +#define SKILL_ENGINEER_EXPERT 4 //Telecomms fixing, faster engine fixing (ST) +#define SKILL_ENGINEER_MASTER 5 //CSE, Early synth level. //higher levels give faster engine repair. //medical skill @@ -115,6 +115,8 @@ #define SKILL_CQC_MP 2 //no risk of accidental weapon discharge upon disarming (MP) #define SKILL_CQC_MASTER 5 +///unarmed damage mod from CQC skill +#define CQC_SKILL_DAMAGE_MOD 5 ///disarm chance mod from CQC skill #define CQC_SKILL_DISARM_MOD 5 @@ -149,8 +151,10 @@ #define SKILL_PILOT_TRAINED 1 //Pilot //multitile and mech vehicle skills -#define SKILL_LARGE_VEHICLE_DEFAULT 0 -#define SKILL_LARGE_VEHICLE_TRAINED 1 +#define SKILL_LARGE_VEHICLE_DEFAULT 0 //nothing +#define SKILL_LARGE_VEHICLE_TRAINED 1 //loader +#define SKILL_LARGE_VEHICLE_EXPERIENCED 2 //transport crew +#define SKILL_LARGE_VEHICLE_VETERAN 3 //mech pilot and assault crew //stamina skill - you do cardio, right? //buff stamina related things @@ -159,7 +163,7 @@ #define SKILL_STAMINA_TRAINED 1 #define SKILL_STAMINA_SUPER 2 -#define STAMINA_SKILL_COOLDOWN_MOD 2 +#define STAMINA_SKILL_COOLDOWN_MOD 2 SECONDS #define STAMINA_SKILL_REGEN_MOD 0.15 //////////////////////////////////////////////// diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index 36ec86c513a11..c53ebad408bc2 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -1,6 +1,5 @@ //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_AMBIENT 1023 #define CHANNEL_NOTIFY 1022 // observer, new player, vote notifications #define CHANNEL_VOX 1021 //vox announcements from AI #define CHANNEL_ANNOUNCEMENTS 1020 // IC priority announcements, hivemind messages etc diff --git a/code/__DEFINES/spaceman_dmm.dm b/code/__DEFINES/spaceman_dmm.dm index f14189b1af6ce..a09c7f301e3c1 100644 --- a/code/__DEFINES/spaceman_dmm.dm +++ b/code/__DEFINES/spaceman_dmm.dm @@ -3,26 +3,71 @@ // The SPACEMAN_DMM define is set by the linter and other tooling when it runs. #ifdef SPACEMAN_DMM + /** + * Sets a return type expression for a proc. The return type can take the forms: + + * `/typepath` - a raw typepath. The return type of the proc is the type named. + + * `param` - a typepath given as a parameter, for procs which return an instance of the passed-in type. + + * `param.type` - the static type of a passed-in parameter, for procs which + * return their input or otherwise another value of the same type. + + * `param[_].type` - the static type of a passed-in parameter, with one level + * of `/list` stripped, for procs which select one item from a list. The `[_]` + * may be repeated to strip more levels of `/list`. + */ #define RETURN_TYPE(X) set SpacemanDMM_return_type = X + /** + * If set, will enable a diagnostic on children of the proc it is set on which do + * not contain any `..()` parent calls. This can help with finding situations + * where a signal or other important handling in the parent proc is being skipped. + * Child procs may set this setting to `0` instead to override the check. + */ #define SHOULD_CALL_PARENT(X) set SpacemanDMM_should_call_parent = X - #define UNLINT(X) SpacemanDMM_unlint(X) + /** + * If set, raise a warning for any child procs that override this one, + * regardless of if it calls parent or not. + * This functions in a similar way to the `final` keyword in some languages. + * This cannot be disabled by child overrides. + */ #define SHOULD_NOT_OVERRIDE(X) set SpacemanDMM_should_not_override = X + /** + * If set, raise a warning if the proc or one of the sub-procs it calls + * uses a blocking call, such as `sleep()` or `input()` without using `set waitfor = 0` + * This cannot be disabled by child overrides. + */ #define SHOULD_NOT_SLEEP(X) set SpacemanDMM_should_not_sleep = X + /** + * If set, ensure a proc is 'pure', such that it does not make any changes + * outside itself or output. This also checks to make sure anything using + * this proc doesn't invoke it without making use of the return value. + * This cannot be disabled by child overrides. + */ #define SHOULD_BE_PURE(X) set SpacemanDMM_should_be_pure = X + ///Private procs can only be called by things of exactly the same type. #define PRIVATE_PROC(X) set SpacemanDMM_private_proc = X + ///Protected procs can only be call by things of the same type *or subtypes*. #define PROTECTED_PROC(X) set SpacemanDMM_protected_proc = X + ///If set, will not lint. + #define UNLINT(X) SpacemanDMM_unlint(X) + + ///If set, overriding their value isn't permitted by types that inherit it. #define VAR_FINAL var/SpacemanDMM_final + ///Private vars can only be called by things of exactly the same type. #define VAR_PRIVATE var/SpacemanDMM_private + ///Protected vars can only be called by things of the same type *or subtypes*. #define VAR_PROTECTED var/SpacemanDMM_protected #else #define RETURN_TYPE(X) #define SHOULD_CALL_PARENT(X) - #define UNLINT(X) X #define SHOULD_NOT_OVERRIDE(X) #define SHOULD_NOT_SLEEP(X) #define SHOULD_BE_PURE(X) #define PRIVATE_PROC(X) #define PROTECTED_PROC(X) + #define UNLINT(X) X + #define VAR_FINAL var #define VAR_PRIVATE var #define VAR_PROTECTED var diff --git a/code/__DEFINES/span.dm b/code/__DEFINES/span.dm index e3e807a898ca8..ca6ecdb333bc9 100644 --- a/code/__DEFINES/span.dm +++ b/code/__DEFINES/span.dm @@ -17,8 +17,11 @@ #define span_boldwarning(str) ("" + str + "") #define span_centerbold(str) ("" + str + "") #define span_danger(str) ("" + str + "") +#define span_bigdeadsay(str) ("" + str + "") #define span_deadsay(str) ("" + str + "") +#define span_tinydeadsay(str) ("" + str + "") #define span_disarm(str) ("" + str + "") +#define span_debuginfo(str) ("" + str + "") #define span_event_announcement(str) ("" + str + "") #define span_game(str) ("" + str + "") #define span_good(str) ("" + str + "") @@ -46,6 +49,7 @@ #define span_narsiesmall(str) ("" + str + "") #define span_nopositions(str) ("" + str + "") #define span_notice(str) ("" + str + "") +#define span_tinynotice(str) ("" + str + "") #define span_ooc(str) ("" + str + "") #define span_ordercic(str) ("" + str + "") #define span_prefix(str) ("" + str + "") @@ -62,6 +66,8 @@ #define span_scannerburn(str) ("" + str + "") #define span_scannerburnb(str) ("" + str + "") #define span_season_additional_info(str) ("" + str + "") +#define span_announce_header(str) ("" + str + "") +#define span_announce_body(str) ("" + str + "") #define span_seasons_announce(str) ("" + str + "") #define span_suicide(str) ("" + str + "") #define span_tip(str) ("" + str + "") diff --git a/code/__DEFINES/stat_tracking.dm b/code/__DEFINES/stat_tracking.dm index d7d207469d8dd..f0635c95529e9 100644 --- a/code/__DEFINES/stat_tracking.dm +++ b/code/__DEFINES/stat_tracking.dm @@ -8,10 +8,7 @@ #define STAT_LOG_ENTRY(entrylist, entryname) \ var/list/STAT_ENTRY = entrylist[entryname] || (entrylist[entryname] = new /list(STAT_ENTRY_LENGTH));\ STAT_ENTRY[STAT_ENTRY_TIME] += STAT_TIME;\ - var/STAT_INCR_AMOUNT = min(1, 2**round((STAT_ENTRY[STAT_ENTRY_COUNT] || 0)/SHORT_REAL_LIMIT));\ - if (STAT_INCR_AMOUNT == 1 || prob(100/STAT_INCR_AMOUNT)) {\ - STAT_ENTRY[STAT_ENTRY_COUNT] += STAT_INCR_AMOUNT;\ - };\ + STAT_ENTRY[STAT_ENTRY_COUNT] += 1; diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index fa05f4306f780..425569724a25f 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -39,6 +39,9 @@ #define STATUS_EFFECT_DRAIN_SURGE /datum/status_effect/drain_surge +#define STATUS_EFFECT_MINDMEND /datum/status_effect/mindmeld + +#define STATUS_EFFECT_REKNIT_FORM /datum/status_effect/reknit_form ///////////// // DEBUFFS // ///////////// diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index b0e97e05e9b29..e2c89df90e9bf 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "6.7.0" +#define TGS_DMAPI_VERSION "7.1.2" // All functions and datums outside this document are subject to change with any version and should not be relied on. @@ -50,6 +50,13 @@ #endif +#ifndef TGS_FILE2TEXT_NATIVE +#ifdef file2text +#error Your codebase is re-defining the BYOND proc file2text. The DMAPI requires the native version to read the result of world.Export(). You can fix this by adding "#define TGS_FILE2TEXT_NATIVE file2text" before your override of file2text to allow the DMAPI to use the native version. This will only be used for world.Export(), not regular file accesses +#endif +#define TGS_FILE2TEXT_NATIVE file2text +#endif + // EVENT CODES /// Before a reboot mode change, extras parameters are the current and new reboot mode enums. @@ -73,12 +80,12 @@ #define TGS_EVENT_REPO_MERGE_PULL_REQUEST 3 /// Before the repository makes a sychronize operation. Parameters: Absolute repostiory path. #define TGS_EVENT_REPO_PRE_SYNCHRONIZE 4 -/// Before a BYOND install operation begins. Parameters: [/datum/tgs_version] of the installing BYOND. -#define TGS_EVENT_BYOND_INSTALL_START 5 -/// When a BYOND install operation fails. Parameters: Error message -#define TGS_EVENT_BYOND_INSTALL_FAIL 6 -/// When the active BYOND version changes. Parameters: (Nullable) [/datum/tgs_version] of the current BYOND, [/datum/tgs_version] of the new BYOND. -#define TGS_EVENT_BYOND_ACTIVE_VERSION_CHANGE 7 +/// Before a engine install operation begins. Parameters: Version string of the installing engine. +#define TGS_EVENT_ENGINE_INSTALL_START 5 +/// When a engine install operation fails. Parameters: Error message +#define TGS_EVENT_ENGINE_INSTALL_FAIL 6 +/// When the active engine version changes. Parameters: (Nullable) Version string of the current engine, version string of the new engine. +#define TGS_EVENT_ENGINE_ACTIVE_VERSION_CHANGE 7 /// When the compiler starts running. Parameters: Game directory path, origin commit SHA. #define TGS_EVENT_COMPILE_START 8 /// When a compile is cancelled. No parameters. @@ -108,7 +115,7 @@ // #define TGS_EVENT_DREAM_DAEMON_LAUNCH 22 /// After a single submodule update is performed. Parameters: Updated submodule name. #define TGS_EVENT_REPO_SUBMODULE_UPDATE 23 -/// After CodeModifications are applied, before DreamMaker is run. Parameters: Game directory path, origin commit sha, byond version. +/// After CodeModifications are applied, before DreamMaker is run. Parameters: Game directory path, origin commit sha, version string of the used engine. #define TGS_EVENT_PRE_DREAM_MAKER 24 /// Whenever a deployment folder is deleted from disk. Parameters: Game directory path. #define TGS_EVENT_DEPLOYMENT_CLEANUP 25 @@ -122,6 +129,7 @@ /// The watchdog will restart on reboot. #define TGS_REBOOT_MODE_RESTART 2 +// Note that security levels are currently meaningless in OpenDream /// DreamDaemon Trusted security level. #define TGS_SECURITY_TRUSTED 0 /// DreamDaemon Safe security level. @@ -136,6 +144,11 @@ /// DreamDaemon invisible visibility level. #define TGS_VISIBILITY_INVISIBLE 2 +/// The Build Your Own Net Dream engine. +#define TGS_ENGINE_TYPE_BYOND 0 +/// The OpenDream engine. +#define TGS_ENGINE_TYPE_OPENDREAM 1 + //REQUIRED HOOKS /** @@ -299,6 +312,7 @@ var/datum/tgs_chat_embed/structure/embed /datum/tgs_message_content/New(text) + ..() if(!istext(text)) TGS_ERROR_LOG("[/datum/tgs_message_content] created with no text!") text = null @@ -341,6 +355,7 @@ var/proxy_url /datum/tgs_chat_embed/media/New(url) + ..() if(!istext(url)) CRASH("[/datum/tgs_chat_embed/media] created with no url!") @@ -354,6 +369,7 @@ var/proxy_icon_url /datum/tgs_chat_embed/footer/New(text) + ..() if(!istext(text)) CRASH("[/datum/tgs_chat_embed/footer] created with no text!") @@ -370,6 +386,7 @@ var/proxy_icon_url /datum/tgs_chat_embed/provider/author/New(name) + ..() if(!istext(name)) CRASH("[/datum/tgs_chat_embed/provider/author] created with no name!") @@ -382,6 +399,7 @@ var/is_inline /datum/tgs_chat_embed/field/New(name, value) + ..() if(!istext(name)) CRASH("[/datum/tgs_chat_embed/field] created with no name!") @@ -420,6 +438,7 @@ /** * Send a message to connected chats. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. * * message - The [/datum/tgs_message_content] to send. * admin_only: If [TRUE], message will be sent to admin connected chats. Vice-versa applies. @@ -429,6 +448,7 @@ /** * Send a private message to a specific user. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. * * message - The [/datum/tgs_message_content] to send. * user: The [/datum/tgs_chat_user] to PM. @@ -438,6 +458,7 @@ /** * Send a message to connected chats that are flagged as game-related in TGS. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. * * message - The [/datum/tgs_message_content] to send. * channels - Optional list of [/datum/tgs_chat_channel]s to restrict the message to. @@ -449,6 +470,10 @@ /world/proc/TgsVersion() return +/// Returns the running engine type +/world/proc/TgsEngine() + return + /// Returns the current [/datum/tgs_version] of the DMAPI being used if it was activated, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! /world/proc/TgsApiVersion() return @@ -477,10 +502,20 @@ /world/proc/TgsChatChannelInfo() return +/** + * Trigger an event in TGS. Requires TGS version >= 6.3.0. Returns [TRUE] if the event was triggered successfully, [FALSE] otherwise. This function may sleep! + * + * event_name - The name of the event to trigger + * parameters - Optional list of string parameters to pass as arguments to the event script. The first parameter passed to a script will always be the running game's directory followed by these parameters. + * wait_for_completion - If set, this function will not return until the event has run to completion. + */ +/world/proc/TgsTriggerEvent(event_name, list/parameters, wait_for_completion = FALSE) + return + /* The MIT License -Copyright (c) 2017-2023 Jordan Brown +Copyright (c) 2017-2024 Jordan Brown Permission is hereby granted, free of charge, to any person obtaining a copy of this software and diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 69be0308472f1..e10aaacecc387 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -112,6 +112,7 @@ #define WEIGHTBENCH_TRAIT "weightbench" #define BOILER_ROOTED_TRAIT "boiler_rooted" #define STRAPPABLE_ITEM_TRAIT "strappable_item" +#define MOUNTED_TRAIT "mounted" #define VALI_TRAIT "vali" #define HELDGLOVE_TRAIT "heldglove" #define SECTOID_TRAIT "sectoid" @@ -158,6 +159,19 @@ #define TRAIT_HEAVY_STEP "heavy_step" ///indicates this mob was spawned by a corpse spawner #define TRAIT_MAPSPAWNED "mapspawned" +///Mindmelded with another mob +#define TRAIT_MINDMELDED "mindmelded" +///You swing axe good +#define TRAIT_AXE_EXPERT "axe_expert" +///You swing sword good +#define TRAIT_SWORD_EXPERT "sword_expert" +///Pain reduction light +#define TRAIT_LIGHT_PAIN_RESIST "light_pain_resist" +///Pain reduction medium +#define TRAIT_MEDIUM_PAIN_RESIST "medium_pain_resist" +///is currently riding an armored vehicle +#define TRAIT_TANK_DESANT "tank_desant" + /// Prevents usage of manipulation appendages (picking, holding or using items, manipulating storage). #define TRAIT_HANDS_BLOCKED "handsblocked" @@ -181,7 +195,8 @@ #define TRAIT_SEE_IN_DARK "see_in_dark" //Able to see in dark #define TRAIT_MUTED "muted" //target is mute and can't speak #define TRAIT_TURRET_HIDDEN "turret_hidden" //target gets passed over by turrets choosing a victim -#define TRAIT_MOB_ICON_UPDATE_BLOCKED "icon_blocked" //target should not update its icon_state +///The target xenomorph's wound overlays won't be visible +#define TRAIT_XENOMORPH_INVISIBLE_BLOOD "invisible_blood" #define TRAIT_VALHALLA_XENO "valhalla_xeno" #define TRAIT_BULWARKED_TURF "bulwarked_turf" // turf is affected by bulwark ability @@ -231,6 +246,8 @@ //this mech is melee core boosted #define TRAIT_MELEE_CORE "melee_core" +///stops tanks from being able to ram this mob +#define TRAIT_STOPS_TANK_COLLISION "stops_tanks" //added to escaped humans #define TRAIT_HAS_ESCAPED "escaped_marine" @@ -238,3 +255,10 @@ //added to AIs firing railguns #define TRAIT_IS_FIRING_RAILGUN "firing_railgun" + +//regress and caste swap UI +#define TRAIT_CASTE_SWAP "caste_swap" +#define TRAIT_REGRESSING "regressing" + +///Pauses campaign mission timer +#define CAMPAIGN_MISSION_TIMER_PAUSED "campaign_mission_timer_paused" diff --git a/code/__DEFINES/vehicles.dm b/code/__DEFINES/vehicles.dm index bca10c692842b..fafc791f7799c 100644 --- a/code/__DEFINES/vehicles.dm +++ b/code/__DEFINES/vehicles.dm @@ -45,3 +45,14 @@ // For fireman carries, the carrying human needs an arm #define CARRIER_NEEDS_ARM (1<<4) + +//Armored vehicle defines +#define ARMORED_HAS_UNDERLAY (1<<0) +#define ARMORED_HAS_MAP_VARIANTS (1<<2) +#define ARMORED_HAS_PRIMARY_WEAPON (1<<3) +#define ARMORED_HAS_SECONDARY_WEAPON (1<<4) +#define ARMORED_LIGHTS_ON (1<<5) +#define ARMORED_HAS_HEADLIGHTS (1<<6) + +#define MODULE_PRIMARY (1<<0) +#define MODULE_SECONDARY (1<<1) diff --git a/code/__DEFINES/vv.dm b/code/__DEFINES/vv.dm index e1ad5078a7206..c61936de3aabe 100644 --- a/code/__DEFINES/vv.dm +++ b/code/__DEFINES/vv.dm @@ -1,6 +1,8 @@ #define VV_NUM "Number" #define VV_TEXT "Text" #define VV_MESSAGE "Mutiline Text" +#define VV_COLOR "Color" +#define VV_COLOR_MATRIX "Color Matrix" #define VV_ICON "Icon" #define VV_ATOM_REFERENCE "Atom Reference" #define VV_DATUM_REFERENCE "Datum Reference" @@ -16,26 +18,137 @@ #define VV_NEW_TYPE "New Custom Typepath" #define VV_NEW_LIST "New List" #define VV_NULL "NULL" +#define VV_INFINITY "Infinity" #define VV_RESTORE_DEFAULT "Restore to Default" #define VV_MARKED_DATUM "Marked Datum" +#define VV_TAGGED_DATUM "Tagged Datum" #define VV_BITFIELD "Bitfield" +#define VV_TEXT_LOCATE "Custom Reference Locate" +#define VV_PROCCALL_RETVAL "Return Value of Proccall" +#define VV_WEAKREF "Weak Reference Datum" + +#define VV_MSG_MARKED "
Marked Object" +#define VV_MSG_TAGGED(num) "
Tagged Datum #[num]" +#define VV_MSG_EDITED "
Var Edited" +#define VV_MSG_DELETED "
Deleted" + +#define VV_NORMAL_LIST_NO_EXPAND_THRESHOLD 50 +#define VV_SPECIAL_LIST_NO_EXPAND_THRESHOLD 150 + +///Basically a combination of the following: (istext(V) || ispath(V) || isdatum(V) || islist(V)) +#define IS_VALID_ASSOC_KEY(V) (!isnum(V)) + +//General helpers +#define VV_HREF_TARGET_INTERNAL(target, href_key) "?_src_=vars;[HrefToken()];[href_key]=TRUE;[VV_HK_TARGET]=[REF(target)]" +#define VV_HREF_TARGETREF_INTERNAL(targetref, href_key) "?_src_=vars;[HrefToken()];[href_key]=TRUE;[VV_HK_TARGET]=[targetref]" +#define VV_HREF_TARGET(target, href_key, text) "[text]" +#define VV_HREF_TARGETREF(targetref, href_key, text) "[text]" +#define VV_HREF_TARGET_1V(target, href_key, text, varname) "[text]" //for stuff like basic varedits, one variable +#define VV_HREF_TARGETREF_1V(targetref, href_key, text, varname) "[text]" + +#define GET_VV_TARGET locate(href_list[VV_HK_TARGET]) +#define GET_VV_VAR_TARGET href_list[VV_HK_VARNAME] + +//Helper for getting something to vv_do_topic in general +#define VV_TOPIC_LINK(datum, href_key, text) "text" //Helpers for vv_get_dropdown() #define VV_DROPDOWN_OPTION(href_key, name) . += "" // VV HREF KEYS #define VV_HK_TARGET "target" -#define VV_HK_VARNAME "targetvar" //name or index of var for 1 variable targetting hrefs. +///name or index of var for 1 variable targeting hrefs. +#define VV_HK_VARNAME "targetvar" + +// vv_do_list() keys +#define VV_HK_LIST_ADD "listadd" +#define VV_HK_LIST_EDIT "listedit" +#define VV_HK_LIST_CHANGE "listchange" +#define VV_HK_LIST_REMOVE "listremove" +#define VV_HK_LIST_ERASE_NULLS "listnulls" +#define VV_HK_LIST_ERASE_DUPES "listdupes" +#define VV_HK_LIST_SHUFFLE "listshuffle" +#define VV_HK_LIST_SET_LENGTH "listlen" + +// vv_do_basic() keys +#define VV_HK_BASIC_EDIT "datumedit" +#define VV_HK_BASIC_CHANGE "datumchange" +#define VV_HK_BASIC_MASSEDIT "massedit" // /datum #define VV_HK_DELETE "delete" #define VV_HK_EXPOSE "expose" #define VV_HK_CALLPROC "proc_call" #define VV_HK_MARK "mark" +#define VV_HK_TAG "tag" +#define VV_HK_ADDCOMPONENT "addcomponent" +#define VV_HK_REMOVECOMPONENT "removecomponent" +#define VV_HK_MASS_REMOVECOMPONENT "massremovecomponent" + +// /atom +#define VV_HK_ATOM_JUMP_TO "atom_jump_to" +#define VV_HK_MODIFY_TRANSFORM "atom_transform" +#define VV_HK_ADD_REAGENT "addreagent" +#define VV_HK_MODIFY_FILTERS "modify_filters" +#define VV_HK_MODIFY_GREYSCALE_COLORS "modify_greyscale_colors" +#define VV_HK_MODIFY_GREYSCALE "modify_greyscale" +#define VV_HK_AUTO_RENAME "auto_rename" +#define VV_HK_EDIT_COLOR_MATRIX "edit_color_matrix" +#define VV_HK_TEST_MATRIXES "test_matrixes" + +// /atom/movable +#define VV_HK_FOLLOW "follow" +#define VV_HK_GET "get" +#define VV_HK_SEND "send" +#define VV_HK_DELETE_ALL_INSTANCES "delete_all_instances" +#define VV_HK_UPDATE_ICONS "update_icon" +#define VV_HK_EDIT_PARTICLES "edit_particles" + +// /obj +#define VV_HK_OSAY "osay" +#define VV_HK_MASS_DEL_TYPE "mass_delete_type" + +// /mob +#define VV_HK_GIB "gib" +#define VV_HK_GIVE_MOB_ACTION "give_mob_action" +#define VV_HK_REMOVE_MOB_ACTION "remove_mob_action" +#define VV_HK_GIVE_SPELL "give_spell" +#define VV_HK_REMOVE_SPELL "remove_spell" +#define VV_HK_GIVE_DISEASE "give_disease" +#define VV_HK_GODMODE "godmode" +#define VV_HK_DROP_ALL "dropall" +#define VV_HK_REGEN_ICONS "regen_icons" +#define VV_HK_PLAYER_PANEL "player_panel" +#define VV_HK_BUILDMODE "buildmode" +#define VV_HK_DIRECT_CONTROL "direct_control" +#define VV_HK_GIVE_DIRECT_CONTROL "give_direct_control" +#define VV_HK_OFFER_GHOSTS "offer_ghosts" +#define VV_HK_VIEW_PLANES "view_planes" // /mob/living +#define VV_HK_ADD_LANGUAGE "add_language" +#define VV_HK_REMOVE_LANGUAGE "remove_language" #define VV_HK_GIVE_SPEECH_IMPEDIMENT "impede_speech" +// /mob/living/carbon +#define VV_HK_UPDATE_ICON "update_icon" +#define VV_HK_REGENERATE_ICON "regenerate_icon" +#define VV_HK_MODIFY_BODYPART "mod_bodypart" +#define VV_HK_MODIFY_ORGANS "organs_modify" +#define VV_HK_MARTIAL_ART "give_martial_art" + +// /mob/living/carbon/human +#define VV_HK_COPY_OUTFIT "copy_outfit" +#define VV_HK_SET_SPECIES "setspecies" + +//outfits +#define VV_HK_TO_OUTFIT_EDITOR "outfit_editor" + +#define VV_HK_WEAKREF_RESOLVE "weakref_resolve" + +/// ALWAYS render a reduced list, useful for fuckoff big datums that need to be condensed for the sake of client load +#define VV_ALWAYS_CONTRACT_LIST (1<<0) + #ifdef REFERENCE_TRACKING #define VV_HK_VIEW_REFERENCES "viewreferences" #endif diff --git a/code/__DEFINES/xeno.dm b/code/__DEFINES/xeno.dm index a82b6465d174a..49f354f39e86f 100644 --- a/code/__DEFINES/xeno.dm +++ b/code/__DEFINES/xeno.dm @@ -25,6 +25,11 @@ #define STICKY_RESIN "sticky resin" #define RESIN_DOOR "resin door" +//Special resin defines +#define BULLETPROOF_WALL "bulletproof resin wall" +#define FIREPROOF_WALL "fireproof resin wall" +#define HARDY_WALL "hardy resin wall" + //Xeno reagents defines #define DEFILER_NEUROTOXIN "Neurotoxin" #define DEFILER_HEMODILE "Hemodile" @@ -123,6 +128,13 @@ GLOBAL_LIST_INIT(resin_images_list, list( RESIN_DOOR = image('icons/Xeno/actions.dmi', icon_state = RESIN_DOOR) )) */ //RUTGMC EDIT END + +//List of special resin structure images +GLOBAL_LIST_INIT(resin_special_images_list, list( + BULLETPROOF_WALL = image('icons/Xeno/actions.dmi', icon_state = BULLETPROOF_WALL), + FIREPROOF_WALL = image('icons/Xeno/actions.dmi', icon_state = FIREPROOF_WALL), + HARDY_WALL = image('icons/Xeno/actions.dmi', icon_state = HARDY_WALL) +)) /* RU TGMC EDIT PUPPETEER REMOVAL //List of puppeteer order images GLOBAL_LIST_INIT(puppeteer_order_images_list, list( @@ -144,7 +156,9 @@ GLOBAL_LIST_INIT(puppeteer_phero_images_list, list( //xeno upgrade flags ///Message the hive when we buy this upgrade #define UPGRADE_FLAG_MESSAGE_HIVE (1<<0) -#define UPGRADE_FLAG_ONETIME (1<<0) +#define UPGRADE_FLAG_ONETIME (1<<1) +#define UPGRADE_FLAG_USES_TACTICAL (1<<2) + GLOBAL_LIST_INIT(xeno_ai_spawnable, list( /mob/living/carbon/xenomorph/beetle/ai, @@ -198,3 +212,6 @@ GLOBAL_LIST_INIT(xeno_ai_spawnable, list( #define ERROR_CONSTRUCT 8 #define PUPPET_WITHER_RANGE 15 + +///Number of icon states to show health and plasma on the side UI buttons +#define XENO_HUD_ICON_BUCKETS 16 diff --git a/code/__DEFINES/~RUtgmc_defines/dsc/signals.dm b/code/__DEFINES/~RUtgmc_defines/dsc/signals.dm index d0929f16d149d..694e71d294f55 100644 --- a/code/__DEFINES/~RUtgmc_defines/dsc/signals.dm +++ b/code/__DEFINES/~RUtgmc_defines/dsc/signals.dm @@ -33,6 +33,10 @@ #define COMSIG_PRED_SD "pred_sd" #define COMSIG_PRED_SD_MODE "pred_sd_mode" +#define COMSIG_PROJ_SCANTURF "proj_scanturf" + #define COMPONENT_PROJ_SCANTURF_TURFCLEAR (1<<0) + #define COMPONENT_PROJ_SCANTURF_TARGETFOUND (1<<1) + /// From /datum/admins/proc/force_predator_round() #define COMSIG_GLOB_PREDATOR_ROUND_TOGGLED "!predator_round_toglged" diff --git a/code/__DEFINES/~RUtgmc_defines/loadout.dm b/code/__DEFINES/~RUtgmc_defines/loadout.dm index 52ea5e4c1b856..03e9258acea91 100644 --- a/code/__DEFINES/~RUtgmc_defines/loadout.dm +++ b/code/__DEFINES/~RUtgmc_defines/loadout.dm @@ -33,7 +33,7 @@ GLOBAL_LIST_INIT(engineer_gear_listed_products, list( /obj/item/minerupgrade/automatic = list(CAT_ENGSUP, "Mining well automation upgrade", 5, "blue"), /obj/item/storage/pouch/explosive/razorburn = list(CAT_ENGSUP, "Pack of Razorburn grenades", 11, "orange3"), /obj/item/explosive/grenade/chem_grenade/razorburn_large = list(CAT_ENGSUP, "Razorburn canister", 7, "orange3"), - /obj/item/explosive/grenade/chem_grenade/razorburn_smol = list(CAT_ENGSUP, "Razorburn grenade", 3, "orange3"), + /obj/item/explosive/grenade/chem_grenade/razorburn_small = list(CAT_ENGSUP, "Razorburn grenade", 3, "orange3"), /obj/item/mortal_shell/he = list(CAT_ENGSUP, "HE Mortar shell", 1, "orange2"), /obj/item/mortal_shell/incendiary = list(CAT_ENGSUP, "Incendiary Mortar shell", 1, "orange2"), /obj/item/mortal_shell/plasmaloss = list(CAT_ENGSUP, "Tanglefoot Mortar shell", 1, "orange2"), @@ -107,7 +107,7 @@ GLOBAL_LIST_INIT(leader_gear_listed_products, list( /obj/item/storage/backpack/marine/radiopack = list(CAT_LEDSUP, "Radio Pack", 5, "orange"), /obj/item/fulton_extraction_pack = list(CAT_LEDSUP, "Fulton Extraction Pack", 5, "orange"), /obj/item/explosive/plastique = list(CAT_LEDSUP, "Plastique explosive", 2, "orange"), - /obj/item/beacon/supply_beacon = list(CAT_LEDSUP, "Supply beacon", 5, "blue"), + /obj/item/supply_beacon = list(CAT_LEDSUP, "Supply beacon", 5, "blue"), /obj/item/beacon/orbital_bombardment_beacon = list(CAT_LEDSUP, "Orbital beacon", 5, "blue"), /obj/item/deployable_camera = list(CAT_LEDSUP, "Deployable Overwatch Camera", 1, "blue"), /obj/item/storage/holster/blade/officer/valirapier/full = list(CAT_LEDSUP, "Vali Harvester rapier", 25, "blue"), @@ -116,13 +116,15 @@ GLOBAL_LIST_INIT(leader_gear_listed_products, list( /obj/item/explosive/grenade/incendiary = list(CAT_LEDSUP, "M40 HIDP incendiary grenade", 1, "orange3"), /obj/item/explosive/grenade/phosphorus = list(CAT_LEDSUP, "M40 HPDP phosphorous grenade", 5, "orange3"), /obj/item/explosive/grenade/sticky/trailblazer/phosphorus = list(CAT_LEDSUP, "M45 Phosphorus trailblazer grenade", 5, "orange3"), + /obj/item/storage/pouch/explosive/antigas = list(CAT_LEDSUP, "Pack of M40-AG Antigas grenades", 16, "orange"), /obj/item/storage/pouch/explosive/razorburn = list(CAT_LEDSUP, "Pack of Razorburn grenades", 11, "orange3"), /obj/item/explosive/grenade/chem_grenade/razorburn_large = list(CAT_LEDSUP, "Razorburn canister", 7, "orange3"), - /obj/item/explosive/grenade/chem_grenade/razorburn_smol = list(CAT_LEDSUP, "Razorburn grenade", 3, "orange3"), + /obj/item/explosive/grenade/chem_grenade/razorburn_small = list(CAT_LEDSUP, "Razorburn grenade", 3, "orange3"), /obj/item/whistle = list(CAT_LEDSUP, "Whistle", 1, "yellow"), /obj/item/megaphone = list(CAT_LEDSUP, "Megaphone", 1, "yellow"), /obj/item/stack/sandbags_empty/half = list(CAT_LEDSUP, "Sandbags x25", SANDBAG_PRICE_IN_GEAR_VENDOR, "yellow"), /obj/item/jetpack_marine = list(CAT_LEDSUP, "Jetpack", 5, "yellow"), + /obj/item/storage/backpack/marine/satchel/scout_cloak = list(CAT_LEDSUP, "Scout Cloak", 25, "yellow"), /obj/item/storage/belt/grenade/b17 = list(CAT_LEDSUP, "High Capacity Grenade Belt", 5, "yellow"), /obj/structure/closet/bodybag/tarp = list(CAT_LEDSUP, "V1 thermal-dampening tarp", 2, "yellow"), /obj/item/weapon/gun/flamer/big_flamer/marinestandard = list(CAT_LEDSUP, "FL-84 flamethrower", 6, "red"), @@ -154,7 +156,7 @@ GLOBAL_LIST_INIT(leader_gear_listed_products, list( GLOBAL_LIST_INIT(commander_gear_listed_products, list( /obj/effect/vendor_bundle/commander = list(CAT_ESS, "Essential FC Set", 0, "white"), - /obj/item/beacon/supply_beacon = list(CAT_FCSUP, "Supply beacon", 5, "blue"), + /obj/item/supply_beacon = list(CAT_FCSUP, "Supply beacon", 5, "blue"), /obj/item/beacon/orbital_bombardment_beacon = list(CAT_FCSUP, "Orbital beacon", 5, "blue"), /obj/item/fulton_extraction_pack = list(CAT_FCSUP, "Fulton Extraction Pack", 5, "blue"), /obj/item/deployable_camera = list(CAT_FCSUP, "Deployable Overwatch Camera", 1, "blue"), @@ -185,9 +187,10 @@ GLOBAL_LIST_INIT(commander_gear_listed_products, list( /obj/item/explosive/grenade/phosphorus = list(CAT_FCSUP, "M40 HSDP phosphorous grenade", 3, "orange3"), /obj/item/storage/box/visual/grenade/trailblazer/phosphorus = list(CAT_FCSUP, "M45 Phosphorus trailblazer grenade box", 15, "blue"), /obj/item/explosive/grenade/sticky/trailblazer/phosphorus = list(CAT_FCSUP, "M45 Phosphorus trailblazer grenade", 3, "orange3"), + /obj/item/storage/pouch/explosive/antigas = list(CAT_LEDSUP, "Pack of M40-AG Antigas grenades", 16, "orange"), /obj/item/storage/pouch/explosive/razorburn = list(CAT_FCSUP, "Pack of Razorburn grenades", 15, "orange3"), /obj/item/explosive/grenade/chem_grenade/razorburn_large = list(CAT_FCSUP, "Razorburn canister", 10, "orange3"), - /obj/item/explosive/grenade/chem_grenade/razorburn_smol = list(CAT_FCSUP, "Razorburn grenade", 5, "orange3"), + /obj/item/explosive/grenade/chem_grenade/razorburn_small = list(CAT_FCSUP, "Razorburn grenade", 5, "orange3"), /obj/item/storage/box/explosive_mines/large = list(CAT_FCSUP, "Large M20 mine box", 16, "orange3"), /obj/item/weapon/gun/flamer/big_flamer/marinestandard = list(CAT_FCSUP, "FL-84 flamethrower", 10, "red"), /obj/item/ammo_magazine/flamer_tank/large = list(CAT_FCSUP, "FL-84 normal fuel tank", 5, "orange2"), @@ -229,7 +232,7 @@ GLOBAL_LIST_INIT(commander_gear_listed_products, list( /obj/item/armor_module/module/welding/superior = list(CAT_FCSUP, "Superior welding module", 2, "yellow"), /obj/item/storage/box/crate/minisentry = list(CAT_FCSUP, "ST-580 point defense sentry kit", 15, "yellow"), /obj/item/healthanalyzer/gloves = list(CAT_FCSUP, "Health scanner gloves", 2, "yellow"), - /obj/item/defibrillator/gloves = list(CAT_FCSUP, "Advanced medical gloves", 4, "yellow"), + /obj/item/clothing/gloves/defibrillator = list(CAT_FCSUP, "Advanced medical gloves", 4, "yellow"), /obj/item/storage/pouch/medical_injectors/medic = list(CAT_FCSUP, "Advanced Injector Pouch", 16, "cyan"), /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus = list(CAT_FCSUP, "Injector (Peridaxon Plus)", 4, "cyan"), /obj/item/reagent_containers/hypospray/autoinjector/dexalinplus = list(CAT_FCSUP, "Injector (Dexalin Plus)", 1, "cyan"), @@ -242,7 +245,7 @@ GLOBAL_LIST_INIT(commander_gear_listed_products, list( GLOBAL_LIST_INIT(synthetic_gear_listed_products, list( //command stuff - /obj/item/beacon/supply_beacon = list(CAT_SYNTH, "Supply beacon", 5, "blue"), + /obj/item/supply_beacon = list(CAT_SYNTH, "Supply beacon", 5, "blue"), /obj/item/beacon/orbital_bombardment_beacon = list(CAT_SYNTH, "Orbital beacon", 5, "blue"), /obj/item/fulton_extraction_pack = list(CAT_SYNTH, "Fulton Extraction Pack", 5, "blue"), /obj/item/deployable_camera = list(CAT_SYNTH, "Deployable Overwatch Camera", 1, "blue"), @@ -288,7 +291,7 @@ GLOBAL_LIST_INIT(synthetic_gear_listed_products, list( /obj/item/reagent_containers/hypospray/autoinjector/synaptizine = list(CAT_SYNTH, "Injector (Synaptizine)", 2, "cyan"), /obj/item/reagent_containers/hypospray/autoinjector/neuraline = list(CAT_SYNTH, "Injector (Neuraline)", 7, "cyan"), /obj/item/healthanalyzer/gloves = list(CAT_SYNTH, "Health scanner gloves", 2, "yellow"), - /obj/item/defibrillator/gloves = list(CAT_SYNTH, "Advanced medical gloves", 4, "yellow"), + /obj/item/clothing/gloves/defibrillator = list(CAT_SYNTH, "Advanced medical gloves", 4, "yellow"), /obj/item/tweezers_advanced = list(CAT_SYNTH, "Advanced Tweezers", 8, "yellow"), /obj/item/tool/surgery/scalpel/manager = list(CAT_SYNTH, "Incision Management System", 6, "yellow"), /obj/effect/vendor_bundle/stretcher = list(CAT_SYNTH, "Medivac Stretcher", 16, "yellow"), @@ -380,7 +383,7 @@ GLOBAL_LIST_INIT(job_specific_clothes_vendor, list( GLOBAL_LIST_INIT(loadout_role_essential_set, list( SQUAD_ENGINEER = list ( /obj/item/explosive/plastique = 1, - /obj/item/explosive/grenade/chem_grenade/razorburn_smol = 1, + /obj/item/explosive/grenade/chem_grenade/razorburn_small = 1, /obj/item/clothing/gloves/marine/insulated = 1, /obj/item/cell/high = 1, /obj/item/lightreplacer = 1, @@ -407,7 +410,7 @@ GLOBAL_LIST_INIT(loadout_role_essential_set, list( ), SQUAD_LEADER = list( /obj/item/explosive/plastique = 1, - /obj/item/beacon/supply_beacon = 2, + /obj/item/supply_beacon = 2, /obj/item/beacon/orbital_bombardment_beacon = 1, /obj/item/whistle = 1, /obj/item/binoculars/tactical = 1, @@ -417,7 +420,7 @@ GLOBAL_LIST_INIT(loadout_role_essential_set, list( ), FIELD_COMMANDER = list( /obj/item/explosive/plastique = 1, - /obj/item/beacon/supply_beacon = 1, + /obj/item/supply_beacon = 1, /obj/item/beacon/orbital_bombardment_beacon = 1, /obj/item/healthanalyzer = 1, /obj/item/roller/medevac = 1, diff --git a/code/__DEFINES/~RUtgmc_defines/mobs.dm b/code/__DEFINES/~RUtgmc_defines/mobs.dm index ebe237eafbd28..41f56fb4aba4e 100644 --- a/code/__DEFINES/~RUtgmc_defines/mobs.dm +++ b/code/__DEFINES/~RUtgmc_defines/mobs.dm @@ -19,7 +19,7 @@ #define XENO_HIGH_ACID_PUDDLE_DAMAGE 20 //Strong acid damage dealt by acid puddles #define IS_YAUTJA (1<<6) - +#define WOUND_LAYER 29 #define MOTH_WINGS_LAYER 28 #define MUTATIONS_LAYER 27 #define DAMAGE_LAYER 26 diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index 84e9010973087..de4ed61625a52 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -1,30 +1,107 @@ -#define LAZYINITLIST(L) if (!L) L = list() +/* + * Holds procs to help with list operations + * Contains groups: + * Misc + * Sorting + */ + +/* + * Misc + */ + +// Generic listoflist safe add and removal macros: +///If value is a list, wrap it in a list so it can be used with list add/remove operations +#define LIST_VALUE_WRAP_LISTS(value) (islist(value) ? list(value) : value) +///Add an untyped item to a list, taking care to handle list items by wrapping them in a list to remove the footgun +#define UNTYPED_LIST_ADD(list, item) (list += LIST_VALUE_WRAP_LISTS(item)) +///Remove an untyped item to a list, taking care to handle list items by wrapping them in a list to remove the footgun +#define UNTYPED_LIST_REMOVE(list, item) (list -= LIST_VALUE_WRAP_LISTS(item)) + +/* + * ## Lazylists + * + * * What is a lazylist? + * + * True to its name a lazylist is a lazy instantiated list. + * It is a list that is only created when necessary (when it has elements) and is null when empty. + * + * * Why use a lazylist? + * + * Lazylists save memory - an empty list that is never used takes up more memory than just `null`. + * + * * When to use a lazylist? + * + * Lazylists are best used on hot types when making lists that are not always used. + * + * For example, if you were adding a list to all atoms that tracks the names of people who touched it, + * you would want to use a lazylist because most atoms will never be touched by anyone. + * + * * How do I use a lazylist? + * + * A lazylist is just a list you defined as `null` rather than `list()`. + * Then, you use the LAZY* macros to interact with it, which are essentially null-safe ways to interact with a list. + * + * Note that you probably should not be using these macros if your list is not a lazylist. + * This will obfuscate the code and make it a bit harder to read and debug. + * + * Generally speaking you shouldn't be checking if your lazylist is `null` yourself, the macros will do that for you. + * Remember that LAZYLEN (and by extension, length) will return 0 if the list is null. + */ + +///Initialize the lazylist +#define LAZYINITLIST(L) if (!L) { L = list(); } +///If the provided list is empty, set it to null #define UNSETEMPTY(L) if (L && !length(L)) L = null +///If the provided key -> list is empty, remove it from the list +#define ASSOC_UNSETEMPTY(L, K) if (!length(L[K])) L -= K; +///Like LAZYCOPY - copies an input list if the list has entries, If it doesn't the assigned list is nulled +#define LAZYLISTDUPLICATE(L) (L ? L.Copy() : null ) +///Remove an item from the list, set the list to null if empty #define LAZYREMOVE(L, I) if(L) { L -= I; if(!length(L)) { L = null; } } +///Add an item to the list, if the list is null it will initialize it #define LAZYADD(L, I) if(!L) { L = list(); } L += I; -#define LAZYDISTINCTADD(L, I) if(!L) { L = list(); } L |= I; +///Add an item to the list if not already present, if the list is null it will initialize it #define LAZYOR(L, I) if(!L) { L = list(); } L |= I; -#define LAZYFIND(L, V) L ? L.Find(V) : 0 +///Returns the key of the submitted item in the list +#define LAZYFIND(L, V) (L ? L.Find(V) : 0) +///returns L[I] if L exists and I is a valid index of L, runtimes if L is not a list #define LAZYACCESS(L, I) (L ? (isnum(I) ? (I > 0 && I <= length(L) ? L[I] : null) : L[I]) : null) +///Sets the item K to the value V, if the list is null it will initialize it #define LAZYSET(L, K, V) if(!L) { L = list(); } L[K] = V; +///Sets the length of a lazylist +#define LAZYSETLEN(L, V) if (!L) { L = list(); } L.len = V; +///Returns the length of the list #define LAZYLEN(L) length(L) -#define LAZYCLEARLIST(L) if(L) L.Cut() -#define SANITIZE_LIST(L) ( islist(L) ? L : list() ) -#define reverseList(L) reverseRange(L.Copy()) +///Sets a list to null +#define LAZYNULL(L) L = null +///Adds to the item K the value V, if the list is null it will initialize it #define LAZYADDASSOCSIMPLE(L, K, V) if(!L) { L = list(); } L[K] += V; #define LAZYADDASSOC(L, K, V) if(!L) { L = list(); } L[K] += list(V); ///This is used to add onto lazy assoc list when the value you're adding is a /list/. This one has extra safety over lazyaddassoc because the value could be null (and thus cant be used to += objects) #define LAZYADDASSOCLIST(L, K, V) if(!L) { L = list(); } L[K] += list(V); +///Removes the value V from the item K, if the item K is empty will remove it from the list, if the list is empty will set the list to null #define LAZYREMOVEASSOC(L, K, V) if(L) { if(L[K]) { L[K] -= V; if(!length(L[K])) L -= K; } if(!length(L)) L = null; } +///Accesses an associative list, returns null if nothing is found #define LAZYACCESSASSOC(L, I, K) L ? L[I] ? L[I][K] ? L[I][K] : null : null : null +///Qdel every item in the list before setting the list to null +#define QDEL_LAZYLIST(L) for(var/I in L) qdel(I); L = null; #define LAZYINCREMENT(L, K) if(!L) { L = list(); } L[K]++; #define LAZYDECREMENT(L, K) if(L) { if(L[K]) { L[K]--; if(!L[K]) L -= K; } if(!length(L)) L = null; } +//These methods don't null the list +///Use LAZYLISTDUPLICATE instead if you want it to null with no entries +#define LAZYCOPY(L) (L ? L.Copy() : list() ) +/// Consider LAZYNULL instead +#define LAZYCLEARLIST(L) if(L) L.Cut() +///Returns the list if it's actually a valid list, otherwise will initialize it +#define SANITIZE_LIST(L) ( islist(L) ? L : list() ) /// Performs an insertion on the given lazy list with the given key and value. If the value already exists, a new one will not be made. #define LAZYORASSOCLIST(lazy_list, key, value) \ LAZYINITLIST(lazy_list); \ LAZYINITLIST(lazy_list[key]); \ lazy_list[key] |= value; +#define reverseList(L) reverseRange(L.Copy()) + //Checks for specific types in specifically structured (Assoc "type" = TRUE) lists ('typecaches') #define is_type_in_typecache(A, L) (A && length(L) && L[(ispath(A) ? A : A:type)]) @@ -242,16 +319,21 @@ return L +///Return a list with no duplicate entries +/proc/unique_list(list/inserted_list) + . = list() + for(var/i in inserted_list) + . |= LIST_VALUE_WRAP_LISTS(i) -//Return a list with no duplicate entries -/proc/uniquelist(list/L) - var/list/K = list() - for(var/item in L) - if((item in K)) - continue - K += item - return K - +///same as unique_list, but returns nothing and acts on list in place (also handles associated values properly) +/proc/unique_list_in_place(list/inserted_list) + var/temp = inserted_list.Copy() + inserted_list.len = 0 + for(var/key in temp) + if (isnum(key)) + inserted_list |= key + else + inserted_list[key] = temp[key] //for sorting clients or mobs by ckey /proc/sortKey(list/L, order = 1) @@ -524,14 +606,6 @@ .[i] = key .[key] = value - -//Return a list with no duplicate entries -/proc/uniqueList(list/L) - . = list() - for(var/i in L) - . |= i - - //same, but returns nothing and acts on list in place /proc/shuffle_inplace(list/L) if(!L) @@ -540,18 +614,6 @@ for(var/i in 1 to length(L)-1) L.Swap(i, rand(i, length(L))) - -//same, but returns nothing and acts on list in place (also handles associated values properly) -/proc/uniqueList_inplace(list/L) - var/temp = L.Copy() - L.len = 0 - for(var/key in temp) - if (isnum(key)) - L |= key - else - L[key] = temp[key] - - /proc/typecache_filter_list_reverse(list/atoms, list/typecache) RETURN_TYPE(/list) . = list() diff --git a/code/__HELPERS/_planes.dm b/code/__HELPERS/_planes.dm new file mode 100644 index 0000000000000..769c4283ea626 --- /dev/null +++ b/code/__HELPERS/_planes.dm @@ -0,0 +1,88 @@ +// This file contains helper macros for plane operations +// See the planes section of Visuals.md for more detail, but essentially +// When we render multiz, we do it by placing all atoms on lower levels on well, lower planes +// This is done with stacks of plane masters (things we use to apply effects to planes) +// These macros exist to facilitate working with this system, and other associated small bits + +/// Takes an atom to change the plane of, a new plane value, and something that can be used as a reference to a z level as input +/// Modifies the new value to match the plane we actually want. Note, if you pass in an already offset plane the offsets will add up +/// Use PLANE_TO_TRUE() to avoid this +#define SET_PLANE(thing, new_value, z_reference) (thing.plane = MUTATE_PLANE(new_value, z_reference)) + +/// Takes a plane and a z reference, and offsets the plane by the mutation +/// The SSmapping.max_plane_offset bit here is technically redundant, but saves a bit of work in the base case +/// And the base case is important to me. Non multiz shouldn't get hit too bad by this code +#define MUTATE_PLANE(new_value, z_reference) ((SSmapping.max_plane_offset) ? GET_NEW_PLANE(new_value, GET_TURF_PLANE_OFFSET(z_reference)) : (new_value)) + +/// Takes a z reference that we are unsure of, sanity checks it +/// Returns either its offset, or 0 if it's not a valid ref +/// Will return the reference's PLANE'S offset if we can't get anything out of the z level. We do our best +#define GET_TURF_PLANE_OFFSET(z_reference) ((SSmapping.max_plane_offset && isatom(z_reference)) ? (z_reference.z ? GET_Z_PLANE_OFFSET(z_reference.z) : PLANE_TO_OFFSET(z_reference.plane)) : 0) +/// Essentially just an unsafe version of GET_TURF_PLANE_OFFSET() +/// Takes a z value we returns its offset with a list lookup +/// Will runtime during parts of init. Be careful :) +#define GET_Z_PLANE_OFFSET(z) (SSmapping.z_level_to_plane_offset[z]) + +/// Takes a plane to offset, and the multiplier to use, and well, does the offsetting +/// Respects a blacklist we use to remove redundant plane masters, such as hud objects +#define GET_NEW_PLANE(new_value, multiplier) (SSmapping.plane_offset_blacklist?["[new_value]"] ? new_value : (new_value) - (PLANE_RANGE * (multiplier))) + +// Now for the more niche things + +/// Takes an object, new plane, and multipler, and offsets the plane +/// This is for cases where you have a multipler precalculated, and just want to use it +/// Often an optimization, sometimes a necessity +#define SET_PLANE_W_SCALAR(thing, new_value, multiplier) (thing.plane = GET_NEW_PLANE(new_value, multiplier)) + + +/// Implicit plane set. We take the turf from the object we're changing the plane of, and use ITS z as a spokesperson for our plane value +#define SET_PLANE_IMPLICIT(thing, new_value) SET_PLANE_EXPLICIT(thing, new_value, thing) + +// This is an unrolled and optimized version of SET_PLANE, for use anywhere where you are unsure of a source's "turfness" +// We do also try and guess at what the thing's z level is, even if it's not a z +// The plane is cached to allow for fancy stuff to be eval'd once, rather then often +#define SET_PLANE_EXPLICIT(thing, new_value, source) \ + do {\ + if(SSmapping.max_plane_offset) {\ + var/_cached_plane = new_value;\ + var/turf/_our_turf = get_turf(source);\ + if(_our_turf){\ + thing.plane = GET_NEW_PLANE(_cached_plane, GET_Z_PLANE_OFFSET(_our_turf.z));\ + }\ + else if(source) {\ + thing.plane = GET_NEW_PLANE(_cached_plane, PLANE_TO_OFFSET(source.plane));\ + }\ + else {\ + thing.plane = _cached_plane;\ + }\ + }\ + else {\ + thing.plane = new_value;\ + }\ + }\ + while (FALSE) + +// Now for macros that exist to get info from SSmapping +// Mostly about details of planes, or z levels + +/// Takes a z level, gets the lowest plane offset in its "stack" +#define GET_LOWEST_STACK_OFFSET(z) ((SSmapping.max_plane_offset) ? SSmapping.z_level_to_lowest_plane_offset[z] : 0) +/// Takes a plane, returns the canonical, unoffset plane it represents +#define PLANE_TO_TRUE(plane) ((SSmapping.plane_offset_to_true) ? SSmapping.plane_offset_to_true["[plane]"] : plane) +/// Takes a plane, returns the offset it uses +#define PLANE_TO_OFFSET(plane) ((SSmapping.plane_to_offset) ? SSmapping.plane_to_offset["[plane]"] : plane) +/// Takes a plane, returns TRUE if it is of critical priority, FALSE otherwise +#define PLANE_IS_CRITICAL(plane) ((SSmapping.plane_to_offset) ? !!SSmapping.critical_planes["[plane]"] : FALSE) +/// Takes a true plane, returns the offset planes that would canonically represent it +#define TRUE_PLANE_TO_OFFSETS(plane) ((SSmapping.true_to_offset_planes) ? SSmapping.true_to_offset_planes["[plane]"] : list(plane)) +/// Takes a render target and an offset, returns a canonical render target string for it +#define OFFSET_RENDER_TARGET(render_target, offset) (_OFFSET_RENDER_TARGET(render_target, SSmapping.render_offset_blacklist?["[render_target]"] ? 0 : offset)) +/// Helper macro for the above +/// Honestly just exists to make the pattern of render target strings more readable +#define _OFFSET_RENDER_TARGET(render_target, offset) ("[(render_target)] #[(offset)]") + +// Known issues: +// Potentially too much client load? Hard to tell due to not having a potato pc to hand. +// This is solvable with lowspec preferences, which would not be hard to implement +// Player popups will now render their effects, like overlay lights. this is fixable, but I've not gotten to it +// I think overlay lights can render on the wrong z layer. s fucked diff --git a/code/__HELPERS/ai.dm b/code/__HELPERS/ai.dm index 018da4c5e1a55..350fbe7a9eaef 100644 --- a/code/__HELPERS/ai.dm +++ b/code/__HELPERS/ai.dm @@ -94,3 +94,22 @@ continue nearest_target = nearby_vehicle return nearest_target + +/** + * This proc attempts to get an instance of an atom type within distance, with center as the center. + * Arguments + * * center - The center of the search + * * type - The type of atom we're looking for + * * distance - The distance we should search + * * list_to_search - The list to look through for the type + */ +/proc/cheap_get_atom(atom/center, type, distance, list/list_to_search) + var/turf/turf_center = get_turf(center) + if(!turf_center) + return + for(var/atom/near AS in list_to_search) + if(!istype(near, type)) + continue + if(get_dist(turf_center, near) > distance) + continue + return near diff --git a/code/__HELPERS/announce.dm b/code/__HELPERS/announce.dm index 4e9d5304283ea..576609e8fa7a5 100644 --- a/code/__HELPERS/announce.dm +++ b/code/__HELPERS/announce.dm @@ -1,35 +1,115 @@ +// the types of priority announcements #define ANNOUNCEMENT_REGULAR 1 #define ANNOUNCEMENT_PRIORITY 2 #define ANNOUNCEMENT_COMMAND 3 +// don't use any of these macros outside of here to keep the appearance of alerts consistent (unless you need to make them global for some reason) +// if you want to design a faction alert to use in a message or something, use assemble_alert() + +// a style for extra padding on alert titles +#define span_alert_header(str) ("" + str + "") + +// these are spans that just furnish themselves to the appropriate color +#define span_faction_alert_title(str) ("" + str + "") +#define span_faction_alert_minortitle(str) ("" + str + "") +#define span_faction_alert_subtitle(str) ("" + str + "") +#define span_faction_alert_text(str) ("" + str + "") + +// the actual striped background of faction alerts, the spans above will color themselves to match these +#define faction_alert_default_span(string) ("
" + string + "
") +#define faction_alert_colored_span(color, string) ("
" + string + "
") + +// colors for faction alert overrides, used for admin menus +#define faction_alert_colors list("default", "green", "blue", "pink", "yellow", "orange", "red", "purple", "grey") + +/** + * Design a faction alert. Returns a string. + * + * Arguments + * * title - required, the title to use for this alert + * * subtitle - optional, the subtitle/subheader to use for this alert + * * message - required, the message to use for this alert + * * color_override - optional, the color to use for this alert instead of blue + * * minor - is this a minor alert? + */ +/proc/assemble_alert(title, subtitle, message, color_override, minor = FALSE) + if(!title || !message) + return -/proc/priority_announce(message, title = "Announcement", type = ANNOUNCEMENT_REGULAR, sound = 'sound/misc/notice2.ogg', list/receivers = (GLOB.alive_human_list + GLOB.ai_list + GLOB.observer_list)) + var/list/alert_strings = list() + var/header + var/finalized_alert + header = minor ? span_faction_alert_minortitle(title) : span_faction_alert_title(title) + + if(subtitle) + header += span_faction_alert_subtitle(subtitle) + + alert_strings += span_alert_header(header) + alert_strings += span_faction_alert_text(message) + + if(color_override) + finalized_alert = faction_alert_colored_span(color_override, jointext(alert_strings, "")) + else + finalized_alert = faction_alert_default_span(jointext(alert_strings, "")) + + return finalized_alert + +/** + * Make a priority announcement to a target + * + * Arguments + * * message - **required,** the content of the announcement + * * title - optional, the title of the announcement + * * subtitle - optional, the subtitle/subheader of the announcement + * * type - optional, the type of the announcement (see defines in `__HELPERS/announce.dm`) + * * sound - optional, the sound played accompanying the announcement + * * channel_override - optional, what channel is this sound going to be played on? + * * color_override - **recommended,** string, use the passed color instead of the default blue (see defines in `__HELPERS/announce.dm`) + * * receivers - a list of all players to send the message to. defaults to all players, not including those in lobby + */ +/proc/priority_announce(message, title = "Announcement", subtitle = "", type = ANNOUNCEMENT_REGULAR, sound = 'sound/misc/notice2.ogg', channel_override = CHANNEL_ANNOUNCEMENTS, color_override, list/receivers = (GLOB.alive_human_list + GLOB.ai_list + GLOB.observer_list)) if(!message) return - var/announcement + // header/subtitle to use when using assemble_alert() + var/assembly_header + var/assembly_subtitle switch(type) if(ANNOUNCEMENT_REGULAR) - announcement += "

[html_encode(title)]

" + assembly_header = title if(ANNOUNCEMENT_PRIORITY) - announcement += "

Priority Announcement

" - if(title && title != "Announcement") - announcement += "

[html_encode(title)]

" + assembly_header = "Priority Announcement" + if(length(title) > 0) + assembly_subtitle = title if(ANNOUNCEMENT_COMMAND) - announcement += "

Command Announcement

" - - - announcement += "
[span_alert("[html_encode(message)]")]
" - announcement += "
" - - var/s = sound(sound, channel = CHANNEL_ANNOUNCEMENTS) + assembly_header = "Command Announcement" + + if(subtitle && type != ANNOUNCEMENT_PRIORITY) + assembly_subtitle = subtitle + + var/finalized_announcement + if(color_override) + finalized_announcement = assemble_alert( + title = assembly_header, + subtitle = assembly_subtitle, + message = message, + color_override = color_override + ) + else + finalized_announcement = assemble_alert( + title = assembly_header, + subtitle = assembly_subtitle, + message = message + ) + + var/s = sound(sound, channel = channel_override) for(var/i in receivers) var/mob/M = i if(!isnewplayer(M)) - to_chat(M, announcement) + to_chat(M, finalized_announcement) SEND_SOUND(M, s) @@ -46,8 +126,16 @@ P.info = papermessage P.update_icon() - -/proc/minor_announce(message, title = "Attention:", alert, list/receivers = GLOB.alive_human_list) +/** + * Make a minor announcement to a target + * + * Arguments + * * message - required, this is the announcement message + * * title - optional, the title of the announcement + * * alert - optional, alert or notice? + * * receivers - a list of all players to send the message to + */ +/proc/minor_announce(message, title = "Attention:", alert, list/receivers = GLOB.alive_human_list, should_play_sound = TRUE) if(!message) return @@ -55,5 +143,18 @@ S.channel = CHANNEL_ANNOUNCEMENTS for(var/mob/M AS in receivers) if(!isnewplayer(M) && !isdeaf(M)) - to_chat(M, "[html_encode(title)]
[html_encode(message)]

") - SEND_SOUND(M, S) + to_chat(M, assemble_alert( + title = title, + message = message, + minor = TRUE + )) + if(should_play_sound) + SEND_SOUND(M, S) + +#undef span_alert_header +#undef span_faction_alert_title +#undef span_faction_alert_minortitle +#undef span_faction_alert_subtitle +#undef span_faction_alert_text +#undef faction_alert_default_span +#undef faction_alert_colored_span diff --git a/code/__HELPERS/datums.dm b/code/__HELPERS/datums.dm new file mode 100644 index 0000000000000..7cf87c203b736 --- /dev/null +++ b/code/__HELPERS/datums.dm @@ -0,0 +1,9 @@ +///Check if a datum has not been deleted and is a valid source +/proc/is_valid_src(datum/source_datum) + if(istype(source_datum)) + return !QDELETED(source_datum) + return FALSE + +/proc/call_async(datum/source, proc_type, list/arguments) + set waitfor = FALSE + return call(source, proc_type)(arglist(arguments)) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index d29ff6dfdab30..6387ca4f6e1f1 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -41,14 +41,6 @@ return ERROR_NO_SUPPORT return NO_ERROR -/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) - // Same as above but for alien candidates. /proc/get_alien_candidate() var/mob/dead/observer/picked diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 668b273e5cb2c..18a6a5d991780 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -955,21 +955,19 @@ ColorTone(rgb, tone) /proc/generate_asset_name(file) return "asset.[md5(fcopy_rsc(file))]" -//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) +/** + * 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 = new("tmp/dummySave.sav") + var/savefile/dummySave = new WRITE_FILE(dummySave["dummy"], icon) var/iconData = dummySave.ExportText("dummy") var/list/partial = splittext(iconData, "{") - . = replacetext(copytext_char(partial[2], 3, -5), "\n", "") //if cleanup fails we want to still return the correct base64 - dummySave.Unlock() - dummySave = null - fdel("tmp/dummySave.sav") //if you get the idea to try and make this more optimized, make sure to still call unlock on the savefile after every write to unlock it. - + 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) @@ -1086,7 +1084,7 @@ ColorTone(rgb, tone) 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_atom & HTML_USE_INITAL_ICON_1)) + if(isnull(icon_state) || (isatom(thing) && thing.atom_flags & HTML_USE_INITAL_ICON_1)) icon_state = initial(thing.icon_state) if (isnull(dir)) dir = initial(thing.dir) diff --git a/code/__HELPERS/jatum.dm b/code/__HELPERS/jatum.dm index ff0643f071225..cb1d0f83485fa 100644 --- a/code/__HELPERS/jatum.dm +++ b/code/__HELPERS/jatum.dm @@ -125,7 +125,7 @@ json_structure["jatum\\new_arglist"] = _jatum_serialize_value(new_arglist, seen_references) for(var/var_name in D.vars) - if(var_name == "vars" || var_name == "parent_type" || var_name == "type") + if(var_name == "vars" || var_name == "parent_type" || var_name == "type" || var_name == "open_uis") continue var/d_value = D.vars[var_name] diff --git a/code/__HELPERS/logging/attack.dm b/code/__HELPERS/logging/attack.dm index 0dc3ab17e60c9..9cca53a23f349 100644 --- a/code/__HELPERS/logging/attack.dm +++ b/code/__HELPERS/logging/attack.dm @@ -33,12 +33,12 @@ var/postfix = "[sobject][saddition][hp]" var/message = "[what_done] [starget][postfix]" - user.log_message(message, LOG_ATTACK, color="red") + user?.log_message(message, LOG_ATTACK, color="red") //if(user != target) // ORIGINAL if(target && user != target) // RUTMGC EDITION var/reverse_message = "was [what_done] by [ssource][postfix]" - target.log_message(reverse_message, LOG_VICTIM, color="orange", log_globally=FALSE) + target?.log_message(reverse_message, LOG_VICTIM, color="orange", log_globally=FALSE) /// Logging for bombs detonating /proc/log_bomber(atom/user, details, atom/bomb, additional_details, message_admins = FALSE) diff --git a/code/__HELPERS/math.dm b/code/__HELPERS/math.dm index 31a1f2c098ac7..9f239e0daaf2e 100644 --- a/code/__HELPERS/math.dm +++ b/code/__HELPERS/math.dm @@ -49,7 +49,7 @@ for(var/obj/stuff_in_turf in to_turf) if(!stuff_in_turf.opacity) continue - if(!CHECK_BITFIELD(stuff_in_turf.flags_atom, ON_BORDER)) + if(!CHECK_BITFIELD(stuff_in_turf.atom_flags, ON_BORDER)) return FALSE if(ISDIAGONALDIR(stuff_in_turf.dir)) return FALSE diff --git a/code/__HELPERS/matrices.dm b/code/__HELPERS/matrices.dm index 65eb16b1b36af..ed5fbb89cc985 100644 --- a/code/__HELPERS/matrices.dm +++ b/code/__HELPERS/matrices.dm @@ -42,6 +42,13 @@ //doesn't have an object argument because this is "Stacking" with the animate call above //3 billion% intentional +/** + * Shear the transform on either or both axes. + * * x - X axis shearing + * * y - Y axis shearing + */ +/matrix/proc/Shear(x, y) + return Multiply(matrix(1, x, 0, y, 1, 0)) //Dumps the matrix data in format a-f /matrix/proc/tolist() diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index e6d8c69878529..89160bdb2cc1e 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -157,9 +157,11 @@ /proc/deadchat_broadcast(message, source = null, mob/follow_target = null, turf/turf_target = null, speaker_key = null, message_type = DEADCHAT_REGULAR) message = span_deadsay("[source][span_linkify("[message]")]") for(var/mob/M in GLOB.player_list) + if(!M.client) + continue var/chat_toggles = TOGGLES_CHAT_DEFAULT var/deadchat_toggles = TOGGLES_DEADCHAT_DEFAULT - if(M.client.prefs) + if(M?.client?.prefs) var/datum/preferences/prefs = M.client.prefs chat_toggles = prefs.toggles_chat deadchat_toggles = prefs.toggles_deadchat diff --git a/code/__HELPERS/pronouns.dm b/code/__HELPERS/pronouns.dm index 2c0382648dbe9..140baaac15a60 100644 --- a/code/__HELPERS/pronouns.dm +++ b/code/__HELPERS/pronouns.dm @@ -245,7 +245,7 @@ //humans need special handling, because they can have their gender hidden /mob/living/carbon/human/p_they(capitalized, temp_gender) var/list/obscured = check_obscured_slots() - var/skipface = (wear_mask?.flags_inv_hide & HIDEFACE || head?.flags_inv_hide & HIDEFACE) + var/skipface = (wear_mask?.inv_hide_flags & HIDEFACE || head?.inv_hide_flags & HIDEFACE) if((SLOT_W_UNIFORM & obscured) && skipface) temp_gender = PLURAL return ..() @@ -253,7 +253,7 @@ /mob/living/carbon/human/p_their(capitalized, temp_gender) var/list/obscured = check_obscured_slots() - var/skipface = (wear_mask?.flags_inv_hide & HIDEFACE || head?.flags_inv_hide & HIDEFACE) + var/skipface = (wear_mask?.inv_hide_flags & HIDEFACE || head?.inv_hide_flags & HIDEFACE) if((SLOT_W_UNIFORM & obscured) && skipface) temp_gender = PLURAL return ..() @@ -261,7 +261,7 @@ /mob/living/carbon/human/p_them(capitalized, temp_gender) var/list/obscured = check_obscured_slots() - var/skipface = (wear_mask?.flags_inv_hide & HIDEFACE || head?.flags_inv_hide & HIDEFACE) + var/skipface = (wear_mask?.inv_hide_flags & HIDEFACE || head?.inv_hide_flags & HIDEFACE) if((SLOT_W_UNIFORM & obscured) && skipface) temp_gender = PLURAL return ..() @@ -269,7 +269,7 @@ /mob/living/carbon/human/p_have(temp_gender) var/list/obscured = check_obscured_slots() - var/skipface = (wear_mask?.flags_inv_hide & HIDEFACE || head?.flags_inv_hide & HIDEFACE) + var/skipface = (wear_mask?.inv_hide_flags & HIDEFACE || head?.inv_hide_flags & HIDEFACE) if((SLOT_W_UNIFORM & obscured) && skipface) temp_gender = PLURAL return ..() @@ -277,7 +277,7 @@ /mob/living/carbon/human/p_are(temp_gender) var/list/obscured = check_obscured_slots() - var/skipface = (wear_mask?.flags_inv_hide & HIDEFACE || head?.flags_inv_hide & HIDEFACE) + var/skipface = (wear_mask?.inv_hide_flags & HIDEFACE || head?.inv_hide_flags & HIDEFACE) if((SLOT_W_UNIFORM & obscured) && skipface) temp_gender = PLURAL return ..() @@ -285,7 +285,7 @@ /mob/living/carbon/human/p_were(temp_gender) var/list/obscured = check_obscured_slots() - var/skipface = (wear_mask?.flags_inv_hide & HIDEFACE || head?.flags_inv_hide & HIDEFACE) + var/skipface = (wear_mask?.inv_hide_flags & HIDEFACE || head?.inv_hide_flags & HIDEFACE) if((SLOT_W_UNIFORM & obscured) && skipface) temp_gender = PLURAL return ..() @@ -293,7 +293,7 @@ /mob/living/carbon/human/p_do(temp_gender) var/list/obscured = check_obscured_slots() - var/skipface = (wear_mask?.flags_inv_hide & HIDEFACE || head?.flags_inv_hide & HIDEFACE) + var/skipface = (wear_mask?.inv_hide_flags & HIDEFACE || head?.inv_hide_flags & HIDEFACE) if((SLOT_W_UNIFORM & obscured) && skipface) temp_gender = PLURAL return ..() @@ -301,7 +301,7 @@ /mob/living/carbon/human/p_s(temp_gender) var/list/obscured = check_obscured_slots() - var/skipface = (wear_mask?.flags_inv_hide & HIDEFACE || head?.flags_inv_hide & HIDEFACE) + var/skipface = (wear_mask?.inv_hide_flags & HIDEFACE || head?.inv_hide_flags & HIDEFACE) if((SLOT_W_UNIFORM & obscured) && skipface) temp_gender = PLURAL return ..() @@ -309,7 +309,7 @@ /mob/living/carbon/human/p_es(temp_gender) var/list/obscured = check_obscured_slots() - var/skipface = (wear_mask?.flags_inv_hide & HIDEFACE || head?.flags_inv_hide & HIDEFACE) + var/skipface = (wear_mask?.inv_hide_flags & HIDEFACE || head?.inv_hide_flags & HIDEFACE) if((SLOT_W_UNIFORM & obscured) && skipface) temp_gender = PLURAL return ..() diff --git a/code/__HELPERS/spatial_info.dm b/code/__HELPERS/spatial_info.dm index a351e6f74994a..64cc762b92893 100644 --- a/code/__HELPERS/spatial_info.dm +++ b/code/__HELPERS/spatial_info.dm @@ -35,9 +35,9 @@ /mob/oranges_ear/Initialize(mapload) SHOULD_CALL_PARENT(FALSE) - if(flags_atom & INITIALIZED) + if(atom_flags & INITIALIZED) stack_trace("Warning: [src]([type]) initialized multiple times!") - flags_atom |= INITIALIZED + atom_flags |= INITIALIZED return INITIALIZE_HINT_NORMAL /mob/oranges_ear/Destroy(force) diff --git a/code/__HELPERS/traits.dm b/code/__HELPERS/traits.dm new file mode 100644 index 0000000000000..0829b3dc8d0e7 --- /dev/null +++ b/code/__HELPERS/traits.dm @@ -0,0 +1,44 @@ +#define TRAIT_CALLBACK_ADD(target, trait, source) CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(___TraitAdd), ##target, ##trait, ##source) +#define TRAIT_CALLBACK_REMOVE(target, trait, source) CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(___TraitRemove), ##target, ##trait, ##source) + +///DO NOT USE ___TraitAdd OR ___TraitRemove as a replacement for ADD_TRAIT / REMOVE_TRAIT defines. To be used explicitly for callback. +/proc/___TraitAdd(target, trait, source) + if(!target || !trait || !source) + return + + if(islist(target)) + for(var/datum/listed_target in target) + ADD_TRAIT(listed_target, trait, source) + return + + ASSERT(isdatum(target), "Invalid target used in TRAIT_CALLBACK_ADD! Expected a datum reference, got [target] instead.") + + var/datum/datum_target = target + ADD_TRAIT(datum_target, trait, source) + +///DO NOT USE ___TraitAdd OR ___TraitRemove as a replacement for ADD_TRAIT / REMOVE_TRAIT defines. To be used explicitly for callback. +/proc/___TraitRemove(target, trait, source) + if(!target || !trait || !source) + return + + if(islist(target)) + for(var/datum/listed_target in target) + REMOVE_TRAIT(listed_target, trait, source) + return + + ASSERT(isdatum(target), "Invalid target used in TRAIT_CALLBACK_REMOVE! Expected a datum reference, got [target] instead.") + + var/datum/datum_target = target + REMOVE_TRAIT(datum_target, trait, source) + +/// Proc that handles adding multiple traits to a target via a list. Must have a common source and target. +/datum/proc/add_traits(list/list_of_traits, source) + ASSERT(islist(list_of_traits), "Invalid arguments passed to add_traits! Invoked on [src] with [list_of_traits], source being [source].") + for(var/trait in list_of_traits) + ADD_TRAIT(src, trait, source) + +/// Proc that handles removing multiple traits from a target via a list. Must have a common source and target. +/datum/proc/remove_traits(list/list_of_traits, source) + ASSERT(islist(list_of_traits), "Invalid arguments passed to remove_traits! Invoked on [src] with [list_of_traits], source being [source].") + for(var/trait in list_of_traits) + REMOVE_TRAIT(src, trait, source) diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 6f52ce997359a..76b1c1e65ac45 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -5,83 +5,6 @@ return splittext(trim(file2text(filename)),seperator) return splittext(file2text(filename),seperator) -//Returns an integer given a hex input -/proc/hex2num(hex) - if(!istext(hex)) - return - - var/num = 0 - var/power = 0 - var/i = length(hex) - - while(i > 0) - var/char = copytext(hex, i, i + 1) - switch(char) - if("9", "8", "7", "6", "5", "4", "3", "2", "1") - num += text2num(char) * 16 ** power - if("a", "A") - num += 16 ** power * 10 - if("b", "B") - num += 16 ** power * 11 - if("c", "C") - num += 16 ** power * 12 - if("d", "D") - num += 16 ** power * 13 - if("e", "E") - num += 16 ** power * 14 - if("f", "F") - num += 16 ** power * 15 - else - return - power++ - i-- - return num - - -//Returns the hex value of a number given a value assumed to be a base-ten value -/proc/num2hex(num, placeholder) - if(placeholder == null) - placeholder = 2 - - if(!isnum(num)) - return - - if(num == 0) - var/final = "" - for(var/i in 1 to placeholder) - final = "[final]0" - return final - - var/hex = "" - var/i = 0 - while(16 ** i < num) - i++ - var/power = null - power = i - 1 - while(power >= 0) - var/val = round(num / 16 ** power) - num -= val * 16 ** power - switch(val) - if(9, 8, 7, 6, 5, 4, 3, 2, 1, 0) - hex += "[val]" - if(10) - hex += "A" - if(11) - hex += "B" - if(12) - hex += "C" - if(13) - hex += "D" - if(14) - hex += "E" - if(15) - hex += "F" - else - power-- - while(length(hex) < placeholder) - hex = "0[hex]" - return hex - //Turns a direction into text /proc/num2dir(direction) switch(direction) @@ -177,7 +100,6 @@ return WEST return NORTH|WEST - //returns the north-zero clockwise angle in degrees, given a direction /proc/dir2angle(D) switch(D) @@ -251,6 +173,8 @@ . += "[seperator]+RUNTIME" if(rights & R_LOG) . += "[seperator]+LOG" + if(rights & R_POLLS) + . += "[seperator]+POLLS" /proc/ui_style2icon(ui_style) @@ -372,3 +296,26 @@ /// for use inside of browse() calls to html assets that might be loaded on a cdn. /proc/url2htmlloader(url) return {""} + +//word of warning: using a matrix like this as a color value will simplify it back to a string after being set +///Takes a hex color provided as string and returns the proper color matrix using hex2num. +/proc/color_hex2color_matrix(string) + var/length = length(string) + if((length != 7 && length != 9) || length != length_char(string)) + return color_matrix_identity() + var/r = hex2num(copytext(string, 2, 4))/255 + var/g = hex2num(copytext(string, 4, 6))/255 + var/b = hex2num(copytext(string, 6, 8))/255 + var/a = 1 + if(length == 9) + a = hex2num(copytext(string, 8, 10))/255 + if(!isnum(r) || !isnum(g) || !isnum(b) || !isnum(a)) + return color_matrix_identity() + return list(r,0,0,0, 0,g,0,0, 0,0,b,0, 0,0,0,a, 0,0,0,0) + +///will drop all values not on the diagonal +///returns a hex color +/proc/color_matrix2color_hex(list/the_matrix) + if(!istype(the_matrix) || the_matrix.len != 20) + return "#ffffffff" + return rgb(the_matrix[1]*255, the_matrix[6]*255, the_matrix[11]*255, the_matrix[16]*255) diff --git a/code/__HELPERS/type_processing.dm b/code/__HELPERS/type_processing.dm new file mode 100644 index 0000000000000..6ad09353e1679 --- /dev/null +++ b/code/__HELPERS/type_processing.dm @@ -0,0 +1,74 @@ +///Turns a list of typepaths into 'fancy' titles for admins. +/proc/make_types_fancy(list/types) + if(ispath(types)) + types = list(types) + . = list() + for(var/type in types) + var/typename = "[type]" + var/static/list/TYPES_SHORTCUTS = list( + /obj/effect/decal/cleanable = "CLEANABLE", + /obj/item/radio/headset = "HEADSET", + /obj/item/clothing/head/helmet/space = "SPESSHELMET", + /obj/item/book/manual = "MANUAL", + /obj/item/reagent_containers = "REAGENT_CONTAINERS", + /obj/machinery/atmospherics = "ATMOS_MECH", + /obj/machinery/portable_atmospherics = "PORT_ATMOS", + /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack = "MECHA_MISSILE_RACK", + /obj/item/mecha_parts/mecha_equipment = "MECHA_EQUIP", + /obj/item/organ = "ORGAN", + /obj/item = "ITEM", + /obj/machinery = "MACHINERY", + /obj/effect = "EFFECT", + /obj = "O", + /datum = "D", + /turf/open = "OPEN", + /turf/closed = "CLOSED", + /turf = "T", + /mob/living/carbon = "CARBON", + /mob/living/simple_animal = "SIMPLE", + /mob/living = "LIVING", + /mob = "M" + ) + for (var/tn in TYPES_SHORTCUTS) + if(copytext(typename, 1, length("[tn]/") + 1) == "[tn]/" /*findtextEx(typename,"[tn]/",1,2)*/ ) + typename = TYPES_SHORTCUTS[tn] + copytext(typename, length("[tn]/")) + break + .[typename] = type + +///Generates a static list of 'fancy' atom types, or returns that if its already been generated. +/proc/get_fancy_list_of_atom_types() + var/static/list/pre_generated_list + if(!pre_generated_list) //init + pre_generated_list = make_types_fancy(typesof(/atom)) + return pre_generated_list + +///Generates a static list of 'fancy' datum types, excluding everything atom, or returns that if its already been generated. +/proc/get_fancy_list_of_datum_types() + var/static/list/pre_generated_list + if(!pre_generated_list) //init + pre_generated_list = make_types_fancy(sort_list(typesof(/datum) - typesof(/atom))) + return pre_generated_list + +/** + * Takes a given fancy list and filters out a given filter text. + * Args: + * fancy_list - The list provided we filter. + * filter - the text we use to filter fancy_list + */ +/proc/filter_fancy_list(list/fancy_list, filter as text) + var/list/matches = new + var/end_len = -1 + var/list/endcheck = splittext(filter, "!") + if(endcheck.len > 1) + filter = endcheck[1] + end_len = length_char(filter) + + for(var/key in fancy_list) + var/value = fancy_list[key] + if(findtext("[key]", filter, -end_len) || findtext("[value]", filter, -end_len)) + matches[key] = value + return matches + +///Splits the type with parenthesis between each word so admins visually tell it is a typepath. +/proc/return_typenames(type) + return splittext("[type]", "/") diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 478f483e98de5..86348e043bd51 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -21,8 +21,6 @@ #undef DELTA_CALC -#define UNTIL(X) while(!(X)) stoplag() - /** * NAMEOF: Compile time checked variable name to string conversion * evaluates to a string equal to "X", but compile errors if X isn't a var on datum. @@ -139,6 +137,7 @@ else if(. >= 360) . -= 360 +///Returns one of the 8 directions based on an angle /proc/angle_to_dir(angle) switch(angle) if(338 to 360, 0 to 22) @@ -158,6 +157,18 @@ if(293 to 337) return NORTHWEST +///Returns one of the 4 cardinal directions based on an angle +/proc/angle_to_cardinal_dir(angle) + switch(angle) + if(316 to 360, 0 to 45) + return NORTH + if(46 to 135) + return EAST + if(136 to 225) + return SOUTH + if(226 to 315) + return WEST + ///returns degrees between two angles /proc/get_between_angles(degree_one, degree_two) var/angle = abs(degree_one - degree_two) % 360 @@ -207,7 +218,7 @@ continue if((object.allow_pass_flags & PASS_AIR) && air_pass) continue - if(object.flags_atom & ON_BORDER && object.dir != direction) + if(object.atom_flags & ON_BORDER && object.dir != direction) continue return TRUE return FALSE @@ -594,9 +605,7 @@ /proc/get_cardinal_dir(atom/A, atom/B) - var/dx = abs(B.x - A.x) - var/dy = abs(B.y - A.y) - return get_dir(A, B) & (rand() * (dx+dy) < dy ? 3 : 12) + return angle_to_cardinal_dir(Get_Angle(get_turf(A), get_turf(B))) /// If given a diagonal dir, return a corresponding cardinal dir. East/west preferred /proc/closest_cardinal_dir(dir) @@ -1016,9 +1025,9 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) /mob/dview/Initialize(mapload) //Properly prevents this mob from gaining huds or joining any global lists SHOULD_CALL_PARENT(FALSE) - if(flags_atom & INITIALIZED) + if(atom_flags & INITIALIZED) stack_trace("Warning: [src]([type]) initialized multiple times!") - flags_atom |= INITIALIZED + atom_flags |= INITIALIZED return INITIALIZE_HINT_NORMAL /mob/dview/Destroy(force = FALSE) @@ -1095,11 +1104,11 @@ will handle it, but: for(var/client/C in show_to) C.images += I animate(I, transform = 0, alpha = 255, time = 0.5 SECONDS, easing = ELASTIC_EASING) - addtimer(CALLBACK(GLOBAL_PROC, TYPE_PROC_REF(/, fade_out), I), duration - 0.5 SECONDS) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(fade_out), I), duration - 0.5 SECONDS) /proc/fade_out(image/I, list/show_to) animate(I, alpha = 0, time = 0.5 SECONDS, easing = EASE_IN) - addtimer(CALLBACK(GLOBAL_PROC, TYPE_PROC_REF(/, remove_images_from_clients), I, show_to), 0.5 SECONDS) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(remove_images_from_clients), I, show_to), 0.5 SECONDS) //takes an input_key, as text, and the list of keys already used, outputting a replacement key in the format of "[input_key] ([number_of_duplicates])" if it finds a duplicate //use this for lists of things that might have the same name, like mobs or objects, that you plan on giving to a player as input diff --git a/code/__byond_version_compat.dm b/code/__byond_version_compat.dm index 445bfee77327e..753b8fe4b47ec 100644 --- a/code/__byond_version_compat.dm +++ b/code/__byond_version_compat.dm @@ -9,13 +9,6 @@ #endif #endif -//Update this whenever the byond version is stable so people stop updating to hilariously broken versions -#define MAX_COMPILER_VERSION 515 -#define MAX_COMPILER_BUILD 1620 -#if DM_VERSION > MAX_COMPILER_VERSION || DM_BUILD > MAX_COMPILER_BUILD -#warn WARNING! your byond version is over the recommended version! There may be unexpected byond bugs! -#endif - // So we want to have compile time guarantees these methods exist on local type // We use wrappers for this in case some part of the api ever changes, and to make their function more clear // For the record: GLOBAL_VERB_REF would be useless as verbs can't be global. diff --git a/code/_globalvars/admin.dm b/code/_globalvars/admin.dm index 2816cacf8a3c7..30630c5e7780f 100644 --- a/code/_globalvars/admin.dm +++ b/code/_globalvars/admin.dm @@ -35,3 +35,19 @@ GLOBAL_PROTECT(admin_ranks) GLOBAL_LIST_EMPTY(protected_ranks) GLOBAL_PROTECT(protected_ranks) + +// A list of all the special byond lists that need to be handled different by vv +GLOBAL_LIST_INIT(vv_special_lists, init_special_list_names()) + +/proc/init_special_list_names() + var/list/output = list() + var/obj/sacrifice = new + for(var/varname in sacrifice.vars) + var/value = sacrifice.vars[varname] + if(!islist(value)) + if(!isdatum(value) && hascall(value, "Cut")) + output += varname + continue + if(isnull(locate(REF(value)))) + output += varname + return output diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 9902c088eaf38..961a3cf7f1d46 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -15,7 +15,8 @@ GLOBAL_LIST_INIT(bitfields, list( "SPAWN" = R_SPAWN, "DBRANKS" = R_DBRANKS, "RUNTIME" = R_RUNTIME, - "LOG" = R_LOG + "LOG" = R_LOG, + "POLLS" = R_POLLS ), "machine_stat" = list( "BROKEN" = BROKEN, @@ -28,7 +29,7 @@ GLOBAL_LIST_INIT(bitfields, list( "KNOCKED_DOWN" = KNOCKED_DOWN, "MACHINE_DO_NOT_PROCESS" = MACHINE_DO_NOT_PROCESS ), - "flags_gun_features" = list( + "gun_features_flags" = list( "GUN_CAN_POINTBLANK" = GUN_CAN_POINTBLANK, "GUN_UNUSUAL_DESIGN" = GUN_UNUSUAL_DESIGN, "GUN_AMMO_COUNTER" = GUN_AMMO_COUNTER, @@ -47,12 +48,12 @@ GLOBAL_LIST_INIT(bitfields, list( "GUN_SHOWS_LOADED" = GUN_SHOWS_LOADED, "GUN_SMOKE_PARTICLES" = GUN_SMOKE_PARTICLES ), - "flags_flamer_features" = list( + "flamer_features_flags" = list( "FLAMER_IS_LIT" = FLAMER_IS_LIT, "FLAMER_NO_LIT_OVERLAY" = FLAMER_NO_LIT_OVERLAY, "FLAMER_USES_GUN_FLAMES" = FLAMER_USES_GUN_FLAMES ), - "flags_magazine" = list( + "magazine_flags" = list( "MAGAZINE_REFILLABLE" = MAGAZINE_REFILLABLE, "MAGAZINE_HANDFUL" = MAGAZINE_HANDFUL, "MAGAZINE_WORN" = MAGAZINE_WORN, @@ -81,7 +82,7 @@ GLOBAL_LIST_INIT(bitfields, list( "BE_SQUAD_STRICT" = BE_SQUAD_STRICT, "BE_ALIEN_UNREVIVABLE" = BE_ALIEN_UNREVIVABLE ), - "flags_atom" = list( + "atom_flags" = list( "UNUSED_RESERVATION_TURF_1" = UNUSED_RESERVATION_TURF_1, "AI_BLOCKED" = AI_BLOCKED, "NOINTERACT" = NOINTERACT, @@ -99,7 +100,7 @@ GLOBAL_LIST_INIT(bitfields, list( "SHUTTLE_IMMUNE" = SHUTTLE_IMMUNE, "HTML_USE_INITAL_ICON_1" = HTML_USE_INITAL_ICON_1, ), - "flags_area" = list( + "area_flags" = list( "DISALLOW_WEEDING" = DISALLOW_WEEDING, "NEAR_FOB" = NEAR_FOB, "NO_DROPPOD" = NO_DROPPOD, @@ -112,7 +113,6 @@ GLOBAL_LIST_INIT(bitfields, list( "CAN_BE_HIT" = CAN_BE_HIT, "PROJ_IGNORE_DENSITY" = PROJ_IGNORE_DENSITY, "LIGHT_CAN_BE_SHUT" = LIGHT_CAN_BE_SHUT, - "AUTOBALANCE_CHECK" = AUTOBALANCE_CHECK ), "appearance_flags" = list( "LONG_GLIDE" = LONG_GLIDE, @@ -144,7 +144,8 @@ GLOBAL_LIST_INIT(bitfields, list( "PASS_THROW" = PASS_THROW, "PASS_PROJECTILE" = PASS_PROJECTILE, "PASS_AIR" = PASS_AIR, - "PASS_WALKOVER" = PASS_WALKOVER + "PASS_WALKOVER" = PASS_WALKOVER, + "PASS_TANK" = PASS_TANK, ), "pass_flags" = list( "PASS_LOW_STRUCTURE" = PASS_LOW_STRUCTURE, @@ -157,7 +158,8 @@ GLOBAL_LIST_INIT(bitfields, list( "PASS_THROW" = PASS_THROW, "PASS_PROJECTILE" = PASS_PROJECTILE, "PASS_AIR" = PASS_AIR, - "PASS_WALKOVER" = PASS_WALKOVER + "PASS_WALKOVER" = PASS_WALKOVER, + "PASS_TANK" = PASS_TANK, ), "status_flags" = list( "CANSTUN" = CANSTUN, @@ -171,7 +173,7 @@ GLOBAL_LIST_INIT(bitfields, list( "TK_USER" = TK_USER, "CANUNCONSCIOUS" = CANUNCONSCIOUS, "CANCONFUSE" = CANCONFUSE, - "INCORPOREAL" = INCORPOREAL + "INCORPOREAL" = INCORPOREAL, ), "muted" = list( "MUTE_IC" = MUTE_IC, @@ -188,7 +190,7 @@ GLOBAL_LIST_INIT(bitfields, list( "PIPING_DEFAULT_LAYER_ONLY" = PIPING_DEFAULT_LAYER_ONLY, "PIPING_CARDINAL_AUTONORMALIZE" = PIPING_CARDINAL_AUTONORMALIZE ), - "flags_inv_hide" = list( + "inv_hide_flags" = list( "HIDEGLOVES" = HIDEGLOVES, "HIDESUITSTORAGE" = HIDESUITSTORAGE, "HIDEJUMPSUIT" = HIDEJUMPSUIT, @@ -202,7 +204,7 @@ GLOBAL_LIST_INIT(bitfields, list( "HIDEFACE" = HIDEFACE, "HIDE_EXCESS_HAIR" = HIDE_EXCESS_HAIR ), - "flags_inventory" = list( + "inventory_flags" = list( "NOSLIPPING" = NOSLIPPING, "COVEREYES" = COVEREYES, "COVERMOUTH" = COVERMOUTH, @@ -211,7 +213,7 @@ GLOBAL_LIST_INIT(bitfields, list( "NOPRESSUREDMAGE" = NOPRESSUREDMAGE, "NOQUICKEQUIP" = NOQUICKEQUIP ), - "flags_armor_features" = list( + "armor_features_flags" = list( "ARMOR_SQUAD_OVERLAY" = ARMOR_SQUAD_OVERLAY, "ARMOR_LAMP_OVERLAY" = ARMOR_LAMP_OVERLAY, "ARMOR_LAMP_ON" = ARMOR_LAMP_ON, @@ -219,13 +221,13 @@ GLOBAL_LIST_INIT(bitfields, list( "ARMOR_NO_DECAP" = ARMOR_NO_DECAP, "ARMOR_FIRE_RESISTANT" = ARMOR_FIRE_RESISTANT ), - "flags_marine_helmet" = list( + "marine_helmet_flags" = list( "HELMET_SQUAD_OVERLAY" = HELMET_SQUAD_OVERLAY, "HELMET_GARB_OVERLAY" = HELMET_GARB_OVERLAY, "HELMET_STORE_GARB" = HELMET_STORE_GARB, "HELMET_IS_DAMAGED" = HELMET_IS_DAMAGED ), - "flags_equip_slot" = list( + "equip_slot_flags" = list( "ITEM_SLOT_OCLOTHING" = ITEM_SLOT_OCLOTHING, "ITEM_SLOT_ICLOTHING" = ITEM_SLOT_ICLOTHING, "ITEM_SLOT_GLOVES" = ITEM_SLOT_GLOVES, @@ -240,7 +242,9 @@ GLOBAL_LIST_INIT(bitfields, list( "ITEM_SLOT_R_POCKET" = ITEM_SLOT_R_POCKET, "ITEM_SLOT_L_POCKET" = ITEM_SLOT_L_POCKET, "ITEM_SLOT_SUITSTORE" = ITEM_SLOT_SUITSTORE, - "ITEM_SLOT_HANDCUFF" = ITEM_SLOT_HANDCUFF + "ITEM_SLOT_HANDCUFF" = ITEM_SLOT_HANDCUFF, + "ITEM_SLOT_L_HAND" = ITEM_SLOT_L_HAND, + "ITEM_SLOT_R_HAND" = ITEM_SLOT_R_HAND ), "thermal_protection_flags" = list( "HEAD" = HEAD, @@ -257,7 +261,7 @@ GLOBAL_LIST_INIT(bitfields, list( "HAND_LEFT" = HAND_LEFT, "HAND_RIGHT" = HAND_RIGHT ), - "flags_armor_protection" = list( + "armor_protection_flags" = list( "HEAD" = HEAD, "FACE" = FACE, "EYES" = EYES, @@ -272,7 +276,7 @@ GLOBAL_LIST_INIT(bitfields, list( "HAND_LEFT" = HAND_LEFT, "HAND_RIGHT" = HAND_RIGHT ), - "flags_cold_protection" = list( + "cold_protection_flags" = list( "HEAD" = HEAD, "FACE" = FACE, "EYES" = EYES, @@ -287,7 +291,7 @@ GLOBAL_LIST_INIT(bitfields, list( "HAND_LEFT" = HAND_LEFT, "HAND_RIGHT" = HAND_RIGHT ), - "flags_heat_protection" = list( + "heat_protection_flags" = list( "HEAD" = HEAD, "FACE" = FACE, "EYES" = EYES, @@ -303,30 +307,13 @@ GLOBAL_LIST_INIT(bitfields, list( "HAND_RIGHT" = HAND_RIGHT ), "update_overlay" = list( - "APC_UPOVERLAY_CHARGEING0" = APC_UPOVERLAY_CHARGEING0, - "APC_UPOVERLAY_CHARGEING1" = APC_UPOVERLAY_CHARGEING1, - "APC_UPOVERLAY_CHARGEING2" = APC_UPOVERLAY_CHARGEING2, - "APC_UPOVERLAY_EQUIPMENT0" = APC_UPOVERLAY_EQUIPMENT0, - "APC_UPOVERLAY_EQUIPMENT1" = APC_UPOVERLAY_EQUIPMENT1, - "APC_UPOVERLAY_EQUIPMENT2" = APC_UPOVERLAY_EQUIPMENT2, - "APC_UPOVERLAY_LIGHTING0" = APC_UPOVERLAY_LIGHTING0, - "APC_UPOVERLAY_LIGHTING1" = APC_UPOVERLAY_LIGHTING1, - "APC_UPOVERLAY_LIGHTING2" = APC_UPOVERLAY_LIGHTING2, - "APC_UPOVERLAY_ENVIRON0" = APC_UPOVERLAY_ENVIRON0, - "APC_UPOVERLAY_ENVIRON1" = APC_UPOVERLAY_ENVIRON1, - "APC_UPOVERLAY_ENVIRON2" = APC_UPOVERLAY_ENVIRON2, - "APC_UPOVERLAY_LOCKED" = APC_UPOVERLAY_LOCKED, - "APC_UPOVERLAY_OPERATING" = APC_UPOVERLAY_OPERATING, - "APC_UPOVERLAY_CELL_IN" = APC_UPOVERLAY_CELL_IN, - "APC_UPOVERLAY_BLUESCREEN" = APC_UPOVERLAY_BLUESCREEN + "UPOVERLAY_OPERATING" = UPOVERLAY_OPERATING, + "UPOVERLAY_LOCKED" = UPOVERLAY_LOCKED, ), "update_state" = list( - "UPSTATE_OPENED1" = UPSTATE_OPENED1, - "UPSTATE_OPENED2" = UPSTATE_OPENED2, - "UPSTATE_MAINT" = UPSTATE_MAINT, "UPSTATE_BROKE" = UPSTATE_BROKE, + "UPSTATE_MAINT" = UPSTATE_MAINT, "UPSTATE_WIREEXP" = UPSTATE_WIREEXP, - "UPSTATE_ALLGOOD" = UPSTATE_ALLGOOD ), "apcwires" = list( "APC_WIRE_IDSCAN" = APC_WIRE_IDSCAN, @@ -438,22 +425,16 @@ GLOBAL_LIST_INIT(bitfields, list( "CONFIG_ENTRY_LOCKED" = CONFIG_ENTRY_LOCKED, "CONFIG_ENTRY_HIDDEN" = CONFIG_ENTRY_HIDDEN ), - "flags_ammo_behavior" = list( - "AMMO_EXPLOSIVE" = AMMO_EXPLOSIVE, + "ammo_behavior_flags" = list( + "AMMO_TARGET_TURF" = AMMO_TARGET_TURF, "AMMO_XENO" = AMMO_XENO, "AMMO_UNWIELDY" = AMMO_UNWIELDY, "AMMO_ENERGY" = AMMO_ENERGY, - "AMMO_ROCKET" = AMMO_ROCKET, "AMMO_SNIPER" = AMMO_SNIPER, "AMMO_INCENDIARY" = AMMO_INCENDIARY, "AMMO_SKIPS_ALIENS" = AMMO_SKIPS_ALIENS, - "AMMO_IS_SILENCED" = AMMO_IS_SILENCED, - "AMMO_IGNORE_ARMOR" = AMMO_IGNORE_ARMOR, - "AMMO_IGNORE_RESIST" = AMMO_IGNORE_RESIST, "AMMO_BALLISTIC" = AMMO_BALLISTIC, - "AMMO_SUNDERING" = AMMO_SUNDERING, "AMMO_SPECIAL_PROCESS" = AMMO_SPECIAL_PROCESS, - "AMMO_SENTRY" = AMMO_SENTRY, "AMMO_FLAME" = AMMO_FLAME, "AMMO_IFF" = AMMO_IFF, "AMMO_HITSCAN" = AMMO_HITSCAN, @@ -463,7 +444,7 @@ GLOBAL_LIST_INIT(bitfields, list( "AMMO_PASS_THROUGH_MOB" = AMMO_PASS_THROUGH_MOB, "AMMO_SOUND_PITCH" = AMMO_SOUND_PITCH ), - "flags_attach_features" = list( + "attach_features_flags" = list( "ATTACH_REMOVABLE" = ATTACH_REMOVABLE, "ATTACH_ACTIVATION" = ATTACH_ACTIVATION, "ATTACH_SAME_ICON" = ATTACH_SAME_ICON, @@ -473,11 +454,11 @@ GLOBAL_LIST_INIT(bitfields, list( "ATTACH_BYPASS_ALLOWED_LIST" = ATTACH_BYPASS_ALLOWED_LIST, "ATTACH_DIFFERENT_MOB_ICON_STATE" = ATTACH_DIFFERENT_MOB_ICON_STATE ), - "flags_barrier" = list( + "barrier_flags" = list( "HANDLE_BARRIER_CHANCE" = HANDLE_BARRIER_CHANCE, "HANDLE_BARRIER_BLOCK" = HANDLE_BARRIER_BLOCK ), - "flags_item" = list( + "item_flags" = list( "IN_INVENTORY" = IN_INVENTORY, "NOBLUDGEON" = NOBLUDGEON, "DELONDROP" = DELONDROP, @@ -497,11 +478,16 @@ GLOBAL_LIST_INIT(bitfields, list( "DEPLOYED_WRENCH_DISASSEMBLE" = DEPLOYED_WRENCH_DISASSEMBLE, "DEPLOYED_ANCHORED_FIRING_ONLY" = DEPLOYED_ANCHORED_FIRING_ONLY, "FULLY_WIELDED" = FULLY_WIELDED, - "HAS_UNDERLAY" = HAS_UNDERLAY + "HAS_UNDERLAY" = HAS_UNDERLAY, + "AUTOBALANCE_CHECK" = AUTOBALANCE_CHECK, ), - "flags_storage" = list( + "storage_flags" = list( "BYPASS_VENDOR_CHECK" = BYPASS_VENDOR_CHECK, ), + "id_flags" = list( + "CAN_BUY_LOADOUT" = CAN_BUY_LOADOUT, + "USED_GHMME" = USED_GHMME, + ), "ghost_hud" = list( "GHOST_HUD_MED" = GHOST_HUD_MED, "GHOST_HUD_SEC" = GHOST_HUD_SEC, @@ -525,6 +511,7 @@ GLOBAL_LIST_INIT(bitfields, list( "RADIAL_STACKS" = RADIAL_STACKS, "AUTO_INTERACT_DEPLOYABLES" = AUTO_INTERACT_DEPLOYABLES, "RADIAL_LASERGUNS" = RADIAL_LASERGUNS, + "DIRECTIONAL_ATTACKS" = DIRECTIONAL_ATTACKS, ), "toggles_deadchat" = list( "DISABLE_DEATHRATTLE" = DISABLE_DEATHRATTLE, @@ -546,7 +533,7 @@ GLOBAL_LIST_INIT(bitfields, list( "CHAT_STATISTICS" = CHAT_STATISTICS, "CHAT_LOOC" = CHAT_LOOC ), - "flags_scuttle" = list( + "scuttle_flags" = list( "FLAGS_EVACUATION_DENY" = FLAGS_EVACUATION_DENY, "FLAGS_SELF_DESTRUCT_DENY" = FLAGS_SELF_DESTRUCT_DENY, "FLAGS_SDEVAC_TIMELOCK" = FLAGS_SDEVAC_TIMELOCK @@ -617,7 +604,6 @@ GLOBAL_LIST_INIT(bitfields, list( "ABILITY_IGNORE_SELECTED_ABILITY" = ABILITY_IGNORE_SELECTED_ABILITY, "ABILITY_DO_AFTER_ATTACK" = ABILITY_DO_AFTER_ATTACK, "ABILITY_USE_BURROWED" = ABILITY_USE_BURROWED, - "ABILITY_USE_ROOTED" = ABILITY_USE_ROOTED ), "pipe_flags" = list( "PIPING_ALL_LAYER" = PIPING_ALL_LAYER, diff --git a/code/_globalvars/colorvars.dm b/code/_globalvars/colorvars.dm new file mode 100644 index 0000000000000..c49a3d90dfc0e --- /dev/null +++ b/code/_globalvars/colorvars.dm @@ -0,0 +1 @@ +GLOBAL_LIST_INIT(color_vars, list("color")) diff --git a/code/_globalvars/lists/client.dm b/code/_globalvars/lists/client.dm index a62f8f1c8fd80..259dfbff12fe7 100644 --- a/code/_globalvars/lists/client.dm +++ b/code/_globalvars/lists/client.dm @@ -10,18 +10,19 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( "1408" = "bug preventing client display overrides from working leads to clients being able to see things/mobs they shouldn't be able to see", )) // This is a mapping from JS keys to Byond - ref: https://keycode.info/ +// TODO: tgui has keyCodeToByond already GLOBAL_LIST_INIT(_kbMap, list( - "UP" = "North", - "RIGHT" = "East", - "DOWN" = "South", - "LEFT" = "West", + "ARROWUP" = "North", + "ARROWRIGHT" = "East", + "ARROWDOWN" = "South", + "ARROWLEFT" = "West", "INSERT" = "Insert", "HOME" = "Northwest", "PAGEUP" = "Northeast", - "DEL" = "Delete", + "DELETE" = "Delete", "END" = "Southwest", "PAGEDOWN" = "Southeast", - "SPACEBAR" = "Space", + " " = "Space", "ALT" = "Alt", "SHIFT" = "Shift", "CONTROL" = "Ctrl" diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index affca044d8edc..bed10110f86b2 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -107,6 +107,7 @@ GLOBAL_LIST_INIT(playable_icons, list( "mech_pilot", "medical", "pilot", + "transportofficer", "praetorian", "private", "puppeteer", @@ -141,7 +142,7 @@ GLOBAL_LIST_INIT(playable_squad_icons, list( "smartgunner", )) -GLOBAL_LIST_INIT(campaign_icon_types, list( +GLOBAL_LIST_INIT(campaign_asset_icon_types, list( "b18", "gorgon", "medkit", @@ -208,29 +209,130 @@ GLOBAL_LIST_INIT(campaign_mission_icon_types, list( "final_tgmc", )) -/* RUTGMC DELETION BEGIN, moved to modular +GLOBAL_LIST_INIT(campaign_perk_icon_types, list( + "health_1", + "soft_footed", + "health_2", + "cqc_1", + "cqc_2", + "melee_1", + "melee_2", + "pistols", + "shotguns", + "rifles", + "smgs", + "heavy", + "construction", + "medical", + "stamina_1", + "stamina_2", + "leadership", + "smartguns", + "firearms", + "overclock", + "sword", + "axe", +)) + +GLOBAL_LIST_INIT(campaign_loadout_item_icon_types, list( + "default", + "empty", + "light_armour_shield", + "medium_armour_shield", + "heavy_armour_shield", + "light_armour", + "medium_armour", + "heavy_armour", + "gorgon", + "medkit", + "materials", + "tyr", + "lorica", + "riot_shield", + "grenade", + "shotgun", + "scout", + "ballistic", + "lasergun", + "volkite", + "smartgun", + "helmet", + "boots", + "machete", + "axe", + "pistol", + "smg", + "construction", + "tx55", + "m25", + "m240", + "m1911c", + "rt3", + "88m4", + "v11", + "t19", + "t90", + "sg29", + "t18", + "t12", + "alf51b", + "tx11", + "sshotgun", + "tx15", + "t160", + "t60", + "v34", + "ak47", + "v41", + "rpg", + "t35", +)) + GLOBAL_LIST_INIT(minimap_icons, init_minimap_icons()) +///Populates minimap_icons /proc/init_minimap_icons() . = list() for(var/icon_state in GLOB.playable_icons) - .[icon_state] = icon2base64(icon('icons/UI_icons/map_blips.dmi', icon_state, frame = 1)) //RUTGMC edit - icon change -RUTGMC EDIT END */ + .[icon_state] = icon2base64(icon('modular_RUtgmc/icons/UI_icons/map_blips.dmi', icon_state, frame = 1)) //RUTGMC edit - icon change -GLOBAL_LIST_INIT(campaign_icons, init_campaign_icons()) -/proc/init_campaign_icons() +GLOBAL_LIST_INIT(campaign_asset_icons, init_campaign_asset_icons()) + +///Populates campaign_asset_icons +/proc/init_campaign_asset_icons() . = list() var/list/colours = list("green", "orange", "grey", "red", "blue") - for(var/icon_state in GLOB.campaign_icon_types) + for(var/icon_state in GLOB.campaign_asset_icon_types) for(var/colour in colours) - .["[icon_state]_[colour]"] = icon2base64(icon('icons/UI_icons/campaign_icons.dmi', "[icon_state]_[colour]", frame = 1)) + . += "[icon_state]_[colour]" GLOBAL_LIST_INIT(campaign_mission_icons, init_campaign_mission_icons()) +///Populates campaign_mission_icons /proc/init_campaign_mission_icons() . = list() var/list/colours = list("green", "yellow", "grey", "red", "blue") for(var/icon_state in GLOB.campaign_mission_icon_types) for(var/colour in colours) - .["[icon_state]_[colour]"] = icon2base64(icon('icons/UI_icons/mission_icons.dmi', "[icon_state]_[colour]", frame = 1)) + . += "[icon_state]_[colour]" + +GLOBAL_LIST_INIT(campaign_perk_icons, init_campaign_perk_icons()) + +///Populates campaign_perk_icons +/proc/init_campaign_perk_icons() + . = list() + var/list/colours = list("green", "orange", "grey", "red", "blue") + for(var/icon_state in GLOB.campaign_perk_icon_types) + for(var/colour in colours) + . += "[icon_state]_[colour]" + +GLOBAL_LIST_INIT(campaign_loadout_item_icons, init_campaign_loadout_item_icons()) + +///Populates campaign_loadout_item_icons +/proc/init_campaign_loadout_item_icons() + . = list() + var/list/colours = list("green", "orange", "grey", "red", "blue") + for(var/icon_state in GLOB.campaign_loadout_item_icon_types) + for(var/colour in colours) + . += "[icon_state]_[colour]" diff --git a/code/_globalvars/lists/game_modes.dm b/code/_globalvars/lists/game_modes.dm index 84bba8d371e9e..bb57b3b0bc19f 100644 --- a/code/_globalvars/lists/game_modes.dm +++ b/code/_globalvars/lists/game_modes.dm @@ -6,3 +6,65 @@ GLOBAL_LIST_INIT(ranked_jobs_by_faction, list( FACTION_TERRAGOV = list(CAPTAIN, FIELD_COMMANDER, STAFF_OFFICER, SQUAD_LEADER), FACTION_SOM = list(SOM_COMMANDER, SOM_FIELD_COMMANDER, SOM_STAFF_OFFICER, SOM_SQUAD_LEADER, SOM_SQUAD_VETERAN), )) + +///All jobs used in campaign +GLOBAL_LIST_INIT(campaign_jobs, list( + SQUAD_MARINE, + SQUAD_ENGINEER, + SQUAD_CORPSMAN, + SQUAD_SMARTGUNNER, + SQUAD_LEADER, + FIELD_COMMANDER, + STAFF_OFFICER, + CAPTAIN, + SOM_SQUAD_MARINE, + SOM_SQUAD_ENGINEER, + SOM_SQUAD_CORPSMAN, + SOM_SQUAD_VETERAN, + SOM_SQUAD_LEADER, + SOM_FIELD_COMMANDER, + SOM_STAFF_OFFICER, + SOM_COMMANDER, +)) + +///Loot table if Marines win a major victory in a campaign mission +GLOBAL_LIST_INIT(campaign_tgmc_major_loot, list( + /obj/effect/supply_drop/medical_basic = 7, + /obj/effect/supply_drop/marine_sentry = 5, + /obj/effect/supply_drop/recoilless_rifle = 3, + /obj/effect/supply_drop/armor_upgrades = 5, + /obj/effect/supply_drop/mmg = 4, + /obj/effect/supply_drop/zx_shotgun = 3, + /obj/effect/supply_drop/minigun = 3, + /obj/effect/supply_drop/scout = 3, +)) + +///Loot table if Marines win a minor victory in a campaign mission +GLOBAL_LIST_INIT(campaign_tgmc_minor_loot, list( + /obj/effect/supply_drop/medical_basic = 7, + /obj/effect/supply_drop/marine_sentry = 5, + /obj/effect/supply_drop/recoilless_rifle = 3, + /obj/effect/supply_drop/armor_upgrades = 5, + /obj/effect/supply_drop/mmg = 4, +)) + +///Loot table if SOM win a major victory in a campaign mission +GLOBAL_LIST_INIT(campaign_som_major_loot, list( + /obj/effect/supply_drop/medical_basic = 7, + /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/cope = 5, + /obj/effect/supply_drop/som_rpg = 3, + /obj/effect/supply_drop/som_armor_upgrades = 5, + /obj/effect/supply_drop/charger = 4, + /obj/effect/supply_drop/culverin = 3, + /obj/effect/supply_drop/blink_kit = 3, + /obj/effect/supply_drop/som_shotgun_burst = 3, +)) + +///Loot table if SOM win a minor victory in a campaign mission +GLOBAL_LIST_INIT(campaign_som_minor_loot, list( + /obj/effect/supply_drop/medical_basic = 7, + /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/cope = 5, + /obj/effect/supply_drop/som_rpg = 3, + /obj/effect/supply_drop/som_armor_upgrades = 5, + /obj/effect/supply_drop/charger = 4, +)) diff --git a/code/_globalvars/lists/keybinding.dm b/code/_globalvars/lists/keybinding.dm index 0b6e960c095ef..e829bd18ea363 100644 --- a/code/_globalvars/lists/keybinding.dm +++ b/code/_globalvars/lists/keybinding.dm @@ -26,7 +26,7 @@ /proc/init_emote_keybinds() for(var/i in subtypesof(/datum/emote)) var/datum/emote/faketype = i - if(!initial(faketype.key) || initial(faketype.flags_emote) & NO_KEYBIND) + if(!initial(faketype.key) || initial(faketype.emote_flags) & NO_KEYBIND) continue var/datum/keybinding/emote/emote_kb = new emote_kb.link_to_emote(faketype) diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 845fe4d2eaa7d..c1c9df1a4d40d 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -29,6 +29,7 @@ GLOBAL_LIST_EMPTY(mob_living_list) //all instances of /mob/living and subtype GLOBAL_LIST_EMPTY(alive_living_list) //all alive /mob/living, including clientless. GLOBAL_LIST_EMPTY(offered_mob_list) //all /mobs offered by admins GLOBAL_LIST_EMPTY(ai_list) +GLOBAL_LIST_EMPTY(silicon_mobs) //all silicon mobs GLOBAL_LIST_INIT(simple_animals, list(list(),list(),list(),list())) // One for each AI_* status define GLOBAL_LIST_EMPTY(living_cameras) GLOBAL_LIST_EMPTY(aiEyes) @@ -116,8 +117,9 @@ GLOBAL_LIST_INIT(xeno_types_tier_one, list(/mob/living/carbon/xenomorph/runner, //RUTGMC EDIT - Moved to modular_RUtgmc\code\_globalvars\lists\mobs.dm /* GLOBAL_LIST_INIT(xeno_types_tier_two, list(/mob/living/carbon/xenomorph/hunter, /mob/living/carbon/xenomorph/warrior, /mob/living/carbon/xenomorph/spitter, /mob/living/carbon/xenomorph/hivelord, /mob/living/carbon/xenomorph/carrier, /mob/living/carbon/xenomorph/bull, /mob/living/carbon/xenomorph/wraith, /mob/living/carbon/xenomorph/puppeteer)) -GLOBAL_LIST_INIT(xeno_types_tier_three, list(/mob/living/carbon/xenomorph/gorger, /mob/living/carbon/xenomorph/widow, /mob/living/carbon/xenomorph/ravager, /mob/living/carbon/xenomorph/praetorian, /mob/living/carbon/xenomorph/boiler, /mob/living/carbon/xenomorph/defiler, /mob/living/carbon/xenomorph/crusher, /mob/living/carbon/xenomorph/shrike, /mob/living/carbon/xenomorph/behemoth)) +GLOBAL_LIST_INIT(xeno_types_tier_three, list(/mob/living/carbon/xenomorph/gorger, /mob/living/carbon/xenomorph/widow, /mob/living/carbon/xenomorph/ravager, /mob/living/carbon/xenomorph/praetorian, /mob/living/carbon/xenomorph/boiler, /mob/living/carbon/xenomorph/defiler, /mob/living/carbon/xenomorph/crusher, /mob/living/carbon/xenomorph/shrike, /mob/living/carbon/xenomorph/behemoth, /mob/living/carbon/xenomorph/warlock)) */ +GLOBAL_LIST_INIT(xeno_types_tier_four, list(/mob/living/carbon/xenomorph/shrike, /mob/living/carbon/xenomorph/queen, /mob/living/carbon/xenomorph/king)) GLOBAL_LIST_INIT_TYPED(hive_datums, /datum/hive_status, init_hive_datum_list()) // init by make_datum_references_lists() /proc/init_hive_datum_list() @@ -181,3 +183,16 @@ GLOBAL_LIST_INIT(hive_ui_static_data, init_hive_status_lists()) // init by make_ for(var/i in GLOB.mob_list) var/mob/M = i M.update_config_movespeed() + +///The actions given to all humans on init +GLOBAL_LIST_INIT(human_init_actions, list( + /datum/action/skill/toggle_orders, + /datum/action/skill/issue_order/move, + /datum/action/skill/issue_order/hold, + /datum/action/skill/issue_order/focus, + /datum/action/innate/order/attack_order/personal, + /datum/action/innate/order/defend_order/personal, + /datum/action/innate/order/retreat_order/personal, + /datum/action/innate/order/rally_order/personal, + /datum/action/innate/message_squad, +)) diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 058cf05a69d2e..a8890dd6256a2 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -98,7 +98,15 @@ GLOBAL_LIST_INIT(supply_drops, typecacheof(list( /obj/vehicle/unmanned))) //hypersleep related -GLOBAL_LIST_EMPTY(cryoed_item_list) +GLOBAL_LIST_EMPTY(cryoed_item_list_gun) +GLOBAL_LIST_EMPTY(cryoed_item_list_ammo) +GLOBAL_LIST_EMPTY(cryoed_item_list_explosive) +GLOBAL_LIST_EMPTY(cryoed_item_list_melee) +GLOBAL_LIST_EMPTY(cryoed_item_list_clothing) +GLOBAL_LIST_EMPTY(cryoed_item_list_food) +GLOBAL_LIST_EMPTY(cryoed_item_list_drugs) +GLOBAL_LIST_EMPTY(cryoed_item_list_containers) +GLOBAL_LIST_EMPTY(cryoed_item_list_other) GLOBAL_LIST_INIT(do_not_preserve, typecacheof(list( /obj/item/clothing/mask/cigarette, diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm index a6bee2bfacf29..01181294589aa 100644 --- a/code/_globalvars/misc.dm +++ b/code/_globalvars/misc.dm @@ -42,5 +42,8 @@ GLOBAL_PROTECT(key_to_time_of_death) GLOBAL_LIST_EMPTY(key_to_time_of_xeno_death) GLOBAL_PROTECT(key_to_time_of_xeno_death) +GLOBAL_LIST_EMPTY(key_to_time_of_caste_swap) +GLOBAL_PROTECT(key_to_time_of_caste_swap) + ///List of ssd living mobs GLOBAL_LIST_EMPTY(ssd_living_mobs) diff --git a/code/_globalvars/regexes.dm b/code/_globalvars/regexes.dm index e7125f3dcd930..9a4b7be7e9ead 100644 --- a/code/_globalvars/regexes.dm +++ b/code/_globalvars/regexes.dm @@ -5,10 +5,18 @@ GLOBAL_DATUM_INIT(is_website, /regex, regex("http|www.|\[a-z0-9_-]+.(com|org|net GLOBAL_DATUM_INIT(is_email, /regex, regex("\[a-z0-9_-]+@\[a-z0-9_-]+.\[a-z0-9_-]+", "i")) GLOBAL_DATUM_INIT(is_alphanumeric, /regex, regex("\[a-z0-9]+", "i")) GLOBAL_DATUM_INIT(is_punctuation, /regex, regex("\[.!?]+", "i")) +GLOBAL_DATUM_INIT(is_color, /regex, regex("^#\[0-9a-fA-F]{6}$")) +GLOBAL_DATUM_INIT(is_alpha_color, /regex, regex("^#\[0-9a-fA-F]{8}$")) + +//finds text strings recognized as links on discord. Mainly used to stop embedding. +GLOBAL_DATUM_INIT(has_discord_embeddable_links, /regex, regex("(https?://\[^\\s|<\]{2,})")) //All < and > characters GLOBAL_DATUM_INIT(angular_brackets, /regex, regex(@"[<>]", "g")) +//All characters between < a > inclusive of the bracket +GLOBAL_DATUM_INIT(html_tags, /regex, regex(@"<.*?>", "g")) + //All characters forbidden by filenames: ", \, \n, \t, /, ?, %, *, :, |, <, > -GLOBAL_DATUM_INIT(filename_forbidden_chars, /regex, regex(@{""|[\\\n\t/?%*:|<>]"}, "g")) +GLOBAL_DATUM_INIT(filename_forbidden_chars, /regex, regex(@{""|[\\\n\t/?%*:|<>]|\.\."}, "g")) // had to use the OR operator for quotes instead of putting them in the character class because it breaks the syntax highlighting otherwise. diff --git a/code/_onclick/adjacent.dm b/code/_onclick/adjacent.dm index b4c341ddf5fb3..aef97a44e60ca 100644 --- a/code/_onclick/adjacent.dm +++ b/code/_onclick/adjacent.dm @@ -10,16 +10,16 @@ Note that in all cases the neighbor is handled simply; this is usually the user's mob, in which case it is up to you to check that the mob is not inside of something */ -/datum/proc/Adjacent(atom/neighbor) // basic inheritance, unused +/datum/proc/Adjacent(atom/neighbor, atom/target, atom/movable/mover) // basic inheritance, unused return FALSE -/datum/wires/Adjacent(atom/neighbor) +/datum/wires/Adjacent(atom/neighbor, atom/target, atom/movable/mover) return holder.Adjacent(neighbor) // Not a sane use of the function and (for now) indicative of an error elsewhere -/area/Adjacent(atom/neighbor) +/area/Adjacent(atom/neighbor, atom/target, atom/movable/mover) CRASH("Call to /area/Adjacent(), unimplemented proc") @@ -75,7 +75,7 @@ Note: Multiple-tile objects are created when the bound_width and bound_height are creater than the tile size. This is not used in stock /tg/station currently. */ -/atom/movable/Adjacent(atom/neighbor) +/atom/movable/Adjacent(atom/neighbor, atom/target, atom/movable/mover) if(neighbor == loc) return TRUE if(!isturf(loc)) @@ -86,8 +86,8 @@ //Multitile special cases. -/obj/structure/Adjacent(atom/neighbor) - if(bound_width > 32 || bound_height > 32) +/obj/structure/Adjacent(atom/neighbor, atom/target, atom/movable/mover) + if(isturf(loc) && bound_width > 32 || bound_height > 32) //locs will show loc if loc is not a turf for(var/turf/myloc AS in locs) if(myloc.Adjacent(neighbor, target = neighbor, mover = src)) return TRUE @@ -101,8 +101,10 @@ return FALSE //Multitile special cases. -/obj/vehicle/Adjacent(atom/neighbor) - if(bound_width > 32 || bound_height > 32) +/obj/vehicle/Adjacent(atom/neighbor, atom/target, atom/movable/mover) + if(hitbox) + return hitbox.Adjacent(neighbor) + if(isturf(loc) && bound_width > 32 || bound_height > 32) //locs will show loc if loc is not a turf for(var/turf/myloc AS in locs) if(myloc.Adjacent(neighbor, target = neighbor, mover = src)) return TRUE @@ -115,16 +117,22 @@ return TRUE return FALSE +/obj/hitbox/Adjacent(atom/neighbor, atom/target, atom/movable/mover) + for(var/turf/T AS in locs) + if(T.Adjacent(neighbor, neighbor, mover)) + return TRUE + return FALSE + -/mob/living/silicon/decoy/Adjacent(atom/neighbor) +/mob/living/silicon/decoy/Adjacent(atom/neighbor, atom/target, atom/movable/mover) for(var/turf/myloc AS in locs) if(myloc.Adjacent(neighbor, target = neighbor, mover = src)) return TRUE return FALSE -/obj/machinery/door/Adjacent(atom/neighbor) - if(bound_width > 32 || bound_height > 32) +/obj/machinery/door/Adjacent(atom/neighbor, atom/target, atom/movable/mover) + if(isturf(loc) && bound_width > 32 || bound_height > 32) //locs will show loc if loc is not a turf for(var/turf/myloc AS in locs) if(myloc.Adjacent(neighbor, target = neighbor, mover = src)) return TRUE @@ -139,7 +147,7 @@ // This is necessary for storage items not on your person. -/obj/item/Adjacent(atom/neighbor) +/obj/item/Adjacent(atom/neighbor, atom/target, atom/movable/mover) if(isnull(loc)) //User input can sometimes cause adjacency checks to things no longer in the map. return FALSE @@ -161,12 +169,12 @@ return FALSE -/obj/projectile/Adjacent(atom/neighbor) //Projectiles don't behave like regular items. +/obj/projectile/Adjacent(atom/neighbor, atom/target, atom/movable/mover) //Projectiles don't behave like regular items. var/turf/T = get_turf(loc) return T?.Adjacent(neighbor, target = neighbor, mover = src) -/obj/item/detpack/Adjacent(atom/neighbor) //Snowflake detpacks. +/obj/item/detpack/Adjacent(atom/neighbor, atom/target, atom/movable/mover) //Snowflake detpacks. if(neighbor == loc) return TRUE var/turf/T = get_turf(loc) @@ -185,7 +193,7 @@ if(O == target_atom || O == mover || (O.allow_pass_flags & PASS_PROJECTILE)) //check if there's a dense object present on the turf continue // PASS_THROW is used for anything you can click through (or the firedoor special case, see above) - if(O.flags_atom & ON_BORDER) // windows have PASS_PROJECTILE but are on border, check them first + if(O.atom_flags & ON_BORDER) // windows have PASS_PROJECTILE but are on border, check them first if(O.dir & target_dir || O.dir & (O.dir-1)) // full tile windows are just diagonals mechanically return FALSE @@ -195,13 +203,13 @@ /atom/proc/handle_barriers(mob/living/M) for(var/obj/structure/S in M.loc) - if(S.flags_atom & ON_BORDER && S.dir & get_dir(M,src) || S.dir&(S.dir-1)) - if(S.flags_barrier & HANDLE_BARRIER_CHANCE) + if(S.atom_flags & ON_BORDER && S.dir & get_dir(M,src) || S.dir&(S.dir-1)) + if(S.barrier_flags & HANDLE_BARRIER_CHANCE) if(S.handle_barrier_chance(M)) return S // blocked for(var/obj/structure/S in loc) - if(S.flags_atom & ON_BORDER && S.dir & get_dir(src,M) || S.dir&(S.dir-1)) - if(S.flags_barrier & HANDLE_BARRIER_CHANCE) + if(S.atom_flags & ON_BORDER && S.dir & get_dir(src,M) || S.dir&(S.dir-1)) + if(S.barrier_flags & HANDLE_BARRIER_CHANCE) if(S.handle_barrier_chance(M)) return S // blocked return src // not blocked diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 49af82f6f4e54..7d2d5863dc3da 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -193,7 +193,7 @@ /* Firealarm */ /obj/machinery/firealarm/AICtrlClick(mob/living/silicon/ai/user) // toggle the fire alarm var/area/A = get_area(src) - if(A.flags_alarm_state & ALARM_WARNING_FIRE) + if(A.alarm_state_flags & ALARM_WARNING_FIRE) reset() else alarm() diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 60736d84611c2..080e73de0491e 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -18,18 +18,18 @@ Note that this proc can be overridden, and is in the case of screen objects. */ /atom/Click(location, control, params) - if(flags_atom & INITIALIZED) + if(atom_flags & INITIALIZED) SEND_SIGNAL(src, COMSIG_CLICK, location, control, params, usr) usr.ClickOn(src, location, params) /atom/DblClick(location, control, params) - if(flags_atom & INITIALIZED) + if(atom_flags & INITIALIZED) usr.DblClickOn(src, params) /atom/MouseWheel(delta_x, delta_y, location, control, params) - if(flags_atom & INITIALIZED) + if(atom_flags & INITIALIZED) usr.MouseWheelOn(src, delta_x, delta_y, params) @@ -113,13 +113,18 @@ return if(in_throw_mode) - throw_item(A) + if(throw_item(A)) + changeNext_move(CLICK_CD_THROWING) return var/obj/item/W = get_active_held_item() if(W == A) - W.attack_self(src) + if(modifiers["right"]) + W.attack_self_alternate(src) + else + W.attack_self(src) + update_inv_l_hand() update_inv_r_hand() return @@ -148,10 +153,13 @@ var/proximity = A.Adjacent(src) if(!proximity || !A.attackby(W, src, params)) W.afterattack(A, src, proximity, params) + RangedAttack(A, params) else if(A.Adjacent(src)) A.attack_hand(src) - RangedAttack(A, params) + else + RangedAttack(A, params) + /atom/movable/proc/CanReach(atom/ultimate_target, obj/item/tool, view_only = FALSE) @@ -203,14 +211,14 @@ if(!T) return FALSE for(var/atom/movable/AM AS in T) - if(AM.flags_atom & PREVENT_CLICK_UNDER && AM.density && AM.layer > layer) + if(AM.atom_flags & PREVENT_CLICK_UNDER && AM.density && AM.layer > layer) return TRUE return FALSE /turf/IsObscured() for(var/atom/movable/AM AS in src) - if(AM.flags_atom & PREVENT_CLICK_UNDER && AM.density) + if(AM.atom_flags & PREVENT_CLICK_UNDER && AM.density) return TRUE return FALSE @@ -350,6 +358,7 @@ if(selected_ability.target_flags & flagname && !istype(A, typepath)){\ return FALSE if(COMSIG_MOB_CLICK_HANDLED) return TRUE + return A.RightClick(src) /mob/living/carbon/human/RightClickOn(atom/A) @@ -407,8 +416,13 @@ if(selected_ability.target_flags & flagname && !istype(A, typepath)){\ /mob/living/carbon/human/ShiftClickOn(atom/A) if(client.prefs.toggles_gameplay & MIDDLESHIFTCLICKING) return ..() - var/obj/item/held_thing = get_active_held_item() + if(selected_ability) + A = ability_target(A) + if(selected_ability.can_use_ability(A)) + selected_ability.use_ability(A) + return TRUE + var/obj/item/held_thing = get_active_held_item() if(held_thing && SEND_SIGNAL(held_thing, COMSIG_ITEM_SHIFTCLICKON, A, src) & COMPONENT_ITEM_CLICKON_BYPASS) return FALSE return ..() @@ -426,6 +440,7 @@ if(selected_ability.target_flags & flagname && !istype(A, typepath)){\ /atom/proc/ShiftClick(mob/user) SHOULD_CALL_PARENT(TRUE) SEND_SIGNAL(src, COMSIG_CLICK_SHIFT, user) + user.examinate(src) return TRUE /* diff --git a/code/_onclick/drag_drop.dm b/code/_onclick/drag_drop.dm index d88012c61c4dd..8d1c4a7cd1b14 100644 --- a/code/_onclick/drag_drop.dm +++ b/code/_onclick/drag_drop.dm @@ -19,7 +19,7 @@ // recieve a mousedrop /atom/proc/MouseDrop_T(atom/dropping, mob/user) SHOULD_CALL_PARENT(TRUE) - if(dropping.flags_atom & NOINTERACT) + if(dropping.atom_flags & NOINTERACT) return TRUE //Already handled SEND_SIGNAL(src, COMSIG_MOUSEDROPPED_ONTO, dropping, user) diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index 4785d51b105a0..a14f1a042e15e 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -90,6 +90,17 @@ var/mob/living/silicon/ai/AI = usr AI.toggle_camera_light() +/atom/movable/screen/ai/supply_interface + name = "Supply Interface" + icon_state = "pda" + +/atom/movable/screen/ai/supply_interface/Click() + . = ..() + if(.) + return + var/mob/living/silicon/ai/AI = usr + AI.supply_interface() + /atom/movable/screen/ai/multicam name = "Multicamera Mode" @@ -103,7 +114,6 @@ var/mob/living/silicon/ai/AI = usr AI.toggle_multicam() - /atom/movable/screen/ai/add_multicam name = "New Camera" icon_state = "new_cam" @@ -122,47 +132,52 @@ var/atom/movable/screen/using //AI core - using = new /atom/movable/screen/ai/aicore() + using = new /atom/movable/screen/ai/aicore(null, src) using.screen_loc = ui_ai_core static_inventory += using //Camera list - using = new /atom/movable/screen/ai/camera_list() + using = new /atom/movable/screen/ai/camera_list(null, src) using.screen_loc = ui_ai_camera_list static_inventory += using //Track - using = new /atom/movable/screen/ai/camera_track() + using = new /atom/movable/screen/ai/camera_track(null, src) using.screen_loc = ui_ai_track_with_camera static_inventory += using //VOX - using = new /atom/movable/screen/ai/announcement() + using = new /atom/movable/screen/ai/announcement(null, src) using.screen_loc = ui_ai_announcement static_inventory += using //VOX Help - using = new /atom/movable/screen/ai/announcement_help() + using = new /atom/movable/screen/ai/announcement_help(null, src) using.screen_loc = ui_ai_announcement_help static_inventory += using //Camera light - using = new /atom/movable/screen/ai/camera_light() + using = new /atom/movable/screen/ai/camera_light(null, src) using.screen_loc = ui_ai_camera_light static_inventory += using +//Supply Interface + using = new /atom/movable/screen/ai/supply_interface(null, src) + using.screen_loc = ui_ai_supply + static_inventory += using + //Multicamera mode - using = new /atom/movable/screen/ai/multicam() + using = new /atom/movable/screen/ai/multicam(null, src) using.screen_loc = ui_ai_multicam static_inventory += using //Add multicamera camera - using = new /atom/movable/screen/ai/add_multicam() + using = new /atom/movable/screen/ai/add_multicam(null, src) using.screen_loc = ui_ai_add_multicam static_inventory += using //bioscan - using = new /atom/movable/screen/ai/bioscan() + using = new /atom/movable/screen/ai/bioscan(null, src) using.screen_loc = ui_ai_bioscan static_inventory += using diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm index 6ba4e208684e4..b536cc0c682ef 100644 --- a/code/_onclick/hud/ghost.dm +++ b/code/_onclick/hud/ghost.dm @@ -46,7 +46,7 @@ . = ..() var/atom/movable/screen/using - using = new /atom/movable/screen/ghost/follow_ghosts() + using = new /atom/movable/screen/ghost/follow_ghosts(null, src) using.screen_loc = ui_ghost_slot2 static_inventory += using diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 4c222ac915c71..0df65aa09be5b 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -32,7 +32,7 @@ var/atom/movable/screen/toggle_firemode var/atom/movable/screen/unique_action - var/atom/movable/screen/zone_sel + var/atom/movable/screen/zone_sel/zone_sel var/atom/movable/screen/pull_icon var/atom/movable/screen/throw_icon var/atom/movable/screen/rest_icon @@ -59,8 +59,16 @@ var/atom/movable/screen/action_button/hide_toggle/hide_actions_toggle var/action_buttons_hidden = 0 - var/list/atom/movable/screen/plane_master/plane_masters = list() // see "appearance_flags" in the ref, assoc list of "[plane]" = object + /// Assoc list of key => "plane master groups" + /// This is normally just the main window, but it'll occasionally contain things like spyglasses windows + var/list/datum/plane_master_group/master_groups = list() + /// see "appearance_flags" in the ref, assoc list of "[plane]" = object + var/list/atom/movable/screen/plane_master/plane_masters = list() + // List of weakrefs to objects that we add to our screen that we don't expect to DO anything + // They typically use * in their render target. They exist solely so we can reuse them, + // and avoid needing to make changes to all idk 300 consumers if we want to change the appearance + var/list/asset_refs_for_reuse = list() /datum/hud/New(mob/owner) mymob = owner @@ -71,6 +79,15 @@ plane_masters["[instance.plane]"] = instance instance.backdrop(mymob) + var/datum/plane_master_group/main/main_group = new(PLANE_GROUP_MAIN) + main_group.attach_to(src) + +/datum/hud/proc/should_use_scale() + return should_sight_scale(mymob.sight) + +/datum/hud/proc/should_sight_scale(sight_flags) + return (sight_flags & (SEE_TURFS | SEE_OBJS)) != SEE_TURFS + /datum/hud/Destroy() if(mymob.hud_used == src) mymob.hud_used = null @@ -135,6 +152,24 @@ return ..() +/// Creates the required plane masters to fill out new z layers (because each "level" of multiz gets its own plane master set) +/datum/hud/proc/build_plane_groups(starting_offset, ending_offset) + for(var/group_key in master_groups) + var/datum/plane_master_group/group = master_groups[group_key] + group.build_plane_masters(starting_offset, ending_offset) + +/// Returns the plane master that matches the input plane from the passed in group +/datum/hud/proc/get_plane_master(plane, group_key = PLANE_GROUP_MAIN) + var/plane_key = "[plane]" + var/datum/plane_master_group/group = master_groups[group_key] + return group.plane_masters[plane_key] + +/// Returns a list of all plane masters that match the input true plane, drawn from the passed in group (ignores z layer offsets) +/datum/hud/proc/get_true_plane_masters(true_plane, group_key = PLANE_GROUP_MAIN) + var/list/atom/movable/screen/plane_master/masters = list() + for(var/plane in TRUE_PLANE_TO_OFFSETS(true_plane)) + masters += get_plane_master(plane, group_key) + return masters /mob/proc/create_mob_hud() if(!client || hud_used) @@ -146,13 +181,11 @@ update_sight() SEND_SIGNAL(src, COMSIG_MOB_HUD_CREATED) - -/datum/hud/proc/plane_masters_update() - // Plane masters are always shown to OUR mob, never to observers - for(var/thing in plane_masters) - var/atom/movable/screen/plane_master/PM = plane_masters[thing] - PM.backdrop(mymob) - mymob.client.screen += PM +/mob/living/carbon/xenomorph/create_mob_hud() + . = ..() + //Some parts require hud_used to already be set + med_hud_set_health() + hud_set_plasma() //Version denotes which style should be displayed. blank or 0 means "next version" /datum/hud/proc/show_hud(version = 0, mob/viewmob) @@ -221,6 +254,7 @@ persistent_inventory_update(screenmob) mymob.update_action_buttons(TRUE) reorganize_alerts(screenmob) + update_interactive_emotes() mymob.reload_fullscreens() update_parallax_pref(screenmob) @@ -234,6 +268,12 @@ return TRUE +/datum/hud/proc/plane_masters_update() + // Plane masters are always shown to OUR mob, never to observers + for(var/thing in plane_masters) + var/atom/movable/screen/plane_master/PM = plane_masters[thing] + PM.backdrop(mymob) + mymob.client.screen += PM /datum/hud/human/show_hud(version = 0, mob/viewmob) . = ..() @@ -293,6 +333,21 @@ return closeToolTip(usr) +/datum/hud/proc/register_reuse(atom/movable/screen/reuse) + asset_refs_for_reuse += WEAKREF(reuse) + mymob?.client?.screen += reuse + +/datum/hud/proc/unregister_reuse(atom/movable/screen/reuse) + asset_refs_for_reuse -= WEAKREF(reuse) + mymob?.client?.screen -= reuse + +/datum/hud/proc/update_reuse(mob/show_to) + for(var/datum/weakref/screen_ref as anything in asset_refs_for_reuse) + var/atom/movable/screen/reuse = screen_ref.resolve() + if(isnull(reuse)) + asset_refs_for_reuse -= screen_ref + continue + show_to.client?.screen += reuse //Triggered when F12 is pressed (Unless someone changed something in the DMF) /mob/verb/button_pressed_F12() diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 3f7de74995864..c34578f12cf24 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -5,8 +5,6 @@ layer = ABOVE_HUD_LAYER /atom/movable/screen/human/equip/Click() - if(istype(usr.loc, /obj/vehicle/multitile/root/cm_armored)) // stops inventory actions in a mech - return TRUE SEND_SIGNAL(usr, COMSIG_CLICK_QUICKEQUIP) @@ -30,7 +28,7 @@ var/has_hidden_gear for(var/gear_slot in hud_data.gear) - inv_box = new /atom/movable/screen/inventory() + inv_box = new /atom/movable/screen/inventory(null, src) inv_box.icon = ui_style inv_box.color = ui_color inv_box.alpha = ui_alpha @@ -48,7 +46,7 @@ static_inventory += inv_box if(has_hidden_gear) - using = new /atom/movable/screen/toggle_inv() + using = new /atom/movable/screen/toggle_inv(null, src) using.icon = ui_style using.color = ui_color using.alpha = ui_alpha @@ -57,7 +55,7 @@ // Draw the attack intent dialogue. if(hud_data.has_a_intent) - using = new /atom/movable/screen/act_intent/corner() + using = new /atom/movable/screen/act_intent/corner(null, src) using.icon_state = owner.a_intent using.alpha = ui_alpha static_inventory += using @@ -66,7 +64,7 @@ if(hud_data.has_m_intent) - using = new /atom/movable/screen/mov_intent() + using = new /atom/movable/screen/mov_intent(null, src) using.icon = ui_style using.icon_state = (owner.m_intent == MOVE_INTENT_RUN ? "running" : "walking") using.color = ui_color @@ -75,7 +73,7 @@ move_intent = using if(hud_data.has_drop) - using = new /atom/movable/screen/drop() + using = new /atom/movable/screen/drop(null, src) using.icon = ui_style using.color = ui_color using.alpha = ui_alpha @@ -83,119 +81,108 @@ if(hud_data.has_hands) - using = new /atom/movable/screen/human/equip + using = new /atom/movable/screen/human/equip(null, src) using.icon = ui_style using.plane = ABOVE_HUD_PLANE using.color = ui_color using.alpha = ui_alpha static_inventory += using - inv_box = new /atom/movable/screen/inventory/hand/right() + inv_box = new /atom/movable/screen/inventory/hand/right(null, src) inv_box.icon = ui_style - if(owner && !owner.hand) //This being 0 or null means the right hand is in use - inv_box.add_overlay("hand_active") inv_box.slot_id = SLOT_R_HAND inv_box.color = ui_color inv_box.alpha = ui_alpha + inv_box.update_icon() r_hand_hud_object = inv_box static_inventory += inv_box - inv_box = new /atom/movable/screen/inventory/hand() + inv_box = new /atom/movable/screen/inventory/hand/left(null, src) inv_box.setDir(EAST) inv_box.icon = ui_style - if(owner?.hand) //This being 1 means the left hand is in use - inv_box.add_overlay("hand_active") inv_box.slot_id = SLOT_L_HAND inv_box.color = ui_color inv_box.alpha = ui_alpha + inv_box.update_icon() l_hand_hud_object = inv_box static_inventory += inv_box - using = new /atom/movable/screen/swap_hand/human() + using = new /atom/movable/screen/swap_hand/human(null, src) using.icon = ui_style using.color = ui_color using.alpha = ui_alpha static_inventory += using - using = new /atom/movable/screen/swap_hand/right() + using = new /atom/movable/screen/swap_hand/right(null, src) using.icon = ui_style using.color = ui_color using.alpha = ui_alpha static_inventory += using if(hud_data.has_resist) - using = new /atom/movable/screen/resist() + using = new /atom/movable/screen/resist(null, src) using.icon = ui_style using.color = ui_color using.alpha = ui_alpha hotkeybuttons += using if(hud_data.has_throw) - throw_icon = new /atom/movable/screen/throw_catch() + throw_icon = new /atom/movable/screen/throw_catch(null, src) throw_icon.icon = ui_style throw_icon.color = ui_color throw_icon.alpha = ui_alpha hotkeybuttons += throw_icon - pull_icon = new /atom/movable/screen/pull() + pull_icon = new /atom/movable/screen/pull(null, src) pull_icon.icon = ui_style - pull_icon.update_icon(owner) + pull_icon.update_icon() hotkeybuttons += pull_icon if(hud_data.has_warnings) - oxygen_icon = new /atom/movable/screen/oxygen() + oxygen_icon = new /atom/movable/screen/oxygen(null, src) infodisplay += oxygen_icon - toxin_icon = new /atom/movable/screen() - toxin_icon.icon_state = "tox0" - toxin_icon.name = "toxin" - toxin_icon.screen_loc = ui_toxin + toxin_icon = new /atom/movable/screen/toxin(null, src) infodisplay += toxin_icon - fire_icon = new /atom/movable/screen/fire() + fire_icon = new /atom/movable/screen/fire(null, src) infodisplay += fire_icon - healths = new /atom/movable/screen/healths() + healths = new /atom/movable/screen/healths(null, src) infodisplay += healths - staminas = new + staminas = new /atom/movable/screen/stamina_hud(null, src) infodisplay += staminas if(hud_data.has_pressure) - pressure_icon = new /atom/movable/screen() - pressure_icon.icon_state = "pressure0" - pressure_icon.name = "pressure" - pressure_icon.screen_loc = ui_pressure + pressure_icon = new /atom/movable/screen/pressure(null, src) infodisplay += pressure_icon if(hud_data.has_bodytemp) - bodytemp_icon = new /atom/movable/screen/bodytemp() + bodytemp_icon = new /atom/movable/screen/bodytemp(null, src) infodisplay += bodytemp_icon if(hud_data.has_nutrition) - nutrition_icon = new /atom/movable/screen() - nutrition_icon.icon_state = "nutrition0" - nutrition_icon.name = "nutrition" - nutrition_icon.screen_loc = ui_nutrition + nutrition_icon = new /atom/movable/screen/nutrition(null, src) infodisplay += nutrition_icon - rest_icon = new /atom/movable/screen/rest() + rest_icon = new /atom/movable/screen/rest(null, src) rest_icon.icon = ui_style rest_icon.color = ui_color rest_icon.alpha = ui_alpha - rest_icon.update_icon(owner) + rest_icon.update_icon() static_inventory += rest_icon //squad leader locator - SL_locator = new /atom/movable/screen/SL_locator + SL_locator = new /atom/movable/screen/SL_locator(null, src) infodisplay += SL_locator - zone_sel = new /atom/movable/screen/zone_sel() + zone_sel = new /atom/movable/screen/zone_sel(null, src) zone_sel.icon = ui_style zone_sel.color = ui_color zone_sel.alpha = ui_alpha - zone_sel.update_icon(owner) + zone_sel.set_selected_zone(BODY_ZONE_CHEST, owner) static_inventory += zone_sel diff --git a/code/_onclick/hud/interactive_emotes.dm b/code/_onclick/hud/interactive_emotes.dm new file mode 100644 index 0000000000000..f52cfdcdaace5 --- /dev/null +++ b/code/_onclick/hud/interactive_emotes.dm @@ -0,0 +1,274 @@ +///All in one function to begin interactions +/mob/proc/interaction_emote(mob/target) + if(!target || target == src) + return + + var/list/interactions_list = list("Headbutt" = /atom/movable/screen/interaction/headbutt) //Universal interactions + if(isxeno(src)) //Benos don't high five each other, they slap tails! A beno cannot initiate a high five, but can recieve one if prompted by a human + interactions_list["Tail Slap"] = /atom/movable/screen/interaction/fist_bump + else + interactions_list["High Five"] = /atom/movable/screen/interaction + interactions_list["Fist Bump"] = /atom/movable/screen/interaction/fist_bump + + var/atom/movable/screen/interaction/interaction = interactions_list[tgui_input_list(src, "Select an interaction type", "Interactive Emotes", interactions_list)] + + if(!interaction) + return + + if(LAZYLEN(target.queued_interactions)) + for(var/atom/movable/screen/interaction/element AS in target.queued_interactions) + if(element.initiator == src) + balloon_alert(src, "Slow your roll!") + return + + interaction = new interaction() + interaction.owner = target + interaction.initiator = src + interaction.register_movement_signals() + LAZYADD(target.queued_interactions, interaction) + + if(target.client && target.hud_used) + target.hud_used.update_interactive_emotes() + + interaction.transform = matrix(32, 6, MATRIX_TRANSLATE) + animate(interaction, transform = matrix(), time = 2.5, easing = CUBIC_EASING) + + interaction.timer_id = addtimer(CALLBACK(interaction, TYPE_PROC_REF(/atom/movable/screen/interaction, end_interaction), FALSE), interaction.timeout, TIMER_STOPPABLE|TIMER_UNIQUE) + +//Mob interactions +/atom/movable/screen/interaction + name = "high five" + desc = "You gonna leave them hanging?" + icon = 'icons/mob/screen_alert.dmi' + icon_state = "drunk2" //It looks jolly + ///Sound filed played when interaction is successful + var/interaction_sound = 'sound/effects/snap.ogg' + ///Who this offer for interaction is being made to + var/mob/owner + ///The mob that initiated the interaction + var/mob/initiator + ///Clear itself after a certain amount of time + var/timeout = 10 SECONDS + ///The reference to the existing timer + var/timer_id + +/atom/movable/screen/interaction/Initialize(mob/user) + . = ..() + desc += "\nLeft-click to accept interaction. Right-click or SHIFT + left-click to decline." + +///Separate proc to register signals; not on Initialize because owner and initiator are not set yet +/atom/movable/screen/interaction/proc/register_movement_signals() + RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(interactees_moved)) + RegisterSignal(initiator, COMSIG_MOVABLE_MOVED, PROC_REF(interactees_moved)) + +///What to do when either the owner or the initiating mob moves +/atom/movable/screen/interaction/proc/interactees_moved() + SIGNAL_HANDLER + if(!owner.Adjacent(initiator)) + end_interaction(FALSE) + +///Functions to end the interaction +/atom/movable/screen/interaction/proc/end_interaction(success = TRUE) + if(!success) + owner.visible_message(failure_message()) + qdel(src) + +//Delete itself from the owner's hud and list of queued interactions +/atom/movable/screen/interaction/Destroy() + deltimer(timer_id) + LAZYREMOVE(owner.queued_interactions, src) + if(owner.client && owner.hud_used) + owner.client.screen -= src + owner.hud_used.update_interactive_emotes() + + return ..() + +/atom/movable/screen/interaction/RightClick(mob/user) + . = ..() + end_interaction(FALSE) + +/atom/movable/screen/interaction/ShiftClick(mob/user) + . = ..() + end_interaction(FALSE) + +/atom/movable/screen/interaction/Click(location, control, params) + var/list/modifiers = params2list(params) + if(modifiers[SHIFT_CLICK] || modifiers[RIGHT_CLICK]) //These modifiers will deny the interaction + return ..() + + if(usr != owner || !can_interact(owner)) + end_interaction(FALSE) + return FALSE + + //Begin interaction functions + interaction_animation() + + owner.visible_message(success_message()) + playsound(owner, interaction_sound, 50, TRUE) + end_interaction() + +///Seperate proc meant to be overriden for unique animations +/atom/movable/screen/interaction/proc/interaction_animation() + owner.face_atom(initiator) + initiator.face_atom(owner) + + //Calculate the distances between the two mobs + var/x_distance = owner.x - initiator.x + var/y_distance = owner.y - initiator.y + + animate(owner, pixel_x = owner.pixel_x - x_distance * 8, pixel_y = owner.pixel_y - y_distance * 8, time = 0.5 SECONDS, easing = BACK_EASING, flags = ANIMATION_PARALLEL) + animate(pixel_x = initial(owner.pixel_x), pixel_y = initial(owner.pixel_y), time = 0.1 SECONDS) + animate(initiator, pixel_x = initiator.pixel_x + x_distance * 8, pixel_y = initiator.pixel_y + y_distance * 8, time = 0.5 SECONDS, easing = BACK_EASING, flags = ANIMATION_PARALLEL) + animate(pixel_x = initial(initiator.pixel_x), pixel_y = initial(initiator.pixel_y), time = 0.1 SECONDS) + +///Returns a string for successful interactions +/atom/movable/screen/interaction/proc/success_message() + return "[owner] high fives [initiator]!" + +///Returns a string for unsuccessful interactions +/atom/movable/screen/interaction/proc/failure_message() + return "[owner] left [initiator] hanging in the air..." + +//Following 2 procs are for tooltip functionality; taken from action buttons +/atom/movable/screen/interaction/MouseEntered(location, control, params) + if(!usr.client?.prefs?.tooltips) + return + openToolTip(usr, src, params, title = name, content = desc) + +/atom/movable/screen/interaction/MouseExited() + if(!usr.client?.prefs?.tooltips) + return + closeToolTip(usr) + +/atom/movable/screen/interaction/fist_bump + name = "fist bump" + desc = "Bro." + interaction_sound = 'sound/weapons/throwtap.ogg' + +//Benos turn around and slap with their tail instead of a fist bump +/atom/movable/screen/interaction/fist_bump/interaction_animation() + owner.face_atom(initiator) + initiator.face_atom(owner) + + var/x_distance = owner.x - initiator.x + var/y_distance = owner.y - initiator.y + + if(isxeno(owner)) + animate(owner, pixel_x = owner.pixel_x - x_distance * 8, pixel_y = owner.pixel_y - y_distance * 8, dir = initiator.dir, + time = 0.5 SECONDS, easing = BACK_EASING, flags = ANIMATION_PARALLEL) + owner.face_atom(initiator) + else + animate(owner, pixel_x = owner.pixel_x - x_distance * 8, pixel_y = owner.pixel_y - y_distance * 8, + time = 0.5 SECONDS, easing = BACK_EASING, flags = ANIMATION_PARALLEL) + animate(pixel_x = initial(owner.pixel_x), pixel_y = initial(owner.pixel_y), time = 0.1 SECONDS) + + if(isxeno(initiator)) + animate(initiator, pixel_x = initiator.pixel_x + x_distance * 8, pixel_y = initiator.pixel_y + y_distance * 8, dir = owner.dir, + time = 0.5 SECONDS, easing = BACK_EASING, flags = ANIMATION_PARALLEL) + initiator.face_atom(owner) + else + animate(initiator, pixel_x = initiator.pixel_x + x_distance * 8, pixel_y = initiator.pixel_y + y_distance * 8, + time = 0.5 SECONDS, easing = BACK_EASING, flags = ANIMATION_PARALLEL) + animate(pixel_x = initial(initiator.pixel_x), pixel_y = initial(initiator.pixel_y), time = 0.1 SECONDS) + +//We support interspecies bumping of fists and tails! +/atom/movable/screen/interaction/fist_bump/success_message() + var/owner_xeno = isxeno(owner) + var/initiator_xeno = isxeno(initiator) + if(owner_xeno && initiator_xeno) + return "[owner] and [initiator] slap tails together!" + if(owner_xeno) + return "[owner] slaps [initiator]'s fist!" + if(initiator_xeno) + return "[owner] fist bumps [initiator]'s tail!" + return "[owner] fist bumps [initiator]!" + +/atom/movable/screen/interaction/fist_bump/failure_message() + return "[owner] left [initiator] hanging. Not cool!" + +/atom/movable/screen/interaction/headbutt + name = "head bump" + desc = "Touch skulls." + interaction_sound = 'sound/weapons/throwtap.ogg' + +/atom/movable/screen/interaction/headbutt/interaction_animation() + owner.face_atom(initiator) + initiator.face_atom(owner) + + var/x_distance = owner.x - initiator.x + var/y_distance = owner.y - initiator.y + + var/matrix/owner_matrix = owner.transform + var/matrix/initiator_matrix = initiator.transform + var/rotation_angle + //This was so much pain, maintainers forgive me + if(owner.dir & (EAST | WEST)) + if(isxenorunner(owner)) //Rounies get special upwards headbutts + rotation_angle = owner.dir & EAST ? -15 : 15 + else + rotation_angle = owner.dir & EAST ? 15 : -15 + + //The animation if the mobs face east/west is to rotate their heads together + animate(owner, pixel_x = owner.pixel_x - x_distance * 8, pixel_y = owner.pixel_y - y_distance * 8, + transform = owner_matrix.Turn(rotation_angle), time = 0.5 SECONDS, easing = BACK_EASING, flags = ANIMATION_PARALLEL) + animate(pixel_x = initial(owner.pixel_x), pixel_y = initial(owner.pixel_y), + transform = owner_matrix.Turn(-rotation_angle), time = 0.1 SECONDS) + else + //If facing north or south, basically the same animation as the high five but move even closer + animate(owner, pixel_x = owner.pixel_x - x_distance * 8, pixel_y = owner.pixel_y - y_distance * 16, + time = 0.5 SECONDS, easing = BACK_EASING, flags = ANIMATION_PARALLEL) + animate(pixel_x = initial(owner.pixel_x), pixel_y = initial(owner.pixel_y), time = 0.1 SECONDS) + + if(initiator.dir & (EAST | WEST)) + if(isxenorunner(initiator)) + rotation_angle = initiator.dir & EAST ? -15 : 15 + else + rotation_angle = initiator.dir & EAST ? 15 : -15 + + animate(initiator, pixel_x = initiator.pixel_x + x_distance * 8, pixel_y = initiator.pixel_y + y_distance * 8, + transform = initiator_matrix.Turn(rotation_angle), time = 0.5 SECONDS, easing = BACK_EASING, flags = ANIMATION_PARALLEL) + animate(pixel_x = initial(initiator.pixel_x), pixel_y = initial(initiator.pixel_y), + transform = initiator_matrix.Turn(-rotation_angle), time = 0.1 SECONDS) + else + animate(initiator, pixel_x = initiator.pixel_x + x_distance * 8, pixel_y = initiator.pixel_y + y_distance * 16, + time = 0.5 SECONDS, easing = BACK_EASING, flags = ANIMATION_PARALLEL) + animate(pixel_x = initial(initiator.pixel_x), pixel_y = initial(initiator.pixel_y), time = 0.1 SECONDS) + +/atom/movable/screen/interaction/headbutt/success_message() + return "[owner] and [initiator] bonk heads together!!" + +/atom/movable/screen/interaction/headbutt/failure_message() + return "[owner] did not headbutt [initiator]..." + +/* HUD code */ +///Update the hud; taken from how alerts do it, but slimmed down +/datum/hud/proc/update_interactive_emotes() + var/mob/viewer = mymob + if(!viewer.client) + return + + var/list/queued_interactions = LAZYLISTDUPLICATE(mymob.queued_interactions) + if(!LAZYLEN(queued_interactions)) //No interactions to show + return FALSE + + if(!hud_shown) //Clear the hud of interaction button(s) + for(var/atom/movable/screen/interaction/interaction AS in queued_interactions) + viewer.client.screen -= interaction + return TRUE + + //I don't want to mess with screen real estate so it will only show the first interaction in the list until it's dismissed/expired + var/atom/movable/screen/interaction/interaction = LAZYACCESS(queued_interactions, 1) + interaction.screen_loc = "EAST-1:28,TOP-1:28" + viewer.client.screen |= interaction + return TRUE + +//If anyone wants to add more interactions, here is an easy test item to use, just be sure to comment out any can_interact checks and to use the target tgui input list +/obj/item/interaction_tester + name = "interaction tester" + icon_state = "coin" + +/obj/item/interaction_tester/attack_self(mob/user) + var/mob/target = tgui_input_list(user, "Select a target", "Select a target", GLOB.alive_living_list) + if(!target) + return + target.interaction_emote(user) diff --git a/code/_onclick/map_popups.dm b/code/_onclick/hud/map_popups.dm similarity index 93% rename from code/_onclick/map_popups.dm rename to code/_onclick/hud/map_popups.dm index 7c40f654ffd94..45e26576b239d 100644 --- a/code/_onclick/map_popups.dm +++ b/code/_onclick/hud/map_popups.dm @@ -1,12 +1,3 @@ -/** - * A screen object, which acts as a container for turfs and other things - * you want to show on the map, which you usually attach to "vis_contents". - */ -/atom/movable/screen/map_view - // Map view has to be on the lowest plane to enable proper lighting - layer = GAME_PLANE - plane = GAME_PLANE - /** * A generic background object. * It is also implicitly used to allocate a rectangle on the map, which will diff --git a/code/_onclick/hud/map_view.dm b/code/_onclick/hud/map_view.dm new file mode 100644 index 0000000000000..55d3be626c823 --- /dev/null +++ b/code/_onclick/hud/map_view.dm @@ -0,0 +1,11 @@ +/** + * A screen object, which acts as a container for turfs and other things + * you want to show on the map, which you usually attach to "vis_contents". + */ +INITIALIZE_IMMEDIATE(/atom/movable/screen/map_view) +/atom/movable/screen/map_view + name = "screen" + // Map view has to be on the lowest plane to enable proper lighting + layer = GAME_PLANE + plane = GAME_PLANE + del_on_map_removal = FALSE diff --git a/code/_onclick/hud/parallax.dm b/code/_onclick/hud/parallax.dm index 55c108e6e6720..8e2b8525b8ac9 100644 --- a/code/_onclick/hud/parallax.dm +++ b/code/_onclick/hud/parallax.dm @@ -7,12 +7,12 @@ if(!length(C.parallax_layers_cached)) C.parallax_layers_cached = list() - C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_1(null, C.view) - C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_2(null, C.view) - C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/planet(null, C.view) + C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_1(null, src, C.view) + C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_2(null, src, C.view) + C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/planet(null, src, C.view) if(SSparallax.random_layer) - C.parallax_layers_cached += new SSparallax.random_layer - C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_3(null, C.view) + C.parallax_layers_cached += new SSparallax.random_layer(null, src, C.view) + C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_3(null, src, C.view) C.parallax_layers = C.parallax_layers_cached.Copy() @@ -238,7 +238,7 @@ mouse_opacity = MOUSE_OPACITY_TRANSPARENT -/atom/movable/screen/parallax_layer/Initialize(mapload, view) +/atom/movable/screen/parallax_layer/Initialize(mapload, datum/hud/hud_owner, view) . = ..() if (!view) view = world.view @@ -289,7 +289,7 @@ /atom/movable/screen/parallax_layer/random/space_gas icon_state = "space_gas" -/atom/movable/screen/parallax_layer/random/space_gas/Initialize(mapload, view) +/atom/movable/screen/parallax_layer/random/space_gas/Initialize(mapload, datum/hud/hud_owner, view) . = ..() src.add_atom_colour(SSparallax.random_parallax_color, ADMIN_COLOUR_PRIORITY) diff --git a/code/_onclick/hud/picture_in_picture.dm b/code/_onclick/hud/picture_in_picture.dm index e5f96dbf3b5a8..3f47c2d6bb27d 100644 --- a/code/_onclick/hud/picture_in_picture.dm +++ b/code/_onclick/hud/picture_in_picture.dm @@ -15,7 +15,7 @@ var/const/max_dimensions = 10 -/atom/movable/screen/movable/pic_in_pic/Initialize(mapload) +/atom/movable/screen/movable/pic_in_pic/Initialize(mapload, datum/hud/hud_owner) . = ..() make_backgrounds() @@ -60,7 +60,7 @@ add_overlay(move_tab) if(!button_x) - button_x = new /atom/movable/screen/component_button(null, src) + button_x = new /atom/movable/screen/component_button(null, null, src) var/mutable_appearance/MA = new /mutable_appearance() MA.name = "close" MA.icon = 'icons/misc/pic_in_pic.dmi' @@ -73,7 +73,7 @@ vis_contents += button_x if(!button_expand) - button_expand = new /atom/movable/screen/component_button(null, src) + button_expand = new /atom/movable/screen/component_button(null, null, src) var/mutable_appearance/MA = new /mutable_appearance() MA.name = "expand" MA.icon = 'icons/misc/pic_in_pic.dmi' @@ -86,7 +86,7 @@ vis_contents += button_expand if(!button_shrink) - button_shrink = new /atom/movable/screen/component_button(null, src) + button_shrink = new /atom/movable/screen/component_button(null, null, src) var/mutable_appearance/MA = new /mutable_appearance() MA.name = "shrink" MA.icon = 'icons/misc/pic_in_pic.dmi' diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index 94a0e95b7a8cf..9822401ebea53 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -125,7 +125,7 @@ GLOBAL_LIST_EMPTY(radial_menus) if(length(elements) < max_elements) var/elements_to_add = max_elements - length(elements) for(var/i in 1 to elements_to_add) //Create all elements - var/atom/movable/screen/radial/slice/new_element = new /atom/movable/screen/radial/slice + var/atom/movable/screen/radial/slice/new_element = new /atom/movable/screen/radial/slice() new_element.tooltips = use_tooltips new_element.parent = src elements += new_element diff --git a/code/_onclick/hud/rendering/plane_master.dm b/code/_onclick/hud/rendering/_plane_master.dm similarity index 55% rename from code/_onclick/hud/rendering/plane_master.dm rename to code/_onclick/hud/rendering/_plane_master.dm index 4b62945149386..570e12b650f62 100644 --- a/code/_onclick/hud/rendering/plane_master.dm +++ b/code/_onclick/hud/rendering/_plane_master.dm @@ -17,12 +17,142 @@ ///reference to render relay screen object to avoid backdropping multiple times var/atom/movable/render_plane_relay/relay + /// If our plane master allows for offsetting + /// Mostly used for planes that really don't need to be duplicated, like the hud planes + var/allows_offsetting = TRUE + /// Our offset from our "true" plane, see below + var/offset + /// When rendering multiz, lower levels get their own set of plane masters + /// Real plane here represents the "true" plane value of something, ignoring the offset required to handle lower levels + var/real_plane + + /// list of current relays this plane is utilizing to render + var/list/atom/movable/render_plane_relay/relays = list() + + /// If this plane master should be hidden from the player at roundstart + /// We do this so PMs can opt into being temporary, to reduce load on clients + var/start_hidden = FALSE + /// If this plane master is being forced to hide. + /// Hidden PMs will dump ANYTHING relayed or drawn onto them. Be careful with this + /// Remember: a hidden plane master will dump anything drawn directly to it onto the output render. It does NOT hide its contents + /// Use alpha for that + var/force_hidden = FALSE + + /// If this plane should be scaled by multiz + /// Planes with this set should NEVER be relay'd into each other, as that will cause visual fuck + var/multiz_scaled = TRUE + + /// Bitfield that describes how this plane master will render if its z layer is being "optimized" + /// If a plane master is NOT critical, it will be completely dropped if we start to render outside a client's multiz boundary prefs + /// Of note: most of the time we will relay renders to non critical planes in this stage. so the plane master will end up drawing roughly "in order" with its friends + /// This is NOT done for parallax and other problem children, because the rules of BLEND_MULTIPLY appear to not behave as expected :( + /// This will also just make debugging harder, because we do fragile things in order to ensure things operate as epected. I'm sorry + /// Compile time + /// See [code\__DEFINES\layers.dm] for our bitflags + var/critical = NONE + + /// If this plane master is outside of our visual bounds right now + var/is_outside_bounds = FALSE + /atom/movable/screen/plane_master/proc/Show(override) alpha = override || show_alpha +/// Shows a plane master to the passed in mob +/// Override this to apply unique effects and such +/// Returns TRUE if the call is allowed, FALSE otherwise +/atom/movable/screen/plane_master/proc/show_to(mob/mymob) + SHOULD_CALL_PARENT(TRUE) + if(force_hidden) + return FALSE + + var/client/our_client = mymob?.canon_client + // Alright, let's get this out of the way + // Mobs can move z levels without their client. If this happens, we need to ensure critical display settings are respected + // This is done here. Mild to severe pain but it's nessesary + if(check_outside_bounds()) + if(!(critical & PLANE_CRITICAL_DISPLAY)) + return FALSE + if(!our_client) + return TRUE + our_client.screen += src + + if(!(critical & PLANE_CRITICAL_NO_RELAY)) + our_client.screen += relays + return TRUE + return TRUE + + if(!our_client) + return TRUE + + our_client.screen += src + our_client.screen += relays + return TRUE + +/// Hook to allow planes to work around is_outside_bounds +/// Return false to allow a show, true otherwise +/atom/movable/screen/plane_master/proc/check_outside_bounds() + return is_outside_bounds + /atom/movable/screen/plane_master/proc/Hide(override) alpha = override || hide_alpha +/// Hides a plane master from the passeed in mob +/// Do your effect cleanup here +/atom/movable/screen/plane_master/proc/hide_from(mob/oldmob) + SHOULD_CALL_PARENT(TRUE) + var/client/their_client = oldmob?.client + if(!their_client) + return + their_client.screen -= src + their_client.screen -= relays + +/// Forces this plane master to hide, until unhide_plane is called +/// This allows us to disable unused PMs without breaking anything else +/atom/movable/screen/plane_master/proc/hide_plane(mob/cast_away) + force_hidden = TRUE + hide_from(cast_away) + +/// Disables any forced hiding, allows the plane master to be used as normal +/atom/movable/screen/plane_master/proc/unhide_plane(mob/enfold) + force_hidden = FALSE + show_to(enfold) + +/atom/movable/screen/plane_master/proc/outside_bounds(mob/relevant) + if(force_hidden || is_outside_bounds) + return + is_outside_bounds = TRUE + // If we're of critical importance, AND we're below the rendering layer + if(critical & PLANE_CRITICAL_DISPLAY) + // We here assume that your render target starts with * + if(critical & PLANE_CRITICAL_CUT_RENDER && render_target) + render_target = copytext_char(render_target, 2) + if(!(critical & PLANE_CRITICAL_NO_RELAY)) + return + var/client/our_client = relevant.client + if(our_client) + for(var/atom/movable/render_plane_relay/relay as anything in relays) + our_client.screen -= relay + + return + hide_from(relevant) + +/atom/movable/screen/plane_master/proc/inside_bounds(mob/relevant) + is_outside_bounds = FALSE + if(critical & PLANE_CRITICAL_DISPLAY) + // We here assume that your render target starts with * + if(critical & PLANE_CRITICAL_CUT_RENDER && render_target) + render_target = "*[render_target]" + + if(!(critical & PLANE_CRITICAL_NO_RELAY)) + return + var/client/our_client = relevant.client + if(our_client) + for(var/atom/movable/render_plane_relay/relay as anything in relays) + our_client.screen += relay + + return + show_to(relevant) + //Why do plane masters need a backdrop sometimes? Read https://secure.byond.com/forum/?post=2141928 //Trust me, you need one. Period. If you don't think you do, you're doing something extremely wrong. /atom/movable/screen/plane_master/proc/backdrop(mob/mymob) @@ -45,7 +175,7 @@ appearance_flags = PLANE_MASTER render_relay_plane = RENDER_PLANE_GAME -/atom/movable/screen/plane_master/openspace/Initialize(mapload) +/atom/movable/screen/plane_master/openspace/Initialize(mapload, datum/hud/hud_owner) . = ..() add_filter("first_stage_openspace", 1, drop_shadow_filter(color = "#04080FAA", size = -10)) add_filter("second_stage_openspace", 2, drop_shadow_filter(color = "#04080FAA", size = -15)) @@ -80,6 +210,13 @@ return add_filter("eye_blur", 1, gauss_blur_filter(clamp(mymob.eye_blurry * 0.1, 0.6, 3))) +//Holds the seethrough versions (done using image overrides) of large objects. Mouse transparent, so you can click through them. +/atom/movable/screen/plane_master/seethrough + name = "Seethrough" + plane = SEETHROUGH_PLANE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + render_relay_plane = RENDER_PLANE_GAME + /** * Plane master handling byond internal blackness * vars are set as to replicate behavior when rendering to other planes @@ -118,7 +255,7 @@ mymob.overlay_fullscreen("lighting_backdrop", /atom/movable/screen/fullscreen/lighting_backdrop/backplane) mymob.overlay_fullscreen("lighting_backdrop_lit_secondary", /atom/movable/screen/fullscreen/lighting_backdrop/lit_secondary) -/atom/movable/screen/plane_master/lighting/Initialize(mapload) +/atom/movable/screen/plane_master/lighting/Initialize(mapload, datum/hud/hud_owner) . = ..() add_filter("emissives", 1, alpha_mask_filter(render_source = EMISSIVE_RENDER_TARGET, flags = MASK_INVERSE)) add_filter("object_lighting", 2, alpha_mask_filter(render_source = O_LIGHTING_VISUAL_RENDER_TARGET, flags = MASK_INVERSE)) @@ -133,7 +270,7 @@ render_target = EMISSIVE_RENDER_TARGET render_relay_plane = null -/atom/movable/screen/plane_master/emissive/Initialize(mapload) +/atom/movable/screen/plane_master/emissive/Initialize(mapload, datum/hud/hud_owner) . = ..() add_filter("em_block_masking", 1, color_matrix_filter(GLOB.em_mask_matrix)) diff --git a/code/_onclick/hud/rendering/plane_master_group.dm b/code/_onclick/hud/rendering/plane_master_group.dm new file mode 100644 index 0000000000000..322b1c3f62b57 --- /dev/null +++ b/code/_onclick/hud/rendering/plane_master_group.dm @@ -0,0 +1,205 @@ +/// Datum that represents one "group" of plane masters +/// So all the main window planes would be in one, all the spyglass planes in another +/// Etc +/datum/plane_master_group + /// Our key in the group list on /datum/hud + /// Should be unique for any group of plane masters in the world + var/key + /// Our parent hud + var/datum/hud/our_hud + /// List in the form "[plane]" = object, the plane masters we own + var/list/atom/movable/screen/plane_master/plane_masters = list() + /// The visual offset we are currently using + var/active_offset = 0 + /// What, if any, submap we render onto + var/map = "" + /// Controls the screen_loc that owned plane masters will use when generating relays. Due to a Byond bug, relays using the CENTER positional loc + /// Will be improperly offset + var/relay_loc = "CENTER" + +/datum/plane_master_group/New(key, map = "") + . = ..() + src.key = key + src.map = map + build_plane_masters(0, SSmapping.max_plane_offset) + +/datum/plane_master_group/Destroy() + orphan_hud() + QDEL_LIST_ASSOC_VAL(plane_masters) + return ..() + +/// Display a plane master group to some viewer, so show all our planes to it +/datum/plane_master_group/proc/attach_to(datum/hud/viewing_hud) + if(viewing_hud.master_groups[key]) + stack_trace("Hey brother, our key [key] is already in use by a plane master group on the passed in hud, belonging to [viewing_hud.mymob]. Ya fucked up, why are there dupes") + return + + our_hud = viewing_hud + our_hud.master_groups[key] = src + show_hud() + transform_lower_turfs(our_hud, active_offset) + +/// Hide the plane master from its current hud, fully clear it out +/datum/plane_master_group/proc/orphan_hud() + if(our_hud) + our_hud.master_groups -= key + hide_hud() + our_hud = null + +/// Well, refresh our group, mostly useful for plane specific updates +/datum/plane_master_group/proc/refresh_hud() + hide_hud() + show_hud() + +/// Fully regenerate our group, resetting our planes to their compile time values +/datum/plane_master_group/proc/rebuild_hud() + hide_hud() + rebuild_plane_masters() + show_hud() + transform_lower_turfs(our_hud, active_offset) + +/// Regenerate our plane masters, this is useful if we don't have a mob but still want to rebuild. Such in the case of changing the screen_loc of relays +/datum/plane_master_group/proc/rebuild_plane_masters() + QDEL_LIST_ASSOC_VAL(plane_masters) + build_plane_masters(0, SSmapping.max_plane_offset) + +/datum/plane_master_group/proc/hide_hud() + for(var/thing in plane_masters) + var/atom/movable/screen/plane_master/plane = plane_masters[thing] + plane.hide_from(our_hud.mymob) + +/datum/plane_master_group/proc/show_hud() + for(var/thing in plane_masters) + var/atom/movable/screen/plane_master/plane = plane_masters[thing] + show_plane(plane) + +/// This is mostly a proc so it can be overriden by popups, since they have unique behavior they want to do +/datum/plane_master_group/proc/show_plane(atom/movable/screen/plane_master/plane) + plane.show_to(our_hud.mymob) + +/// Nice wrapper for the "[]"ing +/datum/plane_master_group/proc/get_plane(plane) + return plane_masters["[plane]"] + +/// Returns a list of all the plane master types we want to create +/datum/plane_master_group/proc/get_plane_types() + return subtypesof(/atom/movable/screen/plane_master) - /atom/movable/screen/plane_master/rendering_plate + +/// Actually generate our plane masters, in some offset range (where offset is the z layers to render to, because each "layer" in a multiz stack gets its own plane master cube) +/datum/plane_master_group/proc/build_plane_masters(starting_offset, ending_offset) + for(var/atom/movable/screen/plane_master/mytype as anything in get_plane_types()) + for(var/plane_offset in starting_offset to ending_offset) + if(plane_offset != 0 && !initial(mytype.allows_offsetting)) + continue + var/atom/movable/screen/plane_master/instance = new mytype(null, null, src, plane_offset) + plane_masters["[instance.plane]"] = instance + prep_plane_instance(instance) + +/// Similarly, exists so subtypes can do unique behavior to planes on creation +/datum/plane_master_group/proc/prep_plane_instance(atom/movable/screen/plane_master/instance) + return + +// It would be nice to setup parallaxing for stairs and things when doing this +// So they look nicer. if you can't it's all good, if you think you can sanely look at monster's work +// It's hard, and potentially expensive. be careful +/datum/plane_master_group/proc/transform_lower_turfs(datum/hud/source, new_offset, use_scale = TRUE) + // Check if this feature is disabled for the client, in which case don't use scale. + var/mob/our_mob = our_hud?.mymob + + // No offset? piss off + if(!SSmapping.max_plane_offset) + return + + active_offset = new_offset + + // Each time we go "down" a visual z level, we'll reduce the scale by this amount + // Chosen because mothblocks liked it, didn't cause motion sickness while also giving a sense of height + var/scale_by = 0.965 + scale_by = 1 + + var/list/offsets = list() + + // We accept negatives so going down "zooms" away the drop above as it goes + for(var/offset in -SSmapping.max_plane_offset to SSmapping.max_plane_offset) + + // No transformations if we're landing ON you + if(offset == 0) + offsets += null + continue + + var/scale = scale_by ** (offset) + var/matrix/multiz_shrink = matrix() + multiz_shrink.Scale(scale) + offsets += multiz_shrink + + // So we can talk in 1 -> max_offset * 2 + 1, rather then -max_offset -> max_offset + var/offset_offset = SSmapping.max_plane_offset + 1 + + for(var/plane_key in plane_masters) + var/atom/movable/screen/plane_master/plane = plane_masters[plane_key] + if(!plane.allows_offsetting) + continue + + var/visual_offset = plane.offset - new_offset + + // Basically uh, if we're showing something down X amount of levels, or up any amount of levels + if(plane.is_outside_bounds) + plane.inside_bounds(our_mob) + + if(!plane.multiz_scaled) + continue + + if(plane.force_hidden || plane.is_outside_bounds || visual_offset < 0) + // We don't animate here because it should be invisble, but we do mark because it'll look nice + plane.transform = offsets[visual_offset + offset_offset] + continue + + animate(plane, transform = offsets[visual_offset + offset_offset], 0.05 SECONDS, easing = LINEAR_EASING) + +/// Holds plane masters for popups, like camera windows +/// Note: We do not scale this plane, even though we could +/// This is because it's annoying to get turfs to position inside it correctly +/// If you wanna try someday feel free, but I can't manage it +/datum/plane_master_group/popup + +/// This is janky as hell but since something changed with CENTER positioning after build 1614 we have to switch to the bandaid LEFT,TOP positioning +/// using LEFT,TOP *at* or *before* 1614 will result in another broken offset for cameras +#define MAX_CLIENT_BUILD_WITH_WORKING_SECONDARY_MAPS 1614 + +/datum/plane_master_group/popup/attach_to(datum/hud/viewing_hud) + // If we're about to display this group to a mob who's client is more recent than the last known version with working CENTER, then we need to remake the relays + // with the correct screen_loc using the relay override + if(viewing_hud.mymob?.client?.byond_build > MAX_CLIENT_BUILD_WITH_WORKING_SECONDARY_MAPS) + relay_loc = "LEFT,TOP" + rebuild_plane_masters() + return ..() + +#undef MAX_CLIENT_BUILD_WITH_WORKING_SECONDARY_MAPS + +/datum/plane_master_group/popup/transform_lower_turfs(datum/hud/source, new_offset, use_scale = TRUE) + return ..(source, new_offset, FALSE) + +/// Holds the main plane master +/datum/plane_master_group/main + +/datum/plane_master_group/main/transform_lower_turfs(datum/hud/source, new_offset, use_scale = TRUE) + if(use_scale) + return ..(source, new_offset, source.should_use_scale()) + return ..() + +/// Hudless group. Exists for testing +/datum/plane_master_group/hudless + var/mob/our_mob + +/datum/plane_master_group/hudless/Destroy() + . = ..() + our_mob = null + +/datum/plane_master_group/hudless/hide_hud() + for(var/thing in plane_masters) + var/atom/movable/screen/plane_master/plane = plane_masters[thing] + plane.hide_from(our_mob) + +/// This is mostly a proc so it can be overriden by popups, since they have unique behavior they want to do +/datum/plane_master_group/hudless/show_plane(atom/movable/screen/plane_master/plane) + plane.show_to(our_mob) diff --git a/code/_onclick/hud/rendering/render_plate.dm b/code/_onclick/hud/rendering/render_plate.dm index d3e67e40f65ec..b4b45b512f996 100644 --- a/code/_onclick/hud/rendering/render_plate.dm +++ b/code/_onclick/hud/rendering/render_plate.dm @@ -40,7 +40,7 @@ plane = RENDER_PLANE_GAME render_relay_plane = RENDER_PLANE_MASTER -/atom/movable/screen/plane_master/rendering_plate/game_world/Initialize(mapload) +/atom/movable/screen/plane_master/rendering_plate/game_world/Initialize(mapload, datum/hud/hud_owner) . = ..() add_filter("displacer", 1, displacement_map_filter(render_source = GRAVITY_PULSE_RENDER_TARGET, size = 10)) diff --git a/code/_onclick/hud/screen_objects/menu_text_objects.dm b/code/_onclick/hud/screen_objects/menu_text_objects.dm index 1b2db453df4ac..234358dfbc85f 100644 --- a/code/_onclick/hud/screen_objects/menu_text_objects.dm +++ b/code/_onclick/hud/screen_objects/menu_text_objects.dm @@ -33,7 +33,7 @@ /atom/movable/screen/text/lobby/clickable/MouseEntered(location, control, params) . = ..() - if(!(flags_atom & INITIALIZED)) //yes this can happen, fuck me + if(!(atom_flags & INITIALIZED)) //yes this can happen, fuck me return color = COLOR_ORANGE var/mob/new_player/player = usr @@ -44,7 +44,7 @@ color = initial(color) /atom/movable/screen/text/lobby/clickable/Click() - if(!(flags_atom & INITIALIZED)) //yes this can happen, fuck me + if(!(atom_flags & INITIALIZED)) //yes this can happen, fuck me to_chat(usr, span_warning("The game is still setting up, please try again later.")) return var/mob/new_player/player = usr @@ -159,6 +159,6 @@ /atom/movable/screen/text/lobby/clickable/polls/Click() . = ..() var/mob/new_player/player = hud.mymob - player.handle_playeR_DBRANKSing() + player.handle_playeR_POLLSing() fetch_polls() diff --git a/code/_onclick/hud/screen_objects/screen_objects.dm b/code/_onclick/hud/screen_objects/screen_objects.dm index 163705af29ae2..9749d77840203 100644 --- a/code/_onclick/hud/screen_objects/screen_objects.dm +++ b/code/_onclick/hud/screen_objects/screen_objects.dm @@ -23,6 +23,11 @@ */ var/del_on_map_removal = TRUE +/atom/movable/screen/Initialize(mapload, datum/hud/hud_owner) + . = ..() + if(hud_owner && istype(hud_owner)) + hud = hud_owner + /atom/movable/screen/Destroy() master = null hud = null @@ -80,9 +85,6 @@ if(isobserver(usr) || usr.incapacitated(TRUE)) return TRUE - if(istype(usr.loc, /obj/vehicle/multitile/root/cm_armored)) // stops inventory actions in a mech/tank - return TRUE - //If there is an item in the slot you are clicking on, this will relay the click to the item within the slot var/atom/item_in_slot = usr.get_item_by_slot(slot_id) if(item_in_slot) @@ -94,15 +96,20 @@ return TRUE /atom/movable/screen/inventory/hand + ///The tag used by this hand, used for activate_hand() + var/hand_tag = "" + +/atom/movable/screen/inventory/hand/left name = "l_hand" icon_state = "hand_l" screen_loc = ui_lhand - var/hand_tag = "l" + hand_tag = "l" -/atom/movable/screen/inventory/hand/update_icon(active = FALSE) - cut_overlays() - if(active) - add_overlay("hand_active") +/atom/movable/screen/inventory/hand/left/update_overlays() + . = ..() + if(!hud?.mymob?.hand) + return + . += "hand_active" /atom/movable/screen/inventory/hand/Click(location, control, params) . = ..() @@ -116,6 +123,12 @@ screen_loc = ui_rhand hand_tag = "r" +/atom/movable/screen/inventory/hand/right/update_overlays() + . = ..() + if(!hud?.mymob || hud.mymob.hand) + return + . += "hand_active" + /atom/movable/screen/close name = "close" layer = ABOVE_HUD_LAYER @@ -168,11 +181,12 @@ usr.toggle_move_intent() -/atom/movable/screen/mov_intent/update_icon(mob/user) - if(!user) +/atom/movable/screen/mov_intent/update_icon_state() + . = ..() + if(!hud?.mymob) return - switch(user.m_intent) + switch(hud.mymob.m_intent) if(MOVE_INTENT_RUN) icon_state = "running" if(MOVE_INTENT_WALK) @@ -191,12 +205,13 @@ if(!isliving(usr)) return var/mob/living/L = usr - L.lay_down() + L.toggle_resting() -/atom/movable/screen/rest/update_icon(mob/mymob) - if(!isliving(mymob)) +/atom/movable/screen/rest/update_icon_state() + . = ..() + if(!isliving(hud?.mymob)) return - var/mob/living/L = mymob + var/mob/living/L = hud?.mymob icon_state = "act_rest[L.resting ? "0" : ""]" /atom/movable/screen/pull @@ -212,10 +227,11 @@ usr.stop_pulling() -/atom/movable/screen/pull/update_icon(mob/user) - if(!user) +/atom/movable/screen/pull/update_icon_state() + . = ..() + if(!hud?.mymob) return - if(user.pulling) + if(hud.mymob.pulling) icon_state = "pull" else icon_state = "pull0" @@ -370,19 +386,19 @@ return BODY_ZONE_PRECISE_EYES return BODY_ZONE_HEAD -/atom/movable/screen/zone_sel/proc/set_selected_zone(choice, mob/user) +/atom/movable/screen/zone_sel/proc/set_selected_zone(choice = BODY_ZONE_CHEST, mob/user) if(isobserver(user)) return if(choice != selecting) selecting = choice - update_icon(user) + user.zone_selected = selecting + update_icon() return TRUE -/atom/movable/screen/zone_sel/update_icon(mob/user) - cut_overlays() - add_overlay(mutable_appearance('icons/mob/screen/zone_sel.dmi', "[z_prefix][selecting]")) - user.zone_selected = selecting +/atom/movable/screen/zone_sel/update_overlays() + . = ..() + . += mutable_appearance('icons/mob/screen/zone_sel.dmi', "[z_prefix][selecting]") /atom/movable/screen/zone_sel/alien icon = 'icons/mob/screen/alien.dmi' @@ -401,10 +417,25 @@ /atom/movable/screen/stamina_hud icon = 'icons/mob/screen/health.dmi' name = "stamina" - icon_state = "staminaloss0" + icon_state = "stamloss-14" screen_loc = UI_STAMINA mouse_opacity = MOUSE_OPACITY_ICON +/atom/movable/screen/stamina_hud/update_icon_state() + . = ..() + if(!ishuman(hud?.mymob)) + return + var/mob/living/carbon/human/mymob_human = hud.mymob + if(mymob_human.stat == DEAD) + icon_state = "stamloss200" + return + var/relative_stamloss = mymob_human.getStaminaLoss() + if(relative_stamloss < 0 && mymob_human.max_stamina) + relative_stamloss = round(((relative_stamloss * 14) / mymob_human.max_stamina), 1) + else + relative_stamloss = round(((relative_stamloss * 7) / (mymob_human.maxHealth * 2)), 1) + icon_state = "stamloss[relative_stamloss]" + /atom/movable/screen/stamina_hud/Click(location, control, params) if(!isliving(usr)) return @@ -418,7 +449,7 @@ /atom/movable/screen/component_button var/atom/movable/screen/parent -/atom/movable/screen/component_button/Initialize(mapload, atom/movable/screen/parent) +/atom/movable/screen/component_button/Initialize(mapload, datum/hud/hud_owner, atom/movable/screen/parent) . = ..() src.parent = parent @@ -498,18 +529,139 @@ icon_state = "temp0" screen_loc = ui_temp +/atom/movable/screen/bodytemp/update_icon_state() + . = ..() + if(!ishuman(hud?.mymob)) + return + var/mob/living/carbon/human/human_mymob = hud.mymob + if(!human_mymob.species) + switch(human_mymob.bodytemperature) //310.055 optimal body temp + if(370 to INFINITY) + icon_state = "temp4" + if(350 to 370) + icon_state = "temp3" + if(335 to 350) + icon_state = "temp2" + if(320 to 335) + icon_state = "temp1" + if(300 to 320) + icon_state = "temp0" + if(295 to 300) + icon_state = "temp-1" + if(280 to 295) + icon_state = "temp-2" + if(260 to 280) + icon_state = "temp-3" + else + icon_state = "temp-4" + return + + var/temp_step + if(human_mymob.bodytemperature >= human_mymob.species.body_temperature) + temp_step = (human_mymob.species.heat_level_1 - human_mymob.species.body_temperature) / 4 + + if(human_mymob.bodytemperature >= human_mymob.species.heat_level_1) + icon_state = "temp4" + else if(human_mymob.bodytemperature >= human_mymob.species.body_temperature + temp_step * 3) + icon_state = "temp3" + else if(human_mymob.bodytemperature >= human_mymob.species.body_temperature + temp_step * 2) + icon_state = "temp2" + else if(human_mymob.bodytemperature >= human_mymob.species.body_temperature + temp_step * 1) + icon_state = "temp1" + else + icon_state = "temp0" + return + + if(human_mymob.bodytemperature < human_mymob.species.body_temperature) + temp_step = (human_mymob.species.body_temperature - human_mymob.species.cold_level_1)/4 + + if(human_mymob.bodytemperature <= human_mymob.species.cold_level_1) + icon_state = "temp-4" + else if(human_mymob.bodytemperature <= human_mymob.species.body_temperature - temp_step * 3) + icon_state = "temp-3" + else if(human_mymob.bodytemperature <= human_mymob.species.body_temperature - temp_step * 2) + icon_state = "temp-2" + else if(human_mymob.bodytemperature <= human_mymob.species.body_temperature - temp_step * 1) + icon_state = "temp-1" + else + icon_state = "temp0" /atom/movable/screen/oxygen name = "oxygen" icon_state = "oxy0" screen_loc = ui_oxygen +/atom/movable/screen/oxygen/update_icon_state() + . = ..() + if(!ishuman(hud?.mymob)) + return + var/mob/living/carbon/human/human_mymob = hud.mymob + if(human_mymob.hal_screwyhud == 3 || human_mymob.oxygen_alert) + icon_state = "oxy1" + else + icon_state = "oxy0" + +/atom/movable/screen/toxin + name = "toxin" + icon_state = "tox0" + screen_loc = ui_toxin + +/atom/movable/screen/toxin/update_icon_state() + . = ..() + if(!ishuman(hud?.mymob)) + return + var/mob/living/carbon/human/human_mymob = hud.mymob + if(human_mymob.hal_screwyhud == 4) + icon_state = "tox1" + else + icon_state = "tox0" + +/atom/movable/screen/pressure + name = "pressure" + icon_state = "pressure0" + screen_loc = ui_pressure + +/atom/movable/screen/pressure/update_icon_state() + . = ..() + if(!ishuman(hud?.mymob)) + return + var/mob/living/carbon/human/human_mymob = hud.mymob + icon_state = "pressure[human_mymob.pressure_alert]" + +/atom/movable/screen/nutrition + name = "nutrition" + icon_state = "nutrition1" + screen_loc = ui_nutrition + +/atom/movable/screen/nutrition/update_icon_state() + . = ..() + if(!ishuman(hud?.mymob)) + return + var/mob/living/carbon/human/human_mymob = hud.mymob + switch(human_mymob.nutrition) + if(NUTRITION_OVERFED to INFINITY) + icon_state = "nutrition0" + if(NUTRITION_HUNGRY to NUTRITION_OVERFED) //Not-hungry. + icon_state = "nutrition1" //Empty icon. + if(NUTRITION_STARVING to NUTRITION_HUNGRY) + icon_state = "nutrition3" + else + icon_state = "nutrition4" /atom/movable/screen/fire - name = "fire" + name = "body temperature" icon_state = "fire0" screen_loc = ui_fire +/atom/movable/screen/fire/update_icon_state() + . = ..() + if(!ishuman(hud?.mymob)) + return + var/mob/living/carbon/human/human_mymob = hud.mymob + if(human_mymob.fire_alert) + icon_state = "fire[human_mymob.fire_alert]" //fire_alert is either 0 if no alert, 1 for cold and 2 for heat. + else + icon_state = "fire0" /atom/movable/screen/toggle_inv name = "toggle" @@ -547,7 +699,7 @@ ///List of possible screen locs var/static/list/ammo_screen_loc_list = list(ui_ammo1, ui_ammo2, ui_ammo3, ui_ammo4) -/atom/movable/screen/ammo/Initialize(mapload) +/atom/movable/screen/ammo/Initialize(mapload, datum/hud/hud_owner) . = ..() flash_holder = new flash_holder.icon_state = "frame" @@ -565,7 +717,7 @@ /atom/movable/screen/ammo/proc/add_hud(mob/living/user, datum/ammo_owner) if(isnull(ammo_owner)) CRASH("/atom/movable/screen/ammo/proc/add_hud() has been called from [src] without the required param of ammo_owner") - user?.client.screen += src + user?.client?.screen += src ///wrapper to removing this ammo hud from the users screen /atom/movable/screen/ammo/proc/remove_hud(mob/living/user) @@ -643,7 +795,7 @@ deltimer(del_timer) qdel(src) -/atom/movable/screen/arrow/Initialize(mapload) //Self-deletes +/atom/movable/screen/arrow/Initialize(mapload, datum/hud/hud_owner) //Self-deletes . = ..() START_PROCESSING(SSprocessing, src) del_timer = addtimer(CALLBACK(src, PROC_REF(kill_arrow)), duration, TIMER_STOPPABLE) diff --git a/code/_onclick/hud/screen_objects/text_objects.dm b/code/_onclick/hud/screen_objects/text_objects.dm index f717461f715db..3ef7cb80696d2 100644 --- a/code/_onclick/hud/screen_objects/text_objects.dm +++ b/code/_onclick/hud/screen_objects/text_objects.dm @@ -25,6 +25,7 @@ /atom/movable/screen/text/screen_timer/Initialize( mapload, + datum/hud/hud_owner, list/mobs, timer, text, diff --git a/code/_onclick/hud/xeno/hivemind.dm b/code/_onclick/hud/xeno/hivemind.dm index 1bc7fa6bc1225..5d8b0b0ccf2f0 100644 --- a/code/_onclick/hud/xeno/hivemind.dm +++ b/code/_onclick/hud/xeno/hivemind.dm @@ -2,18 +2,18 @@ ..() var/atom/movable/screen/using - using = new /atom/movable/screen/alien/nightvision() + using = new /atom/movable/screen/alien/nightvision(null, src) using.alpha = ui_alpha infodisplay += using - alien_plasma_display = new /atom/movable/screen/alien/plasmadisplay() + alien_plasma_display = new /atom/movable/screen/alien/plasmadisplay(null, src) alien_plasma_display.alpha = ui_alpha infodisplay += alien_plasma_display - healths = new /atom/movable/screen/healths/alien() + healths = new /atom/movable/screen/healths/alien(null, src) healths.alpha = ui_alpha infodisplay += healths - locate_leader = new /atom/movable/screen/alien/queen_locator() + locate_leader = new /atom/movable/screen/alien/queen_locator(null, src) locate_leader.alpha = ui_alpha infodisplay += locate_leader diff --git a/code/_onclick/hud/xeno/larva.dm b/code/_onclick/hud/xeno/larva.dm index f62626f522602..4db8f9b5445c8 100644 --- a/code/_onclick/hud/xeno/larva.dm +++ b/code/_onclick/hud/xeno/larva.dm @@ -3,21 +3,21 @@ ..() var/atom/movable/screen/using - using = new /atom/movable/screen/mov_intent/alien() + using = new /atom/movable/screen/mov_intent/alien(null, src) using.alpha = ui_alpha using.icon_state = (owner.m_intent == MOVE_INTENT_RUN ? "running" : "walking") static_inventory += using move_intent = using - using = new /atom/movable/screen/alien/nightvision() + using = new /atom/movable/screen/alien/nightvision(null, src) using.alpha = ui_alpha infodisplay += using - healths = new /atom/movable/screen/healths/alien() + healths = new /atom/movable/screen/healths/alien(null, src) healths.alpha = ui_alpha infodisplay += healths - locate_leader = new /atom/movable/screen/alien/queen_locator() + locate_leader = new /atom/movable/screen/alien/queen_locator(null, src) locate_leader.alpha = ui_alpha infodisplay += locate_leader */ diff --git a/code/_onclick/hud/xeno/xeno.dm b/code/_onclick/hud/xeno/xeno.dm index efe2f6183c38f..4380d1f191772 100644 --- a/code/_onclick/hud/xeno/xeno.dm +++ b/code/_onclick/hud/xeno/xeno.dm @@ -50,88 +50,86 @@ var/atom/movable/screen/using var/atom/movable/screen/inventory/inv_box - using = new /atom/movable/screen/act_intent/corner() + using = new /atom/movable/screen/act_intent/corner(null, src) using.alpha = ui_alpha using.icon_state = owner.a_intent static_inventory += using action_intent = using - using = new /atom/movable/screen/mov_intent/alien() + using = new /atom/movable/screen/mov_intent/alien(null, src) using.alpha = ui_alpha using.icon_state = (owner.m_intent == MOVE_INTENT_RUN ? "running" : "walking") static_inventory += using move_intent = using - using = new /atom/movable/screen/drop() + using = new /atom/movable/screen/drop(null, src) using.icon = 'icons/mob/screen/alien.dmi' using.alpha = ui_alpha static_inventory += using - inv_box = new /atom/movable/screen/inventory/hand/right() + inv_box = new /atom/movable/screen/inventory/hand/right(null, src) inv_box.icon = 'icons/mob/screen/alien.dmi' using.alpha = ui_alpha - if(owner && !owner.hand) //This being 0 or null means the right hand is in use - using.add_overlay("hand_active") inv_box.slot_id = SLOT_R_HAND + inv_box.update_icon() r_hand_hud_object = inv_box static_inventory += inv_box - inv_box = new /atom/movable/screen/inventory/hand() + inv_box = new /atom/movable/screen/inventory/hand/left(null, src) inv_box.icon = 'icons/mob/screen/alien.dmi' using.alpha = ui_alpha - if(owner?.hand) //This being 1 means the left hand is in use - inv_box.add_overlay("hand_active") inv_box.slot_id = SLOT_L_HAND + inv_box.update_icon() l_hand_hud_object = inv_box static_inventory += inv_box - using = new /atom/movable/screen/swap_hand() + using = new /atom/movable/screen/swap_hand(null, src) using.icon = 'icons/mob/screen/alien.dmi' using.alpha = ui_alpha static_inventory += using - using = new /atom/movable/screen/swap_hand/right() + using = new /atom/movable/screen/swap_hand/right(null, src) using.icon = 'icons/mob/screen/alien.dmi' using.alpha = ui_alpha static_inventory += using - using = new /atom/movable/screen/resist() + using = new /atom/movable/screen/resist(null, src) using.icon = 'icons/mob/screen/alien.dmi' using.screen_loc = ui_above_movement using.alpha = ui_alpha hotkeybuttons += using - throw_icon = new /atom/movable/screen/throw_catch() + throw_icon = new /atom/movable/screen/throw_catch(null, src) throw_icon.icon = 'icons/mob/screen/alien.dmi' throw_icon.alpha = ui_alpha hotkeybuttons += throw_icon - healths = new /atom/movable/screen/healths/alien() + healths = new /atom/movable/screen/healths/alien(null, src) healths.alpha = ui_alpha infodisplay += healths - using = new /atom/movable/screen/alien/nightvision() + using = new /atom/movable/screen/alien/nightvision(null, src) using.alpha = ui_alpha infodisplay += using - alien_plasma_display = new /atom/movable/screen/alien/plasmadisplay() + alien_plasma_display = new /atom/movable/screen/alien/plasmadisplay(null, src) alien_plasma_display.alpha = ui_alpha infodisplay += alien_plasma_display - locate_leader = new /atom/movable/screen/alien/queen_locator() + locate_leader = new /atom/movable/screen/alien/queen_locator(null, src) locate_leader.alpha = ui_alpha infodisplay += locate_leader - pull_icon = new /atom/movable/screen/pull() + pull_icon = new /atom/movable/screen/pull(null, src) pull_icon.icon = 'icons/mob/screen/alien.dmi' pull_icon.screen_loc = ui_above_movement pull_icon.alpha = ui_alpha - pull_icon.update_icon(owner) + pull_icon.update_icon() hotkeybuttons += pull_icon - zone_sel = new /atom/movable/screen/zone_sel/alien() - zone_sel.update_icon(owner) + zone_sel = new /atom/movable/screen/zone_sel/alien(null, src) + zone_sel.update_icon() static_inventory += zone_sel /datum/hud/alien/persistent_inventory_update() diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 873b0dcda3f32..3279e91364bf2 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -46,14 +46,22 @@ return interact(user) +///Called when the item is in the active hand, and RIGHT clicked; +/obj/item/proc/attack_self_alternate(mob/user) + SHOULD_CALL_PARENT(TRUE) + SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_SELF_ALTERNATE, user) + add_fingerprint(user, "attack_self_alternate") + /atom/proc/attackby(obj/item/I, mob/user, params) SIGNAL_HANDLER_DOES_SLEEP add_fingerprint(user, "attackby", I) if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACKBY, I, user, params) & COMPONENT_NO_AFTERATTACK) return TRUE + if(isgrabitem(I) && grab_interact(I, user)) + user.changeNext_move(GRAB_SLAM_DELAY) + return TRUE return FALSE - /obj/attackby(obj/item/I, mob/user, params) . = ..() if(.) @@ -68,7 +76,7 @@ /obj/item/proc/attack_obj(obj/O, mob/living/user) if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_OBJ, O, user) & COMPONENT_NO_ATTACK_OBJ) return - if(flags_item & NOBLUDGEON) + if(item_flags & NOBLUDGEON) return user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(O, used_item = src) @@ -84,7 +92,7 @@ span_warning("You hit [src] with [I]!"), visible_message_flags = COMBAT_MESSAGE) log_combat(user, src, "attacked", I) var/power = I.force + round(I.force * MELEE_SKILL_DAM_BUFF * user.skills.getRating(SKILL_MELEE_WEAPONS)) - take_damage(power, I.damtype, MELEE) + take_damage(power, I.damtype, MELEE, blame_mob = user) return TRUE @@ -185,7 +193,7 @@ if(M.can_be_operated_on() && do_surgery(M, user, src)) //Checks if mob is lying down on table for surgery return TRUE - if(flags_item & NOBLUDGEON) + if(item_flags & NOBLUDGEON) return FALSE if(!force) @@ -322,7 +330,7 @@ if(SEND_SIGNAL(user, COMSIG_MOB_ITEM_ATTACK_ALTERNATE, M, src) & COMPONENT_ITEM_NO_ATTACK) return FALSE - if(flags_item & NOBLUDGEON) + if(item_flags & NOBLUDGEON) return FALSE if(!force) diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 84cb76ea4514d..563d8cedd19f0 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -84,7 +84,7 @@ Redefine as needed. desc = "Magic" icon = 'icons/obj/magic.dmi' icon_state = "2" - flags_item = NOBLUDGEON | ITEM_ABSTRACT | DELONDROP + item_flags = NOBLUDGEON | ITEM_ABSTRACT | DELONDROP w_class = WEIGHT_CLASS_GIGANTIC layer = ABOVE_HUD_LAYER plane = ABOVE_HUD_PLANE @@ -206,16 +206,15 @@ Redefine as needed. return new /obj/effect/temp_visual/telekinesis(get_turf(focus)) - -/obj/item/tk_grab/update_icon() - cut_overlays() +/obj/item/tk_grab/update_overlays() + . = ..() if(!focus) return var/old_layer = focus.layer var/old_plane = focus.plane focus.layer = layer+0.01 focus.plane = ABOVE_HUD_PLANE - add_overlay(focus) //this is kind of ick, but it's better than using icon() + . += focus focus.layer = old_layer focus.plane = old_plane diff --git a/code/_onclick/xeno.dm b/code/_onclick/xeno.dm index f5b3d560a7d0f..51f156d593b6a 100644 --- a/code/_onclick/xeno.dm +++ b/code/_onclick/xeno.dm @@ -15,7 +15,7 @@ SSblackbox.record_feedback("tally", "round_statistics", 1, "xeno_unarmed_attacks") -/atom/proc/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) +/atom/proc/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) return diff --git a/code/controllers/configuration/config_entry.dm b/code/controllers/configuration/config_entry.dm index 5838c3d6287d0..4e6d484380dc4 100644 --- a/code/controllers/configuration/config_entry.dm +++ b/code/controllers/configuration/config_entry.dm @@ -118,6 +118,22 @@ config_entry_value = text2num(trim(str_val)) != 0 return TRUE +/// List config entry, used for configuring a list of strings +/datum/config_entry/str_list + abstract_type = /datum/config_entry/str_list + default = list() + dupes_allowed = TRUE + /// whether the string elements will be lowercased on ValidateAndSet or not. + var/lowercase = FALSE + +/datum/config_entry/str_list/ValidateAndSet(str_val) + if (!VASProcCallGuard(str_val)) + return FALSE + str_val = trim(str_val) + if (str_val != "") + config_entry_value += lowercase ? lowertext(str_val) : str_val + return TRUE + /datum/config_entry/number_list abstract_type = /datum/config_entry/number_list config_entry_value = list() diff --git a/code/controllers/globals.dm b/code/controllers/globals.dm index 5758429a6491a..b8851195288ee 100644 --- a/code/controllers/globals.dm +++ b/code/controllers/globals.dm @@ -18,9 +18,6 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars) controller_vars["vars"] = null gvars_datum_in_built_vars = controller_vars + list(NAMEOF(src, gvars_datum_protected_varlist), NAMEOF(src, gvars_datum_in_built_vars), NAMEOF(src, gvars_datum_init_order)) -#if DM_VERSION >= 515 && DM_BUILD > 1620 - #warn datum.vars hanging a ref should now be fixed, there should be no reason to remove the vars list from our controller's vars list anymore -#endif QDEL_IN(exclude_these, 1) //signal logging isn't ready log_world("[length(vars) - length(gvars_datum_in_built_vars)] global variables") diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 46fcbe5a56c6c..16bfb65ba3741 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -254,7 +254,7 @@ GLOBAL_REAL(Master, /datum/controller/master) var/msg = "Initializations complete within [time] second[time == 1 ? "" : "s"]!" - to_chat(world, span_boldannounce("[msg]")) + to_chat(world, span_boldwarning("[msg]")) log_world(msg) @@ -341,7 +341,7 @@ GLOBAL_REAL(Master, /datum/controller/master) chat_warning = TRUE var/message = "[message_prefix] [seconds] second[seconds == 1 ? "" : "s"]!" - var/chat_message = chat_warning ? span_boldwarning(message) : span_boldannounce(message) + var/chat_message = chat_warning ? span_boldwarning(message) : span_alert("[message]") to_chat(world, chat_message) log_world(message) diff --git a/code/controllers/subsystem/advanced_pathfinding.dm b/code/controllers/subsystem/advanced_pathfinding.dm index b6918c219bca5..bfd0dc50319e0 100644 --- a/code/controllers/subsystem/advanced_pathfinding.dm +++ b/code/controllers/subsystem/advanced_pathfinding.dm @@ -1,5 +1,5 @@ SUBSYSTEM_DEF(advanced_pathfinding) - name = "Advanced_pathfinding" + name = "Advanced Pathfinding" priority = FIRE_PRIORITY_ADVANCED_PATHFINDING wait = 1 SECONDS ///List of ai_behaviour datum asking for a tile pathfinding @@ -113,7 +113,7 @@ GLOBAL_LIST_EMPTY(goal_nodes) atom_to_check = current_node.adjacent_nodes[direction] if(TILE_PATHING) var/turf/turf_to_check = get_step(current_atom, direction) - if(turf_to_check.density || turf_to_check.flags_atom & AI_BLOCKED) + if(turf_to_check.density || turf_to_check.atom_flags & AI_BLOCKED) continue atom_to_check = turf_to_check if(paths_to_check[atom_to_check] || paths_checked[atom_to_check] || !atom_to_check) //We already found a better path to get to this atom diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm index efdaab4d38e2c..1c55f98e015bd 100644 --- a/code/controllers/subsystem/atoms.dm +++ b/code/controllers/subsystem/atoms.dm @@ -89,7 +89,7 @@ SUBSYSTEM_DEF(atoms) count = length(atoms) for(var/I in 1 to count) var/atom/A = atoms[I] - if(!(A.flags_atom & INITIALIZED)) + if(!(A.atom_flags & INITIALIZED)) CHECK_TICK PROFILE_INIT_ATOM_BEGIN() InitAtom(A, TRUE, mapload_arg) @@ -97,7 +97,7 @@ SUBSYSTEM_DEF(atoms) else count = 0 for(var/atom/A in world) - if(!(A.flags_atom & INITIALIZED)) + if(!(A.atom_flags & INITIALIZED)) PROFILE_INIT_ATOM_BEGIN() InitAtom(A, FALSE, mapload_arg) PROFILE_INIT_ATOM_END(A) @@ -141,7 +141,7 @@ SUBSYSTEM_DEF(atoms) if(!A) //possible harddel qdeleted = TRUE - else if(!(A.flags_atom & INITIALIZED)) + else if(!(A.atom_flags & INITIALIZED)) BadInitializeCalls[the_type] |= BAD_INIT_DIDNT_INIT else SEND_SIGNAL(A,COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE) diff --git a/code/controllers/subsystem/autofire.dm b/code/controllers/subsystem/autofire.dm index 09aae3a27a9ec..a5f4ac3006776 100644 --- a/code/controllers/subsystem/autofire.dm +++ b/code/controllers/subsystem/autofire.dm @@ -16,7 +16,7 @@ * Doesn't support any event scheduled for more than 100 ticks in the future, as it has no secondary queue by design */ SUBSYSTEM_DEF(automatedfire) - name = "Automated fire" + name = "Autofire" flags = SS_TICKER | SS_NO_INIT wait = 1 priority = FIRE_PRIORITY_AUTOFIRE @@ -180,7 +180,7 @@ SUBSYSTEM_DEF(automatedfire) SIGNAL_HANDLER var/obj/projectile/newshot = new(loc) newshot.generate_bullet(ammo) - newshot.fire_at(target, src, null, ammo.max_range, ammo.shell_speed) + newshot.fire_at(target, null, src, ammo.max_range, ammo.shell_speed) /datum/component/automatedfire/xeno_turret_autofire ///Delay between two shots diff --git a/code/controllers/subsystem/chat.dm b/code/controllers/subsystem/chat.dm index ddcdf8674136c..48fe275b34e80 100644 --- a/code/controllers/subsystem/chat.dm +++ b/code/controllers/subsystem/chat.dm @@ -5,39 +5,93 @@ SUBSYSTEM_DEF(chat) name = "Chat" - flags = SS_TICKER + flags = SS_TICKER|SS_NO_INIT wait = 1 priority = FIRE_PRIORITY_CHAT init_order = INIT_ORDER_CHAT - var/list/payload_by_client = list() + /// Assosciates a ckey with a list of messages to send to them. + var/list/list/datum/chat_payload/client_to_payloads = list() -/datum/controller/subsystem/chat/Initialize() - // Just used by chat system to know that initialization is nearly finished. - // The to_chat checks could probably check the runlevel instead, but would require testing. - return SS_INIT_SUCCESS + /// Associates a ckey with an assosciative list of their last CHAT_RELIABILITY_HISTORY_SIZE messages. + var/list/list/datum/chat_payload/client_to_reliability_history = list() + + /// Assosciates a ckey with their next sequence number. + var/list/client_to_sequence_number = list() + +/datum/controller/subsystem/chat/proc/generate_payload(client/target, message_data) + var/sequence = client_to_sequence_number[target.ckey]++ + + var/datum/chat_payload/payload = new + payload.sequence = sequence + payload.content = message_data + + var/list/client_history = client_to_reliability_history[target.ckey] + if(!islist(client_history)) + client_history = (client_to_reliability_history[target.ckey] = list()) + client_history["[sequence]"] = payload + + if(length(client_history) > CHAT_RELIABILITY_HISTORY_SIZE) + var/oldest = text2num(client_history[1]) + for(var/index in 2 to length(client_history)) + var/test = text2num(client_history[index]) + if(test < oldest) + oldest = test + client_history -= "[oldest]" + return payload + +/datum/controller/subsystem/chat/proc/send_payload_to_client(client/target, datum/chat_payload/payload) + target.tgui_panel.window.send_message("chat/message", payload.into_message()) + SEND_TEXT(target, payload.get_content_as_html()) /datum/controller/subsystem/chat/fire() - for(var/key in payload_by_client) - var/client/client = key - var/payload = payload_by_client[key] - payload_by_client -= key - if(client) - // Send to tgchat - client.tgui_panel?.window.send_message("chat/message", payload) - // Send to old chat - for(var/message in payload) - SEND_TEXT(client, message_to_html(message)) + for(var/ckey in client_to_payloads) + var/client/target = GLOB.directory[ckey] + if(isnull(target)) // verify client still exists + LAZYREMOVE(client_to_payloads, ckey) + continue + + for(var/datum/chat_payload/payload as anything in client_to_payloads[ckey]) + send_payload_to_client(target, payload) + LAZYREMOVE(client_to_payloads, ckey) + if(MC_TICK_CHECK) return -/datum/controller/subsystem/chat/proc/queue(target, message) - if(islist(target)) - for(var/_target in target) - var/client/client = CLIENT_FROM_VAR(_target) - if(client) - LAZYADD(payload_by_client[client], list(message)) +/datum/controller/subsystem/chat/proc/queue(queue_target, list/message_data) + var/list/targets = islist(queue_target) ? queue_target : list(queue_target) + for(var/target in targets) + var/client/client = CLIENT_FROM_VAR(target) + if(isnull(client)) + continue + LAZYADDASSOCLIST(client_to_payloads, client.ckey, generate_payload(client, message_data)) + +/datum/controller/subsystem/chat/proc/send_immediate(send_target, list/message_data) + var/list/targets = islist(send_target) ? send_target : list(send_target) + for(var/target in targets) + var/client/client = CLIENT_FROM_VAR(target) + if(isnull(client)) + continue + send_payload_to_client(client, generate_payload(client, message_data)) + +/datum/controller/subsystem/chat/proc/handle_resend(client/client, sequence) + var/list/client_history = client_to_reliability_history[client.ckey] + sequence = "[sequence]" + if(isnull(client_history) || !(sequence in client_history)) return - var/client/client = CLIENT_FROM_VAR(target) - if(client) - LAZYADD(payload_by_client[client], list(message)) + + var/datum/chat_payload/payload = client_history[sequence] + if(payload.resends > CHAT_RELIABILITY_MAX_RESENDS) + return // we tried but byond said no + + payload.resends += 1 + send_payload_to_client(client, client_history[sequence]) + SSblackbox.record_feedback( + "nested tally", + "chat_resend_byond_version", + 1, + list( + "[client.byond_version]", + "[client.byond_build]", + ), + ) diff --git a/code/controllers/subsystem/evacuation.dm b/code/controllers/subsystem/evacuation.dm index 3e9c7d3c79477..837975f6d0ee9 100644 --- a/code/controllers/subsystem/evacuation.dm +++ b/code/controllers/subsystem/evacuation.dm @@ -15,7 +15,7 @@ SUBSYSTEM_DEF(evacuation) var/dest_index = 1 var/dest_status = NUKE_EXPLOSION_INACTIVE - var/flags_scuttle = FLAGS_SDEVAC_TIMELOCK + var/scuttle_flags = FLAGS_SDEVAC_TIMELOCK ///How many marines were on ship when the dropship crashed var/initial_human_on_ship = 0 ///How many marines escaped @@ -80,13 +80,13 @@ SUBSYSTEM_DEF(evacuation) /datum/controller/subsystem/evacuation/proc/initiate_evacuation(override) if(evac_status != EVACUATION_STATUS_STANDING_BY) return FALSE - if(!override && flags_scuttle & (FLAGS_EVACUATION_DENY|FLAGS_SDEVAC_TIMELOCK)) + if(!override && scuttle_flags & (FLAGS_EVACUATION_DENY|FLAGS_SDEVAC_TIMELOCK)) return FALSE GLOB.enter_allowed = FALSE evac_time = world.time evac_status = EVACUATION_STATUS_INITIATING SEND_GLOBAL_SIGNAL(COMSIG_GLOB_EVACUATION_STARTED) - priority_announce("Emergency evacuation has been triggered. Please proceed to the escape pods. Evacuation in [EVACUATION_AUTOMATIC_DEPARTURE/600] minutes.", "Priority Alert", sound = 'sound/AI/evacuate.ogg') + priority_announce("Emergency evacuation has been triggered. Please proceed to the escape pods. Evacuation in [EVACUATION_AUTOMATIC_DEPARTURE/600] minutes.", title = "Emergency Evacuation", type = ANNOUNCEMENT_PRIORITY, sound = 'sound/AI/evacuate.ogg', color_override = "orange") xeno_message("A wave of adrenaline ripples through the hive. The fleshy creatures are trying to escape!") pod_list = SSshuttle.escape_pods.Copy() for(var/obj/docking_port/mobile/escape_pod/pod AS in pod_list) @@ -98,7 +98,7 @@ SUBSYSTEM_DEF(evacuation) if(evac_status != EVACUATION_STATUS_INITIATING) return FALSE evac_status = EVACUATION_STATUS_IN_PROGRESS - priority_announce("WARNING: Evacuation order confirmed. Launching escape pods.", "Priority Alert", sound = 'sound/AI/evacuation_confirmed.ogg') + priority_announce("WARNING: Evacuation order confirmed. Launching escape pods.", title = "Emergency Evacuation", type = ANNOUNCEMENT_PRIORITY, sound = 'sound/AI/evacuation_confirmed.ogg', color_override = "orange") return TRUE @@ -108,7 +108,7 @@ SUBSYSTEM_DEF(evacuation) GLOB.enter_allowed = TRUE evac_time = null evac_status = EVACUATION_STATUS_STANDING_BY - priority_announce("Evacuation has been cancelled.", "Priority Alert", sound = 'sound/AI/evacuate_cancelled.ogg') + priority_announce("Evacuation has been cancelled.", title = "Emergency Evacuation", type = ANNOUNCEMENT_PRIORITY, sound = 'sound/AI/evacuate_cancelled.ogg', color_override = "orange") for(var/obj/docking_port/mobile/escape_pod/pod AS in pod_list) pod.unprep_for_launch() return TRUE @@ -123,14 +123,14 @@ SUBSYSTEM_DEF(evacuation) . = "NOW" /datum/controller/subsystem/evacuation/proc/announce_evac_completion() - priority_announce("ATTENTION: Evacuation complete.", "Priority Alert", sound = 'sound/AI/evacuation_complete.ogg') + priority_announce("ATTENTION: Evacuation complete.", title = "Emergency Evacuation", type = ANNOUNCEMENT_PRIORITY, sound = 'sound/AI/evacuation_complete.ogg', color_override = "orange") evac_status = EVACUATION_STATUS_COMPLETE /datum/controller/subsystem/evacuation/proc/enable_self_destruct(override) if(dest_status != NUKE_EXPLOSION_INACTIVE) return FALSE - if(!override && flags_scuttle & (FLAGS_SELF_DESTRUCT_DENY|FLAGS_SDEVAC_TIMELOCK)) + if(!override && scuttle_flags & (FLAGS_SELF_DESTRUCT_DENY|FLAGS_SDEVAC_TIMELOCK)) return FALSE dest_status = NUKE_EXPLOSION_ACTIVE dest_master.toggle() @@ -158,7 +158,7 @@ SUBSYSTEM_DEF(evacuation) I.toggle(TRUE) dest_master.toggle(TRUE) dest_index = 1 - priority_announce("The emergency destruct system has been deactivated.", "Priority Alert", sound = 'sound/AI/selfdestruct_deactivated.ogg') + priority_announce("The emergency destruct system has been deactivated.", title = "Self Destruct System", type = ANNOUNCEMENT_PRIORITY, sound = 'sound/AI/selfdestruct_deactivated.ogg', color_override = "purple") if(evac_status == EVACUATION_STATUS_STANDING_BY) GLOB.marine_main_ship.set_security_level(SEC_LEVEL_RED, TRUE) for(var/obj/machinery/floor_warn_light/self_destruct/light AS in alarm_lights) @@ -177,7 +177,7 @@ SUBSYSTEM_DEF(evacuation) dest_master.visible_message(span_warning("WARNING: Unable to trigger detonation. Please arm all control rods.")) return FALSE - priority_announce("DANGER. DANGER. Self destruct system activated. DANGER. DANGER. Self destruct in progress. DANGER. DANGER.", "Priority Alert") + priority_announce("DANGER. DANGER. Self destruct system activated. DANGER. DANGER. Self destruct in progress. DANGER. DANGER.", title = "Self Destruct System", type = ANNOUNCEMENT_PRIORITY, color_override = "purple") GLOB.enter_allowed = FALSE dest_status = NUKE_EXPLOSION_IN_PROGRESS playsound(dest_master, 'sound/machines/alarm.ogg', 75, 0, 30) diff --git a/code/controllers/subsystem/explosions.dm b/code/controllers/subsystem/explosions.dm index 893663b1575d0..4227f43f4d134 100644 --- a/code/controllers/subsystem/explosions.dm +++ b/code/controllers/subsystem/explosions.dm @@ -196,14 +196,19 @@ SUBSYSTEM_DEF(explosions) ) ) + var/throw_strength //used here for epicenter and also later for every other turf if(devastation_range > 0) highTurf[epicenter] += list(epicenter) + throw_strength = MOVE_FORCE_EXCEPTIONALLY_STRONG else if(heavy_impact_range > 0) medTurf[epicenter] += list(epicenter) + throw_strength = MOVE_FORCE_EXTREMELY_STRONG else if(light_impact_range > 0) lowTurf[epicenter] += list(epicenter) + throw_strength = MOVE_FORCE_VERY_STRONG else if(weak_impact_range > 0) weakTurf[epicenter] += list(epicenter) + throw_strength = MOVE_FORCE_WEAK else if(flame_range > 0) //this proc shouldn't be used for flames only, but here we are if(usr) @@ -215,7 +220,7 @@ SUBSYSTEM_DEF(explosions) for(var/t in turfs_in_range) var/turf/throw_turf = t throwTurf[throw_turf] += list(epicenter) - throwTurf[throw_turf][epicenter] = list(throw_range, get_dir(epicenter, throw_turf)) + throwTurf[throw_turf][epicenter] = list(throw_range, get_dir(epicenter, throw_turf), MOVE_FORCE_EXTREMELY_STRONG) return //Our job here is done. if(flame_range) @@ -232,17 +237,16 @@ SUBSYSTEM_DEF(explosions) turfs_in_range[epicenter] = current_exp_block throwTurf[epicenter] += list(epicenter) - throwTurf[epicenter][epicenter] = list(max_range, 0) //Random direction. + throwTurf[epicenter][epicenter] = list(max_range, null, throw_strength) //Random direction, strength scales with severity /* We'll store how much each turf blocks the explosion's movement in turfs_in_range[turf] and how much movement is needed to reach it in turfs_by_dist[turf]. This way we'll be able to draw the explosion's expansion path without having to waste time processing the edge turfs, scanning their contents. */ - for(var/t in (turfs_in_range - epicenter)) - if(turfs_by_dist[t]) //Already processed. + for(var/turf/affected_turf AS in (turfs_in_range - epicenter)) + if(turfs_by_dist[affected_turf]) //Already processed. continue - var/turf/affected_turf = t var/dist = turfs_in_range[epicenter] var/turf/expansion_wave_loc = epicenter @@ -304,17 +308,21 @@ This way we'll be able to draw the explosion's expansion path without having to var/dist = turfs_by_dist[t] if(devastation_range > dist) highTurf[t] += list(epicenter) + throw_strength = MOVE_FORCE_EXCEPTIONALLY_STRONG else if(heavy_impact_range > dist) medTurf[t] += list(epicenter) + throw_strength = MOVE_FORCE_EXTREMELY_STRONG else if(light_impact_range > dist) lowTurf[t] += list(epicenter) + throw_strength = MOVE_FORCE_VERY_STRONG else if(weak_impact_range > dist) weakTurf[t] += list(epicenter) + throw_strength = MOVE_FORCE_WEAK if(flame_range > dist) flameturf += t if(throw_range > dist) throwTurf[t] += list(epicenter) - throwTurf[t][epicenter] = list(max_range - dist, get_dir(epicenter, t)) + throwTurf[t][epicenter] = list(max_range - dist, get_dir(epicenter, t), throw_strength) SEND_GLOBAL_SIGNAL(COMSIG_GLOB_EXPLOSION, epicenter, devastation_range, heavy_impact_range, light_impact_range, weak_impact_range, (REALTIMEOFDAY - started_at) * 0.1) @@ -338,8 +346,7 @@ This way we'll be able to draw the explosion's expansion path without having to timer = TICK_USAGE_REAL var/list/weak_turf = weakTurf weakTurf = list() - for(var/t in weak_turf) - var/turf/turf_to_explode = t + for(var/turf/turf_to_explode AS in weak_turf) if(QDELETED(turf_to_explode)) continue for(var/explosion_source in weak_turf[turf_to_explode]) @@ -351,8 +358,7 @@ This way we'll be able to draw the explosion's expansion path without having to timer = TICK_USAGE_REAL var/list/low_turf = lowTurf lowTurf = list() - for(var/t in low_turf) - var/turf/turf_to_explode = t + for(var/turf/turf_to_explode AS in low_turf) if(QDELETED(turf_to_explode)) continue for(var/explosion_source in low_turf[turf_to_explode]) @@ -364,8 +370,7 @@ This way we'll be able to draw the explosion's expansion path without having to timer = TICK_USAGE_REAL var/list/med_turf = medTurf medTurf = list() - for(var/t in med_turf) - var/turf/turf_to_explode = t + for(var/turf/turf_to_explode AS in med_turf) if(QDELETED(turf_to_explode)) continue for(var/explosion_source in med_turf[turf_to_explode]) @@ -377,8 +382,7 @@ This way we'll be able to draw the explosion's expansion path without having to timer = TICK_USAGE_REAL var/list/high_turf = highTurf highTurf = list() - for(var/t in high_turf) - var/turf/turf_to_explode = t + for(var/turf/turf_to_explode AS in high_turf) if(QDELETED(turf_to_explode)) continue for(var/explosion_source in high_turf[turf_to_explode]) @@ -405,8 +409,7 @@ This way we'll be able to draw the explosion's expansion path without having to timer = TICK_USAGE_REAL var/list/high_mov_atom = highMovAtom highMovAtom = list() - for(var/o in high_mov_atom) - var/obj/object_to_explode = o + for(var/obj/object_to_explode AS in high_mov_atom) if(QDELETED(object_to_explode)) continue for(var/explosion_source in high_mov_atom[object_to_explode]) @@ -418,8 +421,7 @@ This way we'll be able to draw the explosion's expansion path without having to timer = TICK_USAGE_REAL var/list/med_mov_atom = medMovAtom medMovAtom = list() - for(var/o in med_mov_atom) - var/obj/object_to_explode = o + for(var/obj/object_to_explode AS in med_mov_atom) if(QDELETED(object_to_explode)) continue for(var/explosion_source in med_mov_atom[object_to_explode]) @@ -431,8 +433,7 @@ This way we'll be able to draw the explosion's expansion path without having to timer = TICK_USAGE_REAL var/list/low_mov_atom = lowMovAtom lowMovAtom = list() - for(var/o in low_mov_atom) - var/obj/object_to_explode = o + for(var/obj/object_to_explode AS in low_mov_atom) if(QDELETED(object_to_explode)) continue for(var/explosion_source in low_mov_atom[object_to_explode]) @@ -444,8 +445,7 @@ This way we'll be able to draw the explosion's expansion path without having to timer = TICK_USAGE_REAL var/list/weak_mov_atom = weakMovAtom weakMovAtom = list() - for(var/o in weak_mov_atom) - var/obj/object_to_explode = o + for(var/obj/object_to_explode AS in weak_mov_atom) if(QDELETED(object_to_explode)) continue for(var/explosion_source in weak_mov_atom[object_to_explode]) @@ -460,8 +460,7 @@ This way we'll be able to draw the explosion's expansion path without having to timer = TICK_USAGE_REAL var/list/throw_turf = throwTurf throwTurf = list() - for(var/t in throw_turf) - var/turf/affected_turf = t + for(var/turf/affected_turf AS in throw_turf) if(QDELETED(affected_turf)) continue for(var/am in affected_turf) @@ -470,6 +469,8 @@ This way we'll be able to draw the explosion's expansion path without having to continue for(var/throw_source in throw_turf[affected_turf]) + if(throw_turf[affected_turf][throw_source][3] < (thing_to_throw.move_resist * MOVE_FORCE_THROW_RATIO)) + continue thing_to_throw.throw_at( get_ranged_target_turf( thing_to_throw, diff --git a/code/controllers/subsystem/icon_smooth.dm b/code/controllers/subsystem/icon_smooth.dm index d4ddfeff7e058..725c1b925528f 100644 --- a/code/controllers/subsystem/icon_smooth.dm +++ b/code/controllers/subsystem/icon_smooth.dm @@ -42,7 +42,7 @@ SUBSYSTEM_DEF(icon_smooth) cached.len-- if(QDELETED(smoothing_atom) || !(smoothing_atom.smoothing_flags & SMOOTH_QUEUED)) continue - if(smoothing_atom.flags_atom & INITIALIZED) + if(smoothing_atom.atom_flags & INITIALIZED) smoothing_atom.smooth_icon() else deferred += smoothing_atom diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 11f17edc545d3..14dd4d614ba50 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -209,7 +209,7 @@ SUBSYSTEM_DEF(job) if(PopcapReached()) RejectPlayer(player) //Choose a faction in advance if needed - if(SSticker.mode?.flags_round_type & MODE_TWO_HUMAN_FACTIONS) //Alternates between the two factions + if(SSticker.mode?.round_type_flags & MODE_TWO_HUMAN_FACTIONS) //Alternates between the two factions faction_rejected = faction_rejected == FACTION_TERRAGOV ? FACTION_SOM : FACTION_TERRAGOV // Loop through all jobs for(var/datum/job/job AS in occupations_to_assign) diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index a44bef29fcac4..9e3030d152f8b 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -23,6 +23,31 @@ SUBSYSTEM_DEF(mapping) var/list/reservation_ready = list() var/clearing_reserved_turfs = FALSE + /// List of z level (as number) -> plane offset of that z level + /// Used to maintain the plane cube + var/list/z_level_to_plane_offset = list() + /// List of z level (as number) -> list of all z levels vertically connected to ours + /// Useful for fast grouping lookups and such + var/list/z_level_to_stack = list() + /// List of z level (as number) -> The lowest plane offset in that z stack + var/list/z_level_to_lowest_plane_offset = list() + // This pair allows for easy conversion between an offset plane, and its true representation + // Both are in the form "input plane" -> output plane(s) + /// Assoc list of string plane values to their true, non offset representation + var/list/plane_offset_to_true + /// Assoc list of true string plane values to a list of all potential offset planess + var/list/true_to_offset_planes + /// Assoc list of string plane to the plane's offset value + var/list/plane_to_offset + /// List of planes that do not allow for offsetting + var/list/plane_offset_blacklist + /// List of render targets that do not allow for offsetting + var/list/render_offset_blacklist + /// List of plane masters that are of critical priority + var/list/critical_planes + /// The largest plane offset we've generated so far + var/max_plane_offset = 0 + // Z-manager stuff var/ground_start // should only be used for maploading-related tasks var/list/z_list @@ -133,7 +158,7 @@ SUBSYSTEM_DEF(mapping) z_list = SSmapping.z_list -#define INIT_ANNOUNCE(X) to_chat(world, span_notice("[X]")); log_world(X) +#define INIT_ANNOUNCE(X) to_chat(world, span_alert("[X]")); log_world(X) /datum/controller/subsystem/mapping/proc/LoadGroup(list/errorList, name, path, files, list/traits, list/default_traits, silent = FALSE) . = list() var/start_time = REALTIMEOFDAY @@ -344,7 +369,7 @@ SUBSYSTEM_DEF(mapping) // No need to empty() these, because it's world init and they're // already /turf/open/space/basic. var/turf/T = t - T.flags_atom |= UNUSED_RESERVATION_TURF_1 + T.atom_flags |= UNUSED_RESERVATION_TURF_1 unused_turfs["[z]"] = block reservation_ready["[z]"] = TRUE clearing_reserved_turfs = FALSE @@ -355,7 +380,7 @@ SUBSYSTEM_DEF(mapping) T.empty(RESERVED_TURF_TYPE, RESERVED_TURF_TYPE, null, TRUE) LAZYINITLIST(unused_turfs["[T.z]"]) unused_turfs["[T.z]"] |= T - T.flags_atom |= UNUSED_RESERVATION_TURF_1 + T.atom_flags |= UNUSED_RESERVATION_TURF_1 GLOB.areas_by_type[world.area].contents += T CHECK_TICK diff --git a/code/controllers/subsystem/minimaps.dm b/code/controllers/subsystem/minimaps.dm index 83e60b714b2f1..3884550f0aff4 100644 --- a/code/controllers/subsystem/minimaps.dm +++ b/code/controllers/subsystem/minimaps.dm @@ -322,7 +322,7 @@ SUBSYSTEM_DEF(minimaps) if(mover != src) return var/image/blip = SSminimaps.images_by_source[src] - blip?.UnregisterSignal(source, COMSIG_MOVABLE_MOVED) // RUTGMC ADDITION, added "?" + blip?.UnregisterSignal(source, COMSIG_MOVABLE_MOVED) UnregisterSignal(source, COMSIG_ATOM_EXITED) @@ -353,7 +353,7 @@ SUBSYSTEM_DEF(minimaps) var/hash = "[zlevel]-[flags]" if(hashed_minimaps[hash]) return hashed_minimaps[hash] - var/atom/movable/screen/minimap/map = new(null, zlevel, flags) + var/atom/movable/screen/minimap/map = new(null, null, zlevel, flags) if (!map.icon) //Don't wanna save an unusable minimap for a z-level. CRASH("Empty and unusable minimap generated for '[zlevel]-[flags]'") //Can be caused by atoms calling this proc before minimap subsystem initializing. hashed_minimaps[hash] = map @@ -381,7 +381,7 @@ SUBSYSTEM_DEF(minimaps) ///assoc list of mob choices by clicking on coords. only exists fleetingly for the wait loop in [/proc/get_coords_from_click] var/list/mob/choices_by_mob -/atom/movable/screen/minimap/Initialize(mapload, target, flags) +/atom/movable/screen/minimap/Initialize(mapload, datum/hud/hud_owner, target, flags) . = ..() if(!SSminimaps.minimaps_by_z["[target]"]) return @@ -516,20 +516,20 @@ SUBSYSTEM_DEF(minimaps) var/atom/movable/tracking = locator_override ? locator_override : owner var/atom/movable/new_track = to_track ? to_track : owner if(locator_override) - UnregisterSignal(locator_override, COMSIG_QDELETING) + clear_locator_override() if(owner) UnregisterSignal(tracking, COMSIG_MOVABLE_Z_CHANGED) if(!minimap_displayed) locator_override = to_track if(to_track) RegisterSignal(to_track, COMSIG_QDELETING, TYPE_PROC_REF(/datum/action/minimap, clear_locator_override)) - if(owner?.loc == to_track) // RUTGMC ADDITION, added "?" + if(owner && owner.loc == to_track) RegisterSignal(to_track, COMSIG_ATOM_EXITED, TYPE_PROC_REF(/datum/action/minimap, on_exit_check)) if(owner) RegisterSignal(new_track, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(on_owner_z_change)) var/turf/old_turf = get_turf(tracking) - if(!old_turf.z || old_turf.z != new_track.z) - on_owner_z_change(new_track, old_turf.z, new_track.z) + if(!old_turf || !old_turf.z || old_turf.z != new_track.z) + on_owner_z_change(new_track, old_turf?.z, new_track?.z) return locator.UnregisterSignal(tracking, COMSIG_MOVABLE_MOVED) locator_override = to_track diff --git a/code/controllers/subsystem/modularmapping.dm b/code/controllers/subsystem/modularmapping.dm index 75904f4aeed6f..017de18c4253f 100644 --- a/code/controllers/subsystem/modularmapping.dm +++ b/code/controllers/subsystem/modularmapping.dm @@ -1,5 +1,5 @@ SUBSYSTEM_DEF(modularmapping) - name = "Modularmapping" + name = "Modular Mapping" init_order = INIT_ORDER_MODULARMAPPING flags = SS_NO_FIRE var/list/obj/effect/spawner/modularmap/markers = list() diff --git a/code/controllers/subsystem/monitor.dm b/code/controllers/subsystem/monitor.dm index b61246c03a7a3..2bd946a92b04b 100644 --- a/code/controllers/subsystem/monitor.dm +++ b/code/controllers/subsystem/monitor.dm @@ -68,7 +68,7 @@ SUBSYSTEM_DEF(monitor) GLOB.xeno_stat_multiplicator_buff = proposed_balance_buff apply_balance_changes() - if(SSticker.mode?.flags_round_type & MODE_SILOS_SPAWN_MINIONS) + if(SSticker.mode?.round_type_flags & MODE_SILOS_SPAWN_MINIONS) //Balance spawners output for(var/silo in GLOB.xeno_resin_silos_by_hive[XENO_HIVE_NORMAL]) SSspawning.spawnerdata[silo].required_increment = 2 * max(45 SECONDS, 3 MINUTES - SSmonitor.maximum_connected_players_count * SPAWN_RATE_PER_PLAYER) / SSspawning.wait @@ -137,7 +137,7 @@ SUBSYSTEM_DEF(monitor) var/area/myarea = TU.loc if(is_ground_level(TU.z)) human_on_ground++ - if(myarea.flags_area & NEAR_FOB) + if(myarea.area_flags & NEAR_FOB) human_in_FOB++ else if(is_mainship_level(TU.z)) human_on_ship++ diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index b3f4066a314ea..b187a731bfce4 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -42,6 +42,7 @@ SUBSYSTEM_DEF(persistence) /datum/season_datum/weapons/guns/heavy_ff, /datum/season_datum/weapons/guns/heavy_autorail, /datum/season_datum/weapons/guns/heavy_shock, + /datum/season_datum/weapons/guns/heavy_explosions, ), ) ///The saved list of custom outfits names @@ -355,5 +356,20 @@ SUBSYSTEM_DEF(persistence) /obj/item/ammo_magazine/rocket/recoilless/smoke = 16, /obj/item/ammo_magazine/rocket/recoilless/plasmaloss = 16, /obj/structure/closet/crate/mortar_ammo/mlrs_kit = 2, - /obj/item/storage/box/mlrs_rockets_gas = 4, + /obj/item/storage/box/mlrs_rockets/gas = 4, + ) + +/datum/season_datum/weapons/guns/heavy_explosions + name = "Explosive Heavy Weapons" + description = "Flak cannon and Recoilless guns for roundstart vendors." + item_list = list( + /obj/structure/largecrate/supply/weapons/heavy_flakgun = 1, + /obj/item/ammo_magazine/heavy_isg/he = 8, + /obj/item/ammo_magazine/heavy_isg/sabot = 5, + /obj/item/storage/holster/backholster/rpg/full = 2, + /obj/item/ammo_magazine/rocket/recoilless = 4, + /obj/item/ammo_magazine/rocket/recoilless/light = 4, + /obj/item/ammo_magazine/rocket/recoilless/heat = 16, + /obj/item/ammo_magazine/rocket/recoilless/cloak = 16, + /obj/item/ammo_magazine/rocket/recoilless/smoke = 16, ) diff --git a/code/controllers/subsystem/points.dm b/code/controllers/subsystem/points.dm index 9f9168436deb2..f64166e8e45fd 100644 --- a/code/controllers/subsystem/points.dm +++ b/code/controllers/subsystem/points.dm @@ -12,8 +12,10 @@ SUBSYSTEM_DEF(points) var/dropship_points = 0 ///Assoc list of supply points var/supply_points = list() - ///Assoc list of xeno points: xeno_points_by_hive["hivenum"] - var/list/xeno_points_by_hive = list() + ///Assoc list of xeno strategic points: xeno_strategic_points_by_hive["hivenum"] + var/list/xeno_strategic_points_by_hive = list() + ///Assoc list of xeno tactical points: xeno_tactical_points_by_hive["hivenum"] + var/list/xeno_tactical_points_by_hive = list() var/ordernum = 1 //order number given to next order @@ -78,12 +80,17 @@ SUBSYSTEM_DEF(points) for(var/key in supply_points) supply_points[key] += SUPPLY_POINT_RATE / (1 MINUTES / wait) -///Add amount of psy points to the selected hive only if the gamemode support psypoints -/datum/controller/subsystem/points/proc/add_psy_points(hivenumber, amount) - if(!CHECK_BITFIELD(SSticker.mode.flags_round_type, MODE_PSY_POINTS)) +///Add amount of strategic psy points to the selected hive only if the gamemode support psypoints +/datum/controller/subsystem/points/proc/add_strategic_psy_points(hivenumber, amount) + if(!CHECK_BITFIELD(SSticker.mode.round_type_flags, MODE_PSY_POINTS)) return - xeno_points_by_hive[hivenumber] += amount + xeno_strategic_points_by_hive[hivenumber] += amount +///Add amount of tactical psy points to the selected hive only if the gamemode support psypoints +/datum/controller/subsystem/points/proc/add_tactical_psy_points(hivenumber, amount) + if(!CHECK_BITFIELD(SSticker.mode.round_type_flags, MODE_PSY_POINTS)) + return + xeno_tactical_points_by_hive[hivenumber] += amount /datum/controller/subsystem/points/proc/approve_request(datum/supply_order/O, mob/living/user) var/cost = 0 diff --git a/code/controllers/subsystem/server_maint.dm b/code/controllers/subsystem/server_maint.dm index 3786348ba556a..1ae502ef1ff2c 100644 --- a/code/controllers/subsystem/server_maint.dm +++ b/code/controllers/subsystem/server_maint.dm @@ -17,6 +17,8 @@ SUBSYSTEM_DEF(server_maint) /datum/controller/subsystem/server_maint/Initialize() + if (fexists("tmp/")) + fdel("tmp/") if(CONFIG_GET(flag/hub)) world.update_hub_visibility(TRUE) return SS_INIT_SUCCESS @@ -105,6 +107,8 @@ SUBSYSTEM_DEF(server_maint) /datum/controller/subsystem/server_maint/Shutdown() + if (fexists("tmp/")) + fdel("tmp/") var/server = CONFIG_GET(string/server) for(var/thing in GLOB.clients) if(!thing) diff --git a/code/controllers/subsystem/silo.dm b/code/controllers/subsystem/silo.dm index a14126b04258c..672f8cb5a8853 100644 --- a/code/controllers/subsystem/silo.dm +++ b/code/controllers/subsystem/silo.dm @@ -27,7 +27,9 @@ SUBSYSTEM_DEF(silo) current_larva_spawn_rate *= SSmonitor.gamestate == SHIPSIDE ? 3 : 1 current_larva_spawn_rate *= SSticker.mode.silo_scaling //We scale the rate based on the current ratio of humans to xenos - current_larva_spawn_rate *= clamp(round((active_humans / active_xenos) / (LARVA_POINTS_REGULAR / xeno_job.job_points_needed), 0.01), 0.5, 1) + var/current_human_to_xeno_ratio = active_humans / active_xenos + var/optimal_human_to_xeno_ratio = xeno_job.job_points_needed / LARVA_POINTS_REGULAR + current_larva_spawn_rate *= clamp(current_human_to_xeno_ratio / optimal_human_to_xeno_ratio , 0.7, 1) current_larva_spawn_rate += larva_spawn_rate_temporary_buff @@ -42,5 +44,5 @@ SUBSYSTEM_DEF(silo) /datum/controller/subsystem/silo/proc/start_spawning() SIGNAL_HANDLER UnregisterSignal(SSdcs, list(COMSIG_GLOB_OPEN_TIMED_SHUTTERS_LATE, COMSIG_GLOB_OPEN_TIMED_SHUTTERS_XENO_HIVEMIND, COMSIG_GLOB_OPEN_SHUTTERS_EARLY, COMSIG_GLOB_TADPOLE_LAUNCHED)) - if(SSticker.mode?.flags_round_type & MODE_SILO_RESPAWN) + if(SSticker.mode?.round_type_flags & MODE_SILO_RESPAWN) can_fire = TRUE diff --git a/code/controllers/subsystem/tgui.dm b/code/controllers/subsystem/tgui.dm index a818038be2ccb..038991401dda2 100644 --- a/code/controllers/subsystem/tgui.dm +++ b/code/controllers/subsystem/tgui.dm @@ -19,10 +19,8 @@ SUBSYSTEM_DEF(tgui) /// A list of UIs scheduled to process var/list/current_run = list() - /// A list of open UIs - var/list/open_uis = list() - /// A list of open UIs, grouped by src_object. - var/list/open_uis_by_src = list() + /// A list of all open UIs + var/list/all_uis = list() /// The HTML base used for all UIs. var/basehtml @@ -37,12 +35,12 @@ SUBSYSTEM_DEF(tgui) close_all_uis() /datum/controller/subsystem/tgui/stat_entry(msg) - msg = "P:[length(open_uis)]" + msg = "P:[length(all_uis)]" return ..() /datum/controller/subsystem/tgui/fire(resumed = FALSE) if(!resumed) - src.current_run = open_uis.Copy() + src.current_run = all_uis.Copy() // Cache for sanic speed (lists are references anyways) var/list/current_run = src.current_run while(length(current_run)) @@ -52,7 +50,7 @@ SUBSYSTEM_DEF(tgui) if(ui?.user && ui.src_object) ui.process(wait * 0.1) else - open_uis.Remove(ui) + ui.close(0) if(MC_TICK_CHECK) return @@ -171,11 +169,10 @@ SUBSYSTEM_DEF(tgui) * return datum/tgui The found UI. */ /datum/controller/subsystem/tgui/proc/get_open_ui(mob/user, datum/src_object) - var/key = "[REF(src_object)]" // No UIs opened for this src_object - if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list)) + if(!LAZYLEN(src_object?.open_uis)) return null - for(var/datum/tgui/ui in open_uis_by_src[key]) + for(var/datum/tgui/ui in src_object.open_uis) // Make sure we have the right user if(ui.user == user) return ui @@ -191,12 +188,11 @@ SUBSYSTEM_DEF(tgui) * return int The number of UIs updated. */ /datum/controller/subsystem/tgui/proc/update_uis(datum/src_object) - var/count = 0 - var/key = "[REF(src_object)]" // No UIs opened for this src_object - if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list)) - return count - for(var/datum/tgui/ui in open_uis_by_src[key]) + if(!LAZYLEN(src_object?.open_uis)) + return 0 + var/count = 0 + for(var/datum/tgui/ui in src_object.open_uis) // Check if UI is valid. if(ui?.src_object && ui.user && ui.src_object.ui_host(ui.user)) ui.process(wait * 0.1, force = 1) @@ -213,12 +209,11 @@ SUBSYSTEM_DEF(tgui) * return int The number of UIs closed. */ /datum/controller/subsystem/tgui/proc/close_uis(datum/src_object) - var/count = 0 - var/key = "[REF(src_object)]" // No UIs opened for this src_object - if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list)) - return count - for(var/datum/tgui/ui in open_uis_by_src[key]) + if(!LAZYLEN(src_object?.open_uis)) + return 0 + var/count = 0 + for(var/datum/tgui/ui in src_object.open_uis) // Check if UI is valid. if(ui?.src_object && ui.user && ui.src_object.ui_host(ui.user)) ui.close() @@ -234,12 +229,11 @@ SUBSYSTEM_DEF(tgui) */ /datum/controller/subsystem/tgui/proc/close_all_uis() var/count = 0 - for(var/key in open_uis_by_src) - for(var/datum/tgui/ui in open_uis_by_src[key]) - // Check if UI is valid. - if(ui?.src_object && ui.user && ui.src_object.ui_host(ui.user)) - ui.close() - count++ + for(var/datum/tgui/ui in all_uis) + // Check if UI is valid. + if(ui?.src_object && ui.user && ui.src_object.ui_host(ui.user)) + ui.close() + count++ return count /** @@ -290,13 +284,9 @@ SUBSYSTEM_DEF(tgui) * required ui datum/tgui The UI to be added. */ /datum/controller/subsystem/tgui/proc/on_open(datum/tgui/ui) - var/key = "[REF(ui.src_object)]" - if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list)) - open_uis_by_src[key] = list() - ui.user.tgui_open_uis |= ui - var/list/uis = open_uis_by_src[key] - uis |= ui - open_uis |= ui + ui.user?.tgui_open_uis |= ui + LAZYOR(ui.src_object.open_uis, ui) + all_uis |= ui /** * private @@ -308,18 +298,14 @@ SUBSYSTEM_DEF(tgui) * return bool If the UI was removed or not. */ /datum/controller/subsystem/tgui/proc/on_close(datum/tgui/ui) - var/key = "[REF(ui.src_object)]" - if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list)) - return FALSE // Remove it from the list of processing UIs. - open_uis.Remove(ui) + all_uis -= ui + current_run -= ui // If the user exists, remove it from them too. if(ui.user) - ui.user.tgui_open_uis.Remove(ui) - var/list/uis = open_uis_by_src[key] - uis.Remove(ui) - if(length(uis) == 0) - open_uis_by_src.Remove(key) + ui.user.tgui_open_uis -= ui + if(ui.src_object) + LAZYREMOVE(ui.src_object.open_uis, ui) return TRUE /** @@ -354,7 +340,7 @@ SUBSYSTEM_DEF(tgui) for(var/datum/tgui/ui in source.tgui_open_uis) // Inform the UIs of their new owner. ui.user = target - target.tgui_open_uis.Add(ui) + target.tgui_open_uis += ui // Clear the old list. source.tgui_open_uis.Cut() return TRUE diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 76812a33fe4e8..d92c066d73947 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -179,6 +179,7 @@ SUBSYSTEM_DEF(ticker) CHECK_TICK PostSetup() + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_GAMEMODE_LOADED) return TRUE diff --git a/code/controllers/subsystem/vis_overlays.dm b/code/controllers/subsystem/vis_overlays.dm new file mode 100644 index 0000000000000..1afe1c62100c8 --- /dev/null +++ b/code/controllers/subsystem/vis_overlays.dm @@ -0,0 +1,77 @@ +SUBSYSTEM_DEF(vis_overlays) + name = "Vis contents overlays" + wait = 1 MINUTES + priority = FIRE_PRIORITY_VIS + init_order = INIT_ORDER_VIS + + var/list/vis_overlay_cache + var/list/currentrun + +/datum/controller/subsystem/vis_overlays/Initialize() + vis_overlay_cache = list() + return SS_INIT_SUCCESS + +/datum/controller/subsystem/vis_overlays/fire(resumed = FALSE) + if(!resumed) + currentrun = vis_overlay_cache.Copy() + var/list/current_run = currentrun + + while(current_run.len) + var/key = current_run[current_run.len] + var/obj/effect/overlay/vis/overlay = current_run[key] + current_run.len-- + if(!overlay.unused && !length(overlay.vis_locs)) + overlay.unused = world.time + else if(overlay.unused && overlay.unused + overlay.cache_expiration < world.time) + vis_overlay_cache -= key + qdel(overlay) + if(MC_TICK_CHECK) + return + +//the "thing" var can be anything with vis_contents which includes images - in the future someone should totally allow vis overlays to be passed in as an arg instead of all this bullshit +/datum/controller/subsystem/vis_overlays/proc/add_vis_overlay(atom/movable/thing, icon, iconstate, layer, plane, dir, alpha = 255, add_appearance_flags = NONE, unique = FALSE) + var/obj/effect/overlay/vis/overlay + if(!unique) + . = "[icon]|[iconstate]|[layer]|[plane]|[dir]|[alpha]|[add_appearance_flags]" + overlay = vis_overlay_cache[.] + if(!overlay) + overlay = _create_new_vis_overlay(icon, iconstate, layer, plane, dir, alpha, add_appearance_flags) + vis_overlay_cache[.] = overlay + else + overlay.unused = 0 + else + overlay = _create_new_vis_overlay(icon, iconstate, layer, plane, dir, alpha, add_appearance_flags) + overlay.cache_expiration = -1 + var/cache_id = "[text_ref(overlay)]@{[world.time]}" + vis_overlay_cache[cache_id] = overlay + . = overlay + thing.vis_contents += overlay + + if(!isatom(thing)) // Automatic rotation is not supported on non atoms + return overlay + + if(!thing.managed_vis_overlays) + thing.managed_vis_overlays = list(overlay) + else + thing.managed_vis_overlays += overlay + return overlay + +/datum/controller/subsystem/vis_overlays/proc/_create_new_vis_overlay(icon, iconstate, layer, plane, dir, alpha, add_appearance_flags) + var/obj/effect/overlay/vis/overlay = new + overlay.icon = icon + overlay.icon_state = iconstate + overlay.layer = layer + overlay.plane = plane + overlay.dir = dir + overlay.alpha = alpha + overlay.appearance_flags |= add_appearance_flags + return overlay + + +/datum/controller/subsystem/vis_overlays/proc/remove_vis_overlay(atom/movable/thing, list/overlays) + thing.vis_contents -= overlays + if(!isatom(thing)) + return + thing.managed_vis_overlays -= overlays + if(!length(thing.managed_vis_overlays)) + thing.managed_vis_overlays = null diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index b6d4001c1a830..505ab205d1991 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -273,10 +273,12 @@ SUBSYSTEM_DEF(vote) var/datum/map_config/VM = config.maplist[GROUND_MAP][map] if(!VM.voteweight) continue + if(VM.map_name == SSmapping.configs[GROUND_MAP].map_name) //Current map is not votable + continue if(next_gamemode.whitelist_ground_maps) if(!(VM.map_name in next_gamemode.whitelist_ground_maps)) continue - else if(next_gamemode.blacklist_ground_maps) //can't blacklist and whitelist for the same map + else if(next_gamemode.blacklist_ground_maps) //Can't blacklist and whitelist for the same map if(VM.map_name in next_gamemode.blacklist_ground_maps) continue if(VM.config_max_users || VM.config_min_users) diff --git a/code/datums/actions/ability_actions.dm b/code/datums/actions/ability_actions.dm index fb5e2129d3701..95437b3ad91b6 100644 --- a/code/datums/actions/ability_actions.dm +++ b/code/datums/actions/ability_actions.dm @@ -17,15 +17,20 @@ var/target_flags = NONE /// flags to restrict an ability to certain gamemode var/gamemode_flags = ABILITY_ALL_GAMEMODE + ///Cooldown map text holder + var/obj/effect/countdown/action_cooldown/countdown /datum/action/ability/New(Target) . = ..() if(ability_cost) name = "[name] ([ability_cost])" - var/image/cooldown_image = image('icons/effects/progressicons.dmi', null, "busy_clock", ACTION_LAYER_CLOCK) - cooldown_image.pixel_y = 7 - cooldown_image.appearance_flags = RESET_COLOR|RESET_ALPHA - visual_references[VREF_IMAGE_XENO_CLOCK] = cooldown_image + countdown = new(button, src) + +/datum/action/ability/Destroy() + if(cooldown_timer) + deltimer(cooldown_timer) + QDEL_NULL(countdown) + return ..() /datum/action/ability/give_action(mob/living/L) . = ..() @@ -33,8 +38,6 @@ carbon_owner.mob_abilities += src /datum/action/ability/remove_action(mob/living/L) - if(cooldown_timer) - deltimer(cooldown_timer) var/mob/living/carbon/carbon_owner = L if(!istype(carbon_owner)) stack_trace("/datum/action/ability/remove_action called with [L], expecting /mob/living/carbon.") @@ -53,49 +56,49 @@ var/mob/living/carbon/carbon_owner = owner if(!carbon_owner) return FALSE - var/flags_to_check = use_state_flags|override_flags + var/to_check_flags = use_state_flags|override_flags - if(!(flags_to_check & ABILITY_IGNORE_COOLDOWN) && !action_cooldown_check()) + if(!(to_check_flags & ABILITY_IGNORE_COOLDOWN) && !action_cooldown_check()) if(!silent) carbon_owner.balloon_alert(carbon_owner, "Wait [cooldown_remaining()] sec") return FALSE - if(!(flags_to_check & ABILITY_USE_INCAP) && carbon_owner.incapacitated()) + if(!(to_check_flags & ABILITY_USE_INCAP) && carbon_owner.incapacitated()) if(!silent) carbon_owner.balloon_alert(carbon_owner, "Cannot while incapacitated") return FALSE - if(!(flags_to_check & ABILITY_USE_LYING) && carbon_owner.lying_angle) + if(!(to_check_flags & ABILITY_USE_LYING) && carbon_owner.lying_angle) if(!silent) carbon_owner.balloon_alert(carbon_owner, "Cannot while lying down") return FALSE - if(!(flags_to_check & ABILITY_USE_BUCKLED) && carbon_owner.buckled) + if(!(to_check_flags & ABILITY_USE_BUCKLED) && carbon_owner.buckled) if(!silent) carbon_owner.balloon_alert(carbon_owner, "Cannot while buckled") return FALSE - if(!(flags_to_check & ABILITY_USE_STAGGERED) && carbon_owner.IsStaggered()) + if(!(to_check_flags & ABILITY_USE_STAGGERED) && carbon_owner.IsStaggered()) if(!silent) carbon_owner.balloon_alert(carbon_owner, "Cannot while staggered") return FALSE - if(!(flags_to_check & ABILITY_USE_NOTTURF) && !isturf(carbon_owner.loc)) + if(!(to_check_flags & ABILITY_USE_NOTTURF) && !isturf(carbon_owner.loc)) if(!silent) carbon_owner.balloon_alert(carbon_owner, "Cannot do this here") return FALSE - if(!(flags_to_check & ABILITY_USE_BUSY) && carbon_owner.do_actions) + if(!(to_check_flags & ABILITY_USE_BUSY) && carbon_owner.do_actions) if(!silent) carbon_owner.balloon_alert(carbon_owner, "Cannot, busy") return FALSE - if(!(flags_to_check & ABILITY_USE_BURROWED) && HAS_TRAIT(carbon_owner, TRAIT_BURROWED)) + if(!(to_check_flags & ABILITY_USE_BURROWED) && HAS_TRAIT(carbon_owner, TRAIT_BURROWED)) if(!silent) carbon_owner.balloon_alert(carbon_owner, "Cannot while burrowed") return FALSE - if(!(flags_to_check & ABILITY_USE_CLOSEDTURF) && isclosedturf(get_turf(carbon_owner))) + if(!(to_check_flags & ABILITY_USE_CLOSEDTURF) && isclosedturf(get_turf(carbon_owner))) if(!silent) //Not converted to balloon alert as xeno.dm's balloon alert is simultaneously called and will overlap. to_chat(owner, span_warning("We can't do this while in a solid object!")) @@ -141,7 +144,8 @@ if(cooldown_timer || !cooldown_length) // stop doubling up or waiting on zero return cooldown_timer = addtimer(CALLBACK(src, PROC_REF(on_cooldown_finish)), cooldown_length, TIMER_STOPPABLE) - button.add_overlay(visual_references[VREF_IMAGE_XENO_CLOCK]) + countdown.start() + update_button_icon() ///Time remaining on cooldown /datum/action/ability/proc/cooldown_remaining() @@ -150,9 +154,10 @@ ///override this for cooldown completion /datum/action/ability/proc/on_cooldown_finish() cooldown_timer = null + countdown.stop() if(!button) - CRASH("no button object on finishing ability action cooldown") - button.cut_overlay(visual_references[VREF_IMAGE_XENO_CLOCK]) + return + update_button_icon() ///Any changes when a xeno with this ability evolves /datum/action/ability/proc/on_xeno_upgrade() @@ -163,10 +168,22 @@ /datum/action/ability/activable/Destroy() var/mob/living/carbon/carbon_owner = owner - if(carbon_owner.selected_ability == src) + if(carbon_owner?.selected_ability == src) deselect() return ..() +/datum/action/ability/activable/set_toggle(value) + . = ..() + if(!.) + return + if(!owner) + return + if(toggled) + SEND_SIGNAL(owner, COMSIG_ACTION_EXCLUSIVE_TOGGLE, owner) + RegisterSignal(owner, COMSIG_ACTION_EXCLUSIVE_TOGGLE, PROC_REF(deselect)) + else + UnregisterSignal(owner, COMSIG_ACTION_EXCLUSIVE_TOGGLE) + /datum/action/ability/activable/alternate_action_activate() INVOKE_ASYNC(src, PROC_REF(action_activate)) @@ -192,6 +209,7 @@ action_activate() /datum/action/ability/activable/remove_action(mob/living/carbon/carbon_owner) + deselect() if(carbon_owner.selected_ability == src) carbon_owner.selected_ability = null return ..() @@ -206,13 +224,13 @@ if(QDELETED(owner)) return FALSE - var/flags_to_check = use_state_flags|override_flags + var/to_check_flags = use_state_flags|override_flags var/mob/living/carbon/carbon_owner = owner - if(!CHECK_BITFIELD(flags_to_check, ABILITY_IGNORE_SELECTED_ABILITY) && carbon_owner.selected_ability != src) + if(!CHECK_BITFIELD(to_check_flags, ABILITY_IGNORE_SELECTED_ABILITY) && carbon_owner.selected_ability != src) return FALSE . = can_use_action(silent, override_flags) - if(!CHECK_BITFIELD(flags_to_check, ABILITY_TARGET_SELF) && A == owner) + if(!CHECK_BITFIELD(to_check_flags, ABILITY_TARGET_SELF) && A == owner) return FALSE ///the thing to do when the selected action ability is selected and triggered by middle_click @@ -220,17 +238,18 @@ return ///Setting this ability as the active ability -/datum/action/ability/activable/proc/select() +/datum/action/ability/activable/select() + . = ..() var/mob/living/carbon/carbon_owner = owner - set_toggle(TRUE) carbon_owner.selected_ability = src on_selection() ///Deselecting this ability for use -/datum/action/ability/activable/proc/deselect() - var/mob/living/carbon/carbon_owner = owner - set_toggle(FALSE) - carbon_owner.selected_ability = null +/datum/action/ability/activable/deselect() + . = ..() + if(owner) + var/mob/living/carbon/carbon_owner = owner + carbon_owner.selected_ability = null on_deselection() ///Any effects on selecting this ability @@ -254,7 +273,7 @@ /mob/living/carbon/proc/add_ability(datum/action/ability/new_ability) if(!new_ability) return - new_ability = new new_ability + new_ability = new new_ability(src) new_ability.give_action(src) ///Removes an ability from a mob diff --git a/code/datums/actions/action.dm b/code/datums/actions/action.dm index 6ccb7b23b09b6..9427574dfaf3c 100644 --- a/code/datums/actions/action.dm +++ b/code/datums/actions/action.dm @@ -61,8 +61,10 @@ KEYBINDINGS target = null return ..() +/// Cleans up the action if the owner is deleted /datum/action/proc/clean_action() SIGNAL_HANDLER + SHOULD_CALL_PARENT(TRUE) qdel(src) /datum/action/proc/should_show() @@ -71,21 +73,19 @@ KEYBINDINGS ///Depending on the action type , toggles the selected/active frame to show without allowing stacking multiple overlays /datum/action/proc/set_toggle(value) if(value == toggled) - return - if(value) - switch(action_type) - if(ACTION_SELECT) - button.add_overlay(visual_references[VREF_MUTABLE_SELECTED_FRAME]) - if(ACTION_TOGGLE) - button.add_overlay(visual_references[VREF_MUTABLE_ACTIVE_FRAME]) - toggled = TRUE - return - switch(action_type) - if(ACTION_SELECT) - button.cut_overlay(visual_references[VREF_MUTABLE_SELECTED_FRAME]) - if(ACTION_TOGGLE) - button.cut_overlay(visual_references[VREF_MUTABLE_ACTIVE_FRAME]) - toggled = FALSE + return FALSE + toggled = value + update_button_icon() + return TRUE + +///Setting this action as the active action +/datum/action/proc/select() + set_toggle(TRUE) + +///Deselecting this action for use +/datum/action/proc/deselect() + SIGNAL_HANDLER + set_toggle(FALSE) ///A handler used to update the maptext and show the change immediately. /datum/action/proc/update_map_text(key_string, key_signal) @@ -120,6 +120,17 @@ KEYBINDINGS button.add_overlay(action_appearence) if(background_icon_state != button.icon_state) button.icon_state = background_icon_state + switch(action_type) + if(ACTION_SELECT) + button.cut_overlay(visual_references[VREF_MUTABLE_SELECTED_FRAME]) + if(ACTION_TOGGLE) + button.cut_overlay(visual_references[VREF_MUTABLE_ACTIVE_FRAME]) + if(toggled) + switch(action_type) + if(ACTION_SELECT) + button.add_overlay(visual_references[VREF_MUTABLE_SELECTED_FRAME]) + if(ACTION_TOGGLE) + button.add_overlay(visual_references[VREF_MUTABLE_ACTIVE_FRAME]) handle_button_status_visuals() return TRUE diff --git a/code/datums/actions/item_action.dm b/code/datums/actions/item_action.dm index f903661917cd5..a278e9a73b27d 100644 --- a/code/datums/actions/item_action.dm +++ b/code/datums/actions/item_action.dm @@ -25,9 +25,10 @@ return ..() /datum/action/item_action/action_activate() - if(target) - var/obj/item/I = target - I.ui_action_click(owner, src, holder_item) + if(!target) + return FALSE + var/obj/item/I = target + return I.ui_action_click(owner, src, holder_item) /datum/action/item_action/can_use_action() if(QDELETED(owner) || owner.incapacitated() || owner.lying_angle) @@ -55,17 +56,15 @@ name = "Toggle [target]" button.name = name +/datum/action/item_action/toggle/action_activate() + . = ..() + if(!.) + return + set_toggle(!toggled) + /datum/action/item_action/toggle/suit_toggle keybinding_signals = list(KEYBINDING_NORMAL = COMSIG_KB_SUITLIGHT) -/datum/action/item_action/toggle/suit_toggle/update_button_icon() - set_toggle(holder_item.light_on) - return ..() - -/datum/action/item_action/toggle/motion_detector/action_activate() - . = ..() - update_button_icon() - /datum/action/item_action/firemode // just here so players see what key is it bound to keybinding_signals = list( @@ -81,6 +80,12 @@ holder_gun = holder_item update_button_icon() +/datum/action/item_action/firemode/action_activate() + . = ..() + if(!.) + return + update_button_icon() + /datum/action/item_action/firemode/update_button_icon() if(holder_gun.gun_firemode == action_firemode) diff --git a/code/datums/actions/item_toggles.dm b/code/datums/actions/item_toggles.dm new file mode 100644 index 0000000000000..9804364b42162 --- /dev/null +++ b/code/datums/actions/item_toggles.dm @@ -0,0 +1,40 @@ +/datum/action/ability/activable/item_toggle + name = "" + /** + *the item that has this action in its list of actions. Is not necessarily the target + * e.g. gun attachment action: target = attachment, holder = gun. + */ + var/obj/item/holder_item + /// Defines wheter we overlay the image of the obj we are linked to + var/use_obj_appeareance = TRUE + +/datum/action/ability/activable/item_toggle/New(Target, obj/item/holder) + . = ..() + if(!holder) + holder = target + holder_item = holder + if(!name) + name = "Use [target]" + button.name = name + +/datum/action/ability/activable/item_toggle/Destroy() + holder_item = null + return ..() + +/datum/action/ability/activable/item_toggle/use_ability(atom/target) + holder_item.ui_action_click(owner, src, target) + succeed_activate() + add_cooldown() + +/datum/action/ability/activable/item_toggle/update_button_icon() + if(visual_references[VREF_MUTABLE_LINKED_OBJ]) + button.cut_overlay(visual_references[VREF_MUTABLE_LINKED_OBJ]) + if(use_obj_appeareance) + var/obj/item/I = target + // -0.5 so its below maptext and above the selected frames + var/item_image = mutable_appearance(I.icon, I.icon_state, ACTION_LAYER_IMAGE_ONTOP, FLOAT_PLANE) + visual_references[VREF_MUTABLE_LINKED_OBJ] = item_image + button.add_overlay(item_image) + else + visual_references[VREF_MUTABLE_LINKED_OBJ] = null + return ..() diff --git a/code/datums/actions/order_action.dm b/code/datums/actions/order_action.dm index 1b34232d0f75e..35dfb086e9eab 100644 --- a/code/datums/actions/order_action.dm +++ b/code/datums/actions/order_action.dm @@ -9,7 +9,7 @@ ///What skill is needed to have this action var/skill_name = SKILL_LEADERSHIP ///What minimum level in that skill is needed to have that action - var/skill_min = SKILL_LEAD_EXPERT + var/skill_min = SKILL_LEAD_TRAINED /datum/action/innate/order/give_action(mob/M) . = ..() diff --git a/code/datums/actions/species_actions/sectoid_action.dm b/code/datums/actions/species_actions/sectoid_action.dm new file mode 100644 index 0000000000000..1ca81e912aff1 --- /dev/null +++ b/code/datums/actions/species_actions/sectoid_action.dm @@ -0,0 +1,563 @@ + +/datum/action/ability/activable/sectoid + action_icon = 'icons/mob/psionic_icons.dmi' + +// *************************************** +// *********** Mindmeld +// *************************************** +/datum/action/ability/activable/sectoid/mindmeld + name = "Mindmeld" + action_icon_state = "mindmeld" + desc = "Merge minds with the target, empowering both." + cooldown_duration = 60 SECONDS + target_flags = ABILITY_MOB_TARGET + keybinding_signals = list( + KEYBINDING_NORMAL = COMSIG_ABILITY_MINDMELD, + ) + var/mob/living/carbon/melded_mob + ///Range the linkees must be to each other to benefit + var/max_range = 6 + ///Projectile accuracy buff + var/accuracy_mod = 25 + ///Max health buff + var/health_mod = 50 + ///Movement speed buff + var/speed_mod = -0.4 + ///% chance to ignore stuns + var/stun_resistance = 0 + +/datum/action/ability/activable/sectoid/mindmeld/remove_action(mob/living/carbon/carbon_owner) + end_ability() + return ..() + +/datum/action/ability/activable/sectoid/mindmeld/can_use_action() + . = ..() + if(!.) + return + var/mob/living/carbon/carbon_owner = owner + if(melded_mob) + return FALSE + if(HAS_TRAIT(carbon_owner, TRAIT_MINDMELDED)) + return FALSE + return TRUE + +/datum/action/ability/activable/sectoid/mindmeld/can_use_ability(atom/A, silent = FALSE, override_flags) + . = ..() + if(!.) + return + if(!iscarbon(A)) + if(!silent) + A.balloon_alert(owner, "not living") + return FALSE + var/mob/living/carbon/carbon_target = A + if(owner.faction != carbon_target.faction) + if(!silent) + A.balloon_alert(owner, "hostile!") + return FALSE + if(HAS_TRAIT(carbon_target, TRAIT_MINDMELDED)) + if(!silent) + A.balloon_alert(owner, "already melded!") + return FALSE + if((A.z != owner.z) || !line_of_sight(owner, A, max_range)) + if(!silent) + owner.balloon_alert(owner, "Out of sight!") + return FALSE + if(carbon_target.stat == DEAD) + if(!silent) + carbon_target.balloon_alert(owner, "already dead") + return FALSE + +/datum/action/ability/activable/sectoid/mindmeld/use_ability(atom/target) + var/mob/living/carbon/carbon_owner = owner + melded_mob = target + melded_mob.balloon_alert_to_viewers("mindmelded") + owner.balloon_alert_to_viewers("mindmelded") + playsound(melded_mob, 'sound/effects/off_guard_ability.ogg', 50) + + melded_mob.apply_status_effect(STATUS_EFFECT_MINDMEND, carbon_owner, max_range, accuracy_mod, health_mod, speed_mod, stun_resistance) + carbon_owner.apply_status_effect(STATUS_EFFECT_MINDMEND, carbon_owner, max_range, accuracy_mod, health_mod, speed_mod, stun_resistance) + RegisterSignal(melded_mob, COMSIG_MOB_DEATH, PROC_REF(end_ability)) + RegisterSignal(carbon_owner, COMSIG_MOB_DEATH, PROC_REF(end_ability)) + + succeed_activate() + add_cooldown() + +/// Ends the ability if the Enhancement buff is removed. +/datum/action/ability/activable/sectoid/mindmeld/proc/end_ability() + SIGNAL_HANDLER + UnregisterSignal(owner, COMSIG_MOB_DEATH) + var/mob/living/carbon/carbon_owner = owner + carbon_owner.remove_status_effect(STATUS_EFFECT_MINDMEND) + if(!melded_mob) + return + UnregisterSignal(melded_mob, COMSIG_MOB_DEATH) + melded_mob.remove_status_effect(STATUS_EFFECT_MINDMEND) + melded_mob = null + +/datum/action/ability/activable/sectoid/mindmeld/greater + name = "Greater Mindmeld" + desc = "Merge minds with the target, greatly empowering both." + max_range = 12 + accuracy_mod = 40 + health_mod = 70 + speed_mod = -0.5 + stun_resistance = 50 + +#define MINDFRAY_RANGE 8 +/datum/action/ability/activable/sectoid/mindfray + name = "Mindfray" + action_icon_state = "mindfray" + desc = "Muddles the mind of an enemy, making it harder for them to focus their aim for a while." + cooldown_duration = 20 SECONDS + target_flags = ABILITY_MOB_TARGET + keybinding_signals = list( + KEYBINDING_NORMAL = COMSIG_ABILITY_MINDFRAY, + ) + ///damage of this ability + var/damage = 20 + +/datum/action/ability/activable/sectoid/mindfray/can_use_ability(atom/A, silent = FALSE, override_flags) + . = ..() + if(!.) + return + if(!iscarbon(A)) + if(!silent) + A.balloon_alert(owner, "not living") + return FALSE + if(!line_of_sight(owner, A, 9)) + if(!silent) + owner.balloon_alert(owner, "Out of sight!") + return FALSE + if((A.z != owner.z) || get_dist(owner, A) > MINDFRAY_RANGE) + if(!silent) + A.balloon_alert(owner, "too far") + return FALSE + var/mob/living/carbon/carbon_target = A + if(carbon_target.stat == DEAD) + if(!silent) + carbon_target.balloon_alert(owner, "already dead") + return FALSE + +/datum/action/ability/activable/sectoid/mindfray/use_ability(atom/target) + var/mob/living/carbon/carbon_target = target + carbon_target.apply_status_effect(STATUS_EFFECT_GUN_SKILL_SCATTER_DEBUFF, 10 SECONDS) + carbon_target.apply_status_effect(STATUS_EFFECT_CONFUSED, 40) + carbon_target.apply_damage(damage, BURN, updating_health = TRUE) + carbon_target.log_message("has been mindfrayed by [owner]", LOG_ATTACK, color="pink") + carbon_target.balloon_alert_to_viewers("confused") + playsound(carbon_target, 'sound/effects/off_guard_ability.ogg', 50) + + add_cooldown() + succeed_activate() + update_button_icon() + +// *************************************** +// *********** Stasis +// *************************************** + +#define SECTOID_STASIS_RANGE 7 +/datum/action/ability/activable/sectoid/stasis + name = "stasis" + action_icon_state = "stasis" + desc = "We surround a living thing with a powerful psionic field, temporarily disabling them and protecting them from all harm." + cooldown_duration = 20 SECONDS + target_flags = ABILITY_MOB_TARGET + use_state_flags = ABILITY_TARGET_SELF + keybinding_signals = list( + KEYBINDING_NORMAL = COMSIG_ABILITY_STASIS, + ) + ///Duration of effect + var/stasis_duration = 5 SECONDS + /// Used for particles. Holds the particles instead of the mob. See particle_holder for documentation. + var/obj/effect/abstract/particle_holder/particle_holder + +/datum/action/ability/activable/sectoid/stasis/can_use_ability(atom/A, silent = FALSE, override_flags) + . = ..() + if(!.) + return + if(!iscarbon(A)) + if(!silent) + A.balloon_alert(owner, "not living") + return FALSE + if((A.z != owner.z) || get_dist(owner, A) > SECTOID_STASIS_RANGE) + if(!silent) + A.balloon_alert(owner, "too far") + return FALSE + if(!line_of_sight(owner, A, SECTOID_STASIS_RANGE)) + if(!silent) + owner.balloon_alert(owner, "Out of sight!") + return FALSE + var/mob/living/carbon/carbon_target = A + if(carbon_target.stat == DEAD) + if(!silent) + carbon_target.balloon_alert(owner, "already dead") + return FALSE + +/datum/action/ability/activable/sectoid/stasis/use_ability(atom/target) + particle_holder = new(owner, /particles/drone_enhancement) + particle_holder.pixel_x = 0 + particle_holder.pixel_y = -3 + particle_holder.particles.velocity = list(0, 1.5) + particle_holder.particles.gravity = list(0, 2) + + if(!do_after(owner, 0.5 SECONDS, IGNORE_HELD_ITEM|IGNORE_LOC_CHANGE, target, BUSY_ICON_DANGER) || !can_use_ability(target)) + owner.balloon_alert(owner, "Our focus is disrupted") + QDEL_NULL(particle_holder) + return fail_activate() + + var/mob/living/carbon/carbon_target = target + playsound(owner, 'sound/effects/petrify_activate.ogg', 50) + + carbon_target.notransform = TRUE + carbon_target.status_flags |= GODMODE + ADD_TRAIT(carbon_target, TRAIT_HANDS_BLOCKED, REF(src)) + carbon_target.move_resist = MOVE_FORCE_OVERPOWERING + carbon_target.add_atom_colour(COLOR_GRAY, TEMPORARY_COLOUR_PRIORITY) + carbon_target.log_message("has been petrified by [owner] for [stasis_duration] ticks", LOG_ATTACK, color="pink") + + var/image/stone_overlay = image('icons/effects/64x64.dmi', null, "stasis_overlay", pixel_y = -4) + stone_overlay.filters += filter(arglist(alpha_mask_filter(render_source="*[REF(carbon_target)]",flags=MASK_INVERSE))) + + var/mutable_appearance/mask = mutable_appearance() + mask.appearance = carbon_target.appearance + mask.render_target = "*[REF(carbon_target)]" + mask.alpha = 125 + mask.pixel_y = 4 + stone_overlay.overlays += mask + + carbon_target.overlays += stone_overlay + addtimer(CALLBACK(src, PROC_REF(end_effects), carbon_target, stone_overlay), stasis_duration) + QDEL_NULL(particle_holder) + add_cooldown() + update_button_icon() + succeed_activate() + +///ends all combat-relazted effects +/datum/action/ability/activable/sectoid/stasis/proc/end_effects(mob/living/carbon/carbon_target, image/stone_overlay) + carbon_target.notransform = FALSE + carbon_target.status_flags &= ~GODMODE + REMOVE_TRAIT(carbon_target, TRAIT_HANDS_BLOCKED, REF(src)) + carbon_target.move_resist = initial(carbon_target.move_resist) + carbon_target.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, COLOR_GRAY) + carbon_target.overlays -= stone_overlay + +// *************************************** +// *********** Reknit form +// *************************************** + +#define SECTOID_REKNIT_RANGE 4 +/datum/action/ability/activable/sectoid/reknit_form + name = "Reknit Form" + action_icon_state = "reknit_form" + desc = "Flesh and bone runs like water at our will, healing horrendous damage with the power of our mind." + cooldown_duration = 60 SECONDS + target_flags = ABILITY_MOB_TARGET + use_state_flags = ABILITY_TARGET_SELF + keybinding_signals = list( + KEYBINDING_NORMAL = COMSIG_ABILITY_REKNIT_FORM, + ) + ///damage of this ability + var/reknit_duration = 3 SECONDS + /// Used for particles. Holds the particles instead of the mob. See particle_holder for documentation. + var/obj/effect/abstract/particle_holder/particle_holder + +/datum/action/ability/activable/sectoid/reknit_form/can_use_ability(atom/A, silent = FALSE, override_flags) + . = ..() + if(!.) + return + if(!isliving(A)) + if(!silent) + A.balloon_alert(owner, "not living") + return FALSE + if((A.z != owner.z) || get_dist(owner, A) > SECTOID_REKNIT_RANGE) + if(!silent) + A.balloon_alert(owner, "too far") + return FALSE + if(!line_of_sight(owner, A, SECTOID_REKNIT_RANGE)) + if(!silent) + owner.balloon_alert(owner, "Out of sight!") + return FALSE + +/datum/action/ability/activable/sectoid/reknit_form/use_ability(atom/target) + particle_holder = new(owner, /particles/drone_enhancement) + particle_holder.pixel_x = 0 + particle_holder.pixel_y = -3 + particle_holder.particles.velocity = list(0, 1.5) + particle_holder.particles.gravity = list(0, 2) + + if(!do_after(owner, 0.5 SECONDS, IGNORE_HELD_ITEM|IGNORE_LOC_CHANGE, target, BUSY_ICON_DANGER) || !can_use_ability(target)) + owner.balloon_alert(owner, "Our focus is disrupted") + QDEL_NULL(particle_holder) + return fail_activate() + + var/mob/living/living_target = target + living_target.apply_status_effect(STATUS_EFFECT_REKNIT_FORM, reknit_duration) + QDEL_NULL(particle_holder) + playsound(owner, 'sound/effects/petrify_activate.ogg', 50) + add_cooldown() + update_button_icon() + succeed_activate() + +/datum/action/ability/activable/sectoid/reknit_form/greater + name = "Greater Reknit Form" + action_icon_state = "greater_reknit_form" + reknit_duration = 6 SECONDS + +// *************************************** +// *********** Fuse +// *************************************** + +#define SECTOID_FUSE_RANGE 6 +/datum/action/ability/activable/sectoid/fuse + name = "Fuse" + action_icon_state = "fuse" + desc = "We reach out with our mind to trigger an explosive device." + cooldown_duration = 45 SECONDS + keybinding_signals = list( + KEYBINDING_NORMAL = COMSIG_ABILITY_FUSE, + ) + /// Used for particles. Holds the particles instead of the mob. See particle_holder for documentation. + var/obj/effect/abstract/particle_holder/particle_holder + +/datum/action/ability/activable/sectoid/fuse/can_use_ability(atom/A, silent = FALSE, override_flags) + . = ..() + if(!.) + return + if((A.z != owner.z) || get_dist(owner, A) > SECTOID_FUSE_RANGE) + if(!silent) + A.balloon_alert(owner, "too far") + return FALSE + if(!line_of_sight(owner, A, SECTOID_FUSE_RANGE)) + if(!silent) + owner.balloon_alert(owner, "Out of sight!") + return FALSE + +/datum/action/ability/activable/sectoid/fuse/use_ability(atom/target) + particle_holder = new(owner, /particles/drone_enhancement) + particle_holder.pixel_x = 0 + particle_holder.pixel_y = -3 + particle_holder.particles.velocity = list(0, 1.5) + particle_holder.particles.gravity = list(0, 2) + + if(!do_after(owner, 0.5 SECONDS, IGNORE_HELD_ITEM|IGNORE_LOC_CHANGE, target, BUSY_ICON_DANGER) || !can_use_ability(target)) + owner.balloon_alert(owner, "Our focus is disrupted") + QDEL_NULL(particle_holder) + return fail_activate() + + QDEL_NULL(particle_holder) + var/obj/item/explosive/grenade/grenade_target + if(isgrenade(target)) + grenade_target = target + else + grenade_target = locate(/obj/item/explosive/grenade) in target.GetAllContents() + if(!grenade_target) + target.balloon_alert(owner, "no grenade found") + return fail_activate() + + grenade_target.activate(owner) + playsound(owner, 'sound/effects/petrify_activate.ogg', 50) + add_cooldown() + update_button_icon() + succeed_activate() + +// *************************************** +// *********** Psionic Interact +// *************************************** + +/datum/action/ability/activable/psionic_interact + name = "Telekinesis" + action_icon_state = "telekinesis" + action_icon = 'icons/mob/psionic_icons.dmi' + desc = "We manipulate things from a distance." + cooldown_duration = 20 SECONDS + target_flags = ABILITY_MOB_TARGET + use_state_flags = ABILITY_TARGET_SELF + keybinding_signals = list( + KEYBINDING_NORMAL = COMSIG_ABILITY_TELEKINESIS, + ) + ///Ability range + var/range = 9 + ///Power of psi interactions + var/psi_strength = 2 + /// Used for particles. Holds the particles instead of the mob. See particle_holder for documentation. + var/obj/effect/abstract/particle_holder/particle_holder + +/datum/action/ability/activable/psionic_interact/can_use_ability(atom/A, silent = FALSE, override_flags) + . = ..() + if(!.) + return + if((A.z != owner.z) || get_dist(owner, A) > range) + if(!silent) + A.balloon_alert(owner, "too far") + return FALSE + if(!line_of_sight(owner, A, range)) + if(!silent) + owner.balloon_alert(owner, "Out of sight!") + return FALSE + +/datum/action/ability/activable/psionic_interact/use_ability(atom/target) + particle_holder = new(owner, /particles/drone_enhancement) + particle_holder.pixel_x = 0 + particle_holder.pixel_y = -3 + particle_holder.particles.velocity = list(0, 1.5) + particle_holder.particles.gravity = list(0, 2) + + if(!do_after(owner, 0.5 SECONDS, IGNORE_HELD_ITEM|IGNORE_LOC_CHANGE, target, BUSY_ICON_DANGER) || !can_use_ability(target)) + owner.balloon_alert(owner, "Our focus is disrupted") + QDEL_NULL(particle_holder) + return fail_activate() + + QDEL_NULL(particle_holder) + playsound(owner, 'sound/effects/petrify_activate.ogg', 50) + + var/list/outcome = target.psi_act(psi_strength, owner) + if(!outcome) + return fail_activate() + + add_cooldown(outcome[1]) + succeed_activate(outcome[2]) + update_button_icon() + + +/obj/machinery/door/psi_act(psi_power, mob/living/user) + if(density) + open(TRUE) + else + close(TRUE) + return list(0.1 SECONDS, 5) + +/obj/machinery/door/airlock/psi_act(psi_power, mob/living/user) + if(operating) + to_chat(user, span_warning("The airlock is already in motion.")) + return + if(welded) + to_chat(user, span_warning("The airlock is welded shut.")) + return + if(locked) + to_chat(user, span_warning("The airlock's bolts prevent it from being forced.")) + return + if(psi_power < PSIONIC_INTERACTION_STRENGTH_STANDARD && hasPower()) + to_chat(user, span_warning("The airlock's motors resist your efforts to force it.")) + return + + return ..() + +/obj/machinery/door/firedoor/psi_act(psi_power, mob/living/user) + if(operating) + to_chat(user, span_warning("The firelock is already in motion.")) + return + if(blocked) + to_chat(user, span_warning("The firelock is welded shut.")) + return + + return ..() + +/obj/machinery/button/psi_act(psi_power, mob/living/user) + pulsed() + return list(0.1 SECONDS, 1) + +/obj/item/psi_act(psi_power, mob/living/user) + if(user.a_intent == INTENT_HELP) + throw_at(user, 4 + psi_power, psi_power, user, TRUE) + else + var/target = get_turf_in_angle(Get_Angle(user, src), src, 7) + throw_at(target, 4 + psi_power, psi_power, user, TRUE) + return list(3 SECONDS, 10) + +// *************************************** +// *********** Reanimate +// *************************************** + +#define SECTOID_REANIMATE_RANGE 4 +#define SECTOID_REANIMATE_CHANNEL_TIME 1.5 SECONDS +/datum/action/ability/activable/sectoid/reanimate + name = "Reanimate" + action_icon_state = "reanimate" + desc = "With our psionic strength we turn the dead into our puppet, or revive a fallen ally." + cooldown_duration = 60 SECONDS + target_flags = ABILITY_MOB_TARGET + keybinding_signals = list( + KEYBINDING_NORMAL = COMSIG_ABILITY_REANIMATE, + ) + /// Used for particles. Holds the particles instead of the mob. See particle_holder for documentation. + var/obj/effect/abstract/particle_holder/particle_holder + ///list of + var/list/zombie_list = list() + +/datum/action/ability/activable/sectoid/reanimate/give_action(mob/living/L) + . = ..() + RegisterSignal(owner, COMSIG_MOB_DEATH, PROC_REF(kill_zombies)) + +/datum/action/ability/activable/sectoid/reanimate/remove_action(mob/living/carbon/carbon_owner) + kill_zombies() + return ..() + +/datum/action/ability/activable/sectoid/reanimate/can_use_ability(atom/A, silent = FALSE, override_flags) + . = ..() + if(!.) + return + var/mob/living/carbon/human/human_target = A + if(!istype(A)) + if(!silent) + human_target.balloon_alert(owner, "Invalid target") + return FALSE + if(human_target.stat != DEAD) + if(!silent) + human_target.balloon_alert(owner, "Still alive!") + return FALSE + if((human_target.z != owner.z) || get_dist(owner, human_target) > SECTOID_REANIMATE_RANGE) + if(!silent) + human_target.balloon_alert(owner, "too far") + return FALSE + if(!line_of_sight(owner, human_target, SECTOID_REANIMATE_RANGE)) + if(!silent) + owner.balloon_alert(owner, "Out of sight!") + return FALSE + +/datum/action/ability/activable/sectoid/reanimate/use_ability(atom/target) + particle_holder = new(owner, /particles/drone_enhancement) + particle_holder.pixel_x = 0 + particle_holder.pixel_y = -3 + particle_holder.particles.velocity = list(0, 1.5) + particle_holder.particles.gravity = list(0, 2) + + target.beam(owner, "drain_life", time = SECTOID_REANIMATE_CHANNEL_TIME, maxdistance = 10) + target.add_filter("psi_reanimation", 3, outline_filter(1, COLOR_STRONG_MAGENTA)) + + if(!do_after(owner, SECTOID_REANIMATE_CHANNEL_TIME, IGNORE_HELD_ITEM|IGNORE_LOC_CHANGE, target, BUSY_ICON_DANGER) || !can_use_ability(target)) + owner.balloon_alert(owner, "Our focus is disrupted") + QDEL_NULL(particle_holder) + return fail_activate() + + var/mob/living/carbon/human/human_target = target + if(human_target.faction == owner.faction && !(HAS_TRAIT(human_target, TRAIT_UNDEFIBBABLE))) + human_target.revive_to_crit(TRUE) + target.remove_filter("psi_reanimation") + else if(ishumanbasic(human_target)) + human_target.revive_to_crit(FALSE, FALSE) + human_target.set_species("Psi zombie") + human_target.faction = owner.faction + human_target.offer_mob() + zombie_list += human_target + RegisterSignal(human_target, COMSIG_MOB_DEATH, PROC_REF(remove_zombie)) + var/obj/item/radio/headset/mainship/radio = human_target.wear_ear + if(istype(radio)) + radio.safety_protocol(src) + else + owner.balloon_alert(owner, "Unrevivable") + + QDEL_NULL(particle_holder) + playsound(owner, 'sound/effects/petrify_activate.ogg', 50) + add_cooldown() + update_button_icon() + succeed_activate() + +/datum/action/ability/activable/sectoid/reanimate/proc/remove_zombie(mob/living/carbon/human/source) + SIGNAL_HANDLER + zombie_list -= source + +/datum/action/ability/activable/sectoid/reanimate/proc/kill_zombies(mob/living/carbon/human/source) + SIGNAL_HANDLER + for(var/mob/living/carbon/human/zombie AS in zombie_list) + zombie.gib() + zombie_list = list() diff --git a/code/datums/actions/weapon_actions.dm b/code/datums/actions/weapon_actions.dm new file mode 100644 index 0000000000000..fe8e385fa0ae8 --- /dev/null +++ b/code/datums/actions/weapon_actions.dm @@ -0,0 +1,30 @@ +//Stamina using weapon based abilities +/datum/action/ability/activable/weapon_skill + action_icon = 'icons/mob/actions.dmi' + ///Damage of this attack + var/damage + ///Penetration of this attack + var/penetration + +/datum/action/ability/activable/weapon_skill/New(Target, _damage, _penetration) + . = ..() + damage = _damage + penetration = _penetration + +/datum/action/ability/activable/weapon_skill/can_use_ability(atom/A, silent = FALSE, override_flags) + . = ..() + if(!.) + return + var/mob/living/carbon/carbon_owner = owner + if(carbon_owner.getStaminaLoss() > 0) //this specifically lets you use these abilities with no stamina, but not if you have actual stamina loss + if(!silent) + carbon_owner.balloon_alert(owner, "Catch your breath!") + return FALSE + +/datum/action/ability/activable/weapon_skill/succeed_activate(ability_cost_override) + if(QDELETED(owner)) + return + ability_cost_override = ability_cost_override? ability_cost_override : ability_cost + if(ability_cost_override > 0) + var/mob/living/carbon/carbon_owner = owner + carbon_owner.adjustStaminaLoss(ability_cost_override) diff --git a/code/datums/actions/xeno_action.dm b/code/datums/actions/xeno_action.dm index 0b1aa86c113ba..b7d95cf0ad78c 100644 --- a/code/datums/actions/xeno_action.dm +++ b/code/datums/actions/xeno_action.dm @@ -25,24 +25,19 @@ var/mob/living/carbon/xenomorph/X = owner if(!X) return FALSE - var/flags_to_check = use_state_flags|override_flags + var/to_check_flags = use_state_flags|override_flags - if(!(flags_to_check & ABILITY_USE_FORTIFIED) && X.fortify) + if(!(to_check_flags & ABILITY_USE_FORTIFIED) && X.fortify) if(!silent) X.balloon_alert(X, "Cannot while fortified") return FALSE - if(!(flags_to_check & ABILITY_USE_CRESTED) && X.crest_defense) + if(!(to_check_flags & ABILITY_USE_CRESTED) && X.crest_defense) if(!silent) X.balloon_alert(X, "Cannot while in crest defense") return FALSE - if(!(flags_to_check & ABILITY_USE_ROOTED) && HAS_TRAIT_FROM(X, TRAIT_IMMOBILE, BOILER_ROOTED_TRAIT)) - if(!silent) - X.balloon_alert(X, "Cannot while rooted") - return FALSE - - if(!(flags_to_check & ABILITY_IGNORE_PLASMA) && X.plasma_stored < ability_cost) + if(!(to_check_flags & ABILITY_IGNORE_PLASMA) && X.plasma_stored < ability_cost) if(!silent) X.balloon_alert(X, "Need [ability_cost - X.plasma_stored] more plasma") return FALSE @@ -71,24 +66,19 @@ var/mob/living/carbon/xenomorph/X = owner if(!X) return FALSE - var/flags_to_check = use_state_flags|override_flags + var/to_check_flags = use_state_flags|override_flags - if(!(flags_to_check & ABILITY_USE_FORTIFIED) && X.fortify) + if(!(to_check_flags & ABILITY_USE_FORTIFIED) && X.fortify) if(!silent) X.balloon_alert(X, "Cannot while fortified") return FALSE - if(!(flags_to_check & ABILITY_USE_CRESTED) && X.crest_defense) + if(!(to_check_flags & ABILITY_USE_CRESTED) && X.crest_defense) if(!silent) X.balloon_alert(X, "Cannot while in crest defense") return FALSE - if(!(flags_to_check & ABILITY_USE_ROOTED) && HAS_TRAIT_FROM(X, TRAIT_IMMOBILE, BOILER_ROOTED_TRAIT)) - if(!silent) - X.balloon_alert(X, "Cannot while rooted") - return FALSE - - if(!(flags_to_check & ABILITY_IGNORE_PLASMA) && X.plasma_stored < ability_cost) + if(!(to_check_flags & ABILITY_IGNORE_PLASMA) && X.plasma_stored < ability_cost) if(!silent) X.balloon_alert(X, "Need [ability_cost - X.plasma_stored] more plasma") return FALSE diff --git a/code/datums/callback.dm b/code/datums/callback.dm index ef07f58412000..af8ec8de82e76 100644 --- a/code/datums/callback.dm +++ b/code/datums/callback.dm @@ -231,5 +231,3 @@ else datum.vars[var_name] = var_value -/proc/___callbacknew(typepath, arguments) - new typepath(arglist(arguments)) diff --git a/code/datums/chat_payload.dm b/code/datums/chat_payload.dm new file mode 100644 index 0000000000000..fd35bbc4eecf6 --- /dev/null +++ b/code/datums/chat_payload.dm @@ -0,0 +1,16 @@ +/// Stores information about a chat payload +/datum/chat_payload + /// Sequence number of this payload + var/sequence = 0 + /// Message we are sending + var/list/content + /// Resend count + var/resends = 0 + +/// Converts the chat payload into a JSON string +/datum/chat_payload/proc/into_message() + return "{\"sequence\":[sequence],\"content\":[json_encode(content)]}" + +/// Returns an HTML-encoded message from our contents. +/datum/chat_payload/proc/get_content_as_html() + return message_to_html(content) diff --git a/code/datums/components/attachment_handler.dm b/code/datums/components/attachment_handler.dm index f596eb821dab6..8de222f2432da 100644 --- a/code/datums/components/attachment_handler.dm +++ b/code/datums/components/attachment_handler.dm @@ -70,9 +70,10 @@ return var/slot = attachment_data[SLOT] - if(!attacher && (!(slot in slots) || !(attachment.type in attachables_allowed))) //No more black market attachment combos. - QDEL_NULL(attachment) - return + if(!CHECK_BITFIELD(attachment_data[FLAGS_ATTACH_FEATURES], ATTACH_BYPASS_ALLOWED_LIST)) + if(!attacher && (!(slot in slots) || !(attachment.type in attachables_allowed))) //No more black market attachment combos. + QDEL_NULL(attachment) + return var/obj/item/old_attachment = slots[slot] @@ -103,11 +104,10 @@ var/obj/parent_obj = parent ///The gun has another gun attached to it - if(isgun(attachment) && isgun(parent) ) + if(isgun(attachment) && isgun(parent)) parent_obj:gunattachment = attachment on_attach?.Invoke(attachment, attacker) - if(attachment_data[ON_ATTACH]) var/datum/callback/attachment_on_attach = CALLBACK(attachment, attachment_data[ON_ATTACH]) attachment_on_attach.Invoke(parent, attacker) @@ -290,7 +290,7 @@ SIGNAL_HANDLER INVOKE_ASYNC(src, PROC_REF(handle_attachment), attachment, null, TRUE) -///This updates the overlays of the parent and apllies the right ones. +///This updates the overlays of the parent and applies the right ones. /datum/component/attachment_handler/proc/update_parent_overlay(datum/source) SIGNAL_HANDLER var/obj/item/parent_item = parent @@ -307,10 +307,7 @@ var/icon = attachment_data[OVERLAY_ICON] var/icon_state = attachment.icon_state - if(attachment.greyscale_colors && attachment.greyscale_config) - icon = attachment.icon - icon_state = attachment.icon_state + "_a" - else if(attachment_data[OVERLAY_ICON] == attachment.icon) + if(attachment_data[OVERLAY_ICON] == attachment.icon) icon_state = attachment.icon_state + "_a" if(CHECK_BITFIELD(attachment_data[FLAGS_ATTACH_FEATURES], ATTACH_SAME_ICON) || CHECK_BITFIELD(attachment_data[FLAGS_ATTACH_FEATURES], ATTACH_DIFFERENT_MOB_ICON_STATE)) icon_state = attachment.icon_state diff --git a/code/datums/components/autofire.dm b/code/datums/components/autofire.dm index 527f1838bf03d..b06b8f85fb301 100644 --- a/code/datums/components/autofire.dm +++ b/code/datums/components/autofire.dm @@ -32,8 +32,8 @@ RegisterSignal(parent, COMSIG_GUN_BURST_SHOTS_TO_FIRE_MODIFIED, PROC_REF(modify_burst_shots_to_fire)) RegisterSignal(parent, COMSIG_GUN_BURST_SHOT_DELAY_MODIFIED, PROC_REF(modify_burstfire_shot_delay)) RegisterSignal(parent, COMSIG_GUN_AUTO_BURST_SHOT_DELAY_MODIFIED, PROC_REF(modify_autoburstfire_shot_delay)) - RegisterSignals(parent, list(COMSIG_GUN_FIRE, COMSIG_XENO_FIRE, COMSIG_MECH_FIRE), PROC_REF(initiate_shot)) - RegisterSignals(parent, list(COMSIG_GUN_STOP_FIRE, COMSIG_XENO_STOP_FIRE, COMSIG_MECH_STOP_FIRE), PROC_REF(stop_firing)) + RegisterSignals(parent, list(COMSIG_GUN_FIRE, COMSIG_XENO_FIRE, COMSIG_MECH_FIRE, COMSIG_ARMORED_FIRE), PROC_REF(initiate_shot)) + RegisterSignals(parent, list(COMSIG_GUN_STOP_FIRE, COMSIG_XENO_STOP_FIRE, COMSIG_MECH_STOP_FIRE, COMSIG_ARMORED_STOP_FIRE), PROC_REF(stop_firing)) auto_fire_shot_delay = _auto_fire_shot_delay burstfire_shot_delay = _burstfire_shot_delay diff --git a/code/datums/components/beacon.dm b/code/datums/components/beacon.dm new file mode 100644 index 0000000000000..6727bbf9d14a4 --- /dev/null +++ b/code/datums/components/beacon.dm @@ -0,0 +1,225 @@ +///This component is used to give stuff beacon functionality. +/datum/component/beacon + ///Is the beacon active? + var/active = FALSE + ///The reference to the beacon datum + var/datum/supply_beacon/beacon_datum + ///The camera attached to the beacon + var/obj/machinery/camera/beacon_cam + ///Should the parent anchor on activation? + var/anchor = FALSE + ///How long it takes for this item to activate it's signal/deploy + var/anchor_time = 0 + ///The icon state when this beacon is active + var/active_icon_state = "" + ///The mob who activated this beacon + var/mob/activator + +/datum/component/beacon/Initialize(_anchor = FALSE, _anchor_time = 0, _active_icon_state = "") + . = ..() + if(_anchor && !_anchor_time || !_anchor && _anchor_time) + stack_trace("The beacon component has been added to [parent.type] and is missing either the anchor var or the time to anchor") + return COMPONENT_INCOMPATIBLE + if(!ismovableatom(parent)) //if some goober admin tries to add it to a turf or something + return COMPONENT_INCOMPATIBLE + anchor = _anchor + anchor_time = _anchor_time + active_icon_state = _active_icon_state + +/datum/component/beacon/RegisterWithParent() + RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, PROC_REF(on_attack_self)) + RegisterSignal(parent, COMSIG_ATOM_UPDATE_NAME, PROC_REF(on_update_name)) + RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_attack_hand)) + RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + RegisterSignal(parent, COMSIG_ATOM_UPDATE_ICON_STATE, PROC_REF(on_update_icon_state)) + RegisterSignal(parent, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(on_z_change)) + +/datum/component/beacon/UnregisterFromParent() + UnregisterSignal(parent, list( + COMSIG_ITEM_ATTACK_SELF, + COMSIG_ATOM_UPDATE_NAME, + COMSIG_ATOM_ATTACK_HAND, + COMSIG_ATOM_EXAMINE, + COMSIG_ATOM_UPDATE_ICON_STATE, + COMSIG_MOVABLE_Z_CHANGED, + )) + QDEL_NULL(beacon_datum) + QDEL_NULL(beacon_cam) + activator = null + +///Toggles the active state of the beacon +/datum/component/beacon/proc/toggle_activation(atom/movable/source, mob/user) + active = !active + + if(active) + INVOKE_ASYNC(src, PROC_REF(activate), source, user) + else + INVOKE_ASYNC(src, PROC_REF(deactivate), source, user) + +///The proc that gets called when the user uses the item in their hand +/datum/component/beacon/proc/on_attack_self(atom/movable/source, mob/user) + SIGNAL_HANDLER + + if(!ishuman(user)) + return + + if(length(user.do_actions)) + user.balloon_alert(user, "Busy!") + return + + INVOKE_ASYNC(src, PROC_REF(toggle_activation), source, user) + +///This will only get called when you want to deactivate a beacon, ie clicking a deployed beacon +/datum/component/beacon/proc/on_attack_hand(atom/movable/source, mob/user) + if(!source.anchored || !ishuman(user)) + return + + if(length(user.do_actions)) + user.balloon_alert(user, "Busy!") + return + + INVOKE_ASYNC(src, PROC_REF(deactivate), source, user) + +///Activates the beacon +/datum/component/beacon/proc/activate(atom/movable/source, mob/user) + var/turf/location = get_turf(source) + var/area/A = get_area(location) + if(A && istype(A) && A.ceiling >= CEILING_DEEP_UNDERGROUND) + to_chat(user, span_warning("This won't work if you're standing deep underground.")) + active = FALSE + return FALSE + + if(istype(A, /area/shuttle/dropship)) + to_chat(user, span_warning("You have to be outside the dropship to use this or it won't transmit.")) + active = FALSE + return FALSE + + if(length(user.do_actions)) + user.balloon_alert(user, "Busy!") + active = FALSE + return + + if(anchor && anchor_time) + var/delay = max(1.5 SECONDS, anchor_time - 2 SECONDS * user.skills.getRating(SKILL_LEADERSHIP)) + user.visible_message(span_notice("[user] starts setting up [source] on the ground."), + span_notice("You start setting up [source] on the ground and inputting all the data it needs.")) + if(!do_after(user, delay, NONE, source)) + user.balloon_alert(user, "Keep still!") + active = FALSE + return + + activator = user + + if(anchor) //Only anchored beacons have cameras and lights + var/obj/machinery/camera/beacon_cam/BC = new(source, "[user.get_paygrade()] [user.name] [source]") + user.dropItemToGround(source) + beacon_cam = BC + source.anchored = TRUE + source.layer = ABOVE_OBJ_LAYER + source.set_light(2, 1) + var/marker_flags = GLOB.faction_to_minimap_flag[user.faction] + if(!marker_flags) + marker_flags = MINIMAP_FLAG_MARINE + SSminimaps.add_marker(source, marker_flags, image('icons/UI_icons/map_blips.dmi', null, "supply", ABOVE_FLOAT_LAYER)) + + message_admins("[ADMIN_TPMONTY(user)] set up a supply beacon.") //do something with this + playsound(source, 'sound/machines/twobeep.ogg', 15, 1) + user.visible_message("[user] activates [source]'s signal.") + user.show_message(span_notice("The [source] beeps and states, \"Your current coordinates were registered by the supply console. LONGITUDE [location.x]. LATITUDE [location.y]. Area ID: [get_area(source)]\""), EMOTE_AUDIBLE, span_notice("The [source] vibrates but you can not hear it!")) + beacon_datum = new /datum/supply_beacon("[user.name] + [A]", get_turf(source), user.faction) + RegisterSignal(beacon_datum, COMSIG_QDELETING, PROC_REF(clean_beacon_datum)) + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_SUPPLY_BEACON_CREATED, src) + source.update_appearance() + +///Deactivates the beacon +/datum/component/beacon/proc/deactivate(atom/movable/source, mob/user) + if(length(user?.do_actions)) + user.balloon_alert(user, "Busy!") + active = TRUE + return + if(source.anchored) + if(user) + var/delay = max(1 SECONDS, anchor_time * 0.5 - 2 SECONDS * user.skills.getRating(SKILL_LEADERSHIP)) //Half as long as setting it up. + user.visible_message(span_notice("[user] starts removing [source] from the ground."), + span_notice("You start removing [source] from the ground, deactivating it.")) + if(!do_after(user, delay, NONE, source, BUSY_ICON_GENERIC)) + user.balloon_alert(user, "Keep still!") + active = TRUE + return + user.put_in_active_hand(source) + user.show_message(span_warning("The [source] beeps and states, \"Your last position is no longer accessible by the supply console"), EMOTE_AUDIBLE, span_notice("The [source] vibrates but you can not hear it!")) + source.anchored = FALSE + source.layer = initial(source.layer) + source.set_light(0) + SSminimaps.remove_marker(source) + + source.visible_message(span_warning("[source] stops emitting a signal.")) + QDEL_NULL(beacon_cam) + QDEL_NULL(beacon_datum) + activator = null + playsound(source, 'sound/machines/twobeep.ogg', 15, 1) + active = FALSE //this is here because of attack hand + source.update_appearance() + +///Adds an extra line of instructions to the examine +/datum/component/beacon/proc/on_examine(atom/source, mob/user, list/examine_list) + SIGNAL_HANDLER + examine_list += span_notice("Activate in hand to create a supply beacon signal.") + +///If the signal source dies, the beacon datum should as well +/datum/component/beacon/proc/clean_beacon_datum() + SIGNAL_HANDLER + beacon_datum = null + +///Gives the beacon broadcaster object the appropriate, descriptive name +/datum/component/beacon/proc/on_update_name(atom/source, updates) + SIGNAL_HANDLER + if(active) + source.name += " - [get_area(source)] - [activator]" + return + source.name = initial(source.name) + +///Updates the icon state of the object to an active state, if it has one +/datum/component/beacon/proc/on_update_icon_state(atom/source, updates) + SIGNAL_HANDLER + if(active) + source.icon = icon(source.icon, active_icon_state) + else + source.icon = initial(source.icon) + +///What happens when we change Z level +/datum/component/beacon/proc/on_z_change(atom/source, old_z, new_z) + SIGNAL_HANDLER + if(active) + beacon_datum.drop_location = get_turf(source) + return + +/datum/component/beacon/ai_droid/RegisterWithParent() + RegisterSignal(parent, COMSIG_UNMANNED_COORDINATES, PROC_REF(toggle_activation)) + +/datum/component/beacon/ai_droid/on_attack_hand(atom/movable/source, mob/user) + return //dont want marines disabling ai droid by clicking it even if it would be funny + +/datum/component/beacon/ai_droid/on_examine(atom/source, mob/user, list/examine_list) + return //we can't attack this in hand + +/datum/supply_beacon + /// Name printed on the supply console + var/name = "" + /// Where the supply drops will land + var/turf/drop_location + /// The faction of the beacon + var/faction = "" + +/datum/supply_beacon/New(_name, turf/_drop_location, _faction, life_time = 0 SECONDS) + name = _name + drop_location = _drop_location + faction = _faction + GLOB.supply_beacon[name] = src + if(life_time) + QDEL_IN(src, life_time) + +/// Remove that beacon from the list of glob supply beacon +/datum/supply_beacon/Destroy() + GLOB.supply_beacon -= name + return ..() diff --git a/code/datums/components/bump_attack.dm b/code/datums/components/bump_attack.dm index 94fef2e61306c..22516335193f4 100644 --- a/code/datums/components/bump_attack.dm +++ b/code/datums/components/bump_attack.dm @@ -48,7 +48,7 @@ return var/obj/item/held_item = bumper.get_inactive_held_item() - if(held_item?.flags_item & CAN_BUMP_ATTACK) + if(held_item?.item_flags & CAN_BUMP_ATTACK) return active = FALSE UnregisterSignal(bumper, COMSIG_MOVABLE_BUMP) @@ -58,7 +58,7 @@ if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_BUMP_ATTACK)) return NONE var/mob/living/bumper = parent - if(!(target.flags_atom & BUMP_ATTACKABLE) || bumper.throwing || bumper.incapacitated() || HAS_TRAIT(target, TRAIT_TURRET_HIDDEN)) //RU TGMC EDIT + if(!(target.atom_flags & BUMP_ATTACKABLE) || bumper.throwing || bumper.incapacitated() || HAS_TRAIT(target, TRAIT_TURRET_HIDDEN)) //RU TGMC EDIT return NONE ///Handles carbon bump action checks before actually doing the attack checks. @@ -123,7 +123,7 @@ var/obj/item/held_item = bumper.get_active_held_item() if(!held_item) bumper.UnarmedAttack(target, TRUE) - else if(held_item.flags_item & CAN_BUMP_ATTACK) + else if(held_item.item_flags & CAN_BUMP_ATTACK) held_item.melee_attack_chain(bumper, target) else //disables pushing if you have bump attacks on, so you don't accidentally misplace your enemy when switching to an item that can't bump attack return COMPONENT_BUMP_RESOLVED diff --git a/code/datums/components/chem_booster.dm b/code/datums/components/chem_booster.dm index 47f494c6c7cbc..268e6fef0cb42 100644 --- a/code/datums/components/chem_booster.dm +++ b/code/datums/components/chem_booster.dm @@ -145,7 +145,7 @@ ///Adds additional text for the component when examining the item it is attached to /datum/component/chem_booster/proc/examine(datum/source, mob/user, list/examine_text) SIGNAL_HANDLER - examine_text += span_notice("The chemical system currently holds [resource_storage_current]u of green blood. Its' enhancement level is set to [boost_amount].") + examine_text += span_notice("The chemical system currently holds [resource_storage_current]u of green blood. Its enhancement level is set to [boost_amount].") examine_text += get_meds_beaker_contents() ///Disables active functions and cleans up actions when the suit is unequipped diff --git a/code/datums/components/deployable_item.dm b/code/datums/components/deployable_item.dm index b811cc176ef6b..f3704670019b8 100644 --- a/code/datums/components/deployable_item.dm +++ b/code/datums/components/deployable_item.dm @@ -6,16 +6,19 @@ var/undeploy_time = 0 ///Typepath that the item deploys into. Can be anything but an item so far. The preffered type is /obj/machinery/deployable since it was built for this. var/obj/deploy_type + ///Any extra checks required when trying to deploy this item + var/datum/callback/deploy_check_callback -/datum/component/deployable_item/Initialize(_deploy_type, _deploy_time, _undeploy_time) +/datum/component/deployable_item/Initialize(_deploy_type, _deploy_time, _undeploy_time, _deploy_check_callback) if(!isitem(parent)) return COMPONENT_INCOMPATIBLE deploy_type = _deploy_type deploy_time = _deploy_time undeploy_time = _undeploy_time + deploy_check_callback = _deploy_check_callback var/obj/item/attached_item = parent - if(CHECK_BITFIELD(attached_item.flags_item, DEPLOY_ON_INITIALIZE)) + if(CHECK_BITFIELD(attached_item.item_flags, DEPLOY_ON_INITIALIZE)) finish_deploy(attached_item, null, attached_item.loc, attached_item.dir) /datum/component/deployable_item/RegisterWithParent() @@ -52,6 +55,8 @@ var/list/modifiers = params2list(params) if(!modifiers["ctrl"] || modifiers["right"] || get_turf(user) == location || !(user.Adjacent(object)) || !location) return + if(deploy_check_callback && !deploy_check_callback.Invoke(user, location)) + return INVOKE_ASYNC(src, PROC_REF(finish_deploy), parent, user, location) return COMSIG_KB_ACTIVATED @@ -69,11 +74,11 @@ location.balloon_alert(user, "No room to deploy") return var/newdir = get_dir(user, location) - if(deploy_type.flags_atom & ON_BORDER) + if(deploy_type.atom_flags & ON_BORDER) for(var/obj/object in location) if(!object.density) continue - if(!(object.flags_atom & ON_BORDER)) + if(!(object.atom_flags & ON_BORDER)) continue if(object.dir != newdir) continue @@ -110,7 +115,7 @@ if(item_to_deploy?.reagents?.total_volume) item_to_deploy.reagents.trans_to(deployed_machine, item_to_deploy.reagents.total_volume) - deployed_machine.update_icon_state() + deployed_machine.update_appearance() if(user) item_to_deploy.balloon_alert(user, "Deployed!") @@ -167,4 +172,4 @@ deployed_machine.clear_internal_item() QDEL_NULL(deployed_machine) - undeployed_item.update_icon_state() + undeployed_item.update_appearance() diff --git a/code/datums/components/harvester.dm b/code/datums/components/harvester.dm index a84138caa4f02..f16d95c5fea71 100644 --- a/code/datums/components/harvester.dm +++ b/code/datums/components/harvester.dm @@ -75,19 +75,17 @@ ///Adds additional text for the component when examining the item /datum/component/harvester/proc/examine(datum/source, mob/user, list/examine_list) SIGNAL_HANDLER - var/output = "" if(length(loaded_reagents)) - output += "It currently holds:
" + examine_list += "It currently holds:
" for(var/datum/reagent/reagent_type AS in loaded_reagents) - output += "[initial(reagent_type.name)] - [loaded_reagents[reagent_type]]\n" + examine_list += "[initial(reagent_type.name)] - [loaded_reagents[reagent_type]]\n" else - output += "The internal storage is empty\n" + examine_list += "The internal storage is empty" - output += "Compatible chemicals:\n" + examine_list += "Compatible chemicals:" for(var/datum/reagent/reagent AS in loadable_reagents) - output += "[initial(reagent.name)]\n" + examine_list += "[initial(reagent.name)]\n" - to_chat(user, output) ///Adds mechanics info to the weapon /datum/component/harvester/proc/get_mechanics_info(datum/source, list/mechanics_text) @@ -120,7 +118,7 @@ user.balloon_alert(user, "incompatible reagent, check description") return - if(loaded_reagents[reagent_to_load] > max_loadable_reagent_amount) + if(loaded_reagents[reagent_to_load] >= max_loadable_reagent_amount) user.balloon_alert(user, "full") return @@ -259,6 +257,18 @@ user.heal_overall_damage(5, 0, updating_health = TRUE) return + if(target.stat == DEAD) + to_chat(user, span_rose("[target] is already dead.")) + return + + if(!ishuman(target)) + return + var/mob/living/carbon/carbon_target = target + + if((carbon_target.species.species_flags & NO_CHEM_METABOLIZATION)) + to_chat(user, span_rose("[target] Cannot process chemicals.")) + return + to_chat(user, span_rose("You prepare to stab [target != user ? "[target]" : "yourself"]!")) new /obj/effect/temp_visual/telekinesis(get_turf(target)) diff --git a/code/datums/components/jump.dm b/code/datums/components/jump.dm index 7fa5d0c983c6b..2aa1676f14483 100644 --- a/code/datums/components/jump.dm +++ b/code/datums/components/jump.dm @@ -37,7 +37,7 @@ set_vars(_jump_duration, _jump_cooldown, _stamina_cost, _jump_height, _jump_sound, _jump_flags, _jumper_allow_pass_flags) ///Actually sets the jump vars -/datum/component/jump/proc/set_vars(_jump_duration = 0.5 SECONDS, _jump_cooldown = 1 SECONDS, _stamina_cost = 8, _jump_height = 16, _jump_sound = null, _jump_flags = JUMP_SHADOW, _jumper_allow_pass_flags = PASS_LOW_STRUCTURE|PASS_FIRE) +/datum/component/jump/proc/set_vars(_jump_duration = 0.5 SECONDS, _jump_cooldown = 1 SECONDS, _stamina_cost = 8, _jump_height = 16, _jump_sound = null, _jump_flags = JUMP_SHADOW, _jumper_allow_pass_flags = PASS_LOW_STRUCTURE|PASS_FIRE|PASS_TANK) jump_duration = _jump_duration jump_cooldown = _jump_cooldown stamina_cost = _stamina_cost @@ -63,7 +63,8 @@ if(jump_sound) playsound(jumper, jump_sound, 65) - jumper.layer = ABOVE_MOB_LAYER + var/original_layer = jumper.layer + var/original_pass_flags = jumper.pass_flags SEND_SIGNAL(jumper, COMSIG_ELEMENT_JUMP_STARTED) jumper.adjustStaminaLoss(stamina_cost) @@ -78,22 +79,21 @@ var/spin_number = ROUND_UP(jump_duration * 0.1) jumper.animation_spin(jump_duration / spin_number, spin_number, jumper.dir == WEST ? FALSE : TRUE) - animate(jumper, pixel_y = jumper.pixel_y + jump_height, layer = ABOVE_MOB_LAYER, time = jump_duration / 2, easing = CIRCULAR_EASING|EASE_OUT, flags = ANIMATION_PARALLEL) - animate(pixel_y = jumper.pixel_y - jump_height, time = jump_duration / 2, easing = CIRCULAR_EASING|EASE_IN) + animate(jumper, pixel_y = jumper.pixel_y + jump_height, layer = MOB_JUMP_LAYER, time = jump_duration / 2, easing = CIRCULAR_EASING|EASE_OUT, flags = ANIMATION_PARALLEL) + animate(pixel_y = jumper.pixel_y - jump_height, layer = original_layer, time = jump_duration / 2, easing = CIRCULAR_EASING|EASE_IN) if(jump_flags & JUMP_SHADOW) animate(shadow_filter, y = -jump_height, size = 4, time = jump_duration / 2, easing = CIRCULAR_EASING|EASE_OUT, flags = ANIMATION_PARALLEL) animate(y = 0, size = 0.9, time = jump_duration / 2, easing = CIRCULAR_EASING|EASE_IN) - addtimer(CALLBACK(src, PROC_REF(end_jump), jumper), jump_duration) + addtimer(CALLBACK(src, PROC_REF(end_jump), jumper, original_pass_flags), jump_duration) TIMER_COOLDOWN_START(jumper, JUMP_COMPONENT_COOLDOWN, jump_cooldown) ///Ends the jump -/datum/component/jump/proc/end_jump(mob/living/jumper) +/datum/component/jump/proc/end_jump(mob/living/jumper, original_pass_flags) jumper.remove_filter(JUMP_COMPONENT) - jumper.layer = initial(jumper.layer) - jumper.pass_flags = initial(jumper.pass_flags) + jumper.pass_flags = original_pass_flags REMOVE_TRAIT(jumper, TRAIT_SILENT_FOOTSTEPS, JUMP_COMPONENT) SEND_SIGNAL(jumper, COMSIG_ELEMENT_JUMP_ENDED, TRUE, 1.5, 2) SEND_SIGNAL(jumper.loc, COMSIG_TURF_JUMP_ENDED_HERE, jumper) diff --git a/code/datums/components/largeobjecttransparency.dm b/code/datums/components/largeobjecttransparency.dm index df0588b560a13..2162923f537fd 100644 --- a/code/datums/components/largeobjecttransparency.dm +++ b/code/datums/components/largeobjecttransparency.dm @@ -59,7 +59,7 @@ RegisterSignal(regist_tu, COMSIG_TURF_CHANGE, PROC_REF(OnTurfChange)) for(var/thing in regist_tu) var/atom/check_atom = thing - if(!(check_atom.flags_atom & CRITICAL_ATOM)) + if(!(check_atom.atom_flags & CRITICAL_ATOM)) continue amounthidden++ if(amounthidden) @@ -84,7 +84,7 @@ /datum/component/largetransparency/proc/objectEnter(datum/source, atom/enterer) SIGNAL_HANDLER - if(!(enterer.flags_atom & CRITICAL_ATOM)) + if(!(enterer.atom_flags & CRITICAL_ATOM)) return if(!amounthidden) reduceAlpha() @@ -92,7 +92,7 @@ /datum/component/largetransparency/proc/objectLeave(datum/source, atom/leaver, direction) SIGNAL_HANDLER - if(!(leaver.flags_atom & CRITICAL_ATOM)) + if(!(leaver.atom_flags & CRITICAL_ATOM)) return amounthidden = max(0, amounthidden - 1) if(!amounthidden) diff --git a/code/datums/components/mounted_gun.dm b/code/datums/components/mounted_gun.dm new file mode 100644 index 0000000000000..4b9f222143e37 --- /dev/null +++ b/code/datums/components/mounted_gun.dm @@ -0,0 +1,89 @@ +///This component allows gun mounting on vehicle types +/datum/component/vehicle_mounted_weapon + ///The gun mounted on a vehicle + var/obj/item/weapon/gun/mounted_gun + +/datum/component/vehicle_mounted_weapon/Initialize(gun_type) + . = ..() + if(!istype(parent, /obj/vehicle)) + return COMPONENT_INCOMPATIBLE + if(!(gun_type in subtypesof(/obj/item/weapon/gun))) + return COMPONENT_INCOMPATIBLE + mounted_gun = new gun_type(parent) + //NODROP so that you can't just drop the gun or have someone take it off your hands + ADD_TRAIT(mounted_gun, TRAIT_NODROP, MOUNTED_TRAIT) + +/datum/component/vehicle_mounted_weapon/RegisterWithParent() + RegisterSignal(parent, COMSIG_MOVABLE_BUCKLE, PROC_REF(on_buckle)) + RegisterSignal(parent, COMSIG_MOVABLE_UNBUCKLE, PROC_REF(on_unbuckle)) + RegisterSignal(parent, COMSIG_MOUSEDROP_ONTO, PROC_REF(on_mousedrop)) + RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) + RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_attack_hand)) + RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + RegisterSignal(mounted_gun, COMSIG_ITEM_DROPPED, PROC_REF(on_weapon_drop)) + +/datum/component/vehicle_mounted_weapon/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_MOVABLE_BUCKLE, + COMSIG_MOVABLE_UNBUCKLE, + COMSIG_MOUSEDROP_ONTO, + COMSIG_ATOM_ATTACKBY, + COMSIG_ATOM_EXAMINE, + COMSIG_ATOM_ATTACK_HAND, + )) + QDEL_NULL(mounted_gun) + return ..() + +///Behaviour on buckle. Puts the gun in the buckled mob's hands. +/datum/component/vehicle_mounted_weapon/proc/on_buckle(datum/source, mob/living/buckling_mob, force = FALSE, check_loc = TRUE, lying_buckle = FALSE, hands_needed = 0, target_hands_needed = 0, silent) + SIGNAL_HANDLER + var/obj/vehicle/parent_vehicle = source + if(!parent_vehicle.is_equipment_controller(buckling_mob)) + return + if(!buckling_mob.put_in_active_hand(mounted_gun) && !buckling_mob.put_in_inactive_hand(mounted_gun)) + to_chat(buckling_mob, span_warning("Could not equip weapon! Click [parent] with a free hand to equip.")) + return + +///Behaviour on unbuckle. Force drops the gun from the unbuckled mob's hands. +/datum/component/vehicle_mounted_weapon/proc/on_unbuckle(datum/source, mob/living/unbuckled_mob, force = FALSE) + SIGNAL_HANDLER + unbuckled_mob.dropItemToGround(mounted_gun, TRUE) + +///Behaviour on mouse drop. If the user has clickdragged the chair to themselves they will unload it. +/datum/component/vehicle_mounted_weapon/proc/on_mousedrop(datum/source, atom/over, mob/user) + SIGNAL_HANDLER + if(!isliving(user) || over != usr || !in_range(source, user)) + return + + mounted_gun.unload(user) + +///Behaviour on attackby. When a user clicks the wheelchair with an ammo magazine they reload the mounted weapon. +/datum/component/vehicle_mounted_weapon/proc/on_attackby(datum/source, obj/item/I, mob/user, params) + SIGNAL_HANDLER + if(isammomagazine(I)) + INVOKE_ASYNC(mounted_gun, TYPE_PROC_REF(/obj/item/weapon/gun, reload), I, user) + return COMPONENT_NO_AFTERATTACK + +///Behaviour on attack hand. Puts the gun in the user's hands if they're riding the vehicle and don't have the gun in their hands. +/datum/component/vehicle_mounted_weapon/proc/on_attack_hand(datum/source, mob/user) + SIGNAL_HANDLER + var/obj/vehicle/parent_vehicle = source + if(parent_vehicle.is_equipment_controller(user) && !user.is_holding(mounted_gun)) + user.put_in_active_hand(mounted_gun) + return COMPONENT_NO_ATTACK_HAND + +///Adds stuff to the examine of the vehicle. +/datum/component/vehicle_mounted_weapon/proc/on_examine(datum/source, mob/user, list/examine_list) + SIGNAL_HANDLER + examine_list += span_warning("It has a [mounted_gun.name] attached.") + if(mounted_gun.rounds) + examine_list += span_notice("Ammo: [span_bold("[mounted_gun.rounds]/[mounted_gun.max_rounds]")]") + examine_list += span_notice("Drag to yourself to unload the mounted weapon.") + else + examine_list += span_notice("Reload it by clicking it with the appropriate ammo type.") + +///Handles the weapon being dropped. The only way this should happen is if they unbuckle, and this makes sure they can't just take the gun and run off with it. +/datum/component/vehicle_mounted_weapon/proc/on_weapon_drop(obj/item/dropped, mob/user) + SIGNAL_HANDLER + var/obj/vehicle/vehicle_parent = parent + vehicle_parent.visible_message(span_warning("[dropped] violently snaps back into it's place in [parent]!")) + dropped.forceMove(vehicle_parent) diff --git a/code/datums/components/riding/riding.dm b/code/datums/components/riding/riding.dm index 61088ed923e4c..a58608457bace 100644 --- a/code/datums/components/riding/riding.dm +++ b/code/datums/components/riding/riding.dm @@ -207,6 +207,10 @@ SIGNAL_HANDLER return +/// Calculates the additional delay to moving +/datum/component/riding/proc/calculate_additional_delay(mob/living/user) + return 0 + /// So we can check all occupants when we bump a door to see if anyone has access /datum/component/riding/proc/vehicle_bump(atom/movable/movable_parent, obj/machinery/door/possible_bumped_door) SIGNAL_HANDLER diff --git a/code/datums/components/riding/riding_vehicle.dm b/code/datums/components/riding/riding_vehicle.dm index cbb18cee8b10f..2bd83685b786a 100644 --- a/code/datums/components/riding/riding_vehicle.dm +++ b/code/datums/components/riding/riding_vehicle.dm @@ -56,7 +56,7 @@ handle_ride(user, direction) /// This handles the actual movement for vehicles once [/datum/component/riding/vehicle/proc/driver_move] has given us the green light -/datum/component/riding/vehicle/proc/handle_ride(mob/user, direction) +/datum/component/riding/vehicle/proc/handle_ride(mob/living/user, direction) var/atom/movable/movable_parent = parent var/turf/next = get_step(movable_parent, direction) @@ -71,7 +71,7 @@ step(movable_parent, direction) last_move_diagonal = ((direction & (direction - 1)) && (movable_parent.loc == next)) - COOLDOWN_START(src, vehicle_move_cooldown, (last_move_diagonal? 2 : 1) * vehicle_move_delay) + COOLDOWN_START(src, vehicle_move_cooldown, (last_move_diagonal ? 2 : 1) * vehicle_move_delay + calculate_additional_delay(user)) if(QDELETED(src)) return @@ -113,9 +113,47 @@ set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(0, 4), TEXT_WEST = list(0, 4))) /datum/component/riding/vehicle/wheelchair - vehicle_move_delay = 0 + vehicle_move_delay = 6 ride_check_flags = RIDER_NEEDS_ARMS +/datum/component/riding/vehicle/wheelchair/driver_move(atom/movable/movable_parent, mob/living/user, direction) + if(!iscarbon(user)) + return COMPONENT_DRIVER_BLOCK_MOVE + var/mob/living/carbon/carbon_user = user + + var/datum/limb/left_hand = carbon_user.get_limb(BODY_ZONE_PRECISE_R_HAND) + var/datum/limb/right_hand = carbon_user.get_limb(BODY_ZONE_PRECISE_L_HAND) + var/working_hands = 2 + + if(!left_hand?.is_usable() || user.get_item_for_held_index(1)) + working_hands-- + if(!right_hand?.is_usable() || user.get_item_for_held_index(2)) + working_hands-- + if(!working_hands) + to_chat(user, span_warning("You have no arms to propel [movable_parent]!")) + return COMPONENT_DRIVER_BLOCK_MOVE // No hands to drive your chair? Tough luck! + return ..() + +/datum/component/riding/vehicle/wheelchair/calculate_additional_delay(mob/living/user) + if(!iscarbon(user)) + return 0 + var/mob/living/carbon/carbon_user = user + + var/datum/limb/left_hand = carbon_user.get_limb(BODY_ZONE_PRECISE_R_HAND) + var/datum/limb/right_hand = carbon_user.get_limb(BODY_ZONE_PRECISE_L_HAND) + var/delay_to_add = 0 + + if(!left_hand?.is_usable() || user.get_item_for_held_index(1)) + delay_to_add += vehicle_move_delay * 0.5 //harder to move a wheelchair with a single hand + else if(left_hand?.is_broken()) + delay_to_add = vehicle_move_delay * 0.33 + if(!right_hand?.is_usable() || user.get_item_for_held_index(2)) + delay_to_add += vehicle_move_delay * 0.5 + else if(right_hand.is_broken()) + delay_to_add = vehicle_move_delay * 0.33 + + return delay_to_add + /datum/component/riding/vehicle/wheelchair/handle_specials() . = ..() set_vehicle_dir_layer(SOUTH, OBJ_LAYER) @@ -123,6 +161,9 @@ set_vehicle_dir_layer(EAST, OBJ_LAYER) set_vehicle_dir_layer(WEST, OBJ_LAYER) +/datum/component/riding/vehicle/wheelchair/weaponized + vehicle_move_delay = 5 + /datum/component/riding/vehicle/motorbike vehicle_move_delay = 2 ride_check_flags = RIDER_NEEDS_LEGS | RIDER_NEEDS_ARMS | UNBUCKLE_DISABLED_RIDER diff --git a/code/datums/components/rotation.dm b/code/datums/components/rotation.dm index aab7b2e185946..c3ae9147caa88 100644 --- a/code/datums/components/rotation.dm +++ b/code/datums/components/rotation.dm @@ -106,10 +106,10 @@ return ..() -/datum/component/simple_rotation/proc/ExamineMessage(datum/source, mob/user) +/datum/component/simple_rotation/proc/ExamineMessage(datum/source, mob/user, list/examine_list) SIGNAL_HANDLER if(rotation_flags & ROTATION_ALTCLICK) - . += span_notice("Alt-click to rotate it clockwise.") + examine_list += span_notice("Alt-click to rotate it clockwise.") /datum/component/simple_rotation/proc/HandRot(datum/source, mob/user, rotation = default_rotation_direction) diff --git a/code/datums/components/seethrough_mob.dm b/code/datums/components/seethrough_mob.dm new file mode 100644 index 0000000000000..ab040fe95874e --- /dev/null +++ b/code/datums/components/seethrough_mob.dm @@ -0,0 +1,133 @@ +///A component that lets you turn your character transparent in order to see and click through yourself. +/datum/component/seethrough_mob + ///The atom that enables our dark magic + var/atom/movable/render_source_atom + ///The fake version of ourselves + var/image/trickery_image + ///Which alpha do we animate towards? + var/target_alpha + ///How long our faze in/out takes + var/animation_time + ///Does this object let clicks from players its transparent to pass through it + var/clickthrough + ///Is the seethrough effect currently active + var/is_active + ///The mob's original render_target value + var/initial_render_target_value + ///This component's personal uid + var/personal_uid + +/datum/component/seethrough_mob/Initialize(target_alpha = 100, animation_time = 0.5 SECONDS, clickthrough = TRUE) + . = ..() + + if(!ismob(parent)) + return COMPONENT_INCOMPATIBLE + + src.target_alpha = target_alpha + src.animation_time = animation_time + src.clickthrough = clickthrough + src.is_active = FALSE + src.render_source_atom = new() + + var/static/uid = 0 + uid++ + src.personal_uid = uid + + render_source_atom.appearance_flags |= ( RESET_COLOR | RESET_TRANSFORM | KEEP_APART) + + render_source_atom.vis_flags |= (VIS_INHERIT_ID | VIS_INHERIT_PLANE | VIS_INHERIT_LAYER) + + render_source_atom.render_source = "*transparent_bigmob[personal_uid]" + + var/datum/action/ability/xeno_action/toggle_seethrough/action = new(src) + action.give_action(parent) + +/datum/component/seethrough_mob/Destroy(force) + QDEL_NULL(render_source_atom) + return ..() + +///Set up everything we need to trick the client and keep it looking normal for everyone else +/datum/component/seethrough_mob/proc/trick_mob() + SIGNAL_HANDLER + + var/mob/fool = parent + var/icon/current_mob_icon = icon(fool.icon, fool.icon_state) + render_source_atom.pixel_x = -fool.pixel_x + render_source_atom.pixel_y = ((current_mob_icon.Height() - 32) * 0.5) + render_source_atom.name = "seethrough" //So our name is not just "movable" when looking at VVs + + initial_render_target_value = fool.render_target + fool.render_target = "*transparent_bigmob[personal_uid]" + fool.vis_contents.Add(render_source_atom) + + trickery_image = new(render_source_atom) + trickery_image.loc = render_source_atom + trickery_image.override = TRUE + + trickery_image.pixel_x = 0 + trickery_image.pixel_y = 0 + + if(clickthrough) + //Special plane so we can click through the overlay + SET_PLANE_EXPLICIT(trickery_image, SEETHROUGH_PLANE, fool) + + fool.client.images += trickery_image + + animate(trickery_image, alpha = target_alpha, time = animation_time) + + RegisterSignal(fool, COMSIG_MOB_LOGOUT, PROC_REF(on_client_disconnect)) + +///Remove the screen object and make us appear solid to ourselves again +/datum/component/seethrough_mob/proc/untrick_mob() + var/mob/fool = parent + animate(trickery_image, alpha = 255, time = animation_time) + UnregisterSignal(fool, COMSIG_MOB_LOGOUT) + + //after playing the fade-in animation, remove the image and the trick atom + addtimer(CALLBACK(src, PROC_REF(clear_image), trickery_image, fool.client), animation_time) + +///Remove the image and the trick atom +/datum/component/seethrough_mob/proc/clear_image(image/removee, client/remove_from) + var/atom/movable/atom_parent = parent + atom_parent.vis_contents -= render_source_atom + atom_parent.render_target = initial_render_target_value + remove_from?.images -= removee + remove_from.mob.update_appearance(UPDATE_ICON) + +///Effect is disabled when they log out because client gets deleted +/datum/component/seethrough_mob/proc/on_client_disconnect() + SIGNAL_HANDLER + + var/mob/fool = parent + UnregisterSignal(fool, COMSIG_MOB_LOGOUT) + clear_image(trickery_image, fool.client) + +/datum/component/seethrough_mob/proc/toggle_active(datum/action/ability) + is_active = !is_active + if(is_active) + trick_mob() + ability.set_toggle(TRUE) + else + untrick_mob() + ability.set_toggle(FALSE) + +/datum/action/ability/xeno_action/toggle_seethrough + name = "Toggle Seethrough" + desc = "Allows you to see behind your massive body and click through it." + action_icon = 'icons/Xeno/actions.dmi' + action_icon_state = "xenohide" + cooldown_duration = 1 SECONDS + use_state_flags = ABILITY_USE_LYING + action_type = ACTION_TOGGLE + +/datum/action/ability/xeno_action/toggle_seethrough/action_activate(atom/t) + . = ..() + var/datum/component/seethrough_mob/transparency = target + transparency.toggle_active(src) + add_cooldown() + +/datum/action/ability/xeno_action/toggle_seethrough/Destroy() + var/datum/component/seethrough_mob/transparency = target + if(transparency.is_active) + transparency.untrick_mob() + return ..() diff --git a/code/datums/components/shield.dm b/code/datums/components/shield.dm index 07a1a89723b37..831d1e58c07eb 100644 --- a/code/datums/components/shield.dm +++ b/code/datums/components/shield.dm @@ -1,20 +1,23 @@ /datum/component/shield + ///Shielded mob var/mob/living/affected + ///Callback to block damage entirely var/datum/callback/intercept_damage_cb + ///Callback to transfer damage to the shield var/datum/callback/transfer_damage_cb - /// %-reduction-based armor. - var/datum/armor/soft_armor - /// Flat-damage-reduction-based armor. - var/datum/armor/hard_armor /// Percentage damage The shield intercepts. var/datum/armor/cover + ///Behavior flags var/shield_flags = NONE + ///What slots the parent item provides its shield effects in var/slot_flags = list(SLOT_L_HAND, SLOT_R_HAND) + ///Shield priority layer var/layer = 50 + ///Is the shield currently active var/active = TRUE -/datum/component/shield/Initialize(shield_flags, shield_soft_armor, shield_hard_armor, shield_cover = list(MELEE = 80, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 80, BIO = 30, FIRE = 80, ACID = 80)) +/datum/component/shield/Initialize(shield_flags, shield_cover = list(MELEE = 80, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 80, BIO = 30, FIRE = 80, ACID = 80)) . = ..() if(!isitem(parent)) return COMPONENT_INCOMPATIBLE @@ -33,20 +36,6 @@ setup_callbacks(shield_flags) - if(!isnull(shield_soft_armor)) - soft_armor = shield_soft_armor - if(islist(shield_soft_armor)) - soft_armor = getArmor(arglist(shield_soft_armor)) - else - soft_armor = parent_item.soft_armor - - if(!isnull(shield_hard_armor)) - hard_armor = shield_hard_armor - if(islist(shield_hard_armor)) - hard_armor = getArmor(arglist(shield_hard_armor)) - else - hard_armor = parent_item.hard_armor - if(islist(shield_cover)) cover = getArmor(arglist(shield_cover)) else if(istype(shield_cover, /datum/armor)) @@ -58,13 +47,12 @@ /datum/component/shield/Destroy() shield_detach_from_user() - soft_armor = null - hard_armor = null cover = null intercept_damage_cb = null transfer_damage_cb = null return ..() +///Sets up the correct callbacks based on flagged behavior /datum/component/shield/proc/setup_callbacks(shield_flags) if(shield_flags & SHIELD_PURE_BLOCKING) intercept_damage_cb = CALLBACK(src, PROC_REF(item_pure_block_chance)) @@ -89,6 +77,7 @@ else deactivate_with_user() +///Handles equipping the shield /datum/component/shield/proc/shield_equipped(datum/source, mob/living/user, slot) SIGNAL_HANDLER if(!(slot in slot_flags)) @@ -100,9 +89,10 @@ if(!ishuman(user)) return var/mob/living/carbon/human/human_user = user - if(parent_item.slowdown) - human_user.add_movespeed_modifier(parent_item.type, TRUE, 0, ((parent_item.flags_item & IMPEDE_JETPACK) ? SLOWDOWN_IMPEDE_JETPACK : NONE), TRUE, parent_item.slowdown) + if(parent_item.slowdown) //todo: make this less smelly, I have no idea why this is on the shield component, and could likely cause unintended double slowdown + human_user.add_movespeed_modifier(parent_item.type, TRUE, 0, ((parent_item.item_flags & IMPEDE_JETPACK) ? SLOWDOWN_IMPEDE_JETPACK : NONE), TRUE, parent_item.slowdown) +///Handles unequipping the shield /datum/component/shield/proc/shield_dropped(datum/source, mob/user) SIGNAL_HANDLER shield_detach_from_user() @@ -114,6 +104,7 @@ if(parent_item.slowdown) human_user.remove_movespeed_modifier(parent.type) +///Toggles shield effects for the user /datum/component/shield/proc/shield_affect_user(mob/living/user) if(affected) if(affected == user) @@ -123,12 +114,7 @@ if(active) activate_with_user() -/datum/component/shield/proc/activate_with_user() - RegisterSignal(affected, COMSIG_LIVING_SHIELDCALL, PROC_REF(on_attack_cb_shields_call)) - -/datum/component/shield/proc/deactivate_with_user() - UnregisterSignal(affected, COMSIG_LIVING_SHIELDCALL) - +///Detaches shield from the user /datum/component/shield/proc/shield_detach_from_user() if(!affected) return @@ -136,74 +122,86 @@ deactivate_with_user() affected = null +///Activates shield effects +/datum/component/shield/proc/activate_with_user() + RegisterSignal(affected, COMSIG_LIVING_SHIELDCALL, PROC_REF(on_attack_cb_shields_call)) + +///Deactivates shield effects +/datum/component/shield/proc/deactivate_with_user() + UnregisterSignal(affected, COMSIG_LIVING_SHIELDCALL) + +///Signal handler for incoming damage, directs to the right callback proc /datum/component/shield/proc/on_attack_cb_shields_call(datum/source, list/affecting_shields, dam_type) SIGNAL_HANDLER if(cover.getRating(dam_type) <= 0) return affecting_shields[intercept_damage_cb] = layer -/datum/component/shield/proc/item_intercept_attack(attack_type, incoming_damage, damage_type, silent, penetration) +///Calculates a modifier to the shield coverage based on user or parent conditions +/datum/component/shield/proc/get_shield_status_modifier() var/obj/item/parent_item = parent - var/status_cover_modifier = 1 + var/shield_status_modifier = 1 if(parent_item.obj_integrity <= parent_item.integrity_failure) - return incoming_damage + return 0 if(affected.IsSleeping() || affected.IsUnconscious() || affected.IsAdminSleeping()) //We don't do jack if we're literally KOed/sleeping/paralyzed. - return incoming_damage + return 0 if(affected.IsStun() || affected.IsKnockdown() || affected.IsParalyzed()) //Halve shield cover if we're paralyzed or stunned - status_cover_modifier *= 0.5 + shield_status_modifier *= 0.5 if(iscarbon(affected)) var/mob/living/carbon/C = affected if(C.IsStaggered()) //Lesser penalty to shield cover for being staggered. - status_cover_modifier *= 0.75 + shield_status_modifier *= 0.75 + + return shield_status_modifier + +///Damage intercept calculation +/datum/component/shield/proc/item_intercept_attack(attack_type, incoming_damage, damage_type, silent, penetration) + var/shield_status_modifier = get_shield_status_modifier() switch(attack_type) - if(COMBAT_TOUCH_ATTACK) - if(!prob(cover.getRating(damage_type) * status_cover_modifier)) - return FALSE //Bypassed the shield. - incoming_damage = max(0, incoming_damage - hard_armor.getRating(damage_type)) - incoming_damage *= (100 - soft_armor.getRating(damage_type)) * 0.01 - return prob(50 - round(incoming_damage / 3)) - if(COMBAT_MELEE_ATTACK, COMBAT_PROJ_ATTACK) - var/absorbing_damage = incoming_damage * cover.getRating(damage_type) * 0.01 * status_cover_modifier //Determine cover ratio; this is the % of damage we actually intercept. + if(COMBAT_TOUCH_ATTACK) //Touch attacks return true if the associated negative effect is blocked + if(!prob(cover.getRating(damage_type) * shield_status_modifier)) + return FALSE + var/obj/item/parent_item = parent + incoming_damage = parent_item.modify_by_armor(incoming_damage, damage_type, penetration) + return prob(50 - round(incoming_damage / 3)) //Two checks for touch attacks to make it less absurdly effective, or something. + if(COMBAT_MELEE_ATTACK, COMBAT_PROJ_ATTACK) //we return the amount of damage that bypasses the shield + var/absorbing_damage = incoming_damage * cover.getRating(damage_type) * 0.01 * shield_status_modifier //Determine cover ratio; this is the % of damage we actually intercept. if(!absorbing_damage) - return incoming_damage //We are transparent to this kind of damage. + return incoming_damage . = incoming_damage - absorbing_damage - absorbing_damage = max(0, absorbing_damage - (hard_armor.getRating(damage_type) * (100 - penetration) * 0.01)) //Hard armor first, with pen as percent reduction to flat armor - absorbing_damage *= (100 - max(0, soft_armor.getRating(damage_type) - penetration)) * 0.01 //Soft armor second, with pen as flat reduction to percent armor - if(absorbing_damage <= 0) - if(!silent) - to_chat(affected, span_avoidharm("\The [parent_item.name] [. ? "softens" : "soaks"] the damage!")) - return if(transfer_damage_cb) - return transfer_damage_cb.Invoke(absorbing_damage, ., silent) + return transfer_damage_cb.Invoke(absorbing_damage, ., damage_type, silent, penetration) + +///Applies damage to parent item +/datum/component/shield/proc/transfer_damage_to_parent(return_damage, incoming_damage, damage_type, silent, penetration) + var/obj/item/parent_item = parent + incoming_damage = parent_item.modify_by_armor(incoming_damage, damage_type, penetration) + if(incoming_damage > parent_item.obj_integrity) + return_damage += incoming_damage - parent_item.obj_integrity //if we destroy the shield item, extra damage spills over + if(!silent) + to_chat(affected, span_avoidharm("\The [parent_item.name] [. ? "softens" : "soaks"] the damage!")) + parent_item.take_damage(incoming_damage) + return return_damage +///Block chance calculation /datum/component/shield/proc/item_pure_block_chance(attack_type, incoming_damage, damage_type, silent, penetration) switch(attack_type) - if(COMBAT_TOUCH_ATTACK) - if(!prob(cover.getRating(damage_type) - penetration)) - return FALSE //Bypassed the shield. - incoming_damage = max(0, incoming_damage - hard_armor.getRating(damage_type)) - incoming_damage *= (100 - soft_armor.getRating(damage_type)) * 0.01 - return prob(50 - round(incoming_damage / 3)) + if(COMBAT_TOUCH_ATTACK) //Touch attacks return true if the associated negative effect is blocked + var/shield_status_modifier = get_shield_status_modifier() + if(!prob(cover.getRating(damage_type) * shield_status_modifier)) + return FALSE + var/obj/item/parent_item = parent + incoming_damage = parent_item.modify_by_armor(incoming_damage, damage_type, penetration) + return prob(50 - round(incoming_damage / 3)) //Two checks for touch attacks to make it less absurdly effective, or something. if(COMBAT_MELEE_ATTACK, COMBAT_PROJ_ATTACK) if(prob(cover.getRating(damage_type) - penetration)) - return 0 //Blocked - return incoming_damage //Went through. - -/datum/component/shield/proc/transfer_damage_to_parent(incoming_damage, return_damage, silent) - . = return_damage - var/obj/item/parent_item = parent - if(incoming_damage >= parent_item.obj_integrity) - . += incoming_damage - parent_item.obj_integrity - parent_item.take_damage(incoming_damage, armour_penetration = 100) //Armor has already been accounted for, this should destroy the parent and thus the component. - return - if(!silent) - to_chat(affected, span_avoidharm("\The [parent_item.name] [. ? "softens" : "soaks"] the damage!")) - parent_item.take_damage(incoming_damage, armour_penetration = 100) + return 0 + return incoming_damage //Dune, Halo and energy shields. @@ -220,7 +218,7 @@ var/next_recharge = 0 //world.time based var/shield_overlay = "shield-blue" -/datum/component/shield/overhealth/Initialize(shield_flags, shield_soft_armor, shield_hard_armor, shield_cover) +/datum/component/shield/overhealth/Initialize(shield_flags, shield_cover = list(MELEE = 0, BULLET = 80, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, FIRE = 0, ACID = 80)) if(!issuit(parent)) return COMPONENT_INCOMPATIBLE return ..() @@ -234,7 +232,7 @@ intercept_damage_cb = CALLBACK(src, PROC_REF(overhealth_intercept_attack)) transfer_damage_cb = CALLBACK(src, PROC_REF(transfer_damage_to_overhealth)) - +///Checks if damage should be passed to overshield /datum/component/shield/overhealth/proc/overhealth_intercept_attack(attack_type, incoming_damage, damage_type, silent) switch(attack_type) if(COMBAT_TOUCH_ATTACK) @@ -245,36 +243,19 @@ var/absorbing_damage = incoming_damage * cover.getRating(damage_type) * 0.01 if(!absorbing_damage) return incoming_damage //We are transparent to this kind of damage. - . = incoming_damage - absorbing_damage - absorbing_damage = max(0, absorbing_damage - hard_armor.getRating(damage_type)) - absorbing_damage *= (100 - soft_armor.getRating(damage_type)) * 0.01 - return wrap_up_attack(absorbing_damage, ., silent) - - -/datum/component/shield/overhealth/proc/wrap_up_attack(absorbing_damage, unabsorbed_damage, silent) - . = unabsorbed_damage - var/obj/item/parent_item = parent - if(absorbing_damage <= 0) - if(!.) - if(!silent) - to_chat(affected, span_avoidharm("\The [parent_item.name] soaks the damage!")) - return - if(transfer_damage_cb) - return transfer_damage_cb.Invoke(absorbing_damage, ., silent) - else if(!silent) - to_chat(affected, span_avoidharm("\The [parent_item.name] softens the damage!")) - + return transfer_damage_cb.Invoke(absorbing_damage, incoming_damage - absorbing_damage, silent) +///Calculates actual damage to the shield, returning total amount that penetrates /datum/component/shield/overhealth/proc/transfer_damage_to_overhealth(absorbing_damage, unabsorbed_damage, silent) - . = unabsorbed_damage - var/obj/item/parent_item = parent if(absorbing_damage >= shield_integrity) - . += absorbing_damage - shield_integrity + unabsorbed_damage += absorbing_damage - shield_integrity if(!silent) + var/obj/item/parent_item = parent to_chat(affected, span_avoidharm("\The [parent_item.name] [. ? "softens" : "soaks"] the damage!")) damage_overhealth(absorbing_damage) + return unabsorbed_damage - +///Applies damage to overshield /datum/component/shield/overhealth/proc/damage_overhealth(amount) var/datum/effect_system/spark_spread/s = new s.set_up(2, 1, get_turf(parent)) diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm index ad6553a6e797b..a6e6b3a622f56 100644 --- a/code/datums/components/squeak.dm +++ b/code/datums/components/squeak.dm @@ -76,7 +76,7 @@ SIGNAL_HANDLER if(isitem(AM)) var/obj/item/I = AM - if(I.flags_item & ITEM_ABSTRACT) + if(I.item_flags & ITEM_ABSTRACT) return if(istype(AM, /obj/projectile)) diff --git a/code/datums/components/stun_mitigation.dm b/code/datums/components/stun_mitigation.dm index c881f1fb105e2..3ae59d1e2f1b2 100644 --- a/code/datums/components/stun_mitigation.dm +++ b/code/datums/components/stun_mitigation.dm @@ -90,7 +90,7 @@ ///Actually deactivates the mitigation effect /datum/component/stun_mitigation/proc/deactivate_with_user() - UnregisterSignal(affected, COMSIG_LIVING_PROJECTILE_STUN) + UnregisterSignal(affected, list(COMSIG_LIVING_PROJECTILE_STUN, COMSIG_LIVING_JETPACK_STUN)) ///Handles removing the mitigation from a user /datum/component/stun_mitigation/proc/shield_detach_from_user() diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 06b85ae7e1bc3..c21cf8595127e 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -203,7 +203,7 @@ GLOBAL_DATUM_INIT(datacore, /datum/datacore, new) else assignment = "Unassigned" - var/id = add_leading("[num2hex(randfloat(1, 1.6777215E7))]", 6, "0") //this was the best they could come up with? A large random number? *sigh* - actual 4407 code lol + var/id = add_leading("[num2hex(randfloat(1, 1.6777215E7), 2)]", 6, "0") //this was the best they could come up with? A large random number? *sigh* - actual 4407 code lol //General Record var/datum/data/record/G = new() @@ -228,7 +228,7 @@ GLOBAL_DATUM_INIT(datacore, /datum/datacore, new) var/datum/data/record/M = new() M.fields["id"] = id M.fields["name"] = H.real_name - M.fields["b_type"] = H.b_type + M.fields["b_type"] = H.blood_type M.fields["mi_dis"] = "None" M.fields["mi_dis_d"] = "No minor disabilities have been declared." M.fields["ma_dis"] = "None" @@ -303,7 +303,7 @@ GLOBAL_DATUM_INIT(datacore, /datum/datacore, new) var/datum/data/record/M = new M.fields["id"] = null M.fields["name"] = H.real_name - M.fields["b_type"] = H.b_type + M.fields["b_type"] = H.blood_type M.fields["mi_dis"] = "None" M.fields["mi_dis_d"] = "No minor disabilities have been declared." M.fields["ma_dis"] = "None" diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 7c4133c2334a4..b9fe35c8e20bd 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -17,6 +17,10 @@ */ var/gc_destroyed + /// Open uis owned by this datum + /// Lazy, since this case is semi rare + var/list/open_uis + /// Active timers with this datum as the target var/list/_active_timers /// Status traits attached to this datum. associative list of the form: list(trait name (string) = list(source1, source2, source3,...)) diff --git a/code/datums/elements/attachment.dm b/code/datums/elements/attachment.dm index 2e88a4b9bcf43..f9c94b7f53629 100644 --- a/code/datums/elements/attachment.dm +++ b/code/datums/elements/attachment.dm @@ -5,7 +5,7 @@ var/list/attachment_data //on_attach, on_detach, on_activate and can_attach are all proc paths that get turned into callbacks when they are called. -/datum/element/attachment/Attach(datum/target, slot, overlay_icon, on_attach, on_detach, on_activate, can_attach, pixel_shift_x, pixel_shift_y, flags_attach_features, attach_delay, detach_delay, attach_skill, attach_skill_upper_threshold, attach_sound, mob_overlay_icon, mob_pixel_shift_x, mob_pixel_shift_y, attachment_layer, extra_vars) +/datum/element/attachment/Attach(datum/target, slot, overlay_icon, on_attach, on_detach, on_activate, can_attach, pixel_shift_x, pixel_shift_y, attach_features_flags, attach_delay, detach_delay, attach_skill, attach_skill_upper_threshold, attach_sound, mob_overlay_icon, mob_pixel_shift_x, mob_pixel_shift_y, attachment_layer, extra_vars) . = ..() if(!isitem(target)) return ELEMENT_INCOMPATIBLE @@ -20,7 +20,7 @@ CAN_ATTACH = can_attach, //Callback that is called on attach to determine by the attachment whether or not it can attach to the item. PIXEL_SHIFT_X = pixel_shift_x, //Pixel shift on X Axis for the attachments overlay. PIXEL_SHIFT_Y = pixel_shift_y, //Pixel shift on Y Axis for the attachments overlay. - FLAGS_ATTACH_FEATURES = flags_attach_features, //Flags for how the attachment functions. + FLAGS_ATTACH_FEATURES = attach_features_flags, //Flags for how the attachment functions. ATTACH_DELAY = attach_delay, //Delay for attaching. DETACH_DELAY = detach_delay, //Delay for detaching. ATTACH_SKILL = attach_skill, //Skill used in attaching and detaching. Can be null. If user does not meet the skill requirement the attach delay and detach delay is doubled. diff --git a/code/datums/elements/connect_loc.dm b/code/datums/elements/connect_loc.dm index c373adafffe62..7693fb0febdfb 100644 --- a/code/datums/elements/connect_loc.dm +++ b/code/datums/elements/connect_loc.dm @@ -19,7 +19,7 @@ /datum/element/connect_loc/Detach(atom/movable/listener) . = ..() - unregister_signals(listener, listener.loc) + unregister_signals(listener, listener.loc, listener.locs) UnregisterSignal(listener, COMSIG_MOVABLE_MOVED) /datum/element/connect_loc/proc/update_signals(atom/movable/listener) @@ -29,16 +29,25 @@ for (var/signal in connections) //override=TRUE because more than one connect_loc element instance tracked object can be on the same loc - listener.RegisterSignal(listener_loc, signal, connections[signal], override=TRUE) + if(length(listener.locs) < 2) //this is kinda funny but a multitile object could be inside something + listener.RegisterSignal(listener_loc, signal, connections[signal], override=TRUE) + continue + for(var/turf/turf AS in listener.locs) + listener.RegisterSignal(turf, signal, connections[signal], override=TRUE) -/datum/element/connect_loc/proc/unregister_signals(datum/listener, atom/old_loc) + +/datum/element/connect_loc/proc/unregister_signals(datum/listener, atom/old_loc, list/turf/old_locs) if(isnull(old_loc)) return for (var/signal in connections) - listener.UnregisterSignal(old_loc, signal) + if(length(old_locs) < 2) + listener.UnregisterSignal(old_loc, signal) + continue + for(var/turf/turf AS in old_locs) + listener.UnregisterSignal(turf, signal) -/datum/element/connect_loc/proc/on_moved(atom/movable/listener, atom/old_loc) +/datum/element/connect_loc/proc/on_moved(atom/movable/listener, atom/old_loc, movement_dir, forced, list/turf/old_locs) SIGNAL_HANDLER - unregister_signals(listener, old_loc) + unregister_signals(listener, old_loc, old_locs) update_signals(listener) diff --git a/code/datums/elements/debris.dm b/code/datums/elements/debris.dm index 36fd9427cfd83..776db5dd36b39 100644 --- a/code/datums/elements/debris.dm +++ b/code/datums/elements/debris.dm @@ -71,7 +71,7 @@ smoke_visuals = new(source, /particles/impact_smoke) smoke_visuals.particles.position = list(position_offset, position_offset) smoke_visuals.particles.velocity = list(x_component_smoke, y_component_smoke) - if(debris && !(P.ammo.flags_ammo_behavior & AMMO_ENERGY || P.ammo.flags_ammo_behavior & AMMO_XENO)) + if(debris && !(P.ammo.ammo_behavior_flags & AMMO_ENERGY || P.ammo.ammo_behavior_flags & AMMO_XENO)) debris_visuals = new(source, /particles/debris) debris_visuals.particles.position = generator(GEN_CIRCLE, position_offset, position_offset) debris_visuals.particles.velocity = list(x_component, y_component) @@ -83,7 +83,7 @@ smoke_visuals.layer = ABOVE_OBJ_LAYER + 0.01 if(P.ammo.sound_bounce) var/pitch = 0 - if(P.ammo.flags_ammo_behavior & AMMO_SOUND_PITCH) + if(P.ammo.ammo_behavior_flags & AMMO_SOUND_PITCH) pitch = 55000 playsound(source, P.ammo.sound_bounce, 50, 1, frequency = pitch) addtimer(CALLBACK(src, PROC_REF(remove_ping), src, smoke_visuals, debris_visuals), 0.7 SECONDS) diff --git a/code/datums/elements/directional_attack.dm b/code/datums/elements/directional_attack.dm new file mode 100644 index 0000000000000..4b130aa2962c3 --- /dev/null +++ b/code/datums/elements/directional_attack.dm @@ -0,0 +1,43 @@ +/*! + * This element allows the mob its attached to the ability to click an adjacent mob by clicking a distant atom + * that is in the general direction relative to the parent. + */ +/datum/element/directional_attack/Attach(datum/target) + . = ..() + if(!ismob(target)) + return ELEMENT_INCOMPATIBLE + + RegisterSignal(target, COMSIG_MOB_ATTACK_RANGED, PROC_REF(on_ranged_attack)) + +/datum/element/directional_attack/Detach(datum/source, ...) + . = ..() + UnregisterSignal(source, COMSIG_MOB_ATTACK_RANGED) + +/** + * This proc handles clicks on tiles that aren't adjacent to the source mob + * In addition to clicking the distant tile, it checks the tile in the direction and clicks the mob in the tile if there is one + * Arguments: + * * source - The mob clicking + * * clicked_atom - The atom being clicked (should be a distant one) + * * click_params - Miscellaneous click parameters, passed from Click itself + */ +/datum/element/directional_attack/proc/on_ranged_attack(mob/source, atom/clicked_atom, click_params) + SIGNAL_HANDLER + + if(!(source?.client?.prefs?.toggles_gameplay & DIRECTIONAL_ATTACKS)) + return + + if(QDELETED(clicked_atom)) + return + + var/turf/turf_to_check = get_step(source, angle_to_dir(Get_Angle(source, clicked_atom))) + if(!turf_to_check || !source.Adjacent(turf_to_check)) + return + + var/mob/target_mob = locate() in turf_to_check + if(!target_mob || source.faction == target_mob.faction) + return + + //This is here to undo the +1 the click on the distant turf adds so we can click the mob near us + source.next_click = world.time - 1 + INVOKE_ASYNC(source, TYPE_PROC_REF(/mob, ClickOn), target_mob, turf_to_check, click_params) diff --git a/code/datums/elements/egrill_element.dm b/code/datums/elements/egrill_element.dm index f4caf58e1bf55..5e91f8d26aad0 100644 --- a/code/datums/elements/egrill_element.dm +++ b/code/datums/elements/egrill_element.dm @@ -33,7 +33,7 @@ /datum/element/egrill/proc/attackby(obj/source, obj/item/attacked_by, mob/attacker, params) SIGNAL_HANDLER - if(!iswirecutter(attacked_by) && !isscrewdriver(attacked_by) && !(attacked_by.flags_atom & CONDUCT)) + if(!iswirecutter(attacked_by) && !isscrewdriver(attacked_by) && !(attacked_by.atom_flags & CONDUCT)) return if(shock(source, attacker)) return COMPONENT_NO_AFTERATTACK diff --git a/code/datums/elements/footstep.dm b/code/datums/elements/footstep.dm index fa820a46ff2ae..a3e5c2fa18ecf 100644 --- a/code/datums/elements/footstep.dm +++ b/code/datums/elements/footstep.dm @@ -30,7 +30,7 @@ if(!ishuman(target)) return ELEMENT_INCOMPATIBLE RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(humanstep_wrapper)) //we don't want the movement signal args - RegisterSignal(target, COMSIG_ELEMENT_JUMP_ENDED, PROC_REF(play_humanstep)) + RegisterSignals(target, list(COMSIG_ELEMENT_JUMP_ENDED, COMSIG_MOVABLE_PATROL_DEPLOYED), PROC_REF(play_humanstep)) steps_for_living[target] = 0 return if(FOOTSTEP_MOB_SHOE) @@ -48,11 +48,11 @@ footstep_sounds = GLOB.predalienstompy //RUTGMC EDIT ADDITION END RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(simplestep_wrapper)) - RegisterSignal(target, COMSIG_ELEMENT_JUMP_ENDED, PROC_REF(play_simplestep)) + RegisterSignals(target, list(COMSIG_ELEMENT_JUMP_ENDED, COMSIG_MOVABLE_PATROL_DEPLOYED), PROC_REF(play_simplestep)) steps_for_living[target] = 0 /datum/element/footstep/Detach(atom/movable/source) - UnregisterSignal(source, list(COMSIG_MOVABLE_MOVED, COMSIG_ELEMENT_JUMP_ENDED)) + UnregisterSignal(source, list(COMSIG_MOVABLE_MOVED, COMSIG_ELEMENT_JUMP_ENDED, COMSIG_MOVABLE_PATROL_DEPLOYED)) steps_for_living -= source return ..() @@ -189,7 +189,7 @@ var/override_sound = source_loc.get_footstep_override() var/footstep_type - if((source.wear_suit?.flags_armor_protection | source.w_uniform?.flags_armor_protection | source.shoes?.flags_armor_protection) & FEET) //We are not disgusting barefoot bandits + if((source.wear_suit?.armor_protection_flags | source.w_uniform?.armor_protection_flags | source.shoes?.armor_protection_flags) & FEET) //We are not disgusting barefoot bandits var/static/list/footstep_sounds = GLOB.shoefootstep //static is faster footstep_type = override_sound ? override_sound : source_loc.shoefootstep playsound( diff --git a/code/datums/elements/riding.dm b/code/datums/elements/riding.dm index a9f14d2c3ba81..45546b1a0f3c9 100644 --- a/code/datums/elements/riding.dm +++ b/code/datums/elements/riding.dm @@ -104,7 +104,7 @@ icon = 'icons/obj/items/weapons.dmi' icon_state = "offhand" w_class = WEIGHT_CLASS_HUGE - flags_item = ITEM_ABSTRACT | DELONDROP | NOBLUDGEON + item_flags = ITEM_ABSTRACT | DELONDROP | NOBLUDGEON resistance_flags = INDESTRUCTIBLE | UNACIDABLE | PROJECTILE_IMMUNE var/mob/living/carbon/rider var/mob/living/parent diff --git a/code/datums/elements/scalping.dm b/code/datums/elements/scalping.dm index e34ac71f7e953..f6718a6e3938b 100644 --- a/code/datums/elements/scalping.dm +++ b/code/datums/elements/scalping.dm @@ -26,6 +26,6 @@ /obj/item/scalp name = "scalp" desc = "The mutilated scalp of a slain xeno, proof of a great victory!" - icon = 'icons/unused/Marine_research.dmi' + icon = 'icons/Xeno/xeno_materials.dmi' icon_state = "chitin-chunk" w_class = WEIGHT_CLASS_TINY diff --git a/code/datums/elements/shrapnel_removal.dm b/code/datums/elements/shrapnel_removal.dm index 7cc2573d36b63..35b92110da011 100644 --- a/code/datums/elements/shrapnel_removal.dm +++ b/code/datums/elements/shrapnel_removal.dm @@ -67,6 +67,10 @@ if(is_type_in_list(I, GLOB.known_implants)) continue I.unembed_ourself(FALSE) + if(user.ckey) + var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[user.ckey] + personal_statistics.shrapnel_removed ++ + personal_statistics.mission_shrapnel_removed ++ if(skill < SKILL_MEDICAL_PRACTICED) user.visible_message(span_notice("[user] violently rips out [I] from [target]!"), span_notice("You violently rip out [I] from [target]!")) targetlimb.take_damage_limb(30 * (SKILL_MEDICAL_PRACTICED - skill), 0, FALSE, FALSE) diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm index df4720d47759b..9257815968d84 100644 --- a/code/datums/emergency_calls/emergency_call.dm +++ b/code/datums/emergency_calls/emergency_call.dm @@ -152,7 +152,7 @@ message_admins("Distress beacon: '[name]' activated. Looking for candidates.") if(announce) - priority_announce("A distress beacon has been launched from the [SSmapping.configs[SHIP_MAP].map_name].", "Priority Alert", sound = 'sound/AI/distressbeacon.ogg') + priority_announce("A distress beacon has been launched from the [SSmapping.configs[SHIP_MAP].map_name].", title = "Distress Beacon", type = ANNOUNCEMENT_PRIORITY, sound = 'sound/AI/distressbeacon.ogg', color_override = "orange") SSticker.mode.on_distress_cooldown = TRUE diff --git a/code/datums/emergency_calls/retired.dm b/code/datums/emergency_calls/retired.dm new file mode 100644 index 0000000000000..a963154aab088 --- /dev/null +++ b/code/datums/emergency_calls/retired.dm @@ -0,0 +1,58 @@ +/datum/emergency_call/retired + name = "Retired TGMC Veteran Squad" + base_probability = 15 + alignement_factor = -1 + +/datum/emergency_call/retired/print_backstory(mob/living/carbon/human/H) + to_chat(H, "You are an old, retired member of the TerraGov marine corps.") + to_chat(H, "Althought you may be past your prime, high command has deemed you capable enough to be sent to the [SSmapping.configs[SHIP_MAP].map_name], which has recently sent out a distress signal.") + to_chat(H, "Investigate why the distress signal was sent and show the younger generation how it's done!") + +/datum/emergency_call/retired/create_member(datum/mind/mind_to_assign) + . = ..() + if(!.) + return + var/mob/original = mind_to_assign.current + var/mob/living/carbon/human/H = . + + if(H.gender == MALE) + H.h_style = pick("Bald", "Balding Hair", "Balding Fade", "Balding ponytail", "Balding medium") + else + H.h_style = pick("Overeye Very Short", "Updo", "Ponytail 1") + H.r_hair = 235 + H.g_hair = 235 + H.b_hair = 235 + H.r_facial = 235 + H.g_facial = 235 + H.b_facial = 235 + H.update_hair() + + mind_to_assign.transfer_to(H, TRUE) + H.fully_replace_character_name(mind_to_assign.name, H.real_name) + + if(original) + qdel(original) + + print_backstory(H) + + if(!leader) + leader = H + var/datum/job/J = SSjob.GetJobType(/datum/job/retired/leader) + H.apply_assigned_role_to_spawn(J) + to_chat(H, "

You are the TGMC retired veteran expedition leader! Lead your fellow veterans to one last hurrah!

") + return + + if(prob(30)) //30% chance to get robot limbs instead of being legless in a wheelchair + var/datum/job/J = SSjob.GetJobType(/datum/job/retired/augmented) + H.apply_assigned_role_to_spawn(J) + to_chat(H, "

You are an augmented TGMC veteran, you may have had a few limbs replaced with synthetic versions, but at least you can walk! Follow the expedition leader and relive your glory days!

") + return + + H.amputate_limb(BODY_ZONE_L_LEG) + H.amputate_limb(BODY_ZONE_R_LEG) + var/obj/vehicle/ridden/wheelchair/new_wheelchair = new(H.drop_location()) + new_wheelchair.buckle_mob(H, TRUE) + + var/datum/job/J = SSjob.GetJobType(/datum/job/retired) + H.apply_assigned_role_to_spawn(J) + to_chat(H, "

You are a TGMC veteran, follow the expedition leader and relive your glory days!

") diff --git a/code/datums/emergency_calls/sectoid.dm b/code/datums/emergency_calls/sectoid.dm index 1ac330a1c2d40..357e63f72580b 100644 --- a/code/datums/emergency_calls/sectoid.dm +++ b/code/datums/emergency_calls/sectoid.dm @@ -5,6 +5,8 @@ spawn_type = /mob/living/carbon/human/species/sectoid shuttle_id = SHUTTLE_DISTRESS_UFO alignement_factor = 0 + ///Max amount of psionics allowed in this squad. + var/max_psionics = 2 /datum/emergency_call/sectoid/print_backstory(mob/living/carbon/human/H) to_chat(H, "You are a sectoid, a mass-cloned alien soldier and psionics expert.") @@ -36,6 +38,13 @@ to_chat(H, "

[span_notice("You are the leader of this scouting expedition. You are able to use your stronger psionic powers to protect yourself from harm.")]

") return + if(max_psionics) + var/datum/job/J = SSjob.GetJobType(/datum/job/sectoid/psionic) + H.apply_assigned_role_to_spawn(J) + to_chat(H, "

[span_notice("You are a psionic warrior, with moderate psionic potential.")]

") + max_psionics-- + return + var/datum/job/J = SSjob.GetJobType(/datum/job/sectoid/grunt) H.apply_assigned_role_to_spawn(J) to_chat(H, "

[span_notice("You are a grunt, with limited psionic potential.")]

") diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 9ec5ed0f73593..e59bdf64adbd8 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -14,7 +14,7 @@ var/list/mob_type_ignore_stat_typecache var/stat_allowed = CONSCIOUS var/sound //Sound to play when emote is called - var/flags_emote = NONE + var/emote_flags = NONE /// Cooldown between two uses of that emote. Every emote has its own coodldown var/cooldown = 2 SECONDS @@ -62,8 +62,8 @@ var/dchatmsg = "[prefix][user] [msg]" var/tmp_sound = get_sound(user) - if(tmp_sound && (!(flags_emote & EMOTE_FORCED_AUDIO) || !intentional)) - playsound(user, tmp_sound, 50, flags_emote & EMOTE_VARY) + if(tmp_sound && (!(emote_flags & EMOTE_FORCED_AUDIO) || !intentional)) + playsound(user, tmp_sound, 50, emote_flags & EMOTE_VARY) if(user.client) for(var/mob/M AS in GLOB.dead_mob_list) @@ -104,7 +104,7 @@ /datum/emote/proc/select_message_type(mob/user) . = message - if(!(flags_emote & EMOTE_MUZZLE_IGNORE) && user.is_muzzled() && emote_type == EMOTE_AUDIBLE) + if(!(emote_flags & EMOTE_MUZZLE_IGNORE) && user.is_muzzled() && emote_type == EMOTE_AUDIBLE) return "makes a [pick("strong ", "weak ", "")]noise." if(isxeno(user) && message_alien) . = message_alien @@ -132,7 +132,7 @@ return FALSE if(intentional) - if(flags_emote & EMOTE_FORCED_AUDIO) + if(emote_flags & EMOTE_FORCED_AUDIO) return FALSE if(sound || get_sound(user)) @@ -170,7 +170,7 @@ return FALSE - if(flags_emote & EMOTE_RESTRAINT_CHECK) + if(emote_flags & EMOTE_RESTRAINT_CHECK) if(isliving(user)) var/mob/living/L = user if(L.incapacitated()) @@ -179,7 +179,7 @@ user.balloon_alert(user, "You cannot [key] while stunned") return FALSE - if(flags_emote & EMOTE_ARMS_CHECK) + if(emote_flags & EMOTE_ARMS_CHECK) ///okay snapper var/mob/living/carbon/snapper = user var/datum/limb/left_hand = snapper.get_limb("l_hand") @@ -188,7 +188,7 @@ to_chat(user, span_notice("You cannot [key] without a working hand.")) return FALSE - if((flags_emote & EMOTE_RESTRAINT_CHECK) && user.restrained()) + if((emote_flags & EMOTE_RESTRAINT_CHECK) && user.restrained()) if(!intentional) return FALSE user.balloon_alert(user, "You cannot [key] while restrained") diff --git a/code/datums/fire_support.dm b/code/datums/fire_support.dm index 17efcf386b039..4a1c3935502b8 100644 --- a/code/datums/fire_support.dm +++ b/code/datums/fire_support.dm @@ -196,7 +196,7 @@ initiate_chat_message = "TARGET ACQUIRED ROCKET RUN INBOUND." initiate_screen_message = "Rockets hot, incoming!" initiate_title = "Avenger-4" - portrait_type = /atom/movable/screen/text/screen_text/picture/potrait/som_over + portrait_type = /atom/movable/screen/text/screen_text/picture/potrait/som_pilot start_visual = /obj/effect/temp_visual/dropship_flyby/som uses = 2 @@ -231,6 +231,7 @@ initiate_chat_message = "TARGET ACQUIRED SENTRY POD LAUNCHING." initiate_screen_message = "Co-ordinates confirmed, sentry pod launching." initiate_sound = null + portrait_type = /atom/movable/screen/text/screen_text/picture/potrait/pod_officer start_visual = null start_sound = null cooldown_duration = 1 SECONDS @@ -283,7 +284,7 @@ initiate_chat_message = "TARGET ACQUIRED GUN RUN INBOUND." initiate_screen_message = "Target received, gun run inbound." initiate_title = "Avenger-4" - portrait_type = /atom/movable/screen/text/screen_text/picture/potrait/som_over + portrait_type = /atom/movable/screen/text/screen_text/picture/potrait/som_pilot start_visual = /obj/effect/temp_visual/dropship_flyby/som uses = 3 @@ -328,7 +329,7 @@ initiate_screen_message = "Coordinates confirmed, high explosive inbound!" initiate_title = "Rhino-1" initiate_sound = 'sound/weapons/guns/misc/mortar_travel.ogg' - portrait_type = /atom/movable/screen/text/screen_text/picture/potrait + portrait_type = /atom/movable/screen/text/screen_text/picture/potrait/tgmc_mortar start_visual = null start_sound = 'sound/weapons/guns/misc/mortar_long_whistle.ogg' @@ -338,7 +339,7 @@ /datum/fire_support/mortar/som fire_support_type = FIRESUPPORT_TYPE_HE_MORTAR_SOM initiate_title = "Guardian-1" - portrait_type = /atom/movable/screen/text/screen_text/picture/potrait/som_over + portrait_type = /atom/movable/screen/text/screen_text/picture/potrait/som_mortar /datum/fire_support/mortar/incendiary name = "Incendiary mortar barrage" @@ -355,7 +356,7 @@ /datum/fire_support/mortar/incendiary/som fire_support_type = FIRESUPPORT_TYPE_INCENDIARY_MORTAR_SOM initiate_title = "Guardian-1" - portrait_type = /atom/movable/screen/text/screen_text/picture/potrait/som_over + portrait_type = /atom/movable/screen/text/screen_text/picture/potrait/som_mortar /datum/fire_support/mortar/smoke name = "Smoke mortar barrage" @@ -382,7 +383,7 @@ /datum/fire_support/mortar/smoke/som fire_support_type = FIRESUPPORT_TYPE_SMOKE_MORTAR_SOM initiate_title = "Guardian-1" - portrait_type = /atom/movable/screen/text/screen_text/picture/potrait/som_over + portrait_type = /atom/movable/screen/text/screen_text/picture/potrait/som_mortar /datum/fire_support/mortar/smoke/acid name = "Acid smoke mortar barrage" @@ -391,7 +392,7 @@ icon_state = "acid_smoke_mortar" initiate_chat_message = "COORDINATES CONFIRMED. MORTAR BARRAGE INCOMING." initiate_screen_message = "Coordinates confirmed, acid smoke inbound!" - smoketype = /datum/effect_system/smoke_spread/xeno/acid + smoketype = /datum/effect_system/smoke_spread/xeno/acid/opaque smokeradius = 5 /datum/fire_support/mortar/smoke/satrapine @@ -401,6 +402,7 @@ icon_state = "satrapine_mortar" initiate_chat_message = "COORDINATES CONFIRMED. MORTAR BARRAGE INCOMING." initiate_screen_message = "Coordinates confirmed, satrapine inbound!" + portrait_type = /atom/movable/screen/text/screen_text/picture/potrait/som_mortar smoketype = /datum/effect_system/smoke_spread/satrapine smokeradius = 5 @@ -413,11 +415,11 @@ initiate_chat_message = "TARGET ACQUIRED RAD MISSILE INBOUND." initiate_screen_message = "Target locked, rads inbound!" initiate_title = "Avenger-4" - portrait_type = /atom/movable/screen/text/screen_text/picture/potrait/som_over + portrait_type = /atom/movable/screen/text/screen_text/picture/potrait/som_pilot start_visual = /obj/effect/temp_visual/dropship_flyby/som uses = 2 ///Base strength of the rad effects - var/rad_strength = 30 + var/rad_strength = 25 ///Range for the maximum rad effects var/inner_range = 3 ///Range for the moderate rad effects diff --git a/code/datums/gamemodes/_game_mode.dm b/code/datums/gamemodes/_game_mode.dm index 0cbe77d118a20..d4bccce1752b1 100644 --- a/code/datums/gamemodes/_game_mode.dm +++ b/code/datums/gamemodes/_game_mode.dm @@ -17,8 +17,8 @@ GLOBAL_VAR(common_report) //Contains common part of roundend report var/list/job_points_needed_by_job_type = list() var/round_time_fog - var/flags_round_type = NONE - var/flags_xeno_abilities = NONE + var/round_type_flags = NONE + var/xeno_abilities_flags = NONE ///Determines whether rounds with the gamemode will be factored in when it comes to persistency var/allow_persistence_save = TRUE @@ -61,7 +61,7 @@ GLOBAL_VAR(common_report) //Contains common part of roundend report ///If the gamemode has a whitelist of valid ground maps. Whitelist overrides the blacklist var/list/whitelist_ground_maps ///If the gamemode has a blacklist of disallowed ground maps - var/list/blacklist_ground_maps = list(MAP_DELTA_STATION, MAP_PRISON_STATION, MAP_LV_624, MAP_WHISKEY_OUTPOST, MAP_OSCAR_OUTPOST, MAP_FORT_PHOBOS) + var/list/blacklist_ground_maps = list(MAP_DELTA_STATION, MAP_RESEARCH_OUTPOST, MAP_PRISON_STATION, MAP_LV_624, MAP_WHISKEY_OUTPOST, MAP_OSCAR_OUTPOST, MAP_FORT_PHOBOS) ///if fun tads are enabled by default var/enable_fun_tads = FALSE @@ -110,7 +110,7 @@ GLOBAL_VAR(common_report) //Contains common part of roundend report create_characters() spawn_characters() transfer_characters() - SSpoints.prepare_supply_packs_list(CHECK_BITFIELD(flags_round_type, MODE_HUMAN_ONLY)) + SSpoints.prepare_supply_packs_list(CHECK_BITFIELD(round_type_flags, MODE_HUMAN_ONLY)) SSpoints.dropship_points = 0 SSpoints.supply_points[FACTION_TERRAGOV] = 0 @@ -122,6 +122,9 @@ GLOBAL_VAR(common_report) //Contains common part of roundend report ///Gamemode setup run after the game has started /datum/game_mode/proc/post_setup() addtimer(CALLBACK(src, PROC_REF(display_roundstart_logout_report)), ROUNDSTART_LOGOUT_REPORT_TIME) + if(round_type_flags & MODE_FORCE_CUSTOMSQUAD_UI) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(send_global_signal), COMSIG_GLOB_DEPLOY_TIMELOCK_ENDED), deploy_time_lock) + if(!SSdbcore.Connect()) return var/sql @@ -168,10 +171,10 @@ GLOBAL_VAR(common_report) //Contains common part of roundend report var/mob/living = player.transfer_character() if(!living) continue - qdel(player) living.client.init_verbs() living.notransform = TRUE + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_PLAYER_ROUNDSTART_SPAWNED, living) log_manifest(living.ckey, living.mind, living) livings += living @@ -262,11 +265,11 @@ GLOBAL_LIST_INIT(bioscan_locations, list( /datum/game_mode/proc/setup_blockers() set waitfor = FALSE - if(flags_round_type & MODE_LATE_OPENING_SHUTTER_TIMER) + if(round_type_flags & MODE_LATE_OPENING_SHUTTER_TIMER) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(send_global_signal), COMSIG_GLOB_OPEN_TIMED_SHUTTERS_LATE), SSticker.round_start_time + shutters_drop_time) //Called late because there used to be shutters opened earlier. To re-add them just copy the logic. - if(flags_round_type & MODE_XENO_SPAWN_PROTECT) + if(round_type_flags & MODE_XENO_SPAWN_PROTECT) var/turf/T while(length(GLOB.xeno_spawn_protection_locations)) T = GLOB.xeno_spawn_protection_locations[length(GLOB.xeno_spawn_protection_locations)] @@ -385,6 +388,8 @@ GLOBAL_LIST_INIT(bioscan_locations, list( parts += "[GLOB.round_statistics.howitzer_shells_fired] howitzer shells were fired." if(GLOB.round_statistics.rocket_shells_fired) parts += "[GLOB.round_statistics.rocket_shells_fired] rocket artillery shells were fired." + if(GLOB.round_statistics.obs_fired) + parts += "[GLOB.round_statistics.obs_fired] orbital bombardements were fired." if(GLOB.round_statistics.total_human_deaths[FACTION_TERRAGOV]) parts += "[GLOB.round_statistics.total_human_deaths[FACTION_TERRAGOV]] people were killed, among which [GLOB.round_statistics.total_human_revives[FACTION_TERRAGOV]] were revived and [GLOB.round_statistics.total_human_respawns] respawned. For a [(GLOB.round_statistics.total_human_revives[FACTION_TERRAGOV] / max(GLOB.round_statistics.total_human_deaths[FACTION_TERRAGOV], 1)) * 100]% revival rate and a [(GLOB.round_statistics.total_human_respawns / max(GLOB.round_statistics.total_human_deaths[FACTION_TERRAGOV], 1)) * 100]% respawn rate." if(SSevacuation.human_escaped) @@ -469,13 +474,11 @@ GLOBAL_LIST_INIT(bioscan_locations, list( if(GLOB.round_statistics.points_from_research) parts += "[GLOB.round_statistics.points_from_research] requisitions points gained from research." if(length(GLOB.round_statistics.req_items_produced)) + parts += "" // make it special from other stats above parts += "Requisitions produced: " for(var/atom/movable/path AS in GLOB.round_statistics.req_items_produced) - parts += "[GLOB.round_statistics.req_items_produced[path]] [initial(path.name)]" - if(path == GLOB.round_statistics.req_items_produced[length(GLOB.round_statistics.req_items_produced)]) //last element - parts += "." - else - parts += "," + var/last = GLOB.round_statistics.req_items_produced[length(GLOB.round_statistics.req_items_produced)] + parts += "[GLOB.round_statistics.req_items_produced[path]] [initial(path.name)][last ? "." : ","]" if(length(parts)) return "
[parts.Join("
")]
" @@ -586,6 +589,7 @@ GLOBAL_LIST_INIT(bioscan_locations, list( player.create_character() SSjob.spawn_character(player, TRUE) player.mind.transfer_to(player.new_character, TRUE) + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_PLAYER_LATE_SPAWNED, player.new_character) log_manifest(player.new_character.ckey, player.new_character.mind, player.new_character, latejoin = TRUE) var/datum/job/job = player.assigned_role job.on_late_spawn(player.new_character) @@ -957,7 +961,7 @@ GLOBAL_LIST_INIT(bioscan_locations, list( /// Displays your position in the larva queue and how many burrowed larva there are, if applicable /datum/game_mode/proc/handle_larva_timer(datum/dcs, mob/source, list/items) - if(!(flags_round_type & MODE_INFESTATION)) + if(!(round_type_flags & MODE_INFESTATION)) return var/larva_position = SEND_SIGNAL(source.client, COMSIG_CLIENT_GET_LARVA_QUEUE_POSITION) if (larva_position) // If non-zero, we're in queue @@ -976,3 +980,7 @@ GLOBAL_LIST_INIT(bioscan_locations, list( items += "Xeno respawn timer: READY" else items += "Xeno respawn timer: [(status_value / 60) % 60]:[add_leading(num2text(status_value % 60), 2, "0")]" + +///Returns a list of verbs to give ghosts in this gamemode +/datum/game_mode/proc/ghost_verbs(mob/dead/observer/observer) + return diff --git a/code/datums/gamemodes/campaign.dm b/code/datums/gamemodes/campaign.dm index 9d0898b9346f3..07920127e09cc 100644 --- a/code/datums/gamemodes/campaign.dm +++ b/code/datums/gamemodes/campaign.dm @@ -1,34 +1,36 @@ /datum/game_mode/hvh/campaign name = "Campaign" config_tag = "Campaign" - flags_round_type = MODE_TWO_HUMAN_FACTIONS|MODE_HUMAN_ONLY + round_type_flags = MODE_TWO_HUMAN_FACTIONS|MODE_HUMAN_ONLY whitelist_ship_maps = list(MAP_ITERON) whitelist_ground_maps = list(MAP_FORT_PHOBOS) bioscan_interval = 3 MINUTES valid_job_types = list( - /datum/job/terragov/command/captain/campaign = 1, - /datum/job/terragov/command/staffofficer/campaign = 2, - /datum/job/terragov/command/fieldcommander/campaign = 1, - /datum/job/terragov/squad/engineer = 4, + /datum/job/terragov/squad/standard = -1, /datum/job/terragov/squad/corpsman = 8, + /datum/job/terragov/squad/engineer = 4, /datum/job/terragov/squad/smartgunner = 4, /datum/job/terragov/squad/leader = 4, - /datum/job/terragov/squad/standard = -1, - /datum/job/som/command/commander = 1, - /datum/job/som/command/staffofficer = 2, - /datum/job/som/command/fieldcommander = 1, - /datum/job/som/squad/leader = 4, - /datum/job/som/squad/veteran = 2, - /datum/job/som/squad/engineer = 4, - /datum/job/som/squad/medic = 8, + /datum/job/terragov/command/fieldcommander/campaign = 1, + /datum/job/terragov/command/staffofficer/campaign = 2, + /datum/job/terragov/command/captain/campaign = 1, /datum/job/som/squad/standard = -1, + /datum/job/som/squad/medic = 8, + /datum/job/som/squad/engineer = 4, + /datum/job/som/squad/veteran = 4, + /datum/job/som/squad/leader = 4, + /datum/job/som/command/fieldcommander = 1, + /datum/job/som/command/staffofficer = 2, + /datum/job/som/command/commander = 1, ) ///The current mission type being played var/datum/campaign_mission/current_mission ///campaign stats organised by faction var/list/datum/faction_stats/stat_list = list() - ///List of death times by key. Used for respawn time + ///List of death times by ckey. Used for respawn time var/list/player_death_times = list() + ///List of timers to auto open the respawn window + var/list/respawn_timers = list() /datum/game_mode/hvh/campaign/announce() to_chat(world, "The current game mode is - Campaign!") @@ -41,7 +43,7 @@ . = ..() for(var/faction in factions) stat_list[faction] = new /datum/faction_stats(faction) - RegisterSignal(SSdcs, COMSIG_LIVING_JOB_SET, PROC_REF(register_faction_member)) + RegisterSignals(SSdcs, list(COMSIG_GLOB_PLAYER_ROUNDSTART_SPAWNED, COMSIG_GLOB_PLAYER_LATE_SPAWNED), PROC_REF(register_faction_member)) RegisterSignals(SSdcs, list(COMSIG_GLOB_MOB_DEATH, COMSIG_MOB_GHOSTIZE), PROC_REF(set_death_time)) RegisterSignal(SSdcs, COMSIG_GLOB_CAMPAIGN_MISSION_ENDED, PROC_REF(cut_death_list_timer)) addtimer(CALLBACK(SSticker.mode, TYPE_PROC_REF(/datum/game_mode/hvh/campaign, intro_sequence)), SSticker.round_start_time + 1 MINUTES) @@ -64,8 +66,8 @@ return respawnee.respawn() var/respawn_delay = CAMPAIGN_RESPAWN_TIME + stat_list[respawnee.faction]?.respawn_delay_modifier - if((player_death_times[respawnee.key] + respawn_delay) > world.time) - to_chat(respawnee, "Respawn timer has [round((player_death_times[respawnee.key] + respawn_delay - world.time) / 10)] seconds remaining.") + if((player_death_times[respawnee.ckey] + respawn_delay) > world.time) + to_chat(respawnee, "Respawn timer has [round((player_death_times[respawnee.ckey] + respawn_delay - world.time) / 10)] seconds remaining.") return attempt_attrition_respawn(respawnee) @@ -122,13 +124,68 @@ continue stat_list[i].get_status_tab_items(source, items) +/datum/game_mode/hvh/campaign/ghost_verbs(mob/dead/observer/observer) + return list(/datum/action/campaign_overview, /datum/action/campaign_loadout) ///sets up the newly selected mission /datum/game_mode/hvh/campaign/proc/load_new_mission(datum/campaign_mission/new_mission) current_mission = new_mission + addtimer(CALLBACK(src, PROC_REF(autobalance_cycle)), CAMPAIGN_AUTOBALANCE_DELAY) //we autobalance teams after a short delay to account for slow respawners current_mission.load_mission() TIMER_COOLDOWN_START(src, COOLDOWN_BIOSCAN, bioscan_interval) +///Checks team balance and tries to correct if possible +/datum/game_mode/hvh/campaign/proc/autobalance_cycle() + var/list/autobalance_faction_list = autobalance_check() + if(!autobalance_faction_list) + return + + for(var/mob/living/carbon/human/faction_member AS in GLOB.alive_human_list_faction[autobalance_faction_list[1]]) + if(stat_list[faction_member.faction].faction_leader == faction_member) + continue + swap_player_team(faction_member, autobalance_faction_list[2]) + + addtimer(CALLBACK(src, PROC_REF(autobalance_bonus)), CAMPAIGN_AUTOBALANCE_DECISION_TIME + 1 SECONDS) + +/** Checks team balance + * Returns null if teams are nominally balanced + * Returns a list with the stronger team first if they are inbalanced + */ +/datum/game_mode/hvh/campaign/proc/autobalance_check(ratio = MAX_UNBALANCED_RATIO_TWO_HUMAN_FACTIONS) + var/team_one_count = length(GLOB.alive_human_list_faction[factions[1]]) + var/team_two_count = length(GLOB.alive_human_list_faction[factions[2]]) + + if(team_one_count > team_two_count * ratio) + return list(factions[1], factions[2]) + else if(team_two_count > team_one_count * ratio) + return list(factions[2], factions[1]) + +///Actually swaps the player to the other team, unless balance has been restored +/datum/game_mode/hvh/campaign/proc/swap_player_team(mob/living/carbon/human/user, new_faction) + if(tgui_alert(user, "The teams are currently imbalanced, in favour of your team.", "Join the other team?", list("Stay on team", "Change team"), CAMPAIGN_AUTOBALANCE_DECISION_TIME, FALSE) != "Change team") + return + var/list/current_ratio = autobalance_check(1) + if(!current_ratio || current_ratio[2] == user.faction) + to_chat(user, span_warning("Team balance already corrected.")) + return + LAZYREMOVE(GLOB.alive_human_list_faction[user.faction], user) + user.faction = new_faction //we set this first so the ghost's faction and subsequent job screen is correct, but it means we have to remove from the faction list above first. + var/mob/dead/observer/ghost = user.ghostize() + user.job.add_job_positions(1) + qdel(user) + var/datum/individual_stats/new_stats = stat_list[new_faction].get_player_stats(ghost) + new_stats.give_funds(max(stat_list[new_faction].accumulated_mission_reward * 0.5, 200)) //Added credits for swapping team + player_respawn(ghost) //auto open the respawn screen + +///buffs the weaker team if players don't voluntarily switch +/datum/game_mode/hvh/campaign/proc/autobalance_bonus() + var/list/autobalance_faction_list = autobalance_check() + if(!autobalance_faction_list) + return + + var/autobal_num = ROUND_UP((length(GLOB.alive_human_list_faction[autobalance_faction_list[1]]) - length(GLOB.alive_human_list_faction[autobalance_faction_list[2]])) * 0.2) + current_mission.spawn_mech(autobalance_faction_list[2], 0, 0, autobal_num, "[autobal_num] additional mechs granted for autobalance") + //respawn stuff ///Records the players death time for respawn time purposes @@ -140,16 +197,32 @@ return if(!(player.faction in factions)) return - player_death_times[player.key] = world.time + player_death_times[player.ckey] = world.time + respawn_timers[player.ckey] = addtimer(CALLBACK(src, PROC_REF(auto_attempt_respawn), player.ckey), CAMPAIGN_RESPAWN_TIME + stat_list[player.faction]?.respawn_delay_modifier + 1, TIMER_STOPPABLE) + +///Auto pops up the respawn window +/datum/game_mode/hvh/campaign/proc/auto_attempt_respawn(respawnee_ckey) + for(var/mob/player AS in GLOB.player_list) + if(player.ckey != respawnee_ckey) + continue + respawn_timers[respawnee_ckey] = null + if(isliving(player) && player.stat != DEAD) + return + player_respawn(player) + return ///Wrapper for cutting the deathlist via timer due to the players not immediately returning to base /datum/game_mode/hvh/campaign/proc/cut_death_list_timer(datum/source) SIGNAL_HANDLER addtimer(CALLBACK(src, PROC_REF(cut_death_list)), AFTER_MISSION_TELEPORT_DELAY + 1) -///cuts the death time list at mission end +///cuts the death time and respawn_timers list at mission end /datum/game_mode/hvh/campaign/proc/cut_death_list(datum/source) player_death_times.Cut() + for(var/ckey in respawn_timers) + auto_attempt_respawn(ckey) //Faction datum doesn't pop up for ghosts + deltimer(respawn_timers[ckey]) + respawn_timers.Cut() ///respawns the player if attrition points are available /datum/game_mode/hvh/campaign/proc/attempt_attrition_respawn(mob/candidate) @@ -270,15 +343,6 @@ SIGNAL_HANDLER if(!(new_member.faction in factions)) return - add_verb(new_member, /mob/living/proc/open_faction_stats_ui) -///Opens up the players campaign status UI -/mob/living/proc/open_faction_stats_ui() - set name = "Campaign Status" - set desc = "Check the status of your faction in the campaign." - set category = "IC" - - var/datum/faction_stats/your_faction = GLOB.faction_stats_datums[faction] - if(!your_faction) - return - your_faction.interact(src) + var/datum/action/campaign_overview/overview = new + overview.give_action(new_member) diff --git a/code/datums/gamemodes/campaign/campaign_assets.dm b/code/datums/gamemodes/campaign/campaign_assets.dm index 120ba6525fda4..47abfeb86cb0c 100644 --- a/code/datums/gamemodes/campaign/campaign_assets.dm +++ b/code/datums/gamemodes/campaign/campaign_assets.dm @@ -30,6 +30,8 @@ var/detailed_desc = "This is a placeholder asset. You shouldn't see this, it does nothing at all." ///The faction associated with these stats var/datum/faction_stats/faction + ///Specific portrait used when activating this asset. Defaults to faction default if not specified + var/asset_portrait = null ///asset related flags var/asset_flags = ASSET_ACTIVATED_EFFECT ///Number of times this can be used @@ -45,9 +47,12 @@ ///Feedback message if this asset is unusable during this mission var/blacklist_message = "Unavailable during this mission." -/datum/campaign_asset/New(datum/faction_stats/winning_faction) +/datum/campaign_asset/New(datum/faction_stats/new_faction) . = ..() - faction = winning_faction + if(!istype(new_faction)) + return qdel(src) + SEND_SIGNAL(new_faction, COMSIG_CAMPAIGN_NEW_ASSET, src) + faction = new_faction if(asset_flags & ASSET_IMMEDIATE_EFFECT) immediate_effect() if(asset_flags & ASSET_PASSIVE_EFFECT) @@ -65,8 +70,8 @@ immediate_effect() ///Handles the activated asset process -/datum/campaign_asset/proc/attempt_activatation(mob/user) - if(activation_checks(user)) +/datum/campaign_asset/proc/attempt_activatation(mob/user, check_override = FALSE) + if(!check_override && activation_checks(user)) return FALSE activated_effect() diff --git a/code/datums/gamemodes/campaign/campaign_mission.dm b/code/datums/gamemodes/campaign/campaign_mission.dm index 7c218fef78e25..15a50058ddd73 100644 --- a/code/datums/gamemodes/campaign/campaign_mission.dm +++ b/code/datums/gamemodes/campaign/campaign_mission.dm @@ -21,7 +21,7 @@ MISSION_HOSTILE_FACTION = 0, ) ///Any mission behavior flags - var/mission_flags = null + var/mission_flags = NONE ///faction that chose the mission var/starting_faction ///faction that did not choose the mission @@ -66,21 +66,30 @@ MISSION_OUTCOME_MINOR_LOSS = list(0, 0), MISSION_OUTCOME_MAJOR_LOSS = list(0, 0), ) + ///cash rewards for the mission type + var/list/cash_rewards = list( + MISSION_OUTCOME_MAJOR_VICTORY = list(700, 500), + MISSION_OUTCOME_MINOR_VICTORY = list(600, 500), + MISSION_OUTCOME_DRAW = list(500, 500), + MISSION_OUTCOME_MINOR_LOSS = list(500, 600), + MISSION_OUTCOME_MAJOR_LOSS = list(500, 700), + ) /// Timer used to calculate how long till mission ends var/game_timer ///The length of time until mission ends, if timed - var/max_game_time = null + var/max_game_time = 0 ///Whether the max game time has been reached var/max_time_reached = FALSE ///Delay before the mission actually starts - var/mission_start_delay = 3 MINUTES + var/mission_start_delay = 1.5 MINUTES ///Delay from shutter drop until game TIMER starts - var/game_timer_delay = 3 MINUTES + var/game_timer_delay = 1 MINUTES ///Map text intro message for the start of the mission var/list/intro_message = list( MISSION_STARTING_FACTION = "starting faction intro text here", MISSION_HOSTILE_FACTION = "hostile faction intro text here", ) + ///Message to players when a mission ends var/list/outro_message = list( MISSION_OUTCOME_MAJOR_VICTORY = list( MISSION_STARTING_FACTION = "Major victory
All mission objectives achieved, outstanding work!", @@ -108,15 +117,15 @@ ///Operation name for hostile faction var/op_name_hostile ///Possible rewards for a major victory, used by Generate_rewards() - var/list/major_victory_reward_table = list() + var/list/major_victory_reward_table ///Possible rewards for a minor victory, used by Generate_rewards() - var/list/minor_victory_reward_table = list() + var/list/minor_victory_reward_table ///Possible rewards for a minor loss, used by Generate_rewards() - var/list/minor_loss_reward_table = list() + var/list/minor_loss_reward_table ///Possible rewards for a major loss, used by Generate_rewards() - var/list/major_loss_reward_table = list() + var/list/major_loss_reward_table ///Possible rewards for a draw, used by Generate_rewards() - var/list/draw_reward_table = list() + var/list/draw_reward_table /datum/campaign_mission/New(initiating_faction) . = ..() @@ -135,6 +144,7 @@ op_name_hostile = GLOB.operation_namepool[/datum/operation_namepool].get_random_name() load_mission_brief() //late loaded so we can ref the specific factions etc + set_loot_tables() /datum/campaign_mission/Destroy(force, ...) STOP_PROCESSING(SSslowprocess, src) @@ -148,6 +158,22 @@ end_mission() return PROCESS_KILL +///Sets up the loot tables for this mission, if required +/datum/campaign_mission/proc/set_loot_tables() + if(starting_faction == FACTION_TERRAGOV) + major_victory_reward_table = GLOB.campaign_tgmc_major_loot + minor_victory_reward_table = GLOB.campaign_tgmc_minor_loot + else if(starting_faction == FACTION_SOM) + major_victory_reward_table = GLOB.campaign_som_major_loot + minor_victory_reward_table = GLOB.campaign_som_minor_loot + + if(hostile_faction == FACTION_TERRAGOV) + minor_loss_reward_table = GLOB.campaign_tgmc_minor_loot + major_loss_reward_table = GLOB.campaign_tgmc_major_loot + else if(hostile_faction == FACTION_SOM) + minor_loss_reward_table = GLOB.campaign_som_minor_loot + major_loss_reward_table = GLOB.campaign_som_major_loot + ///Sets up the mission once it has been selected /datum/campaign_mission/proc/load_mission() play_selection_intro() @@ -181,7 +207,7 @@ if(max_time_reached) items += "Mission status: Mission complete" items += "" - else if(game_timer) + else items += "Mission time remaining: [mission_end_countdown()]" items += "" @@ -216,6 +242,9 @@ if(MISSION_OUTCOME_DRAW) reward_table = draw_reward_table + if(!length(reward_table)) + return + for(var/i = 1 to reward_amount) var/obj/reward = pickweight(reward_table) new reward(get_turf(pick(GLOB.campaign_reward_spawners[faction]))) @@ -226,16 +255,35 @@ ///sets up the timer for the mission /datum/campaign_mission/proc/set_mission_timer() - if(!iscampaigngamemode(SSticker.mode)) + if(game_timer) return - game_timer = addtimer(VARSET_CALLBACK(src, max_time_reached, TRUE), max_game_time, TIMER_STOPPABLE) +///Pauses the gametimer, recording the remaining time left in max_game_time +/datum/campaign_mission/proc/pause_mission_timer(trait_source = TRAIT_GENERIC) + if(!trait_source) + trait_source = TRAIT_GENERIC + ADD_TRAIT(src, CAMPAIGN_MISSION_TIMER_PAUSED, trait_source) + if(!game_timer) + return + max_game_time = timeleft(game_timer) + deltimer(game_timer) + game_timer = null + +///Attempts to resume the gametimer +/datum/campaign_mission/proc/resume_mission_timer(trait_source = TRAIT_GENERIC, forced = FALSE) + REMOVE_TRAIT(src, CAMPAIGN_MISSION_TIMER_PAUSED, trait_source) + if(!forced && HAS_TRAIT(src, CAMPAIGN_MISSION_TIMER_PAUSED)) + return + set_mission_timer() + ///accesses the timer for status panel /datum/campaign_mission/proc/mission_end_countdown() - if(max_time_reached) - return "Mission finished" - var/eta = timeleft(game_timer) * 0.1 + //if(max_time_reached) + // return "Mission finished" + if(!game_timer && HAS_TRAIT(src, CAMPAIGN_MISSION_TIMER_PAUSED)) + return "Timer paused" + var/eta = game_timer ? (timeleft(game_timer) * 0.1) : (max_game_time * 0.1) if(eta > 0) return "[(eta / 60) % 60]:[add_leading(num2text(eta % 60), 2, "0")]" @@ -276,6 +324,16 @@ for(var/i in GLOB.quick_loadouts) var/datum/outfit/quick/outfit = GLOB.quick_loadouts[i] outfit.quantity = initial(outfit.quantity) + for(var/job in GLOB.campaign_loadout_items_by_role) + for(var/datum/loadout_item/loadout_item AS in GLOB.campaign_loadout_items_by_role[job]) + loadout_item.quantity = initial(loadout_item.quantity) + for(var/mob/living/carbon/human/corpse AS in GLOB.dead_human_list) //clean up all the bodies and refund normal roles if required + if(corpse.z != mission_z_level.z_value) + continue + if(!HAS_TRAIT(corpse, TRAIT_UNDEFIBBABLE) && corpse.job.job_cost) + corpse.job.free_job_positions(1) + + qdel(corpse) ///Unregisters all signals when the mission finishes /datum/campaign_mission/proc/unregister_mission_signals() @@ -321,6 +379,7 @@ modify_attrition_points(attrition_point_rewards[outcome][1], attrition_point_rewards[outcome][2]) apply_victory_points(victory_point_rewards[outcome][1], victory_point_rewards[outcome][2]) + apply_cash_reward(cash_rewards[outcome][1], cash_rewards[outcome][2]) //reset attrition points - unused points are lost mode.stat_list[starting_faction].active_attrition_points = 0 @@ -356,6 +415,11 @@ mode.stat_list[starting_faction].total_attrition_points += start_team_points mode.stat_list[hostile_faction].total_attrition_points += hostile_team_points +///applies mission cash bonuses to both factions +/datum/campaign_mission/proc/apply_cash_reward(start_team_cash, hostile_team_cash) + mode.stat_list[starting_faction].apply_cash(start_team_cash) + mode.stat_list[hostile_faction].apply_cash(hostile_team_cash) + ///checks how many marines and SOM are still alive /datum/campaign_mission/proc/count_humans(list/z_levels = SSmapping.levels_by_trait(ZTRAIT_AWAY), count_flags) //todo: make new Z's not away levels, or ensure ground and away is consistant in behavior var/list/team_one_alive = list() @@ -437,7 +501,7 @@ GLOB.campaign_structures -= mission_obj ///spawns mechs for a faction -/datum/campaign_mission/proc/spawn_mech(mech_faction, heavy_mech, medium_mech, light_mech) +/datum/campaign_mission/proc/spawn_mech(mech_faction, heavy_mech, medium_mech, light_mech, override_message) if(!mech_faction) return var/total_count = (heavy_mech + medium_mech + light_mech) @@ -457,4 +521,11 @@ GLOB.campaign_structures += new_mech RegisterSignal(new_mech, COMSIG_QDELETING, TYPE_PROC_REF(/datum/campaign_mission, remove_mission_object)) - map_text_broadcast(mech_faction, "[total_count] mechs have been deployed for this mission.", "Mechs available") + map_text_broadcast(mech_faction, override_message ? override_message : "[total_count] mechs have been deployed for this mission.", "Mechs available") + +///Returns the current mission, if its the campaign gamemode +/proc/get_current_mission() + if(!iscampaigngamemode(SSticker.mode)) + return null + var/datum/game_mode/hvh/campaign/mode = SSticker.mode + return mode.current_mission diff --git a/code/datums/gamemodes/campaign/faction_stats.dm b/code/datums/gamemodes/campaign/faction_stats.dm index 6b058f9a8131c..49f01727408d8 100644 --- a/code/datums/gamemodes/campaign/faction_stats.dm +++ b/code/datums/gamemodes/campaign/faction_stats.dm @@ -45,14 +45,14 @@ GLOBAL_LIST_INIT(campaign_default_purchasable_assets, list( /datum/campaign_asset/teleporter_charges, /datum/campaign_asset/teleporter_enabled, /datum/campaign_asset/equipment/medkit_basic/som, - /datum/campaign_asset/equipment/materials_pack, + /datum/campaign_asset/equipment/materials_pack/som, /datum/campaign_asset/equipment/ballistic_som, /datum/campaign_asset/equipment/shotguns_som, /datum/campaign_asset/equipment/volkite, /datum/campaign_asset/equipment/heavy_armour_som, /datum/campaign_asset/equipment/shields_som, /datum/campaign_asset/equipment/grenades_som, - /datum/campaign_asset/equipment/at_mines, + /datum/campaign_asset/equipment/at_mines/som, /datum/campaign_asset/equipment/tac_bino_som, /datum/campaign_asset/tactical_reserves, ), @@ -66,9 +66,10 @@ GLOBAL_LIST_INIT(campaign_mission_pool, list( /datum/campaign_mission/tdm/mech_wars = 12, /datum/campaign_mission/destroy_mission/supply_raid = 15, /datum/campaign_mission/destroy_mission/base_rescue = 12, + /datum/campaign_mission/raiding_base = 6, ), FACTION_SOM = list( - /datum/campaign_mission/tdm/lv624 = 10, + /datum/campaign_mission/tdm/orion = 10, /datum/campaign_mission/destroy_mission/fire_support_raid/som = 15, /datum/campaign_mission/tdm/mech_wars/som = 12, /datum/campaign_mission/destroy_mission/supply_raid/som = 15, @@ -90,7 +91,7 @@ GLOBAL_LIST_INIT(campaign_mission_pool, list( var/active_attrition_points = 0 ///Multiplier on the passive attrition point gain for this faction var/attrition_gain_multiplier = 1 - ///cumulative loss bonus which is applied to attrition gain mult + ///cumulative loss bonus which is applied to attrition gain mult and player credit mission reward var/loss_bonus = 0 ///Future missions this faction can currently choose from var/list/datum/campaign_mission/available_missions = list() @@ -103,9 +104,13 @@ GLOBAL_LIST_INIT(campaign_mission_pool, list( ///Any special behavior flags for the faction var/stats_flags = NONE ///Portrait used for general screen text notifications - var/atom/movable/screen/text/screen_text/picture/faction_portrait + var/faction_portrait ///Faction-wide modifier to respawn delay var/respawn_delay_modifier = 0 + ///records how much currency has been earned from missions, for late join players + var/accumulated_mission_reward = 0 + ///list of individual stats by ckey + var/list/datum/individual_stats/individual_stat_list = list() /datum/faction_stats/New(new_faction) . = ..() @@ -118,6 +123,7 @@ GLOBAL_LIST_INIT(campaign_mission_pool, list( for(var/i = 1 to CAMPAIGN_STANDARD_MISSION_QUANTITY) generate_new_mission() RegisterSignal(SSdcs, COMSIG_GLOB_CAMPAIGN_MISSION_ENDED, PROC_REF(mission_end)) + RegisterSignals(SSdcs, list(COMSIG_GLOB_PLAYER_ROUNDSTART_SPAWNED, COMSIG_GLOB_PLAYER_LATE_SPAWNED), PROC_REF(register_faction_member)) faction_portrait = GLOB.faction_to_portrait[faction] ? GLOB.faction_to_portrait[faction] : /atom/movable/screen/text/screen_text/picture/potrait/unknown @@ -125,6 +131,32 @@ GLOBAL_LIST_INIT(campaign_mission_pool, list( GLOB.faction_stats_datums -= faction return ..() +///Sets up newly spawned players with the campaign status verb +/datum/faction_stats/proc/register_faction_member(datum/source, mob/living/carbon/human/new_member) + SIGNAL_HANDLER + if(!ishuman(new_member)) + return + if(new_member.faction != faction) + return + if(individual_stat_list[new_member.ckey]) + individual_stat_list[new_member.ckey].current_mob = new_member + individual_stat_list[new_member.ckey].apply_perks() + else + get_player_stats(new_member) + var/datum/action/campaign_loadout/loadouts = new + loadouts.give_action(new_member) + if(!(new_member.job.job_cost)) + return + loadouts.action_activate() + +///Returns a users individual stat datum, generating a new one if required +/datum/faction_stats/proc/get_player_stats(mob/user) + if(!user.ckey) + return + if(!individual_stat_list[user.ckey]) + individual_stat_list[user.ckey] = new /datum/individual_stats(user, faction, accumulated_mission_reward) + return individual_stat_list[user.ckey] + ///Randomly adds a new mission to the available pool /datum/faction_stats/proc/generate_new_mission() if(!length(GLOB.campaign_mission_pool[faction]) || (length(available_missions) >= CAMPAIGN_STANDARD_MISSION_QUANTITY)) @@ -158,6 +190,8 @@ GLOBAL_LIST_INIT(campaign_mission_pool, list( for(var/mob/living/carbon/human/candidate AS in possible_candidates) if(candidate.job.title != senior_rank) continue + if(!candidate.client) + continue senior_rank_list += candidate if(!length(senior_rank_list)) senior_rank_list.Cut() @@ -183,6 +217,11 @@ GLOBAL_LIST_INIT(campaign_mission_pool, list( faction_assets[new_asset] = new new_asset(src) RegisterSignals(faction_assets[new_asset], list(COMSIG_CAMPAIGN_ASSET_ACTIVATION, COMSIG_CAMPAIGN_DISABLER_ACTIVATION), PROC_REF(force_update_static_data)) +///Removes an asset from a faction entirely +/datum/faction_stats/proc/remove_asset(datum/campaign_asset/removed_asset) + if(faction_assets[removed_asset]) + QDEL_NULL(faction_assets[removed_asset]) + ///handles post mission wrap up for the faction /datum/faction_stats/proc/mission_end(datum/source, datum/campaign_mission/completed_mission, winning_faction) SIGNAL_HANDLER @@ -197,21 +236,38 @@ GLOBAL_LIST_INIT(campaign_mission_pool, list( generate_new_mission() update_static_data_for_all_viewers() - addtimer(CALLBACK(src, PROC_REF(return_to_base)), AFTER_MISSION_TELEPORT_DELAY) + addtimer(CALLBACK(src, PROC_REF(return_to_base), completed_mission), AFTER_MISSION_TELEPORT_DELAY) addtimer(CALLBACK(src, PROC_REF(get_selector)), AFTER_MISSION_LEADER_DELAY) //if the leader died, we load a new one after a bit to give respawns some time +///applies cash rewards to the faction and all individuals +/datum/faction_stats/proc/apply_cash(amount) + if(!amount) + return + amount *= 1 + loss_bonus + accumulated_mission_reward += amount + for(var/i in individual_stat_list) + var/datum/individual_stats/player_stats = individual_stat_list[i] + player_stats.give_funds(amount) + ///Returns all faction members back to base after the mission is completed -/datum/faction_stats/proc/return_to_base() +/datum/faction_stats/proc/return_to_base(datum/campaign_mission/completed_mission) for(var/mob/living/carbon/human/human_mob AS in GLOB.alive_human_list_faction[faction]) - if(!human_mob.job.job_cost) //asset based roles are one use - human_mob.ghostize() - qdel(human_mob) + if((human_mob.z && human_mob.z != completed_mission.mission_z_level.z_value) && human_mob.job.job_cost && human_mob.client) //why is byond so cursed that being inside something makes you z = 0 + human_mob.revive(TRUE) + human_mob.overlay_fullscreen_timer(0.5 SECONDS, 10, "roundstart1", /atom/movable/screen/fullscreen/black) + human_mob.overlay_fullscreen_timer(2 SECONDS, 20, "roundstart2", /atom/movable/screen/fullscreen/spawning_in) + human_mob.forceMove(pick(GLOB.spawns_by_job[human_mob.job.type])) + human_mob.Stun(1 SECONDS) //so you don't accidentally shoot your team etc continue - human_mob.revive(TRUE) - human_mob.overlay_fullscreen_timer(0.5 SECONDS, 10, "roundstart1", /atom/movable/screen/fullscreen/black) - human_mob.overlay_fullscreen_timer(2 SECONDS, 20, "roundstart2", /atom/movable/screen/fullscreen/spawning_in) - human_mob.forceMove(pick(GLOB.spawns_by_job[human_mob.job.type])) - human_mob.Stun(1 SECONDS) //so you don't accidentally shoot your team etc + + var/mob/dead/observer/ghost = human_mob.ghostize() + if(human_mob.job.job_cost) //We don't refund ally roles + human_mob.job.add_job_positions(1) + qdel(human_mob) + if(!ghost) //if they ghosted already + return + var/datum/game_mode/mode = SSticker.mode + mode.player_respawn(ghost) //auto open the respawn screen ///Generates status tab info for the mission /datum/faction_stats/proc/get_status_tab_items(mob/source, list/items) @@ -240,6 +296,8 @@ GLOBAL_LIST_INIT(campaign_mission_pool, list( update_static_data_for_all_viewers() //UI stuff// +/datum/faction_stats/ui_assets(mob/user) + return list(get_asset_datum(/datum/asset/spritesheet/campaign/missions), get_asset_datum(/datum/asset/spritesheet/campaign/assets)) /datum/faction_stats/ui_interact(mob/living/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -249,6 +307,8 @@ GLOBAL_LIST_INIT(campaign_mission_pool, list( ui.open() /datum/faction_stats/ui_state(mob/user) + if(isobserver(user)) + return GLOB.always_state return GLOB.conscious_state /datum/faction_stats/ui_static_data(mob/living/user) @@ -356,8 +416,6 @@ GLOBAL_LIST_INIT(campaign_mission_pool, list( data["victory_points"] = victory_points data["max_victory_points"] = CAMPAIGN_MAX_VICTORY_POINTS data["faction"] = faction - data["icons"] = GLOB.campaign_icons - data["mission_icons"] = GLOB.campaign_mission_icons return data @@ -371,6 +429,8 @@ GLOBAL_LIST_INIT(campaign_mission_pool, list( CRASH("campaign_mission loaded without campaign game mode") var/mob/living/user = usr + if(!istype(user)) + return switch(action) if("set_attrition_points") @@ -380,12 +440,11 @@ GLOBAL_LIST_INIT(campaign_mission_pool, list( if((current_mode.current_mission?.mission_state != MISSION_STATE_NEW) && (current_mode.current_mission?.mission_state != MISSION_STATE_LOADED)) to_chat(user, "Current mission already ongoing, unable to assign more personnel at this time.") return - total_attrition_points += active_attrition_points - active_attrition_points = 0 //reset, you can change your mind up until the mission starts - var/choice = tgui_input_number(user, "How much manpower would you like to dedicate to this mission?", "Attrition Point selection", 0, total_attrition_points, 0, 60 SECONDS) - if(!choice) - choice = 0 - total_attrition_points -= choice + var/combined_attrition = total_attrition_points + active_attrition_points + var/choice = tgui_input_number(user, "How much manpower would you like to dedicate to this mission?", "Attrition Point selection", 0, combined_attrition, 0, 60 SECONDS) + combined_attrition = total_attrition_points + active_attrition_points //we do it again in case the amount has changed + choice = clamp(choice, 0, combined_attrition) + total_attrition_points = combined_attrition - choice active_attrition_points = choice for(var/mob/living/carbon/human/faction_member AS in GLOB.alive_human_list_faction[faction]) faction_member.playsound_local(null, 'sound/effects/CIC_order.ogg', 30, 1) @@ -432,7 +491,8 @@ GLOBAL_LIST_INIT(campaign_mission_pool, list( return for(var/mob/living/carbon/human/faction_member AS in GLOB.alive_human_list_faction[faction]) faction_member.playsound_local(null, 'sound/effects/CIC_order.ogg', 30, 1) - faction_member.play_screen_text("OVERWATCH
" + "[choice.name] asset activated", faction_portrait) + var/portrait = choice.asset_portrait ? choice.asset_portrait : faction_portrait + faction_member.play_screen_text("OVERWATCH
" + "[choice.name] asset activated", portrait) to_chat(faction_member, "[user] has activated the [choice.name] campaign asset.") return TRUE @@ -455,3 +515,14 @@ GLOBAL_LIST_INIT(campaign_mission_pool, list( to_chat(faction_member, "[user] has purchased the [initial(selected_asset.name)] campaign asset.") update_static_data_for_all_viewers() return TRUE + +//overview for campaign gamemode +/datum/action/campaign_overview + name = "Campaign overview" + action_icon_state = "campaign_overview" + +/datum/action/campaign_overview/action_activate() + var/datum/faction_stats/your_faction = GLOB.faction_stats_datums[owner.faction] + if(!your_faction) + return + your_faction.interact(owner) diff --git a/code/datums/gamemodes/campaign/individual_stats.dm b/code/datums/gamemodes/campaign/individual_stats.dm new file mode 100644 index 0000000000000..57ae70628ea08 --- /dev/null +++ b/code/datums/gamemodes/campaign/individual_stats.dm @@ -0,0 +1,424 @@ +#define TAB_LOADOUT "Loadout" +#define TAB_PERKS "Perks" + +/datum/individual_stats + interaction_flags = INTERACT_UI_INTERACT + var/owner_ckey + ///currently occupied mob - if any + var/mob/living/carbon/current_mob + ///Credits. You buy stuff with it + var/currency = 450 + ///List of job types based on faction + var/list/valid_jobs = list() + ///Single list of unlocked perks for easy reference + var/list/unlocked_perks = list() + ///Unlocked perks organised by jobs effected + var/list/list/datum/perk/perks_by_job = list() + ///Unlocked items + var/list/list/datum/loadout_item/unlocked_items = list() + ///List of loadouts by role + var/list/datum/outfit_holder/loadouts = list() + ///The faction associated with these stats + var/faction + ///Currently selected UI category tab + var/selected_tab = TAB_LOADOUT + ///Currently selected UI job tab + var/selected_job + +/datum/individual_stats/New(mob/living/carbon/new_mob, new_faction, new_currency) + . = ..() + RegisterSignal(SSdcs, COMSIG_GLOB_CAMPAIGN_MISSION_ENDED, PROC_REF(post_mission_credits)) + owner_ckey = new_mob.ckey + current_mob = new_mob + faction = new_faction + currency += new_currency + for(var/datum/job/job_type AS in SSticker.mode.valid_job_types) + if(job_type::faction != faction) + continue + valid_jobs += job_type::title + loadouts[job_type::title] = new /datum/outfit_holder(job_type::title) + perks_by_job[job_type::title] = list() + unlocked_items[job_type::title] = list() + +/datum/individual_stats/Destroy(force, ...) + current_mob = null + unlocked_perks = null + perks_by_job = null + unlocked_items = null + return ..() + +///Pay each player additional credits based on individual performance during the mission +/datum/individual_stats/proc/post_mission_credits(datum/source) + SIGNAL_HANDLER + var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[owner_ckey] + give_funds(personal_statistics.get_mission_reward()) + +///Applies cash +/datum/individual_stats/proc/give_funds(amount) + currency += amount + if(!current_mob) + return + to_chat(current_mob, span_warning("You have received a cash bonus of [amount].")) + +///uses some funtokens, returns the amount missing, if insufficient funds +/datum/individual_stats/proc/use_funds(amount) + if(amount > currency) + return amount - currency + currency -= amount + +///Adds a perk if able +/datum/individual_stats/proc/purchase_perk(datum/perk/new_perk, mob/living/user) + . = TRUE + if(!istype(new_perk)) + return FALSE + if(new_perk in unlocked_perks) + to_chat(user, span_warning("Perk already purchased.")) + return FALSE + if(length(new_perk.prereq_perks)) + var/perk_found + for(var/prereq in new_perk.prereq_perks) + perk_found = FALSE + for(var/datum/perk/perk AS in unlocked_perks) + if(perk.type != prereq) + continue + perk_found = TRUE + if(!perk_found) + to_chat(user, span_warning("One or more prerequisites missing for this perk.")) + return FALSE + if(use_funds(new_perk.unlock_cost)) + to_chat(user, span_warning("Insufficient funds for this perk.")) + return FALSE + + new_perk.unlock_bonus(user, src) + unlocked_perks += new_perk + for(var/supported_job in new_perk.jobs_supported) + if(!perks_by_job[supported_job]) + continue + perks_by_job[supported_job] += new_perk + + if(!istype(user)) //we immediately apply the perk where possible + return + if(!(user.job.title in new_perk.jobs_supported)) + return + new_perk.apply_perk(user) + +///Unlocks a loadout item for use +/datum/individual_stats/proc/unlock_loadout_item(item_type, job_type_or_types, mob/user, cost_override, job_req_override = FALSE) + if(!islist(job_type_or_types)) + job_type_or_types = list(job_type_or_types) + var/datum/loadout_item/item = GLOB.campaign_loadout_item_type_list[item_type] + if(!istype(item)) + return FALSE + var/insufficient_credits = use_funds(isnum(cost_override) ? cost_override : item.unlock_cost) + if(insufficient_credits) + to_chat(user, span_warning("Requires [insufficient_credits] more credits.")) + return FALSE + for(var/job_type in job_type_or_types) + if(!job_req_override && !(job_type in item.jobs_supported)) + continue + loadouts[job_type]?.unlock_new_option(item) + return TRUE + +///Adds an item to the unlockable list for a job +/datum/individual_stats/proc/make_available_loadout_item(item_type, job_type_or_types, mob/user, job_req_override = FALSE) + if(!islist(job_type_or_types)) + job_type_or_types = list(job_type_or_types) + var/datum/loadout_item/item = GLOB.campaign_loadout_item_type_list[item_type] + if(!istype(item)) + return FALSE + for(var/job_type in job_type_or_types) + if(!job_req_override && !(job_type in item.jobs_supported)) + continue + loadouts[job_type]?.allow_new_option(item) + return TRUE + +///Adds and equips a loadout item, replacing another +/datum/individual_stats/proc/replace_loadout_option(new_item, removed_item, job_type_or_types, job_req_override = FALSE) + if(!islist(job_type_or_types)) + job_type_or_types = list(job_type_or_types) + var/datum/loadout_item/item = GLOB.campaign_loadout_item_type_list[new_item] + if(!istype(item)) + return FALSE + for(var/job_type in job_type_or_types) + if(!job_req_override && !(job_type in item.jobs_supported)) + continue + loadouts[job_type]?.unlock_new_option(item) + if(loadouts[job_type]?.remove_option(GLOB.campaign_loadout_item_type_list[removed_item])) + loadouts[job_type].attempt_equip_loadout_item(item) + return TRUE + +///Applies all perks to a mob +/datum/individual_stats/proc/apply_perks() + if(!current_mob || QDELETED(current_mob)) + return + for(var/datum/perk/perk AS in perks_by_job[current_mob.job.title]) + perk.apply_perk(current_mob) + +//UI stuff +/datum/individual_stats/ui_assets(mob/user) + return list(get_asset_datum(/datum/asset/spritesheet/campaign/perks), get_asset_datum(/datum/asset/spritesheet/campaign/loadout_items)) + +/datum/individual_stats/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(ui) + return + ui = new(user, src, "IndividualStats") + ui.open() + +/datum/individual_stats/ui_state(mob/user) + if(isobserver(user)) + return GLOB.always_state + return GLOB.conscious_state + +/datum/individual_stats/ui_data(mob/user) + var/datum/game_mode/hvh/campaign/current_mode = SSticker.mode + if(!istype(current_mode)) + CRASH("campaign_mission loaded without campaign game mode") + + var/list/data = list() + var/mob/living/living_user = user + data["current_job"] = istype(living_user) ? living_user.job.title : null + data["currency"] = currency + + if(selected_tab != TAB_LOADOUT) + return data + //This cannot be static data due to the limitations on how frequently static data can be updated, and clicking on loadout options requires a data update. + var/list/equipped_loadouts_data = list() //items currently equipped to ALL job outfits + var/list/available_loadouts_data = list() //all available AND purchasable loadout options + var/list/outfit_cost_data = list() //Current cost of all outfits + + var/datum/outfit_holder/outfit = loadouts[selected_job] + + var/list/outfit_cost_list = list() + outfit_cost_list["job"] = selected_job + outfit_cost_list["outfit_cost"] = outfit.loadout_cost + outfit_cost_data += list(outfit_cost_list) + + for(var/slot in outfit.equipped_things) + var/datum/loadout_item/loadout_item = outfit.equipped_things[slot] + if(!loadout_item) + continue + var/list/equipped_item_ui_data = list() //slot + equipped item data + var/list/current_loadout_item_data = list() //equipped item data + current_loadout_item_data["name"] = loadout_item.name + current_loadout_item_data["job"] = outfit.role + current_loadout_item_data["slot"] = GLOB.inventory_slots_to_string["[loadout_item.item_slot]"] + current_loadout_item_data["type"] = loadout_item.type + current_loadout_item_data["desc"] = loadout_item.desc + current_loadout_item_data["purchase_cost"] = loadout_item.purchase_cost + current_loadout_item_data["unlock_cost"] = loadout_item.unlock_cost + current_loadout_item_data["valid_choice"] = loadout_item.item_checks(outfit) + current_loadout_item_data["icon"] = loadout_item.ui_icon + current_loadout_item_data["quantity"] = loadout_item.quantity + current_loadout_item_data["requirements"] = loadout_item.req_desc + current_loadout_item_data["unlocked"] = TRUE + + equipped_item_ui_data["item_type"] = current_loadout_item_data + equipped_item_ui_data["slot"] = slot + equipped_item_ui_data["slot_text"] = GLOB.inventory_slots_to_string["[slot]"] + + equipped_loadouts_data += list(equipped_item_ui_data) + + for(var/slot in outfit.available_list) + for(var/datum/loadout_item/loadout_item AS in outfit.available_list[slot]) + var/list/available_loadout_item_data = list() + available_loadout_item_data["name"] = loadout_item.name + available_loadout_item_data["job"] = outfit.role + available_loadout_item_data["slot"] = GLOB.inventory_slots_to_string["[loadout_item.item_slot]"] + available_loadout_item_data["type"] = loadout_item.type + available_loadout_item_data["desc"] = loadout_item.desc + available_loadout_item_data["purchase_cost"] = loadout_item.purchase_cost + available_loadout_item_data["unlock_cost"] = loadout_item.unlock_cost + available_loadout_item_data["valid_choice"] = loadout_item.item_checks(outfit) + available_loadout_item_data["icon"] = loadout_item.ui_icon + available_loadout_item_data["quantity"] = loadout_item.quantity + available_loadout_item_data["requirements"] = loadout_item.req_desc + available_loadout_item_data["unlocked"] = TRUE + available_loadouts_data += list(available_loadout_item_data) + + for(var/slot in outfit.purchasable_list) + for(var/datum/loadout_item/loadout_item AS in outfit.purchasable_list[slot]) + var/list/purchasable_loadout_item_data = list() + purchasable_loadout_item_data["name"] = loadout_item.name + purchasable_loadout_item_data["job"] = outfit.role + purchasable_loadout_item_data["slot"] = GLOB.inventory_slots_to_string["[loadout_item.item_slot]"] + purchasable_loadout_item_data["type"] = loadout_item.type + purchasable_loadout_item_data["desc"] = loadout_item.desc + purchasable_loadout_item_data["purchase_cost"] = loadout_item.purchase_cost + purchasable_loadout_item_data["unlock_cost"] = loadout_item.unlock_cost + purchasable_loadout_item_data["valid_choice"] = loadout_item.item_checks(outfit) + purchasable_loadout_item_data["icon"] = loadout_item.ui_icon + purchasable_loadout_item_data["quantity"] = loadout_item.quantity + purchasable_loadout_item_data["requirements"] = loadout_item.req_desc + purchasable_loadout_item_data["unlocked"] = FALSE + available_loadouts_data += list(purchasable_loadout_item_data) + + data["equipped_loadouts_data"] = equipped_loadouts_data + data["available_loadouts_data"] = available_loadouts_data + data["outfit_cost_data"] = outfit_cost_data + + return data + +/datum/individual_stats/ui_static_data(mob/user) + var/datum/game_mode/hvh/campaign/current_mode = SSticker.mode + if(!istype(current_mode)) + CRASH("campaign_mission loaded without campaign game mode") + + var/list/data = list() + + var/ui_theme + switch(faction) + if(FACTION_SOM) + ui_theme = "som" + else + ui_theme = "ntos" + data["ui_theme"] = ui_theme + data["faction"] = faction + data["jobs"] = valid_jobs + + var/list/perks_data = list() + for(var/job in perks_by_job) + for(var/datum/perk/perk AS in GLOB.campaign_perks_by_role[job]) + var/list/perk_data = list() + perk_data["name"] = perk.name + perk_data["job"] = job + perk_data["type"] = perk.type + perk_data["desc"] = perk.desc + perk_data["requirements"] = perk.req_desc + perk_data["cost"] = perk.unlock_cost + perk_data["icon"] = perk.ui_icon + perk_data["currently_active"] = !!(perk in perks_by_job[job]) + perks_data += list(perk_data) + data["perks_data"] = perks_data + + return data + +/datum/individual_stats/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + var/datum/game_mode/hvh/campaign/current_mode = SSticker.mode + if(!istype(current_mode)) + CRASH("campaign_mission loaded without campaign game mode") + + var/mob/living/user = usr + + switch(action) + if("set_selected_tab") + var/new_tab = params["new_selected_tab"] + if(new_tab != TAB_LOADOUT && new_tab != TAB_PERKS) + return + selected_tab = new_tab + user.playsound_local(user, 'sound/effects/menu_click.ogg', 50) + return TRUE + if("set_selected_job") + var/new_job = params["new_selected_job"] + if(!new_job) + return + selected_job = new_job + user.playsound_local(user, 'sound/effects/menu_click.ogg', 50) + return TRUE + if("play_ding") + user.playsound_local(user, 'sound/effects/menu_click.ogg', 50) //just for the consistant experience + return TRUE + if("unlock_perk") + var/unlocked_perk = text2path(params["selected_perk"]) + if(!unlocked_perk) + return + if(!GLOB.campaign_perk_list[unlocked_perk]) + return + var/datum/perk/perk = GLOB.campaign_perk_list[unlocked_perk] + if(!purchase_perk(perk, user)) + return + ui.send_full_update() + user.playsound_local(user, 'sound/effects/menu_click.ogg', 50) + return TRUE + if("equip_item") + var/equipped_item_type = text2path(params["selected_item"]) + if(!equipped_item_type) + return + var/equipped_item_job = params["selected_job"] + if(!equipped_item_job) + return + for(var/datum/loadout_item/item AS in GLOB.campaign_loadout_items_by_role[equipped_item_job]) + if(!istype(item, equipped_item_type)) + continue + loadouts[equipped_item_job].equip_loadout_item(item) + user.playsound_local(user, 'sound/effects/menu_click.ogg', 50) + return TRUE + if("unlock_item") + var/equipped_item_type = text2path(params["unlocked_item"]) + if(!equipped_item_type) + return + var/equipped_item_job = params["selected_job"] + if(!equipped_item_job) + return + if(!unlock_loadout_item(equipped_item_type, equipped_item_job, user)) + return + user.playsound_local(user, 'sound/effects/menu_click.ogg', 50) + return TRUE + if("equip_outfit") + var/job = params["outfit_job"] + if(!job || !loadouts[job]) + return + if(!istype(user) || user.stat) + to_chat(user, span_warning("Must be alive to do this!")) + return + var/obj/item/card/id/user_id = user.get_idcard() + if(!(user_id.id_flags & CAN_BUY_LOADOUT)) + to_chat(user, span_warning("You have already selected a loadout for this mission.")) + return + if(user.job.title != job) + to_chat(user, span_warning("Invalid job. This outfit is for [job].")) + return + if(!is_mainship_level(user.z)) + to_chat(user, span_warning("You can't equip a new loadout in the field!")) + return + if(!loadouts[job].check_full_loadout()) + to_chat(user, span_warning("Invalid loadout.")) + return + var/insufficient_credits = use_funds(loadouts[job].loadout_cost) + if(insufficient_credits) + to_chat(user, span_warning("Requires [insufficient_credits] more credits.")) + return + loadouts[job].equip_loadout(user) + user.playsound_local(user, 'sound/effects/menu_click.ogg', 50) + user_id.id_flags &= ~CAN_BUY_LOADOUT + return TRUE + +//loadout/perk UI for campaign gamemode +/datum/action/campaign_loadout + name = "Loadout menu" + action_icon_state = "individual_stats" + +/datum/action/campaign_loadout/give_action(mob/M) + . = ..() + var/datum/faction_stats/your_faction = GLOB.faction_stats_datums[owner.faction] + if(!your_faction) + return + + var/datum/individual_stats/stats = your_faction.get_player_stats(owner) + if(!stats) + return + stats.current_mob = M + +/datum/action/campaign_loadout/action_activate() + var/datum/faction_stats/your_faction = GLOB.faction_stats_datums[owner.faction] + if(!your_faction) + return + var/datum/individual_stats/stats = your_faction.get_player_stats(owner) + if(!stats) + return + stats.current_mob = owner //taking over ssd's creates a mismatch + //we have to update selected tab/job so we load the correct data for the UI + if(!isliving(owner)) + stats.selected_job = stats.valid_jobs[1] + else + var/mob/living/living_owner = owner + stats.selected_job = living_owner.job.title + stats.selected_tab = TAB_LOADOUT + stats.interact(owner) + +#undef TAB_LOADOUT +#undef TAB_PERKS diff --git a/code/datums/gamemodes/campaign/loadout_items.dm b/code/datums/gamemodes/campaign/loadout_items.dm new file mode 100644 index 0000000000000..44b7748efa7bb --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items.dm @@ -0,0 +1,96 @@ +///Available by default +#define LOADOUT_ITEM_ROUNDSTART_OPTION (1<<0) +///This is the default option for this slot +#define LOADOUT_ITEM_DEFAULT_CHOICE (1<<1) +///Available for unlock by default +#define LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE (1<<2) + +GLOBAL_LIST_INIT(campaign_loadout_slots, list(ITEM_SLOT_OCLOTHING, ITEM_SLOT_ICLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_EYES, ITEM_SLOT_EARS, \ +ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_FEET, ITEM_SLOT_ID, ITEM_SLOT_BELT, ITEM_SLOT_BACK, ITEM_SLOT_L_POCKET, ITEM_SLOT_R_POCKET, ITEM_SLOT_SUITSTORE)) + +//List of all loadout_item datums +GLOBAL_LIST_INIT_TYPED(campaign_loadout_item_type_list, /datum/loadout_item, init_glob_loadout_item_list()) + +/proc/init_glob_loadout_item_list() + . = list() + for(var/type in subtypesof(/datum/loadout_item)) + var/datum/loadout_item/item_type = new type + if(!length(item_type.jobs_supported)) + qdel(item_type) + continue + .[item_type.type] = item_type + +//List of all loadout_item datums by job, excluding ones that must be unlocked //now including those +GLOBAL_LIST_INIT(campaign_loadout_items_by_role, init_campaign_loadout_items_by_role()) + +/proc/init_campaign_loadout_items_by_role() + . = list() + for(var/job in GLOB.campaign_jobs) + .[job] = list() + for(var/i in GLOB.campaign_loadout_item_type_list) + var/datum/loadout_item/option = GLOB.campaign_loadout_item_type_list[i] + if(option.jobs_supported && !(job in option.jobs_supported)) + continue + .[job] += option + +//represents an equipable item +//Are singletons +/datum/loadout_item + ///Item name + var/name + ///Item desc + var/desc + ///Addition desc for special reqs such as black/whitelist + var/req_desc + ///Typepath of the actual item this datum represents + var/obj/item/item_typepath + ///UI icon for this item + var/ui_icon = "default" + ///inventory slot it is intended to go into + var/item_slot + ///Behavior flags for loadout items + var/loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION + ///Cost to unlock this option + var/unlock_cost = 0 + ///Cost to use this option + var/purchase_cost = 0 + ///The amount of this available per mission. -1 for unlimited + var/quantity = -1 + ///Job types that this perk is available to + var/list/jobs_supported + ///assoc list by slot of items required for this to be equipped. Requires only 1 out of the list + var/list/item_whitelist + ///assoc list by slot of items blacklisted for this to be equipped + var/list/item_blacklist + +///Attempts to add an item to a loadout +/datum/loadout_item/proc/item_checks(datum/outfit_holder/outfit_holder) + if(length(item_whitelist) && !whitelist_check(outfit_holder)) + return FALSE + if(length(item_blacklist) && !blacklist_check(outfit_holder)) + return FALSE + return TRUE + +///checks if a loadout has one or more whitelist items +/datum/loadout_item/proc/whitelist_check(datum/outfit_holder/outfit_holder) + for(var/whitelist_item in item_whitelist) + var/type_to_check = outfit_holder.equipped_things["[item_whitelist[whitelist_item]]"]?.item_typepath + if(type_to_check == whitelist_item) + return TRUE + return FALSE + +///Checks if a loadout has any blacklisted items +/datum/loadout_item/proc/blacklist_check(datum/outfit_holder/outfit_holder) + for(var/blacklist_item in item_blacklist) + var/type_to_check = outfit_holder.equipped_things["[item_blacklist[blacklist_item]]"]?.item_typepath + if(type_to_check == blacklist_item) + return FALSE + return TRUE + +///Any post equip things related to this item +/datum/loadout_item/proc/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + return role_post_equip(wearer, loadout) + +///A separate post equip proc for role specific code. Split for more flexible parent overriding +/datum/loadout_item/proc/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + return diff --git a/code/datums/gamemodes/campaign/loadout_items/SOM/back_slot.dm b/code/datums/gamemodes/campaign/loadout_items/SOM/back_slot.dm new file mode 100644 index 0000000000000..ba3dde9517317 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/SOM/back_slot.dm @@ -0,0 +1,110 @@ +/datum/loadout_item/back/som_satchel + name = "Mining satchel" + desc = "A satchel with origins dating back to the mining colonies.. Carries less than a backpack, but items can be drawn instantly." + item_typepath = /obj/item/storage/backpack/satchel/som + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_VETERAN, SOM_STAFF_OFFICER, SOM_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/back/som_combat_pack + name = "Mining rucksack" + desc = "A rucksack with origins dating back to the mining colonies. Has the storage capacity of a backpack but no draw delay." + purchase_cost = 25 + item_typepath = /obj/item/storage/backpack/lightpack/som + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_VETERAN) + +/datum/loadout_item/back/som_combat_pack/free + purchase_cost = 0 + jobs_supported = list(SOM_SQUAD_CORPSMAN, SOM_SQUAD_ENGINEER, SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/back/som_flamer_tank + name = "Flame tank" + desc = "A specialized fuel tank for use with the V-62 incinerator." + req_desc = "Requires a V-62 incinerator." + item_typepath = /obj/item/ammo_magazine/flamer_tank/backtank + jobs_supported = list(SOM_SQUAD_MARINE) + item_whitelist = list(/obj/item/weapon/gun/flamer/som/mag_harness = ITEM_SLOT_SUITSTORE) + +/datum/loadout_item/back/som_flamer_tank/x_fuel + name = "X-fuel tank" + desc = "A specialized fuel tank of ultra thick napthal type X, known for its extreme heat and slow burn rate, as well as it's distinct blue flames. For use with the V-62 incinerator." + item_typepath = /obj/item/ammo_magazine/flamer_tank/backtank/X + purchase_cost = 40 + unlock_cost = 200 + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE + +/datum/loadout_item/back/blinkdrive + name = "Blink drive" + desc = "A portable Bluespace Displacement Drive, otherwise known as a blink drive. \ + Can teleport the user across short distances with a degree of unreliability, with potentially fatal results. \ + Teleporting past 5 tiles, to tiles out of sight or rapid use of the drive add variance to the teleportation destination." + req_desc = "Requires an energy sword or V-21 SMG." + item_typepath = /obj/item/blink_drive + jobs_supported = list(SOM_SQUAD_VETERAN) + quantity = 2 + item_whitelist = list( + /obj/item/weapon/energy/sword/som = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/smg/som/veteran = ITEM_SLOT_SUITSTORE, + ) + +/datum/loadout_item/back/som_shotgun + name = "V-51" + desc = "Equipped with a mag harness, bayonet and undebarrel flashlight. The V-51 is the main shotgun utilised by the Sons of Mars. \ + Semi automatic with great handling and mobility, it is less powerful than the SH-35 used by the TGMC, but makes up for it with a superior rate of fire. \ + Uses 12 gauge shells." + ui_icon = "shotgun" + purchase_cost = 25 + item_typepath = /obj/item/weapon/gun/shotgun/som/standard + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER) + loadout_item_flags = NONE + +/datum/loadout_item/back/som_shotgun/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/shotgun/buckshot, SLOT_R_HAND) + +/datum/loadout_item/back/som_rocket_bag + name = "RPG bag" + desc = "This backpack holds 4 RPGs, in addition to a V-71 RPG launcher. Equipped with radioactive and incendiary warheads, \ + the V-71 is incredibly effective at softening up or flushing out organic targets, making them easy prey to finish off. Has a draw delay." + req_desc = "Requires a suit with a Mithridatius environmental protection module." + ui_icon = "rpg" + purchase_cost = 50 + quantity = 2 + item_typepath = /obj/item/storage/holster/backholster/rpg/som/war_crimes + jobs_supported = list(SOM_SQUAD_VETERAN) + item_whitelist = list(/obj/item/clothing/suit/modular/som/heavy/mithridatius = ITEM_SLOT_OCLOTHING) + +/datum/loadout_item/back/som_heat_rocket_bag + name = "HEAT RPG bag" + desc = "Unlocked for free with the Heavy weapon specialisation perk. This backpack holds 4 high explosive anti armor RPGs, in addition to a V-71 RPG launcher. Deals significant damage against vehicles and mechs, but will also generally devastate human victims in a pinch. \ + Has a draw delay and has poor accuracy against human targets." + ui_icon = "rpg" + unlock_cost = 300 + purchase_cost = 100 + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE + quantity = 2 + item_typepath = /obj/item/storage/holster/backholster/rpg/som/heat + jobs_supported = list(SOM_SQUAD_VETERAN) + +/datum/loadout_item/back/volkite_powerpack + name = "M-70 powerpack" + desc = "A heavy reinforced backpack with an array of ultradensity energy cells, linked to a miniature radioisotope thermoelectric generator for continuous power generation. \ + Used to power the largest man portable volkite weaponry. Click drag cells to the powerpack to recharge." + req_desc = "Requires a VX-42 culverin or VX-33 caliver." + item_typepath = /obj/item/cell/lasgun/volkite/powerpack + jobs_supported = list(SOM_SQUAD_VETERAN) + item_whitelist = list( + /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/culverin/magharness = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/caliver/tacsensor = ITEM_SLOT_SUITSTORE, + ) + +/datum/loadout_item/back/boarding_axe + name = "Boarding axe" + desc = "A SOM boarding axe, a monstrous two handed weapon that inflicts terrible damage even through heavy armor. \ + When wielded it can be used to block as well as attack, and can also be used to force unpowered airlocks open. \ + You'll kill pretty much anything you can hit with this - providing you can get close enough to use it." + ui_icon = "axe" + item_typepath = /obj/item/weapon/twohanded/fireaxe/som + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_VETERAN, SOM_FIELD_COMMANDER) + item_blacklist = list(/obj/item/weapon/twohanded/fireaxe/som = ITEM_SLOT_SUITSTORE) + loadout_item_flags = NONE diff --git a/code/datums/gamemodes/campaign/loadout_items/SOM/belt.dm b/code/datums/gamemodes/campaign/loadout_items/SOM/belt.dm new file mode 100644 index 0000000000000..15c53b6e0201a --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/SOM/belt.dm @@ -0,0 +1,119 @@ +/datum/loadout_item/belt/som_ammo_belt + name = "Ammo belt" + desc = "A belt with origins traced to the M276 ammo belt and some old colony security. Holds 6 normal sized magazines." + item_typepath = /obj/item/storage/belt/marine/som + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_ENGINEER, SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + item_blacklist = list( + /obj/item/weapon/gun/rifle/som_mg/standard = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/twohanded/fireaxe/som = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/flamer/som/mag_harness = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/shotgun/som/standard = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/shotgun/som/support = ITEM_SLOT_SUITSTORE, + ) + +/datum/loadout_item/belt/som_sparepouch + name = "Utility pouch" + desc = "A small, lightweight pouch that can be clipped onto armor or your belt to provide additional storage for miscellaneous gear or box and drum magazines. Made from genuine SOM leather." + item_typepath = /obj/item/storage/belt/sparepouch/som + jobs_supported = list(SOM_SQUAD_MARINE) + +/datum/loadout_item/belt/som_shotgun_mixed + name = "Shotgun shell rig" + desc = "An ammunition belt designed to hold shotgun shells or individual bullets. Made with traditional SOM leather. Loaded full of buckshot and flechette shells." + item_typepath = /obj/item/storage/belt/shotgun/som/mixed + jobs_supported = list(SOM_SQUAD_MARINE) + +/datum/loadout_item/belt/som_shotgun_flechette + name = "Shotgun shell rig" + desc = "An ammunition belt designed to hold shotgun shells or individual bullets. Made with traditional SOM leather. Loaded full of flechette shells." + item_typepath = /obj/item/storage/belt/shotgun/som/flechette + jobs_supported = list(SOM_SQUAD_ENGINEER) + +/datum/loadout_item/belt/som_grenades + name = "Grenade rig" + desc = "A simple harness system available in many configurations. This version is designed to carry bulk quantities of grenades." + ui_icon = "grenade" + item_typepath = /obj/item/storage/belt/grenade/som + jobs_supported = list(SOM_SQUAD_VETERAN) + purchase_cost = 80 + quantity = 2 + +/datum/loadout_item/belt/som_grenades/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/som, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/som, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/satrapine, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/satrapine, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_BELT) + +/datum/loadout_item/belt/som_burst_pistol + name = "V-11e" + desc = "The standard sidearm used by the Sons of Mars. A reliable and simple weapon that is often seen on the export market on the outer colonies. \ + Typically chambered in 9mm armor piercing rounds. This one is configures for burstfire, and loaded with extended mags." + ui_icon = "v11" + item_typepath = /obj/item/storage/holster/belt/pistol/m4a3/som + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_VETERAN) + +/datum/loadout_item/belt/som_burst_pistol/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/som/extended, SLOT_IN_HOLSTER) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/som/extended, SLOT_IN_HOLSTER) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/som/extended, SLOT_IN_HOLSTER) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/som/extended, SLOT_IN_HOLSTER) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/som/extended, SLOT_IN_HOLSTER) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/som/extended, SLOT_IN_HOLSTER) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/som/burst(wearer), SLOT_IN_HOLSTER) + +/datum/loadout_item/belt/sawn_off + name = "Sawn-off shotgun" + desc = "A double barreled shotgun whose barrel has been artificially shortened to reduce range for further CQC potiential. Extremely powerful at close range, but is very difficult to handle." + req_desc = "Requires a VX-42 culverin or VX-33 caliver with powerpack." + ui_icon = "sshotgun" + item_typepath = /obj/item/weapon/gun/shotgun/double/sawn + jobs_supported = list(SOM_SQUAD_VETERAN) + item_whitelist = list( + /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/culverin/magharness = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/caliver/tacsensor = ITEM_SLOT_SUITSTORE, + ) + +/datum/loadout_item/belt/energy_sword + name = "Energy sword" + desc = "A SOM energy sword. Designed to cut through armored plate. An uncommon primary weapon, typically seen wielded by so called 'blink assault' troops. \ + Can be used defensively to great effect, mainly against opponents trying to strike you in melee, although some users report varying levels of success in blocking ranged projectiles." + ui_icon = "machete" + item_typepath = /obj/item/weapon/energy/sword/som + loadout_item_flags = NONE + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_ENGINEER, SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER) + +/datum/loadout_item/belt/som_lifesaver + name = "S17 lifesaver bag" + desc = "A belt with heavy origins from the belt used by paramedics and doctors in the old mining colonies." + ui_icon = "medkit" + item_typepath = /obj/item/storage/belt/lifesaver/som/quick + jobs_supported = list(SOM_SQUAD_CORPSMAN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/belt/som_officer_pistol + name = "VX-12 Serpenta" + desc = "The 'serpenta' is a volkite energy pistol typically seen in the hands of SOM officers and some NCOs, and is quite dangerous for it's size. \ + Comes in a holster that fits on your waist or armor." + ui_icon = "pistol" + item_typepath = /obj/item/storage/holster/belt/pistol/m4a3/som/serpenta + jobs_supported = list(SOM_SQUAD_LEADER, SOM_STAFF_OFFICER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + item_blacklist = list(/obj/item/storage/holster/belt/pistol/m4a3/som/serpenta = ITEM_SLOT_SUITSTORE) + +/datum/loadout_item/belt/som_officer_pistol_custom + name = "VX-12c Serpenta" + desc = "The 'serpenta' is a volkite energy pistol typically seen in the hands of SOM officers and some NCOs, and is quite dangerous for it's size. \ + This particular weapon appears to be a custom model with improved performance. Comes in a fancy holster that fits on your waist or armor." + ui_icon = "pistol" + item_typepath = /obj/item/storage/holster/belt/pistol/m4a3/som/fancy/fieldcommander + jobs_supported = list(SOM_FIELD_COMMANDER, SOM_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + item_blacklist = list(/obj/item/storage/holster/belt/pistol/m4a3/som/fancy/fieldcommander = ITEM_SLOT_SUITSTORE) diff --git a/code/datums/gamemodes/campaign/loadout_items/SOM/ears.dm b/code/datums/gamemodes/campaign/loadout_items/SOM/ears.dm new file mode 100644 index 0000000000000..ae9a3c46e3614 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/SOM/ears.dm @@ -0,0 +1,13 @@ +/datum/loadout_item/ears/som_standard + name = "Standard headset" + desc = "A headset, allowing for communication with your team and access to the tactical minimap. You're in for a bad time if you don't use this." + item_typepath = /obj/item/radio/headset/mainship/som + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_CORPSMAN, SOM_SQUAD_ENGINEER, SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/ears/som_command + name = "Command headset" + desc = "A command headset, allowing for communication with all squads and access to the tactical minimap. You're in for a bad time if you don't use this." + item_typepath = /obj/item/radio/headset/mainship/som/command + jobs_supported = list(SOM_FIELD_COMMANDER, SOM_STAFF_OFFICER, SOM_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE diff --git a/code/datums/gamemodes/campaign/loadout_items/SOM/feet.dm b/code/datums/gamemodes/campaign/loadout_items/SOM/feet.dm new file mode 100644 index 0000000000000..07e24d77b20e2 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/SOM/feet.dm @@ -0,0 +1,13 @@ +/datum/loadout_item/feet/som_boots + name = "Combat shoes" + desc = "Shoes with origins dating back to the old mining colonies. These were made for more than just walking." + item_typepath = /obj/item/clothing/shoes/marine/som/knife + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_CORPSMAN, SOM_SQUAD_ENGINEER, SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/feet/som_officer + name = "officer's boots" + desc = "A shiny pair of boots, normally seen on the feet of SOM officers." + item_typepath = /obj/item/clothing/shoes/marinechief/som + jobs_supported = list(SOM_STAFF_OFFICER, SOM_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE diff --git a/code/datums/gamemodes/campaign/loadout_items/SOM/gloves.dm b/code/datums/gamemodes/campaign/loadout_items/SOM/gloves.dm new file mode 100644 index 0000000000000..508e26911656f --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/SOM/gloves.dm @@ -0,0 +1,28 @@ +/datum/loadout_item/gloves/som_gloves + name = "SOM gloves" + desc = "Gloves with origins dating back to the old mining colonies, they look pretty tough." + item_typepath = /obj/item/clothing/gloves/marine/som + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_CORPSMAN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/gloves/som_veteran_gloves + name = "Veteran gloves" + desc = "Gloves with origins dating back to the old mining colonies. These ones seem tougher than normal." + item_typepath = /obj/item/clothing/gloves/marine/som/veteran + jobs_supported = list(SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/gloves/som_insulated + name = "Insulated gloves" + desc = "Gloves with origins dating back to the old mining colonies. These ones appear to have an electrically insulating layer built into them." + item_typepath = /obj/item/clothing/gloves/marine/som/insulated + jobs_supported = list(SOM_SQUAD_ENGINEER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/gloves/som_officer_gloves + name = "Officer gloves" + desc = "Black gloves commonly worn by SOM officers." + item_typepath = /obj/item/clothing/gloves/marine/som/officer + jobs_supported = list(SOM_FIELD_COMMANDER, SOM_STAFF_OFFICER, SOM_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + diff --git a/code/datums/gamemodes/campaign/loadout_items/SOM/head.dm b/code/datums/gamemodes/campaign/loadout_items/SOM/head.dm new file mode 100644 index 0000000000000..3b69a4d64855a --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/SOM/head.dm @@ -0,0 +1,70 @@ +/datum/loadout_item/helmet/som_standard + name = "Infantry helmet" + desc = "The standard combat helmet worn by SOM combat troops. Made using advanced polymers to provide very effective protection without compromising visibility." + item_typepath = /obj/item/clothing/head/modular/som + jobs_supported = list(SOM_SQUAD_MARINE) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/helmet/som_standard/medic + jobs_supported = list(SOM_SQUAD_CORPSMAN) + +/datum/loadout_item/helmet/som_standard/medic/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/russian_red, SLOT_IN_HEAD) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/russian_red, SLOT_IN_HEAD) + +/datum/loadout_item/helmet/som_veteran + name = "Veteran helmet" + desc = "The standard combat helmet worn by SOM combat specialists. State of the art materials provides more protection for more valuable brains." + item_typepath = /obj/item/clothing/head/modular/som/veteran + jobs_supported = list(SOM_SQUAD_VETERAN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/helmet/gorgon + name = "Gorgon helmet" + desc = "Made for use with Gorgon pattern assault armor, providing superior protection. Typically seen on SOM leaders or their most elite combat units." + item_typepath = /obj/item/clothing/head/modular/som/leader + jobs_supported = list(SOM_SQUAD_LEADER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/helmet/gorgon/fc + name = "Gorgon helmet" + desc = "Made for use with Gorgon pattern assault armor, providing superior protection. This one has gold markings indicating it belongs to a high ranking field officer." + item_typepath = /obj/item/clothing/head/modular/som/leader/officer + jobs_supported = list(SOM_FIELD_COMMANDER) + +/datum/loadout_item/helmet/som_surt + name = "Hades Helmet" + desc = "A standard combat helmet with a Hades fireproof module." + req_desc = "Requires a suit with a Hades module." + item_typepath = /obj/item/clothing/head/modular/som/hades + jobs_supported = list(SOM_SQUAD_MARINE) + item_whitelist = list(/obj/item/clothing/suit/modular/som/heavy/pyro = ITEM_SLOT_OCLOTHING) + +/datum/loadout_item/helmet/som_tyr + name = "Lorica Helmet" + desc = "A bulky helmet paired with the 'Lorica' armor module, designed for outstanding protection at the cost of significant weight and reduced flexibility. \ + Substantial additional armor improves protection against all damage." + req_desc = "Requires a suit with a Lorica module." + ui_icon = "lorica" + item_typepath = /obj/item/clothing/head/modular/som/lorica + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_VETERAN) + item_whitelist = list(/obj/item/clothing/suit/modular/som/heavy/lorica = ITEM_SLOT_OCLOTHING) + +/datum/loadout_item/helmet/som_mimir + name = "Biohazard helmet" + desc = "A standard combat helmet with a Mithridatius 'Mith' environmental protection module." + req_desc = "Requires a suit with a Mithridatius environmental protection module." + item_typepath = /obj/item/clothing/head/modular/som/bio + jobs_supported = list(SOM_SQUAD_VETERAN) + item_whitelist = list(/obj/item/clothing/suit/modular/som/heavy/mithridatius = ITEM_SLOT_OCLOTHING) + +/datum/loadout_item/helmet/som_engineer + name = "Engineer helmet" + desc = "A specialised helmet designed for use by combat engineers. Its main feature being an integrated welding mask." + item_typepath = /obj/item/clothing/head/modular/som/engineer + jobs_supported = list(SOM_SQUAD_ENGINEER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/helmet/som_engineer/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_HEAD) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_HEAD) diff --git a/code/datums/gamemodes/campaign/loadout_items/SOM/pockets.dm b/code/datums/gamemodes/campaign/loadout_items/SOM/pockets.dm new file mode 100644 index 0000000000000..e19db1484355a --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/SOM/pockets.dm @@ -0,0 +1,205 @@ +/datum/loadout_item/r_pocket/som_standard_first_aid + name = "First aid pouch" + desc = "Standard SOM first-aid pouch. Contains a basic set of medical supplies." + ui_icon = "medkit" + item_typepath = /obj/item/storage/pouch/firstaid/som/combat_patrol + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_VETERAN) + +/datum/loadout_item/r_pocket/som_standard_first_aid/standard_improved + desc = "Standard SOM first-aid pouch. Contains a improved set of medical supplies." + item_typepath = /obj/item/storage/pouch/firstaid/som/combat_patrol_leader + loadout_item_flags = null + +/datum/loadout_item/r_pocket/som_standard_first_aid/improved + desc = "Standard SOM first-aid pouch. Contains a improved set of medical supplies." + item_typepath = /obj/item/storage/pouch/firstaid/som/combat_patrol_leader + jobs_supported = list(SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER) + +/datum/loadout_item/r_pocket/som_support_grenades + name = "Support nades" + desc = "A pouch carrying a set of six standard support grenades. Includes smoke grenades of both lethal and nonlethal varieties, as well as stun grenades." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/grenade/som/combat_patrol + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_CORPSMAN, SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/r_pocket/som_standard_grenades + name = "Standard nades" + desc = "A pouch carrying a set of six standard offensive grenades. Contains HE and incendiary grenades." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/grenade/som/standard + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_CORPSMAN, SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER) + +/datum/loadout_item/r_pocket/war_crime_grenades + name = "Warcrime nades" + desc = "A pouch carrying a set of rad and satrapine grenades. Extremely hazardous." + ui_icon = "grenade" + req_desc = "Requires a suit with a Mithridatius environmental protection module." + item_typepath = /obj/item/storage/pouch/grenade/som + jobs_supported = list(SOM_SQUAD_VETERAN) + item_whitelist = list(/obj/item/clothing/suit/modular/som/heavy/mithridatius = ITEM_SLOT_OCLOTHING) + +/datum/loadout_item/r_pocket/war_crime_grenades/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/satrapine, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/satrapine, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/satrapine, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/rad, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/rad, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/rad, SLOT_IN_R_POUCH) + +/datum/loadout_item/r_pocket/som_shotgun + name = "Buckshot shells" + desc = "A pouch specialized for holding shotgun ammo. Contains buckshot shells." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/shotgun/som + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER) + +/datum/loadout_item/r_pocket/som_shotgun/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/buckshot, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/buckshot, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/buckshot, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/buckshot, SLOT_IN_R_POUCH) + +/datum/loadout_item/r_pocket/som_construction + name = "Construction pouch" + desc = "A pouch containing an assortment of construction supplies. Allows for the rapid establishment of fortified positions." + ui_icon = "materials" + item_typepath = /obj/item/storage/pouch/construction/som + jobs_supported = list(SOM_SQUAD_MARINE) + +/datum/loadout_item/r_pocket/som_construction/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/tool/shovel/etool, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/stack/sandbags_empty/half, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/stack/sandbags/large_stack, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/stack/barbed_wire/full, SLOT_IN_R_POUCH) + +/datum/loadout_item/r_pocket/som_magazine + name = "Mag pouch-P" + desc = "A pouch containing three ammo magazines. Will contain a primary ammo type where applicable." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/magazine/large/som + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_CORPSMAN, SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER) + item_blacklist = list( + /obj/item/weapon/gun/rifle/som_mg/standard = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/twohanded/fireaxe/som = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/flamer/som/mag_harness = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/shotgun/som/standard = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/shotgun/som/support = ITEM_SLOT_SUITSTORE, + ) + +/datum/loadout_item/r_pocket/som_tools + name = "Tool pouch" + desc = "It's designed to hold maintenance tools - screwdriver, wrench, cable coil, etc. It also has a hook for an entrenching tool." + ui_icon = "construction" + item_typepath = /obj/item/storage/pouch/tools/som/full + jobs_supported = list(SOM_SQUAD_ENGINEER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/r_pocket/som_general + name = "General pouch" + desc = "A general purpose pouch used to carry small items." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/general/som + jobs_supported = list(SOM_STAFF_OFFICER, SOM_COMMANDER) + +//l_pocket +/datum/loadout_item/l_pocket/som_standard_first_aid + name = "First aid pouch" + desc = "Standard SOM first-aid pouch. Contains a basic set of medical supplies." + ui_icon = "medkit" + item_typepath = /obj/item/storage/pouch/firstaid/som/combat_patrol + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_ENGINEER, SOM_SQUAD_VETERAN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/l_pocket/som_standard_first_aid/standard_improved + desc = "Standard SOM first-aid pouch. Contains a improved set of medical supplies." + item_typepath = /obj/item/storage/pouch/firstaid/som/combat_patrol_leader + loadout_item_flags = null + +/datum/loadout_item/l_pocket/som_standard_first_aid/improved + desc = "Standard SOM first-aid pouch. Contains a improved set of medical supplies." + item_typepath = /obj/item/storage/pouch/firstaid/som/combat_patrol_leader + jobs_supported = list(SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/l_pocket/som_support_grenades + name = "Support nades" + desc = "A pouch carrying a set of six standard support grenades. Includes smoke grenades of both lethal and nonlethal varieties, as well as stun grenades." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/grenade/som/combat_patrol + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_CORPSMAN, SOM_SQUAD_ENGINEER, SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER) + +/datum/loadout_item/l_pocket/som_standard_grenades + name = "Standard nades" + desc = "A pouch carrying a set of six standard offensive grenades. Contains HE and incendiary grenades." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/grenade/som/standard + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_CORPSMAN, SOM_SQUAD_ENGINEER, SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER) + +/datum/loadout_item/l_pocket/war_crime_grenades + name = "Warcrime nades" + desc = "A pouch carrying a set of rad and satrapine grenades. Extremely hazardous." + ui_icon = "grenade" + req_desc = "Requires a suit with a Mithridatius environmental protection module." + item_typepath = /obj/item/storage/pouch/grenade/som + jobs_supported = list(SOM_SQUAD_VETERAN) + item_whitelist = list(/obj/item/clothing/suit/modular/som/heavy/mithridatius = ITEM_SLOT_OCLOTHING) + +/datum/loadout_item/l_pocket/war_crime_grenades/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/satrapine, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/satrapine, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/satrapine, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/rad, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/rad, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/rad, SLOT_IN_L_POUCH) + +/datum/loadout_item/l_pocket/som_shotgun + name = "Flechette shells" + desc = "A pouch specialized for holding shotgun ammo. Contains Flechette shells." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/shotgun/som + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_CORPSMAN, SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER) + +/datum/loadout_item/l_pocket/som_shotgun/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/flechette, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/flechette, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/flechette, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/flechette, SLOT_IN_L_POUCH) + +/datum/loadout_item/l_pocket/som_construction + name = "Construction pouch" + desc = "A pouch containing an assortment of construction supplies. Allows for the rapid establishment of fortified positions." + ui_icon = "materials" + item_typepath = /obj/item/storage/pouch/construction/som + jobs_supported = list(SOM_SQUAD_MARINE) + +/datum/loadout_item/l_pocket/som_construction/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/tool/shovel/etool, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/stack/sandbags_empty/half, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/stack/sandbags/large_stack, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/stack/barbed_wire/full, SLOT_IN_L_POUCH) + +/datum/loadout_item/l_pocket/som_magazine + name = "Mag pouch-S" + desc = "A pouch containing three ammo magazines. Will contain a secondary ammo type where applicable." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/magazine/large/som + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_ENGINEER, SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER) + item_blacklist = list( + /obj/item/weapon/gun/rifle/som_mg/standard = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/twohanded/fireaxe/som = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/flamer/som/mag_harness = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/shotgun/som/standard = ITEM_SLOT_SUITSTORE, + ) + + +/datum/loadout_item/l_pocket/som_magazine/medic + jobs_supported = list(SOM_SQUAD_CORPSMAN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/l_pocket/som_general + name = "General pouch" + desc = "A general purpose pouch used to carry small items." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/general/som + jobs_supported = list(SOM_STAFF_OFFICER, SOM_COMMANDER) diff --git a/code/datums/gamemodes/campaign/loadout_items/SOM/suit.dm b/code/datums/gamemodes/campaign/loadout_items/SOM/suit.dm new file mode 100644 index 0000000000000..2a7519abb9b1a --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/SOM/suit.dm @@ -0,0 +1,195 @@ +/datum/loadout_item/suit_slot/som_light_shield + name = "L Aegis armor" + desc = "M-11 scout armor with a Aegis shield module. Provides excellent mobility but lower protection." + ui_icon = "light_armour_shield" + item_typepath = /obj/item/clothing/suit/modular/som/light/shield + jobs_supported = list(SOM_SQUAD_MARINE) + +/datum/loadout_item/suit_slot/som_light_shield/veteran + jobs_supported = list(SOM_SQUAD_VETERAN) + req_desc = "Requires a blink drive." + item_whitelist = list(/obj/item/blink_drive = ITEM_SLOT_BACK) + +/datum/loadout_item/suit_slot/som_light_shield/overclocked + desc = "M-11 scout armor with a Aegis shield module. Provides excellent mobility but lower protection. The shield module has been overclocked for improved performance." + item_typepath = /obj/item/clothing/suit/modular/som/light/shield_overclocked + jobs_supported = list(SOM_SQUAD_MARINE) + loadout_item_flags = null + +/datum/loadout_item/suit_slot/som_light_shield/overclocked/medic + item_typepath = /obj/item/clothing/suit/modular/som/light/shield_overclocked/medic + jobs_supported = list(SOM_SQUAD_CORPSMAN) + +/datum/loadout_item/suit_slot/som_light_shield/overclocked/medic/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/defibrillator, SLOT_IN_SUIT) + +/datum/loadout_item/suit_slot/som_light_shield/overclocked/engineer + item_typepath = /obj/item/clothing/suit/modular/som/light/shield_overclocked/engineer + jobs_supported = list(SOM_SQUAD_ENGINEER) + +/datum/loadout_item/suit_slot/som_light_shield/overclocked/engineer/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/circuitboard/apc, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/cell/high, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/stack/sheet/plasteel/medium_stack, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/stack/barbed_wire/half_stack, SLOT_IN_SUIT) + +/datum/loadout_item/suit_slot/som_light_shield/overclocked/veteran + jobs_supported = list(SOM_SQUAD_VETERAN) + req_desc = "Requires a blink drive." + item_whitelist = list(/obj/item/blink_drive = ITEM_SLOT_BACK) + +/datum/loadout_item/suit_slot/som_medium_shield + name = "M Aegis armor" + desc = "M-21 battle armor with a Aegis shield module. Provides balanced mobility and protection." + ui_icon = "medium_armour_shield" + item_typepath = /obj/item/clothing/suit/modular/som/shield + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_slot/som_medium_shield/overclocked + desc = "M-21 battle armor with a Aegis shield module. Provides balanced mobility and protection. The shield module has been overclocked for improved performance." + item_typepath = /obj/item/clothing/suit/modular/som/shield_overclocked + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER) + loadout_item_flags = null + +/datum/loadout_item/suit_slot/som_medium_shield/overclocked/medic + item_typepath = /obj/item/clothing/suit/modular/som/shield_overclocked/medic + jobs_supported = list(SOM_SQUAD_CORPSMAN) + +/datum/loadout_item/suit_slot/som_medium_shield/overclocked/medic/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/defibrillator, SLOT_IN_SUIT) + +/datum/loadout_item/suit_slot/som_medium_shield/overclocked/engineer + item_typepath = /obj/item/clothing/suit/modular/som/shield_overclocked/engineer + jobs_supported = list(SOM_SQUAD_ENGINEER) + +/datum/loadout_item/suit_slot/som_medium_shield/overclocked/engineer/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/circuitboard/apc, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/cell/high, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/stack/sheet/plasteel/medium_stack, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/stack/barbed_wire/half_stack, SLOT_IN_SUIT) + +/datum/loadout_item/suit_slot/som_heavy_shield + name = "H Aegis armor" + desc = "M-31 combat armor with a Aegis shield module. Provides excellent protection but lower mobility." + ui_icon = "heavy_armour_shield" + item_typepath = /obj/item/clothing/suit/modular/som/heavy/shield + jobs_supported = list(SOM_SQUAD_VETERAN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_slot/som_heavy_shield/overclocked + desc = "M-31 combat armor with a Aegis shield module. Provides excellent protection but lower mobility. The shield module has been overclocked for improved performance." + item_typepath = /obj/item/clothing/suit/modular/som/heavy/shield_overclocked + jobs_supported = list(SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER) + loadout_item_flags = null + +/datum/loadout_item/suit_slot/som_heavy_shield/breacher + jobs_supported = list(SOM_SQUAD_MARINE) + req_desc = "Requires a V-21 and boarding shield." + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION + item_whitelist = list( + /obj/item/weapon/gun/smg/som/one_handed = ITEM_SLOT_SUITSTORE, + ) + +/datum/loadout_item/suit_slot/som_heavy_shield/breacher/overclocked + desc = "M-31 combat armor with a Aegis shield module. Provides excellent protection but lower mobility. The shield module has been overclocked for improved performance." + item_typepath = /obj/item/clothing/suit/modular/som/heavy/shield_overclocked + loadout_item_flags = null + +/datum/loadout_item/suit_slot/som_heavy_surt + name = "H Hades armor" + desc = "M-31 combat armor with a Hades fireproof module. Provides excellent protection and almost total fire immunity, but has poor mobility." + ui_icon = "heavy_armour" + req_desc = "Requires a V-62 incinerator." + item_typepath = /obj/item/clothing/suit/modular/som/heavy/pyro + jobs_supported = list(SOM_SQUAD_MARINE) + item_whitelist = list(/obj/item/weapon/gun/flamer/som/mag_harness = ITEM_SLOT_SUITSTORE) + +/datum/loadout_item/suit_slot/som_heavy_tyr + name = "H Lorica armor" + desc = "M-31 combat armor with a Lorica extra armor module. Provides incredible protection at the cost of further reduced mobility." + ui_icon = "lorica" + req_desc = "Requires a boarding axe primary weapon." + item_typepath = /obj/item/clothing/suit/modular/som/heavy/lorica + jobs_supported = list(SOM_SQUAD_MARINE) + item_whitelist = list( + /obj/item/weapon/twohanded/fireaxe/som = ITEM_SLOT_SUITSTORE, + ) + +/datum/loadout_item/suit_slot/som_heavy_tyr/veteran + req_desc = "Requires a VX-32 charger and boarding shield." + jobs_supported = list(SOM_SQUAD_VETERAN) + item_whitelist = list(/obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/charger/somvet = ITEM_SLOT_SUITSTORE) + +/datum/loadout_item/suit_slot/gorgon + name = "Gorgon armor" + desc = "M-35 'Gorgon' armor with integrated Apollo automedical module. Provides outstanding protection without severely limiting mobility. \ + Typically seen on SOM leaders or their most elite combat units due to the significant construction and maintenance requirements." + ui_icon = "gorgon" + item_typepath = /obj/item/clothing/suit/modular/som/heavy/leader/valk + jobs_supported = list(SOM_SQUAD_LEADER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_slot/gorgon/fc + name = "Gorgon armor" + desc = "M-35 'Gorgon' armor with integrated Apollo automedical module. Provides outstanding protection without severely limiting mobility. \ + Typically seen on SOM leaders or their most elite combat units due to the significant construction and maintenance requirements. \ + The gold markings on this one signify it is worn by a high ranking field officer" + item_typepath = /obj/item/clothing/suit/modular/som/heavy/leader/officer + jobs_supported = list(SOM_FIELD_COMMANDER) + +/datum/loadout_item/suit_slot/som_heavy_mimir + name = "H Mith armor" + desc = "M-31 combat armor with a Mithridatius 'Mith' environmental protection module. Provides excellent armor and total immunity to chemical attacks, and improved radiological protection. Has lower mobility." + req_desc = "Requires a helmet with a Mithridatius environmental protection module." + ui_icon = "heavy_armour" + item_typepath = /obj/item/clothing/suit/modular/som/heavy/mithridatius + jobs_supported = list(SOM_SQUAD_VETERAN) + item_whitelist = list(/obj/item/clothing/head/modular/som/bio = ITEM_SLOT_HEAD) + purchase_cost = 75 + quantity = 4 + +//engineer +/datum/loadout_item/suit_slot/som_engineer + name = "M armor" + desc = "M-21 battle armor with engineering storage. Provides balanced armor and mobility." + ui_icon = "medium_armour" + item_typepath = /obj/item/clothing/suit/modular/som/engineer + jobs_supported = list(SOM_SQUAD_ENGINEER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_slot/som_engineer/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/circuitboard/apc, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/cell/high, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/stack/sheet/plasteel/medium_stack, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/stack/barbed_wire/half_stack, SLOT_IN_SUIT) + +/datum/loadout_item/suit_slot/som_engineer/light + name = "L armor" + desc = "M-11 scout armor with engineering storage. Provides excellent mobility but lower protection." + ui_icon = "light_armour" + item_typepath = /obj/item/clothing/suit/modular/som/light/engineer + +//medic +/datum/loadout_item/suit_slot/som_medic + name = "M armor" + desc = "M-21 battle armor with medical storage. Provides balanced armor and mobility." + ui_icon = "medium_armour" + item_typepath = /obj/item/clothing/suit/modular/som/medic + jobs_supported = list(SOM_SQUAD_CORPSMAN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_slot/som_medic/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/defibrillator, SLOT_IN_SUIT) + +/datum/loadout_item/suit_slot/som_medic/light + name = "L armor" + desc = "M-11 scout armor with medical storage. Provides excellent mobility but lower protection." + ui_icon = "light_armour" + item_typepath = /obj/item/clothing/suit/modular/som/light/medic diff --git a/code/datums/gamemodes/campaign/loadout_items/SOM/suit_storage/engineer.dm b/code/datums/gamemodes/campaign/loadout_items/SOM/suit_storage/engineer.dm new file mode 100644 index 0000000000000..eb0b672426edd --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/SOM/suit_storage/engineer.dm @@ -0,0 +1,204 @@ +/datum/loadout_item/suit_store/main_gun/som_engineer + jobs_supported = list(SOM_SQUAD_ENGINEER) + +/datum/loadout_item/suit_store/main_gun/som_engineer/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/satrapine, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_engineer/standard_rifle + name = "V-31" + desc = "Equipped with a red dot sight, extended barrel, vertical grip and integrated micro rail launcher. The V-31 is the principal ballistic weapon for the SOM. \ + It has good mobility and handling and a good rate of fire, but tends to favour closer range fighting compared to many TGMC equivilents. \ + The rail launcher electromagnetically launches a variety of 10 gauge airbursting grenades. Extremely effective when used correctly, their fixed fuse time makes them entirely ineffective at very close or far ranges. \ + Managing engagement range is thus vital for maximising the effectiveness of this weapon. \ + Uses 10x24mm caseless ammunition and 10 gauge micro grenades." + ui_icon = "ballistic" + item_typepath = /obj/item/weapon/gun/rifle/som/standard + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_store/main_gun/som_engineer/standard_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/assembly/signaler, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/cope, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/dylovene, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/stack/cable_coil, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_engineer/standard_rifle/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/dragonbreath, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/cluster, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/cluster, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/satrapine, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_engineer/standard_rifle/enhanced + name = "V-31+" + desc = "Equipped with a red dot sight, extended barrel, vertical grip and integrated micro rail launcher. The V-31 is the principal ballistic weapon for the SOM. \ + It has good mobility and handling and a good rate of fire, but tends to favour closer range fighting compared to many TGMC equivilents. \ + The rail launcher electromagnetically launches a variety of 10 gauge airbursting grenades. Extremely effective when used correctly, their fixed fuse time makes them entirely ineffective at very close or far ranges. \ + Managing engagement range is thus vital for maximising the effectiveness of this weapon. \ + Uses a mix of standard and AP 10x24mm caseless ammunition, and 10 gauge micro grenades." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/rifle/som/ap + +/datum/loadout_item/suit_store/main_gun/som_engineer/mpi + name = "MPi-KM" + desc = "Equipped with a mag harness and laser sight. The MPi-KM is a modern reproduction based off several variants of kalashnikov type rifles used during the original Martian rebellion. \ + These weapons were already ancient at that time, and their continued use by the SOM speaks more to their cultural legacy than any tactical benefits. \ + Despite having relatively poor mobility and handling, it never the less has fearsome firepower and good capacity, ensuring it stays a relevant weapon choice for the SOM. Uses 7.62x39mm ammunition." + ui_icon = "ak47" + item_typepath = /obj/item/weapon/gun/rifle/mpi_km/black/magharness + +/datum/loadout_item/suit_store/main_gun/som_engineer/mpi/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/assembly/signaler, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/cope, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/dylovene, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/stack/cable_coil, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_engineer/carbine + name = "V-34" + desc = "Equipped with a red dot sight and foldable stock. The V-34 is a modern redesign of an ancient weapon that saw extensive use in the Martian uprising. \ + It combines good mobility and managable handling with fearsome stopping power and a tremendous rate of fire, making the V-34 an exceptionally deadly weapon at close range. \ + With poor falloff and accuracy, it is a poor weapon outside of close range, and its mobility lacks compared to some other close range weapons like the V-21. \ + Uses 7.62x39mm ammunition." + ui_icon = "v34" + item_typepath = /obj/item/weapon/gun/rifle/som_carbine/black/standard + +/datum/loadout_item/suit_store/main_gun/som_engineer/carbine/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/assembly/signaler, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/cope, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/dylovene, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/stack/cable_coil, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_engineer/smg + name = "V-21" + desc = "Equipped with a mag harness, recoil compensator and vertical grip. The V-21 is the principal submachinegun used by the Sons of Mars, with a variable rate of fire. \ + Has outstanding mobility and handling and can be comfortably fired one handed on its lower fire rate mode. \ + When set to its higher rate of fire, it unleashes a staggering torrent of firepower, but is difficult to control even two handed, and quickly loses effectiveness at range. \ + At close range however, it will quickly obliterate most targets - as long as you don't run out of ammo. \ + It uses 10x20mm caseless rounds." + ui_icon = "smg" + item_typepath = /obj/item/weapon/gun/smg/som/support + +/datum/loadout_item/suit_store/main_gun/som_engineer/smg/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/assembly/signaler, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/cope, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/dylovene, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/stack/cable_coil, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_engineer/smg/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/satrapine, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_engineer/smg/enhanced + name = "V-21+" + desc = "Equipped with a mag harness, recoil compensator and vertical grip. The V-21 is the principal submachinegun used by the Sons of Mars, with a variable rate of fire. \ + Has outstanding mobility and handling and can be comfortably fired one handed on its lower fire rate mode. \ + When set to its higher rate of fire, it unleashes a staggering torrent of firepower, but is difficult to control even two handed, and quickly loses effectiveness at range. \ + At close range however, it will quickly obliterate most targets - as long as you don't run out of ammo. \ + Uses a mix of standard and AP 10x20mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/smg/som/ap + +/datum/loadout_item/suit_store/main_gun/som_engineer/flechette_shotgun + name = "V-51" + desc = "Equipped with a mag harness and bayonet. The V-51 is the main shotgun utilised by the Sons of Mars. \ + Semi automatic with great handling and mobility, it is less powerful than the SH-35 used by the TGMC, but makes up for it with a superior rate of fire. \ + Uses 12 gauge shells." + ui_icon = "shotgun" + item_typepath = /obj/item/weapon/gun/shotgun/som/support + +/datum/loadout_item/suit_store/main_gun/som_engineer/flechette_shotgun/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/assembly/signaler, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/buckshot, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/buckshot, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/cope, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/dylovene, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/stack/cable_coil, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_engineer/flechette_shotgun/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/satrapine, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_engineer/volkite_charger + name = "VX-32 charger" + desc = "Unlocked for free with the Advanced rifle training perk. Equipped with a red dot sight and laser sight. The VX-32 is a sophisticated energy weapon capable of explosively deflagrated organic targets, horrifically burning and igniting the victim and anyone unfortunate enough to be near them. \ + Has excellent mobility and handling and is best used at close range. Can be used one handed relatively effectively with sufficient skill. \ + Its deflagrating ability works best against light armored targets, where it can quickly mow down and demoralise tightly packed enemies. Against heavily armored opponents, its effectiveness can quickly drop however. \ + Uses volkite power cells, shared with the VX-33." + ui_icon = "volkite" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/charger/standard + unlock_cost = 300 + purchase_cost = 25 + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE + +/datum/loadout_item/suit_store/main_gun/som_engineer/volkite_charger/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/assembly/signaler, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/cope, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/dylovene, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/stack/cable_coil, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) diff --git a/code/datums/gamemodes/campaign/loadout_items/SOM/suit_storage/field_commander.dm b/code/datums/gamemodes/campaign/loadout_items/SOM/suit_storage/field_commander.dm new file mode 100644 index 0000000000000..d5189ff12ac83 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/SOM/suit_storage/field_commander.dm @@ -0,0 +1,205 @@ +/datum/loadout_item/suit_store/main_gun/som_field_commander + jobs_supported = list(SOM_FIELD_COMMANDER) + +/datum/loadout_item/suit_store/main_gun/som_field_commander/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!ammo_type) + return + if(istype(wearer.back, /obj/item/storage)) + if(istype(wearer.belt, /obj/item/storage/holster/belt/pistol/m4a3/som)) //if we have a backpack and pistol belt, we just load more ammo in the back + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + else //else we put the sidearm in the bag + wearer.equip_to_slot_or_del(new /obj/item/cell/lasgun/volkite/small, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/cell/lasgun/volkite/small, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/serpenta/custom(wearer), SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_field_commander/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign/som, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_field_commander/standard_rifle + name = "V-31" + desc = "Equipped with a red dot sight, extended barrel, vertical grip and integrated micro rail launcher. Also comes with light armor piercing ammunition. The V-31 is the principal ballistic weapon for the SOM. \ + It has good mobility and handling and a good rate of fire, but tends to favour closer range fighting compared to many TGMC equivilents. \ + The rail launcher electromagnetically launches a variety of 10 gauge airbursting grenades. Extremely effective when used correctly, their fixed fuse time makes them entirely ineffective at very close or far ranges. \ + Managing engagement range is thus vital for maximising the effectiveness of this weapon. \ + Uses 10x25mm caseless ammunition and 10 gauge micro grenades." + ui_icon = "ballistic" + item_typepath = /obj/item/weapon/gun/rifle/som/veteran + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_store/main_gun/som_field_commander/standard_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/dragonbreath, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/dragonbreath, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/cluster, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/cluster, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/smoke_burst, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_field_commander/smg + name = "V-21" + desc = "Equipped with a red dot sight, recoil compensator and vertical grip, along with armor piercing ammunition. The V-21 is the principal submachinegun used by the Sons of Mars, with a variable rate of fire. \ + Has outstanding mobility and handling and can be comfortably fired one handed on its lower fire rate mode. \ + When set to its higher rate of fire, it unleashes a staggering torrent of firepower, but is difficult to control even two handed, and quickly loses effectiveness at range. \ + At close range however, it will quickly obliterate most targets - as long as you don't run out of ammo. \ + It uses 10x20mm caseless rounds." + ui_icon = "smg" + item_typepath = /obj/item/weapon/gun/smg/som/veteran + +/datum/loadout_item/suit_store/main_gun/som_field_commander/smg/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/som/incendiary, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/som/incendiary, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_field_commander/volkite_charger + name = "VX-32 charger" + desc = "Equipped with a motion sensor and gyroscopic stabiliser for effective one handed use. \ + The VX-32 is a sophisticated energy weapon capable of explosively deflagrated organic targets, horrifically burning and igniting the victim and anyone unfortunate enough to be near them. \ + Has excellent mobility and handling and is best used at close range. \ + Its deflagrating ability works best against light armored targets, where it can quickly mow down and demoralise tightly packed enemies. Against heavily armored opponents, its effectiveness can quickly drop however. \ + Uses volkite power cells, shared with the VX-33." + ui_icon = "volkite" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/charger/scout + +/datum/loadout_item/suit_store/main_gun/som_field_commander/volkite_charger/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_field_commander/volkite_caliver + name = "VX-33 caliver" + desc = "Equipped with a red dot sight and laser sight. \ + The VX-33 is a sophisticated energy weapon capable of explosively deflagrated organic targets, horrifically burning and igniting the victim and anyone unfortunate enough to be near them. \ + Has middling mobility and handling, it is a long range rifle analogue, able to project strong damage even at long ranges. \ + Its deflagrating ability works best against light armored targets, where it can quickly mow down and demoralise tightly packed enemies. Against heavily armored opponents, its effectiveness can quickly drop however. \ + Uses volkite power cells, shared with the VX-32, and can also be linked to a volkite powerpack." + ui_icon = "volkite" + purchase_cost = 50 + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/caliver/tacsensor + +/datum/loadout_item/suit_store/main_gun/som_field_commander/volkite_caliver/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_field_commander/mpi + name = "MPi-KM" + desc = "Equipped with a mag harness and underbarrel grenade launcher. This MPi-KM is an original example of one of several variants of kalashnikov type rifles used during the original Martian rebellion. \ + Passed down the generations and lovingly maintained as a family heirloom, \ + its use on modern battlefields is an idiosyncratic example of the SOM's persistant desire to maintain a link to their cultural past, more than any possible tactical reason. \ + Despite having relatively poor mobility and handling, it never the less has fearsome firepower and good capacity, ensuring it stays a relevant weapon choice for the SOM. Uses 7.62x39mm ammunition." + ui_icon = "ak47" + item_typepath = /obj/item/weapon/gun/rifle/mpi_km/grenadier + +/datum/loadout_item/suit_store/main_gun/som_field_commander/mpi/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mpi_km/extended, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mpi_km/extended, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_field_commander/carbine + name = "V-34" + desc = "Equipped with a mag harness and foldable stock. This V-34 is refurbished and well maintained weapon passed down from its use during the original Martian rebellion, \ + more family heirloom than a battlefield weapon, it serves just as well regardless. \ + It combines good mobility and managable handling with fearsome stopping power and a tremendous rate of fire, making the V-34 an exceptionally deadly weapon at close range. \ + With poor falloff and accuracy, it is a poor weapon outside of close range, and its mobility lacks compared to some other close range weapons like the V-21. \ + Uses 7.62x39mm ammunition." + ui_icon = "v34" + item_typepath = /obj/item/weapon/gun/rifle/som_carbine/mag_harness + +/datum/loadout_item/suit_store/main_gun/som_field_commander/carbine/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mpi_km/extended, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/fc_boarding_axe + name = "Boarding axe" + desc = "A SOM boarding axe, a monstrous two handed weapon that inflicts terrible damage even through heavy armor. \ + When wielded it can be used to block as well as attack, and can also be used to force unpowered airlocks open. \ + You'll kill pretty much anything you can hit with this - providing you can get close enough to use it." + ui_icon = "axe" + item_typepath = /obj/item/weapon/twohanded/fireaxe/som + item_blacklist = list(/obj/item/weapon/twohanded/fireaxe/som = ITEM_SLOT_BACK) + jobs_supported = list(SOM_FIELD_COMMANDER) + +/datum/loadout_item/suit_store/fc_boarding_axe/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign/som, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + if(istype(wearer.belt, /obj/item/storage/holster/belt/pistol/m4a3/som)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/synaptizine, SLOT_IN_BACKPACK) + else + wearer.equip_to_slot_or_del(new /obj/item/cell/lasgun/volkite/small, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/cell/lasgun/volkite/small, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/serpenta/custom(wearer), SLOT_IN_BACKPACK) + + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/synaptizine, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/russian_red, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_BACKPACK) diff --git a/code/datums/gamemodes/campaign/loadout_items/SOM/suit_storage/medic.dm b/code/datums/gamemodes/campaign/loadout_items/SOM/suit_storage/medic.dm new file mode 100644 index 0000000000000..7bbece10d3be4 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/SOM/suit_storage/medic.dm @@ -0,0 +1,175 @@ +/datum/loadout_item/suit_store/main_gun/som_medic + jobs_supported = list(SOM_SQUAD_CORPSMAN) + +/datum/loadout_item/suit_store/main_gun/som_medic/standard_rifle + name = "V-31" + desc = "Equipped with a red dot sight, extended barrel, vertical grip and integrated micro rail launcher. The V-31 is the principal ballistic weapon for the SOM. \ + It has good mobility and handling and a good rate of fire, but tends to favour closer range fighting compared to many TGMC equivilents. \ + The rail launcher electromagnetically launches a variety of 10 gauge airbursting grenades. Extremely effective when used correctly, their fixed fuse time makes them entirely ineffective at very close or far ranges. \ + Managing engagement range is thus vital for maximising the effectiveness of this weapon. \ + Uses 10x24mm caseless ammunition and 10 gauge micro grenades." + ui_icon = "ballistic" + item_typepath = /obj/item/weapon/gun/rifle/som/standard + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_store/main_gun/som_medic/standard_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/smoke_burst, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/dragonbreath, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/russian_red, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_medic/standard_rifle/enhanced + name = "V-31+" + desc = "Equipped with a red dot sight, extended barrel, vertical grip and integrated micro rail launcher. The V-31 is the principal ballistic weapon for the SOM. \ + It has good mobility and handling and a good rate of fire, but tends to favour closer range fighting compared to many TGMC equivilents. \ + The rail launcher electromagnetically launches a variety of 10 gauge airbursting grenades. Extremely effective when used correctly, their fixed fuse time makes them entirely ineffective at very close or far ranges. \ + Managing engagement range is thus vital for maximising the effectiveness of this weapon. \ + Uses a mix of standard and AP 10x24mm caseless ammunition, and 10 gauge micro grenades." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/rifle/som/ap + +/datum/loadout_item/suit_store/main_gun/som_medic/mpi + name = "MPi-KM" + desc = "Equipped with a mag harness and laser sight. The MPi-KM is a modern reproduction based off several variants of kalashnikov type rifles used during the original Martian rebellion. \ + These weapons were already ancient at that time, and their continued use by the SOM speaks more to their cultural legacy than any tactical benefits. \ + Despite having relatively poor mobility and handling, it never the less has fearsome firepower and good capacity, ensuring it stays a relevant weapon choice for the SOM. Uses 7.62x39mm ammunition." + ui_icon = "ak47" + item_typepath = /obj/item/weapon/gun/rifle/mpi_km/black/magharness + +/datum/loadout_item/suit_store/main_gun/som_medic/mpi/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_medic/carbine + name = "V-34" + desc = "Equipped with a red dot sight and foldable stock. The V-34 is a modern redesign of an ancient weapon that saw extensive use in the Martian uprising. \ + It combines good mobility and managable handling with fearsome stopping power and a tremendous rate of fire, making the V-34 an exceptionally deadly weapon at close range. \ + With poor falloff and accuracy, it is a poor weapon outside of close range, and its mobility lacks compared to some other close range weapons like the V-21. \ + Uses 7.62x39mm ammunition." + ui_icon = "v34" + item_typepath = /obj/item/weapon/gun/rifle/som_carbine/black/standard + +/datum/loadout_item/suit_store/main_gun/som_medic/carbine/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_medic/smg + name = "V-21" + desc = "Equipped with a mag harness, recoil compensator and vertical grip. The V-21 is the principal submachinegun used by the Sons of Mars, with a variable rate of fire. \ + Has outstanding mobility and handling and can be comfortably fired one handed on its lower fire rate mode. \ + When set to its higher rate of fire, it unleashes a staggering torrent of firepower, but is difficult to control even two handed, and quickly loses effectiveness at range. \ + At close range however, it will quickly obliterate most targets - as long as you don't run out of ammo. \ + It uses 10x20mm caseless rounds." + ui_icon = "smg" + item_typepath = /obj/item/weapon/gun/smg/som/support + +/datum/loadout_item/suit_store/main_gun/som_medic/smg/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_marine/smg/enhanced + name = "V-21+" + desc = "Equipped with a mag harness, recoil compensator and vertical grip. The V-21 is the principal submachinegun used by the Sons of Mars, with a variable rate of fire. \ + Has outstanding mobility and handling and can be comfortably fired one handed on its lower fire rate mode. \ + When set to its higher rate of fire, it unleashes a staggering torrent of firepower, but is difficult to control even two handed, and quickly loses effectiveness at range. \ + At close range however, it will quickly obliterate most targets - as long as you don't run out of ammo. \ + Uses a mix of standard and AP 10x20mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/smg/som/ap + +/datum/loadout_item/suit_store/main_gun/som_medic/flechette_shotgun + name = "V-51" + desc = "Equipped with a mag harness and bayonet, and solely loaded with flechette rounds. The V-51 is the main shotgun utilised by the Sons of Mars. \ + Semi automatic with great handling and mobility, it is less powerful than the SH-35 used by the TGMC, but makes up for it with a superior rate of fire. \ + Uses 12 gauge shells." + ui_icon = "shotgun" + item_typepath = /obj/item/weapon/gun/shotgun/som/support + +/datum/loadout_item/suit_store/main_gun/som_medic/flechette_shotgun/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/flechette, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/flechette, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/flechette, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/flechette, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/flechette, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/flechette, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/flechette, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_medic/volkite_charger + name = "VX-32 charger" + desc = "Unlocked for free with the Advanced rifle training perk. Equipped with a red dot sight and laser sight. The VX-32 is a sophisticated energy weapon capable of explosively deflagrated organic targets, horrifically burning and igniting the victim and anyone unfortunate enough to be near them. \ + Has excellent mobility and handling and is best used at close range. Can be used one handed relatively effectively with sufficient skill. \ + Its deflagrating ability works best against light armored targets, where it can quickly mow down and demoralise tightly packed enemies. Against heavily armored opponents, its effectiveness can quickly drop however. \ + Uses volkite power cells, shared with the VX-33." + ui_icon = "volkite" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/charger/standard + unlock_cost = 300 + purchase_cost = 25 + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE + +/datum/loadout_item/suit_store/main_gun/som_medic/volkite_charger/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) diff --git a/code/datums/gamemodes/campaign/loadout_items/SOM/suit_storage/squad_leader.dm b/code/datums/gamemodes/campaign/loadout_items/SOM/suit_storage/squad_leader.dm new file mode 100644 index 0000000000000..97e19c10f09b5 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/SOM/suit_storage/squad_leader.dm @@ -0,0 +1,164 @@ +/datum/loadout_item/suit_store/main_gun/som_squad_leader + jobs_supported = list(SOM_SQUAD_LEADER) + +/datum/loadout_item/suit_store/main_gun/som_squad_leader/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!ammo_type) + return + if(istype(wearer.back, /obj/item/storage)) + if(istype(wearer.belt, /obj/item/storage/holster/belt/pistol/m4a3/som)) //if we have a backpack and pistol belt, we just load more ammo in the back + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + else //else we put the sidearm in the bag + wearer.equip_to_slot_or_del(new /obj/item/cell/lasgun/volkite/small, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/cell/lasgun/volkite/small, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/serpenta(wearer), SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_squad_leader/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign/som, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_squad_leader/standard_rifle + name = "V-31" + desc = "Equipped with a red dot sight, extended barrel, vertical grip and integrated micro rail launcher. Also comes with light armor piercing ammunition. The V-31 is the principal ballistic weapon for the SOM. \ + It has good mobility and handling and a good rate of fire, but tends to favour closer range fighting compared to many TGMC equivilents. \ + The rail launcher electromagnetically launches a variety of 10 gauge airbursting grenades. Extremely effective when used correctly, their fixed fuse time makes them entirely ineffective at very close or far ranges. \ + Managing engagement range is thus vital for maximising the effectiveness of this weapon. \ + Uses 10x25mm caseless ammunition and 10 gauge micro grenades." + ui_icon = "ballistic" + item_typepath = /obj/item/weapon/gun/rifle/som/veteran + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_store/main_gun/som_squad_leader/standard_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/dragonbreath, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/dragonbreath, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/cluster, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/cluster, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/smoke_burst, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_squad_leader/smg + name = "V-21" + desc = "Equipped with a red dot sight, recoil compensator and vertical grip, along with armor piercing ammunition. The V-21 is the principal submachinegun used by the Sons of Mars, with a variable rate of fire. \ + Has outstanding mobility and handling and can be comfortably fired one handed on its lower fire rate mode. \ + When set to its higher rate of fire, it unleashes a staggering torrent of firepower, but is difficult to control even two handed, and quickly loses effectiveness at range. \ + At close range however, it will quickly obliterate most targets - as long as you don't run out of ammo. \ + It uses 10x20mm caseless rounds." + ui_icon = "smg" + item_typepath = /obj/item/weapon/gun/smg/som/veteran + +/datum/loadout_item/suit_store/main_gun/som_squad_leader/smg/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/som/incendiary, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/som/incendiary, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_squad_leader/volkite_charger + name = "VX-32 charger" + desc = "Equipped with a motion sensor and gyroscopic stabiliser for effective one handed use. \ + The VX-32 is a sophisticated energy weapon capable of explosively deflagrated organic targets, horrifically burning and igniting the victim and anyone unfortunate enough to be near them. \ + Has excellent mobility and handling and is best used at close range. \ + Its deflagrating ability works best against light armored targets, where it can quickly mow down and demoralise tightly packed enemies. Against heavily armored opponents, its effectiveness can quickly drop however. \ + Uses volkite power cells, shared with the VX-33." + ui_icon = "volkite" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/charger/scout + +/datum/loadout_item/suit_store/main_gun/som_squad_leader/volkite_charger/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_squad_leader/volkite_caliver + name = "VX-33 caliver" + desc = "Equipped with a motion sensor and laser sight. \ + The VX-33 is a sophisticated energy weapon capable of explosively deflagrated organic targets, horrifically burning and igniting the victim and anyone unfortunate enough to be near them. \ + Has middling mobility and handling, it is a long range rifle analogue, able to project strong damage even at long ranges. \ + Its deflagrating ability works best against light armored targets, where it can quickly mow down and demoralise tightly packed enemies. Against heavily armored opponents, its effectiveness can quickly drop however. \ + Uses volkite power cells, shared with the VX-32, and can also be linked to a volkite powerpack." + ui_icon = "volkite" + purchase_cost = 50 + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/caliver/tacsensor + +/datum/loadout_item/suit_store/main_gun/som_squad_leader/volkite_caliver/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_squad_leader/mpi + name = "MPi-KM" + desc = "Equipped with a mag harness and underbarrel grenade launcher. This MPi-KM is an original example of one of several variants of kalashnikov type rifles used during the original Martian rebellion. \ + Passed down the generations and lovingly maintained as a family heirloom, \ + its use on modern battlefields is an idiosyncratic example of the SOM's persistant desire to maintain a link to their cultural past, more than any possible tactical reason. \ + Despite having relatively poor mobility and handling, it never the less has fearsome firepower and good capacity, ensuring it stays a relevant weapon choice for the SOM. Uses 7.62x39mm ammunition." + ui_icon = "ak47" + item_typepath = /obj/item/weapon/gun/rifle/mpi_km/grenadier + +/datum/loadout_item/suit_store/main_gun/som_squad_leader/mpi/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mpi_km/extended, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mpi_km/extended, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_squad_leader/carbine + name = "V-34" + desc = "Equipped with a mag harness and foldable stock. This V-34 is refurbished and well maintained weapon passed down from its use during the original Martian rebellion, \ + more family heirloom than a battlefield weapon, it serves just as well regardless. \ + It combines good mobility and managable handling with fearsome stopping power and a tremendous rate of fire, making the V-34 an exceptionally deadly weapon at close range. \ + With poor falloff and accuracy, it is a poor weapon outside of close range, and its mobility lacks compared to some other close range weapons like the V-21. \ + Uses 7.62x39mm ammunition." + ui_icon = "v34" + item_typepath = /obj/item/weapon/gun/rifle/som_carbine/mag_harness + +/datum/loadout_item/suit_store/main_gun/som_squad_leader/carbine/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mpi_km/extended, SLOT_IN_BACKPACK) diff --git a/code/datums/gamemodes/campaign/loadout_items/SOM/suit_storage/standard.dm b/code/datums/gamemodes/campaign/loadout_items/SOM/suit_storage/standard.dm new file mode 100644 index 0000000000000..da1de837f2261 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/SOM/suit_storage/standard.dm @@ -0,0 +1,414 @@ +/datum/loadout_item/suit_store/main_gun/som_marine + jobs_supported = list(SOM_SQUAD_MARINE) + +/datum/loadout_item/suit_store/main_gun/som_marine/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!ammo_type) + return + if(!isstorage(wearer.back)) + return + if(istype(wearer.belt, /obj/item/storage/holster/belt/pistol/m4a3/som)) //if we have a backpack and pistol belt, we just load more ammo in the back + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + else //else we put the sidearm in the bag + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/som/standard(wearer), SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_marine/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_marine/standard_rifle + name = "V-31" + desc = "Equipped with a red dot sight, extended barrel, vertical grip and integrated micro rail launcher. The V-31 is the principal ballistic weapon for the SOM. \ + It has good mobility and handling and a good rate of fire, but tends to favour closer range fighting compared to many TGMC equivilents. \ + The rail launcher electromagnetically launches a variety of 10 gauge airbursting grenades. Extremely effective when used correctly, their fixed fuse time makes them entirely ineffective at very close or far ranges. \ + Managing engagement range is thus vital for maximising the effectiveness of this weapon. \ + Uses 10x24mm caseless ammunition and 10 gauge micro grenades." + ui_icon = "ballistic" + item_typepath = /obj/item/weapon/gun/rifle/som/standard + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_store/main_gun/som_marine/standard_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/cluster, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_marine/standard_rifle/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/dragonbreath, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/cluster, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/smoke_burst, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_marine/standard_rifle/enhanced + name = "V-31+" + desc = "Equipped with a red dot sight, extended barrel, vertical grip and integrated micro rail launcher. The V-31 is the principal ballistic weapon for the SOM. \ + It has good mobility and handling and a good rate of fire, but tends to favour closer range fighting compared to many TGMC equivilents. \ + The rail launcher electromagnetically launches a variety of 10 gauge airbursting grenades. Extremely effective when used correctly, their fixed fuse time makes them entirely ineffective at very close or far ranges. \ + Managing engagement range is thus vital for maximising the effectiveness of this weapon. \ + Uses a mix of standard and AP 10x24mm caseless ammunition, and 10 gauge micro grenades." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/rifle/som/ap + +/datum/loadout_item/suit_store/main_gun/som_marine/standard_rifle/enhanced/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + return ..() + +/datum/loadout_item/suit_store/main_gun/som_marine/mpi_grenadier + name = "MPi-KM" + desc = "Equipped with a red dot sight and underbarrel grenade launcher. The MPi-KM is a modern reproduction based off several variants of kalashnikov type rifles used during the original Martian rebellion. \ + These weapons were already ancient at that time, and their continued use by the SOM speaks more to their cultural legacy than any tactical benefits. \ + Despite having relatively poor mobility and handling, it never the less has fearsome firepower and good capacity, ensuring it stays a relevant weapon choice for the SOM. Uses 7.62x39mm ammunition." + ui_icon = "ak47" + item_typepath = /obj/item/weapon/gun/rifle/mpi_km/black/grenadier + +/datum/loadout_item/suit_store/main_gun/som_marine/mpi_grenadier/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_marine/carbine + name = "V-34" + desc = "Equipped with a red dot sight and foldable stock. The V-34 is a modern redesign of an ancient weapon that saw extensive use in the Martian uprising. \ + It combines good mobility and managable handling with fearsome stopping power and a tremendous rate of fire, making the V-34 an exceptionally deadly weapon at close range. \ + With poor falloff and accuracy, it is a poor weapon outside of close range, and its mobility lacks compared to some other close range weapons like the V-21. \ + Uses 7.62x39mm ammunition." + ui_icon = "v34" + item_typepath = /obj/item/weapon/gun/rifle/som_carbine/black/standard + +/datum/loadout_item/suit_store/main_gun/som_marine/carbine/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_marine/smg + name = "V-21" + desc = "Equipped with a motion sensor, recoil compensator and vertical grip. The V-21 is the principal submachinegun used by the Sons of Mars, with a variable rate of fire. \ + Has outstanding mobility and handling and can be comfortably fired one handed on its lower fire rate mode. \ + When set to its higher rate of fire, it unleashes a staggering torrent of firepower, but is difficult to control even two handed, and quickly loses effectiveness at range. \ + At close range however, it will quickly obliterate most targets - as long as you don't run out of ammo. \ + It uses 10x20mm caseless rounds." + req_desc = "Requires M-11 scout armor." + ui_icon = "smg" + item_typepath = /obj/item/weapon/gun/smg/som/scout + item_whitelist = list( + /obj/item/clothing/suit/modular/som/light/shield = ITEM_SLOT_OCLOTHING, + /obj/item/clothing/suit/modular/som/light/shield_overclocked = ITEM_SLOT_OCLOTHING, + ) + +/datum/loadout_item/suit_store/main_gun/som_marine/smg/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_marine/smg/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_marine/smg/enhanced + name = "V-21+" + desc = "Equipped with a motion sensor, recoil compensator and vertical grip. The V-21 is the principal submachinegun used by the Sons of Mars, with a variable rate of fire. \ + Has outstanding mobility and handling and can be comfortably fired one handed on its lower fire rate mode. \ + When set to its higher rate of fire, it unleashes a staggering torrent of firepower, but is difficult to control even two handed, and quickly loses effectiveness at range. \ + At close range however, it will quickly obliterate most targets - as long as you don't run out of ammo. \ + Uses a mix of standard and AP 10x20mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/smg/som/ap + +/datum/loadout_item/suit_store/main_gun/som_marine/smg/enhanced/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + return ..() + +/datum/loadout_item/suit_store/main_gun/som_marine/standard_shotgun + name = "V-51" + desc = "Equipped with a mag harness, bayonet and undebarrel flashlight. The V-51 is the main shotgun utilised by the Sons of Mars. \ + Semi automatic with great handling and mobility, it is less powerful than the SH-35 used by the TGMC, but makes up for it with a superior rate of fire. \ + Uses 12 gauge shells." + req_desc = "Requires M-11 scout armor." + ui_icon = "shotgun" + item_typepath = /obj/item/weapon/gun/shotgun/som/standard + item_whitelist = list( + /obj/item/clothing/suit/modular/som/light/shield = ITEM_SLOT_OCLOTHING, + /obj/item/clothing/suit/modular/som/light/shield_overclocked = ITEM_SLOT_OCLOTHING, + ) + +/datum/loadout_item/suit_store/main_gun/som_marine/standard_shotgun/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_marine/smg/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_marine/flamer + name = "V-62 incinerator" + desc = "Equipped with a mag harness and wide nozzle. The V-62 is a deadly weapon employed in close quarter combat, favoured as much for the terror it inspires as the actual damage it inflicts. \ + It has good range for a flamer, able to effortly clear out enclosed or defensive positions but lacks the integrated extinguisher of its TGMC equivalent." + req_desc = "Requires M-31 combat armor with a Hades fireproof module." + ui_icon = "ballistic" + item_typepath = /obj/item/weapon/gun/flamer/som/mag_harness + item_whitelist = list(/obj/item/clothing/suit/modular/som/heavy/pyro = ITEM_SLOT_OCLOTHING) + +/datum/loadout_item/suit_store/main_gun/som_marine/flamer/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/large/X/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/large/X/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/large/X/som, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_marine/flamer/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/som/extended, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/som/extended, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_marine/smg_and_shield + name = "V-21 & riot shield" + desc = "Equipped with a red dot sight, recoil compensator and vertical grip, along with a S-144 boarding shield, intended for use with M-31 combat armor for boarding actions.. The V-21 is the principal submachinegun used by the Sons of Mars, with a variable rate of fire. \ + Has outstanding mobility and handling and can be comfortably fired one handed on its lower fire rate mode. \ + When set to its higher rate of fire, it unleashes a staggering torrent of firepower, but is difficult to control even two handed, and quickly loses effectiveness at range. \ + When used with the boarding shield, use of the higher rate of fire is highly unrecommended outside of anything but absolute point blank range. \ + It uses 10x20mm caseless rounds." + ui_icon = "riot_shield" + item_typepath = /obj/item/weapon/gun/smg/som/one_handed + +/datum/loadout_item/suit_store/main_gun/som_marine/smg_and_shield/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/marine/som, SLOT_L_HAND) + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/weldingtool/largetank, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/russian_red, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + return ..() //we explicitly don't want a sidearm for this weapon choice + +/datum/loadout_item/suit_store/main_gun/som_marine/smg_and_shield/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_marine/smg_and_shield/enhanced + name = "V-21+ & riot shield" + desc = "Equipped with a red dot sight, recoil compensator and vertical grip, along with a S-144 boarding shield, intended for use with M-31 combat armor for boarding actions.. The V-21 is the principal submachinegun used by the Sons of Mars, with a variable rate of fire. \ + Has outstanding mobility and handling and can be comfortably fired one handed on its lower fire rate mode. \ + When set to its higher rate of fire, it unleashes a staggering torrent of firepower, but is difficult to control even two handed, and quickly loses effectiveness at range. \ + When used with the boarding shield, use of the higher rate of fire is highly unrecommended outside of anything but absolute point blank range. \ + Uses a mix of standard and AP 10x20mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/smg/som/ap + +/datum/loadout_item/suit_store/main_gun/som_marine/machinegunner + name = "V-41" + desc = "Equipped with a red dot sight, extended barrel and bipod. The V-41 is a large man portable machine used by the SOM, allowing for sustained, accurate suppressive firepower at the cost of mobility and handling. \ + Commonly seen where their preferred tactics of fast, mobile aggression is ill suited. Has impressive ranged damage application as a static weapon. Uses 10x26mm Caseless ammunition." + ui_icon = "v41" + item_typepath = /obj/item/weapon/gun/rifle/som_mg/standard + +/datum/loadout_item/suit_store/main_gun/som_marine/machinegunner/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_marine/machinegunner/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/satrapine, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_marine/volkite_charger + name = "VX-32 charger" + desc = "Unlocked for free with the Advanced rifle training perk. Equipped with a motion detector and gyroscopic stabilizer. The VX-32 is a sophisticated energy weapon capable of explosively deflagrated organic targets, horrifically burning and igniting the victim and anyone unfortunate enough to be near them. \ + Has excellent mobility and handling and is best used at close range. Can be used one handed relatively effectively with sufficient skill. \ + Its deflagrating ability works best against light armored targets, where it can quickly mow down and demoralise tightly packed enemies. Against heavily armored opponents, its effectiveness can quickly drop however. \ + Uses volkite power cells, shared with the VX-33." + ui_icon = "volkite" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/charger/scout + unlock_cost = 300 + purchase_cost = 35 + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE + +/datum/loadout_item/suit_store/main_gun/som_marine/volkite_charger/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_marine/volkite_charger/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/boarding_axe + name = "Boarding axe" + desc = "A SOM boarding axe, a monstrous two handed weapon that inflicts terrible damage even through heavy armor. \ + When wielded it can be used to block as well as attack, and can also be used to force unpowered airlocks open. \ + You'll kill pretty much anything you can hit with this - providing you can get close enough to use it." + req_desc = "Requires M-31 combat armor with a Lorica extra armor module." + ui_icon = "axe" + item_typepath = /obj/item/weapon/twohanded/fireaxe/som + item_whitelist = list(/obj/item/clothing/suit/modular/som/heavy/lorica = ITEM_SLOT_OCLOTHING) + item_blacklist = list(/obj/item/weapon/twohanded/fireaxe/som = ITEM_SLOT_BACK) + jobs_supported = list(SOM_SQUAD_MARINE) + +/datum/loadout_item/suit_store/boarding_axe/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/synaptizine, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/russian_red, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_marine/suppressed_rifle + name = "V-31-suppressed" + desc = "Equipped with a mag harness, suppressor, vertical grip and integrated micro rail launcher. The V-31 is the principal ballistic weapon for the SOM. \ + It has good mobility and handling and a good rate of fire, but tends to favour closer range fighting compared to many TGMC equivilents. \ + The rail launcher electromagnetically launches a variety of 10 gauge airbursting grenades. Extremely effective when used correctly, their fixed fuse time makes them entirely ineffective at very close or far ranges. \ + Managing engagement range is thus vital for maximising the effectiveness of this weapon. \ + This particular example is a less common variant intended for stealthy operations, where its quietness and lack of muzzle flash can help get the jump on unsuspecting opponents. \ + Uses 10x24mm caseless ammunition and 10 gauge micro grenades." + ui_icon = "ballistic" + item_typepath = /obj/item/weapon/gun/rifle/som/suppressed + +/datum/loadout_item/suit_store/main_gun/som_marine/suppressed_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/cluster, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_marine/suppressed_rifle/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/dragonbreath, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/cluster, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/smoke_burst, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_marine/suppressed_rifle/enhanced + name = "V-31-suppressed+" + desc = "Equipped with a mag harness, suppressor, vertical grip and integrated micro rail launcher. The V-31 is the principal ballistic weapon for the SOM. \ + It has good mobility and handling and a good rate of fire, but tends to favour closer range fighting compared to many TGMC equivilents. \ + The rail launcher electromagnetically launches a variety of 10 gauge airbursting grenades. Extremely effective when used correctly, their fixed fuse time makes them entirely ineffective at very close or far ranges. \ + Managing engagement range is thus vital for maximising the effectiveness of this weapon. \ + This particular example is a less common variant intended for stealthy operations, where its quietness and lack of muzzle flash can help get the jump on unsuspecting opponents. \ + Uses a mix of standard and AP 10x24mm caseless ammunition, and 10 gauge micro grenades." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/rifle/som/ap + +/datum/loadout_item/suit_store/main_gun/som_marine/suppressed_rifle/enhanced/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + return ..() diff --git a/code/datums/gamemodes/campaign/loadout_items/SOM/suit_storage/veteran.dm b/code/datums/gamemodes/campaign/loadout_items/SOM/suit_storage/veteran.dm new file mode 100644 index 0000000000000..83332e2d9fd1b --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/SOM/suit_storage/veteran.dm @@ -0,0 +1,372 @@ +/datum/loadout_item/suit_store/main_gun/som_veteran + jobs_supported = list(SOM_SQUAD_VETERAN) + +/datum/loadout_item/suit_store/main_gun/som_veteran/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!ammo_type) + return + if(istype(wearer.back, /obj/item/storage)) + if(istype(wearer.belt, /obj/item/storage/holster/belt/pistol/m4a3/som)) //if we have a backpack and pistol belt, we just load more ammo in the back + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + else //else we put the sidearm in the bag + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/som/standard(wearer), SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_veteran/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_veteran/standard_rifle + name = "V-31" + desc = "Equipped with a red dot sight, extended barrel, vertical grip and integrated micro rail launcher. Also comes with light armor piercing ammunition. The V-31 is the principal ballistic weapon for the SOM. \ + It has good mobility and handling and a good rate of fire, but tends to favour closer range fighting compared to many TGMC equivilents. \ + The rail launcher electromagnetically launches a variety of 10 gauge airbursting grenades. Extremely effective when used correctly, their fixed fuse time makes them entirely ineffective at very close or far ranges. \ + Managing engagement range is thus vital for maximising the effectiveness of this weapon. \ + Uses 10x25mm caseless ammunition and 10 gauge micro grenades." + ui_icon = "ballistic" + item_typepath = /obj/item/weapon/gun/rifle/som/veteran + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_store/main_gun/som_veteran/standard_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/smoke_burst, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/cluster, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_veteran/standard_rifle/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/dragonbreath, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/dragonbreath, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/cluster, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/micro_grenade/cluster, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_veteran/smg + name = "V-21" + desc = "Equipped with a red dot sight, recoil compensator and vertical grip, along with armor piercing ammunition. The V-21 is the principal submachinegun used by the Sons of Mars, with a variable rate of fire. \ + Has outstanding mobility and handling and can be comfortably fired one handed on its lower fire rate mode. \ + When set to its higher rate of fire, it unleashes a staggering torrent of firepower, but is difficult to control even two handed, and quickly loses effectiveness at range. \ + At close range however, it will quickly obliterate most targets - as long as you don't run out of ammo. \ + It uses 10x20mm caseless rounds." + ui_icon = "smg" + item_typepath = /obj/item/weapon/gun/smg/som/veteran + +/datum/loadout_item/suit_store/main_gun/som_veteran/smg/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_veteran/smg/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_veteran/breacher + name = "VX-32B charger" + desc = "Equipped with a mag harness and gyroscopic stabiliser for effective one handed use, and comes with a S-144 boarding shield, intended for use with M-31 Lorica combat armor for boarding actions. \ + The VX-32 is a sophisticated energy weapon capable of explosively deflagrated organic targets, horrifically burning and igniting the victim and anyone unfortunate enough to be near them. \ + Has excellent mobility and handling and is best used at close range. \ + Its deflagrating ability works best against light armored targets, where it can quickly mow down and demoralise tightly packed enemies. Against heavily armored opponents, its effectiveness can quickly drop however. \ + Uses volkite power cells, shared with the VX-33." + ui_icon = "riot_shield" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/charger/somvet + purchase_cost = 60 + +/datum/loadout_item/suit_store/main_gun/som_veteran/breacher/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/marine/som, SLOT_L_HAND) + if(istype(wearer.back, /obj/item/storage)) + return ..() + + wearer.equip_to_slot_or_del(new /obj/item/tool/weldingtool/largetank, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/cell/lasgun/volkite, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/cell/lasgun/volkite, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/cell/lasgun/volkite, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + return ..() + +/datum/loadout_item/suit_store/main_gun/som_veteran/breacher/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_veteran/volkite_charger + name = "VX-32 charger" + desc = "Equipped with a motion sensor and gyroscopic stabiliser for effective one handed use. \ + The VX-32 is a sophisticated energy weapon capable of explosively deflagrated organic targets, horrifically burning and igniting the victim and anyone unfortunate enough to be near them. \ + Has excellent mobility and handling and is best used at close range. \ + Its deflagrating ability works best against light armored targets, where it can quickly mow down and demoralise tightly packed enemies. Against heavily armored opponents, its effectiveness can quickly drop however. \ + Uses volkite power cells, shared with the VX-33." + ui_icon = "volkite" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/charger/scout + +/datum/loadout_item/suit_store/main_gun/som_veteran/volkite_charger/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_veteran/volkite_charger/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_veteran/volkite_caliver + name = "VX-33 caliver" + desc = "Equipped with a red dot sight and laser sight. \ + The VX-33 is a sophisticated energy weapon capable of explosively deflagrated organic targets, horrifically burning and igniting the victim and anyone unfortunate enough to be near them. \ + Has middling mobility and handling, it is a long range rifle analogue, able to project strong damage even at long ranges. \ + Its deflagrating ability works best against light armored targets, where it can quickly mow down and demoralise tightly packed enemies. Against heavily armored opponents, its effectiveness can quickly drop however. \ + Uses volkite power cells, shared with the VX-32, and can also be linked to a volkite powerpack." + ui_icon = "volkite" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/caliver/standard + +/datum/loadout_item/suit_store/main_gun/som_veteran/volkite_caliver/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_veteran/volkite_caliver/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_veteran/mpi + name = "MPi-KM" + desc = "Equipped with a mag harness and underbarrel grenade launcher. This MPi-KM is an original example of one of several variants of kalashnikov type rifles used during the original Martian rebellion. \ + Passed down the generations and lovingly maintained as a family heirloom, \ + its use on modern battlefields is an idiosyncratic example of the SOM's persistant desire to maintain a link to their cultural past, more than any possible tactical reason. \ + Despite having relatively poor mobility and handling, it never the less has fearsome firepower and good capacity, ensuring it stays a relevant weapon choice for the SOM. Uses 7.62x39mm ammunition." + ui_icon = "ak47" + item_typepath = /obj/item/weapon/gun/rifle/mpi_km/grenadier + +/datum/loadout_item/suit_store/main_gun/som_veteran/mpi/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mpi_km/extended, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mpi_km/extended, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_veteran/carbine + name = "V-34" + desc = "Equipped with a mag harness and foldable stock. This V-34 is refurbished and well maintained weapon passed down from its use during the original Martian rebellion, \ + more family heirloom than a battlefield weapon, it serves just as well regardless. \ + It combines good mobility and managable handling with fearsome stopping power and a tremendous rate of fire, making the V-34 an exceptionally deadly weapon at close range. \ + With poor falloff and accuracy, it is a poor weapon outside of close range, and its mobility lacks compared to some other close range weapons like the V-21. \ + Uses 7.62x39mm ammunition." + ui_icon = "v34" + item_typepath = /obj/item/weapon/gun/rifle/som_carbine/mag_harness + +/datum/loadout_item/suit_store/main_gun/som_veteran/carbine/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mpi_km/extended, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/som_veteran/volkite_caliver_pack + name = "VX-33P Caliver" + desc = "Equipped with a motion sensor and laser sight, this one is intended to be used with a back worm powerpack. \ + The VX-33 is a sophisticated energy weapon capable of explosively deflagrated organic targets, horrifically burning and igniting the victim and anyone unfortunate enough to be near them. \ + Has middling mobility and handling, it is a long range rifle analogue, able to project strong damage even at long ranges. \ + Its deflagrating ability works best against light armored targets, where it can quickly mow down and demoralise tightly packed enemies. Against heavily armored opponents, its effectiveness can quickly drop however. \ + Uses volkite power cells, shared with the VX-32, and can also be linked to a volkite powerpack." + req_desc = "Requires a volkite powerback." + ui_icon = "volkite" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/caliver/tacsensor + quantity = 2 + purchase_cost = 50 + item_whitelist = list(/obj/item/cell/lasgun/volkite/powerpack = ITEM_SLOT_BACK) + +/datum/loadout_item/suit_store/main_gun/som_veteran/volkite_caliver_pack/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_ACCESSORY) + if(istype(wearer.belt, /obj/item/weapon/gun/shotgun/double/sawn)) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/buckshot, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/buckshot, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/buckshot, SLOT_IN_ACCESSORY) + else + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_veteran/volkite_culverin + name = "VX-42 culverin" + desc = "Equipped with a mag harness. \ + The VX-42 is a massive and terrifying energy weapon capable of explosively deflagrated organic targets, horrifically burning and igniting the victim and anyone unfortunate enough to be near them. \ + It has poor mobility and handling and is somewhat inaccurate at range, especially on the move. Despite this, the VX-42 can unleash a blistering amount of firepower, making it one of the most feared weapons in the SOM arsenal. \ + Targets at close range are torn apart, and its high rate of fire more than makes up for its somewhat poor long range accuracy. \ + Its deflagrating ability works best against light armored targets, where it can quickly mow down and demoralise tightly packed enemies. Against heavily armored opponents, its effectiveness can quickly drop however. \ + It must be linked to a volkite powerpack, allowing for sustained fire, although its energy demands can quickly drain even the powerpack, leaving a trigger happy operate vulnerable while it recharges." + req_desc = "Requires a volkite powerback to operate." + ui_icon = "volkite" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/culverin/magharness + quantity = 2 + purchase_cost = 100 + item_whitelist = list(/obj/item/cell/lasgun/volkite/powerpack = ITEM_SLOT_BACK) + +/datum/loadout_item/suit_store/main_gun/som_veteran/volkite_culverin/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_ACCESSORY) + if(istype(wearer.belt, /obj/item/weapon/gun/shotgun/double/sawn)) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/buckshot, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/buckshot, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/buckshot, SLOT_IN_ACCESSORY) + else + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/som_veteran/radioactive_smg + name = "V-21R" + desc = "Equipped with a red dot sight, recoil compensator and vertical grip, along with radioactive and incendiary ammunition. The V-21 is the principal submachinegun used by the Sons of Mars, with a variable rate of fire. \ + Has outstanding mobility and handling and can be comfortably fired one handed on its lower fire rate mode. \ + When set to its higher rate of fire, it unleashes a staggering torrent of firepower, but is difficult to control even two handed, and quickly loses effectiveness at range. \ + At close range however, it will quickly obliterate most targets - as long as you don't run out of ammo. \ + It uses 10x20mm caseless rounds." + req_desc = "Requires a suit with a Mithridatius environmental protection module." + ui_icon = "smg" + item_typepath = /obj/item/weapon/gun/smg/som/support + item_whitelist = list(/obj/item/clothing/suit/modular/som/heavy/mithridatius = ITEM_SLOT_OCLOTHING) + +/datum/loadout_item/suit_store/main_gun/som_veteran/radioactive_smg/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x20mm, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/som/incendiary, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_ACCESSORY) + + if(istype(wearer.belt, /obj/item/storage/belt)) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/som/rad, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/som/rad, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/som/rad, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/som/rad, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/som, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/som, SLOT_IN_BELT) + if(istype(wearer.l_store, /obj/item/storage/pouch/magazine)) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/som/rad, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/som/incendiary, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_L_POUCH) + if(istype(wearer.r_store, /obj/item/storage/pouch/magazine)) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/som/rad, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/som/incendiary, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_R_POUCH) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/rad, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/rad, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/rad, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/som/rad, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/som/rad, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/som/incendiary, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/rad, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/rad, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/rad, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/energy_sword + name = "Energy sword" + desc = "A SOM energy sword. Designed to cut through armored plate. An uncommon primary weapon, typically seen wielded by so called 'blink assault' troops. \ + Can be used defensively to great effect, mainly against opponents trying to strike you in melee, although some users report varying levels of success in blocking ranged projectiles." + ui_icon = "machete" + item_typepath = /obj/item/weapon/energy/sword/som + jobs_supported = list(SOM_SQUAD_VETERAN) + +/datum/loadout_item/suit_store/energy_sword/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/synaptizine, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/russian_red, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary/som, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat, SLOT_IN_BACKPACK) diff --git a/code/datums/gamemodes/campaign/loadout_items/SOM/uniform.dm b/code/datums/gamemodes/campaign/loadout_items/SOM/uniform.dm new file mode 100644 index 0000000000000..6d0547e6422ec --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/SOM/uniform.dm @@ -0,0 +1,67 @@ +/datum/loadout_item/uniform/som_standard + name = "SOM uniform" + desc = "The standard uniform of SOM military personnel. Its design shows a clear lineage from mining uniforms used in the old mining colonies." + item_typepath = /obj/item/clothing/under/som/webbing + jobs_supported = list(SOM_SQUAD_MARINE) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/uniform/som_veteran + name = "SOM veteran uniform" + desc = "The standard uniform of SOM military personnel. Its design shows a clear lineage from mining uniforms used in the old mining colonies. This one has markings indicating specialist status." + item_typepath = /obj/item/clothing/under/som/veteran/webbing + jobs_supported = list(SOM_SQUAD_VETERAN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/uniform/som_leader + name = "SOM leader uniform" + desc = "The standard uniform of SOM military personnel. Its design shows a clear lineage from mining uniforms used in the old mining colonies. This one has leadership markings." + item_typepath = /obj/item/clothing/under/som/leader/webbing + jobs_supported = list(SOM_SQUAD_LEADER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +//corpsman +/datum/loadout_item/uniform/som_medic + name = "SOM medical uniform" + desc = "The standard uniform of SOM military personnel. Its design shows a clear lineage from mining uniforms used in the old mining colonies. This one has medical markings." + item_typepath = /obj/item/clothing/under/som/medic/vest + jobs_supported = list(SOM_SQUAD_CORPSMAN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/uniform/som_medic/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/bodybag/cryobag, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/roller, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tweezers_advanced, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/advanced/nanoblood, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/spaceacillin, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/advanced/combat_advanced, SLOT_IN_ACCESSORY) + +//engineer +/datum/loadout_item/uniform/som_engineer + name = "SOM uniform" + desc = "The standard uniform of SOM military personnel. Its design shows a clear lineage from mining uniforms used in the old mining colonies." + req_desc = "Requires a tool pouch. You ARE an engineer, right?" + item_typepath = /obj/item/clothing/under/som/webbing + jobs_supported = list(SOM_SQUAD_ENGINEER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/uniform/som_field_commander + name = "Officer uniform" + desc = "The distinct black uniform befitting a SOM field officer." + item_typepath = /obj/item/clothing/under/som/officer/webbing + jobs_supported = list(SOM_FIELD_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/uniform/som_officer + name = "Officer uniform" + desc = "The distinct black uniform of a SOM officer. Usually worn by junior officers." + item_typepath = /obj/item/clothing/under/som/officer + jobs_supported = list(SOM_STAFF_OFFICER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/uniform/som_senior_officer + name = "Officer uniform" + desc = "The distinct jacketed black uniform of a SOM officer. Usually worn by senior officers." + item_typepath = /obj/item/clothing/under/som/officer/senior + jobs_supported = list(SOM_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + diff --git a/code/datums/gamemodes/campaign/loadout_items/_TGMC/back_slot.dm b/code/datums/gamemodes/campaign/loadout_items/_TGMC/back_slot.dm new file mode 100644 index 0000000000000..cdf0e77cafa80 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/_TGMC/back_slot.dm @@ -0,0 +1,190 @@ +/datum/loadout_item/back + item_slot = ITEM_SLOT_BACK + +/datum/loadout_item/back/empty + name = "no backpack" + desc = "" + ui_icon = "empty" + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + jobs_supported = list( + SQUAD_MARINE, + SQUAD_CORPSMAN, + SQUAD_ENGINEER, + SQUAD_SMARTGUNNER, + SQUAD_LEADER, + FIELD_COMMANDER, + STAFF_OFFICER, + CAPTAIN, + SOM_SQUAD_MARINE, + SOM_SQUAD_CORPSMAN, + SOM_SQUAD_ENGINEER, + SOM_SQUAD_VETERAN, + SOM_SQUAD_LEADER, + SOM_FIELD_COMMANDER, + SOM_STAFF_OFFICER, + SOM_COMMANDER, + ) + +/datum/loadout_item/back/marine_satchel + name = "Satchel" + desc = "A heavy-duty satchel carried by some TGMC soldiers and support personnel. Carries less than a backpack, but items can be drawn instantly." + item_typepath = /obj/item/storage/backpack/marine/satchel + jobs_supported = list(SQUAD_MARINE, SQUAD_SMARTGUNNER, STAFF_OFFICER, CAPTAIN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/back/marine_backpack + name = "Backpack" + desc = "The standard-issue pack of the TGMC forces. Designed to slug gear into the battlefield. Carries more than a satchel but has a draw delay." + item_typepath = /obj/item/storage/backpack/marine + jobs_supported = list(SQUAD_MARINE, SQUAD_SMARTGUNNER) + +/datum/loadout_item/back/combat_pack + name = "Combat pack" + desc = "A small lightweight pack for expeditions and short-range operations. Has the storage capacity of a backpack but no draw delay." + purchase_cost = 25 + item_typepath = /obj/item/storage/backpack/lightpack + jobs_supported = list(SQUAD_MARINE, SQUAD_SMARTGUNNER) + +/datum/loadout_item/back/combat_pack/free + purchase_cost = 0 + jobs_supported = list(SQUAD_LEADER, FIELD_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/back/flamer_tank + name = "Flame tank" + desc = "A specialized fuel tank for use with the FL-84 flamethrower and FL-240 incinerator unit." + req_desc = "Requires a FL-84 flamethrower." + item_typepath = /obj/item/ammo_magazine/flamer_tank/backtank + jobs_supported = list(SQUAD_MARINE) + item_whitelist = list(/obj/item/weapon/gun/flamer/big_flamer/marinestandard/wide = ITEM_SLOT_SUITSTORE) + +/datum/loadout_item/back/flamer_tank/x_fuel + name = "X-fuel tank" + desc = "A specialized fuel tank of ultra thick napthal type X, known for its extreme heat and slow burn rate, as well as it's distinct blue flames. For use with the FL-84 flamethrower and FL-240 incinerator unit." + item_typepath = /obj/item/ammo_magazine/flamer_tank/backtank/X + purchase_cost = 40 + unlock_cost = 200 + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE + +/datum/loadout_item/back/jetpack + name = "Heavy jetpack" + desc = "An upgraded jetpack with enough fuel to send a person flying for a short while with extreme force. \ + It provides better mobility for heavy users and enough thrust to be used in an aggressive manner. \ + Alt right click or middleclick to fly to a destination when the jetpack is equipped. Will collide with hostiles" + req_desc = "Requires a SMG-25 or ALF-51B." + item_typepath = /obj/item/jetpack_marine/heavy + jobs_supported = list(SQUAD_MARINE) + item_whitelist = list( + /obj/item/weapon/gun/smg/m25/magharness = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/rifle/alf_machinecarbine/assault = ITEM_SLOT_SUITSTORE, + ) + +//special unlockable +/datum/loadout_item/back/marine_shotgun + name = "SH-35" + desc = "Equipped with a mag harness, bayonet, angled grip and foldable stock. \ + The SH-35 is the most commonly used shotgun of the TGMC. With good mobility and handling, it has unparalleled close range power when using buckshot. Able to kill or maim all but the most heavily armored targets with a single well aimmed blast. \ + When using flechette rounds, it can provide surprisingly powerful long range damage with good penetration, although its low rate of fire means its sustained damage is relatively poor. \ + Uses 12 gauge shells." + ui_icon = "t35" + purchase_cost = 25 + item_typepath = /obj/item/weapon/gun/shotgun/pump/t35/standard + jobs_supported = list(SQUAD_MARINE, SQUAD_LEADER) + loadout_item_flags = NONE + +/datum/loadout_item/back/marine_shotgun/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/shotgun/buckshot, SLOT_R_HAND) + +/datum/loadout_item/back/tgmc_heam_rocket_bag + name = "HEAM rocket bag" + desc = "Unlocked for free with the Heavy weapon specialisation perk. This backpack holds 4 67mm high explosive anti mech shells, in addition to a recoiless rifle. \ + The recoiless rifle is a powerful support weapon that deals significant damage against heavily armored mechs or vehicles, \ + but will generally devastate any human target unfortunate enough to be hit in a pinch. Has a draw delay and has poor accuracy against human targets." + ui_icon = "t160" + unlock_cost = 300 + purchase_cost = 100 + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE + quantity = 2 + item_typepath = /obj/item/storage/holster/backholster/rpg/heam + jobs_supported = list(SQUAD_MARINE) + +/datum/loadout_item/back/machete + name = "Machete" + desc = "A large leather scabbard carrying a M2132 machete. It can be strapped to the back, waist or armor. Extremely dangerous against human opponents - if you can get close enough." + ui_icon = "machete" + item_typepath = /obj/item/storage/holster/blade/machete/full + jobs_supported = list(SQUAD_MARINE, SQUAD_LEADER) + loadout_item_flags = NONE + +//corpsman +/datum/loadout_item/back/corpsman_satchel + name = "Medical satchel" + desc = "A heavy-duty satchel carried by some TGMC corpsmen. You can recharge defibrillators by plugging them in. Carries less than a backpack, but items can be drawn instantly." + item_typepath = /obj/item/storage/backpack/marine/corpsman/satchel + jobs_supported = list(SQUAD_CORPSMAN) + +/datum/loadout_item/back/corpsman_backpack + name = "Medical backpack" + desc = "The standard-issue backpack worn by TGMC corpsmen. You can recharge defibrillators by plugging them in. Carries more than a satchel but has a draw delay." + item_typepath = /obj/item/storage/backpack/marine/corpsman + jobs_supported = list(SQUAD_CORPSMAN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +//engineer +/datum/loadout_item/back/engineerpack + name = "Sentry welderpack" + desc = "A specialized backpack worn by TGMC technicians. It carries a fueltank for quick welder refueling. Loaded with 2 point defense sentries, excellent for defending areas or establishing killboxes." + item_typepath = /obj/item/storage/backpack/marine/engineerpack + jobs_supported = list(SQUAD_ENGINEER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/back/engineerpack/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/sentry/mini/combat_patrol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/sentry/mini/combat_patrol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/minisentry, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/minisentry, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/dylovene, SLOT_IN_BACKPACK) + +/datum/loadout_item/back/tgmc_rocket_bag + name = "Rocket bag" + desc = "This backpack holds 4 67mm shells, in addition to a recoiless rifle. \ + A powerful ranged weapon with a wide area of effect, the recoiless rifle is a powerful support weapon that can severely wound whole groups of opponents in a single shot. Has a draw delay." + ui_icon = "t160" + purchase_cost = 100 + quantity = 2 + item_typepath = /obj/item/storage/holster/backholster/rpg/low_impact + jobs_supported = list(SQUAD_ENGINEER) + +/datum/loadout_item/back/tech_backpack + name = "Demolition backpack" + desc = "The standard-issue backpack worn by TGMC technicians. Filled with a tremendous amount of detpacks, C4, claymores and grenades. Has a draw delay." + item_typepath = /obj/item/storage/backpack/marine/tech + jobs_supported = list(SQUAD_ENGINEER) + +/datum/loadout_item/back/tech_backpack/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/minelayer, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/explosive_mines/large, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/explosive_mines/large, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/detpack, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/assembly/signaler, SLOT_IN_BACKPACK) + +//smartgunner +/datum/loadout_item/back/sg_minigun_powerpack + name = "SG-85 powerpack" + desc = "A reinforced backpack heavy with the IFF altered ammunition, onboard micro generator, and extensive cooling system which enables the SG-85 gatling gun to operate. \ + Use the SG-85 on the backpack itself to connect them." + req_desc = "Requires an SG-85." + item_typepath = /obj/item/ammo_magazine/minigun_powerpack/smartgun + jobs_supported = list(SQUAD_SMARTGUNNER) + item_whitelist = list(/obj/item/weapon/gun/minigun/smart_minigun/motion_detector = ITEM_SLOT_SUITSTORE) diff --git a/code/datums/gamemodes/campaign/loadout_items/_TGMC/belt.dm b/code/datums/gamemodes/campaign/loadout_items/_TGMC/belt.dm new file mode 100644 index 0000000000000..a84775408f085 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/_TGMC/belt.dm @@ -0,0 +1,142 @@ +/datum/loadout_item/belt + item_slot = ITEM_SLOT_BELT + +/datum/loadout_item/belt/empty + name = "no belt" + desc = "" + ui_icon = "empty" + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + jobs_supported = list( + SQUAD_MARINE, + SQUAD_CORPSMAN, + SQUAD_ENGINEER, + SQUAD_SMARTGUNNER, + SQUAD_LEADER, + FIELD_COMMANDER, + STAFF_OFFICER, + CAPTAIN, + SOM_SQUAD_MARINE, + SOM_SQUAD_CORPSMAN, + SOM_SQUAD_ENGINEER, + SOM_SQUAD_VETERAN, + SOM_SQUAD_LEADER, + SOM_FIELD_COMMANDER, + SOM_STAFF_OFFICER, + SOM_COMMANDER, + ) + + +/datum/loadout_item/belt/ammo_belt + name = "Ammo belt" + desc = "The M276 is the standard load-bearing equipment of the TGMC. It consists of a modular belt with various clips. This version is the standard variant designed for bulk ammunition-carrying operations." + item_typepath = /obj/item/storage/belt/marine + jobs_supported = list(SQUAD_MARINE, SQUAD_ENGINEER, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + item_blacklist = list( + /obj/item/weapon/gun/rifle/standard_smartmachinegun/patrol = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/minigun/smart_minigun/motion_detector = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/flamer/big_flamer/marinestandard/wide = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/standard_mmg/machinegunner = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/rifle/standard_gpmg/machinegunner = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/shotgun/pump/t35/standard = ITEM_SLOT_SUITSTORE, + ) + +/datum/loadout_item/belt/sparepouch + name = "G8 pouch" + desc = "A small, lightweight pouch that can be clipped onto Armat Systems M3 Pattern armor or your belt to provide additional storage for miscellaneous gear or box and drum magazines." + item_typepath = /obj/item/storage/belt/sparepouch + jobs_supported = list(SQUAD_MARINE) + +/datum/loadout_item/belt/sparepouch/smartgunner + desc = "A general storage pouch. \ + Contains a MP-19 sidearm, and spare ammo for the SG-85, or addition drum magazines for the SG-29." //contents handled by the SG-85 + req_desc = "Requires an SG-85." + jobs_supported = list(SQUAD_SMARTGUNNER) + item_whitelist = list( + /obj/item/weapon/gun/minigun/smart_minigun/motion_detector = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/rifle/standard_smartmachinegun/patrol = ITEM_SLOT_SUITSTORE, + ) + +/datum/loadout_item/belt/shotgun_mixed + name = "Shotgun shell rig" + desc = "An ammunition belt designed to hold shotgun shells or individual bullets. Loaded full of buckshot and flechette shells." + item_typepath = /obj/item/storage/belt/shotgun/mixed + jobs_supported = list(SQUAD_MARINE) + +/datum/loadout_item/belt/smg_holster + name = "SMG-25 holster" + desc = "The M276 is the standard load-bearing equipment of the TGMC. It consists of a modular belt with various clips. \ + This version is designed for the SMG-25, and features a larger frame to support the gun. Due to its unorthodox design, it isn't a very common sight, and is only specially issued." + ui_icon = "m25" + item_typepath = /obj/item/storage/holster/m25 + jobs_supported = list(SQUAD_MARINE) + item_whitelist = list( + /obj/item/weapon/gun/smg/m25/magharness = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/flamer/big_flamer/marinestandard/wide = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/standard_mmg/machinegunner = ITEM_SLOT_SUITSTORE, + ) + +/datum/loadout_item/belt/smg_holster/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/m25/holstered(wearer), SLOT_IN_HOLSTER) + +/datum/loadout_item/belt/machete + name = "Machete" + desc = "A large leather scabbard carrying a M2132 machete. It can be strapped to the back, waist or armor. Extremely dangerous against human opponents - if you can get close enough." + ui_icon = "machete" + item_typepath = /obj/item/storage/holster/blade/machete/full + jobs_supported = list(SQUAD_MARINE, SQUAD_LEADER) + +/datum/loadout_item/belt/belt_harness + name = "Belt harness" + desc = "A shoulder worn strap with clamps that can attach to most anything. Should keep you from losing your weapon, hopefully." + item_typepath = /obj/item/belt_harness/marine + jobs_supported = list(SQUAD_MARINE, SQUAD_ENGINEER, SQUAD_LEADER, FIELD_COMMANDER) + +/datum/loadout_item/belt/belt_harness/smart_gunner + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + jobs_supported = list(SQUAD_SMARTGUNNER) + +//medic +/datum/loadout_item/belt/lifesaver + name = "Lifesaver bag" + desc = "The M276 is the standard load-bearing equipment of the TGMC. This configuration mounts a duffel bag filled with a range of injectors and light medical supplies and is common among medics." + ui_icon = "medkit" + item_typepath = /obj/item/storage/belt/lifesaver/quick + jobs_supported = list(SQUAD_CORPSMAN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +//FC +/datum/loadout_item/belt/officer_sword + name = "Officers sword" + desc = "This appears to be a rather old blade that has been well taken care of, it is probably a family heirloom. \ + Well made and extremely sharp, despite its probable non-combat purpose. Comes in a leather scabbard that an attached to your waist or armor." + ui_icon = "machete" + item_typepath = /obj/item/storage/holster/blade/officer/full + jobs_supported = list(FIELD_COMMANDER) + item_blacklist = list(/obj/item/storage/holster/blade/officer/full = ITEM_SLOT_SUITSTORE) + +/datum/loadout_item/belt/fc_pistol + name = "P-1911A1-C pistol" + desc = "The P-1911A1-C is a custom modified pistol with impressive stopping power for its size. \ + Light and easy to use one handed, it suffers from a small magazine size and no auto eject feature. Comes in a holster that fits on your waist or armor. Uses .45 ACP ammunition." + ui_icon = "m1911c" + item_typepath = /obj/item/storage/holster/belt/pistol/m4a3/fieldcommander + jobs_supported = list(FIELD_COMMANDER) + item_blacklist = list(/obj/item/storage/holster/belt/pistol/m4a3/fieldcommander = ITEM_SLOT_SUITSTORE) + +//staff officer +/datum/loadout_item/belt/so_pistol + name = "RT-3 pistol" + desc = "An RT-3 target pistol, a common sight throughout the bubble and the standard sidearm for noncombat roles in the TGMC. Comes in a holster to fit on your waist. uses 9mm caseless ammunition." + ui_icon = "rt3" + item_typepath = /obj/item/storage/holster/belt/pistol/m4a3/officer + jobs_supported = list(STAFF_OFFICER) + +//captain +/datum/loadout_item/belt/smart_pistol + name = "SP-13 pistol" + desc = "The SP-13 is a IFF-capable sidearm used by the TerraGov Marine Corps. Has good damage, penetration and magazine capacity. \ + Expensive to manufacture, this sophisticated pistol is only occassionally used by smartgunners, or some higher ranking officers who have the skills to use it. Uses 9x19mm Parabellum ammunition." + ui_icon = "pistol" + item_typepath = /obj/item/storage/holster/belt/pistol/smart_pistol/full + jobs_supported = list(CAPTAIN) diff --git a/code/datums/gamemodes/campaign/loadout_items/_TGMC/ears.dm b/code/datums/gamemodes/campaign/loadout_items/_TGMC/ears.dm new file mode 100644 index 0000000000000..86c8613a0f4a1 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/_TGMC/ears.dm @@ -0,0 +1,42 @@ +//ears +/datum/loadout_item/ears + item_slot = ITEM_SLOT_EARS + +/datum/loadout_item/ears/empty + name = "no headset" + desc = "" + ui_icon = "empty" + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + jobs_supported = list( + SQUAD_MARINE, + SQUAD_CORPSMAN, + SQUAD_ENGINEER, + SQUAD_SMARTGUNNER, + SQUAD_LEADER, + FIELD_COMMANDER, + STAFF_OFFICER, + CAPTAIN, + SOM_SQUAD_MARINE, + SOM_SQUAD_CORPSMAN, + SOM_SQUAD_ENGINEER, + SOM_SQUAD_VETERAN, + SOM_SQUAD_LEADER, + SOM_FIELD_COMMANDER, + SOM_STAFF_OFFICER, + SOM_COMMANDER, + ) + + +/datum/loadout_item/ears/marine_standard + name = "Standard headset" + desc = "A headset, allowing for communication with your team and access to the tactical minimap. You're in for a bad time if you don't use this." + item_typepath = /obj/item/radio/headset/mainship/marine + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_ENGINEER, SQUAD_SMARTGUNNER, SQUAD_LEADER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/ears/marine_command + name = "Command headset" + desc = "A command headset, allowing for communication with all squads and access to the tactical minimap. You're in for a bad time if you don't use this." + item_typepath = /obj/item/radio/headset/mainship/mcom + jobs_supported = list(FIELD_COMMANDER, STAFF_OFFICER, CAPTAIN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE diff --git a/code/datums/gamemodes/campaign/loadout_items/_TGMC/eyes.dm b/code/datums/gamemodes/campaign/loadout_items/_TGMC/eyes.dm new file mode 100644 index 0000000000000..fdf9f54baa04b --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/_TGMC/eyes.dm @@ -0,0 +1,61 @@ +/datum/loadout_item/eyes + item_slot = ITEM_SLOT_EYES + +/datum/loadout_item/eyes/empty + name = "no eyewear" + desc = "" + ui_icon = "empty" + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + jobs_supported = list( + SQUAD_MARINE, + SQUAD_CORPSMAN, + SQUAD_ENGINEER, + SQUAD_SMARTGUNNER, + SQUAD_LEADER, + FIELD_COMMANDER, + STAFF_OFFICER, + CAPTAIN, + SOM_SQUAD_MARINE, + SOM_SQUAD_CORPSMAN, + SOM_SQUAD_ENGINEER, + SOM_SQUAD_VETERAN, + SOM_SQUAD_LEADER, + SOM_FIELD_COMMANDER, + SOM_STAFF_OFFICER, + SOM_COMMANDER, + ) + + +/datum/loadout_item/eyes/ballistic_goggles + name = "Ballistic goggles" + desc = "Standard issue TGMC goggles. Mostly used to decorate one's helmet." + item_typepath = /obj/item/clothing/glasses/mgoggles + jobs_supported = list(SQUAD_MARINE, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER) + +/datum/loadout_item/eyes/health_hud + name = "HealthMate HUD" + desc = "A heads-up display that scans the humans in view and provides accurate data about their health status. The projector can be attached to compatable eyewear." + item_typepath = /obj/item/clothing/glasses/hud/health + jobs_supported = list(SQUAD_CORPSMAN, SQUAD_LEADER, FIELD_COMMANDER, STAFF_OFFICER, CAPTAIN, SOM_SQUAD_CORPSMAN, SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER, SOM_STAFF_OFFICER, SOM_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/eyes/mesons + name = "Meson scanner" + desc = "Used to shield the user's eyes from harmful electromagnetic emissions, also used as general safety goggles. \ + Not adequate as welding protection. Allows the user to see structural information about their surroundings." + item_typepath = /obj/item/clothing/glasses/meson + jobs_supported = list(SQUAD_ENGINEER, SOM_SQUAD_ENGINEER, SOM_SQUAD_VETERAN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/eyes/welding + name = "Welding goggles" + desc = "Protects the eyes from welders, approved by the mad scientist association." + item_typepath = /obj/item/clothing/glasses/welding + jobs_supported = list(SQUAD_MARINE, SQUAD_ENGINEER, SOM_SQUAD_MARINE, SOM_SQUAD_VETERAN) + +/datum/loadout_item/eyes/smartgun_imagers + name = "KTLD sight" + desc = "A headset and goggles system made to pair with any KTLD weapon, such as the SG type weapons. Has a low-res short range imager, allowing for view of terrain." + item_typepath = /obj/item/clothing/glasses/night/m56_goggles + jobs_supported = list(SQUAD_SMARTGUNNER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE diff --git a/code/datums/gamemodes/campaign/loadout_items/_TGMC/feet.dm b/code/datums/gamemodes/campaign/loadout_items/_TGMC/feet.dm new file mode 100644 index 0000000000000..235a1cce951e8 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/_TGMC/feet.dm @@ -0,0 +1,55 @@ +/datum/loadout_item/feet + item_slot = ITEM_SLOT_FEET + ui_icon = "boots" + +/datum/loadout_item/feet/empty + name = "no footwear" + desc = "" + ui_icon = "empty" + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + jobs_supported = list( + SQUAD_MARINE, + SQUAD_CORPSMAN, + SQUAD_ENGINEER, + SQUAD_SMARTGUNNER, + SQUAD_LEADER, + FIELD_COMMANDER, + STAFF_OFFICER, + CAPTAIN, + SOM_SQUAD_MARINE, + SOM_SQUAD_CORPSMAN, + SOM_SQUAD_ENGINEER, + SOM_SQUAD_VETERAN, + SOM_SQUAD_LEADER, + SOM_FIELD_COMMANDER, + SOM_STAFF_OFFICER, + SOM_COMMANDER, + ) + + +/datum/loadout_item/feet/marine_boots + name = "Combat boots" + desc = "Standard issue combat boots for combat scenarios or combat situations. All combat, all the time." + item_typepath = /obj/item/clothing/shoes/marine/full + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_ENGINEER, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER, STAFF_OFFICER, CAPTAIN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/feet/marine_brown_boots + name = "Brown boots" + desc = "Standard issue combat boots for combat scenarios or combat situations. All combat, all the time." + item_typepath = /obj/item/clothing/shoes/marine/brown/full + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_ENGINEER, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER, STAFF_OFFICER, CAPTAIN) + +/datum/loadout_item/feet/white_dress + name = "Dress shoes" + desc = "Fancy white shoes to go with your white dress uniform. Do not come with a combat knife." + item_typepath = /obj/item/clothing/shoes/white + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_ENGINEER, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER, STAFF_OFFICER, CAPTAIN) + +//Captain +/datum/loadout_item/feet/captain + name = "Captain's shoes" + desc = "Has special soles for better trampling those underneath." + item_typepath = /obj/item/clothing/shoes/marinechief/captain + jobs_supported = list(CAPTAIN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE diff --git a/code/datums/gamemodes/campaign/loadout_items/_TGMC/gloves.dm b/code/datums/gamemodes/campaign/loadout_items/_TGMC/gloves.dm new file mode 100644 index 0000000000000..a843259d36831 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/_TGMC/gloves.dm @@ -0,0 +1,84 @@ +/datum/loadout_item/gloves + item_slot = ITEM_SLOT_GLOVES + +/datum/loadout_item/gloves/empty + name = "no gloves" + desc = "" + ui_icon = "empty" + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + jobs_supported = list( + SQUAD_MARINE, + SQUAD_CORPSMAN, + SQUAD_ENGINEER, + SQUAD_SMARTGUNNER, + SQUAD_LEADER, + FIELD_COMMANDER, + STAFF_OFFICER, + CAPTAIN, + SOM_SQUAD_MARINE, + SOM_SQUAD_CORPSMAN, + SOM_SQUAD_ENGINEER, + SOM_SQUAD_VETERAN, + SOM_SQUAD_LEADER, + SOM_FIELD_COMMANDER, + SOM_STAFF_OFFICER, + SOM_COMMANDER, + ) + + +/datum/loadout_item/gloves/marine_gloves + name = "Combat gloves" + desc = "Standard issue marine tactical gloves. It reads: 'knit by Marine Widows Association'." + item_typepath = /obj/item/clothing/gloves/marine + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/gloves/marine_black_gloves + name = "Blk combat gloves" + desc = "Standard issue marine tactical gloves but black! It reads: 'knit by Marine Widows Association'." + item_typepath = /obj/item/clothing/gloves/marine/black + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER) + +/datum/loadout_item/gloves/marine_fingerless + name = "Fingerless gloves" + desc = "Standard issue marine tactical gloves but fingerless! It reads: 'knit by Marine Widows Association'." + item_typepath = /obj/item/clothing/gloves/marine/fingerless + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER) + +/datum/loadout_item/gloves/white_dress + name = "Dress gloves" + desc = "Fancy white gloves to go with your white dress uniform." + item_typepath = /obj/item/clothing/gloves/white + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_ENGINEER, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER, STAFF_OFFICER, CAPTAIN) + +//corpsman +/datum/loadout_item/gloves/defib_gloves + name = "Defib gloves" + desc = "Advanced medical gloves, these include small electrodes to defibrilate a patient No more bulky units!" + purchase_cost = 50 + item_typepath = /obj/item/clothing/gloves/defibrillator + jobs_supported = list(SQUAD_CORPSMAN) + +//engineer +/datum/loadout_item/gloves/insulated + name = "Insulated gloves" + desc = "Insulated marine tactical gloves that protect against electrical shocks." + item_typepath = /obj/item/clothing/gloves/marine/insulated + jobs_supported = list(SQUAD_ENGINEER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +//FC +/datum/loadout_item/gloves/officer_gloves + name = "Officer gloves" + desc = "Shiny and impressive. They look expensive." + item_typepath = /obj/item/clothing/gloves/marine/officer + jobs_supported = list(FIELD_COMMANDER, STAFF_OFFICER, CAPTAIN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +//captain +/datum/loadout_item/gloves/captain_gloves + name = "Captain's gloves" + desc = "You may like these gloves, but THEY think you are unworthy of them." + item_typepath = /obj/item/clothing/gloves/marine/techofficer/captain + jobs_supported = list(CAPTAIN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE diff --git a/code/datums/gamemodes/campaign/loadout_items/_TGMC/head.dm b/code/datums/gamemodes/campaign/loadout_items/_TGMC/head.dm new file mode 100644 index 0000000000000..1d8e31e44012e --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/_TGMC/head.dm @@ -0,0 +1,118 @@ +/datum/loadout_item/helmet + item_slot = ITEM_SLOT_HEAD + ui_icon = "helmet" + +/datum/loadout_item/helmet/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat, SLOT_IN_HEAD) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_HEAD) + +/datum/loadout_item/helmet/empty + name = "no helmet" + desc = "" + ui_icon = "empty" + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + jobs_supported = list( + SQUAD_MARINE, + SQUAD_CORPSMAN, + SQUAD_ENGINEER, + SQUAD_SMARTGUNNER, + SQUAD_LEADER, + FIELD_COMMANDER, + STAFF_OFFICER, + CAPTAIN, + SOM_SQUAD_MARINE, + SOM_SQUAD_CORPSMAN, + SOM_SQUAD_ENGINEER, + SOM_SQUAD_VETERAN, + SOM_SQUAD_LEADER, + SOM_FIELD_COMMANDER, + SOM_STAFF_OFFICER, + SOM_COMMANDER, + ) + + +/datum/loadout_item/helmet/standard + name = "M10X helmet" + desc = "A standard TGMC combat helmet. Apply to head for best results." + item_typepath = /obj/item/clothing/head/modular/m10x + jobs_supported = list(SQUAD_MARINE, SQUAD_SMARTGUNNER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/helmet/leader + name = "M11X helmet" + desc = "An upgraded helmet for protecting upgraded brains." + item_typepath = /obj/item/clothing/head/modular/m10x/leader + jobs_supported = list(SQUAD_LEADER, FIELD_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/helmet/surt + name = "Surt helmet" + desc = "A standard combat helmet with a Surt fireproof module." + req_desc = "Requires a suit with a Surt module." + item_typepath = /obj/item/clothing/head/modular/m10x/surt + jobs_supported = list(SQUAD_MARINE) + item_whitelist = list(/obj/item/clothing/suit/modular/xenonauten/heavy/surt = ITEM_SLOT_OCLOTHING) + +/datum/loadout_item/helmet/tyr + name = "Tyr helmet" + desc = "A standard combat helmet with a Tyr extra armor module." + req_desc = "Requires a suit with a Tyr module." + ui_icon = "tyr" + item_typepath = /obj/item/clothing/head/modular/m10x/tyr + jobs_supported = list(SQUAD_MARINE) + item_whitelist = list(/obj/item/clothing/suit/modular/xenonauten/heavy/tyr_two = ITEM_SLOT_OCLOTHING) + + +/datum/loadout_item/helmet/tyr/smartgunner + jobs_supported = list(SQUAD_SMARTGUNNER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/helmet/white_dress + name = "Dress Cap" + desc = "The dress white cap for your dress uniform. Pride is your shield, because this isn't." + item_typepath = /obj/item/clothing/head/white_dress + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_ENGINEER, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER, STAFF_OFFICER, CAPTAIN) + +/datum/loadout_item/helmet/mimir + name = "Mimir helmet" + desc = "A standard combat helmet with a Mimir environmental protection module." + req_desc = "Requires a suit with a Mimir module." + item_typepath = /obj/item/clothing/head/modular/m10x/mimir + jobs_supported = list(SQUAD_CORPSMAN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/helmet/mimir/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/neuraline, SLOT_IN_HEAD) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/neuraline, SLOT_IN_HEAD) + +/datum/loadout_item/helmet/engineer + name = "M10X-W helmet" + desc = "A standard combat helmet with a welding module." + item_typepath = /obj/item/clothing/head/modular/m10x/welding + jobs_supported = list(SQUAD_ENGINEER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/helmet/engineer/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_HEAD) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_HEAD) + +/datum/loadout_item/helmet/field_commander_beret + name = "FC beret" + desc = "A beret with the field commander insignia emblazoned on it. It commands loyalty and bravery in all who gaze upon it." + item_typepath = /obj/item/clothing/head/tgmcberet/fc + jobs_supported = list(FIELD_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/helmet/staff_officer_cap + name = "Officer cap" + desc = "A hat usually worn by officers in the TGMC. While it has limited combat functionality, some prefer to wear it instead of the standard issue helmet." + item_typepath = /obj/item/clothing/head/tgmccap/ro + jobs_supported = list(STAFF_OFFICER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/helmet/captain_beret + name = "Captain Beret" + desc = "A beret worn by ship's captains. You thought it would have been more fancy." + item_typepath = /obj/item/clothing/head/tgmcberet/tan + jobs_supported = list(CAPTAIN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE diff --git a/code/datums/gamemodes/campaign/loadout_items/_TGMC/mask.dm b/code/datums/gamemodes/campaign/loadout_items/_TGMC/mask.dm new file mode 100644 index 0000000000000..48618d354d8c2 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/_TGMC/mask.dm @@ -0,0 +1,51 @@ +/datum/loadout_item/mask + item_slot = ITEM_SLOT_MASK + +/datum/loadout_item/mask/empty + name = "no mask" + desc = "" + ui_icon = "empty" + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + jobs_supported = list( + SQUAD_MARINE, + SQUAD_CORPSMAN, + SQUAD_ENGINEER, + SQUAD_SMARTGUNNER, + SQUAD_LEADER, + FIELD_COMMANDER, + STAFF_OFFICER, + CAPTAIN, + SOM_SQUAD_MARINE, + SOM_SQUAD_CORPSMAN, + SOM_SQUAD_ENGINEER, + SOM_SQUAD_VETERAN, + SOM_SQUAD_LEADER, + SOM_FIELD_COMMANDER, + SOM_STAFF_OFFICER, + SOM_COMMANDER, + ) + +/datum/loadout_item/mask/standard + name = "Std gas mask" + desc = "A face-covering mask that can be connected to an air supply. Filters harmful gases from the air." + item_typepath = /obj/item/clothing/mask/gas + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_ENGINEER, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER, SOM_SQUAD_MARINE, SOM_SQUAD_CORPSMAN, SOM_SQUAD_ENGINEER, SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/mask/tactical + name = "Tac gas mask" + desc = "A face-covering mask that can be connected to an air supply. Filters harmful gases from the air. This one is supposedly more tactical than the standard model." + item_typepath = /obj/item/clothing/mask/gas/tactical + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_ENGINEER, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER, SOM_SQUAD_MARINE, SOM_SQUAD_CORPSMAN, SOM_SQUAD_ENGINEER, SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER) + +/datum/loadout_item/mask/skimask + name = "Ski mask" + desc = "A stylish skimask, can be recolored. Makes you feel like an operator just looking at it." + item_typepath = /obj/item/clothing/mask/gas/modular/skimask + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_ENGINEER, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER) + +/datum/loadout_item/mask/coof + name = "Combat face mask" + desc = "The CFCC is a prime and readied, yet stylish facemask ready to... cover your face." + item_typepath = /obj/item/clothing/mask/gas/modular/coofmask + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_ENGINEER, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER) diff --git a/code/datums/gamemodes/campaign/loadout_items/_TGMC/pockets.dm b/code/datums/gamemodes/campaign/loadout_items/_TGMC/pockets.dm new file mode 100644 index 0000000000000..6937dbcc02c19 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/_TGMC/pockets.dm @@ -0,0 +1,223 @@ +//r_pocket +/datum/loadout_item/r_pocket + item_slot = ITEM_SLOT_R_POCKET + +/datum/loadout_item/r_pocket/empty + name = "no right pocket" + desc = "" + ui_icon = "empty" + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + jobs_supported = list( + SQUAD_MARINE, + SQUAD_CORPSMAN, + SQUAD_ENGINEER, + SQUAD_SMARTGUNNER, + SQUAD_LEADER, + FIELD_COMMANDER, + STAFF_OFFICER, + CAPTAIN, + SOM_SQUAD_MARINE, + SOM_SQUAD_CORPSMAN, + SOM_SQUAD_ENGINEER, + SOM_SQUAD_VETERAN, + SOM_SQUAD_LEADER, + SOM_FIELD_COMMANDER, + SOM_STAFF_OFFICER, + SOM_COMMANDER, + ) + + +/datum/loadout_item/r_pocket/standard_first_aid + name = "First aid pouch" + desc = "Standard marine first-aid pouch. Contains a basic set of medical supplies." + ui_icon = "medkit" + item_typepath = /obj/item/storage/pouch/firstaid/combat_patrol + jobs_supported = list(SQUAD_MARINE, SQUAD_SMARTGUNNER) + +/datum/loadout_item/r_pocket/standard_first_aid/standard_improved + desc = "Standard marine first-aid pouch. Contains a improved set of medical supplies." + item_typepath = /obj/item/storage/pouch/firstaid/combat_patrol_leader + loadout_item_flags = null + +/datum/loadout_item/r_pocket/standard_first_aid/improved + desc = "Standard marine first-aid pouch. Contains a improved set of medical supplies." + item_typepath = /obj/item/storage/pouch/firstaid/combat_patrol_leader + jobs_supported = list(SQUAD_LEADER, FIELD_COMMANDER) + +/datum/loadout_item/r_pocket/marine_support_grenades + name = "Support nades" + desc = "A pouch carrying a set of six standard support grenades." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/grenade/combat_patrol + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/r_pocket/marine_standard_grenades + name = "Standard nades" + desc = "A pouch carrying a set of six standard offensive grenades. Contains HE, lasburster and incendiary grenades." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/grenade/standard + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER) + +/datum/loadout_item/r_pocket/shotgun + name = "Buckshot shells" + desc = "A pouch specialized for holding shotgun ammo. Contains buckshot shells." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/shotgun + jobs_supported = list(SQUAD_MARINE, SQUAD_LEADER) + +/datum/loadout_item/r_pocket/shotgun/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/buckshot, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/buckshot, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/buckshot, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/buckshot, SLOT_IN_R_POUCH) + +/datum/loadout_item/r_pocket/marine_construction + name = "Construction pouch" + desc = "A pouch containing an assortment of construction supplies. Allows for the rapid establishment of fortified positions." + ui_icon = "materials" + item_typepath = /obj/item/storage/pouch/construction + jobs_supported = list(SQUAD_MARINE) + +/datum/loadout_item/r_pocket/marine_construction/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/tool/shovel/etool, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/stack/sandbags_empty/half, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/stack/sandbags/large_stack, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/stack/barbed_wire/full, SLOT_IN_R_POUCH) + +/datum/loadout_item/r_pocket/magazine + name = "Mag pouch-P" + desc = "A pouch containing three ammo magazines. Will contain a primary ammo type where applicable." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/magazine/large + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER) + item_blacklist = list( + /obj/item/weapon/gun/rifle/standard_smartmachinegun/patrol = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/minigun/smart_minigun/motion_detector = ITEM_SLOT_SUITSTORE, + ) + +/datum/loadout_item/r_pocket/tools + name = "Tool pouch" + desc = "It's designed to hold maintenance tools - screwdriver, wrench, cable coil, etc. It also has a hook for an entrenching tool." + ui_icon = "construction" + item_typepath = /obj/item/storage/pouch/tools/full + jobs_supported = list(SQUAD_ENGINEER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/r_pocket/general + name = "General pouch" + desc = "A general purpose pouch used to carry small items." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/general/large + jobs_supported = list(STAFF_OFFICER, CAPTAIN) + +//l_pocket +/datum/loadout_item/l_pocket + item_slot = ITEM_SLOT_L_POCKET + +/datum/loadout_item/l_pocket/empty + name = "no left pocket" + desc = "" + ui_icon = "empty" + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + jobs_supported = list( + SQUAD_MARINE, + SQUAD_CORPSMAN, + SQUAD_ENGINEER, + SQUAD_SMARTGUNNER, + SQUAD_LEADER, + FIELD_COMMANDER, + STAFF_OFFICER, + CAPTAIN, + SOM_SQUAD_MARINE, + SOM_SQUAD_CORPSMAN, + SOM_SQUAD_ENGINEER, + SOM_SQUAD_VETERAN, + SOM_SQUAD_LEADER, + SOM_FIELD_COMMANDER, + SOM_STAFF_OFFICER, + SOM_COMMANDER, + ) + + +/datum/loadout_item/l_pocket/standard_first_aid + name = "First aid pouch" + desc = "Standard marine first-aid pouch. Contains a basic set of medical supplies." + ui_icon = "medkit" + item_typepath = /obj/item/storage/pouch/firstaid/combat_patrol + jobs_supported = list(SQUAD_MARINE, SQUAD_ENGINEER, SQUAD_SMARTGUNNER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/l_pocket/standard_first_aid/standard_improved + desc = "Standard marine first-aid pouch. Contains a improved set of medical supplies." + item_typepath = /obj/item/storage/pouch/firstaid/combat_patrol_leader + loadout_item_flags = null + +/datum/loadout_item/l_pocket/standard_first_aid/improved + desc = "Standard marine first-aid pouch. Contains a improved set of medical supplies." + item_typepath = /obj/item/storage/pouch/firstaid/combat_patrol_leader + jobs_supported = list(SQUAD_LEADER, FIELD_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/l_pocket/marine_support_grenades + name = "Support nades" + desc = "A pouch carrying a set of six standard support grenades. Includes smoke grenades of both lethal and nonlethal varieties, as well as stun grenades." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/grenade/combat_patrol + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_ENGINEER, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER) + +/datum/loadout_item/l_pocket/marine_standard_grenades + name = "Standard nades" + desc = "A pouch carrying a set of six standard offensive grenades. Contains HE, lasburster and incendiary grenades." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/grenade/standard + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_ENGINEER, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER) + +/datum/loadout_item/l_pocket/shotgun + name = "Flechette shells" + desc = "A pouch specialized for holding shotgun ammo. Contains Flechette shells." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/shotgun + jobs_supported = list(SQUAD_MARINE, SQUAD_LEADER) + +/datum/loadout_item/l_pocket/shotgun/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/flechette, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/flechette, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/flechette, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/flechette, SLOT_IN_L_POUCH) + +/datum/loadout_item/l_pocket/marine_construction + name = "Construction pouch" + desc = "A pouch containing an assortment of construction supplies. Allows for the rapid establishment of fortified positions." + ui_icon = "materials" + item_typepath = /obj/item/storage/pouch/construction + jobs_supported = list(SQUAD_MARINE) + +/datum/loadout_item/l_pocket/marine_construction/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/tool/shovel/etool, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/stack/sandbags_empty/half, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/stack/sandbags/large_stack, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/stack/barbed_wire/full, SLOT_IN_L_POUCH) + +/datum/loadout_item/l_pocket/magazine + name = "Mag pouch-S" + desc = "A pouch containing three ammo magazines. Will contain a secondary ammo type where applicable." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/magazine/large + jobs_supported = list(SQUAD_MARINE, SQUAD_ENGINEER, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER) + item_blacklist = list( + /obj/item/weapon/gun/rifle/standard_smartmachinegun/patrol = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/minigun/smart_minigun/motion_detector = ITEM_SLOT_SUITSTORE, + ) + + +/datum/loadout_item/l_pocket/magazine/medic + jobs_supported = list(SQUAD_CORPSMAN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/l_pocket/general + name = "General pouch" + desc = "A general purpose pouch used to carry small items." + ui_icon = "grenade" + item_typepath = /obj/item/storage/pouch/general/large + jobs_supported = list(STAFF_OFFICER, CAPTAIN) diff --git a/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit.dm b/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit.dm new file mode 100644 index 0000000000000..e384506ead8e7 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit.dm @@ -0,0 +1,188 @@ +/datum/loadout_item/suit_slot + item_slot = ITEM_SLOT_OCLOTHING + +/datum/loadout_item/suit_slot/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/gauze, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/ointment, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/isotonic, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclot, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/dylovene, SLOT_IN_SUIT) + +/datum/loadout_item/suit_slot/empty + name = "no suit" + desc = "" + ui_icon = "empty" + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + jobs_supported = list( + SQUAD_MARINE, + SQUAD_CORPSMAN, + SQUAD_ENGINEER, + SQUAD_SMARTGUNNER, + SQUAD_LEADER, + FIELD_COMMANDER, + STAFF_OFFICER, + CAPTAIN, + SOM_SQUAD_MARINE, + SOM_SQUAD_CORPSMAN, + SOM_SQUAD_ENGINEER, + SOM_SQUAD_VETERAN, + SOM_SQUAD_LEADER, + SOM_FIELD_COMMANDER, + SOM_STAFF_OFFICER, + SOM_COMMANDER, + ) + + +/datum/loadout_item/suit_slot/light_shield + name = "L shield armor" + desc = "Light armor with a Svallin shield module. Provides excellent mobility but lower protection." + ui_icon = "light_armour_shield" + item_typepath = /obj/item/clothing/suit/modular/xenonauten/light/shield + jobs_supported = list(SQUAD_MARINE, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER) + +/datum/loadout_item/suit_slot/light_shield/overclocked + desc = "Light armor with a Svallin shield module. Provides excellent mobility but lower protection. The shield module has been overclocked for improved performance." + item_typepath = /obj/item/clothing/suit/modular/xenonauten/light/shield_overclocked + jobs_supported = list(SQUAD_MARINE, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER) + loadout_item_flags = null + +/datum/loadout_item/suit_slot/light_shield/overclocked/medic + item_typepath = /obj/item/clothing/suit/modular/xenonauten/light/shield_overclocked/medic + jobs_supported = list(SQUAD_CORPSMAN) + +/datum/loadout_item/suit_slot/light_shield/overclocked/medic/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/defibrillator, SLOT_IN_SUIT) + +/datum/loadout_item/suit_slot/light_shield/overclocked/engineer + item_typepath = /obj/item/clothing/suit/modular/xenonauten/light/shield_overclocked/engineer + jobs_supported = list(SQUAD_ENGINEER) + +/datum/loadout_item/suit_slot/light_shield/overclocked/engineer/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/circuitboard/apc, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/cell/high, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/stack/sheet/plasteel/medium_stack, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/stack/barbed_wire/half_stack, SLOT_IN_SUIT) + +/datum/loadout_item/suit_slot/medium_shield + name = "M shield armor" + desc = "Medium armor with a Svallin shield module. Provides balanced mobility and protection." + ui_icon = "medium_armour_shield" + item_typepath = /obj/item/clothing/suit/modular/xenonauten/shield + jobs_supported = list(SQUAD_MARINE, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER) + +/datum/loadout_item/suit_slot/medium_shield/overclocked + desc = "Medium armor with a Svallin shield module. Provides balanced mobility and protection." + item_typepath = /obj/item/clothing/suit/modular/xenonauten/shield_overclocked + jobs_supported = list(SQUAD_MARINE, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER) + loadout_item_flags = null + +/datum/loadout_item/suit_slot/medium_shield/overclocked/medic + item_typepath = /obj/item/clothing/suit/modular/xenonauten/shield_overclocked/medic + jobs_supported = list(SQUAD_CORPSMAN) + +/datum/loadout_item/suit_slot/medium_shield/overclocked/medic/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/defibrillator, SLOT_IN_SUIT) + +/datum/loadout_item/suit_slot/medium_shield/overclocked/engineer + item_typepath = /obj/item/clothing/suit/modular/xenonauten/shield_overclocked/engineer + jobs_supported = list(SQUAD_ENGINEER) + +/datum/loadout_item/suit_slot/medium_shield/overclocked/engineer/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/circuitboard/apc, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/cell/high, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/stack/sheet/plasteel/medium_stack, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/stack/barbed_wire/half_stack, SLOT_IN_SUIT) + +/datum/loadout_item/suit_slot/heavy_shield + name = "H shield armor" + desc = "Heavy armor with a Svallin shield module. Provides excellent protection but lower mobility. The shield module has been overclocked for improved performance." + ui_icon = "heavy_armour_shield" + item_typepath = /obj/item/clothing/suit/modular/xenonauten/heavy/shield + jobs_supported = list(SQUAD_MARINE, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_slot/heavy_shield/overclocked + desc = "Heavy armor with a Svallin shield module. Provides excellent protection but lower mobility. The shield module has been overclocked for improved performance." + item_typepath = /obj/item/clothing/suit/modular/xenonauten/heavy/shield_overclocked + jobs_supported = list(SQUAD_MARINE, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER) + loadout_item_flags = null + +/datum/loadout_item/suit_slot/heavy_surt + name = "H Surt armor" + desc = "Heavy armor with a Surt fireproof module. Provides excellent protection and almost total fire immunity, but has poor mobility." + ui_icon = "heavy_armour" + req_desc = "Requires a FL-84 flamethrower." + item_typepath = /obj/item/clothing/suit/modular/xenonauten/heavy/surt + jobs_supported = list(SQUAD_MARINE) + item_whitelist = list(/obj/item/weapon/gun/flamer/big_flamer/marinestandard/wide = ITEM_SLOT_SUITSTORE) + +/datum/loadout_item/suit_slot/heavy_tyr + name = "H Tyr armor" + desc = "Heavy armor with a Tyr extra armor module. Provides incredible protection at the cost of with further reduced mobility." + req_desc = "Requires a ALF-51B or SMG-25." + ui_icon = "tyr" + item_typepath = /obj/item/clothing/suit/modular/xenonauten/heavy/tyr_two + jobs_supported = list(SQUAD_MARINE) + item_whitelist = list( + /obj/item/weapon/gun/rifle/alf_machinecarbine/assault = ITEM_SLOT_SUITSTORE, + /obj/item/weapon/gun/smg/m25/magharness = ITEM_SLOT_SUITSTORE, + ) + +/datum/loadout_item/suit_slot/heavy_tyr/smartgunner + jobs_supported = list(SQUAD_SMARTGUNNER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + item_whitelist = null + +/datum/loadout_item/suit_slot/medium_valk + name = "M Valkyrie armor" + desc = "Medium armor with a Valkyrie automedical module. Provides respectable protection, powerful automatic medical assistance, but modest mobility." + ui_icon = "medium_armour" + item_typepath = /obj/item/clothing/suit/modular/xenonauten/valk + jobs_supported = list(SQUAD_LEADER, FIELD_COMMANDER) + +/datum/loadout_item/suit_slot/heavy_valk + name = "H Valkyrie armor" + desc = "Heavy armor with a Valkyrie automedical module. Provides excellent protection, powerful automatic medical assistance, but reduced mobility." + ui_icon = "heavy_armour" + item_typepath = /obj/item/clothing/suit/modular/xenonauten/heavy/leader + jobs_supported = list(SQUAD_LEADER, FIELD_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_slot/white_dress + name = "Dress jacket" + desc = "The perfect white jacket to go with your white dress uniform. WARNING: Incompatible with almost all weapons." + item_typepath = /obj/item/clothing/suit/white_dress_jacket + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_ENGINEER, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER, STAFF_OFFICER, CAPTAIN) + +//corpsman +/datum/loadout_item/suit_slot/medium_mimir + name = "M Mimir armor" + desc = "Medium armor with a Mimir environmental protection module. Provides respectable armor and total immunity to chemical attacks, and improved radiological protection. Has modest mobility." + ui_icon = "medium_armour" + item_typepath = /obj/item/clothing/suit/modular/xenonauten/mimir + jobs_supported = list(SQUAD_CORPSMAN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_slot/medium_mimir/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/defibrillator, SLOT_IN_SUIT) + +//engineer +/datum/loadout_item/suit_slot/medium_engineer + name = "M armor" + desc = "Medium armor with engineering storage. Provides balanced armor and mobility." + ui_icon = "medium_armour" + item_typepath = /obj/item/clothing/suit/modular/xenonauten/engineer + jobs_supported = list(SQUAD_ENGINEER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_slot/medium_engineer/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/circuitboard/apc, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/cell/high, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/stack/sheet/plasteel/medium_stack, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack, SLOT_IN_SUIT) + wearer.equip_to_slot_or_del(new /obj/item/stack/barbed_wire/half_stack, SLOT_IN_SUIT) diff --git a/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage.dm b/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage.dm new file mode 100644 index 0000000000000..075ed95a295e2 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage.dm @@ -0,0 +1,61 @@ +/datum/loadout_item/suit_store + item_slot = ITEM_SLOT_SUITSTORE + +/datum/loadout_item/suit_store/empty + name = "no suit stored" + desc = "" + ui_icon = "empty" + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + jobs_supported = list( + SQUAD_MARINE, + SQUAD_CORPSMAN, + SQUAD_ENGINEER, + SQUAD_SMARTGUNNER, + SQUAD_LEADER, + FIELD_COMMANDER, + STAFF_OFFICER, + CAPTAIN, + SOM_SQUAD_MARINE, + SOM_SQUAD_CORPSMAN, + SOM_SQUAD_ENGINEER, + SOM_SQUAD_VETERAN, + SOM_SQUAD_LEADER, + SOM_FIELD_COMMANDER, + SOM_STAFF_OFFICER, + SOM_COMMANDER, + ) + + +/datum/loadout_item/suit_store/main_gun + ///Ammo type this gun will use + var/ammo_type + ///alt ammo type for this gun + var/secondary_ammo_type + +/datum/loadout_item/suit_store/main_gun/New() + . = ..() + var/obj/item/weapon/gun/weapon_type = item_typepath + if(!ammo_type) + ammo_type = weapon_type::default_ammo_type + if(!secondary_ammo_type) + secondary_ammo_type = weapon_type::default_ammo_type + +/datum/loadout_item/suit_store/main_gun/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!ammo_type) + return + if(istype(wearer.belt, /obj/item/storage/belt)) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BELT) + if(istype(wearer.l_store, /obj/item/storage/pouch/magazine)) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_L_POUCH) + if(istype(wearer.r_store, /obj/item/storage/pouch/magazine)) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_R_POUCH) diff --git a/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage/corpsman.dm b/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage/corpsman.dm new file mode 100644 index 0000000000000..61cbb778d5aa0 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage/corpsman.dm @@ -0,0 +1,298 @@ +/datum/loadout_item/suit_store/main_gun/corpsman + jobs_supported = list(SQUAD_CORPSMAN) + +/datum/loadout_item/suit_store/main_gun/corpsman/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + if(loadout.l_store == /obj/item/storage/pouch/magazine/large) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_L_POUCH) + if(loadout.r_store == /obj/item/storage/pouch/magazine/large) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_R_POUCH) + +/datum/loadout_item/suit_store/main_gun/corpsman/laser_carbine + name = "Laser carbine" + desc = "Equipped with a red dot sight and underbarrel grenade launcher. The TerraGov laser carbine is the high tech equivilent to the AR-18, with extremely good mobility and handling, and powerful medium range damage. \ + Variable firemodes gives it additional flexibility over its ballistic counterpart. Uses TE power cells that are shared across all TGMC laser weaponry." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_carbine/scout + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_store/main_gun/corpsman/laser_carbine/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/corpsman/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/corpsman/laser_rifle + name = "Laser rifle" + desc = "Equipped with amag harness, bayonet and miniflamer. The Terra Experimental laser rifle, is a powerful and flexible weapon thanks to a variety of firemodes. \ + Has good mobility and excellent falloff, although lacks the power offered by weapons with an underbarrel grenade launcher.\ + Uses TE power cells that are shared across all TGMC laser weaponry." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_rifle/medic + +/datum/loadout_item/suit_store/main_gun/corpsman/laser_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/corpsman/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/corpsman/auto_shotgun + name = "SH-15" + desc = "Equipped with a mag harness and underbarrel grenade launcher. \ + The SH-15 automatic shotgun has excellent mobility and handling, and offers powerful damage per shot. Its comparatively slow rate of fire means in a straight gunfight its overall damage output is somewhat lacking.\ + Uses 12-round 16 gauge magazines with slugs and flechette." + ui_icon = "tx15" + item_typepath = /obj/item/weapon/gun/rifle/standard_autoshotgun/engineer + secondary_ammo_type = /obj/item/ammo_magazine/rifle/tx15_flechette + +/datum/loadout_item/suit_store/main_gun/corpsman/auto_shotgun/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/corpsman/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/corpsman/skirmish_rifle + name = "AR-21" + desc = "Equipped with red dot sight, extended barrel and underbarrel grenade launcher. \ + The AR-21 is an less common rifle in the TGMC, attempting to bridge the gap between lighter, lower calibre rifles and heavier rifles like the BR-64. \ + Its compromises between the two groups means it fails to particularly outshine any of them, but never the less is a respective and flexible rifle." + ui_icon = "ballistic" + item_typepath = /obj/item/weapon/gun/rifle/standard_skirmishrifle/standard + +/datum/loadout_item/suit_store/main_gun/corpsman/skirmish_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/corpsman/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x25mm, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/corpsman/standard_smg + name = "SMG-25" + desc = "Equipped with a mag harness, recoil compensator and gyroscopic stabilizer. SMG-25 submachinegun, is a large capacity smg, able to be be used effectively one or two handed. \ + Like all smgs, it has excellent mobility and handling, but has poor damage application at longer ranges. Uses 10x20mm caseless ammunition." + ui_icon = "m25" + item_typepath = /obj/item/weapon/gun/smg/m25/magharness + +/datum/loadout_item/suit_store/main_gun/corpsman/standard_smg/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/corpsman/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x20mm, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/corpsman/standard_smg/enhanced + name = "SMG-25+" + desc = "Equipped with a mag harness, recoil compensator and gyroscopic stabilizer. SMG-25 submachinegun, is a large capacity smg, able to be be used effectively one or two handed. \ + Like all smgs, it has excellent mobility and handling, but has poor damage application at longer ranges. Uses a mix of standard and AP 10x20mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/smg/m25/ap + +/datum/loadout_item/suit_store/main_gun/corpsman/carbine + name = "AR-18" + desc = "Equipped with red dot sight, extended barrel and underbarrel grenade launcher. The AR-18 is the main weapon of the TGMC, offering excellent mobility and impressive close to medium range damage output. \ + Compared to the AR-12, it suffers from a comparatively smaller magazine size, and is less effective at longer range. Uses 10x24mm caseless ammunition." + ui_icon = "t18" + item_typepath = /obj/item/weapon/gun/rifle/standard_carbine/standard + +/datum/loadout_item/suit_store/main_gun/corpsman/carbine/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/corpsman/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x24mm, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/corpsman/carbine/enhanced + name = "AR-18+" + desc = "Equipped with mag harness, extended barrel and vertical grip. The AR-18 is the main weapon of the TGMC, offering excellent mobility and impressive close to medium range damage output. \ + Compared to the AR-12, it suffers from a comparatively smaller magazine size, and is less effective at longer range. It uses a mix of standard and AP 10x24mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/rifle/standard_carbine/ap + +/datum/loadout_item/suit_store/main_gun/corpsman/assault_rifle + name = "AR-12" + desc = "Equipped with mag harness, extended barrel and underbarrel grenade launcher. The AR-12 is the former main weapon of the TGMC before it was superceded by the AR-18 for general issue. \ + A jack of all trades weapon, effect at close and long range, with good capacity and handling, making it a reliable all-rounder. \ + It does not particularly excel in any area however, and so is overshadowed by other weapons at particular tasks. It uses 10x24mm caseless ammunition." + ui_icon = "t12" + item_typepath = /obj/item/weapon/gun/rifle/standard_assaultrifle/medic + +/datum/loadout_item/suit_store/main_gun/corpsman/assault_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/corpsman/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x24mm, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/corpsman/assault_rifle/enhanced + name = "AR-12+" + desc = "Equipped with mag harness, extended barrel and underbarrel grenade launcher. The AR-12 is the former main weapon of the TGMC before it was superceded by the AR-18 for general issue. \ + A jack of all trades weapon, effect at close and long range, with good capacity and handling, making it a reliable all-rounder. \ + It does not particularly excel in any area however, and so is overshadowed by other weapons at particular tasks. It uses a mix of standard and AP 10x24mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/rifle/standard_assaultrifle/ap + +/datum/loadout_item/suit_store/main_gun/corpsman/combat_rifle + name = "AR-11" + desc = "Equipped with a red dot sight and laser sight. The AR-11 is an old rifle of the TGMC, but is now a relatively uncommon sight. \ + It has a very large magazine capacity, and can inflict incredible damage at long range with its HV ammo, making it particularly effective at well armored targets. \ + However it suffers from relatively poor handling and mobility, and lacks any underbarrel weapon attachments, making it an effective but less flexible weapon. It uses 4.92×34mm caseless HV ammunition." + ui_icon = "tx11" + item_typepath = /obj/item/weapon/gun/rifle/tx11/standard + +/datum/loadout_item/suit_store/main_gun/corpsman/combat_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/corpsman/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/corpsman/plasma_smg + name = "PL-51" + desc = "Unlocked for free with the Advanced SMG training perk. Equipped with a red dot sight, bayonet and vertical grip. The PL-51 plasma SMG is a powerful close range weapon, with great mobility and handling. \ + Has two firemodes, with a standard reflecting shot, or a more powerful AOE overcharged shot. Like all plasma weapons, it can rapidly build up heat and overheat, rendering it inoperable for a period if used incorrectly." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/smg/standard + unlock_cost = 400 + purchase_cost = 40 + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE + +/datum/loadout_item/suit_store/main_gun/corpsman/plasma_smg/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/corpsman/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/corpsman/plasma_rifle + name = "PL-38" + desc = "Unlocked for free with the Advanced rifle training perk. Equipped with a red dot sight, bayonet and miniflamer. The PL-38 plasma rifle is a powerful heavy rifle, able to unleash significant damage at any range. \ + Has three firemodes, with a standard high ROF mode, a piercing shatter shot, or a melting blast mode. Like all plasma weapons, it can rapidly build up heat and overheat, rendering it inoperable for a period if used incorrectly." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/rifle/standard + unlock_cost = 400 + purchase_cost = 50 + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE + +/datum/loadout_item/suit_store/main_gun/corpsman/plasma_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/corpsman/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) diff --git a/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage/engineer.dm b/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage/engineer.dm new file mode 100644 index 0000000000000..3bbd2479237ef --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage/engineer.dm @@ -0,0 +1,113 @@ +/datum/loadout_item/suit_store/main_gun/engineer + jobs_supported = list(SQUAD_ENGINEER) + +/datum/loadout_item/suit_store/main_gun/engineer/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/dylovene, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/chem_grenade/razorburn_large, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/chem_grenade/razorburn_large, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/engineer/carbine + name = "AR-18" + desc = "Equipped with mag harness, extended barrel and vertical grip. The AR-18 is the main weapon of the TGMC, offering excellent mobility and impressive close to medium range damage output. \ + Compared to the AR-12, it suffers from a comparatively smaller magazine size, and is less effective at longer range. Uses 10x24mm caseless ammunition." + ui_icon = "t18" + item_typepath = /obj/item/weapon/gun/rifle/standard_carbine/engineer + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_store/main_gun/engineer/carbine/enhanced + name = "AR-18+" + desc = "Equipped with mag harness, extended barrel and vertical grip. The AR-18 is the main weapon of the TGMC, offering excellent mobility and impressive close to medium range damage output. \ + Compared to the AR-12, it suffers from a comparatively smaller magazine size, and is less effective at longer range. It uses a mix of standard and AP 10x24mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/rifle/standard_carbine/ap + +/datum/loadout_item/suit_store/main_gun/engineer/assault_rifle + name = "AR-12" + desc = "Equipped with mag harness, extended barrel and miniflamer. The AR-12 is the former main weapon of the TGMC before it was superceded by the AR-18 for general issue. \ + A jack of all trades weapon, effect at close and long range, with good capacity and handling, making it a reliable all-rounder. \ + It does not particularly excel in any area however, and so is overshadowed by other weapons at particular tasks. It uses 10x24mm caseless ammunition." + ui_icon = "t12" + item_typepath = /obj/item/weapon/gun/rifle/standard_assaultrifle/engineer + +/datum/loadout_item/suit_store/main_gun/engineer/assault_rifle/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/dylovene, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/chem_grenade/razorburn_large, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/engineer/assault_rifle/enhanced + name = "AR-12+" + desc = "Equipped with mag harness, extended barrel and miniflamer. The AR-12 is the former main weapon of the TGMC before it was superceded by the AR-18 for general issue. \ + A jack of all trades weapon, effect at close and long range, with good capacity and handling, making it a reliable all-rounder. \ + It does not particularly excel in any area however, and so is overshadowed by other weapons at particular tasks. It uses a mix of standard and AP 10x24mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/rifle/standard_assaultrifle/ap + +/datum/loadout_item/suit_store/main_gun/engineer/auto_shotgun + name = "SH-15" + desc = "Equipped with a mag harness and underbarrel grenade launcher. \ + The SH-15 automatic shotgun has excellent mobility and handling, and offers powerful damage per shot. Its comparatively slow rate of fire means in a straight gunfight its overall damage output is somewhat lacking.\ + Uses 12-round 16 gauge magazines with slugs and flechette." + ui_icon = "tx15" + item_typepath = /obj/item/weapon/gun/rifle/standard_autoshotgun/engineer + secondary_ammo_type = /obj/item/ammo_magazine/rifle/tx15_flechette + +/datum/loadout_item/suit_store/main_gun/engineer/auto_shotgun/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/dylovene, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/engineer/combat_rifle + name = "AR-11" + desc = "Equipped with a red dot sight and laser sight. The AR-11 is an old rifle of the TGMC, but is now a relatively uncommon sight. \ + It has a very large magazine capacity, and can inflict incredible damage at long range with its HV ammo, making it particularly effective at well armored targets. \ + However it suffers from relatively poor handling and mobility, and lacks any underbarrel weapon attachments, making it an effective but less flexible weapon. It uses 4.92×34mm caseless HV ammunition." + ui_icon = "tx11" + item_typepath = /obj/item/weapon/gun/rifle/tx11/standard + +/datum/loadout_item/suit_store/main_gun/engineer/laser_carbine + name = "Laser carbine" + desc = "Equipped with a red dot sight and gyroscopic stabilizer. The TerraGov laser carbine is the high tech equivilent to the AR-18, with extremely good mobility and handling, and powerful medium range damage. \ + Variable firemodes gives it additional flexibility over its ballistic counterpart. Uses TE power cells that are shared across all TGMC laser weaponry." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_carbine/gyro + +/datum/loadout_item/suit_store/main_gun/engineer/standard_smg + name = "SMG-25" + desc = "Equipped with a mag harness, recoil compensator and vertical grip. SMG-25 submachinegun, is a large capacity smg, able to be be used effectively one or two handed. \ + Like all smgs, it has excellent mobility and handling, but has poor damage application at longer ranges. Uses 10x20mm caseless ammunition." + ui_icon = "m25" + item_typepath = /obj/item/weapon/gun/smg/m25/vgrip + +/datum/loadout_item/suit_store/main_gun/engineer/standard_smg/enhanced + name = "SMG-25+" + desc = "Equipped with a mag harness, recoil compensator and vertical grip. SMG-25 submachinegun, is a large capacity smg, able to be be used effectively one or two handed. \ + Like all smgs, it has excellent mobility and handling, but has poor damage application at longer ranges. Uses a mix of standard and AP 10x20mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/smg/m25/ap + +/datum/loadout_item/suit_store/main_gun/engineer/plasma_smg + name = "PL-51" + desc = "Unlocked for free with the Advanced SMG training perk. Equipped with a red dot sight, bayonet and vertical grip. The PL-51 plasma SMG is a powerful close range weapon, with great mobility and handling. \ + Has two firemodes, with a standard reflecting shot, or a more powerful AOE overcharged shot. Like all plasma weapons, it can rapidly build up heat and overheat, rendering it inoperable for a period if used incorrectly." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/smg/standard + unlock_cost = 400 + purchase_cost = 40 + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE + +/datum/loadout_item/suit_store/main_gun/engineer/plasma_rifle + name = "PL-38" + desc = "Unlocked for free with the Advanced rifle training perk. Equipped with a red dot sight, bayonet and vertical grip. The PL-38 plasma rifle is a powerful heavy rifle, able to unleash significant damage at any range. \ + Has three firemodes, with a standard high ROF mode, a piercing shatter shot, or a melting blast mode. Like all plasma weapons, it can rapidly build up heat and overheat, rendering it inoperable for a period if used incorrectly." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/rifle/v_grip + unlock_cost = 400 + purchase_cost = 50 + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE diff --git a/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage/field_commander.dm b/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage/field_commander.dm new file mode 100644 index 0000000000000..472fe01842a03 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage/field_commander.dm @@ -0,0 +1,333 @@ +/datum/loadout_item/suit_store/officer_sword + name = "Officers sword" + desc = "This appears to be a rather old blade that has been well taken care of, it is probably a family heirloom. \ + Well made and extremely sharp, despite its probable non-combat purpose. Comes in a leather scabbard that an attached to your waist or armor." + ui_icon = "machete" + item_typepath = /obj/item/storage/holster/blade/officer/full + jobs_supported = list(FIELD_COMMANDER) + item_blacklist = list(/obj/item/storage/holster/blade/officer/full = ITEM_SLOT_BELT) + +/datum/loadout_item/suit_store/officer_sword/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new /obj/item/deployable_camera, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/deployable_camera, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/hud_tablet/fieldcommand, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/mirage, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/fc_pistol + name = "P-1911A1-C pistol" + desc = "The P-1911A1-C is a custom modified pistol with impressive stopping power for its size. \ + Light and easy to use one handed, it suffers from a small magazine size and no auto eject feature. Comes in a holster that fits on your waist or armor. Uses .45 ACP ammunition." + ui_icon = "m1911c" + item_typepath = /obj/item/storage/holster/belt/pistol/m4a3/fieldcommander + jobs_supported = list(FIELD_COMMANDER) + item_blacklist = list(/obj/item/storage/holster/belt/pistol/m4a3/fieldcommander = ITEM_SLOT_BELT) + +/datum/loadout_item/suit_store/fc_pistol/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new /obj/item/deployable_camera, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/deployable_camera, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/hud_tablet/fieldcommand, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/mirage, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/field_commander + jobs_supported = list(FIELD_COMMANDER) + +/datum/loadout_item/suit_store/main_gun/field_commander/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(loadout.belt == /obj/item/storage/belt/marine) + wearer.equip_to_slot_or_del(new /obj/item/deployable_camera, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/deployable_camera, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/hud_tablet/fieldcommand, SLOT_IN_BACKPACK) + else + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) +/datum/loadout_item/suit_store/main_gun/field_commander/pulse_rifle + name = "PR-11" + desc = "Equipped with a red dot sight, extended barrel and integrated underbarrel grenade launcher. The PR-11 is a relic from an earlier time. \ + Larger and more cumbersome than modern rifles and lacking any precision aimming, it makes up for this with its tremendous magazine capacity, making it more akin to a light machinegun that a rifle. Uses 10x24mm caseless ammunition." + ui_icon = "ballistic" + item_typepath = /obj/item/weapon/gun/rifle/m41a/field_commander + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_store/main_gun/field_commander/pulse_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/field_commander/combat_rifle + name = "AR-11" + desc = "Equipped with a red dot sight and laser sight. The AR-11 is an old rifle of the TGMC, but is now a relatively uncommon sight. \ + It has a very large magazine capacity, and can inflict incredible damage at long range with its HV ammo, making it particularly effective at well armored targets. \ + However it suffers from relatively poor handling and mobility, and lacks any underbarrel weapon attachments, making it an effective but less flexible weapon. It uses 4.92×34mm caseless HV ammunition." + ui_icon = "tx11" + item_typepath = /obj/item/weapon/gun/rifle/tx11/standard + +/datum/loadout_item/suit_store/main_gun/field_commander/combat_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/field_commander/laser_rifle + name = "Laser rifle" + desc = "Equipped with a red dot sight, bayonet and miniflamer. The Terra Experimental laser rifle, is a powerful and flexible weapon thanks to a variety of firemodes. \ + Has good mobility and excellent falloff, although lacks the power offered by weapons with an underbarrel grenade launcher.\ + Uses TE power cells that are shared across all TGMC laser weaponry." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_rifle/rifleman + +/datum/loadout_item/suit_store/main_gun/field_commander/laser_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/mirage, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/mirage, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/field_commander/laser_mg + name = "Laser machinegun" + desc = "Equipped with a mag harness, bayonet and underbarrel grenade launcher. The Terra Experimental machine laser gun is a more flexible weapon than its ballistic counterparts. \ + It has better mobility and handling than ballistic machineguns, which combined with its variable firemodes and underbarrel weaponry makes it effective in a variety of situations, \ + but still ultimately excels at apply sustained supporting fire. Uses TE power cells that are shared across all TGMC laser weaponry." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_mlaser/patrol + +/datum/loadout_item/suit_store/main_gun/field_commander/laser_mg/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/mirage, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/mirage, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/field_commander/standard_rifle + name = "AR-12" + desc = "Equipped with red dot sight, extended barrel and underbarrel grenade launcher. The AR-12 is the former main weapon of the TGMC before it was superceded by the AR-18 for general issue. \ + A jack of all trades weapon, effect at close and long range, with good capacity and handling, making it a reliable all-rounder. \ + It does not particularly excel in any area however, and so is overshadowed by other weapons at particular tasks. It uses 10x24mm caseless ammunition." + ui_icon = "t12" + item_typepath = /obj/item/weapon/gun/rifle/standard_assaultrifle/rifleman + +/datum/loadout_item/suit_store/main_gun/field_commander/standard_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new /obj/item/deployable_camera, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/hud_tablet(wearer, /datum/job/terragov/squad/leader, wearer.assigned_squad), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x24mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/field_commander/standard_rifle/enhanced + name = "AR-12+" + desc = "Equipped with red dot sight, extended barrel and underbarrel grenade launcher. The AR-12 is the former main weapon of the TGMC before it was superceded by the AR-18 for general issue. \ + A jack of all trades weapon, effect at close and long range, with good capacity and handling, making it a reliable all-rounder. \ + It does not particularly excel in any area however, and so is overshadowed by other weapons at particular tasks. It uses a mix of standard and AP 10x24mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/rifle/standard_assaultrifle/ap + +/datum/loadout_item/suit_store/main_gun/field_commander/carbine + name = "AR-18" + desc = "Equipped with red dot sight, extended barrel and plasma pistol. The AR-18 is the main weapon of the TGMC, offering excellent mobility and impressive close to medium range damage output. \ + Compared to the AR-12, it suffers from a comparatively smaller magazine size, and is less effective at longer range. Uses 10x24mm caseless ammunition." + ui_icon = "t18" + item_typepath = /obj/item/weapon/gun/rifle/standard_carbine/plasma_pistol + +/datum/loadout_item/suit_store/main_gun/field_commander/carbine/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/plasma_pistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/plasma_pistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/plasma_pistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x24mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/field_commander/carbine/enhanced + name = "AR-18+" + desc = "Equipped with red dot sight, extended barrel and plasma pistol. The AR-18 is the main weapon of the TGMC, offering excellent mobility and impressive close to medium range damage output. \ + Compared to the AR-12, it suffers from a comparatively smaller magazine size, and is less effective at longer range. It uses a mix of standard and AP 10x24mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/rifle/standard_carbine/ap + +/datum/loadout_item/suit_store/main_gun/field_commander/plasma_smg + name = "PL-51" + desc = "Unlocked for free with the Advanced SMG training perk. Equipped with a motion sensor, bayonet and vertical grip. The PL-51 plasma SMG is a powerful close range weapon, with great mobility and handling. \ + Has two firemodes, with a standard reflecting shot, or a more powerful AOE overcharged shot. Like all plasma weapons, it can rapidly build up heat and overheat, rendering it inoperable for a period if used incorrectly." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/smg/motion_sensor + unlock_cost = 400 + purchase_cost = 50 + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE + +/datum/loadout_item/suit_store/main_gun/field_commander/plasma_smg/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/field_commander/plasma_rifle + name = "PL-38" + desc = "Unlocked for free with the Advanced rifle training perk. Equipped with a red dot sight, bayonet and miniflamer. The PL-38 plasma rifle is a powerful heavy rifle, able to unleash significant damage at any range. \ + Has three firemodes, with a standard high ROF mode, a piercing shatter shot, or a melting blast mode. Like all plasma weapons, it can rapidly build up heat and overheat, rendering it inoperable for a period if used incorrectly." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/rifle/standard + unlock_cost = 400 + purchase_cost = 50 + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE + +/datum/loadout_item/suit_store/main_gun/field_commander/plasma_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) diff --git a/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage/marine.dm b/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage/marine.dm new file mode 100644 index 0000000000000..0875eb5b715ca --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage/marine.dm @@ -0,0 +1,815 @@ +/datum/loadout_item/suit_store/main_gun/marine + jobs_supported = list(SQUAD_MARINE) + +/datum/loadout_item/suit_store/main_gun/marine/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/marine/standard_rifle + name = "AR-12" + desc = "Equipped with red dot sight, extended barrel and underbarrel grenade launcher. The AR-12 is the former main weapon of the TGMC before it was superceded by the AR-18 for general issue. \ + A jack of all trades weapon, effect at close and long range, with good capacity and handling, making it a reliable all-rounder. \ + It does not particularly excel in any area however, and so is overshadowed by other weapons at particular tasks. It uses 10x24mm caseless ammunition." + ui_icon = "t12" + item_typepath = /obj/item/weapon/gun/rifle/standard_assaultrifle/rifleman + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_store/main_gun/marine/standard_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/marine/deployable, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x24mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/standard_heavypistol/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/standard_rifle/enhanced + name = "AR-12+" + desc = "Equipped with red dot sight, extended barrel and underbarrel grenade launcher. The AR-12 is the former main weapon of the TGMC before it was superceded by the AR-18 for general issue. \ + A jack of all trades weapon, effect at close and long range, with good capacity and handling, making it a reliable all-rounder. \ + It does not particularly excel in any area however, and so is overshadowed by other weapons at particular tasks. It uses a mix of standard and AP 10x24mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/rifle/standard_assaultrifle/ap + +/datum/loadout_item/suit_store/main_gun/marine/standard_rifle/enhanced/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + return ..() + +/datum/loadout_item/suit_store/main_gun/marine/laser_rifle + name = "Laser rifle" + desc = "Equipped with a red dot sight, bayonet and miniflamer. The Terra Experimental laser rifle, is a powerful and flexible weapon thanks to a variety of firemodes. \ + Has good mobility and excellent falloff, although lacks the power offered by weapons with an underbarrel grenade launcher.\ + Uses TE power cells that are shared across all TGMC laser weaponry." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_rifle/rifleman + +/datum/loadout_item/suit_store/main_gun/marine/laser_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_pistol/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/standard_laser_rifle/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/marine/standard_carbine + name = "AR-18" + desc = "Equipped with red dot sight, extended barrel and underbarrel grenade launcher. The AR-18 is the main weapon of the TGMC, offering excellent mobility and impressive close to medium range damage output. \ + Compared to the AR-12, it suffers from a comparatively smaller magazine size, and is less effective at longer range. Uses 10x24mm caseless ammunition." + ui_icon = "t18" + item_typepath = /obj/item/weapon/gun/rifle/standard_carbine/standard + +/datum/loadout_item/suit_store/main_gun/marine/standard_carbine/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x24mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/standard_heavypistol/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/standard_carbine/enhanced + name = "AR-18+" + desc = "Equipped with red dot sight, extended barrel and underbarrel grenade launcher. The AR-18 is the main weapon of the TGMC, offering excellent mobility and impressive close to medium range damage output. \ + Compared to the AR-12, it suffers from a comparatively smaller magazine size, and is less effective at longer range. It uses a mix of standard and AP 10x24mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/rifle/standard_carbine/ap + +/datum/loadout_item/suit_store/main_gun/marine/standard_carbine/enhanced/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + return ..() + +/datum/loadout_item/suit_store/main_gun/marine/combat_rifle + name = "AR-11" + desc = "Equipped with a red dot sight and laser sight. The AR-11 is an old rifle of the TGMC, but is now a relatively uncommon sight. \ + It has a very large magazine capacity, and can inflict incredible damage at long range with its HV ammo, making it particularly effective at well armored targets. \ + However it suffers from relatively poor handling and mobility, and lacks any underbarrel weapon attachments, making it an effective but less flexible weapon. It uses 4.92×34mm caseless HV ammunition." + ui_icon = "tx11" + item_typepath = /obj/item/weapon/gun/rifle/tx11/standard + +/datum/loadout_item/suit_store/main_gun/marine/combat_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p492x34mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p492x34mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/standard_heavypistol/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/marine/deployable, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/combat_rifle/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/marine/battle_rifle + name = "BR-64" + desc = "Equipped with red dot sight, extended barrel and underbarrel grenade launcher. \ + The BR-64 is considered a 'light' marksmen rifle, with good stopping power it can apply effective damage at any range, while still having respectible handling and mobility. Uses 10x26.5smm caseless ammunition." + ui_icon = "ballistic" + item_typepath = /obj/item/weapon/gun/rifle/standard_br/standard + +/datum/loadout_item/suit_store/main_gun/marine/battle_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/marine/deployable, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x265mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/standard_heavypistol/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/skirmish_rifle + name = "AR-21" + desc = "Equipped with red dot sight, extended barrel and underbarrel grenade launcher. \ + The AR-21 is an less common rifle in the TGMC, attempting to bridge the gap between lighter, lower calibre rifles and heavier rifles like the BR-64. \ + Its compromises between the two groups means it fails to particularly outshine any of them, but never the less is a respective and flexible rifle." + ui_icon = "ballistic" + item_typepath = /obj/item/weapon/gun/rifle/standard_skirmishrifle/standard + +/datum/loadout_item/suit_store/main_gun/marine/skirmish_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/marine/deployable, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x25mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/standard_heavypistol/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/alf + name = "ALF-51B" + desc = "Equipped with a mag harness, bayonet and vertical grip. The ALF-51B is an unusual weapon, being a heavily modified AR-18 modified to SMG length of barrel, rechambered for a larger caliber, and belt fed. \ + Combining its powerful close range damage that can slow targets, impressive mobility and huge capacity, it is a devastating close range weapon. \ + However it suffers from appaling falloff making it highly ineffective at range, and its belt fed nature means it cannot be reloaded quickly, often leaving careless users exposed. Uses 10x25mm caseless ammunition." + ui_icon = "alf51b" + item_typepath = /obj/item/weapon/gun/rifle/alf_machinecarbine/assault + +/datum/loadout_item/suit_store/main_gun/marine/alf/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/standard_heavypistol/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/alf/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/flashbang/stun, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/marine/standard_gpmg + name = "MG-60" + desc = "Equipped with a mag harness, extended barrel and bipod. The MG-60 is a powerful machinegun, combining a tremendous capacity good stopping power and blistering rate of fire, it is extremely deadly at any range. \ + It has terrible mobility and poor accuracy on the move, so is generally used as a static weapon where it can lay down blistering firepower for team mates. It uses 10x26mm caseless ammunition." + ui_icon = "t60" + item_typepath = /obj/item/weapon/gun/rifle/standard_gpmg/machinegunner + +/datum/loadout_item/suit_store/main_gun/marine/standard_gpmg/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/marine/deployable, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/standard_heavypistol/tactical(wearer), SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/standard_gpmg/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + if(!isstorage(wearer.back)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + return + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/marine/standard_mmg + name = "MG-27" + desc = "Equipped with an unremovable miniscope and tripod. The MG-27 is large, unwieldy machinegun, with terrible mobility and effectively unmanagable handling outside of point blank range. \ + However the MG-27 is primary used as a deployed weapon, where it offers devastatingly powerful, accurate and long range damage that far exceeds the lighter MG-60. \ + Can quickly mow down any target caught out in the open, it is the final word in static weaponry. It uses 10x27mm caseless ammunition." + ui_icon = "ballistic" + item_typepath = /obj/item/weapon/gun/standard_mmg/machinegunner + +/datum/loadout_item/suit_store/main_gun/marine/standard_mmg/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(istype(wearer.belt, /obj/item/storage/holster/m25)) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + else + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x20mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/standard_machinepistol/compact(wearer), SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/standard_mmg/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_ACCESSORY) + if(istype(wearer.belt, /obj/item/storage/holster/m25)) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/m25/extended, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/m25/extended, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/m25/extended, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x20mm, SLOT_IN_ACCESSORY) + else if(isstorage(wearer.back)) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + else + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/bullet/laser, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/bullet/laser, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/marine/laser_mg + name = "Laser machinegun" + desc = "Equipped with a mag harness, bayonet and underbarrel grenade launcher. The Terra Experimental machine laser gun is a more flexible weapon than its ballistic counterparts. \ + It has better mobility and handling than ballistic machineguns, which combined with its variable firemodes and underbarrel weaponry makes it effective in a variety of situations, \ + but still ultimately excels at apply sustained supporting fire. Uses TE power cells that are shared across all TGMC laser weaponry." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_mlaser/patrol + +/datum/loadout_item/suit_store/main_gun/marine/laser_mg/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_pistol/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/laser_mg/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/marine/flamer + name = "FL-84" + desc = "Equipped with a mag harness, wide nozzle and hydrocannon. The FL-84 flamethrower is a simple and unsubtle weapon, used for area control and urban combat. \ + Excels at clearing out enclosed or fortified positions, but suffers from poor mobility and relatively limited range, making it of questionable use in open combat. \ + Uses back or gun mounted fuel tanks." + req_desc = "Requires a suit with a Surt module." + ui_icon = "m240" + item_typepath = /obj/item/weapon/gun/flamer/big_flamer/marinestandard/wide + item_whitelist = list(/obj/item/clothing/suit/modular/xenonauten/heavy/surt = ITEM_SLOT_OCLOTHING) + +/datum/loadout_item/suit_store/main_gun/marine/flamer/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(istype(wearer.belt, /obj/item/storage/holster/m25)) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + else + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x20mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/standard_machinepistol/compact(wearer), SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/large/X, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/large/X, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/large/X, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/flamer/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_ACCESSORY) + if(istype(wearer.belt, /obj/item/storage/holster/m25)) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/m25/extended, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/m25/extended, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/m25/extended, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x20mm, SLOT_IN_ACCESSORY) + else if(isstorage(wearer.back)) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + else + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/bullet/laser, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/bullet/laser, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + + +/datum/loadout_item/suit_store/main_gun/marine/shotgun + name = "SH-35" + desc = "Equipped with a mag harness, bayonet, angled grip and foldable stock. \ + The SH-35 is the most commonly used shotgun of the TGMC. With good mobility and handling, it has unparalleled close range power when using buckshot. Able to kill or maim all but the most heavily armored targets with a single well aimmed blast. \ + When using flechette rounds, it can provide surprisingly powerful long range damage with good penetration, although its low rate of fire means its sustained damage is relatively poor. \ + Uses 12 gauge shells." + ui_icon = "t35" + item_typepath = /obj/item/weapon/gun/shotgun/pump/t35/standard + +/datum/loadout_item/suit_store/main_gun/marine/shotgun/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x20mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/synaptizine, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/standard_machinepistol/compact(wearer), SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/shotgun/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/marine/auto_shotgun + name = "SH-15" + desc = "Equipped with a mag harness, barrel charger and underbarrel grenade launcher. \ + The SH-15 automatic shotgun has excellent mobility and handling, and offers powerful damage per shot. Its comparatively slow rate of fire means in a straight gunfight its overall damage output is somewhat lacking.\ + Uses 12-round 16 gauge magazines with slugs and flechette." + ui_icon = "tx15" + item_typepath = /obj/item/weapon/gun/rifle/standard_autoshotgun/standard + secondary_ammo_type = /obj/item/ammo_magazine/rifle/tx15_flechette + +/datum/loadout_item/suit_store/main_gun/marine/auto_shotgun/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/standard_heavypistol/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/laser_carbine + name = "Laser carbine" + desc = "Equipped with a red dot sight and underbarrel grenade launcher. The TerraGov laser carbine is the high tech equivilent to the AR-18, with extremely good mobility and handling, and powerful medium range damage. \ + Variable firemodes gives it additional flexibility over its ballistic counterpart. Uses TE power cells that are shared across all TGMC laser weaponry." + req_desc = "Requires a light armour suit." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_carbine/scout + +/datum/loadout_item/suit_store/main_gun/marine/laser_carbine/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_pistol/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/synaptizine, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/laser_carbine/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/marine/scout_carbine + name = "AR-18-scout" + desc = "Equipped with motion detector, extended barrel and underbarrel grenade launcher. The AR-18 is the main weapon of the TGMC, offering excellent mobility and impressive close to medium range damage output. \ + Compared to the AR-12, it suffers from a comparatively smaller magazine size, and is less effective at longer range. \ + The motion detector on this example makes it excellent for scouting out enemy positions and tracking down hidden enemies. Uses 10x24mm caseless ammunition." + req_desc = "Requires a light armour suit." + ui_icon = "t18" + item_typepath = /obj/item/weapon/gun/rifle/standard_carbine/scout + item_whitelist = list( + /obj/item/clothing/suit/modular/xenonauten/light/shield = ITEM_SLOT_OCLOTHING, + /obj/item/clothing/suit/modular/xenonauten/light/shield_overclocked = ITEM_SLOT_OCLOTHING, + ) + +/datum/loadout_item/suit_store/main_gun/marine/scout_carbine/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x24mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x24mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/standard_heavypistol/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/scout_carbine/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + if(istype(wearer.back, /obj/item/storage)) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_ACCESSORY) + else + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/marine/scout_carbine/enhanced + name = "AR-18-S+" + desc = "Equipped with motion detector, extended barrel and underbarrel grenade launcher. The AR-18 is the main weapon of the TGMC, offering excellent mobility and impressive close to medium range damage output. \ + Compared to the AR-12, it suffers from a comparatively smaller magazine size, and is less effective at longer range. \ + The motion detector on this example makes it excellent for scouting out enemy positions and tracking down hidden enemies. It uses a mix of standard and AP 10x24mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/rifle/standard_carbine/ap + +/datum/loadout_item/suit_store/main_gun/marine/smg_and_shield + name = "SMG-25 & shield" + desc = "Equipped with a mag harness, recoil compensator and gyroscopic stabilizer, and comes with a TL-172 defensive shield. SMG-25 submachinegun, is a large capacity smg, able to be be used effectively one or two handed. \ + Like all smgs, it has excellent mobility and handling, but has poor damage application at longer ranges. \ + The defensive shield provides incredible resilience, allowing the user to soak up tremendous amounts of damage while they or their team mates push the enemy. \ + Generally used with Tyr heavy armor for maximum survivability. Uses 10x20mm caseless ammunition." + ui_icon = "riot_shield" + item_typepath = /obj/item/weapon/gun/smg/m25/magharness + item_blacklist = list(/obj/item/jetpack_marine/heavy = ITEM_SLOT_BACK) + +/datum/loadout_item/suit_store/main_gun/marine/smg_and_shield/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/marine, SLOT_L_HAND) + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/weldingtool/largetank, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/m25/extended, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x20mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x20mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/smg_and_shield/enhanced + name = "SMG-25+ & riot shield" + desc = "Equipped with a mag harness, recoil compensator and gyroscopic stabilizer, and comes with a TL-172 defensive shield. SMG-25 submachinegun, is a large capacity smg, able to be be used effectively one or two handed. \ + Like all smgs, it has excellent mobility and handling, but has poor damage application at longer ranges. \ + The defensive shield provides incredible resilience, allowing the user to soak up tremendous amounts of damage while they or their team mates push the enemy. \ + Generally used with Tyr heavy armor for maximum survivability. Uses standard and AP 10x20mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/smg/m25/ap + +/datum/loadout_item/suit_store/main_gun/marine/standard_smg + name = "SMG-25" + desc = "Equipped with a mag harness, recoil compensator and gyroscopic stabilizer. SMG-25 submachinegun, is a large capacity smg, able to be be used effectively one or two handed. \ + Like all smgs, it has excellent mobility and handling, but has poor damage application at longer ranges. Uses 10x20mm caseless ammunition." + ui_icon = "m25" + item_typepath = /obj/item/weapon/gun/smg/m25/magharness + +/datum/loadout_item/suit_store/main_gun/marine/standard_smg/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/m25/extended, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/m25/extended, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x20mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x20mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/standard_smg/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + if(istype(wearer.belt, /obj/item/storage/belt)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/m25/extended, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/marine/standard_smg/enhanced + name = "SMG-25+" + desc = "Equipped with a mag harness, recoil compensator and gyroscopic stabilizer. SMG-25 submachinegun, is a large capacity smg, able to be be used effectively one or two handed. \ + Like all smgs, it has excellent mobility and handling, but has poor damage application at longer ranges. Uses standard and AP 10x20mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/smg/m25/ap + +/datum/loadout_item/suit_store/main_gun/marine/scout_rifle + name = "BR-8" + desc ="Equipped with a red dot sight, extended barrel and vertical grip. The BR-8 is a light specialized scout rifle, mostly used by light infantry and scouts. \ + It has great mobility and handling, excellent accuracy and perfect damage application at range. Combined with innate IFF and a variety of high powered ammo types, the BR-8 is a weapon to be feared. \ + Takes specialized overpressured 10x28mm rounds." + req_desc = "Requires a light armour suit." + ui_icon = "scout" + item_typepath = /obj/item/weapon/gun/rifle/tx8/scout + item_whitelist = list( + /obj/item/clothing/suit/modular/xenonauten/light/shield = ITEM_SLOT_OCLOTHING, + /obj/item/clothing/suit/modular/xenonauten/light/shield_overclocked = ITEM_SLOT_OCLOTHING, + ) + purchase_cost = 100 + quantity = 2 + +/datum/loadout_item/suit_store/main_gun/marine/scout_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/standard_machinepistol/scanner(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/scout_rifle/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + if(istype(wearer.belt, /obj/item/storage/belt)) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx8/incendiary, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx8/incendiary, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx8/impact, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx8/impact, SLOT_IN_BELT) + + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/marine/suppressed_carbine + name = "AR-18-Suppressed" + desc = "Equipped with red dot sight, suppressor and underbarrel grenade launcher. The AR-18 is the main weapon of the TGMC, offering excellent mobility and impressive close to medium range damage output. \ + Compared to the AR-12, it suffers from a comparatively smaller magazine size, and is less effective at longer range. \ + This suppressed variant is typically used for stealth operations, where its quiet firing and lack of tracers can give the user an edge over unsuspecting opponents. Uses 10x24mm caseless ammunition." + ui_icon = "t18" + item_typepath = /obj/item/weapon/gun/rifle/standard_carbine/suppressed + +/datum/loadout_item/suit_store/main_gun/marine/suppressed_carbine/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x24mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/standard_heavypistol/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/mirage, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/suppressed_carbine/enhanced + name = "AR-18-Suppressed+" + desc = "Equipped with red dot sight, suppressor and underbarrel grenade launcher. The AR-18 is the main weapon of the TGMC, offering excellent mobility and impressive close to medium range damage output. \ + Compared to the AR-12, it suffers from a comparatively smaller magazine size, and is less effective at longer range. \ + This suppressed variant is typically used for stealth operations, where its quiet firing and lack of tracers can give the user an edge over unsuspecting opponents. It uses a mix of standard and AP 10x24mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/rifle/standard_carbine/ap + +/datum/loadout_item/suit_store/main_gun/marine/suppressed_carbine/enhanced/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + return ..() + +/datum/loadout_item/suit_store/main_gun/marine/mag_gl + name = "GL-54" + desc = "Equipped with a motion sensor. The GL-54 is a magazine fed, semi-automatic grenade launcher designed to shoot airbursting smart grenades. \ + A powerful support weapon, but unwieldy at close range where it can be easily overwhelmed. \ + Comes with a variety of 20mm grenade types." + ui_icon = "ballistic" + purchase_cost = 75 + quantity = 2 + item_typepath = /obj/item/weapon/gun/rifle/tx54/motion_sensor + +/datum/loadout_item/suit_store/main_gun/marine/mag_gl/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return ..() + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/standard_machinepistol/compact(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx54/smoke/dense, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx54/smoke/acid, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx54/razor, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/mag_gl/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + if(istype(wearer.belt, /obj/item/storage/belt)) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx54/smoke/acid, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx54/incendiary, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx54/incendiary, SLOT_IN_BELT) + + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/marine/plasma_smg + name = "PL-51" + desc = "Unlocked for free with the Advanced SMG training perk. Equipped with a motion sensor, bayonet and vertical grip. The PL-51 plasma SMG is a powerful close range weapon, with great mobility and handling. \ + Has two firemodes, with a standard reflecting shot, or a more powerful AOE overcharged shot. Like all plasma weapons, it can rapidly build up heat and overheat, rendering it inoperable for a period if used incorrectly." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/smg/motion_sensor + unlock_cost = 400 + purchase_cost = 50 + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE + +/datum/loadout_item/suit_store/main_gun/marine/plasma_smg/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/standard_heavypistol/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/plasma_smg/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/bullet/laser, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/bullet/laser, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/marine/plasma_rifle + name = "PL-38" + desc = "Unlocked for free with the Advanced rifle training perk. Equipped with a red dot sight, bayonet and miniflamer. The PL-38 plasma rifle is a powerful heavy rifle, able to unleash significant damage at any range. \ + Has three firemodes, with a standard high ROF mode, a piercing shatter shot, or a melting blast mode. Like all plasma weapons, it can rapidly build up heat and overheat, rendering it inoperable for a period if used incorrectly." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/rifle/standard + unlock_cost = 400 + purchase_cost = 50 + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE + +/datum/loadout_item/suit_store/main_gun/marine/plasma_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/standard_heavypistol/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/bullet/laser, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/bullet/laser, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/plasma_rifle/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/marine/plasma_cannon + name = "PL-96" + desc = "Unlocked for free with the Heavy weapon specialisation perk. Equipped with a magharness. The PL-96 plasma cannon is massive, cumbersome weapon, designed to unleash devastating damage against all targets. \ + Has three firemodes, with a plasma wave mode, that scales in damage against larger targets, a shatter blast mode, or an incendiary blast mode. Like all plasma weapons, it can rapidly build up heat and overheat, rendering it inoperable for a period if used incorrectly." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/cannon/mag_harness + unlock_cost = 400 + purchase_cost = 80 + quantity = 3 + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE + +/datum/loadout_item/suit_store/main_gun/marine/plasma_cannon/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/standard_heavypistol/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/marine/plasma_cannon/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/bullet/laser, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/bullet/laser, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) diff --git a/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage/smartgunner.dm b/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage/smartgunner.dm new file mode 100644 index 0000000000000..44c72d3d4d543 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage/smartgunner.dm @@ -0,0 +1,95 @@ +/datum/loadout_item/suit_store/main_gun/smartgunner + jobs_supported = list(SQUAD_SMARTGUNNER) + +/datum/loadout_item/suit_store/main_gun/smartgunner/smartmachinegun + name = "SG-29" + desc = "Equipped with a motion sensor and laser sight. The SG-29 is the TGMC's current standard IFF-capable medium machine gun. \ + It has good mobility for a machinegun, and is extremely effective on the move. Its innate IFF, good damage application and attached motion sensor makes it a powerful support weapon. \ + Has somewhat poor falloff however, and although it has an excellent capacity, has slow reloading. It uses 10x26mm caseless ammunition. \ + Requires special training and it cannot turn off IFF. It uses 10x26mm ammunition." + ui_icon = "sg29" + item_typepath = /obj/item/weapon/gun/rifle/standard_smartmachinegun/patrol + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_store/main_gun/smartgunner/smartmachinegun/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70/tactical(wearer), SLOT_IN_BACKPACK) + + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_smartmachinegun, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_smartmachinegun, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/smartgunner/smart_minigun + name = "SG-85" + desc = "Equipped with a motion sensor. The SG-85 is a monstrous IFF minigun, able to unleash an incredible torrent of bullets with a tremendous capacity thanks to its back mounted ammo supply. \ + With excellent armor penetration and minimal falloff, the SG-85 is a supreme support weapon, able to effective apply damage at any range, causing hideous amounts of shrapnel to anyone it doesn't kill." + req_desc = "Requires a powerback for power and ammo. It uses 10x26mm caseless ammunition" + ui_icon = "smartgun" + item_typepath = /obj/item/weapon/gun/minigun/smart_minigun/motion_detector + item_whitelist = list(/obj/item/ammo_magazine/minigun_powerpack/smartgun = ITEM_SLOT_BACK) + +/datum/loadout_item/suit_store/main_gun/smartgunner/smart_minigun/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(loadout.belt == /obj/item/storage/belt/sparepouch) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/smart_minigun, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/smart_minigun, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/standard_machinepistol/compact(wearer), SLOT_IN_BELT) + + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_ACCESSORY) + + else + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + +/datum/loadout_item/suit_store/main_gun/smartgunner/smarttargetrifle + name = "SG-62" + desc = "Equipped with a motio sensor and spotting rifle. The SG-62 is a IFF precision rifle that has accurate, long range stopping power combined with the utility of its attached spotting rifle. \ + The spotting rifle can use a variety of ammo types to suit a variety of situations, but the gun has relatively poor mobility and handling. Good for the smartgunner that favors precision over volume of fire. \ + It uses high velocity 10x27mm caseless ammunition and 12x66mm ammunition for the underslung rifle." + ui_icon = "smartgun" + item_typepath = /obj/item/weapon/gun/rifle/standard_smarttargetrifle/motion + +/datum/loadout_item/suit_store/main_gun/smartgunner/smarttargetrifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_spottingrifle/highimpact, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_spottingrifle/highimpact, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_spottingrifle/incendiary, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_spottingrifle/tungsten, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_spottingrifle/incendiary, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_spottingrifle/tungsten, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_spottingrifle/highimpact, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_spottingrifle/highimpact, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70/tactical(wearer), SLOT_IN_BACKPACK) + + if(!istype(wearer.back, /obj/item/storage/backpack/marine/satchel)) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_spottingrifle/incendiary, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_spottingrifle/tungsten, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) diff --git a/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage/squad_leader.dm b/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage/squad_leader.dm new file mode 100644 index 0000000000000..f35179cace5d9 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/_TGMC/suit_storage/squad_leader.dm @@ -0,0 +1,368 @@ +/datum/loadout_item/suit_store/main_gun/squad_leader + jobs_supported = list(SQUAD_LEADER) + +/datum/loadout_item/suit_store/main_gun/squad_leader/standard_rifle + name = "AR-12" + desc = "Equipped with red dot sight, extended barrel and underbarrel grenade launcher. The AR-12 is the former main weapon of the TGMC before it was superceded by the AR-18 for general issue. \ + A jack of all trades weapon, effect at close and long range, with good capacity and handling, making it a reliable all-rounder. \ + It does not particularly excel in any area however, and so is overshadowed by other weapons at particular tasks. It uses 10x24mm caseless ammunition." + ui_icon = "t12" + item_typepath = /obj/item/weapon/gun/rifle/standard_assaultrifle/rifleman + +/datum/loadout_item/suit_store/main_gun/squad_leader/standard_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new /obj/item/deployable_camera, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/hud_tablet(wearer, /datum/job/terragov/squad/leader, wearer.assigned_squad), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x24mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/squad_leader/standard_rifle/enhanced + name = "AR-12+" + desc = "Equipped with red dot sight, extended barrel and underbarrel grenade launcher. The AR-12 is the former main weapon of the TGMC before it was superceded by the AR-18 for general issue. \ + A jack of all trades weapon, effect at close and long range, with good capacity and handling, making it a reliable all-rounder. \ + It does not particularly excel in any area however, and so is overshadowed by other weapons at particular tasks. It uses a mix of standard and AP 10x24mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/rifle/standard_assaultrifle/ap + +/datum/loadout_item/suit_store/main_gun/squad_leader/laser_rifle + name = "Laser rifle" + desc = "Equipped with a red dot sight, bayonet and miniflamer. The Terra Experimental laser rifle, is a powerful and flexible weapon thanks to a variety of firemodes. \ + Has good mobility and excellent falloff, although lacks the power offered by weapons with an underbarrel grenade launcher.\ + Uses TE power cells that are shared across all TGMC laser weaponry." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_rifle/rifleman + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/suit_store/main_gun/squad_leader/laser_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new /obj/item/deployable_camera, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/deployable_camera, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/hud_tablet(wearer, /datum/job/terragov/squad/leader, wearer.assigned_squad), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/squad_leader/carbine + name = "AR-18" + desc = "Equipped with red dot sight, extended barrel and plasma pistol. The AR-18 is the main weapon of the TGMC, offering excellent mobility and impressive close to medium range damage output. \ + Compared to the AR-12, it suffers from a comparatively smaller magazine size, and is less effective at longer range. Uses 10x24mm caseless ammunition." + ui_icon = "t18" + item_typepath = /obj/item/weapon/gun/rifle/standard_carbine/plasma_pistol + +/datum/loadout_item/suit_store/main_gun/squad_leader/carbine/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/plasma_pistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/plasma_pistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/plasma_pistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x24mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/squad_leader/carbine/enhanced + name = "AR-18+" + desc = "Equipped with red dot sight, extended barrel and plasma pistol. The AR-18 is the main weapon of the TGMC, offering excellent mobility and impressive close to medium range damage output. \ + Compared to the AR-12, it suffers from a comparatively smaller magazine size, and is less effective at longer range. It uses a mix of standard and AP 10x24mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/rifle/standard_carbine/ap + +/datum/loadout_item/suit_store/main_gun/squad_leader/combat_rifle + name = "AR-11" + desc = "Equipped with a red dot sight and laser sight. The AR-11 is an old rifle of the TGMC, but is now a relatively uncommon sight. \ + It has a very large magazine capacity, and can inflict incredible damage at long range with its HV ammo, making it particularly effective at well armored targets. \ + However it suffers from relatively poor handling and mobility, and lacks any underbarrel weapon attachments, making it an effective but less flexible weapon. It uses 4.92×34mm caseless HV ammunition." + ui_icon = "tx11" + item_typepath = /obj/item/weapon/gun/rifle/tx11/standard + +/datum/loadout_item/suit_store/main_gun/squad_leader/combat_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new /obj/item/deployable_camera, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/deployable_camera, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/hud_tablet(wearer, /datum/job/terragov/squad/leader, wearer.assigned_squad), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p492x34mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/squad_leader/battle_rifle + name = "BR-64" + desc = "Equipped with red dot sight, extended barrel and underbarrel grenade launcher. \ + The BR-64 is considered a 'light' marksmen rifle, with good stopping power it can apply effective damage at any range, while still having respectible handling and mobility. Uses 10x26.5smm caseless ammunition." + ui_icon = "ballistic" + item_typepath = /obj/item/weapon/gun/rifle/standard_br/standard + +/datum/loadout_item/suit_store/main_gun/squad_leader/battle_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/sticky, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x265mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x265mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/squad_leader/auto_shotgun + name = "SH-15" + desc = "Equipped with a motion sensor, extended barrel and plasma pistol. \ + The SH-15 automatic shotgun has excellent mobility and handling, and offers powerful damage per shot. Its comparatively slow rate of fire means in a straight gunfight its overall damage output is somewhat lacking.\ + Uses 12-round 16 gauge magazines with slugs and flechette." + ui_icon = "tx15" + item_typepath = /obj/item/weapon/gun/rifle/standard_autoshotgun/plasma_pistol + secondary_ammo_type = /obj/item/ammo_magazine/rifle/tx15_flechette + +/datum/loadout_item/suit_store/main_gun/squad_leader/auto_shotgun/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/plasma_pistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/plasma_pistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/plasma_pistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/squad_leader/oicw + name = "AR-55" + desc = "Equipped with a motion sensor, recoil compensator, vertical grip and integrated GL-54. \ + The AR-55 is effectively a GL-54 with a simplified AR-18 strapped to the bottom. It has all the flexible airbursting power of the GL-54 combined with the reliable damage of an assault rifle. \ + While even more bulky and cumbersome than just the GL-54 alone, and the rifle component is inferior to the AR-18 it is derived from, the AR-55 is a far more effective weapon than the sum of its parts. \ + Uses 10x24mm caseless ammunition and 20mm airburst grenades." + ui_icon = "tx55" + item_typepath = /obj/item/weapon/gun/rifle/tx55/combat_patrol + purchase_cost = 100 + quantity = 2 + +/datum/loadout_item/suit_store/main_gun/squad_leader/oicw/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x24mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p10x24mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx54, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx54, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/squad_leader/oicw/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + if(loadout.belt == /obj/item/storage/belt/marine) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx54/incendiary, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx54/incendiary, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx54, SLOT_IN_BELT) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx54, SLOT_IN_BELT) + if(loadout.l_store == /obj/item/storage/pouch/magazine/large) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_L_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx54, SLOT_IN_L_POUCH) + if(loadout.r_store == /obj/item/storage/pouch/magazine/large) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_R_POUCH) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx54, SLOT_IN_R_POUCH) + +/datum/loadout_item/suit_store/main_gun/squad_leader/standard_smg + name = "SMG-25" + desc = "Equipped with a mag harness, recoil compensator and plasma pistol. SMG-25 submachinegun, is a large capacity smg, intended to be used two handed to take advantage of the attached plasma pistol. \ + Like all smgs, it has excellent mobility and handling, but has poor damage application at longer ranges. Uses 10x20mm caseless ammunition, and comes with multiple ammo types." + ui_icon = "m25" + item_typepath = /obj/item/weapon/gun/smg/m25/plasma + +/datum/loadout_item/suit_store/main_gun/squad_leader/standard_smg/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + if(!isstorage(wearer.back)) //bruh + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/m25/extended, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/plasma_pistol, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + return + + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new secondary_ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new ammo_type, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/synaptizine, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/plasma_pistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/plasma_pistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/plasma_pistol, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/squad_leader/standard_smg/enhanced + name = "SMG-25+" + desc = "Equipped with a mag harness, recoil compensator and plasma pistol. SMG-25 submachinegun, is a large capacity smg, intended to be used two handed to take advantage of the attached plasma pistol. \ + Like all smgs, it has excellent mobility and handling, but has poor damage application at longer ranges. Uses standard and AP 10x20mm caseless ammunition." + loadout_item_flags = NONE + secondary_ammo_type = /obj/item/ammo_magazine/smg/m25/ap + +/datum/loadout_item/suit_store/main_gun/squad_leader/plasma_smg + name = "PL-51" + desc = "Unlocked for free with the Advanced SMG training perk. Equipped with a motion sensor, bayonet and vertical grip. The PL-51 plasma SMG is a powerful close range weapon, with great mobility and handling. \ + Has two firemodes, with a standard reflecting shot, or a more powerful AOE overcharged shot. Like all plasma weapons, it can rapidly build up heat and overheat, rendering it inoperable for a period if used incorrectly." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/smg/motion_sensor + unlock_cost = 400 + purchase_cost = 50 + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE + +/datum/loadout_item/suit_store/main_gun/squad_leader/plasma_smg/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new /obj/item/deployable_camera, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/deployable_camera, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/hud_tablet(wearer, /datum/job/terragov/squad/leader, wearer.assigned_squad), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p492x34mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + +/datum/loadout_item/suit_store/main_gun/squad_leader/plasma_rifle + name = "PL-38" + desc = "Unlocked for free with the Advanced rifle training perk. Equipped with a red dot sight, bayonet and miniflamer. The PL-38 plasma rifle is a powerful heavy rifle, able to unleash significant damage at any range. \ + Has three firemodes, with a standard high ROF mode, a piercing shatter shot, or a melting blast mode. Like all plasma weapons, it can rapidly build up heat and overheat, rendering it inoperable for a period if used incorrectly." + ui_icon = "lasergun" + item_typepath = /obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/rifle/standard + unlock_cost = 400 + purchase_cost = 50 + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE + +/datum/loadout_item/suit_store/main_gun/squad_leader/plasma_rifle/post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + . = ..() + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) + + if(!isstorage(wearer.back)) + return + + wearer.equip_to_slot_or_del(new /obj/item/deployable_camera, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/deployable_camera, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/hud_tablet(wearer, /datum/job/terragov/squad/leader, wearer.assigned_squad), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p492x34mm, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70/tactical(wearer), SLOT_IN_BACKPACK) + wearer.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) diff --git a/code/datums/gamemodes/campaign/loadout_items/_TGMC/uniform.dm b/code/datums/gamemodes/campaign/loadout_items/_TGMC/uniform.dm new file mode 100644 index 0000000000000..61b4991c8c929 --- /dev/null +++ b/code/datums/gamemodes/campaign/loadout_items/_TGMC/uniform.dm @@ -0,0 +1,120 @@ +/datum/loadout_item/uniform + item_slot = ITEM_SLOT_ICLOTHING + +/datum/loadout_item/uniform/empty + name = "no uniform" + desc = "" + ui_icon = "empty" + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + jobs_supported = list( + SQUAD_MARINE, + SQUAD_CORPSMAN, + SQUAD_ENGINEER, + SQUAD_SMARTGUNNER, + SQUAD_LEADER, + FIELD_COMMANDER, + STAFF_OFFICER, + CAPTAIN, + SOM_SQUAD_MARINE, + SOM_SQUAD_CORPSMAN, + SOM_SQUAD_ENGINEER, + SOM_SQUAD_VETERAN, + SOM_SQUAD_LEADER, + SOM_FIELD_COMMANDER, + SOM_STAFF_OFFICER, + SOM_COMMANDER, + ) + + +/datum/loadout_item/uniform/marine_standard + name = "TGMC uniform" + desc = "A standard-issue, kevlar-weaved, hazmat-tested, EMF-augmented marine uniform. You suspect it's not as robust-proof as advertised." + item_typepath = /obj/item/clothing/under/marine/black_vest + jobs_supported = list(SQUAD_MARINE, SQUAD_SMARTGUNNER, SQUAD_LEADER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/uniform/red_fatigue + name = "Big Red fatigues" + desc = "Originated from Big Red. Designed for dry, low humid, and Mars-eqse environments, they're meant for recon, stealth, and evac operations. \ + They come with a built in cassette player hearable only to the user to help pass time, during any possible long waits. They make you feel like one with the desert, \ + forged by the beating Sun. Rumors had it that it can recycle your sweat and urine for drinkable water!" + item_typepath = /obj/item/clothing/under/marine/red_fatigue/black_vest + jobs_supported = list(SQUAD_MARINE, SQUAD_SMARTGUNNER, SQUAD_LEADER) + +/datum/loadout_item/uniform/striped_fatigue + name = "Striped fatigues" + desc = "A simple set of camo pants and a striped shirt." + item_typepath = /obj/item/clothing/under/marine/striped/black_vest + jobs_supported = list(SQUAD_MARINE, SQUAD_SMARTGUNNER, SQUAD_LEADER) + +/datum/loadout_item/uniform/lv_fatigue + name = "LV-624 fatigues" + desc = "Originated from LV-624. Designed for wet, high humid, and jungle environments, they're meant for recon, stealth, and evac operations. \ + They come with a built in cassette player hearable only to the user to help pass time, during any possible long waits. \ + Somewhere, someone is playing 'Fortunate Sons' in the background, and you can smell napalm and Agent Orange in the air..." + item_typepath = /obj/item/clothing/under/marine/lv_fatigue/black_vest + jobs_supported = list(SQUAD_MARINE, SQUAD_SMARTGUNNER, SQUAD_LEADER) + +/datum/loadout_item/uniform/orion_fatigue + name = "Orion fatigues" + desc = "Originated from Orion Military Outpost. Designed for ship and urban environments, they're meant for recon, stealth, and evac operations. \ + They come with a built in cassette player hearable only to the user to help pass time, during any possible long waits. They're the definition of over-funded ideas, \ + least they look neat. It is very likely that a boot fresh from boot camp to buy this at the BX with his E-1 pay because of how tacticool it looks." + item_typepath = /obj/item/clothing/under/marine/orion_fatigue/black_vest + jobs_supported = list(SQUAD_MARINE, SQUAD_SMARTGUNNER, SQUAD_LEADER) + +/datum/loadout_item/uniform/white_dress + name = "white dress uniform" + desc = "A standard-issue TerraGov Marine Corps white dress uniform. \ + The starch in the fabric chafes a small amount but it pales in comparison to the pride you feel when you first put it on during graduation from boot camp. Doesn't seem to fit perfectly around the waist though." + item_typepath = /obj/item/clothing/under/marine/whites + jobs_supported = list(SQUAD_MARINE, SQUAD_CORPSMAN, SQUAD_ENGINEER, SQUAD_SMARTGUNNER, SQUAD_LEADER, FIELD_COMMANDER, STAFF_OFFICER, CAPTAIN) + +//corpsman +/datum/loadout_item/uniform/marine_corpsman + name = "corpsman fatigues" + desc = "A standard-issue, kevlar-weaved, hazmat-tested, EMF-augmented combat corpsman fatigues. You suspect it's not as robust-proof as advertised." + item_typepath = /obj/item/clothing/under/marine/corpsman/corpman_vest + jobs_supported = list(SQUAD_CORPSMAN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +/datum/loadout_item/uniform/marine_corpsman/role_post_equip(mob/living/carbon/human/wearer, datum/outfit/quick/loadout) + wearer.equip_to_slot_or_del(new /obj/item/bodybag/cryobag, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/roller, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/tweezers_advanced, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/advanced/nanoblood, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/spaceacillin, SLOT_IN_ACCESSORY) + wearer.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/advanced/combat_advanced, SLOT_IN_ACCESSORY) + +//engineer +/datum/loadout_item/uniform/marine_engineer + name = "Engineer fatigues" + desc = "A standard-issue, kevlar-weaved, hazmat-tested, EMF-augmented combat engineer fatigues. You suspect it's not as robust-proof as advertised." + req_desc = "Requires a tool pouch. You ARE an engineer, right?" + item_typepath = /obj/item/clothing/under/marine/engineer/black_vest + jobs_supported = list(SQUAD_ENGINEER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +//FC +/datum/loadout_item/uniform/field_commander + name = "FC uniform" + desc = "A special-issue, kevlar-weaved, hazmat-tested, EMF-augmented worn by a field-grade officer of the TGMC. You suspect it's not as robust-proof as advertised." + item_typepath = /obj/item/clothing/under/marine/officer/exec/webbing + jobs_supported = list(FIELD_COMMANDER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +//Staff officer +/datum/loadout_item/uniform/staff_officer + name = "SO uniform" + desc = "A standard-issue, kevlar-weaved, hazmat-tested, EMF-augmented staff officer uniform. Do the navy proud." + item_typepath = /obj/item/clothing/under/marine/officer/bridge + jobs_supported = list(STAFF_OFFICER) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE + +//Captain +/datum/loadout_item/uniform/captain_officer + name = "Captain uniform" + desc = "A special-issue, well-ironed, kevlar-weaved, hazmat-tested, EMF-augmented uniform worth of a TerraGov Naval Captain. Even looking at it the wrong way could result in being court-martialed." + item_typepath = /obj/item/clothing/under/marine/officer/command + jobs_supported = list(CAPTAIN) + loadout_item_flags = LOADOUT_ITEM_ROUNDSTART_OPTION|LOADOUT_ITEM_DEFAULT_CHOICE diff --git a/code/datums/gamemodes/campaign/missions/airbase_raid.dm b/code/datums/gamemodes/campaign/missions/airbase_raid.dm index 166d180f1a9f4..c9427b83fc7eb 100644 --- a/code/datums/gamemodes/campaign/missions/airbase_raid.dm +++ b/code/datums/gamemodes/campaign/missions/airbase_raid.dm @@ -26,8 +26,6 @@ ) starting_faction_additional_rewards = "Disrupt enemy air support for a moderate period of time." hostile_faction_additional_rewards = "Ensure continued access to close air support. Recon mech and gorgon armor available if you successfully protect this depot." - ///The mech spawner type to create a mech for the defending team - var/mech_type = /obj/effect/landmark/campaign/mech_spawner/som /datum/campaign_mission/destroy_mission/airbase/play_start_intro() intro_message = list( @@ -62,13 +60,13 @@ /datum/campaign_mission/destroy_mission/airbase/apply_minor_loss() winning_faction = hostile_faction var/datum/faction_stats/winning_team = mode.stat_list[hostile_faction] - winning_team.add_asset(/obj/effect/landmark/campaign/mech_spawner/som/light) + winning_team.add_asset(/datum/campaign_asset/mech/light/som) winning_team.add_asset(/datum/campaign_asset/equipment/gorgon_armor) /datum/campaign_mission/destroy_mission/airbase/apply_major_loss() winning_faction = hostile_faction var/datum/faction_stats/winning_team = mode.stat_list[hostile_faction] - winning_team.add_asset(/obj/effect/landmark/campaign/mech_spawner/som/light) + winning_team.add_asset(/datum/campaign_asset/mech/light/som) winning_team.add_asset(/datum/campaign_asset/equipment/gorgon_armor) /datum/campaign_mission/destroy_mission/airbase/som @@ -80,5 +78,4 @@ map_light_levels = list(225, 150, 100, 75) objectives_total = 8 min_destruction_amount = 5 - mech_type = /obj/effect/landmark/campaign/mech_spawner hostile_faction_additional_rewards = "Ensure continued access to close air support. B18 power armour available if you successfully protect this depot." diff --git a/code/datums/gamemodes/campaign/missions/asat_capture.dm b/code/datums/gamemodes/campaign/missions/asat_capture.dm index b34b6c29f1bae..a295e1a7411cb 100644 --- a/code/datums/gamemodes/campaign/missions/asat_capture.dm +++ b/code/datums/gamemodes/campaign/missions/asat_capture.dm @@ -2,11 +2,13 @@ /datum/campaign_mission/capture_mission/asat name = "ASAT capture" mission_icon = "asat_capture" - map_name = "Lawanka outpost" + map_name = "Lawanka Outpost" map_file = '_maps/map_files/Lawanka_Outpost/LawankaOutpost.dmm' map_traits = list(ZTRAIT_AWAY = TRUE, ZTRAIT_RAIN = TRUE) map_light_colours = list(LIGHT_COLOR_PALE_GREEN, LIGHT_COLOR_PALE_GREEN, LIGHT_COLOR_PALE_GREEN, LIGHT_COLOR_PALE_GREEN) mission_flags = MISSION_DISALLOW_TELEPORT + max_game_time = 9 MINUTES + game_timer_delay = 90 SECONDS shutter_open_delay = list( MISSION_STARTING_FACTION = 90 SECONDS, MISSION_HOSTILE_FACTION = 0, @@ -39,17 +41,44 @@ starting_faction_additional_rewards = "Additional ICC support, ability to counteract TGMC drop pod usage" hostile_faction_additional_rewards = "Preserve the ability to use drop pods uncontested" - objectives_total = 5 - min_capture_amount = 3 + objectives_total = 6 + min_capture_amount = 5 /datum/campaign_mission/capture_mission/asat/load_pre_mission_bonuses() . = ..() - spawn_mech(hostile_faction, 0, 0, 3) - spawn_mech(starting_faction, 0, 2) + spawn_mech(hostile_faction, 0, 0, 5) + spawn_mech(starting_faction, 0, 1, 1) + + var/datum/faction_stats/attacking_team = mode.stat_list[starting_faction] + attacking_team.add_asset(/datum/campaign_asset/asset_disabler/som_cas/instant) /datum/campaign_mission/capture_mission/asat/load_objective_description() starting_faction_objective_description = "Major Victory:Capture all [objectives_total] ASAT systems.[min_capture_amount ? " Minor Victory: Capture at least [min_capture_amount] ASAT systems." : ""]" - hostile_faction_objective_description = "Major Victory:Prevent the capture of all [objectives_total] ASAT systems.[min_capture_amount ? " Minor Victory: Prevent the capture of atleast [min_capture_amount] ASAT systems." : ""]" + hostile_faction_objective_description = "Major Victory:Prevent the capture of all [objectives_total] ASAT systems.[min_capture_amount ? " Minor Victory: Prevent the capture of atleast [objectives_total - min_capture_amount + 1] ASAT systems." : ""]" + +/datum/campaign_mission/capture_mission/asat/check_mission_progress() + if(outcome) + return TRUE + + if(!game_timer) + return FALSE + + if(!max_time_reached && objectives_remaining) + return FALSE + + if(capture_count[MISSION_STARTING_FACTION] >= objectives_total) + message_admins("Mission finished: [MISSION_OUTCOME_MAJOR_VICTORY]") + outcome = MISSION_OUTCOME_MAJOR_VICTORY + else if(min_capture_amount && (capture_count[MISSION_STARTING_FACTION] >= min_capture_amount)) + message_admins("Mission finished: [MISSION_OUTCOME_MINOR_VICTORY]") + outcome = MISSION_OUTCOME_MINOR_VICTORY + else if(capture_count[MISSION_STARTING_FACTION] > 0) + message_admins("Mission finished: [MISSION_OUTCOME_MINOR_LOSS]") + outcome = MISSION_OUTCOME_MINOR_LOSS + else + message_admins("Mission finished: [MISSION_OUTCOME_MAJOR_LOSS]") + outcome = MISSION_OUTCOME_MAJOR_LOSS + return TRUE /datum/campaign_mission/capture_mission/asat/apply_major_victory() . = ..() diff --git a/code/datums/gamemodes/campaign/missions/base_rescue.dm b/code/datums/gamemodes/campaign/missions/base_rescue.dm index d1c53b6c19ce5..a801811de73a8 100644 --- a/code/datums/gamemodes/campaign/missions/base_rescue.dm +++ b/code/datums/gamemodes/campaign/missions/base_rescue.dm @@ -3,13 +3,14 @@ name = "NT base rescue" mission_icon = "nt_rescue" mission_flags = MISSION_DISALLOW_TELEPORT - map_name = "NT site B-403" + map_name = "NT Site B-403" map_file = '_maps/map_files/Campaign maps/nt_base/nt_base.dmm' map_traits = list(ZTRAIT_AWAY = TRUE, ZTRAIT_SNOWSTORM = TRUE) map_light_colours = list(COLOR_MISSION_BLUE, COLOR_MISSION_BLUE, COLOR_MISSION_BLUE, COLOR_MISSION_BLUE) map_light_levels = list(225, 150, 100, 75) objectives_total = 1 min_destruction_amount = 1 + max_game_time = 15 MINUTES shutter_open_delay = list( MISSION_STARTING_FACTION = 60 SECONDS, MISSION_HOSTILE_FACTION = 0, @@ -41,6 +42,8 @@ /datum/campaign_mission/destroy_mission/base_rescue/load_mission() . = ..() RegisterSignal(SSdcs, COMSIG_GLOB_CAMPAIGN_NT_OVERRIDE_CODE, PROC_REF(override_code_received)) + RegisterSignal(SSdcs, COMSIG_GLOB_CAMPAIGN_NT_OVERRIDE_RUNNING, PROC_REF(computer_running)) + RegisterSignal(SSdcs, COMSIG_GLOB_CAMPAIGN_NT_OVERRIDE_STOP_RUNNING, PROC_REF(computer_stop_running)) /datum/campaign_mission/destroy_mission/base_rescue/set_factions() attacking_faction = hostile_faction @@ -48,7 +51,7 @@ /datum/campaign_mission/destroy_mission/base_rescue/unregister_mission_signals() . = ..() - UnregisterSignal(SSdcs, COMSIG_GLOB_CAMPAIGN_NT_OVERRIDE_CODE) + UnregisterSignal(SSdcs, list(COMSIG_GLOB_CAMPAIGN_NT_OVERRIDE_CODE, COMSIG_GLOB_CAMPAIGN_NT_OVERRIDE_RUNNING, COMSIG_GLOB_CAMPAIGN_NT_OVERRIDE_STOP_RUNNING)) /datum/campaign_mission/destroy_mission/base_rescue/play_start_intro() intro_message = list( @@ -59,8 +62,12 @@ /datum/campaign_mission/destroy_mission/base_rescue/load_pre_mission_bonuses() . = ..() - for(var/i = 1 to objectives_total) - new /obj/item/storage/box/explosive_mines(get_turf(pick(GLOB.campaign_reward_spawners[defending_faction]))) + spawn_mech(attacking_faction, 0, 0, 4) + spawn_mech(defending_faction, 0, 0, 2) + + var/datum/faction_stats/defending_team = mode.stat_list[defending_faction] + defending_team.add_asset(/datum/campaign_asset/asset_disabler/tgmc_cas/instant) + defending_team.add_asset(/datum/campaign_asset/asset_disabler/tgmc_mortar) /datum/campaign_mission/destroy_mission/base_rescue/load_mission_brief() starting_faction_mission_brief = "NanoTrasen has issues an emergency request for assistance at an isolated medical facility located in the Western Ayolan Ranges. \ @@ -69,30 +76,40 @@ hostile_faction_mission_brief = "Recon forces have led us to this secure Nanotrasen facility in the Western Ayolan Ranges. Sympathetic native elements suggest NT have been conducting secret research here to the detriment of the local ecosystem and human settlements. \ Find the security override terminals to override the facility's emergency lockdown. \ Once the lockdown is lifted, destroy what they're working on inside." + starting_faction_mission_parameters = "Fire support is unavailable due to the sensitive and costly nature of this NT installation." + hostile_faction_mission_parameters = "Teleportation is unavailable in this area due to unknown interference from beneath the NT compound." /datum/campaign_mission/destroy_mission/base_rescue/load_objective_description() starting_faction_objective_description = "Major Victory:Protect the NT base from SOM attack. Do not allow them to override the security lockdown and destroy NT's sensitive equipment" hostile_faction_objective_description = "Major Victory: Override the security lockdown on the NT facility and destroy whatever secrets they are working on" +/datum/campaign_mission/destroy_mission/base_rescue/start_mission() + . = ..() + //We do this when the mission starts to stop nerds from wasting the militia roles pregame + var/datum/faction_stats/attacking_team = mode.stat_list[attacking_faction] + attacking_team.add_asset(/datum/campaign_asset/bonus_job/colonial_militia) + attacking_team.faction_assets[/datum/campaign_asset/bonus_job/colonial_militia].attempt_activatation(attacking_team.faction_leader, TRUE) + + /datum/campaign_mission/destroy_mission/base_rescue/apply_major_victory() . = ..() - var/datum/faction_stats/winning_team = mode.stat_list[starting_faction] + var/datum/faction_stats/winning_team = mode.stat_list[defending_faction] winning_team.add_asset(/datum/campaign_asset/bonus_job/pmc) winning_team.add_asset(/datum/campaign_asset/attrition_modifier/corporate_approval) /datum/campaign_mission/destroy_mission/base_rescue/apply_minor_victory() . = ..() - var/datum/faction_stats/winning_team = mode.stat_list[starting_faction] + var/datum/faction_stats/winning_team = mode.stat_list[defending_faction] winning_team.add_asset(/datum/campaign_asset/bonus_job/pmc) /datum/campaign_mission/destroy_mission/base_rescue/apply_minor_loss() . = ..() - var/datum/faction_stats/winning_team = mode.stat_list[hostile_faction] + var/datum/faction_stats/winning_team = mode.stat_list[attacking_faction] winning_team.add_asset(/datum/campaign_asset/bonus_job/colonial_militia) /datum/campaign_mission/destroy_mission/base_rescue/apply_major_loss() . = ..() - var/datum/faction_stats/winning_team = mode.stat_list[hostile_faction] + var/datum/faction_stats/winning_team = mode.stat_list[attacking_faction] winning_team.add_asset(/datum/campaign_asset/bonus_job/colonial_militia) winning_team.add_asset(/datum/campaign_asset/attrition_modifier/local_approval) @@ -103,6 +120,15 @@ map_text_broadcast(attacking_faction, message_to_play, "[color] override broadcast", /atom/movable/screen/text/screen_text/picture/potrait/unknown) map_text_broadcast(defending_faction, message_to_play, "[color] override broadcast", /atom/movable/screen/text/screen_text/picture/potrait/unknown) +///Code computer is actively running a segment +/datum/campaign_mission/destroy_mission/base_rescue/proc/computer_running(datum/source, obj/machinery/computer/nt_access/code_computer) + SIGNAL_HANDLER + pause_mission_timer(REF(code_computer)) + +///Code computer stops running a segment +/datum/campaign_mission/destroy_mission/base_rescue/proc/computer_stop_running(datum/source, obj/machinery/computer/nt_access/code_computer) + SIGNAL_HANDLER + resume_mission_timer(REF(code_computer)) /obj/effect/landmark/campaign_structure/weapon_x name = "weapon X spawner" @@ -140,13 +166,14 @@ return ..() /obj/structure/weapon_x_pod/update_icon_state() + . = ..() if(occupant) icon_state = initial(icon_state) else icon_state = "[initial(icon_state)]_open" -/obj/structure/weapon_x_pod/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X != occupant) +/obj/structure/weapon_x_pod/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker != occupant) return release_occupant() diff --git a/code/datums/gamemodes/campaign/missions/destroy_mission.dm b/code/datums/gamemodes/campaign/missions/destroy_mission.dm index 99445561bbdd6..13d541a36d861 100644 --- a/code/datums/gamemodes/campaign/missions/destroy_mission.dm +++ b/code/datums/gamemodes/campaign/missions/destroy_mission.dm @@ -101,7 +101,7 @@ if(mode.stat_list[attacking_faction].active_attrition_points) return FALSE //attacking team still has more bodies to throw into the fight var/list/player_list = count_humans(count_flags = COUNT_IGNORE_ALIVE_SSD) - if(length(player_list[attacking_faction == starting_faction ? 1 : 3])) + if(length(player_list[attacking_faction == starting_faction ? 1 : 2])) return FALSE //attacking team still has living guys if(min_destruction_amount && objectives_destroyed >= min_destruction_amount) //Destroyed at least the minimum required diff --git a/code/datums/gamemodes/campaign/missions/fire_support_raid.dm b/code/datums/gamemodes/campaign/missions/fire_support_raid.dm index fe806aceb2fd9..ef1943b6e9213 100644 --- a/code/datums/gamemodes/campaign/missions/fire_support_raid.dm +++ b/code/datums/gamemodes/campaign/missions/fire_support_raid.dm @@ -3,11 +3,13 @@ name = "Fire support raid" mission_icon = "mortar_raid" mission_flags = MISSION_DISALLOW_DROPPODS - map_name = "Jungle outpost SR-422" + map_name = "Jungle Outpost SR-422" map_file = '_maps/map_files/Campaign maps/jungle_outpost/jungle_outpost.dmm' map_traits = list(ZTRAIT_AWAY = TRUE, ZTRAIT_RAIN = TRUE) map_light_colours = list(LIGHT_COLOR_PALE_GREEN, LIGHT_COLOR_PALE_GREEN, LIGHT_COLOR_PALE_GREEN, LIGHT_COLOR_PALE_GREEN) - objectives_total = 10 + max_game_time = 10 MINUTES + game_timer_delay = 90 SECONDS + objectives_total = 9 min_destruction_amount = 7 shutter_open_delay = list( MISSION_STARTING_FACTION = 90 SECONDS, @@ -43,6 +45,12 @@ for(var/i = 1 to objectives_total) new /obj/item/storage/box/explosive_mines(get_turf(pick(GLOB.campaign_reward_spawners[defending_faction]))) + var/datum/faction_stats/attacking_team = mode.stat_list[starting_faction] + if(starting_faction == FACTION_TERRAGOV) + attacking_team.add_asset(/datum/campaign_asset/asset_disabler/tgmc_cas/instant) + else if(starting_faction == FACTION_SOM) + attacking_team.add_asset(/datum/campaign_asset/asset_disabler/som_cas/instant) + /datum/campaign_mission/destroy_mission/fire_support_raid/load_mission_brief() starting_faction_mission_brief = "A [hostile_faction] fire support position has been identified in this area. This key location provides fire support to [hostile_faction] forces across the region. \ By destroying this outpost we can silence their guns and greatly weaken the enemy's forces. \ @@ -95,6 +103,6 @@ map_traits = list(ZTRAIT_AWAY = TRUE) map_light_colours = list(COLOR_MISSION_RED, COLOR_MISSION_RED, COLOR_MISSION_RED, COLOR_MISSION_RED) map_light_levels = list(225, 150, 100, 75) - objectives_total = 8 - min_destruction_amount = 6 + objectives_total = 5 + min_destruction_amount = 4 hostile_faction_additional_rewards = "Protect our fire support options to ensure continued access to mortar support. Combat robots and fire support is available if you successfully defend this outpost." diff --git a/code/datums/gamemodes/campaign/missions/mech_wars.dm b/code/datums/gamemodes/campaign/missions/mech_wars.dm index 9c34a2a8ac380..558bb7b7d6eb5 100644 --- a/code/datums/gamemodes/campaign/missions/mech_wars.dm +++ b/code/datums/gamemodes/campaign/missions/mech_wars.dm @@ -9,7 +9,7 @@ map_light_levels = list(225, 150, 100, 75) starting_faction_objective_description = "Major Victory: Wipe out all hostiles in the area of operation. Minor Victory: Eliminate more hostiles than you lose." hostile_faction_objective_description = "Major Victory: Wipe out all hostiles in the area of operation. Minor Victory: Eliminate more hostiles than you lose." - mission_start_delay = 5 MINUTES //since there is actual mech prep time required + mission_start_delay = 3 MINUTES //since there is actual mech prep time required starting_faction_additional_rewards = "Mechanised units will be allocated to your battalion for use in future missions." hostile_faction_additional_rewards = "Mechanised units will be allocated to your battalion for use in future missions." @@ -39,7 +39,7 @@ spawner = pick(GLOB.campaign_mech_spawners[faction]) new_mech = spawner.spawn_mech() GLOB.campaign_structures += new_mech - RegisterSignal(new_mech, COMSIG_QDELETING, TYPE_PROC_REF(/datum/campaign_mission, remove_mission_object)) + RegisterSignal(new_mech, COMSIG_QDELETING, PROC_REF(on_mech_destruction)) //anti mech infantry weapons if(i % 2) @@ -75,54 +75,16 @@ winning_team.add_asset(/datum/campaign_asset/mech/heavy/som) winning_team.add_asset(/datum/campaign_asset/mech/som) -//mech spawn points -/obj/effect/landmark/campaign/mech_spawner - name = "tgmc med mech spawner" - icon_state = "mech" - var/faction = FACTION_TERRAGOV - var/list/colors = list(ARMOR_PALETTE_SPACE_CADET, ARMOR_PALETTE_GREYISH_TURQUOISE, VISOR_PALETTE_MAGENTA) - var/obj/vehicle/sealed/mecha/combat/greyscale/mech_type = /obj/vehicle/sealed/mecha/combat/greyscale/assault/noskill - -/obj/effect/landmark/campaign/mech_spawner/Initialize(mapload) - . = ..() - GLOB.campaign_mech_spawners[faction] += list(src) - -/obj/effect/landmark/campaign/mech_spawner/Destroy() - GLOB.campaign_mech_spawners[faction] -= src - return ..() - -/obj/effect/landmark/campaign/mech_spawner/proc/spawn_mech() - var/obj/vehicle/sealed/mecha/combat/greyscale/new_mech = new mech_type(loc) - for(var/i in new_mech.limbs) - var/datum/mech_limb/limb = new_mech.limbs[i] - limb.update_colors(arglist(colors)) - new_mech.update_icon() - return new_mech - -/obj/effect/landmark/campaign/mech_spawner/heavy - name = "tgmc heavy mech spawner" - icon_state = "mech_heavy" - mech_type = /obj/vehicle/sealed/mecha/combat/greyscale/vanguard/noskill - -/obj/effect/landmark/campaign/mech_spawner/light - name = "tgmc light mech spawner" - icon_state = "mech_light" - mech_type = /obj/vehicle/sealed/mecha/combat/greyscale/recon/noskill - -/obj/effect/landmark/campaign/mech_spawner/som - name = "som med mech spawner" - faction = FACTION_SOM - colors = list(ARMOR_PALETTE_GINGER, ARMOR_PALETTE_BLACK, VISOR_PALETTE_SYNDIE_GREEN) - -/obj/effect/landmark/campaign/mech_spawner/som/heavy - name = "som heavy mech spawner" - icon_state = "mech_heavy" - mech_type = /obj/vehicle/sealed/mecha/combat/greyscale/vanguard/noskill - -/obj/effect/landmark/campaign/mech_spawner/som/light - name = "som light mech spawner" - icon_state = "mech_light" - mech_type = /obj/vehicle/sealed/mecha/combat/greyscale/recon/noskill +///Cleans up after a mech is destroyed +/datum/campaign_mission/tdm/mech_wars/proc/on_mech_destruction(obj/vehicle/sealed/mecha/combat/greyscale/dead_mech) + SIGNAL_HANDLER + remove_mission_object(dead_mech) + if(outcome) + return + if(dead_mech.faction == hostile_faction) + start_team_cap_points += 10 + else if(dead_mech.faction == starting_faction) + hostile_team_cap_points += 10 /datum/campaign_mission/tdm/mech_wars/som name = "Mech war" diff --git a/code/datums/gamemodes/campaign/missions/patrol_mission.dm b/code/datums/gamemodes/campaign/missions/patrol_mission.dm index 0cb5f18bcd12c..62306fc261272 100644 --- a/code/datums/gamemodes/campaign/missions/patrol_mission.dm +++ b/code/datums/gamemodes/campaign/missions/patrol_mission.dm @@ -9,7 +9,7 @@ starting_faction_objective_description = "Major Victory: Wipe out all hostiles in the AO or capture and hold the sensor towers for a points victory. Minor Victory: Eliminate more hostiles than you lose." hostile_faction_objective_description = "Major Victory: Wipe out all hostiles in the AO or capture and hold the sensor towers for a points victory. Minor Victory: Eliminate more hostiles than you lose." max_game_time = 15 MINUTES - game_timer_delay = 5 MINUTES + game_timer_delay = 3 MINUTES victory_point_rewards = list( MISSION_OUTCOME_MAJOR_VICTORY = list(2, 0), MISSION_OUTCOME_MINOR_VICTORY = list(1, 0), @@ -35,40 +35,6 @@ starting_faction_additional_rewards = "If the enemy force is wiped out entirely, additional supplies can be diverted to your battalion." hostile_faction_additional_rewards = "If the enemy force is wiped out entirely, additional supplies can be diverted to your battalion." - major_victory_reward_table = list( - /obj/effect/supply_drop/medical_basic = 7, - /obj/effect/supply_drop/marine_sentry = 5, - /obj/effect/supply_drop/recoilless_rifle = 3, - /obj/effect/supply_drop/armor_upgrades = 5, - /obj/effect/supply_drop/mmg = 4, - /obj/effect/supply_drop/zx_shotgun = 3, - /obj/effect/supply_drop/minigun = 3, - /obj/effect/supply_drop/scout = 3, - ) - minor_victory_reward_table = list( - /obj/effect/supply_drop/medical_basic = 7, - /obj/effect/supply_drop/marine_sentry = 5, - /obj/effect/supply_drop/recoilless_rifle = 3, - /obj/effect/supply_drop/armor_upgrades = 5, - /obj/effect/supply_drop/mmg = 4, - ) - minor_loss_reward_table = list( - /obj/effect/supply_drop/medical_basic = 7, - /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/cope = 5, - /obj/effect/supply_drop/som_rpg = 3, - /obj/effect/supply_drop/som_armor_upgrades = 5, - /obj/effect/supply_drop/charger = 4, - ) - major_loss_reward_table = list( - /obj/effect/supply_drop/medical_basic = 7, - /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/cope = 5, - /obj/effect/supply_drop/som_rpg = 3, - /obj/effect/supply_drop/som_armor_upgrades = 5, - /obj/effect/supply_drop/charger = 4, - /obj/effect/supply_drop/culverin = 3, - /obj/effect/supply_drop/blink_kit = 3, - /obj/effect/supply_drop/som_shotgun_burst = 3, - ) ///Point limit to win the game via objectives var/capture_point_target = 400 ///starting team's point count @@ -81,6 +47,7 @@ RegisterSignal(SSdcs, COMSIG_GLOB_CAMPAIGN_CAPTURE_OBJECTIVE_CAPTURED, PROC_REF(objective_captured)) RegisterSignal(SSdcs, COMSIG_GLOB_CAMPAIGN_CAPTURE_OBJECTIVE_CAP_STARTED, PROC_REF(objective_cap_started)) + /datum/campaign_mission/tdm/unregister_mission_signals() . = ..() UnregisterSignal(SSdcs, list(COMSIG_GLOB_CAMPAIGN_CAPTURE_OBJECTIVE_CAPTURED, COMSIG_GLOB_CAMPAIGN_CAPTURE_OBJECTIVE_CAP_STARTED)) @@ -90,7 +57,7 @@ MISSION_STARTING_FACTION = "[map_name]
" + "[GAME_YEAR]-[time2text(world.realtime, "MM-DD")] [stationTimestamp("hh:mm")]
" + "Eliminate all [hostile_faction] resistance in the AO. Reinforcements are limited so preserve your forces as best you can. Good hunting!", MISSION_HOSTILE_FACTION = "[map_name]
" + "[GAME_YEAR]-[time2text(world.realtime, "MM-DD")] [stationTimestamp("hh:mm")]
" + "Eliminate all [starting_faction] resistance in the AO. Reinforcements are limited so preserve your forces as best you can. Good hunting!", ) - . = ..() + return ..() /datum/campaign_mission/tdm/get_status_tab_items(mob/source, list/items) . = ..() @@ -215,20 +182,21 @@ map_text_broadcast(losing_team, "[objective] was activated by the enemy. Get it offline!", "Activation cancelled") ///test missions -/datum/campaign_mission/tdm/lv624 +/datum/campaign_mission/tdm/orion name = "Combat patrol 2" - map_name = "Orion outpost" + map_name = "Orion Outpost" map_file = '_maps/map_files/Orion_Military_Outpost/orionoutpost.dmm' map_light_colours = list(COLOR_MISSION_YELLOW, COLOR_MISSION_YELLOW, COLOR_MISSION_YELLOW, COLOR_MISSION_YELLOW) map_light_levels = list(225, 150, 100, 75) /datum/campaign_mission/tdm/first_mission name = "First Contact" - map_name = "Jungle outpost SR-422" + map_name = "Jungle Outpost SR-422" map_file = '_maps/map_files/Campaign maps/jungle_outpost/jungle_outpost.dmm' map_traits = list(ZTRAIT_AWAY = TRUE, ZTRAIT_RAIN = TRUE) map_light_colours = list(LIGHT_COLOR_PALE_GREEN, LIGHT_COLOR_PALE_GREEN, LIGHT_COLOR_PALE_GREEN, LIGHT_COLOR_PALE_GREEN) map_light_levels = list(200, 100, 75, 50) + mission_start_delay = 3 MINUTES /datum/campaign_mission/tdm/first_mission/end_mission() . = ..() diff --git a/code/datums/gamemodes/campaign/missions/phoron_capture.dm b/code/datums/gamemodes/campaign/missions/phoron_capture.dm index 82e948d4e5054..9fb6074dfffe0 100644 --- a/code/datums/gamemodes/campaign/missions/phoron_capture.dm +++ b/code/datums/gamemodes/campaign/missions/phoron_capture.dm @@ -2,7 +2,7 @@ /datum/campaign_mission/capture_mission/phoron_capture name = "Phoron retrieval" mission_icon = "phoron_raid" - map_name = "Jungle outpost SR-422" + map_name = "Jungle Outpost SR-422" map_file = '_maps/map_files/Campaign maps/jungle_outpost/jungle_outpost.dmm' map_traits = list(ZTRAIT_AWAY = TRUE, ZTRAIT_RAIN = TRUE) map_light_colours = list(LIGHT_COLOR_PALE_GREEN, LIGHT_COLOR_PALE_GREEN, LIGHT_COLOR_PALE_GREEN, LIGHT_COLOR_PALE_GREEN) diff --git a/code/datums/gamemodes/campaign/missions/raiding_base.dm b/code/datums/gamemodes/campaign/missions/raiding_base.dm index d035a7e3c4a34..e68fba26316a4 100644 --- a/code/datums/gamemodes/campaign/missions/raiding_base.dm +++ b/code/datums/gamemodes/campaign/missions/raiding_base.dm @@ -1,97 +1,180 @@ -//placeholder /datum/campaign_mission/raiding_base - name = "Combat patrol" + name = "Raiding Base" mission_icon = "raiding_base" - map_name = "Orion Outpost" - map_file = '_maps/map_files/Campaign maps/jungle_outpost/jungle_outpost.dmm' - starting_faction_objective_description = null - hostile_faction_objective_description = null - max_game_time = 20 MINUTES + map_name = "Raiding base Zulu" + map_file = '_maps/map_files/Campaign maps/som_raid_base/som_raiding_base.dmm' + map_traits = list(ZTRAIT_AWAY = TRUE, ZTRAIT_RAIN = TRUE) + map_light_colours = list(LIGHT_COLOR_PALE_GREEN, LIGHT_COLOR_PALE_GREEN, COLOR_MISSION_RED, COLOR_MISSION_RED) + starting_faction_objective_description = "Major Victory: Set and defend an orbital beacon inside the facility until a precision orbital strike can be called in." + hostile_faction_objective_description = "Major Victory: Prevent the enemy from activating an orbital beacon inside the facility." + intro_message = list( + MISSION_STARTING_FACTION = "Infiltrate the SOM base, then plant and defend an orbital beacon until we can drop the hammer on them from orbit!", + MISSION_HOSTILE_FACTION = "Stop TGMC forces from infiltrating the base. Prevent them from activating an orbital beacon at all costs!", + ) + mission_flags = MISSION_DISALLOW_DROPPODS + max_game_time = 12 MINUTES + mission_start_delay = 90 SECONDS + shutter_open_delay = list( + MISSION_STARTING_FACTION = 90 SECONDS, + MISSION_HOSTILE_FACTION = 0, + ) victory_point_rewards = list( - MISSION_OUTCOME_MAJOR_VICTORY = list(3, 0), + MISSION_OUTCOME_MAJOR_VICTORY = list(2, 0), MISSION_OUTCOME_MINOR_VICTORY = list(1, 0), MISSION_OUTCOME_DRAW = list(0, 0), MISSION_OUTCOME_MINOR_LOSS = list(0, 1), - MISSION_OUTCOME_MAJOR_LOSS = list(0, 3), + MISSION_OUTCOME_MAJOR_LOSS = list(0, 2), ) attrition_point_rewards = list( - MISSION_OUTCOME_MAJOR_VICTORY = list(20, 5), - MISSION_OUTCOME_MINOR_VICTORY = list(15, 10), - MISSION_OUTCOME_DRAW = list(10, 10), - MISSION_OUTCOME_MINOR_LOSS = list(10, 15), - MISSION_OUTCOME_MAJOR_LOSS = list(5, 20), + MISSION_OUTCOME_MAJOR_VICTORY = list(20, 20), + MISSION_OUTCOME_MINOR_VICTORY = list(0, 0), + MISSION_OUTCOME_DRAW = list(0, 0), + MISSION_OUTCOME_MINOR_LOSS = list(0, 0), + MISSION_OUTCOME_MAJOR_LOSS = list(10, 30), ) - starting_faction_mission_brief = null - hostile_faction_mission_brief = null - starting_faction_additional_rewards = null - hostile_faction_additional_rewards = null - -/datum/campaign_mission/raiding_base/play_start_intro() - intro_message = list( - MISSION_STARTING_FACTION = "[map_name]
" + "[GAME_YEAR]-[time2text(world.realtime, "MM-DD")] [stationTimestamp("hh:mm")]
" + "Eliminate all [hostile_faction] resistance in the AO. Reinforcements are limited so preserve your forces as best you can. Good hunting!", - MISSION_HOSTILE_FACTION = "[map_name]
" + "[GAME_YEAR]-[time2text(world.realtime, "MM-DD")] [stationTimestamp("hh:mm")]
" + "Eliminate all [starting_faction] resistance in the AO. Reinforcements are limited so preserve your forces as best you can. Good hunting!", + starting_faction_mission_brief = "We have finally been able to track down a hidden SOM outpost which they have been using as a base of operations to raid our supply lines, wrecking havoc on our logistics. \ + Your unit has been tasked with ensuring the complete and utter destruction of this base and everything within it. \ + Infiltrate the facility, then deploy one of the orbital beacons you have been supplied with. \ + Defend the beacon until the TGS Horizon can secure a target lock and deploy a thermobaric bunker buster to wipe the outpost off the face of the planet." + hostile_faction_mission_brief = "Intelligence has picked up a TGMC plan to assault Raiding base Zulu. This base has been key to our sabotage and disruption efforts, significantly degrading TGMC supply lines. \ + Intel suggests that the TGMC are seeking to infiltrate the base to deploy a orbital beacon, in order to call down an orbital strike. \ + Prevent TGMC forces from entering the base, and destroy any orbital beacon they try to deploy." + starting_faction_additional_rewards = "Remove negative effects on our logistics" + hostile_faction_additional_rewards = "Allow us to continue degrading TGMC logistics" + outro_message = list( + MISSION_OUTCOME_MAJOR_VICTORY = list( + MISSION_STARTING_FACTION = "Major victory
Confirming good hit. Successful destruction of target facility. Outstanding marines!", + MISSION_HOSTILE_FACTION = "Major loss
We've lost Zulu, any survivors, fallback to exfil point Charlie, retreat!", + ), + MISSION_OUTCOME_MAJOR_LOSS = list( + MISSION_STARTING_FACTION = "Major loss
SOM interceptors are inbound, all forces fallback, this operation is a loss.", + MISSION_HOSTILE_FACTION = "Major victory
Reinforcements are almost here and enemy forces are falling back, you've done Mars proud today marines.", + ), ) + ///Records whether the OB has been called + var/ob_called = FALSE + ///Count of beacons still in play + var/beacons_remaining = 4 + +/datum/campaign_mission/raiding_base/get_status_tab_items(mob/source, list/items) . = ..() + items += "Beacons remaining: [beacons_remaining]" + +/datum/campaign_mission/raiding_base/load_pre_mission_bonuses() + spawn_mech(starting_faction, 0, 0, 3) + spawn_mech(hostile_faction, 0, 2) + new /obj/item/storage/box/crate/loot/materials_pack(get_turf(pick(GLOB.campaign_reward_spawners[hostile_faction]))) + for(var/i = 1 to beacons_remaining) + new /obj/item/explosive/plastique(get_turf(pick(GLOB.campaign_reward_spawners[hostile_faction]))) + new /obj/item/explosive/plastique(get_turf(pick(GLOB.campaign_reward_spawners[hostile_faction]))) + new /obj/item/campaign_beacon/bunker_buster(get_turf(pick(GLOB.campaign_reward_spawners[starting_faction]))) + +/datum/campaign_mission/raiding_base/start_mission() + . = ..() + RegisterSignal(SSdcs, COMSIG_GLOB_CAMPAIGN_OB_BEACON_ACTIVATION, PROC_REF(beacon_placed)) + RegisterSignal(SSdcs, COMSIG_GLOB_CAMPAIGN_OB_BEACON_TRIGGERED, PROC_REF(beacon_triggered)) /datum/campaign_mission/raiding_base/check_mission_progress() if(outcome) return TRUE if(!game_timer) - return + return FALSE - ///pulls the number of both factions, dead or alive - var/list/player_list = count_humans(count_flags = COUNT_IGNORE_ALIVE_SSD) - var/num_team_one = length(player_list[1]) - var/num_team_two = length(player_list[2]) - var/num_dead_team_one = length(player_list[3]) - var/num_dead_team_two = length(player_list[4]) - - if(num_team_two && num_team_one && !max_time_reached) - return //fighting is ongoing - - //major victor for wiping out the enemy, or draw if both sides wiped simultaneously somehow - if(!num_team_two) - if(!num_team_one) - message_admins("Mission finished: [MISSION_OUTCOME_DRAW]") //everyone died at the same time, no one wins - outcome = MISSION_OUTCOME_DRAW - return TRUE - message_admins("Mission finished: [MISSION_OUTCOME_MAJOR_VICTORY]") //starting team wiped the hostile team + if(ob_called) + message_admins("Mission finished: [MISSION_OUTCOME_MAJOR_VICTORY]") //Attackers dropped the hammer outcome = MISSION_OUTCOME_MAJOR_VICTORY return TRUE - if(!num_team_one) - message_admins("Mission finished: [MISSION_OUTCOME_MAJOR_LOSS]") //hostile team wiped the starting team - outcome = MISSION_OUTCOME_MAJOR_LOSS - return TRUE + var/attacker_lost - //minor victories for more kills or draw for equal kills - if(num_dead_team_two > num_dead_team_one) - message_admins("Mission finished: [MISSION_OUTCOME_MINOR_VICTORY]") //starting team got more kills - outcome = MISSION_OUTCOME_MINOR_VICTORY - return TRUE - if(num_dead_team_one > num_dead_team_two) - message_admins("Mission finished: [MISSION_OUTCOME_MINOR_LOSS]") //hostile team got more kills - outcome = MISSION_OUTCOME_MINOR_LOSS - return TRUE + if(!length(GLOB.campaign_objectives) || max_time_reached) + attacker_lost = TRUE + else + var/list/player_list = count_humans(count_flags = COUNT_IGNORE_ALIVE_SSD) + var/num_team_one = length(player_list[1]) + var/datum/faction_stats/attacker_stats = mode.stat_list[starting_faction] + if(!num_team_one && !attacker_stats.active_attrition_points) + attacker_lost = TRUE - message_admins("Mission finished: [MISSION_OUTCOME_DRAW]") //equal number of kills, or any other edge cases - outcome = MISSION_OUTCOME_DRAW + if(!attacker_lost) + return FALSE + message_admins("Mission finished: [MISSION_OUTCOME_MAJOR_LOSS]") //Attackers run out of beacons, time or bodies + outcome = MISSION_OUTCOME_MAJOR_LOSS return TRUE -//todo: remove these if nothing new is added -/datum/campaign_mission/raiding_base/apply_major_victory() +/datum/campaign_mission/raiding_base/unregister_mission_signals() . = ..() + UnregisterSignal(SSdcs, list(COMSIG_GLOB_CAMPAIGN_OB_BEACON_ACTIVATION, COMSIG_GLOB_CAMPAIGN_OB_BEACON_TRIGGERED)) -/datum/campaign_mission/raiding_base/apply_minor_victory() +/datum/campaign_mission/raiding_base/apply_major_victory() . = ..() + winning_faction = starting_faction + var/datum/faction_stats/winning_team = mode.stat_list[starting_faction] + winning_team.remove_asset(/datum/campaign_asset/attrition_modifier/malus_strong) + winning_team.remove_asset(/datum/campaign_asset/attrition_modifier/malus_standard) + //We don't have enough missions in the pool yet to activate this + //GLOB.campaign_mission_pool[hostile_faction] -= /datum/campaign_mission/destroy_mission/supply_raid/som + //GLOB.campaign_mission_pool[hostile_faction] -= /datum/campaign_mission/destroy_mission/supply_raid -/datum/campaign_mission/raiding_base/apply_draw() - winning_faction = pick(starting_faction, hostile_faction) - -/datum/campaign_mission/raiding_base/apply_minor_loss() - . = ..() /datum/campaign_mission/raiding_base/apply_major_loss() . = ..() + winning_faction = hostile_faction + var/datum/faction_stats/winning_team = mode.stat_list[hostile_faction] + if(hostile_faction == FACTION_TERRAGOV) + winning_team.add_asset(/datum/campaign_asset/equipment/power_armor) + else if(hostile_faction == FACTION_SOM) + winning_team.add_asset(/datum/campaign_asset/mech/light/som) + winning_team.add_asset(/datum/campaign_asset/equipment/gorgon_armor) + +///Returns a list of areas in which the beacon can be deployed +/datum/campaign_mission/raiding_base/proc/get_valid_beacon_areas() + return list( + /area/campaign/som_raiding/outpost/command, + /area/campaign/som_raiding/outpost/command/captain, + /area/campaign/som_raiding/outpost/command/telecom, + /area/campaign/som_raiding/outpost/command/cic, + /area/campaign/som_raiding/outpost/command/north, + /area/campaign/som_raiding/outpost/command/living, + /area/campaign/som_raiding/outpost/medbay, + /area/campaign/som_raiding/outpost/central_corridor, + ) + +///Reacts to an OB beacon being successfully triggered +/datum/campaign_mission/raiding_base/proc/beacon_placed(datum/source, obj/structure/campaign_objective/destruction_objective/bunker_buster/beacon) + SIGNAL_HANDLER + RegisterSignal(beacon, COMSIG_QDELETING, PROC_REF(beacon_destroyed)) + pause_mission_timer(REF(beacon)) + var/area/deployed_area = get_area(beacon) + map_text_broadcast(starting_faction, "Confirming beacon deployed in [deployed_area]. Defend it until we can secure a target lock marines!", "TGS Horizon", /atom/movable/screen/text/screen_text/picture/potrait/pod_officer, "sound/effects/alert.ogg") + map_text_broadcast(hostile_faction, "Orbital beacon detected in [deployed_area]. Destroy that beacon before they can secure a target lock!", "Overwatch", sound_effect = "sound/effects/alert.ogg") + +///Handles a beacon being destroyed. Separate from normal objective destruction for convenience as we want the specific beacon ref +/datum/campaign_mission/raiding_base/proc/beacon_destroyed(obj/structure/campaign_objective/destruction_objective/bunker_buster/beacon) + SIGNAL_HANDLER + UnregisterSignal(beacon, COMSIG_QDELETING) + resume_mission_timer(REF(beacon)) + beacons_remaining -- + if(outcome) + return + var/beacons_destroyed = initial(beacons_remaining) - beacons_remaining + map_text_broadcast(starting_faction, "We've lost [beacons_destroyed] beacon[beacons_destroyed > 1 ? "s" : null], get it together!", "Overwatch") + map_text_broadcast(hostile_faction, "[beacons_destroyed] beacon[beacons_destroyed > 1 ? "s" : null] destroyed, keep up the good work!", "Overwatch") + +///Reacts to an OB beacon being successfully triggered +/datum/campaign_mission/raiding_base/proc/beacon_triggered(datum/source, obj/structure/campaign_objective/destruction_objective/bunker_buster/beacon, activation_delay) + SIGNAL_HANDLER + pause_mission_timer() //stops the game from ending if it comes down to the wire + addtimer(CALLBACK(src, PROC_REF(beacon_effect), beacon, beacon.loc), activation_delay) + +///Handles the actual detonation effects +/datum/campaign_mission/raiding_base/proc/beacon_effect(obj/structure/campaign_objective/destruction_objective/bunker_buster/beacon, turf/location) + ob_called = TRUE + resume_mission_timer(src, TRUE) + //We handle this here instead of the beacon structure because it could be destroyed before this triggers + explosion(location, 45, flame_range = 45) + if(QDELETED(beacon)) + return + qdel(beacon) diff --git a/code/datums/gamemodes/campaign/missions/supply_raid.dm b/code/datums/gamemodes/campaign/missions/supply_raid.dm index 3ceb9bea15922..45b1843d8f4de 100644 --- a/code/datums/gamemodes/campaign/missions/supply_raid.dm +++ b/code/datums/gamemodes/campaign/missions/supply_raid.dm @@ -3,7 +3,7 @@ name = "Supply Depot raid" mission_icon = "supply_depot" mission_flags = MISSION_DISALLOW_DROPPODS - map_name = "Rocinante base" + map_name = "Rocinante Base" map_file = '_maps/map_files/Campaign maps/som_base/sombase.dmm' map_traits = list(ZTRAIT_AWAY = TRUE, ZTRAIT_SNOWSTORM = TRUE) map_light_colours = list(COLOR_MISSION_BLUE, COLOR_MISSION_BLUE, COLOR_MISSION_BLUE, COLOR_MISSION_BLUE) @@ -45,6 +45,11 @@ /datum/campaign_mission/destroy_mission/supply_raid/load_pre_mission_bonuses() . = ..() spawn_mech(defending_faction, 0, 1) + var/datum/faction_stats/attacking_team = mode.stat_list[starting_faction] + if(starting_faction == FACTION_TERRAGOV) + attacking_team.add_asset(/datum/campaign_asset/asset_disabler/tgmc_cas/instant) + else if(starting_faction == FACTION_SOM) + attacking_team.add_asset(/datum/campaign_asset/asset_disabler/som_cas/instant) /datum/campaign_mission/destroy_mission/supply_raid/apply_major_victory() winning_faction = starting_faction @@ -62,7 +67,7 @@ if(hostile_faction == FACTION_TERRAGOV) winning_team.add_asset(/datum/campaign_asset/equipment/power_armor) else if(hostile_faction == FACTION_SOM) - winning_team.add_asset(/obj/effect/landmark/campaign/mech_spawner/som/light) + winning_team.add_asset(/datum/campaign_asset/mech/light/som) winning_team.add_asset(/datum/campaign_asset/equipment/gorgon_armor) /datum/campaign_mission/destroy_mission/supply_raid/apply_major_loss() @@ -71,16 +76,16 @@ if(hostile_faction == FACTION_TERRAGOV) winning_team.add_asset(/datum/campaign_asset/equipment/power_armor) else if(hostile_faction == FACTION_SOM) - winning_team.add_asset(/obj/effect/landmark/campaign/mech_spawner/som/light) + winning_team.add_asset(/datum/campaign_asset/mech/light/som) winning_team.add_asset(/datum/campaign_asset/equipment/gorgon_armor) /datum/campaign_mission/destroy_mission/supply_raid/som mission_flags = MISSION_DISALLOW_TELEPORT - map_name = "Orion outpost" + map_name = "Orion Outpost" map_file = '_maps/map_files/Campaign maps/orion_2/orionoutpost_2.dmm' map_light_colours = list(COLOR_MISSION_RED, COLOR_MISSION_RED, COLOR_MISSION_RED, COLOR_MISSION_RED) map_traits = list(ZTRAIT_AWAY = TRUE) map_light_levels = list(225, 150, 100, 75) objectives_total = 8 - min_destruction_amount = 5 + min_destruction_amount = 6 hostile_faction_additional_rewards = "Prevent the degradation of our attrition generation. B18 power armour available if you successfully protect this depot." diff --git a/code/datums/gamemodes/campaign/outfit_holder.dm b/code/datums/gamemodes/campaign/outfit_holder.dm new file mode 100644 index 0000000000000..97f6233f440c7 --- /dev/null +++ b/code/datums/gamemodes/campaign/outfit_holder.dm @@ -0,0 +1,138 @@ +//holds a record of loadout_item datums, and the actual loadout itself +/datum/outfit_holder + var/role + ///Assoc list of loadout_items by slot + var/list/datum/loadout_item/equipped_things = list() + ///The actual loadout to be equipped + var/datum/outfit/quick/loadout + ///Cost of the loadout to equip + var/loadout_cost = 0 + ///Items available to be equipped + var/list/list/datum/loadout_item/available_list = list() + ///Items available to be purchased + var/list/list/datum/loadout_item/purchasable_list = list() + +/datum/outfit_holder/New(new_role) + . = ..() + role = new_role + loadout = new /datum/outfit/quick + for(var/slot in GLOB.campaign_loadout_slots) + available_list["[slot]"] = list() + purchasable_list["[slot]"] = list() + for(var/datum/loadout_item/loadout_item AS in GLOB.campaign_loadout_items_by_role[role]) + if(!loadout_item.name) //various parent types + continue + if(loadout_item.item_slot != slot) + continue + if(loadout_item.loadout_item_flags & LOADOUT_ITEM_DEFAULT_CHOICE) + equip_loadout_item(loadout_item) + if(loadout_item.loadout_item_flags & LOADOUT_ITEM_ROUNDSTART_OPTION) + available_list["[loadout_item.item_slot]"] += loadout_item + continue + if(loadout_item.loadout_item_flags & LOADOUT_ITEM_ROUNDSTART_UNLOCKABLE) + purchasable_list["[loadout_item.item_slot]"] += loadout_item + +/datum/outfit_holder/Destroy(force, ...) + equipped_things = null + available_list = null + purchasable_list = null + QDEL_NULL(loadout) + return ..() + +///Equips the loadout to a mob +/datum/outfit_holder/proc/equip_loadout(mob/living/carbon/human/owner) + loadout.equip(owner) + for(var/slot in equipped_things) + var/datum/loadout_item/thing_to_check = equipped_things["[slot]"] + if(!thing_to_check) + continue + if(thing_to_check.quantity > 0) + thing_to_check.quantity -- + thing_to_check.post_equip(owner, loadout) + +///Adds a new loadout_item to the available list +/datum/outfit_holder/proc/unlock_new_option(datum/loadout_item/new_item) + available_list["[new_item.item_slot]"] |= new_item + purchasable_list["[new_item.item_slot]"] -= new_item + +///Adds a new loadout_item to the purchasable list +/datum/outfit_holder/proc/allow_new_option(datum/loadout_item/new_item) + if(!istype(new_item)) + return + if(new_item in purchasable_list["[new_item.item_slot]"]) + return + if(new_item in available_list["[new_item.item_slot]"]) + return + purchasable_list["[new_item.item_slot]"] += new_item + +///Removes loadout_item entirely from being equipped +/datum/outfit_holder/proc/remove_option(datum/loadout_item/removed_item) + if(!istype(removed_item)) + return + var/removed_item_slot = "[removed_item.item_slot]" + available_list[removed_item_slot] -= removed_item + purchasable_list[removed_item_slot] -= removed_item + if(equipped_things[removed_item_slot] == removed_item) + equip_loadout_item(available_list[removed_item_slot][1]) + return TRUE + +///Tries to add a datum if valid +/datum/outfit_holder/proc/attempt_equip_loadout_item(datum/loadout_item/new_item) + if(!new_item.item_checks(src)) + return FALSE + equip_loadout_item(new_item) + return TRUE + +///Actually adds an item to a loadout +/datum/outfit_holder/proc/equip_loadout_item(datum/loadout_item/new_item) + var/slot_bit = "[new_item.item_slot]" + loadout_cost -= equipped_things[slot_bit]?.purchase_cost + equipped_things[slot_bit] = new_item //adds the datum + loadout_cost += equipped_things[slot_bit]?.purchase_cost + + switch(new_item.item_slot) //adds it to the loadout itself + if(ITEM_SLOT_OCLOTHING) + loadout.wear_suit = new_item?.item_typepath + if(ITEM_SLOT_ICLOTHING) + loadout.w_uniform = new_item?.item_typepath + if(ITEM_SLOT_GLOVES) + loadout.gloves = new_item?.item_typepath + if(ITEM_SLOT_EYES) + loadout.glasses = new_item?.item_typepath + if(ITEM_SLOT_EARS) + loadout.ears = new_item?.item_typepath + if(ITEM_SLOT_MASK) + loadout.mask = new_item?.item_typepath + if(ITEM_SLOT_HEAD) + loadout.head = new_item?.item_typepath + if(ITEM_SLOT_FEET) + loadout.shoes = new_item?.item_typepath + if(ITEM_SLOT_ID) + loadout.id = new_item?.item_typepath + if(ITEM_SLOT_BELT) + loadout.belt = new_item?.item_typepath + if(ITEM_SLOT_BACK) + loadout.back = new_item?.item_typepath + if(ITEM_SLOT_R_POCKET) + loadout.r_store = new_item?.item_typepath + if(ITEM_SLOT_L_POCKET) + loadout.l_store = new_item?.item_typepath + if(ITEM_SLOT_SUITSTORE) + loadout.suit_store = new_item?.item_typepath + else + CRASH("Invalid item slot specified [slot_bit]") + return TRUE + +///scans the entire loadout for validity +/datum/outfit_holder/proc/check_full_loadout() + . = TRUE + for(var/slot in equipped_things) + var/datum/loadout_item/thing_to_check = equipped_things["[slot]"] + if(!thing_to_check) + continue + if(thing_to_check.quantity == 0) + return FALSE + if(length(thing_to_check.item_whitelist) && !thing_to_check.whitelist_check(src)) + return FALSE + if(length(thing_to_check.item_blacklist) && !thing_to_check.blacklist_check(src)) + return FALSE diff --git a/code/datums/gamemodes/campaign/perks.dm b/code/datums/gamemodes/campaign/perks.dm new file mode 100644 index 0000000000000..53db3189653a3 --- /dev/null +++ b/code/datums/gamemodes/campaign/perks.dm @@ -0,0 +1,433 @@ +GLOBAL_LIST_INIT_TYPED(campaign_perk_list, /datum/perk, init_glob_perk_list()) //this may or may not be even needed + +/proc/init_glob_perk_list() + . = list() + for(var/perk_type in subtypesof(/datum/perk)) + var/datum/perk/perk = new perk_type + .[perk_type] = perk + +//List of all loadout_item datums by job, excluding ones that must be unlocked +GLOBAL_LIST_INIT(campaign_perks_by_role, init_campaign_perks_by_role()) + +/proc/init_campaign_perks_by_role() + . = list() + for(var/job in GLOB.campaign_jobs) + .[job] = list() + for(var/i in GLOB.campaign_perk_list) + var/datum/perk/perk = GLOB.campaign_perk_list[i] + if(!(job in perk.jobs_supported)) + continue + .[job] += perk + +/* +Will need a way to org perks (and other stuff) by faction and/or specific role. +Needed both for a purchase list and effected list (if one perk impacts multiple roles, unless we keep everything entirely separate) +**/ +/datum/perk + ///Name of the perk + var/name = "base perk name" + ///Brief description of the perk + var/desc = "desc here" + ///Addition desc for special reqs such as other perks + var/req_desc + ///UI icon for this perk + var/ui_icon + ///Cost to purchase this perk + var/unlock_cost = 0 + ///Job types that this perk is available to. no list implies this works for any job + var/list/jobs_supported + ///This applies to all campaign jobs + var/all_jobs = FALSE + ///Any perks required before this one can be obtained + var/list/datum/perk/prereq_perks + +/datum/perk/New() + . = ..() + if(all_jobs) + jobs_supported = GLOB.campaign_jobs + +///Any one off bonuses for unlocking this perk +/datum/perk/proc/unlock_bonus(mob/living/carbon/owner, datum/individual_stats/owner_stats) + return + +///Applies perk benefits +/datum/perk/proc/apply_perk(mob/living/carbon/owner) + return + +///Removes perk benefits +/datum/perk/proc/remove_perk(mob/living/carbon/owner) + return + +/datum/perk/shield_overclock + name = "Shield overlock" + desc = "Overclocking a shield module beyond manufacturing specifications results in a more powerful shield at that cost of burning out sensitive components after weeks of use instead of months. \ + May void the warranty. Also unlocks shield modules for roles that do not already have access to it." + ui_icon = "overclock" + all_jobs = TRUE + unlock_cost = 800 + +/datum/perk/shield_overclock/unlock_bonus(mob/living/carbon/owner, datum/individual_stats/owner_stats) + if(owner_stats.faction == FACTION_TERRAGOV) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_slot/light_shield/overclocked, /datum/loadout_item/suit_slot/light_shield, jobs_supported) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_slot/medium_shield/overclocked, /datum/loadout_item/suit_slot/medium_shield, jobs_supported) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_slot/heavy_shield/overclocked, /datum/loadout_item/suit_slot/heavy_shield, jobs_supported) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_slot/medium_shield/overclocked/engineer, /datum/loadout_item/suit_slot/medium_engineer, jobs_supported) + owner_stats.unlock_loadout_item(/datum/loadout_item/suit_slot/light_shield/overclocked/medic, SQUAD_CORPSMAN, owner) + owner_stats.unlock_loadout_item(/datum/loadout_item/suit_slot/medium_shield/overclocked/medic, SQUAD_CORPSMAN, owner) + owner_stats.unlock_loadout_item(/datum/loadout_item/suit_slot/light_shield/overclocked/engineer, SQUAD_ENGINEER, owner) + + else if(owner_stats.faction == FACTION_SOM) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_slot/som_light_shield/overclocked, /datum/loadout_item/suit_slot/som_light_shield, jobs_supported) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_slot/som_light_shield/overclocked/veteran, /datum/loadout_item/suit_slot/som_light_shield/veteran, jobs_supported) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_slot/som_medium_shield/overclocked, /datum/loadout_item/suit_slot/som_medium_shield, jobs_supported) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_slot/som_heavy_shield/overclocked, /datum/loadout_item/suit_slot/som_heavy_shield, jobs_supported) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_slot/som_heavy_shield/breacher/overclocked, /datum/loadout_item/suit_slot/som_heavy_shield/breacher, jobs_supported) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_slot/som_light_shield/overclocked/medic, /datum/loadout_item/suit_slot/som_medic/light, jobs_supported) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_slot/som_medium_shield/overclocked/medic, /datum/loadout_item/suit_slot/som_medic, jobs_supported) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_slot/som_light_shield/overclocked/engineer, /datum/loadout_item/suit_slot/som_engineer/light, jobs_supported) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_slot/som_medium_shield/overclocked/engineer, /datum/loadout_item/suit_slot/som_engineer, jobs_supported) + +//perks that give a trait +/datum/perk/trait + ///List of traits provided by this perk + var/list/traits + +/datum/perk/trait/apply_perk(mob/living/carbon/owner) + owner.add_traits(traits, type) + +/datum/perk/trait/remove_perk(mob/living/carbon/owner) + owner.remove_traits(traits, type) + +/datum/perk/trait/hp_boost + name = "Improved constitution" + desc = "Through disciplined training and hypno indoctrination, your body is able to tolerate higher levels of trauma. +25 max health, +25 pain resistance." + ui_icon = "health_1" + all_jobs = TRUE + unlock_cost = 800 + traits = list(TRAIT_LIGHT_PAIN_RESIST) + ///How much this perk increases your maxhp by + var/health_mod = 25 + +/datum/perk/trait/hp_boost/apply_perk(mob/living/carbon/owner) + . = ..() + owner.maxHealth += health_mod + +/datum/perk/trait/hp_boost/remove_perk(mob/living/carbon/owner) + . = ..() + owner.maxHealth -= health_mod + +/datum/perk/trait/hp_boost/two + name = "Extreme constitution" + desc = "Military grade biological augmentations are used to harden your body against grievous bodily harm. Provides an addition +25 max health and +10 pain resistance." + req_desc = "Requires Improved constitution." + ui_icon = "health_2" + prereq_perks = list(/datum/perk/trait/hp_boost) + traits = list(TRAIT_MEDIUM_PAIN_RESIST) + unlock_cost = 1000 + +/datum/perk/trait/quiet + name = "Light footed" + desc = "Quiet when running, silent when walking." + ui_icon = "soft_footed" + traits = list(TRAIT_LIGHT_STEP) + all_jobs = TRUE + unlock_cost = 300 + +/datum/perk/trait/axe_master + name = "Axe master" + desc = "You are able to wield a breaching axe with considerable skill. Grants access to a special sweep attack when wielded, and allows some roles to select an axe as a back stored weapon." + req_desc = "Requires Melee specialisation." + ui_icon = "axe" + traits = list(TRAIT_AXE_EXPERT) + jobs_supported = list(SOM_SQUAD_MARINE, SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER) + unlock_cost = 450 + prereq_perks = list(/datum/perk/skill_mod/melee/two) + +/datum/perk/trait/axe_master/unlock_bonus(mob/living/carbon/owner, datum/individual_stats/owner_stats) + if(!istype(owner_stats)) + return + owner_stats.unlock_loadout_item(/datum/loadout_item/back/boarding_axe, jobs_supported, owner, 0) + +/datum/perk/trait/sword_master + name = "Sword master" + desc = "You are able to wield a sword with considerable skill. Grants access to a special lunge attack when wielding any sword, and allows some roles to select a sword as a back or suit stored weapon." + req_desc = "Requires Melee specialisation." + ui_icon = "sword" + traits = list(TRAIT_SWORD_EXPERT) + jobs_supported = list(SQUAD_MARINE, SQUAD_LEADER, FIELD_COMMANDER, SOM_SQUAD_MARINE, SOM_SQUAD_ENGINEER, SOM_SQUAD_VETERAN, SOM_SQUAD_LEADER, SOM_FIELD_COMMANDER) + unlock_cost = 450 + prereq_perks = list(/datum/perk/skill_mod/melee/two) + +/datum/perk/trait/sword_master/unlock_bonus(mob/living/carbon/owner, datum/individual_stats/owner_stats) + if(!istype(owner_stats)) + return + owner_stats.unlock_loadout_item(/datum/loadout_item/back/machete, jobs_supported, owner, 0) + owner_stats.unlock_loadout_item(/datum/loadout_item/belt/energy_sword, jobs_supported, owner, 0) + +//skill modifying perks +/datum/perk/skill_mod + var/cqc + var/melee_weapons + var/firearms + var/pistols + var/shotguns + var/rifles + var/smgs + var/heavy_weapons + var/smartgun + var/engineer + var/construction + var/leadership + var/medical + var/surgery + var/pilot + var/police + var/powerloader + var/large_vehicle + var/stamina + +/datum/perk/skill_mod/New() + . = ..() + +/datum/perk/skill_mod/apply_perk(mob/living/carbon/owner) + owner.set_skills(owner.skills.modifyRating(cqc, melee_weapons, firearms, pistols, shotguns, rifles, smgs, heavy_weapons, smartgun, \ + engineer, construction, leadership, medical, surgery, pilot, police, powerloader, large_vehicle, stamina)) + +/datum/perk/skill_mod/remove_perk(mob/living/carbon/owner) + owner.set_skills(owner.skills.modifyRating(-cqc, -melee_weapons, -firearms, -pistols, -shotguns, -rifles, -smgs, -heavy_weapons, -smartgun, \ + -engineer, -construction, -leadership, -medical, -surgery, -pilot, -police, -powerloader, -large_vehicle, -stamina)) + +/datum/perk/skill_mod/cqc + name = "Hand to hand expertise" + desc = "Advanced hand to hand combat training gives you an edge when you need to punch someone in the face. Improved unarmed damage and stun chance." + ui_icon = "cqc_1" + cqc = 1 + all_jobs = TRUE + unlock_cost = 250 + +/datum/perk/skill_mod/cqc/two + name = "Hand to hand specialisation" + desc = "Muscle augments combined with specialised hand to hand combat training turn your body into a lethal weapon. Greatly improved unarmed damage and stun chance." + req_desc = "Requires Hand to hand expertise." + ui_icon = "cqc_2" + unlock_cost = 350 + prereq_perks = list(/datum/perk/skill_mod/cqc) + +/datum/perk/skill_mod/melee + name = "Melee expertise" + desc = "Improved damage with melee weapons." + ui_icon = "melee_1" + melee_weapons = 1 + all_jobs = TRUE + unlock_cost = 300 + +/datum/perk/skill_mod/melee/two + name = "Melee specialisation" + desc = "Greatly improved damage with melee weapons." + req_desc = "Requires Melee expertise." + ui_icon = "melee_2" + prereq_perks = list(/datum/perk/skill_mod/melee) + unlock_cost = 400 + +/datum/perk/skill_mod/firearms + name = "Advanced firearm training" + desc = "Improved handling for all firearms. A prerequisite for all gun skills perks, and increases the speed of tactical reloads." + ui_icon = "firearms" + firearms = 1 + all_jobs = TRUE + unlock_cost = 400 + +/datum/perk/skill_mod/pistols + name = "Advanced pistol training" + desc = "Improved damage, accuracy and scatter with pistol type firearms." + req_desc = "Requires Advanced firearm training." + ui_icon = "pistols" + pistols = 1 + all_jobs = TRUE + prereq_perks = list(/datum/perk/skill_mod/firearms) + unlock_cost = 400 + +/datum/perk/skill_mod/shotguns + name = "Advanced shotgun training" + desc = "Improved damage, accuracy and scatter with shotgun type firearms. Unlocks access to a shotgun secondary weapon in the backslot for some roles." + req_desc = "Requires Advanced firearm training." + ui_icon = "shotguns" + shotguns = 1 + all_jobs = TRUE + prereq_perks = list(/datum/perk/skill_mod/firearms) + unlock_cost = 600 + +/datum/perk/skill_mod/shotguns/unlock_bonus(mob/living/carbon/owner, datum/individual_stats/owner_stats) + if(!istype(owner_stats)) + return + owner_stats.unlock_loadout_item(/datum/loadout_item/back/som_shotgun, jobs_supported, owner, 0) + owner_stats.unlock_loadout_item(/datum/loadout_item/back/marine_shotgun, jobs_supported, owner, 0) + +/datum/perk/skill_mod/rifles + name = "Advanced rifle training" + desc = "Improved damage, accuracy and scatter with rifle type firearms. Unlocks new weapons and ammo types for some roles." + req_desc = "Requires Advanced firearm training." + ui_icon = "rifles" + rifles = 1 + all_jobs = TRUE + prereq_perks = list(/datum/perk/skill_mod/firearms) + unlock_cost = 1000 + +/datum/perk/skill_mod/rifles/unlock_bonus(mob/living/carbon/owner, datum/individual_stats/owner_stats) + if(!istype(owner_stats)) + return + if(owner_stats.faction == FACTION_TERRAGOV) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/marine/standard_rifle/enhanced, /datum/loadout_item/suit_store/main_gun/marine/standard_rifle, SQUAD_MARINE) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/marine/standard_carbine/enhanced, /datum/loadout_item/suit_store/main_gun/marine/standard_carbine, SQUAD_MARINE) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/marine/scout_carbine/enhanced, /datum/loadout_item/suit_store/main_gun/marine/scout_carbine, SQUAD_MARINE) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/marine/suppressed_carbine/enhanced, /datum/loadout_item/suit_store/main_gun/marine/suppressed_carbine, SQUAD_MARINE) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/corpsman/carbine/enhanced, /datum/loadout_item/suit_store/main_gun/corpsman/carbine, SQUAD_CORPSMAN) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/corpsman/assault_rifle/enhanced, /datum/loadout_item/suit_store/main_gun/corpsman/assault_rifle, SQUAD_CORPSMAN) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/engineer/carbine/enhanced, /datum/loadout_item/suit_store/main_gun/engineer/carbine, SQUAD_ENGINEER) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/engineer/assault_rifle/enhanced, /datum/loadout_item/suit_store/main_gun/engineer/assault_rifle, SQUAD_ENGINEER) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/squad_leader/carbine/enhanced, /datum/loadout_item/suit_store/main_gun/squad_leader/carbine, SQUAD_LEADER) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/squad_leader/standard_rifle/enhanced, /datum/loadout_item/suit_store/main_gun/squad_leader/standard_rifle, SQUAD_LEADER) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/field_commander/carbine/enhanced, /datum/loadout_item/suit_store/main_gun/field_commander/carbine, FIELD_COMMANDER) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/field_commander/standard_rifle/enhanced, /datum/loadout_item/suit_store/main_gun/field_commander/standard_rifle, FIELD_COMMANDER) + + owner_stats.unlock_loadout_item(/datum/loadout_item/suit_store/main_gun/marine/plasma_rifle, SQUAD_MARINE, owner, 0) + owner_stats.unlock_loadout_item(/datum/loadout_item/suit_store/main_gun/corpsman/plasma_rifle, SQUAD_CORPSMAN, owner, 0) + owner_stats.unlock_loadout_item(/datum/loadout_item/suit_store/main_gun/engineer/plasma_rifle, SQUAD_ENGINEER, owner, 0) + owner_stats.unlock_loadout_item(/datum/loadout_item/suit_store/main_gun/squad_leader/plasma_rifle, SQUAD_LEADER, owner, 0) + owner_stats.unlock_loadout_item(/datum/loadout_item/suit_store/main_gun/field_commander/plasma_rifle, FIELD_COMMANDER, owner, 0) + + else if(owner_stats.faction == FACTION_SOM) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/som_marine/standard_rifle/enhanced, /datum/loadout_item/suit_store/main_gun/som_marine/standard_rifle, SOM_SQUAD_MARINE) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/som_marine/suppressed_rifle/enhanced, /datum/loadout_item/suit_store/main_gun/som_marine/suppressed_rifle, SOM_SQUAD_MARINE) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/som_medic/standard_rifle/enhanced, /datum/loadout_item/suit_store/main_gun/som_medic/standard_rifle, SOM_SQUAD_CORPSMAN) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/som_engineer/standard_rifle/enhanced, /datum/loadout_item/suit_store/main_gun/som_engineer/standard_rifle, SOM_SQUAD_ENGINEER) + + owner_stats.unlock_loadout_item(/datum/loadout_item/suit_store/main_gun/som_marine/volkite_charger, SOM_SQUAD_MARINE, owner, 0) + owner_stats.unlock_loadout_item(/datum/loadout_item/suit_store/main_gun/som_medic/volkite_charger, SOM_SQUAD_CORPSMAN, owner, 0) + owner_stats.unlock_loadout_item(/datum/loadout_item/suit_store/main_gun/som_engineer/volkite_charger, SOM_SQUAD_ENGINEER, owner, 0) + +/datum/perk/skill_mod/smgs + name = "Advanced SMG training" + desc = "Improved damage, accuracy and scatter with SMG type firearms. Unlocks new weapons and ammo types for some roles." + req_desc = "Requires Advanced firearm training." + ui_icon = "smgs" + smgs = 1 + all_jobs = TRUE + prereq_perks = list(/datum/perk/skill_mod/firearms) + unlock_cost = 500 + +/datum/perk/skill_mod/smgs/unlock_bonus(mob/living/carbon/owner, datum/individual_stats/owner_stats) + if(!istype(owner_stats)) + return + if(owner_stats.faction == FACTION_TERRAGOV) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/marine/standard_smg/enhanced, /datum/loadout_item/suit_store/main_gun/marine/standard_smg, SQUAD_MARINE) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/marine/smg_and_shield/enhanced, /datum/loadout_item/suit_store/main_gun/marine/smg_and_shield, SQUAD_MARINE) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/corpsman/standard_smg/enhanced, /datum/loadout_item/suit_store/main_gun/corpsman/standard_smg, SQUAD_CORPSMAN) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/engineer/standard_smg/enhanced, /datum/loadout_item/suit_store/main_gun/engineer/standard_smg, SQUAD_ENGINEER) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/squad_leader/standard_smg/enhanced, /datum/loadout_item/suit_store/main_gun/squad_leader/standard_smg, SQUAD_LEADER) + + owner_stats.unlock_loadout_item(/datum/loadout_item/suit_store/main_gun/marine/plasma_smg, SQUAD_MARINE, owner, 0) + owner_stats.unlock_loadout_item(/datum/loadout_item/suit_store/main_gun/corpsman/plasma_smg, SQUAD_CORPSMAN, owner, 0) + owner_stats.unlock_loadout_item(/datum/loadout_item/suit_store/main_gun/engineer/plasma_smg, SQUAD_ENGINEER, owner, 0) + owner_stats.unlock_loadout_item(/datum/loadout_item/suit_store/main_gun/squad_leader/plasma_smg, SQUAD_LEADER, owner, 0) + owner_stats.unlock_loadout_item(/datum/loadout_item/suit_store/main_gun/field_commander/plasma_smg, FIELD_COMMANDER, owner, 0) + else if(owner_stats.faction == FACTION_SOM) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/som_marine/smg/enhanced, /datum/loadout_item/suit_store/main_gun/som_marine/smg, SOM_SQUAD_MARINE) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/som_marine/smg_and_shield/enhanced, /datum/loadout_item/suit_store/main_gun/som_marine/smg_and_shield, SOM_SQUAD_MARINE) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/som_marine/smg/enhanced, /datum/loadout_item/suit_store/main_gun/som_marine/smg, SOM_SQUAD_CORPSMAN) + owner_stats.replace_loadout_option(/datum/loadout_item/suit_store/main_gun/som_engineer/smg/enhanced, /datum/loadout_item/suit_store/main_gun/som_engineer/smg, SOM_SQUAD_ENGINEER) + +/datum/perk/skill_mod/heavy_weapons + name = "Heavy weapon specialisation" + desc = "Improved damage, accuracy and scatter with heavy weapon type firearms. Unlocks new weapons and ammo types for some roles." + req_desc = "Requires Advanced firearm training." + ui_icon = "heavy" + heavy_weapons = 1 + all_jobs = TRUE + prereq_perks = list(/datum/perk/skill_mod/firearms) + unlock_cost = 800 + +/datum/perk/skill_mod/heavy_weapons/unlock_bonus(mob/living/carbon/owner, datum/individual_stats/owner_stats) + if(!istype(owner_stats)) + return + if(owner_stats.faction == FACTION_TERRAGOV) + owner_stats.unlock_loadout_item(/datum/loadout_item/back/tgmc_heam_rocket_bag, SQUAD_MARINE, owner, 0) + owner_stats.unlock_loadout_item(/datum/loadout_item/suit_store/main_gun/marine/plasma_cannon, SQUAD_MARINE, owner, 0) + else if(owner_stats.faction == FACTION_SOM) + owner_stats.unlock_loadout_item(/datum/loadout_item/back/som_heat_rocket_bag, SOM_SQUAD_VETERAN, owner, 0) + +/datum/perk/skill_mod/smartgun + name = "Advanced smartgun training" + desc = "Improved damage, accuracy and scatter with smartguns type firearms." + req_desc = "Requires Advanced firearm training." + ui_icon = "smartguns" + smartgun = 1 + jobs_supported = list(SQUAD_SMARTGUNNER, CAPTAIN) + prereq_perks = list(/datum/perk/skill_mod/firearms) + unlock_cost = 800 + +/datum/perk/skill_mod/construction + name = "Advanced construction training" + desc = "Faster construction times when building. Some items may no longer have a penalty delay when constructing." + ui_icon = "construction" + construction = 2 + all_jobs = TRUE + unlock_cost = 300 + +/datum/perk/skill_mod/leadership + name = "Advanced leadership training" + desc = "Advanced leadership training and battlefield experience resulting in an improved ability to command and control the soldiers under your command. Improved effectiveness and range when issuing orders." + ui_icon = "leadership" + leadership = 1 + jobs_supported = list(SQUAD_LEADER, FIELD_COMMANDER, STAFF_OFFICER, CAPTAIN, SOM_SQUAD_LEADER, SOM_STAFF_OFFICER, SOM_FIELD_COMMANDER, SOM_COMMANDER) + unlock_cost = 1100 + +/datum/perk/skill_mod/medical + name = "Advanced medical training" + desc = "Faster at applying medical items. Some items may no longer have a penalty delay. Unlocks access to improved first aid pouches if not already available." + ui_icon = "medical" + medical = 2 + all_jobs = TRUE + unlock_cost = 300 + +/datum/perk/skill_mod/medical/unlock_bonus(mob/living/carbon/owner, datum/individual_stats/owner_stats) + if(!istype(owner_stats)) + return + if(owner_stats.faction == FACTION_TERRAGOV) + for(var/job_type in owner_stats.loadouts) + owner_stats.replace_loadout_option(/datum/loadout_item/r_pocket/standard_first_aid/standard_improved, /datum/loadout_item/r_pocket/standard_first_aid, job_type) + owner_stats.replace_loadout_option(/datum/loadout_item/l_pocket/standard_first_aid/standard_improved, /datum/loadout_item/l_pocket/standard_first_aid, job_type) + + else if(owner_stats.faction == FACTION_SOM) + for(var/job_type in owner_stats.loadouts) + owner_stats.replace_loadout_option(/datum/loadout_item/r_pocket/som_standard_first_aid/standard_improved, /datum/loadout_item/r_pocket/som_standard_first_aid, job_type) + owner_stats.replace_loadout_option(/datum/loadout_item/l_pocket/som_standard_first_aid/standard_improved, /datum/loadout_item/l_pocket/som_standard_first_aid, job_type) + +/datum/perk/skill_mod/stamina + name = "Improved stamina" + desc = "Superior physical conditioning results in overall improved stamina. Improved max stamina, stamina regen rate, and reduces the delay before stamina begins to regenerate after stamina loss." + ui_icon = "stamina_1" + stamina = 1 + all_jobs = TRUE + unlock_cost = 600 + ///How much this perk increases your max_stam by + var/stam_mod = 10 + +/datum/perk/skill_mod/stamina/apply_perk(mob/living/carbon/owner) + . = ..() + owner.max_stamina += stam_mod + owner.max_stamina_buffer += stam_mod + +/datum/perk/skill_mod/stamina/remove_perk(mob/living/carbon/owner) + . = ..() + owner.max_stamina -= stam_mod + owner.max_stamina_buffer -= stam_mod + +/datum/perk/skill_mod/stamina/two + name = "Extreme stamina" + desc = "Greatly stamina regen rate, and further reduces the delay before stamina begins to regenerate." + desc = "Mechanically augmented physical conditioning results in significantly enhanced overall stamina. Further improved max stamina, stamina regen rate, and reduced delay before stamina begins to regenerate after stamina loss." + req_desc = "Requires Improved stamina." + ui_icon = "stamina_2" + prereq_perks = list(/datum/perk/skill_mod/stamina) + unlock_cost = 800 diff --git a/code/datums/gamemodes/campaign/rewards/allies.dm b/code/datums/gamemodes/campaign/rewards/allies.dm index 1e8c0dbb69d0c..bdd861e0f816e 100644 --- a/code/datums/gamemodes/campaign/rewards/allies.dm +++ b/code/datums/gamemodes/campaign/rewards/allies.dm @@ -22,6 +22,7 @@ desc = "A colonial militia squad to augment our forces" detailed_desc = "A large number of militia job slots are opened at no attrition cost. \ A local colonial militia sympathetic to our cause has offered a squad to support our troops. Equipped with lesser arms and armor than our own troops, but fairly numerous." + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/militia_reinforcement ui_icon = "militia" bonus_job_list = list( /datum/job/som/mercenary/militia/leader = 1, @@ -34,6 +35,7 @@ desc = "A squad of freelance guns for hire to support our forces" detailed_desc = "A moderate number of freelancer job slots are opened at no attrition cost. \ A contract has been bought for a squad of freelancers to augment our forces. With comparable equipment and training, they can help turn the tables when our forces are stretched thin." + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/freelancer_reinforcement ui_icon = "freelancers" bonus_job_list = list( /datum/job/freelancer/leader/campaign_bonus = 1, @@ -47,6 +49,7 @@ desc = "A squad of ICC soldiers to support our forces" detailed_desc = "A moderate number of ICC job slots are opened at no attrition cost. \ The ICC have authorised a small, local detachment of their troops to aid us in our conflict. They are well armed and armored, and could prove a valuable advantage in a fight." + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/icc_reinforcement ui_icon = "icc" bonus_job_list = list( /datum/job/icc/leader/campaign_bonus = 1, @@ -60,6 +63,7 @@ desc = "An elite PMC team to assist in a joint operation" detailed_desc = "A small number of PMC job slots are opened at no attrition cost. \ NanoTrasen have authorised a small team of their PMC contractors to assist us in combat. With superior arms and armor, they a powerful tactical asset." + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/pmc_reinforcement ui_icon = "pmc" bonus_job_list = list( /datum/job/pmc/leader/campaign_bonus = 1, @@ -72,6 +76,7 @@ desc = "A shipment of combat robots to bolster your forces" detailed_desc = "A four combat robot job slots are opened at no attrition cost. \ Combat robots are tough to kill, being immune to pain and chemicals, and resist both fire and radiation. They suffer from low mobility however." + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/robot_reinforcement ui_icon = "combat_robots" cost = 6 bonus_job_list = list( diff --git a/code/datums/gamemodes/campaign/rewards/campaign_asset_jobs.dm b/code/datums/gamemodes/campaign/rewards/campaign_asset_jobs.dm index 1c7ff3d727c0a..bdd7ad68fd62e 100644 --- a/code/datums/gamemodes/campaign/rewards/campaign_asset_jobs.dm +++ b/code/datums/gamemodes/campaign/rewards/campaign_asset_jobs.dm @@ -444,20 +444,20 @@ What you lack in equipment and military training you make up in bravery and conv job_flags = JOB_FLAG_LATEJOINABLE|JOB_FLAG_BOLD_NAME_ON_SELECTION|JOB_FLAG_PROVIDES_SQUAD_HUD|JOB_FLAG_CAN_SEE_ORDERS job_cost = 0 outfits = list( - /datum/outfit/job/freelancer/standard/campaign, /datum/outfit/job/freelancer/standard/one/campaign, /datum/outfit/job/freelancer/standard/two/campaign, + /datum/outfit/job/freelancer/standard/three/campaign, ) -/datum/outfit/job/freelancer/standard/campaign - ears = /obj/item/radio/headset/mainship - /datum/outfit/job/freelancer/standard/one/campaign ears = /obj/item/radio/headset/mainship /datum/outfit/job/freelancer/standard/two/campaign ears = /obj/item/radio/headset/mainship +/datum/outfit/job/freelancer/standard/three/campaign + ears = /obj/item/radio/headset/mainship + /datum/job/freelancer/medic/campaign_bonus faction = FACTION_TERRAGOV @@ -474,15 +474,15 @@ What you lack in equipment and military training you make up in bravery and conv comm_title = "FL" job_flags = JOB_FLAG_LATEJOINABLE|JOB_FLAG_BOLD_NAME_ON_SELECTION|JOB_FLAG_PROVIDES_SQUAD_HUD|JOB_FLAG_CAN_SEE_ORDERS outfits = list( - /datum/outfit/job/freelancer/grenadier/campaign, /datum/outfit/job/freelancer/grenadier/one/campaign, + /datum/outfit/job/freelancer/grenadier/two/campaign, ) job_cost = 0 -/datum/outfit/job/freelancer/grenadier/campaign +/datum/outfit/job/freelancer/grenadier/one/campaign ears = /obj/item/radio/headset/mainship -/datum/outfit/job/freelancer/grenadier/one/campaign +/datum/outfit/job/freelancer/grenadier/two/campaign ears = /obj/item/radio/headset/mainship /datum/job/freelancer/leader/campaign_bonus @@ -490,15 +490,15 @@ What you lack in equipment and military training you make up in bravery and conv comm_title = "FL" job_flags = JOB_FLAG_LATEJOINABLE|JOB_FLAG_BOLD_NAME_ON_SELECTION|JOB_FLAG_PROVIDES_SQUAD_HUD|JOB_FLAG_CAN_SEE_ORDERS outfits = list( - /datum/outfit/job/freelancer/leader/campaign, /datum/outfit/job/freelancer/leader/one/campaign, + /datum/outfit/job/freelancer/leader/two/campaign, ) job_cost = 0 -/datum/outfit/job/freelancer/leader/campaign +/datum/outfit/job/freelancer/leader/one/campaign ears = /obj/item/radio/headset/mainship -/datum/outfit/job/freelancer/leader/one/campaign +/datum/outfit/job/freelancer/leader/two/campaign ears = /obj/item/radio/headset/mainship //PMC @@ -652,7 +652,6 @@ Fight for TGMC, and attempt to achieve all objectives given to you."}) H.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_HEAD) /datum/outfit/job/tgmc/campaign_robot/machine_gunner - r_store = /obj/item/storage/pouch/pistol belt = /obj/item/storage/belt/sparepouch suit_store = /obj/item/weapon/gun/rifle/standard_gpmg/machinegunner @@ -674,12 +673,10 @@ Fight for TGMC, and attempt to achieve all objectives given to you."}) H.equip_to_slot_or_del(new /obj/item/stack/cable_coil, SLOT_IN_BACKPACK) H.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_gpmg, SLOT_IN_BACKPACK) H.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_gpmg, SLOT_IN_BACKPACK) - H.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_gpmg, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/marine/deployable, SLOT_IN_BACKPACK) H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_BACKPACK) /datum/outfit/job/tgmc/campaign_robot/guardian - r_store = /obj/item/storage/pouch/pistol - belt = /obj/item/storage/belt/marine/te_cells suit_store = /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_carbine/gyro r_hand = /obj/item/weapon/shield/riot/marine @@ -703,9 +700,8 @@ Fight for TGMC, and attempt to achieve all objectives given to you."}) /datum/outfit/job/tgmc/campaign_robot/jetpack wear_suit = /obj/item/clothing/suit/modular/robot/heavy/shield r_store = /obj/item/storage/pouch/magazine/large - belt = /obj/item/storage/belt/marine/te_cells suit_store = /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_carbine/mag_harness - back = /obj/item/jetpack_marine + back = /obj/item/jetpack_marine/heavy /datum/outfit/job/tgmc/campaign_robot/jetpack/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) . = ..() @@ -720,8 +716,6 @@ Fight for TGMC, and attempt to achieve all objectives given to you."}) H.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_R_POUCH) /datum/outfit/job/tgmc/campaign_robot/laser_mg - r_store = /obj/item/storage/pouch/pistol - belt = /obj/item/storage/belt/marine/te_cells suit_store = /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_mlaser/patrol /datum/outfit/job/tgmc/campaign_robot/laser_mg/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) diff --git a/code/datums/gamemodes/campaign/rewards/disablers.dm b/code/datums/gamemodes/campaign/rewards/disablers.dm index 9091d2f4b5c93..4baca3435c22e 100644 --- a/code/datums/gamemodes/campaign/rewards/disablers.dm +++ b/code/datums/gamemodes/campaign/rewards/disablers.dm @@ -9,18 +9,28 @@ var/list/types_disabled ///Rewards currently disabled. Recorded to reenable later var/list/types_currently_disabled = list() + ///Does this apply instantly? + var/instant_use = FALSE /datum/campaign_asset/asset_disabler/immediate_effect() - RegisterSignal(SSdcs, COMSIG_GLOB_CAMPAIGN_MISSION_LOADED, PROC_REF(trigger_disabler)) + if(instant_use) + trigger_disabler() + else + RegisterSignal(SSdcs, COMSIG_GLOB_CAMPAIGN_MISSION_LOADED, PROC_REF(trigger_disabler)) + + RegisterSignal(faction, COMSIG_CAMPAIGN_NEW_ASSET, PROC_REF(disable_asset)) /datum/campaign_asset/asset_disabler/deactivate() + if(!uses) + UnregisterSignal(SSdcs, list(COMSIG_GLOB_CAMPAIGN_MISSION_LOADED, COMSIG_CAMPAIGN_NEW_ASSET)) + asset_flags &= ~ASSET_DEBUFF for(var/datum/campaign_asset/asset_type AS in types_currently_disabled) asset_type.asset_flags &= ~ASSET_DISABLED types_currently_disabled.Cut() UnregisterSignal(SSdcs, COMSIG_GLOB_CAMPAIGN_MISSION_ENDED) ///Handles the actual disabling activation -/datum/campaign_asset/asset_disabler/proc/trigger_disabler() +/datum/campaign_asset/asset_disabler/proc/trigger_disabler(datum/source) SIGNAL_HANDLER var/datum/game_mode/hvh/campaign/mode = SSticker.mode var/datum/campaign_mission/current_mission = mode.current_mission @@ -28,20 +38,23 @@ return for(var/i in faction.faction_assets) - var/datum/campaign_asset/asset_type = faction.faction_assets[i] - if(!asset_type) - continue - if(asset_type.type in types_disabled) - asset_type.asset_flags |= ASSET_DISABLED - types_currently_disabled += asset_type + disable_asset(asset = faction.faction_assets[i]) RegisterSignal(SSdcs, COMSIG_GLOB_CAMPAIGN_MISSION_ENDED, TYPE_PROC_REF(/datum/campaign_asset, deactivate)) uses -- - if(!uses) - UnregisterSignal(SSdcs, COMSIG_GLOB_CAMPAIGN_MISSION_LOADED) - asset_flags &= ~ASSET_DEBUFF SEND_SIGNAL(src, COMSIG_CAMPAIGN_DISABLER_ACTIVATION) + +///Actually disables an asset +/datum/campaign_asset/asset_disabler/proc/disable_asset(datum/source, datum/campaign_asset/asset) + SIGNAL_HANDLER + if(!istype(asset)) + return + if(!(asset.type in types_disabled)) + return + asset.asset_flags |= ASSET_DISABLED + types_currently_disabled += asset + /datum/campaign_asset/asset_disabler/tgmc_cas name = "CAS disabled" desc = "CAS fire support temporarily disabled" @@ -50,6 +63,11 @@ types_disabled = list(/datum/campaign_asset/fire_support) blacklist_mission_flags = MISSION_DISALLOW_FIRESUPPORT +/datum/campaign_asset/asset_disabler/tgmc_cas/instant + uses = 1 + instant_use = TRUE + detailed_desc = "Hostile assets in the AO are preventing the use of close air support during this mission." + /datum/campaign_asset/asset_disabler/som_cas name = "CAS disabled" desc = "CAS fire support temporarily disabled" @@ -58,6 +76,11 @@ types_disabled = list(/datum/campaign_asset/fire_support/som_cas) blacklist_mission_flags = MISSION_DISALLOW_FIRESUPPORT +/datum/campaign_asset/asset_disabler/som_cas/instant + uses = 1 + instant_use = TRUE + detailed_desc = "Hostile assets in the AO are preventing the use of close air support during this mission." + /datum/campaign_asset/asset_disabler/tgmc_mortar name = "Mortar support disabled" desc = "Mortar fire support temporarily disabled" diff --git a/code/datums/gamemodes/campaign/rewards/drop_pods.dm b/code/datums/gamemodes/campaign/rewards/drop_pods.dm index 18fd7896e164d..5977d47439fd2 100644 --- a/code/datums/gamemodes/campaign/rewards/drop_pods.dm +++ b/code/datums/gamemodes/campaign/rewards/drop_pods.dm @@ -2,6 +2,7 @@ name = "Enable drop pods" desc = "Enables the use of drop pods for the current or next mission" detailed_desc = "Repositions the ship to allow for orbital drop pod insertion during the current or next mission." + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/pod_officer ui_icon = "droppod_active" uses = 3 cost = 9 @@ -28,6 +29,7 @@ name = "Rearm drop pod bays" desc = "replace all used drop pods" detailed_desc = "Replace all drop pods that have been previously deployed with refurbished units or ones from fleet storage, ready for immediate use." + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/pod_officer ui_icon = "droppod_refresh" uses = 1 cost = 10 @@ -51,6 +53,7 @@ name = "Disable drop pods" desc = "Prevents the enemy from using drop pods in the current or next mission" detailed_desc = "Ground to Space weapon systems are activated to prevent TGMC close orbit support ships from positioning themselves for drop pod orbital assaults during the current or next mission." + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/pod_officer ui_icon = "droppod_broken" uses = 2 asset_flags = ASSET_ACTIVATED_EFFECT|ASSET_ACTIVE_MISSION_ONLY diff --git a/code/datums/gamemodes/campaign/rewards/equipment.dm b/code/datums/gamemodes/campaign/rewards/equipment.dm index 5c03d0408d58a..6744713d215c0 100644 --- a/code/datums/gamemodes/campaign/rewards/equipment.dm +++ b/code/datums/gamemodes/campaign/rewards/equipment.dm @@ -1,5 +1,6 @@ //Parent for all 'spawn stuff' assets /datum/campaign_asset/equipment + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/tgmc_req asset_flags = ASSET_ACTIVATED_EFFECT|ASSET_SL_AVAILABLE ///list of objects to spawn when this asset is activated var/list/obj/equipment_to_spawn = list() @@ -27,6 +28,7 @@ name = "Gorgon consignment" desc = "Five sets of Gorgon power armor" detailed_desc = "Activatable by squad leaders. Your battalion has been assigned a number of Gorgon power armor sets, available at your request. Gorgon armor is the SOM's elite infantry armor, providing superior protection and an automedical system without significantly compromising on speed." + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/som_req ui_icon = "gorgon" uses = 5 cost = 12 @@ -56,6 +58,7 @@ ) /datum/campaign_asset/equipment/medkit_basic/som + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/som_req equipment_to_spawn = list( /obj/item/storage/pouch/firstaid/som/full, /obj/item/storage/pouch/firstaid/som/full, @@ -80,6 +83,9 @@ /obj/item/storage/box/crate/loot/materials_pack, ) +/datum/campaign_asset/equipment/materials_pack/som + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/som_req + /datum/campaign_asset/equipment/ballistic_tgmc name = "ballistic weapon cache" desc = "Ballistic weapons and ammo" @@ -101,6 +107,7 @@ name = "ballistic weapon cache" desc = "Ballistic weapons and ammo" detailed_desc = "A number of standard ballistic weapons and ammo to match." + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/som_req ui_icon = "ballistic" uses = 1 cost = 3 @@ -132,6 +139,7 @@ name = "Volkite weapon cache" desc = "Volkite weapon cache and ammo" detailed_desc = "A volkite caliver and charger, with accompanying ammo. Able to deflagrate targets, making them deadly against tightly packed opponents." + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/som_req ui_icon = "volkite" uses = 1 cost = 4 @@ -188,6 +196,7 @@ name = "Shotgun cache" desc = "Shotgun and ammo" detailed_desc = "A V-51 and ammo to match." + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/som_req ui_icon = "shotgun" uses = 1 cost = 2 @@ -247,6 +256,7 @@ name = "Lorica heavy armour" desc = "Heavy armor upgrades" detailed_desc = "A pair of heavy armor suits equipped with 'Lorica' armour upgrades. Premier protection, but somewhat cumbersome." + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/som_req ui_icon = "lorica" uses = 2 cost = 4 @@ -259,6 +269,7 @@ name = "Defensive shields" desc = "Heavy shields to hide behind" detailed_desc = "A pair of heavy riot shields. Able to withstand a tremendous amount of punishment at the cost of occupying a hand and slowing you down." + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/som_req ui_icon = "riot_shield" uses = 2 cost = 3 @@ -271,6 +282,7 @@ name = "Grenade resupply" desc = "An assortment of grenades" detailed_desc = "A variety of different grenade types. Throw towards enemy." + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/som_req ui_icon = "grenade" uses = 2 cost = 6 @@ -291,10 +303,14 @@ /obj/item/storage/box/explosive_mines/antitank, ) +/datum/campaign_asset/equipment/at_mines/som + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/som_req + /datum/campaign_asset/equipment/tac_bino_som name = "Tactical binoculars" desc = "One set of tactical binoculars" detailed_desc = "Tactical binoculars for seeing into the distance and calling down air support." + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/som_req ui_icon = "binoculars" uses = 1 cost = 3 diff --git a/code/datums/gamemodes/campaign/rewards/fire_support.dm b/code/datums/gamemodes/campaign/rewards/fire_support.dm index af20acbe2f719..e7b0be6429883 100644 --- a/code/datums/gamemodes/campaign/rewards/fire_support.dm +++ b/code/datums/gamemodes/campaign/rewards/fire_support.dm @@ -37,6 +37,7 @@ name = "Mortar support" desc = "Mortar teams are activated to provide firesupport for this mission" detailed_desc = "Activatable by squad leaders. A limited number of mortar strikes are available via tactical binoculars for this mission. Excellent for disrupting dug in enemy positions." + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/tgmc_mortar ui_icon = "mortar" asset_flags = ASSET_ACTIVATED_EFFECT|ASSET_ACTIVE_MISSION_ONLY|ASSET_DISABLE_ON_MISSION_END|ASSET_SL_AVAILABLE cost = 6 diff --git a/code/datums/gamemodes/campaign/rewards/mechs.dm b/code/datums/gamemodes/campaign/rewards/mechs.dm index 06b21376ae52d..716fede63b57c 100644 --- a/code/datums/gamemodes/campaign/rewards/mechs.dm +++ b/code/datums/gamemodes/campaign/rewards/mechs.dm @@ -35,3 +35,65 @@ /datum/campaign_asset/mech/heavy/som spawner_type = /obj/effect/landmark/campaign/mech_spawner/som/heavy + +//mech spawn points +/obj/effect/landmark/campaign/mech_spawner + name = "tgmc med mech spawner" + icon_state = "mech" + ///Faction associated with this spawner + var/faction = FACTION_TERRAGOV + ///Colours to paint mechs from this spawner + var/list/colors = list(ARMOR_PALETTE_SPACE_CADET, ARMOR_PALETTE_GREYISH_TURQUOISE) + ///Colours to paint mech heads from this spawner for better visual clarity + var/list/head_colors = list(ARMOR_PALETTE_STORM, ARMOR_PALETTE_GREYISH_TURQUOISE, VISOR_PALETTE_SYNDIE_GREEN) + ///Mech type for this spawner + var/obj/vehicle/sealed/mecha/combat/greyscale/mech_type = /obj/vehicle/sealed/mecha/combat/greyscale/assault/noskill + +/obj/effect/landmark/campaign/mech_spawner/Initialize(mapload) + . = ..() + GLOB.campaign_mech_spawners[faction] += list(src) + +/obj/effect/landmark/campaign/mech_spawner/Destroy() + GLOB.campaign_mech_spawners[faction] -= src + return ..() + +///Creates and sets up the mech +/obj/effect/landmark/campaign/mech_spawner/proc/spawn_mech() + var/obj/vehicle/sealed/mecha/combat/greyscale/new_mech = new mech_type(loc) + for(var/i in new_mech.limbs) + var/datum/mech_limb/limb = new_mech.limbs[i] + limb.update_colors(arglist(istype(limb, /datum/mech_limb/head) ? head_colors : colors)) + new_mech.update_icon() + return new_mech + +/obj/effect/landmark/campaign/mech_spawner/heavy + name = "tgmc heavy mech spawner" + icon_state = "mech_heavy" + head_colors = list(ARMOR_PALETTE_RED, ARMOR_PALETTE_GREYISH_TURQUOISE, VISOR_PALETTE_SYNDIE_GREEN) + mech_type = /obj/vehicle/sealed/mecha/combat/greyscale/vanguard/noskill + +/obj/effect/landmark/campaign/mech_spawner/light + name = "tgmc light mech spawner" + icon_state = "mech_light" + head_colors = list(ARMOR_PALETTE_SPACE_CADET, ARMOR_PALETTE_GREYISH_TURQUOISE, VISOR_PALETTE_SYNDIE_GREEN) + mech_type = /obj/vehicle/sealed/mecha/combat/greyscale/recon/noskill + +/obj/effect/landmark/campaign/mech_spawner/som + name = "som med mech spawner" + faction = FACTION_SOM + colors = list(ARMOR_PALETTE_GINGER, ARMOR_PALETTE_ANGELIC) + head_colors = list(ARMOR_PALETTE_ANGELIC, ARMOR_PALETTE_GREY, VISOR_PALETTE_SYNDIE_GREEN) + +/obj/effect/landmark/campaign/mech_spawner/som/heavy + name = "som heavy mech spawner" + icon_state = "mech_heavy" + colors = list(ARMOR_PALETTE_GINGER, ARMOR_PALETTE_MAGENTA) + head_colors = list(ARMOR_PALETTE_MAGENTA, ARMOR_PALETTE_GRAPE, VISOR_PALETTE_ELITE_ORANGE) + mech_type = /obj/vehicle/sealed/mecha/combat/greyscale/vanguard/noskill + +/obj/effect/landmark/campaign/mech_spawner/som/light + name = "som light mech spawner" + icon_state = "mech_light" + colors = list(ARMOR_PALETTE_GINGER, ARMOR_PALETTE_BLACK) + head_colors = list(ARMOR_PALETTE_GINGER, ARMOR_PALETTE_BLACK, VISOR_PALETTE_SYNDIE_GREEN) + mech_type = /obj/vehicle/sealed/mecha/combat/greyscale/recon/noskill diff --git a/code/datums/gamemodes/campaign/rewards/reserves.dm b/code/datums/gamemodes/campaign/rewards/reserves.dm index 6c6151c0a219f..558c4e2d9db7f 100644 --- a/code/datums/gamemodes/campaign/rewards/reserves.dm +++ b/code/datums/gamemodes/campaign/rewards/reserves.dm @@ -52,7 +52,13 @@ for(var/mob/candidate AS in GLOB.player_list) if(candidate.faction != faction.faction) continue - mode.player_death_times -= candidate.key + if(candidate.stat != DEAD) + continue + mode.player_death_times -= candidate.ckey + deltimer(mode.respawn_timers[candidate.ckey]) + mode.respawn_timers[candidate.ckey] = null + mode.player_respawn(candidate) + to_chat(candidate, "Tactical reserves mobilised. You can now respawn immediately if possible.") candidate.playsound_local(null, 'sound/ambience/votestart.ogg', 50) diff --git a/code/datums/gamemodes/campaign/rewards/teleporter.dm b/code/datums/gamemodes/campaign/rewards/teleporter.dm index 293eebddbd247..afb477b690e74 100644 --- a/code/datums/gamemodes/campaign/rewards/teleporter.dm +++ b/code/datums/gamemodes/campaign/rewards/teleporter.dm @@ -3,6 +3,7 @@ name = "Enable Teleporter Array" desc = "Enables the use of the Teleporter Array for the current or next mission" detailed_desc = "Established a link between our Teleporter Array and its master Bluespace drive, allowing its operation during the current or next mission." + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/som_scientist ui_icon = "tele_active" uses = 2 cost = 5 @@ -43,6 +44,7 @@ name = "Teleporter Array charges" desc = "+2 uses of the Teleporter Array" detailed_desc = "Central command have allocated the battalion with two additional uses of the Teleporter Array. Its extremely costly to run and demand is high across the conflict zone, so make them count." + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/som_scientist ui_icon = "tele_uses" uses = 3 cost = 6 @@ -61,6 +63,7 @@ desc = "Teleporter Array has been permenantly disabled" detailed_desc = "The Bluespace drive powering all Teleporter Arrays in the conflict zone has been destroyed, rending all Teleporter Arrays inoperable. You'll have to deploy the old fashion way from here on out." asset_flags = ASSET_IMMEDIATE_EFFECT|ASSET_DEBUFF + asset_portrait = /atom/movable/screen/text/screen_text/picture/potrait/som_scientist ui_icon = "tele_broken" /datum/campaign_asset/teleporter_disabled/immediate_effect() diff --git a/code/datums/gamemodes/combat_patrol.dm b/code/datums/gamemodes/combat_patrol.dm index e7706758be558..f1ec6c67a9367 100644 --- a/code/datums/gamemodes/combat_patrol.dm +++ b/code/datums/gamemodes/combat_patrol.dm @@ -1,7 +1,7 @@ /datum/game_mode/hvh/combat_patrol name = "Combat Patrol" config_tag = "Combat Patrol" - flags_round_type = MODE_LATE_OPENING_SHUTTER_TIMER|MODE_TWO_HUMAN_FACTIONS|MODE_HUMAN_ONLY + round_type_flags = MODE_LATE_OPENING_SHUTTER_TIMER|MODE_TWO_HUMAN_FACTIONS|MODE_HUMAN_ONLY shutters_drop_time = 3 MINUTES whitelist_ship_maps = list(MAP_COMBAT_PATROL_BASE) blacklist_ship_maps = null diff --git a/code/datums/gamemodes/crash.dm b/code/datums/gamemodes/crash.dm index 34116d1318123..36214a67cc923 100644 --- a/code/datums/gamemodes/crash.dm +++ b/code/datums/gamemodes/crash.dm @@ -1,8 +1,8 @@ /datum/game_mode/infestation/crash name = "Crash" config_tag = "Crash" - flags_round_type = MODE_INFESTATION|MODE_XENO_SPAWN_PROTECT|MODE_DEAD_GRAB_FORBIDDEN|MODE_DISALLOW_RAILGUN - flags_xeno_abilities = ABILITY_CRASH + round_type_flags = MODE_INFESTATION|MODE_XENO_SPAWN_PROTECT|MODE_DEAD_GRAB_FORBIDDEN|MODE_DISALLOW_RAILGUN + xeno_abilities_flags = ABILITY_CRASH valid_job_types = list( /datum/job/terragov/squad/standard = -1, /datum/job/terragov/squad/engineer = 1, @@ -105,7 +105,7 @@ RegisterSignal(SSdcs, COMSIG_GLOB_NUKE_DIFFUSED, PROC_REF(on_nuclear_diffuse)) RegisterSignal(SSdcs, COMSIG_GLOB_NUKE_START, PROC_REF(on_nuke_started)) - if(!(flags_round_type & MODE_INFESTATION)) + if(!(round_type_flags & MODE_INFESTATION)) return for(var/i in GLOB.alive_xeno_list_hive[XENO_HIVE_NORMAL]) @@ -120,7 +120,12 @@ /datum/game_mode/infestation/crash/announce() to_chat(world, span_round_header("The current map is - [SSmapping.configs[GROUND_MAP].map_name]!")) - priority_announce("Scheduled for landing in T-10 Minutes. Prepare for landing. Known hostiles near LZ. Detonation Protocol Active, planet disposable. Marines disposable.", type = ANNOUNCEMENT_PRIORITY) + priority_announce( + message = "Scheduled for landing in T-10 Minutes. Prepare for landing. Known hostiles near LZ. Detonation Protocol Active, planet disposable. Marines disposable.", + title = "Good morning, marines.", + type = ANNOUNCEMENT_PRIORITY, + color_override = "red" + ) playsound(shuttle, 'sound/machines/warning-buzzer.ogg', 75, 0, 30) diff --git a/code/datums/gamemodes/extended.dm b/code/datums/gamemodes/extended.dm index 6babe060702e7..747b3b1d53118 100644 --- a/code/datums/gamemodes/extended.dm +++ b/code/datums/gamemodes/extended.dm @@ -1,13 +1,16 @@ /datum/game_mode/extended name = "Extended" config_tag = "Extended" - flags_xeno_abilities = ABILITY_NUCLEARWAR + xeno_abilities_flags = ABILITY_NUCLEARWAR valid_job_types = list( /datum/job/terragov/command/captain = 1, /datum/job/terragov/command/fieldcommander = 1, /datum/job/terragov/command/staffofficer = 4, - /datum/job/terragov/command/pilot = 2, + /datum/job/terragov/command/pilot = 1, + /datum/job/terragov/command/transportofficer = 1, /datum/job/terragov/command/mech_pilot = 0, + /datum/job/terragov/command/assault_crewman = 2, + /datum/job/terragov/command/transport_crewman = 1, /datum/job/terragov/engineering/chief = 1, /datum/job/terragov/engineering/tech = 1, /datum/job/terragov/requisitions/officer = 1, diff --git a/code/datums/gamemodes/hvh.dm b/code/datums/gamemodes/hvh.dm index 36998667944e8..ecb7cd077f5ef 100644 --- a/code/datums/gamemodes/hvh.dm +++ b/code/datums/gamemodes/hvh.dm @@ -1,24 +1,25 @@ //The base setup for HvH gamemodes, not for actual use /datum/game_mode/hvh name = "HvH base mode" - flags_round_type = MODE_LATE_OPENING_SHUTTER_TIMER|MODE_TWO_HUMAN_FACTIONS|MODE_HUMAN_ONLY|MODE_TWO_HUMAN_FACTIONS + round_type_flags = MODE_LATE_OPENING_SHUTTER_TIMER|MODE_TWO_HUMAN_FACTIONS|MODE_HUMAN_ONLY|MODE_TWO_HUMAN_FACTIONS shutters_drop_time = 3 MINUTES - flags_xeno_abilities = ABILITY_CRASH + xeno_abilities_flags = ABILITY_CRASH factions = list(FACTION_TERRAGOV, FACTION_SOM) valid_job_types = list( - /datum/job/terragov/squad/engineer = 4, + /datum/job/terragov/squad/engineer = 8, /datum/job/terragov/squad/corpsman = 8, /datum/job/terragov/squad/smartgunner = 4, /datum/job/terragov/squad/leader = 4, /datum/job/terragov/squad/standard = -1, /datum/job/som/squad/leader = 4, - /datum/job/som/squad/veteran = 2, - /datum/job/som/squad/engineer = 4, + /datum/job/som/squad/veteran = 4, + /datum/job/som/squad/engineer = 8, /datum/job/som/squad/medic = 8, /datum/job/som/squad/standard = -1, ) job_points_needed_by_job_type = list( - /datum/job/som/squad/veteran = 5, //Every 5 non vets join, a new vet slot opens + /datum/job/terragov/squad/smartgunner = 5, + /datum/job/som/squad/veteran = 5, ) /// Time between two bioscan var/bioscan_interval = 3 MINUTES @@ -28,13 +29,6 @@ for(var/z_num in SSmapping.areas_in_z) set_z_lighting(z_num) -/datum/game_mode/hvh/scale_roles() - . = ..() - if(!.) - return - var/datum/job/scaled_job = SSjob.GetJobType(/datum/job/som/squad/veteran) - scaled_job.job_points_needed = 5 //Every 5 non vets join, a new vet slot opens - //sets TGMC and SOM squads /datum/game_mode/hvh/set_valid_squads() SSjob.active_squads[FACTION_TERRAGOV] = list() @@ -157,7 +151,7 @@ Sensors indicate [num_tgmc_delta || "no"] unknown lifeform signature[num_tgmc_delta > 1 ? "s":""] present in the area of operations[tgmc_location ? ", including one at: [tgmc_location]":""]"} if(announce_som) - priority_announce(som_scan_input, som_scan_name, sound = 'sound/AI/bioscan.ogg', receivers = (som_list + GLOB.observer_list)) + priority_announce(som_scan_input, som_scan_name, sound = 'sound/AI/bioscan.ogg', color_override = "orange", receivers = (som_list + GLOB.observer_list)) //announcement for TGMC var/marine_scan_name = "Long Range Tactical Bioscan Status" @@ -166,14 +160,14 @@ Sensors indicate [num_tgmc_delta || "no"] unknown lifeform signature[num_tgmc_de Sensors indicate [num_som_delta || "no"] unknown lifeform signature[num_som_delta > 1 ? "s":""] present in the area of operations[som_location ? ", including one at: [som_location]":""]"} if(announce_marines) - priority_announce(marine_scan_input, marine_scan_name, sound = 'sound/AI/bioscan.ogg', receivers = (tgmc_list + GLOB.observer_list)) + priority_announce(marine_scan_input, marine_scan_name, sound = 'sound/AI/bioscan.ogg', color_override = "blue", receivers = (tgmc_list + GLOB.observer_list)) log_game("Bioscan. [num_tgmc] active TGMC personnel[tgmc_location ? " Location: [tgmc_location]":""] and [num_som] active SOM personnel[som_location ? " Location: [som_location]":""]") for(var/i in GLOB.observer_list) var/mob/M = i - to_chat(M, "

Detailed Information

") - to_chat(M, {"[num_som] SOM alive. + to_chat(M, "Detailed Information") + to_chat(M, {"[num_som] SOM alive. [num_tgmc] Marine\s alive."}) message_admins("Bioscan - Marines: [num_tgmc] active TGMC personnel[tgmc_location ? " .Location:[tgmc_location]":""]") diff --git a/code/datums/gamemodes/infestation.dm b/code/datums/gamemodes/infestation.dm index de2e61a0d4d26..f0cb0c4b90148 100644 --- a/code/datums/gamemodes/infestation.dm +++ b/code/datums/gamemodes/infestation.dm @@ -23,7 +23,7 @@ weed_type = pickweight(GLOB.weed_prob_list) new weed_type(T) for(var/turf/T AS in GLOB.xeno_resin_wall_turfs) - T.ChangeTurf(/turf/closed/wall/resin, T.type) + T.ChangeTurf(/turf/closed/wall/resin/regenerating, T.type) for(var/i in GLOB.xeno_resin_door_turfs) new /obj/structure/mineral_door/resin(i) for(var/i in GLOB.xeno_tunnel_spawn_turfs) @@ -52,9 +52,8 @@ /datum/game_mode/infestation/announce_bioscans(show_locations = TRUE, delta = 2, ai_operator = FALSE, announce_humans = TRUE, announce_xenos = TRUE, send_fax = TRUE) if(ai_operator) - var/mob/living/silicon/ai/bioscanning_ai = usr #ifndef TESTING - + var/mob/living/silicon/ai/bioscanning_ai = usr if((bioscanning_ai.last_ai_bioscan + COOLDOWN_AI_BIOSCAN) > world.time) to_chat(bioscanning_ai, "Bioscan instruments are still recalibrating from their last use.") return @@ -108,15 +107,19 @@ for(var/i in GLOB.alive_xeno_list_hive[XENO_HIVE_NORMAL]) var/mob/M = i SEND_SOUND(M, S) - to_chat(M, span_xenoannounce("The Queen Mother reaches into your mind from worlds away.")) - to_chat(M, span_xenoannounce("To my children and their Queen. I sense [numHostsShipr ? "approximately [numHostsShipr]":"no"] host[numHostsShipr > 1 ? "s":""] in the metal hive[BIOSCAN_LOCATION(show_locations, hostLocationS)], [numHostsPlanet || "none"] scattered elsewhere[BIOSCAN_LOCATION(show_locations, hostLocationP)] and [numHostsTransitr ? "approximately [numHostsTransitr]":"no"] host[numHostsTransitr > 1 ? "s":""] on the metal bird in transit.")) + to_chat(M, assemble_alert( + title = "Queen Mother Report", + subtitle = "The Queen Mother reaches into your mind...", + message = "To my children and their Queen,
I sense [numHostsShipr ? "approximately [numHostsShipr]":"no"] host[numHostsShipr > 1 ? "s":""] in the metal hive[BIOSCAN_LOCATION(show_locations, hostLocationS)], [numHostsPlanet || "none"] scattered elsewhere[BIOSCAN_LOCATION(show_locations, hostLocationP)] and [numHostsTransitr ? "approximately [numHostsTransitr]":"no"] host[numHostsTransitr > 1 ? "s":""] on the metal bird in transit.", + color_override = "purple" + )) var/name = "[MAIN_AI_SYSTEM] Bioscan Status" var/input = {"Bioscan complete. Sensors indicate [numXenosShip || "no"] unknown lifeform signature[numXenosShip > 1 ? "s":""] present on the ship[BIOSCAN_LOCATION(show_locations, xenoLocationS)], [numXenosPlanetr ? "approximately [numXenosPlanetr]":"no"] signature[numXenosPlanetr > 1 ? "s":""] located elsewhere[BIOSCAN_LOCATION(show_locations, xenoLocationP)] and [numXenosTransit || "no"] unknown lifeform signature[numXenosTransit > 1 ? "s":""] in transit."} var/ai_name = "[usr] Bioscan Status" if(ai_operator) - priority_announce(input, ai_name, sound = 'sound/AI/bioscan.ogg') + priority_announce(input, ai_name, sound = 'sound/AI/bioscan.ogg', color_override = "grey", receivers = (GLOB.alive_human_list + GLOB.ai_list)) log_game("Bioscan. Humans: [numHostsPlanet] on the planet[hostLocationP ? " Location:[hostLocationP]":""] and [numHostsShip] on the ship.[hostLocationS ? " Location: [hostLocationS].":""] Xenos: [numXenosPlanetr] on the planet and [numXenosShip] on the ship[xenoLocationP ? " Location:[xenoLocationP]":""] and [numXenosTransit] in transit.") switch(GLOB.current_orbit) @@ -131,7 +134,7 @@ return if(announce_humans) - priority_announce(input, name, sound = 'sound/AI/bioscan.ogg') + priority_announce(input, name, sound = 'sound/AI/bioscan.ogg', color_override = "grey", receivers = (GLOB.alive_human_list + GLOB.ai_list)) // Hide this from observers, they have their own detailed alert. if(send_fax) var/fax_message = generate_templated_fax("Combat Information Center", "[MAIN_AI_SYSTEM] Bioscan Status", "", input, "", MAIN_AI_SYSTEM) @@ -141,13 +144,18 @@ for(var/i in GLOB.observer_list) var/mob/M = i - to_chat(M, "

Detailed Information

") - to_chat(M, {"[numXenosPlanet] xeno\s on the planet. + to_chat(M, assemble_alert( + title = "Detailed Bioscan", + message = {"[numXenosPlanet] xeno\s on the planet. [numXenosShip] xeno\s on the ship. +[numXenosTransit] xeno\s in transit. + [numHostsPlanet] human\s on the planet. [numHostsShip] human\s on the ship. -[numHostsTransit] human\s in transit. -[numXenosTransit] xeno\s in transit."}) +[numHostsTransit] human\s in transit."}, + color_override = "purple", + minor = TRUE + )) message_admins("Bioscan - Humans: [numHostsPlanet] on the planet[hostLocationP ? ". Location:[hostLocationP]":""]. [numHostsShipr] on the ship.[hostLocationS ? " Location: [hostLocationS].":""]. [numHostsTransitr] in transit.") message_admins("Bioscan - Xenos: [numXenosPlanetr] on the planet[numXenosPlanetr > 0 && xenoLocationP ? ". Location:[xenoLocationP]":""]. [numXenosShip] on the ship.[xenoLocationS ? " Location: [xenoLocationS].":""] [numXenosTransitr] in transit.") @@ -289,7 +297,12 @@ if(!SSmapping.configs[GROUND_MAP].announce_text) return - priority_announce(SSmapping.configs[GROUND_MAP].announce_text, SSmapping.configs[SHIP_MAP].map_name) + priority_announce( + title = "High Command Update", + subtitle = "Good morning, marines.", + message = "Cryosleep disengaged by TGMC High Command.

ATTN: [SSmapping.configs[SHIP_MAP].map_name].
[SSmapping.configs[GROUND_MAP].announce_text]", + color_override = "red" + ) /datum/game_mode/infestation/announce() @@ -306,7 +319,7 @@ /datum/game_mode/infestation/proc/on_nuclear_diffuse(obj/machinery/nuclearbomb/bomb, mob/living/carbon/xenomorph/X) SIGNAL_HANDLER - priority_announce("WARNING. WARNING. Planetary Nuke deactivated. WARNING. WARNING. Self destruct failed. WARNING. WARNING.", "Priority Alert") + priority_announce("WARNING. WARNING. Planetary Nuke deactivated. WARNING. WARNING. Self destruct failed. WARNING. WARNING.", "Planetary Warhead Disengaged", type = ANNOUNCEMENT_PRIORITY) /datum/game_mode/infestation/proc/on_nuclear_explosion(datum/source, z_level) SIGNAL_HANDLER @@ -322,7 +335,7 @@ /datum/game_mode/infestation/proc/play_cinematic(z_level) GLOB.enter_allowed = FALSE - priority_announce("DANGER. DANGER. Planetary Nuke Activated. DANGER. DANGER. Self destruct in progress. DANGER. DANGER.", "Priority Alert") + priority_announce("DANGER. DANGER. Planetary Nuke Activated. DANGER. DANGER. Self destruct in progress. DANGER. DANGER.", "Planetary Warhead Detonation Confirmed", type = ANNOUNCEMENT_PRIORITY) var/sound/S = sound(pick('sound/theme/nuclear_detonation1.ogg','sound/theme/nuclear_detonation2.ogg'), channel = CHANNEL_CINEMATIC) SEND_SOUND(world, S) diff --git a/code/datums/gamemodes/nuclear_war.dm b/code/datums/gamemodes/nuclear_war.dm index 3d958f2d56077..fe68e8d2676e8 100644 --- a/code/datums/gamemodes/nuclear_war.dm +++ b/code/datums/gamemodes/nuclear_war.dm @@ -2,13 +2,14 @@ name = "Nuclear War" config_tag = "Nuclear War" silo_scaling = 1.5 - flags_round_type = MODE_INFESTATION|MODE_LATE_OPENING_SHUTTER_TIMER|MODE_XENO_RULER|MODE_PSY_POINTS|MODE_PSY_POINTS_ADVANCED|MODE_DEAD_GRAB_FORBIDDEN|MODE_HIJACK_POSSIBLE|MODE_SILO_RESPAWN|MODE_SILOS_SPAWN_MINIONS|MODE_ALLOW_XENO_QUICKBUILD - flags_xeno_abilities = ABILITY_NUCLEARWAR + round_type_flags = MODE_INFESTATION|MODE_LATE_OPENING_SHUTTER_TIMER|MODE_XENO_RULER|MODE_PSY_POINTS|MODE_PSY_POINTS_ADVANCED|MODE_DEAD_GRAB_FORBIDDEN|MODE_HIJACK_POSSIBLE|MODE_SILO_RESPAWN|MODE_SILOS_SPAWN_MINIONS|MODE_ALLOW_XENO_QUICKBUILD|MODE_FORCE_CUSTOMSQUAD_UI + xeno_abilities_flags = ABILITY_NUCLEARWAR valid_job_types = list( /datum/job/terragov/command/captain = 1, /datum/job/terragov/command/fieldcommander = 1, /datum/job/terragov/command/staffofficer = 4, - /datum/job/terragov/command/pilot = 2, + /datum/job/terragov/command/pilot = 1, + /datum/job/terragov/command/transportofficer = 1, /datum/job/terragov/engineering/chief = 1, /datum/job/terragov/engineering/tech = 2, /datum/job/terragov/requisitions/officer = 1, @@ -18,6 +19,7 @@ /datum/job/terragov/civilian/liaison = 1, /datum/job/terragov/silicon/synthetic = 1, /datum/job/terragov/command/mech_pilot = 0, + /datum/job/terragov/command/assault_crewman = 0, /datum/job/terragov/silicon/ai = 1, /datum/job/terragov/squad/engineer = 1, /datum/job/terragov/squad/corpsman = 1, @@ -37,7 +39,8 @@ /datum/game_mode/infestation/nuclear_war/post_setup() . = ..() - SSpoints.add_psy_points(XENO_HIVE_NORMAL, 1400) + SSpoints.add_strategic_psy_points(XENO_HIVE_NORMAL, 1400) + SSpoints.add_tactical_psy_points(XENO_HIVE_NORMAL, 300) for(var/obj/effect/landmark/corpsespawner/corpse AS in GLOB.corpse_landmarks_list) corpse.create_mob() diff --git a/code/datums/gamemodes/zombie_crash.dm b/code/datums/gamemodes/zombie_crash.dm index d18175954f145..b5de055ee3d5d 100644 --- a/code/datums/gamemodes/zombie_crash.dm +++ b/code/datums/gamemodes/zombie_crash.dm @@ -1,7 +1,7 @@ /datum/game_mode/infestation/crash/zombie name = "Zombie Crash" config_tag = "Zombie Crash" - flags_round_type = MODE_XENO_SPAWN_PROTECTION + round_type_flags = MODE_XENO_SPAWN_PROTECTION valid_job_types = list( /datum/job/terragov/squad/standard = -1, /datum/job/terragov/squad/engineer = 8, diff --git a/code/datums/greyscale/_greyscale_config.dm b/code/datums/greyscale/_greyscale_config.dm index 1bc56a5d524bd..667adc751b1c2 100644 --- a/code/datums/greyscale/_greyscale_config.dm +++ b/code/datums/greyscale/_greyscale_config.dm @@ -30,9 +30,6 @@ /// Flags that can be used to modify use var/greyscale_flags = NONE - ///If an icon_state is in this list, it wont be generated. - var/list/ignore_states = list() - // There's more sanity checking here than normal because this is designed for spriters to work with // Sensible error messages that tell you exactly what's wrong is the best way to make this easy to use /datum/greyscale_config/New() @@ -73,8 +70,6 @@ if(!length(raw_layers)) stack_trace("The json configuration [DebugName()] for icon state '[state]' is missing any layers.") continue - if(state in ignore_states) - continue if(icon_states[state]) stack_trace("The json configuration [DebugName()] has a duplicate icon state '[state]' and is being overriden.") icon_states[state] = ReadLayersFromJson(raw_layers) diff --git a/code/datums/greyscale/greyscale_configs.dm b/code/datums/greyscale/greyscale_configs.dm index ca9e02ab3e05e..bde58cd53a04e 100644 --- a/code/datums/greyscale/greyscale_configs.dm +++ b/code/datums/greyscale/greyscale_configs.dm @@ -97,15 +97,6 @@ /datum/greyscale_config/armor_mk1/skirmisher icon_file = 'icons/mob/modular/mark_one/skirmisher.dmi' -/datum/greyscale_config/armor_mk1/kabuto - icon_file = 'icons/mob/modular/mark_one/kabuto.dmi' - -/datum/greyscale_config/armor_mk1/hotaru - icon_file = 'icons/mob/modular/mark_one/hotaru.dmi' - -/datum/greyscale_config/armor_mk1/dashe - icon_file = 'icons/mob/modular/mark_one/dashe.dmi' - //Hardsuits /datum/greyscale_config/hardsuit_variant @@ -159,9 +150,6 @@ /datum/greyscale_config/armor_mk2/trooper icon_file = 'icons/mob/modular/mark_two/trooper.dmi' -/datum/greyscale_config/armor_mk2/hotaru - icon_file = 'icons/mob/modular/mark_two/hotaru.dmi' - /datum/greyscale_config/xenonaut icon_file = 'icons/mob/modular/xenonauten.dmi' json_config = 'code/datums/greyscale/json_configs/xenonaut.json' @@ -262,336 +250,6 @@ json_config = 'code/datums/greyscale/json_configs/projectiles.json' icon_file = 'icons/obj/items/projectiles.dmi' - -/datum/greyscale_config/gun - json_config = 'code/datums/greyscale/json_configs/gun.json' - icon_file ='icons/Marine/greyscale_gun/gun.dmi' - prefix = "t18_" - ignore_states = list("loaded_fire", "belt", "loaded_l", "loaded_a", "unloaded_a") - -/datum/greyscale_config/gun/tx11 - prefix = "tx11_" -/datum/greyscale_config/gun/tx15 - prefix = "tx15_" - -/datum/greyscale_config/gun/t90 - prefix = "t90_" - -/datum/greyscale_config/gun/sg29 - prefix = "sg29_" - -//Pistols -/datum/greyscale_config/gun/pistol - ignore_states = list("loaded_fire", "loaded_l", "loaded_a", "unloaded_a") - prefix = "tp14_" - -/datum/greyscale_config/gun/pistol/tp23 - prefix = "tp23_" - -/datum/greyscale_config/gun/pistol/tx7 - ignore_states = list("loaded_fire", "loaded_l") - prefix = "tx7_" - -/datum/greyscale_config/gun/pistol/tep - icon_file ='icons/Marine/greyscale_gun/gun_64.dmi' - ignore_states = list("loaded_fire", "loaded_a", "unloaded_a") - prefix = "tep_" - -//Revolvers -/datum/greyscale_config/gun/revolver - json_config = 'code/datums/greyscale/json_configs/gun_revolver.json' - ignore_states = list() - prefix = "tp44_" - -//64 pixel guns -/datum/greyscale_config/gun/gun64 - icon_file ='icons/Marine/greyscale_gun/gun_64.dmi' - prefix = "t12_" -/datum/greyscale_config/gun/gun64/t42 - prefix = "t42_" -/datum/greyscale_config/gun/gun64/t81 - prefix = "t81_" -/datum/greyscale_config/gun/gun64/t21 - prefix = "t21_" - -/datum/greyscale_config/gun/gun64/t60 - ignore_states = list("belt", "loaded_l", "loaded_a", "unloaded_a") - prefix = "t60_" - -/datum/greyscale_config/gun/gun64/t37 - prefix = "t37_" - -/datum/greyscale_config/gun/gun64/lasgun - ignore_states = list("loaded_fire", "belt", "loaded_a", "unloaded_a") - prefix = "ter_" - -/datum/greyscale_config/gun/gun64/lasgun/tec - prefix = "tec_" - -/datum/greyscale_config/gun/gun64/lasgun/tem - prefix = "tem_" - -/datum/greyscale_config/gun/gun64/lasgun/tes - prefix = "tes_" - - -/datum/greyscale_config/gun/gun64/shotgun - json_config = 'code/datums/greyscale/json_configs/gun_shotgun.json' - ignore_states = list() - prefix = "t35_" - -/datum/greyscale_config/gun/gun64/shotgun/tl127 - prefix = "tl127_" - -//Mob Sprites for guns - -/datum/greyscale_config/worn_gun - json_config = 'code/datums/greyscale/json_configs/gun_mob.json' - icon_file = 'icons/Marine/greyscale_gun/back.dmi' - prefix = "t12_" - -/datum/greyscale_config/worn_gun/t42 - prefix = "t42_" - -/datum/greyscale_config/worn_gun/t18 - prefix = "t18_" - -/datum/greyscale_config/worn_gun/t81 - prefix = "t81_" - -/datum/greyscale_config/worn_gun/t21 - prefix = "t21_" - -/datum/greyscale_config/worn_gun/t35 - prefix = "t35_" - -/datum/greyscale_config/worn_gun/tx11 - prefix = "tx11_" - -/datum/greyscale_config/worn_gun/tx15 - prefix = "tx15_" - -/datum/greyscale_config/worn_gun/t90 - prefix = "t90_" - -/datum/greyscale_config/worn_gun/t37 - prefix = "t37_" - -/datum/greyscale_config/worn_gun/ter - prefix = "ter_" - -/datum/greyscale_config/worn_gun/tec - prefix = "tec_" - -/datum/greyscale_config/worn_gun/tem - prefix = "tem_" - -/datum/greyscale_config/worn_gun/tes - prefix = "tes_" - -/datum/greyscale_config/worn_gun/t60 - prefix = "t60_" - -/datum/greyscale_config/worn_gun/sg29 - prefix = "sg29_" - -/datum/greyscale_config/worn_gun/tl127 - prefix = "tl127_" - -/datum/greyscale_config/worn_gun/suit - icon_file = 'icons/Marine/greyscale_gun/suit.dmi' - -/datum/greyscale_config/worn_gun/suit/t42 - prefix = "t42_" - -/datum/greyscale_config/worn_gun/suit/t18 - prefix = "t18_" - -/datum/greyscale_config/worn_gun/suit/t81 - prefix = "t81_" - -/datum/greyscale_config/worn_gun/suit/t21 - prefix = "t21_" - -/datum/greyscale_config/worn_gun/suit/t35 - prefix = "t35_" - -/datum/greyscale_config/worn_gun/suit/tx11 - prefix = "tx11_" - -/datum/greyscale_config/worn_gun/suit/tx15 - prefix = "tx15_" - -/datum/greyscale_config/worn_gun/suit/t90 - prefix = "t90_" - -/datum/greyscale_config/worn_gun/suit/t37 - prefix = "t37_" - -/datum/greyscale_config/worn_gun/suit/ter - prefix = "ter_" -/datum/greyscale_config/worn_gun/suit/tec - prefix = "tec_" -/datum/greyscale_config/worn_gun/suit/tem - prefix = "tem_" -/datum/greyscale_config/worn_gun/suit/tes - prefix = "tes_" - -/datum/greyscale_config/worn_gun/suit/t60 - prefix = "t60_" - -/datum/greyscale_config/worn_gun/suit/tl127 - prefix = "tl127_" - -/datum/greyscale_config/worn_gun/suit/sg29 - prefix = "sg29_" - -/datum/greyscale_config/gun_inhand - json_config = 'code/datums/greyscale/json_configs/gun_hands.json' - icon_file = 'icons/Marine/greyscale_gun/l_hand.dmi' - prefix = "t12_" - -/datum/greyscale_config/gun_inhand/t42 - icon_file = 'icons/Marine/greyscale_gun/l_hand_64.dmi' - prefix = "t42_" - -/datum/greyscale_config/gun_inhand/t18 - prefix = "t18_" - -/datum/greyscale_config/gun_inhand/t81 - prefix = "t81_" - -/datum/greyscale_config/gun_inhand/t21 - icon_file = 'icons/Marine/greyscale_gun/l_hand_64.dmi' - prefix = "t21_" - -/datum/greyscale_config/gun_inhand/t35 - prefix = "t35_" - -/datum/greyscale_config/gun_inhand/tx11 - prefix = "tx11_" - -/datum/greyscale_config/gun_inhand/tx15 - prefix = "tx15_" - -/datum/greyscale_config/gun_inhand/tp14 - prefix = "tp14_" - -/datum/greyscale_config/gun_inhand/tp23 - prefix = "tp23_" - -/datum/greyscale_config/gun_inhand/tp44 - prefix = "tp44_" - -/datum/greyscale_config/gun_inhand/t90 - prefix = "t90_" - -/datum/greyscale_config/gun_inhand/t37 - icon_file = 'icons/Marine/greyscale_gun/l_hand_64.dmi' - prefix = "t37_" - -/datum/greyscale_config/gun_inhand/ter - prefix = "ter_" -/datum/greyscale_config/gun_inhand/tep - prefix = "tep_" -/datum/greyscale_config/gun_inhand/tec - prefix = "tec_" -/datum/greyscale_config/gun_inhand/tem - prefix = "tem_" -/datum/greyscale_config/gun_inhand/tes - prefix = "tes_" - -/datum/greyscale_config/gun_inhand/tx7 - prefix = "tx7_" - -/datum/greyscale_config/gun_inhand/t60 - icon_file = 'icons/Marine/greyscale_gun/l_hand_64.dmi' - prefix = "t60_" - -/datum/greyscale_config/gun_inhand/tl127 - icon_file = 'icons/Marine/greyscale_gun/l_hand_64.dmi' - prefix = "tl127_" - -/datum/greyscale_config/gun_inhand/sg29 - prefix = "sg29_" - -/datum/greyscale_config/gun_inhand/r_hand - icon_file = 'icons/Marine/greyscale_gun/r_hand.dmi' - -/datum/greyscale_config/gun_inhand/r_hand/t42 - icon_file = 'icons/Marine/greyscale_gun/r_hand_64.dmi' - prefix = "t42_" - -/datum/greyscale_config/gun_inhand/r_hand/t18 - prefix = "t18_" - -/datum/greyscale_config/gun_inhand/r_hand/t81 - prefix = "t81_" - -/datum/greyscale_config/gun_inhand/r_hand/t21 - icon_file = 'icons/Marine/greyscale_gun/r_hand_64.dmi' - prefix = "t21_" - -/datum/greyscale_config/gun_inhand/r_hand/t35 - prefix = "t35_" - -/datum/greyscale_config/gun_inhand/r_hand/tx11 - prefix = "tx11_" - -/datum/greyscale_config/gun_inhand/r_hand/tx15 - prefix = "tx15_" - -/datum/greyscale_config/gun_inhand/r_hand/tp14 - prefix = "tp14_" - -/datum/greyscale_config/gun_inhand/r_hand/tp23 - prefix = "tp23_" - -/datum/greyscale_config/gun_inhand/r_hand/tp44 - prefix = "tp44_" - -/datum/greyscale_config/gun_inhand/r_hand/t90 - prefix = "t90_" - -/datum/greyscale_config/gun_inhand/r_hand/t37 - icon_file = 'icons/Marine/greyscale_gun/r_hand_64.dmi' - prefix = "t37_" - -/datum/greyscale_config/gun_inhand/r_hand/ter - prefix = "ter_" -/datum/greyscale_config/gun_inhand/r_hand/tep - prefix = "tep_" -/datum/greyscale_config/gun_inhand/r_hand/tec - prefix = "tec_" -/datum/greyscale_config/gun_inhand/r_hand/tem - prefix = "tem_" -/datum/greyscale_config/gun_inhand/r_hand/tes - prefix = "tes_" - -/datum/greyscale_config/gun_inhand/r_hand/tx7 - prefix = "tx7_" - -/datum/greyscale_config/gun_inhand/r_hand/t60 - icon_file = 'icons/Marine/greyscale_gun/r_hand_64.dmi' - prefix = "t60_" - -/datum/greyscale_config/gun_inhand/r_hand/tl127 - icon_file = 'icons/Marine/greyscale_gun/r_hand_64.dmi' - prefix = "tl127_" - -/datum/greyscale_config/gun_inhand/r_hand/sg29 - prefix = "sg29_" - -//Attachments -/datum/greyscale_config/gun_attachment - json_config = 'code/datums/greyscale/json_configs/attachments.json' - icon_file = 'icons/Marine/greyscale_gun/attachments.dmi' - -/datum/greyscale_config/gun_attachment_64 - json_config = 'code/datums/greyscale/json_configs/attachments_64.json' - icon_file = 'icons/Marine/greyscale_gun/attachments_64.dmi' - - /* * MECHS */ diff --git a/code/datums/greyscale/json_configs/attachments.json b/code/datums/greyscale/json_configs/attachments.json deleted file mode 100644 index 40f151503a0d0..0000000000000 --- a/code/datums/greyscale/json_configs/attachments.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "verticalgrip":[ - { - "type":"hyperscale", - "icon_state":"verticalgrip" - } - ], - "verticalgrip_a":[ - { - "type":"hyperscale", - "icon_state":"verticalgrip_a" - } - ], - "angledgrip":[ - { - "type":"hyperscale", - "icon_state":"angledgrip" - } - ], - "angledgrip_a":[ - { - "type":"hyperscale", - "icon_state":"angledgrip_a" - } - ], - "t60stock_a":[ - { - "type":"hyperscale", - "icon_state":"t60stock_a" - }, - { - "type":"icon_state", - "icon_state":"t60stock_no_color_a", - "blend_mode":"overlay" - } - ], - "tl127stock_a":[ - { - "type":"hyperscale", - "icon_state":"tl127stock_a" - }, - { - "type":"icon_state", - "icon_state":"tl127stock_no_color_a", - "blend_mode":"overlay" - } - ], - "sg29stock_a":[ - { - "type":"hyperscale", - "icon_state":"sg29stock_a" - } - ] -} diff --git a/code/datums/greyscale/json_configs/attachments_64.json b/code/datums/greyscale/json_configs/attachments_64.json deleted file mode 100644 index 34434035f02d8..0000000000000 --- a/code/datums/greyscale/json_configs/attachments_64.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "t35stock":[ - { - "type":"hyperscale", - "icon_state":"t35stock_color" - }, - { - "type":"icon_state", - "icon_state":"t35stock", - "blend_mode":"overlay" - } - ], - "t35stock_a":[ - { - "type":"hyperscale", - "icon_state":"t35stock_color" - }, - { - "type":"icon_state", - "icon_state":"t35stock_a", - "blend_mode":"overlay" - } - ], - "t35stock_open":[ - { - "type":"hyperscale", - "icon_state":"t35stock_color" - }, - { - "type":"icon_state", - "icon_state":"t35stock_open", - "blend_mode":"overlay" - } - ], - "t35stock_open_a":[ - { - "type":"hyperscale", - "icon_state":"t35stock_color" - }, - { - "type":"icon_state", - "icon_state":"t35stock_open_a", - "blend_mode":"overlay" - } - ] -} diff --git a/code/datums/greyscale/json_configs/cape.json b/code/datums/greyscale/json_configs/cape.json index c675cfb642e81..c048444da34e6 100644 --- a/code/datums/greyscale/json_configs/cape.json +++ b/code/datums/greyscale/json_configs/cape.json @@ -155,24 +155,6 @@ "icon_state": "cover_2" } ], - "cape_overlord": [ - { - "type": "hyperscale", - "icon_state": "overlord" - } - ], - "cape_overlord (alt 1)": [ - { - "type": "hyperscale", - "icon_state": "overlord_2" - } - ], - "cape_overlord (alt 2)": [ - { - "type": "hyperscale", - "icon_state": "overlord_3" - } - ], "cape_shoal": [ { "type": "hyperscale", @@ -185,12 +167,6 @@ "icon_state": "shoal_back" } ], - "cape_star": [ - { - "type": "hyperscale", - "icon_state": "star" - } - ], "cape_shoal (alt)": [ { "type": "hyperscale", @@ -209,12 +185,6 @@ "icon_state": "rapier_left" } ], - "cape_jacket": [ - { - "type": "hyperscale", - "icon_state": "jacket" - } - ], "cape_kama": [ { "type": "hyperscale", diff --git a/code/datums/greyscale/json_configs/cape_highlight.json b/code/datums/greyscale/json_configs/cape_highlight.json index b1372c924ac2a..e59b1c2f7e34e 100644 --- a/code/datums/greyscale/json_configs/cape_highlight.json +++ b/code/datums/greyscale/json_configs/cape_highlight.json @@ -120,24 +120,6 @@ "icon_state": "cover_2" } ], - "highlight_overlord":[ - { - "type": "hyperscale", - "icon_state": "overlord" - } - ], - "highlight_overlord (alt)":[ - { - "type": "hyperscale", - "icon_state": "overlord_2" - } - ], - "highlight_overlord (alt 2)":[ - { - "type": "hyperscale", - "icon_state": "overlord_3" - } - ], "highlight_shoal":[ { "type": "hyperscale", @@ -156,12 +138,6 @@ "icon_state": "shoal_back" } ], - "highlight_star":[ - { - "type": "hyperscale", - "icon_state": "star" - } - ], "highlight_rapier left":[ { "type": "hyperscale", @@ -173,11 +149,5 @@ "type": "hyperscale", "icon_state": "rapier_right" } - ], - "highlight_jacket":[ - { - "type": "hyperscale", - "icon_state": "jacket" - } ] } diff --git a/code/datums/greyscale/json_configs/gun.json b/code/datums/greyscale/json_configs/gun.json deleted file mode 100644 index f36537ef47a8e..0000000000000 --- a/code/datums/greyscale/json_configs/gun.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "loaded":[ - { - "type":"hyperscale", - "icon_state":"colored" - }, - { - "type":"icon_state", - "icon_state":"loaded", - "blend_mode":"overlay" - } - ], - "loaded_fire":[ - { - "type":"hyperscale", - "icon_state":"colored" - }, - { - "type":"icon_state", - "icon_state":"fire", - "blend_mode":"overlay" - } - ], - "unloaded":[ - { - "type":"hyperscale", - "icon_state":"colored" - }, - { - "type":"icon_state", - "icon_state":"unloaded", - "blend_mode":"overlay" - } - ], - "belt":[ - { - "type":"hyperscale", - "icon_state":"belt_color" - }, - { - "type":"icon_state", - "icon_state":"belt_no_color", - "blend_mode":"overlay" - } - ], - "loaded_l":[ - { - "type":"hyperscale", - "icon_state":"colored" - }, - { - "type":"icon_state", - "icon_state":"linked", - "blend_mode":"overlay" - } - ], - "loaded_a":[ - { - "type":"hyperscale", - "icon_state":"colored_a" - }, - { - "type":"icon_state", - "icon_state":"loaded_a", - "blend_mode":"overlay" - } - ], - "unloaded_a":[ - { - "type":"hyperscale", - "icon_state":"colored_a" - }, - { - "type":"icon_state", - "icon_state":"unloaded_a", - "blend_mode":"overlay" - } - ] -} diff --git a/code/datums/greyscale/json_configs/gun_fire.json b/code/datums/greyscale/json_configs/gun_fire.json deleted file mode 100644 index af62066e45a8c..0000000000000 --- a/code/datums/greyscale/json_configs/gun_fire.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "loaded":[ - { - "type":"hyperscale", - "icon_state":"colored" - }, - { - "type":"icon_state", - "icon_state":"loaded", - "blend_mode":"overlay" - } - ], - "loaded_fire":[ - { - "type":"hyperscale", - "icon_state":"colored" - }, - { - "type":"icon_state", - "icon_state":"fire", - "blend_mode":"overlay" - } - ], - "unloaded":[ - { - "type":"hyperscale", - "icon_state":"colored" - }, - { - "type":"icon_state", - "icon_state":"unloaded", - "blend_mode":"overlay" - } - ] -} diff --git a/code/datums/greyscale/json_configs/gun_hands.json b/code/datums/greyscale/json_configs/gun_hands.json deleted file mode 100644 index 9cdfc6e047a3a..0000000000000 --- a/code/datums/greyscale/json_configs/gun_hands.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "loaded":[ - { - "type":"hyperscale", - "icon_state":"color" - }, - { - "type":"icon_state", - "icon_state":"no_color", - "blend_mode":"overlay" - } - ], - "loaded_w":[ - { - "type":"hyperscale", - "icon_state":"color_w" - }, - { - "type":"icon_state", - "icon_state":"no_color_w", - "blend_mode":"overlay" - } - ] -} diff --git a/code/datums/greyscale/json_configs/gun_mob.json b/code/datums/greyscale/json_configs/gun_mob.json deleted file mode 100644 index ec50949534661..0000000000000 --- a/code/datums/greyscale/json_configs/gun_mob.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "loaded":[ - { - "type":"hyperscale", - "icon_state":"color" - }, - { - "type":"icon_state", - "icon_state":"no_color", - "blend_mode":"overlay" - } - ] -} diff --git a/code/datums/greyscale/json_configs/gun_revolver.json b/code/datums/greyscale/json_configs/gun_revolver.json deleted file mode 100644 index 68e4f0c444175..0000000000000 --- a/code/datums/greyscale/json_configs/gun_revolver.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "loaded":[ - { - "type":"hyperscale", - "icon_state":"colored" - }, - { - "type":"icon_state", - "icon_state":"loaded", - "blend_mode":"overlay" - } - ], - "unloaded":[ - { - "type":"hyperscale", - "icon_state":"colored" - }, - { - "type":"icon_state", - "icon_state":"unloaded", - "blend_mode":"overlay" - } - - ], - "open":[ - { - "type":"hyperscale", - "icon_state":"colored" - }, - { - "type":"icon_state", - "icon_state":"open", - "blend_mode":"overlay" - } - ], - "belt":[ - { - "type":"hyperscale", - "icon_state":"belt_color" - }, - { - "type":"icon_state", - "icon_state":"belt_no_color", - "blend_mode":"overlay" - } - ] -} diff --git a/code/datums/greyscale/json_configs/gun_shotgun.json b/code/datums/greyscale/json_configs/gun_shotgun.json deleted file mode 100644 index 5a52f581fceb3..0000000000000 --- a/code/datums/greyscale/json_configs/gun_shotgun.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "loaded":[ - { - "type":"hyperscale", - "icon_state":"colored" - }, - { - "type":"icon_state", - "icon_state":"loaded", - "blend_mode":"overlay" - } - ], - "unloaded":[ - { - "type":"hyperscale", - "icon_state":"colored_unloaded" - }, - { - "type":"icon_state", - "icon_state":"unloaded", - "blend_mode":"overlay" - } - ], - "unracked":[ - { - "type":"hyperscale", - "icon_state":"colored" - }, - { - "type":"icon_state", - "icon_state":"unprimed", - "blend_mode":"overlay" - } - ], - "pump":[ - { - "type":"hyperscale", - "icon_state":"colored_pump" - }, - { - "type":"icon_state", - "icon_state":"pump", - "blend_mode":"overlay" - } - ] -} diff --git a/code/datums/greyscale/json_configs/visors.json b/code/datums/greyscale/json_configs/visors.json index 1941449c37d8c..95e7812e2af1d 100644 --- a/code/datums/greyscale/json_configs/visors.json +++ b/code/datums/greyscale/json_configs/visors.json @@ -41,24 +41,6 @@ "icon_state": "trooper" } ], - "kabuto_visor": [ - { - "type": "hyperscale", - "icon_state": "kabuto" - } - ], - "hotaru_visor": [ - { - "type": "hyperscale", - "icon_state": "hotaru" - } - ], - "dashe_visor": [ - { - "type": "hyperscale", - "icon_state": "dashe" - } - ], "eva_visor": [ { "type": "hyperscale", diff --git a/code/datums/interior/_interior.dm b/code/datums/interior/_interior.dm new file mode 100644 index 0000000000000..1dd8d0bd6cf04 --- /dev/null +++ b/code/datums/interior/_interior.dm @@ -0,0 +1,106 @@ +#define INTERIOR_BUFFER_TILES 1 + +/datum/interior + ///map template to load as the interior + var/template = /datum/map_template + ///container that this interior is attached to; what we are the inside of + var/atom/container + ///callback to execute when we want to eject the mob + var/datum/callback/exit_callback + ///occupants that entered this interior through the intended way + var/list/mob/occupants = list() + ///turf reservation where we will load our interior + var/datum/turf_reservation/reservation + ///list of all loaded turfs. we keep this around in case we need to update linkages or similar + var/list/turf/loaded_turfs = list() + /// the interior area. you should only be using 1 area for the whole thing, if you're not, make this support it lol + var/area/this_area + +/datum/interior/New(atom/container, datum/callback/exit_callback) + ..() + src.container = container + src.exit_callback = exit_callback + RegisterSignal(container, COMSIG_QDELETING, PROC_REF(handle_container_del)) + RegisterSignal(container, COMSIG_ATOM_ENTERED, PROC_REF(on_container_enter)) + INVOKE_NEXT_TICK(src, PROC_REF(init_map)) + +///actual inits the map, seperate proc because otherwise it fails linter due to "sleep in new" +/datum/interior/proc/init_map() + var/datum/map_template/map = new template + reservation = SSmapping.RequestBlockReservation(map.width + (INTERIOR_BUFFER_TILES*2), map.height + (INTERIOR_BUFFER_TILES*2)) + + var/list/load_coords = reservation.bottom_left_coords.Copy() + load_coords[1] = load_coords[1] + INTERIOR_BUFFER_TILES + load_coords[2] = load_coords[2] + INTERIOR_BUFFER_TILES + var/turf/load_loc = locate(load_coords[1], load_coords[2], load_coords[3]) + var/list/bounds = map.load(load_loc) + this_area = load_loc.loc + + loaded_turfs = block( + locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]), + locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ]) + ) + + connect_atoms() + +/datum/interior/Destroy(force, ...) + for(var/mob/occupant AS in occupants) + mob_leave(occupant) + exit_callback = null + this_area = null + loaded_turfs = null + QDEL_NULL(reservation) //all the turfs/objs are deleted past this point + container = null + return ..() + +///connects all atoms as needed to the interior. seperate so it can be used in debugging +/datum/interior/proc/connect_atoms() + for(var/turf/tile AS in loaded_turfs) + for(var/atom/subject AS in tile.GetAllContents()) + subject.link_interior(src) + CHECK_TICK + +///called when someone enters the container +/datum/interior/proc/on_container_enter(datum/source, atom/movable/moved_in, direction) + SIGNAL_HANDLER + if(ismob(moved_in)) + mob_enter(moved_in) + +///called when we want to move a mob into the interior +/datum/interior/proc/mob_enter(mob/enterer) + RegisterSignal(enterer, COMSIG_QDELETING, PROC_REF(handle_occupant_del)) + RegisterSignal(enterer, COMSIG_EXIT_AREA, PROC_REF(handle_area_leave)) + for(var/datum/action/minimap/user_map in enterer.actions) + user_map.override_locator(container) + occupants += enterer + //teleporting the mob is on a case-by-case basis + +///called when we want to remove a mob from the interior +/datum/interior/proc/mob_leave(mob/leaver, teleport = TRUE) + UnregisterSignal(leaver, list(COMSIG_QDELETING, COMSIG_EXIT_AREA)) + occupants -= leaver + exit_callback?.Invoke(leaver, src, teleport) + for(var/datum/action/minimap/user_map in leaver.actions) + user_map.clear_locator_override() + +///called when a mob gets deleted while an occupant +/datum/interior/proc/handle_occupant_del(mob/source) + SIGNAL_HANDLER + mob_leave(source, FALSE) + +///called when parent container is deleted +/datum/interior/proc/handle_container_del(atom/source) + SIGNAL_HANDLER + qdel(src) + +///when someone who entered the "proper" way leaves the area, remove them as an occupant without teleporting +/datum/interior/proc/handle_area_leave(mob/source, area/oldarea, direction) + SIGNAL_HANDLER + if(get_area(source) != this_area) + mob_leave(source, FALSE) + +#undef INTERIOR_BUFFER_TILES + +/area/interior + name = "ERROR AREA DO NOT USE" + base_lighting_alpha = 128 diff --git a/code/datums/interior/interior_tank.dm b/code/datums/interior/interior_tank.dm new file mode 100644 index 0000000000000..2001ef28ba910 --- /dev/null +++ b/code/datums/interior/interior_tank.dm @@ -0,0 +1,142 @@ +/datum/interior/armored + template = /datum/map_template/interior/medium_tank + ///main cannon ammo management + var/obj/structure/gun_breech/breech + ///secondary gun ammo management + var/obj/structure/gun_breech/secondary_breech + ///driver seat that allows driving + var/obj/structure/bed/chair/vehicle_driver_seat/drive_seat + //gunner seat that allows weapon control + var/obj/structure/bed/chair/vehicle_gunner_seat/gun_seat + ///door to enter and leave the tank. TODO: make this support multiple doors + var/turf/closed/interior/tank/door/door + +/datum/interior/armored/Destroy(force, ...) + breech = null + secondary_breech = null + drive_seat = null + gun_seat = null + door = null + return ..() + +/datum/interior/armored/mob_enter(mob/enterer) + if(door) + enterer.forceMove(door.get_enter_location()) + enterer.setDir(EAST) + return ..() + to_chat(enterer, span_userdanger("AN ERROR OCCURED PUTTING YOU INTO AN INTERIOR")) + stack_trace("a [enterer.type] could not find a door when entering an interior") + enterer.forceMove(pick(loaded_turfs)) + return ..() + +/turf/closed/interior + resistance_flags = RESIST_ALL + +/turf/closed/interior/tank + name = "\improper Ares tank interior" + icon = 'icons/obj/armored/3x3/tank_interior.dmi' + +/turf/closed/interior/tank/one + icon_state = "tank_interior_1" +/turf/closed/interior/tank/two + icon_state = "tank_interior_2" +/turf/closed/interior/tank/three + icon_state = "tank_interior_3" +/turf/closed/interior/tank/four + icon_state = "tank_interior_4" +/turf/closed/interior/tank/five + icon_state = "tank_interior_5" +/turf/closed/interior/tank/six + icon_state = "tank_interior_6" +/turf/closed/interior/tank/twelve + icon_state = "tank_interior_12" +/turf/closed/interior/tank/thirteen + icon_state = "tank_interior_13" +/turf/closed/interior/tank/seventeen + icon_state = "tank_interior_17" +/turf/closed/interior/tank/eighteen + icon_state = "tank_interior_18" +/turf/closed/interior/tank/nineteen + icon_state = "tank_interior_19" + layer = ABOVE_ALL_MOB_LAYER +/turf/closed/interior/tank/twenty + icon_state = "tank_interior_20" + layer = ABOVE_ALL_MOB_LAYER +/turf/closed/interior/tank/twentyone + icon_state = "tank_interior_21" + layer = ABOVE_ALL_MOB_LAYER +/turf/closed/interior/tank/twentythree + icon_state = "tank_interior_23" +/turf/closed/interior/tank/twentyfour + icon_state = "tank_interior_24" +/turf/closed/interior/tank/twentyfive + icon_state = "tank_interior_25" + layer = ABOVE_ALL_MOB_LAYER +/turf/closed/interior/tank/twentysix + icon_state = "tank_interior_26" + layer = ABOVE_ALL_MOB_LAYER +/turf/closed/interior/tank/twentyseven + icon_state = "tank_interior_27" + layer = ABOVE_ALL_MOB_LAYER +/turf/closed/interior/tank/twentyeight + icon_state = "tank_interior_28" + +/turf/closed/interior/tank/door + name = "exit hatch" + icon = 'icons/obj/armored/3x3/tank_interior.dmi' + icon_state = "tank_interior_7" + resistance_flags = RESIST_ALL + ///owner of this object, assigned during interior linkage + var/obj/vehicle/sealed/armored/owner + +/turf/closed/interior/tank/door/Destroy() + owner = null + return ..() + +/turf/closed/interior/tank/door/link_interior(datum/interior/link) + if(!istype(link, /datum/interior/armored)) + CRASH("invalid interior [link.type] passed to [name]") + var/datum/interior/armored/inside = link + inside.door = src + owner = inside.container + +/turf/closed/interior/tank/door/attack_hand(mob/living/user) + . = ..() + owner.interior.mob_leave(user) + +/turf/closed/interior/tank/door/attack_ghost(mob/dead/observer/user) + . = ..() + owner.interior.mob_leave(user) + +///returns where we want to spit out new enterers +/turf/closed/interior/tank/door/proc/get_enter_location() + return get_step(src, EAST) + + +/turf/open/interior + resistance_flags = RESIST_ALL + +/turf/open/interior/tank + name = "\improper Ares tank interior" + icon = 'icons/obj/armored/3x3/tank_interior.dmi' + +/turf/open/interior/tank/eight + icon_state = "tank_interior_8" +/turf/open/interior/tank/nine + icon_state = "tank_interior_9" +/turf/open/interior/tank/ten + icon_state = "tank_interior_10" +/turf/open/interior/tank/eleven + icon_state = "tank_interior_11" +/turf/open/interior/tank/fourteen + icon_state = "tank_interior_14" +/turf/open/interior/tank/fifteen + icon_state = "tank_interior_15" +/turf/open/interior/tank/sixteen + icon_state = "tank_interior_16" +/turf/open/interior/tank/twentytwo + icon_state = "tank_interior_22" + +/area/interior/tank + name = "Tank Interior" + icon_state = "shuttle" diff --git a/code/datums/interior/link_interior.dm b/code/datums/interior/link_interior.dm new file mode 100644 index 0000000000000..f91ac65286cdf --- /dev/null +++ b/code/datums/interior/link_interior.dm @@ -0,0 +1,3 @@ +///generic linkage proc for atoms to an interior. e.g loading the tank +/atom/proc/link_interior(datum/interior/link) + return diff --git a/code/datums/interior/map_templates.dm b/code/datums/interior/map_templates.dm new file mode 100644 index 0000000000000..7172a7f1ef40a --- /dev/null +++ b/code/datums/interior/map_templates.dm @@ -0,0 +1,14 @@ +/datum/map_template/interior + name = "Base Interior Template" + ///just the prefix so we dont need to fill in the entire thing + var/prefix = "_maps/interiors/" + ///filename without file type for the map + var/filename + +/datum/map_template/interior/New() + mappath = "[prefix][filename].dmm" + return ..() + +/datum/map_template/interior/medium_tank + name = "medium tank interior template" + filename = "tank" diff --git a/code/datums/jobs/access.dm b/code/datums/jobs/access.dm index 67d7f55f3e494..6eb19703ccf23 100644 --- a/code/datums/jobs/access.dm +++ b/code/datums/jobs/access.dm @@ -39,7 +39,7 @@ if(0) return ALL_ACCESS if(1) - return list(ACCESS_MARINE_CAPTAIN, ACCESS_MARINE_COMMANDER, ACCESS_MARINE_LOGISTICS, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT, ACCESS_MARINE_MECH, ACCESS_MARINE_BRIDGE)//command + return list(ACCESS_MARINE_CAPTAIN, ACCESS_MARINE_COMMANDER, ACCESS_MARINE_LOGISTICS, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_TADPOLE, ACCESS_MARINE_PILOT, ACCESS_MARINE_MECH, ACCESS_MARINE_BRIDGE, ACCESS_MARINE_ARMORED)//command if(2) return list(ACCESS_MARINE_CE, ACCESS_MARINE_ENGINEERING, ACCESS_MARINE_REMOTEBUILD)//engineering and maintenance if(3) @@ -49,7 +49,7 @@ if(5) return list(ACCESS_MARINE_WO, ACCESS_MARINE_ARMORY, ACCESS_MARINE_BRIG)//security if(6) - return list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_ENGPREP, ACCESS_MARINE_SMARTPREP, ACCESS_MARINE_LEADER,)//spess mahreens + return list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_ENGPREP, ACCESS_MARINE_SMARTPREP, ACCESS_MARINE_LEADER)//spess mahreens if(7) return list(ACCESS_MARINE_ALPHA, ACCESS_MARINE_BRAVO, ACCESS_MARINE_CHARLIE, ACCESS_MARINE_DELTA)//squads if(8) @@ -132,10 +132,14 @@ return "Requisitions" if(ACCESS_MARINE_DROPSHIP) return "Dropship Piloting" + if(ACCESS_MARINE_TADPOLE) + return "Tadpole Piloting" if(ACCESS_MARINE_PILOT) return "Pilot Gear" if(ACCESS_MARINE_MECH) return "Mech" + if(ACCESS_MARINE_ARMORED) + return "Armored Vehicle Bay" if(ACCESS_CIVILIAN_RESEARCH) return "Civilian Research" if(ACCESS_CIVILIAN_LOGISTICS) @@ -234,13 +238,17 @@ if("E6") . = size ? "SSGT" : "Staff Sergeant" if("E7") + . = size ? "SFC" : "Sergeant First Class" + if("E7E") . = size ? "GYSGT" : "Gunnery Sergeant" if("E8") . = size ? "MSGT" : "Master Sergeant" if("E8E") . = size ? "FSGT" : "First Sergeant" if("E9") - . = size ? "SGM" : "Sergeant Major" + . = size ? "MGYSGT" : "Master Gunnery Sergeant" + if("E9A") + . = size ? "SGM" : "Sergeant Major" //above master gunnery sergeant, below command sergeant major if("E9E") . = size ? "CSGM" : "Command Sergeant Major" if("O1") @@ -281,6 +289,10 @@ . = size ? "MAJ" : "Major" if("MO5") . = size ? "LtCol" : "Lieutenant Colonel" + if("MO6") + . = size ? "Col" : "Colonel" + if("M10") + . = size ? "Gen" : "General" if("UPP1") . = size ? "UGNR" : "USL Gunner" if("UPP2") diff --git a/code/datums/jobs/job/clf.dm b/code/datums/jobs/job/clf.dm index 1cb5cbc7d5c78..6587ecf76c53f 100644 --- a/code/datums/jobs/job/clf.dm +++ b/code/datums/jobs/job/clf.dm @@ -298,6 +298,7 @@ outfits = list( /datum/outfit/job/clf/specialist/dpm, /datum/outfit/job/clf/specialist/clf_heavyrifle, + /datum/outfit/job/clf/specialist/clf_heavymachinegun, ) //The base loadout for all CLF Specialists @@ -370,6 +371,23 @@ H.equip_to_slot_or_del(new /obj/item/explosive/grenade/stick, SLOT_IN_ACCESSORY) H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb, SLOT_IN_ACCESSORY) +/datum/outfit/job/clf/specialist/clf_heavymachinegun + suit_store = /obj/item/weapon/gun/icc_hmg + belt = /obj/item/storage/belt/sparepouch + back = /obj/item/storage/backpack/lightpack + +/datum/outfit/job/clf/specialist/clf_heavymachinegun/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/icc_hmg, SLOT_IN_BELT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/icc_hmg, SLOT_IN_BELT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/icc_hmg, SLOT_IN_BELT) + + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/stick, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/stick, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/stick, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/stick, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb, SLOT_IN_ACCESSORY) + //CLF Leader /datum/job/clf/leader diff --git a/code/datums/jobs/job/fallen.dm b/code/datums/jobs/job/fallen.dm index 29433b4546131..8ed0a3ccec654 100644 --- a/code/datums/jobs/job/fallen.dm +++ b/code/datums/jobs/job/fallen.dm @@ -62,8 +62,8 @@ /datum/job/fallen/marine/leader title = ROLE_FALLEN(SQUAD_LEADER) skills_type = /datum/skills/sl - access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP) - minimal_access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP) + access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_TADPOLE) + minimal_access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_TADPOLE) outfit = /datum/outfit/job/marine/leader /datum/job/fallen/marine/mechpilot diff --git a/code/datums/jobs/job/icc.dm b/code/datums/jobs/job/icc.dm index 4dcdf975614b4..1bb8ca8da9d0a 100644 --- a/code/datums/jobs/job/icc.dm +++ b/code/datums/jobs/job/icc.dm @@ -48,8 +48,8 @@ /datum/outfit/job/icc/standard/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) . = ..() - H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/wrapped/barcardine, SLOT_IN_SUIT) - H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/wrapped/barcardine, SLOT_IN_SUIT) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/wrapped/barcaridine, SLOT_IN_SUIT) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/wrapped/barcaridine, SLOT_IN_SUIT) H.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) H.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) @@ -130,6 +130,7 @@ outfits = list( /datum/outfit/job/icc/guard/coilgun, /datum/outfit/job/icc/guard/icc_autoshotgun, + /datum/outfit/job/icc/guard/icc_bagmg, ) /datum/outfit/job/icc/guard @@ -144,8 +145,8 @@ /datum/outfit/job/icc/guard/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) . = ..() - H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/wrapped/barcardine, SLOT_IN_SUIT) - H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/wrapped/barcardine, SLOT_IN_SUIT) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/wrapped/barcaridine, SLOT_IN_SUIT) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/wrapped/barcaridine, SLOT_IN_SUIT) H.equip_to_slot_or_del(new /obj/item/tool/crowbar/red, SLOT_IN_BACKPACK) H.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) @@ -211,6 +212,24 @@ H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/icc_autoshotgun/frag, SLOT_IN_L_POUCH) H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/icc_autoshotgun/frag, SLOT_IN_L_POUCH) +/datum/outfit/job/icc/guard/icc_bagmg + wear_suit = /obj/item/clothing/suit/storage/marine/icc/guard/heavy + head = /obj/item/clothing/head/helmet/marine/icc/guard/heavy + suit_store = /obj/item/weapon/gun/rifle/icc_coilgun + back = /obj/item/storage/holster/icc_mg/full + belt = /obj/item/ammo_magazine/icc_mg/belt + l_store = /obj/item/storage/pouch/magazine/large/icc + r_store = /obj/item/storage/pouch/magazine/large/icc + +/datum/outfit/job/icc/guard/icc_bagmg/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/icc_coilgun, SLOT_IN_L_POUCH) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/icc_coilgun, SLOT_IN_L_POUCH) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/icc_coilgun, SLOT_IN_L_POUCH) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/icc_coilgun, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/icc_coilgun, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/icc_coilgun, SLOT_IN_R_POUCH) + //ICC Medic /datum/job/icc/medic @@ -236,8 +255,8 @@ /datum/outfit/job/icc/medic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) . = ..() - H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/wrapped/barcardine, SLOT_IN_SUIT) - H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/wrapped/barcardine, SLOT_IN_SUIT) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/wrapped/barcaridine, SLOT_IN_SUIT) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/wrapped/barcaridine, SLOT_IN_SUIT) H.equip_to_slot_or_del(new /obj/item/tool/crowbar/red, SLOT_IN_BACKPACK) H.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) @@ -317,8 +336,8 @@ /datum/outfit/job/icc/leader/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) . = ..() - H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/wrapped/barcardine, SLOT_IN_SUIT) - H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/wrapped/barcardine, SLOT_IN_SUIT) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/wrapped/barcaridine, SLOT_IN_SUIT) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/wrapped/barcaridine, SLOT_IN_SUIT) H.equip_to_slot_or_del(new /obj/item/tool/crowbar/red, SLOT_IN_BACKPACK) H.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) diff --git a/code/datums/jobs/job/job.dm b/code/datums/jobs/job/job.dm index 2d14d82542574..5edf59c5d6fee 100644 --- a/code/datums/jobs/job/job.dm +++ b/code/datums/jobs/job/job.dm @@ -163,15 +163,13 @@ GLOBAL_PROTECT(exp_specialmap) /datum/job/proc/radio_help_message(mob/M) to_chat(M, {" -[span_role_body("|______________________|")] -[span_role_header("You are \an [title]!")] -[span_role_body("As \an [title] you answer to [supervisors]. Special circumstances may change this.")] -[span_role_body("|______________________|")] +[span_role_header("You are the [title].")] +[span_role_body("As the [title] you answer to [supervisors]. Special circumstances may change this.")] "}) if(!(job_flags & JOB_FLAG_NOHEADSET)) - to_chat(M, "Prefix your message with ; to speak on the default radio channel. To see other prefixes, look closely at your headset.") + to_chat(M, "Prefix your message with ; to speak on the default radio channel. To see other prefixes, look closely at your headset.") if(req_admin_notify) - to_chat(M, "You are playing a job that is important for game progression. If you have to disconnect, please head to hypersleep, if you can't make it there, notify the admins via adminhelp.") + to_chat(M, "You are playing a job that is important for game progression. If you have to disconnect, please head to hypersleep, if you can't make it there, notify the admins via adminhelp.") /datum/outfit/job var/jobtype @@ -215,7 +213,7 @@ GLOBAL_PROTECT(exp_specialmap) if(!(index in SSticker.mode.valid_job_types)) continue if(isxenosjob(scaled_job)) - if(respawn && (SSticker.mode?.flags_round_type & MODE_SILO_RESPAWN)) + if(respawn && (SSticker.mode?.round_type_flags & MODE_SILO_RESPAWN)) continue GLOB.round_statistics.larva_from_marine_spawning += jobworth[index] / scaled_job.job_points_needed scaled_job.add_job_points(jobworth[index]) @@ -231,8 +229,9 @@ GLOBAL_PROTECT(exp_specialmap) var/datum/job/scaled_job = SSjob.GetJobType(index) if(!(scaled_job in SSjob.active_joinable_occupations)) continue - scaled_job.add_job_points(-jobworth[index]) + scaled_job.remove_job_points(jobworth[index]) +///Adds to job points, adding a new slot if threshold reached /datum/job/proc/add_job_points(amount) job_points += amount if(total_positions >= max_positions) @@ -241,11 +240,22 @@ GLOBAL_PROTECT(exp_specialmap) job_points -= job_points_needed add_job_positions(1) +///Removes job points, and if needed, job positions +/datum/job/proc/remove_job_points(amount) + if(job_points_needed == INFINITY || total_positions == -1) + return + if(job_points >= amount) + job_points -= amount + return + var/job_slots_removed = ROUND_UP((amount - job_points) / job_points_needed) + remove_job_positions(job_slots_removed) + job_points += (job_slots_removed * job_points_needed) - amount + /datum/job/proc/add_job_positions(amount) if(!(job_flags & (JOB_FLAG_LATEJOINABLE|JOB_FLAG_ROUNDSTARTJOINABLE))) - CRASH("add_job_positions called for a non-joinable job") + return if(total_positions == -1) - CRASH("add_job_positions called with [amount] amount for a job set to overflow") + return TRUE var/previous_amount = total_positions total_positions += amount manage_job_lists(previous_amount) diff --git a/code/datums/jobs/job/marines.dm b/code/datums/jobs/job/marines.dm index d5be9dbed7531..1cb6e4c48d600 100644 --- a/code/datums/jobs/job/marines.dm +++ b/code/datums/jobs/job/marines.dm @@ -17,7 +17,15 @@ CRASH("after_spawn called for a marine without an assigned_squad") to_chat(M, {"\nYou have been assigned to: [lowertext(human_spawn.assigned_squad.name)] squad. Make your way to the cafeteria for some post-cryosleep chow, and then get equipped in your squad's prep room."}) - + ///yes i know istype(src) is gross but we literally have 1 child type we would want to ignore so + if(ismarineleaderjob(src)) + return + if(!(SSticker.mode.round_type_flags & MODE_FORCE_CUSTOMSQUAD_UI)) + return + if(world.time < SSticker.round_start_time + SSticker.mode.deploy_time_lock) + human_spawn.RegisterSignal(SSdcs, COMSIG_GLOB_DEPLOY_TIMELOCK_ENDED, TYPE_PROC_REF(/mob/living/carbon/human, suggest_squad_assign)) + return + addtimer(CALLBACK(GLOB.squad_selector, TYPE_PROC_REF(/datum, interact), human_spawn), 2 SECONDS) //Squad Marine /datum/job/terragov/squad/standard @@ -37,6 +45,7 @@ Make your way to the cafeteria for some post-cryosleep chow, and then get equipp /datum/job/terragov/squad/engineer = SMARTIE_POINTS_REGULAR, /datum/job/terragov/silicon/synthetic = SYNTH_POINTS_REGULAR, /datum/job/terragov/command/mech_pilot = MECH_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, ) html_description = {" Difficulty: Easy

@@ -99,6 +108,7 @@ What you lack alone, you gain standing shoulder to shoulder with the men and wom /datum/job/terragov/squad/corpsman = SMARTIE_POINTS_REGULAR, /datum/job/terragov/silicon/synthetic = SYNTH_POINTS_REGULAR, /datum/job/terragov/command/mech_pilot = MECH_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, ) job_points_needed = 5 html_description = {" @@ -137,10 +147,12 @@ Your squaddies will look to you when it comes to construction in the field of ba new_human.wear_id.paygrade = "E3" if(1501 to 6000) // 25 hrs new_human.wear_id.paygrade = "E4" - if(6001 to 60000) // 100 hrs + if(6001 to 18000) // 100 hrs new_human.wear_id.paygrade = "E5" + if(18001 to 60000) // 300 hrs + new_human.wear_id.paygrade = "E6" if(60001 to INFINITY) // 1000 hrs - new_human.wear_id.paygrade = "E9" //If you play way too much TGMC. 1000 hours. + new_human.wear_id.paygrade = "E9A" //If you play way too much TGMC. 1000 hours. //Squad Corpsman /datum/job/terragov/squad/corpsman @@ -157,6 +169,7 @@ Your squaddies will look to you when it comes to construction in the field of ba jobworth = list( /datum/job/terragov/silicon/synthetic = SYNTH_POINTS_REGULAR, /datum/job/terragov/command/mech_pilot = MECH_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, /datum/job/xenomorph = LARVA_POINTS_REGULAR, /datum/job/terragov/squad/smartgunner = SMARTIE_POINTS_MEDIUM, /datum/job/terragov/squad/engineer = SMARTIE_POINTS_REGULAR, @@ -197,10 +210,12 @@ You may not be a fully-fledged doctor, but you stand between life and death when new_human.wear_id.paygrade = "E3" if(1501 to 6000) // 25 hrs new_human.wear_id.paygrade = "E4" - if(6001 to 60000) // 100 hrs + if(6001 to 18000) // 100 hrs new_human.wear_id.paygrade = "E5" + if(18001 to 60000) // 300 hrs + new_human.wear_id.paygrade = "E6" if(60001 to INFINITY) // 1000 hrs - new_human.wear_id.paygrade = "E9" //If you play way too much TGMC. 1000 hours. + new_human.wear_id.paygrade = "E9A" //If you play way too much TGMC. 1000 hours. //Squad Smartgunner /datum/job/terragov/squad/smartgunner @@ -248,10 +263,12 @@ You may not be a fully-fledged doctor, but you stand between life and death when new_human.wear_id.paygrade = "E3" if(1501 to 6000) // 25 hrs new_human.wear_id.paygrade = "E4" - if(6001 to 60000) // 100 hrs + if(6001 to 18000) // 100 hrs new_human.wear_id.paygrade = "E5" + if(18001 to 60000) // 300 hrs + new_human.wear_id.paygrade = "E6" if(60001 to INFINITY) // 1000 hrs - new_human.wear_id.paygrade = "E9" //If you play way too much TGMC. 1000 hours. + new_human.wear_id.paygrade = "E9A" //If you play way too much TGMC. 1000 hours. /datum/outfit/job/marine/smartgunner name = SQUAD_SMARTGUNNER @@ -275,7 +292,7 @@ You may not be a fully-fledged doctor, but you stand between life and death when exp_type = EXP_TYPE_REGULAR_ALL job_flags = JOB_FLAG_ALLOWS_PREFS_GEAR|JOB_FLAG_PROVIDES_BANK_ACCOUNT|JOB_FLAG_ADDTOMANIFEST|JOB_FLAG_PROVIDES_SQUAD_HUD|JOB_FLAG_CAN_SEE_ORDERS jobworth = list( - /datum/job/xenomorph = LARVA_POINTS_STRONG, + /datum/job/xenomorph = LARVA_POINTS_REGULAR, ) job_points_needed = 10 //Redefined via config. @@ -301,8 +318,8 @@ You can serve a variety of roles, so choose carefully."}) comm_title = JOB_COMM_TITLE_SQUAD_LEADER total_positions = 4 supervisors = "the acting field commander" - access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP) - minimal_access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP) + access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_TADPOLE) + minimal_access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_TADPOLE) skills_type = /datum/skills/sl display_order = JOB_DISPLAY_ORDER_SQUAD_LEADER outfit = /datum/outfit/job/marine/leader @@ -316,6 +333,7 @@ You can serve a variety of roles, so choose carefully."}) /datum/job/terragov/squad/engineer = SMARTIE_POINTS_REGULAR, /datum/job/terragov/silicon/synthetic = SYNTH_POINTS_REGULAR, /datum/job/terragov/command/mech_pilot = MECH_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, ) html_description = {" Difficulty: Hard

@@ -347,13 +365,17 @@ You are also in charge of communicating with command and letting them know about var/playtime_mins = user?.client?.get_exp(title) switch(playtime_mins) if(0 to 1500) // starting - new_human.wear_id.paygrade = "E5" - if(1501 to 7500) // 25 hrs - new_human.wear_id.paygrade = "E6" - if(7501 to 60000) // 125 hrs new_human.wear_id.paygrade = "E7" + if(1501 to 6000) // 25 hrs + new_human.wear_id.paygrade = "E7E" + if(6001 to 18000) // 100 hrs + new_human.wear_id.paygrade = "E8E" + if(18001 to 60000) // 300 hrs + new_human.wear_id.paygrade = "E9" if(60001 to INFINITY) // 1000 hrs new_human.wear_id.paygrade = "E9E" //If you play way too much TGMC. 1000 hours. + if(SSticker.mode.round_type_flags & MODE_FORCE_CUSTOMSQUAD_UI) + addtimer(CALLBACK(GLOB.squad_manager, TYPE_PROC_REF(/datum, interact), new_human), 2 SECONDS) if(!latejoin) return if(!new_human.assigned_squad) @@ -364,7 +386,6 @@ You are also in charge of communicating with command and letting them know about new_human.assigned_squad.promote_leader(new_human) - /datum/job/terragov/squad/vatgrown title = SQUAD_MARINE paygrade = "VM" @@ -379,6 +400,7 @@ You are also in charge of communicating with command and letting them know about /datum/job/xenomorph = LARVA_POINTS_REGULAR, /datum/job/terragov/silicon/synthetic = SYNTH_POINTS_REGULAR, /datum/job/terragov/command/mech_pilot = MECH_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, ) minimap_icon = "private" diff --git a/code/datums/jobs/job/other.dm b/code/datums/jobs/job/other.dm index f3cab152069df..9dd2384eeffbf 100644 --- a/code/datums/jobs/job/other.dm +++ b/code/datums/jobs/job/other.dm @@ -64,7 +64,7 @@ belt = /obj/item/storage/belt/utility/full shoes = /obj/item/clothing/shoes/marinechief/sa gloves = /obj/item/clothing/gloves/marine/officer/chief/sa - glasses = /obj/item/clothing/glasses/sunglasses/sa/nodrop + glasses = /obj/item/clothing/glasses/hud/sa/nodrop back = /obj/item/storage/backpack/marine/satchel /datum/job/spatial_agent/galaxy_red diff --git a/code/datums/jobs/job/retired.dm b/code/datums/jobs/job/retired.dm new file mode 100644 index 0000000000000..be876519abc05 --- /dev/null +++ b/code/datums/jobs/job/retired.dm @@ -0,0 +1,89 @@ +/datum/job/retired + title = "TGMC retired veteran" + job_category = JOB_CAT_MARINE + paygrade = "MSGT" + access = ALL_ANTAGONIST_ACCESS + minimal_access = ALL_ANTAGONIST_ACCESS + skills_type = /datum/skills/veteran //they're old, they know their stuff + faction = FACTION_TERRAGOV + outfit = /datum/outfit/job/retired + +/datum/outfit/job/retired + name = "TGMC retired veteran" + jobtype = /datum/job/retired + + id = /obj/item/card/id/dogtag + wear_suit = /obj/item/clothing/suit/storage/marine/officer/req //it's pas + glasses = /obj/item/clothing/glasses/eyepatch + w_uniform = /obj/item/clothing/under/marine/service + mask = /obj/item/clothing/mask/cigarette/pipe + head = /obj/item/clothing/head/servicecap + back = /obj/item/storage/backpack/satchel + belt = /obj/item/storage/belt/marine + gloves = /obj/item/clothing/gloves/marine/black + l_store = /obj/item/storage/pouch/medkit/firstaid + r_store = /obj/item/storage/holster/flarepouch/full + suit_store = /obj/item/weapon/gun/rifle/m41a/magharness + ears = /obj/item/radio/headset/distress/retired + +/datum/outfit/job/retired/post_equip(mob/living/carbon/human/H, visualsOnly) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41a, SLOT_IN_BELT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41a, SLOT_IN_BELT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41a, SLOT_IN_BELT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41a, SLOT_IN_BELT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41a, SLOT_IN_BELT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41a, SLOT_IN_BELT) + + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/burger/tofu, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/drinks/flask/marine, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + + H.equip_to_slot_or_del(new /obj/item/storage/fancy/chemrettes, SLOT_IN_SUIT) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_SUIT) + +/datum/job/retired/leader + title = "TGMC retired veteran expedition leader" + paygrade = "LtCol" + skills_type = /datum/skills/veteran_captain //The leader gets even more skills + outfit = /datum/outfit/job/retired/leader + +/datum/outfit/job/retired/leader + name = "TGMC retired veteran expedition leader" + jobtype = /datum/job/retired/leader + + id = /obj/item/card/id/dogtag/fc + head = /obj/item/clothing/head/tgmcberet/fc + gloves = /obj/item/clothing/gloves/marine/officer + w_uniform = /obj/item/clothing/under/marine/officer/exec + belt = /obj/item/storage/holster/blade/officer/full + suit_store = /obj/item/storage/holster/belt/mateba/full + back = /obj/item/ammo_magazine/minigun_wheelchair + +/datum/outfit/job/retired/leader/post_equip(mob/living/carbon/human/H, visualsOnly) + H.equip_to_slot_or_del(new /obj/item/storage/fancy/chemrettes, SLOT_IN_SUIT) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/m15, SLOT_IN_SUIT) + + H.amputate_limb(BODY_ZONE_L_LEG) + H.amputate_limb(BODY_ZONE_R_LEG) + var/obj/vehicle/ridden/wheelchair/weaponized/wheelchair = new(H.drop_location()) + wheelchair.buckle_mob(H, TRUE) + +/datum/job/retired/augmented + title = "TGMC augmented veteran" + outfit = /datum/outfit/job/retired/augmented + +/datum/outfit/job/retired/augmented + name = "TGMC augmented veteran" + jobtype = /datum/job/retired/augmented + +/datum/outfit/job/retired/augmented/post_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() // Same gear as the regular outfit, but we give them some robot limbs + for(var/i in 1 to 2) + var/datum/limb/picked_limb = H.get_limb(pick_n_take(list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))) + picked_limb.robotize() + diff --git a/code/datums/jobs/job/sectoid.dm b/code/datums/jobs/job/sectoid.dm index 22781b0444373..56aa01e20edb9 100644 --- a/code/datums/jobs/job/sectoid.dm +++ b/code/datums/jobs/job/sectoid.dm @@ -4,23 +4,11 @@ minimal_access = ALL_ANTAGONIST_ACCESS skills_type = /datum/skills/sectoid faction = FACTION_SECTOIDS + outfit = /datum/outfit/job/sectoid -/datum/outfit/job/sectoid/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - . = ..() - H.set_species("Sectoid") - - H.name = GLOB.namepool[/datum/namepool/sectoid].random_name(H) - H.real_name = H.name - -//Sectoid Grunt -/datum/job/sectoid/grunt - title = "Sectoid Grunt" - outfit = /datum/outfit/job/sectoid/grunt - - -/datum/outfit/job/sectoid/grunt +/datum/outfit/job/sectoid name = "Sectoid Grunt" - jobtype = /datum/job/sectoid/grunt + jobtype = /datum/job/sectoid id = /obj/item/card/id belt = /obj/item/storage/belt/marine/sectoid @@ -35,8 +23,22 @@ l_store = /obj/item/explosive/grenade/sectoid back = /obj/item/weapon/gun/rifle/sectoid_rifle + var/list/abilities = list( + /datum/action/ability/activable/sectoid/mindmeld, + /datum/action/ability/activable/sectoid/mindfray, + ) -/datum/outfit/job/sectoid/grunt/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) +/datum/outfit/job/sectoid/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + H.set_species("Sectoid") + + H.name = GLOB.namepool[/datum/namepool/sectoid].random_name(H) + H.real_name = H.name + + for(var/ability in abilities) + H.add_ability(ability) + +/datum/outfit/job/sectoid/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) . = ..() H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/sectoid_rifle, SLOT_IN_BELT) H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/sectoid_rifle, SLOT_IN_BELT) @@ -45,6 +47,22 @@ H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/sectoid_rifle, SLOT_IN_BELT) H.equip_to_slot_or_del(new /obj/item/tool/crowbar/red, SLOT_IN_BELT) +//Sectoid Grunt +/datum/job/sectoid/grunt + title = "Sectoid Grunt" + +//Sectoid psionic +/datum/job/sectoid/psionic + title = "Sectoid psionic" + outfit = /datum/outfit/job/sectoid/psionic + +/datum/outfit/job/sectoid/psionic + abilities = list( + /datum/action/ability/activable/sectoid/mindmeld, + /datum/action/ability/activable/sectoid/mindfray, + /datum/action/ability/activable/sectoid/reknit_form, + /datum/action/ability/activable/sectoid/stasis, + ) //Sectoid Leader /datum/job/sectoid/leader @@ -52,30 +70,16 @@ title = "Sectoid Leader" outfit = /datum/outfit/job/sectoid/leader - /datum/outfit/job/sectoid/leader name = "Sectoid Leader" jobtype = /datum/job/sectoid/leader - - id = /obj/item/card/id - belt = /obj/item/storage/belt/marine/sectoid - head = /obj/item/clothing/head/helmet/sectoid - ears = /obj/item/radio/headset/distress/sectoid - w_uniform = /obj/item/clothing/under/sectoid - glasses = /obj/item/clothing/glasses/night/sectoid - shoes = /obj/item/clothing/shoes/sectoid wear_suit = /obj/item/clothing/suit/armor/sectoid/shield - gloves = /obj/item/clothing/gloves/sectoid - r_store = /obj/item/stack/medical/heal_pack/gauze/sectoid - l_store = /obj/item/explosive/grenade/sectoid - back = /obj/item/weapon/gun/rifle/sectoid_rifle - - -/datum/outfit/job/sectoid/leader/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - . = ..() - H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/sectoid_rifle, SLOT_IN_BELT) - H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/sectoid_rifle, SLOT_IN_BELT) - H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/sectoid_rifle, SLOT_IN_BELT) - H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/sectoid_rifle, SLOT_IN_BELT) - H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/sectoid_rifle, SLOT_IN_BELT) - H.equip_to_slot_or_del(new /obj/item/tool/crowbar/red, SLOT_IN_BELT) + abilities = list( + /datum/action/ability/activable/sectoid/mindmeld/greater, + /datum/action/ability/activable/sectoid/mindfray, + /datum/action/ability/activable/sectoid/reknit_form/greater, + /datum/action/ability/activable/sectoid/stasis, + /datum/action/ability/activable/sectoid/fuse, + /datum/action/ability/activable/psionic_interact, + /datum/action/ability/activable/sectoid/reanimate, + ) diff --git a/code/datums/jobs/job/shipside.dm b/code/datums/jobs/job/shipside.dm index a44e1317b68a3..ca597e9c0b393 100644 --- a/code/datums/jobs/job/shipside.dm +++ b/code/datums/jobs/job/shipside.dm @@ -32,6 +32,7 @@ /datum/job/terragov/squad/smartgunner = SMARTIE_POINTS_REGULAR, /datum/job/terragov/silicon/synthetic = SYNTH_POINTS_REGULAR, /datum/job/terragov/command/mech_pilot = MECH_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, ) html_description = {" Difficulty: Hard

@@ -69,7 +70,7 @@ Godspeed, captain! And remember, you are not above the law."}) new_human.wear_id.paygrade = "O8" /datum/job/terragov/command/captain/campaign - outfit = /datum/outfit/job/command/captain/campaign + outfit = /datum/outfit/job/command/captain_campaign multiple_outfits = FALSE /datum/outfit/job/command/captain @@ -96,9 +97,11 @@ Godspeed, captain! And remember, you are not above the law."}) r_store = /obj/item/storage/pouch/general/large/command l_store = /obj/item/hud_tablet/leadership -/datum/outfit/job/command/captain/campaign - r_store = /obj/item/storage/pouch/general/large - l_store = /obj/item/binoculars/fire_support/campaign +/datum/outfit/job/command/captain_campaign + name = CAPTAIN + jobtype = /datum/job/terragov/command/captain + + id = /obj/item/card/id/gold //Field Commander /datum/job/terragov/command/fieldcommander @@ -121,10 +124,11 @@ Godspeed, captain! And remember, you are not above the law."}) exp_type = EXP_TYPE_REGULAR_ALL job_flags = JOB_FLAG_LATEJOINABLE|JOB_FLAG_ROUNDSTARTJOINABLE|JOB_FLAG_ALLOWS_PREFS_GEAR|JOB_FLAG_PROVIDES_BANK_ACCOUNT|JOB_FLAG_ADDTOMANIFEST|JOB_FLAG_ISCOMMAND|JOB_FLAG_BOLD_NAME_ON_SELECTION|JOB_FLAG_PROVIDES_SQUAD_HUD|JOB_FLAG_CAN_SEE_ORDERS|JOB_FLAG_ALWAYS_VISIBLE_ON_MINIMAP|JOB_FLAG_LOUDER_TTS jobworth = list( - /datum/job/xenomorph = LARVA_POINTS_SHIPSIDE, + /datum/job/xenomorph = LARVA_POINTS_REGULAR, /datum/job/terragov/squad/smartgunner = SMARTIE_POINTS_REGULAR, /datum/job/terragov/silicon/synthetic = SYNTH_POINTS_REGULAR, /datum/job/terragov/command/mech_pilot = MECH_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, ) html_description = {" Difficulty:Very Hard

@@ -152,12 +156,16 @@ Make the TGMC proud!"}) if(!playtime_mins || playtime_mins < 1 ) return switch(playtime_mins) - if(0 to 1500) //starting + if(0 to 1500) // starting new_human.wear_id.paygrade = "O3" - if(1500 to 7500) // 25 hrs + if(1501 to 6000) // 25hrs new_human.wear_id.paygrade = "MO4" - if(7501 to INFINITY) // 125 hrs + if(6001 to 18000) // 100 hrs new_human.wear_id.paygrade = "MO5" + if(18001 to 60000) // 300 hrs + new_human.wear_id.paygrade = "MO6" + if(60001 to INFINITY) // 1000 hrs + new_human.wear_id.paygrade = "M10" //If you play way too much TGMC. 1000 hours. /datum/outfit/job/command/fieldcommander @@ -190,52 +198,14 @@ Make the TGMC proud!"}) //Campaign version with specific loadout /datum/job/terragov/command/fieldcommander/campaign - outfit = /datum/outfit/job/command/fieldcommander/campaign + outfit = /datum/outfit/job/command/fieldcommander_campaign multiple_outfits = FALSE -/datum/outfit/job/command/fieldcommander/campaign +/datum/outfit/job/command/fieldcommander_campaign name = FIELD_COMMANDER jobtype = /datum/job/terragov/command/fieldcommander/campaign id = /obj/item/card/id/dogtag/fc - belt = /obj/item/storage/holster/blade/officer/full - ears = /obj/item/radio/headset/mainship/mcom - glasses = /obj/item/clothing/glasses/hud/health - w_uniform = /obj/item/clothing/under/marine/officer/exec/webbing - wear_suit = /obj/item/clothing/suit/modular/xenonauten/valk - shoes = /obj/item/clothing/shoes/marine/full - gloves = /obj/item/clothing/gloves/marine/officer - mask = /obj/item/clothing/mask/rebreather - head = /obj/item/clothing/head/tgmcberet/fc - r_store = /obj/item/storage/pouch/firstaid/combat_patrol_leader - l_store = /obj/item/storage/pouch/grenade/combat_patrol - suit_store = /obj/item/storage/holster/belt/pistol/m4a3/fieldcommander - -/datum/outfit/job/command/fieldcommander/campaign/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - . = ..() - - H.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) - H.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) - H.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) - H.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_ACCESSORY) - H.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign, SLOT_IN_ACCESSORY) - - H.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/gauze, SLOT_IN_SUIT) - H.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/ointment, SLOT_IN_SUIT) - H.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/isotonic, SLOT_IN_SUIT) - H.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclot, SLOT_IN_SUIT) - H.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/dylovene, SLOT_IN_SUIT) - - H.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/acp, SLOT_IN_BACKPACK) - H.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/acp, SLOT_IN_BACKPACK) - H.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) - H.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) - H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) - H.equip_to_slot_or_del(new /obj/item/explosive/grenade/incendiary, SLOT_IN_BACKPACK) - H.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) - H.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_BACKPACK) - H.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) - //Staff Officer /datum/job/terragov/command/staffofficer @@ -261,6 +231,7 @@ Make the TGMC proud!"}) /datum/job/terragov/squad/smartgunner = SMARTIE_POINTS_REGULAR, /datum/job/terragov/silicon/synthetic = SYNTH_POINTS_REGULAR, /datum/job/terragov/command/mech_pilot = MECH_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, ) html_description = {" Difficulty: Medium

@@ -294,7 +265,7 @@ You are in charge of logistics and the overwatch system. You are also in line to new_human.wear_id.paygrade = "O5" /datum/job/terragov/command/staffofficer/campaign - outfit = /datum/outfit/job/command/staffofficer/campaign + outfit = /datum/outfit/job/command/staffofficer_campaign multiple_outfits = FALSE /datum/outfit/job/command/staffofficer @@ -321,15 +292,97 @@ You are in charge of logistics and the overwatch system. You are also in line to r_store = /obj/item/storage/pouch/general/large l_store = /obj/item/binoculars/tactical -/datum/outfit/job/command/staffofficer/campaign - l_store = /obj/item/binoculars/fire_support/campaign +/datum/outfit/job/command/staffofficer_campaign + name = STAFF_OFFICER + jobtype = /datum/job/terragov/command/staffofficer + + id = /obj/item/card/id/silver + +//Transport Officer +/datum/job/terragov/command/transportofficer + title = TRANSPORT_OFFICER + paygrade = "WO" + comm_title = "TO" + total_positions = 1 + access = list(ACCESS_MARINE_BRIDGE, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT, ACCESS_MARINE_TADPOLE) + minimal_access = list(ACCESS_MARINE_BRIDGE, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT, ACCESS_MARINE_TADPOLE, ACCESS_MARINE_LOGISTICS, ACCESS_MARINE_CARGO, ACCESS_MARINE_RO, ACCESS_MARINE_MEDBAY) + skills_type = /datum/skills/transportofficer + display_order = JOB_DISPLAY_ORDER_TRANSPORT_OFFICER + outfit = /datum/outfit/job/command/transportofficer + exp_requirements = XP_REQ_EXPERT + exp_type = EXP_TYPE_REGULAR_ALL + job_flags = JOB_FLAG_LATEJOINABLE|JOB_FLAG_ROUNDSTARTJOINABLE|JOB_FLAG_ALLOWS_PREFS_GEAR|JOB_FLAG_PROVIDES_BANK_ACCOUNT|JOB_FLAG_ADDTOMANIFEST|JOB_FLAG_PROVIDES_SQUAD_HUD + jobworth = list( + /datum/job/xenomorph = LARVA_POINTS_SHIPSIDE_STRONG, + /datum/job/terragov/squad/smartgunner = SMARTIE_POINTS_REGULAR, + /datum/job/terragov/silicon/synthetic = SYNTH_POINTS_REGULAR, + /datum/job/terragov/command/mech_pilot = MECH_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, + ) + html_description = {" + Difficulty: Hard

+ You answer to the acting Command Staff

+ Unlock Requirement: 100 hours

+ Gamemode Availability: Nuclear War


+ Duty: Pilot the Tadpole, a versatile dropship capable of fulfilling roles ranging from ambulance to mobile bunker. + "} + minimap_icon = "transportofficer" + +/datum/job/terragov/command/transportofficer/after_spawn(mob/living/carbon/new_mob, mob/user, latejoin = FALSE) + . = ..() + if(!ishuman(new_mob)) + return + var/mob/living/carbon/human/new_human = new_mob + var/playtime_mins = user?.client?.get_exp(title) + if(!playtime_mins || playtime_mins < 1 ) + return + switch(playtime_mins) + if(0 to 600) // starting + new_human.wear_id.paygrade = "WO" + if(601 to 3000) // 10 hrs + new_human.wear_id.paygrade = "CWO" + if(3001 to 6000) // 50 hrs + new_human.wear_id.paygrade = "O1" + if(6001 to INFINITY) // 100 hrs + new_human.wear_id.paygrade = "O2" + +/datum/job/terragov/command/transportofficer/radio_help_message(mob/M) + . = ..() + to_chat(M, {"Your job is to support marines mobile dropship support with the Tadpole. +You are to ensure the Tadpole's survival and to transport marines around, acting as a mobile bunker. In the case of it's death, you may perform the role of Combat Engineer. +"}) + +/datum/outfit/job/command/transportofficer + name = TRANSPORT_OFFICER + jobtype = /datum/job/terragov/command/transportofficer + + id = /obj/item/card/id/silver + belt = /obj/item/storage/belt/utility/full + ears = /obj/item/radio/headset/mainship/mcom + w_uniform = /obj/item/clothing/under/marine/officer/pilot + wear_suit = /obj/item/clothing/suit/modular/xenonauten/pilot + shoes = /obj/item/clothing/shoes/marine/full + gloves = /obj/item/clothing/gloves/marine/insulated + glasses = /obj/item/clothing/glasses/welding/superior + head = /obj/item/clothing/head/helmet/marine/pilot + r_store = /obj/item/storage/pouch/construction + l_store = /obj/item/hud_tablet/transportofficer + back = /obj/item/storage/backpack/marine/engineerpack + suit_store = /obj/item/storage/holster/belt/pistol/m4a3/vp70 + +/datum/outfit/job/command/transportofficer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + H.equip_to_slot_or_hand(new /obj/item/stack/sheet/metal/large_stack, SLOT_IN_R_POUCH) + H.equip_to_slot_or_hand(new /obj/item/stack/sheet/plasteel/large_stack, SLOT_IN_R_POUCH) + H.equip_to_slot_or_hand(new /obj/item/stack/sandbags/large_stack, SLOT_IN_R_POUCH) + H.equip_to_slot_or_hand(new /obj/item/stack/barbed_wire/full, SLOT_IN_R_POUCH) //Pilot Officer /datum/job/terragov/command/pilot title = PILOT_OFFICER paygrade = "WO" comm_title = "PO" - total_positions = 2 + total_positions = 1 access = list(ACCESS_MARINE_BRIDGE, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT) minimal_access = list(ACCESS_MARINE_BRIDGE, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT, ACCESS_MARINE_LOGISTICS, ACCESS_MARINE_CARGO, ACCESS_MARINE_RO, ACCESS_MARINE_MEDBAY) skills_type = /datum/skills/pilot @@ -343,13 +396,14 @@ You are in charge of logistics and the overwatch system. You are also in line to /datum/job/terragov/squad/smartgunner = SMARTIE_POINTS_REGULAR, /datum/job/terragov/silicon/synthetic = SYNTH_POINTS_REGULAR, /datum/job/terragov/command/mech_pilot = MECH_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, ) html_description = {" Difficulty: Medium

You answer to the acting Command Staff

Unlock Requirement: Starting Role

Gamemode Availability: Nuclear War


- Duty: Choose between the Condor, a modular attack aircraft that provides close air support with a variety of weapons ranging from the inbuilt gatling to wing mounted rockets; or the Tadpole, a versatile dropship capable of fulfilling roles ranging from ambulance to mobile bunker. + Duty: Pilot the Condor, a modular attack aircraft that provides close air support with a variety of weapons ranging from the inbuilt gatling to wing mounted rockets. "} minimap_icon = "pilot" @@ -374,9 +428,9 @@ You are in charge of logistics and the overwatch system. You are also in line to /* RUTGMC DELETION /datum/job/terragov/command/pilot/radio_help_message(mob/M) . = ..() - to_chat(M, {"Your job is to support marines with either close air support via the Condor, or mobile dropship support with the Tadpole. -While you are in charge of all aerial crafts the Alamo does not require supervision outside of turning automatic mode on or off at crucial times, and you are expected to choose between the Condor and Tadpole. -Though you are a warrant officer, your authority is limited to the dropship and your chosen aerial craft, where you have authority over the enlisted personnel. + to_chat(M, {"Your job is to support marines with either close air support via the Condor. +You are expected to use the Condor as the Alamo is able to be ran automatically, though at some points you will be required to take control of the Alamo for the operation's success, though highly unlikey. +Though you are a warrant officer, your authority is limited to the dropship and the Condor, where you have authority over the enlisted personnel. "}) */ @@ -415,6 +469,7 @@ Though you are a warrant officer, your authority is limited to the dropship and jobworth = list( /datum/job/xenomorph = LARVA_POINTS_REGULAR, /datum/job/terragov/squad/smartgunner = SMARTIE_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, ) html_description = {" Difficulty:Very Hard

@@ -439,12 +494,16 @@ You can serve your Division in a variety of roles, so choose carefully."}) if(!playtime_mins || playtime_mins < 1 ) return switch(playtime_mins) - if(0 to 1500) //starting + if(0 to 1500) // starting new_human.wear_id.paygrade = "E3" - if(1500 to 7500) // 25 hrs + if(1501 to 6000) // 25 hrs new_human.wear_id.paygrade = "E4" - if(7501 to INFINITY) // 125 hrs + if(6001 to 18000) // 100 hrs new_human.wear_id.paygrade = "E5" + if(18001 to 60000) // 300 hrs + new_human.wear_id.paygrade = "E6" + if(60001 to INFINITY) // 1000 hrs + new_human.wear_id.paygrade = "E9A" //If you play way too much TGMC. 1000 hours. /datum/outfit/job/command/mech_pilot name = MECH_PILOT @@ -460,6 +519,146 @@ You can serve your Division in a variety of roles, so choose carefully."}) shoes = /obj/item/clothing/shoes/marine/full gloves = /obj/item/clothing/gloves/marine +//tank/arty driver+gunner +/datum/job/terragov/command/assault_crewman + title = ASSAULT_CREWMAN + req_admin_notify = TRUE + paygrade = "E3" + comm_title = "AC" + total_positions = 0 + skills_type = /datum/skills/assault_crewman + access = list(ACCESS_MARINE_WO, ACCESS_MARINE_PREP, ACCESS_MARINE_ARMORED, ACCESS_CIVILIAN_PUBLIC) + minimal_access = list(ACCESS_MARINE_WO, ACCESS_MARINE_PREP, ACCESS_MARINE_ARMORED, ACCESS_CIVILIAN_PUBLIC, ACCESS_MARINE_BRIDGE, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_LOGISTICS, ACCESS_MARINE_CARGO) + display_order = JOB_DISPLAY_ORDER_MECH_PILOT + outfit = /datum/outfit/job/command/assault_crewman + exp_requirements = XP_REQ_EXPERT + exp_type = EXP_TYPE_REGULAR_ALL + job_flags = JOB_FLAG_LATEJOINABLE|JOB_FLAG_ROUNDSTARTJOINABLE|JOB_FLAG_ALLOWS_PREFS_GEAR|JOB_FLAG_PROVIDES_BANK_ACCOUNT|JOB_FLAG_ADDTOMANIFEST|JOB_FLAG_PROVIDES_SQUAD_HUD|JOB_FLAG_CAN_SEE_ORDERS|JOB_FLAG_ALWAYS_VISIBLE_ON_MINIMAP + job_points_needed = 999 //50 + jobworth = list( + /datum/job/xenomorph = LARVA_POINTS_REGULAR, + /datum/job/terragov/squad/smartgunner = SMARTIE_POINTS_REGULAR, + ) + html_description = {" + Difficulty:Very Hard

+ You answer to the acting Command Staff

+ Unlock Requirement: Starting Role

+ Gamemode Availability: Nuclear War


+ Duty: Provide heavy fire support + "} + minimap_icon = "assault_crew" + +/datum/job/terragov/command/assault_crewman/add_job_points(amount) + . = ..() + if(total_positions % 2) + add_job_positions(1) //always 2 there are, a master and an apprentice + +/datum/job/terragov/command/assault_crewman/radio_help_message(mob/M) + . = ..() + to_chat(M, {"You are an Assault Crewman. You operate the TGMC's armored assault vehicles along with your partner, and in some cases a \"willing\" loader. Make sure that you work as a team to advance the front!"}) + +/datum/job/terragov/command/assault_crewman/after_spawn(mob/living/carbon/new_mob, mob/user, latejoin = FALSE) + . = ..() + if(!ishuman(new_mob)) + return + var/mob/living/carbon/human/new_human = new_mob + var/playtime_mins = user?.client?.get_exp(title) + if(!playtime_mins || playtime_mins < 1 ) + return + switch(playtime_mins) + if(0 to 1500) // starting + new_human.wear_id.paygrade = "E3" + if(1501 to 6000) // 25 hrs + new_human.wear_id.paygrade = "E4" + if(6001 to 18000) // 100 hrs + new_human.wear_id.paygrade = "E5" + if(18001 to 60000) // 300 hrs + new_human.wear_id.paygrade = "E6" + if(60001 to INFINITY) // 1000 hrs + new_human.wear_id.paygrade = "E9A" //If you play way too much TGMC. 1000 hours. + +/datum/outfit/job/command/assault_crewman + name = ASSAULT_CREWMAN + jobtype = /datum/job/terragov/command/assault_crewman + + id = /obj/item/card/id/dogtag + belt = /obj/item/storage/belt/utility/full + glasses = /obj/item/clothing/glasses/welding + ears = /obj/item/radio/headset/mainship/mcom + w_uniform = /obj/item/clothing/under/marine/officer/assault_crewman + wear_suit = /obj/item/clothing/suit/storage/marine/assault_crewman + head = /obj/item/clothing/head/helmet/marine/assault_crewman + shoes = /obj/item/clothing/shoes/marine/full + gloves = /obj/item/clothing/gloves/marine + + +//apc/jeep driver +/datum/job/terragov/command/transport_crewman + title = TRANSPORT_CREWMAN + req_admin_notify = TRUE + paygrade = "E3" + comm_title = "TC" + total_positions = 0 + skills_type = /datum/skills/transport_crewman + access = list(ACCESS_MARINE_WO, ACCESS_MARINE_PREP, ACCESS_MARINE_ARMORED, ACCESS_CIVILIAN_PUBLIC) + minimal_access = list(ACCESS_MARINE_WO, ACCESS_MARINE_PREP, ACCESS_MARINE_ARMORED, ACCESS_CIVILIAN_PUBLIC, ACCESS_MARINE_BRIDGE, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_LOGISTICS, ACCESS_MARINE_CARGO) + display_order = JOB_DISPLAY_ORDER_MECH_PILOT + outfit = /datum/outfit/job/command/transport_crewman + exp_requirements = XP_REQ_EXPERT + exp_type = EXP_TYPE_REGULAR_ALL + job_flags = JOB_FLAG_LATEJOINABLE|JOB_FLAG_ROUNDSTARTJOINABLE|JOB_FLAG_ALLOWS_PREFS_GEAR|JOB_FLAG_PROVIDES_BANK_ACCOUNT|JOB_FLAG_ADDTOMANIFEST|JOB_FLAG_PROVIDES_SQUAD_HUD|JOB_FLAG_CAN_SEE_ORDERS|JOB_FLAG_ALWAYS_VISIBLE_ON_MINIMAP + job_points_needed = 40 + jobworth = list( + /datum/job/xenomorph = LARVA_POINTS_REGULAR, + /datum/job/terragov/squad/smartgunner = SMARTIE_POINTS_REGULAR, + ) + html_description = {" + Difficulty:Very Hard

+ You answer to the acting Command Staff

+ Unlock Requirement: Starting Role

+ Gamemode Availability: Nuclear War


+ Duty: Transport and support the frontline troops + "} + minimap_icon = "transport_crew" + +/datum/job/terragov/command/transport_crewman/radio_help_message(mob/M) + . = ..() + to_chat(M, {"You are a Transport Crewman. You operate the TGMC's transport vehciles to ensure that marines and equipment gets to the front in a timely and safe manner."}) + +/datum/job/terragov/command/transport_crewman/after_spawn(mob/living/carbon/new_mob, mob/user, latejoin = FALSE) + . = ..() + if(!ishuman(new_mob)) + return + var/mob/living/carbon/human/new_human = new_mob + var/playtime_mins = user?.client?.get_exp(title) + if(!playtime_mins || playtime_mins < 1 ) + return + switch(playtime_mins) + if(0 to 1500) // starting + new_human.wear_id.paygrade = "E3" + if(1501 to 6000) // 25 hrs + new_human.wear_id.paygrade = "E4" + if(6001 to 18000) // 100 hrs + new_human.wear_id.paygrade = "E5" + if(18001 to 60000) // 300 hrs + new_human.wear_id.paygrade = "E6" + if(60001 to INFINITY) // 1000 hrs + new_human.wear_id.paygrade = "E9A" //If you play way too much TGMC. 1000 hours. + +/datum/outfit/job/command/transport_crewman + name = TRANSPORT_CREWMAN + jobtype = /datum/job/terragov/command/transport_crewman + + id = /obj/item/card/id/dogtag + belt = /obj/item/storage/belt/utility/full + glasses = /obj/item/clothing/glasses/welding + ears = /obj/item/radio/headset/mainship/mcom + w_uniform = /obj/item/clothing/under/marine/officer/transport_crewman + wear_suit = /obj/item/clothing/suit/storage/marine/transport_crewman + head = /obj/item/clothing/head/helmet/marine/transport_crewman + shoes = /obj/item/clothing/shoes/marine/full + gloves = /obj/item/clothing/gloves/marine + /datum/job/terragov/engineering job_category = JOB_CAT_ENGINEERING selection_color = "#fff5cc" @@ -487,6 +686,7 @@ You can serve your Division in a variety of roles, so choose carefully."}) /datum/job/terragov/squad/smartgunner = SMARTIE_POINTS_REGULAR, /datum/job/terragov/silicon/synthetic = SYNTH_POINTS_REGULAR, /datum/job/terragov/command/mech_pilot = MECH_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, ) html_description = {" Difficulty: Hard

@@ -561,6 +761,7 @@ You are also next in the chain of command, should the bridge crew fall in the li /datum/job/terragov/squad/smartgunner = SMARTIE_POINTS_REGULAR, /datum/job/terragov/silicon/synthetic = SYNTH_POINTS_REGULAR, /datum/job/terragov/command/mech_pilot = MECH_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, ) html_description = {" Difficulty: Medium

@@ -639,6 +840,7 @@ requisitions line and later on to be ready to send supplies for marines who are /datum/job/terragov/squad/smartgunner = SMARTIE_POINTS_REGULAR, /datum/job/terragov/silicon/synthetic = SYNTH_POINTS_REGULAR, /datum/job/terragov/command/mech_pilot = MECH_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, ) html_description = {" Difficulty: Medium

@@ -690,6 +892,10 @@ A happy ship is a well-functioning ship."}) head = /obj/item/clothing/head/tgmccap/req r_store = /obj/item/storage/pouch/general/large +/datum/outfit/job/requisitions/officer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + H.equip_to_slot_or_hand(new /obj/item/supplytablet, SLOT_IN_R_POUCH) + /datum/job/terragov/medical job_category = JOB_CAT_MEDICAL selection_color = "#BBFFBB" @@ -722,6 +928,7 @@ A happy ship is a well-functioning ship."}) /datum/job/terragov/squad/smartgunner = SMARTIE_POINTS_REGULAR, /datum/job/terragov/silicon/synthetic = SYNTH_POINTS_REGULAR, /datum/job/terragov/command/mech_pilot = MECH_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, ) html_description = {" Difficulty: Hard

@@ -806,6 +1013,7 @@ Make sure that the doctors and nurses are doing their jobs and keeping the marin /datum/job/terragov/squad/smartgunner = SMARTIE_POINTS_REGULAR, /datum/job/terragov/silicon/synthetic = SYNTH_POINTS_REGULAR, /datum/job/terragov/command/mech_pilot = MECH_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, ) html_description = {" Difficulty: Medium

@@ -892,6 +1100,7 @@ You are also an expert when it comes to medication and treatment. If you do not /datum/job/terragov/squad/smartgunner = SMARTIE_POINTS_REGULAR, /datum/job/terragov/silicon/synthetic = SYNTH_POINTS_REGULAR, /datum/job/terragov/command/mech_pilot = MECH_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, ) html_description = {" Difficulty: Medium

@@ -978,6 +1187,7 @@ It is also recommended that you gear up like a regular marine, or your 'internsh /datum/job/terragov/squad/smartgunner = SMARTIE_POINTS_REGULAR, /datum/job/terragov/silicon/synthetic = SYNTH_POINTS_REGULAR, /datum/job/terragov/command/mech_pilot = MECH_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, ) html_description = {" Difficulty: Hard (varies)

@@ -1052,6 +1262,7 @@ Use your office fax machine to communicate with corporate headquarters or to acq /datum/job/xenomorph = LARVA_POINTS_SHIPSIDE_STRONG, /datum/job/terragov/squad/smartgunner = SMARTIE_POINTS_REGULAR, /datum/job/terragov/command/mech_pilot = MECH_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, ) html_description = {" Difficulty: Soul Crushing

@@ -1132,6 +1343,7 @@ In addition, being a Synthetic gives you knowledge in every field and specializa /datum/job/terragov/squad/smartgunner = SMARTIE_POINTS_REGULAR, /datum/job/terragov/silicon/synthetic = SYNTH_POINTS_REGULAR, /datum/job/terragov/command/mech_pilot = MECH_POINTS_REGULAR, + /datum/job/terragov/command/assault_crewman = ARMORED_VEHICLE_POINTS_REGULAR, ) html_description = {" Difficulty: Easy

diff --git a/code/datums/jobs/job/sons_of_mars_shipside.dm b/code/datums/jobs/job/sons_of_mars_shipside.dm index e0145fab067a7..f20430dcb229e 100644 --- a/code/datums/jobs/job/sons_of_mars_shipside.dm +++ b/code/datums/jobs/job/sons_of_mars_shipside.dm @@ -49,12 +49,6 @@ Godspeed, commander! And remember, you are not above the law."}) jobtype = /datum/job/som/command/commander id = /obj/item/card/id/gold - belt = /obj/item/storage/holster/belt/pistol/m4a3/som/fancy/fieldcommander - ears = /obj/item/radio/headset/mainship/som/command - w_uniform = /obj/item/clothing/under/som/officer/senior - shoes = /obj/item/clothing/shoes/marinechief/som - gloves = /obj/item/clothing/gloves/marine/som/officer - r_store = /obj/item/storage/pouch/general/large/som /datum/outfit/job/som/command/commander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) . = ..() @@ -135,43 +129,6 @@ Make the SOM proud!"}) jobtype = /datum/job/som/command/fieldcommander id = /obj/item/card/id/dogtag/fc - belt = /obj/item/storage/holster/belt/pistol/m4a3/som/fancy/fieldcommander - ears = /obj/item/radio/headset/mainship/som/command - w_uniform = /obj/item/clothing/under/som/officer/webbing - wear_suit = /obj/item/clothing/suit/modular/som/heavy/leader/officer - shoes = /obj/item/clothing/shoes/marine/som/knife - gloves = /obj/item/clothing/gloves/marine/som/officer - mask = /obj/item/clothing/mask/gas - head = /obj/item/clothing/head/modular/som/leader/officer - glasses = /obj/item/clothing/glasses/hud/health - r_store = /obj/item/storage/pouch/firstaid/som/combat_patrol_leader - l_store = /obj/item/storage/pouch/grenade/som/combat_patrol - suit_store = /obj/item/weapon/twohanded/fireaxe/som - back = /obj/item/storage/backpack/satchel/som - -/datum/outfit/job/som/command/fieldcommander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - . = ..() - H.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/russian_red, SLOT_IN_HEAD) - H.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_HEAD) - - H.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/gauze, SLOT_IN_SUIT) - H.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/ointment, SLOT_IN_SUIT) - H.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/isotonic, SLOT_IN_SUIT) - H.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclot, SLOT_IN_SUIT) - H.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/dylovene, SLOT_IN_SUIT) - - H.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) - H.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) - H.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) - H.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) - H.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) - H.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_BACKPACK) - - H.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) - H.equip_to_slot_or_del(new /obj/item/explosive/grenade/som, SLOT_IN_ACCESSORY) - H.equip_to_slot_or_del(new /obj/item/storage/box/MRE/som, SLOT_IN_ACCESSORY) - H.equip_to_slot_or_del(new /obj/item/cell/lasgun/volkite/small, SLOT_IN_ACCESSORY) - H.equip_to_slot_or_del(new /obj/item/binoculars/fire_support/campaign/som, SLOT_IN_ACCESSORY) //Staff Officer /datum/job/som/command/staffofficer @@ -227,13 +184,6 @@ You are in charge of logistics and the overwatch system. You are also in line to jobtype = /datum/job/som/command/staffofficer id = /obj/item/card/id/silver - belt = /obj/item/storage/holster/belt/pistol/m4a3/som/serpenta - ears = /obj/item/radio/headset/mainship/som/command - w_uniform = /obj/item/clothing/under/som/officer - shoes = /obj/item/clothing/shoes/marinechief/som - gloves = /obj/item/clothing/gloves/marine/som/officer - r_store = /obj/item/storage/pouch/general/large/som - l_store = /obj/item/binoculars/fire_support/campaign/som //Pilot Officer /datum/job/som/command/pilot diff --git a/code/datums/jobs/job/special_forces.dm b/code/datums/jobs/job/special_forces.dm index aeb95a49372ca..30ceb9899ad24 100644 --- a/code/datums/jobs/job/special_forces.dm +++ b/code/datums/jobs/job/special_forces.dm @@ -19,10 +19,10 @@ id = /obj/item/card/id/silver belt = /obj/item/storage/belt/marine ears = /obj/item/radio/headset/distress/dutch - mask = /obj/item/clothing/mask/gas/swat - w_uniform = /obj/item/clothing/under/syndicate/tacticool/holster + mask = /obj/item/clothing/mask/gas/specops + w_uniform = /obj/item/clothing/under/marine/specops shoes = /obj/item/clothing/shoes/combat - wear_suit = /obj/item/clothing/suit/armor/bulletproof + wear_suit = /obj/item/clothing/suit/storage/marine/specops gloves = /obj/item/clothing/gloves/marine/veteran/pmc head = /obj/item/clothing/head/modular/m10x suit_store = /obj/item/weapon/gun/smg/m25/elite/suppressed @@ -78,10 +78,10 @@ id = /obj/item/card/id/silver belt = /obj/item/storage/belt/marine ears = /obj/item/radio/headset/distress/dutch - mask = /obj/item/clothing/mask/gas/swat - w_uniform = /obj/item/clothing/under/syndicate/tacticool/holster + mask = /obj/item/clothing/mask/gas/specops + w_uniform = /obj/item/clothing/under/marine/specops shoes = /obj/item/clothing/shoes/combat - wear_suit = /obj/item/clothing/suit/armor/bulletproof + wear_suit = /obj/item/clothing/suit/storage/marine/specops/support gloves = /obj/item/clothing/gloves/marine/veteran/pmc head = /obj/item/clothing/head/modular/m10x suit_store = /obj/item/weapon/gun/smg/m25/elite/suppressed/breacher @@ -133,10 +133,10 @@ id = /obj/item/card/id/silver belt = /obj/item/storage/belt/marine ears = /obj/item/radio/headset/distress/dutch - mask = /obj/item/clothing/mask/gas/swat - w_uniform = /obj/item/clothing/under/syndicate/tacticool/holster + mask = /obj/item/clothing/mask/gas/specops + w_uniform = /obj/item/clothing/under/marine/specops shoes = /obj/item/clothing/shoes/combat - wear_suit = /obj/item/clothing/suit/armor/bulletproof + wear_suit = /obj/item/clothing/suit/storage/marine/specops/support gloves = /obj/item/clothing/gloves/marine/veteran/pmc head = /obj/item/clothing/head/modular/m10x/welding suit_store = /obj/item/weapon/gun/smg/m25/elite/suppressed @@ -179,6 +179,51 @@ H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_R_POUCH) H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_R_POUCH) +//Special forces Medic +/datum/job/special_forces/medic + title = "Special Response Force Medic" + outfit = /datum/outfit/job/special_forces/medic + skills_type = /datum/skills/combat_medic/special_forces +/datum/outfit/job/special_forces/medic + name = "Special Response Force Medic" + jobtype = /datum/job/special_forces/medic + + glasses = /obj/item/clothing/glasses/night + id = /obj/item/card/id/silver + ears = /obj/item/radio/headset/distress/dutch + w_uniform = /obj/item/clothing/under/marine/specops + belt = /obj/item/storage/belt/lifesaver/full + wear_suit = /obj/item/clothing/suit/storage/marine/specops/medic + head = /obj/item/clothing/head/modular/m10x + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/marine/veteran/pmc + glasses = /obj/item/clothing/glasses/hud/health + suit_store = /obj/item/weapon/gun/smg/m25/elite/suppressed + r_store = /obj/item/storage/pouch/medical_injectors/medic + l_store = /obj/item/storage/pouch/magazine/large + back = /obj/item/storage/backpack/lightpack + + +/datum/outfit/job/special_forces/medic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + + H.equip_to_slot_or_del(new /obj/item/clothing/glasses/mgoggles, SLOT_IN_HEAD) + + H.equip_to_slot_or_del(new /obj/item/defibrillator, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/healthanalyzer, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/roller, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/tweezers, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/tool/crowbar, SLOT_IN_BACKPACK) + + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/g22, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/g22, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/g22, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/g22(H), SLOT_IN_ACCESSORY) + + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/m25/ap, SLOT_IN_L_POUCH) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/m25/ap, SLOT_IN_L_POUCH) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/m25/ap, SLOT_IN_L_POUCH) + //Special forces Leader /datum/job/special_forces/leader title = "Special Response Force Leader" @@ -193,11 +238,11 @@ id = /obj/item/card/id/silver belt = /obj/item/storage/belt/marine ears = /obj/item/radio/headset/distress/dutch - mask = /obj/item/clothing/mask/gas/swat - w_uniform = /obj/item/clothing/under/syndicate/tacticool/holster + mask = /obj/item/clothing/mask/gas/specops + w_uniform = /obj/item/clothing/under/marine/specops glasses = /obj/item/clothing/glasses/night shoes = /obj/item/clothing/shoes/combat - wear_suit = /obj/item/clothing/suit/armor/bulletproof + wear_suit = /obj/item/clothing/suit/storage/marine/specops/leader gloves = /obj/item/clothing/gloves/marine/veteran/pmc head = /obj/item/clothing/head/beret/sec suit_store = /obj/item/weapon/gun/rifle/m16/spec_op diff --git a/code/datums/jobs/job/terragov.dm b/code/datums/jobs/job/terragov.dm index 57b1e7326d4cd..787a27bb8cda2 100644 --- a/code/datums/jobs/job/terragov.dm +++ b/code/datums/jobs/job/terragov.dm @@ -16,7 +16,7 @@ /datum/job/terragov/return_spawn_type(datum/preferences/prefs) switch(prefs?.species) if("Combat Robot") - if(!(SSticker.mode?.flags_round_type & MODE_HUMAN_ONLY)) + if(!(SSticker.mode?.round_type_flags & MODE_HUMAN_ONLY)) switch(prefs?.robot_type) if("Basic") return /mob/living/carbon/human/species/robot diff --git a/code/datums/jobs/job/xenomorph.dm b/code/datums/jobs/job/xenomorph.dm index fc911cd953246..017b58ae89389 100644 --- a/code/datums/jobs/job/xenomorph.dm +++ b/code/datums/jobs/job/xenomorph.dm @@ -41,7 +41,7 @@ return TRUE /datum/job/xenomorph/add_job_positions(amount) - if(!(SSticker.mode.flags_round_type & MODE_XENO_SPAWN_PROTECT)) + if(!(SSticker.mode.round_type_flags & MODE_XENO_SPAWN_PROTECT)) if(free_xeno_at_start > 0) free_xeno_at_start-- return diff --git a/code/datums/jobs/squads.dm b/code/datums/jobs/squads.dm index dec013864a24b..b61225e7a5e9f 100644 --- a/code/datums/jobs/squads.dm +++ b/code/datums/jobs/squads.dm @@ -298,7 +298,7 @@ R.use_command = FALSE var/obj/item/card/id/ID = squad_leader.get_idcard() if(istype(ID)) - ID.access -= list(ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP) + ID.access -= list(ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_TADPOLE) to_chat(squad_leader, "You're no longer the Squad Leader for [src]!") var/mob/living/carbon/human/H = squad_leader @@ -323,7 +323,7 @@ squad_leader.comm_title = "aSL" var/obj/item/card/id/ID = squad_leader.get_idcard() if(istype(ID)) - ID.access += list(ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP) + ID.access += list(ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_TADPOLE) if(istype(squad_leader.wear_ear, /obj/item/radio/headset/mainship/marine)) var/obj/item/radio/headset/mainship/marine/R = squad_leader.wear_ear @@ -421,8 +421,8 @@ GLOBAL_LIST_EMPTY_TYPED(custom_squad_radio_freqs, /datum/squad) var/freq = FREQ_CUSTOM_SQUAD_MIN + 2 * length(GLOB.custom_squad_radio_freqs) if(freq > FREQ_CUSTOM_SQUAD_MAX) return - - var/new_id = lowertext(squad_name) + "_squad" + var/lowertext_name = lowertext(squad_name) + var/new_id = lowertext_name + "_squad" if(SSjob.squads[new_id]) return @@ -436,6 +436,21 @@ GLOBAL_LIST_EMPTY_TYPED(custom_squad_radio_freqs, /datum/squad) LAZYADDASSOCSIMPLE(GLOB.radiochannels, "[radio_channel_name]", freq) LAZYADDASSOCSIMPLE(GLOB.reverseradiochannels, "[freq]", radio_channel_name) new_squad.faction = squad_faction + var/key_prefix = lowertext_name[1] + if(GLOB.department_radio_keys[key_prefix]) + for(var/letter in splittext(lowertext_name, "")) + if(!GLOB.department_radio_keys[letter]) + key_prefix = letter + break + //okay... mustve been a very short name, randomly pick things from the alphabet now + for(var/letter in shuffle(GLOB.alphabet)) + if(!GLOB.department_radio_keys[letter]) + key_prefix = letter + break + key_prefix = "ERROR" + GLOB.department_radio_keys[key_prefix] = radio_channel_name + GLOB.channel_tokens[radio_channel_name] = ":[key_prefix]" + if(new_squad.faction == FACTION_TERRAGOV) var/list/terragov_server_freqs = GLOB.telecomms_freq_listening_list[/obj/machinery/telecomms/server/presets/alpha] var/list/terragov_bus_freqs = GLOB.telecomms_freq_listening_list[/obj/machinery/telecomms/bus/preset_three] diff --git a/code/datums/keybinding/admin.dm b/code/datums/keybinding/admin.dm index 64e05d7f453ec..e44901b091bed 100644 --- a/code/datums/keybinding/admin.dm +++ b/code/datums/keybinding/admin.dm @@ -44,3 +44,17 @@ return user.get_togglebuildmode() return TRUE + +/datum/keybinding/admin/view_tags + hotkey_keys = list("F9") + name = "view_tags" + full_name = "View Tags" + description = "Open the View-Tags menu" + keybind_signal = COMSIG_KB_ADMIN_VIEWTAGS_DOWN + +/datum/keybinding/admin/view_tags/down(client/user) + . = ..() + if(.) + return + user.holder?.display_tags() + return TRUE diff --git a/code/datums/keybinding/carbon.dm b/code/datums/keybinding/carbon.dm index a7252c331e3b5..474aebe916595 100644 --- a/code/datums/keybinding/carbon.dm +++ b/code/datums/keybinding/carbon.dm @@ -55,7 +55,7 @@ if(.) return var/mob/living/carbon/C = user.mob - C.lay_down() + C.toggle_resting() return TRUE /datum/keybinding/carbon/select_help_intent @@ -116,32 +116,3 @@ return user.mob?.a_intent_change(INTENT_HARM) return TRUE - -/datum/keybinding/carbon/specialclick - hotkey_keys = list("Ctrl") - name = "specialclick" - full_name = "Special Click" - description = "Hold this hotkey_keys and click to trigger special object interactions." - keybind_signal = COMSIG_KB_CARBON_SPECIALCLICK_DOWN - - -/datum/keybinding/carbon/specialclick/down(client/user) - . = ..() - if(.) - return - RegisterSignals(user.mob, list(COMSIG_MOB_CLICKON), PROC_REF(specialclicky)) - RegisterSignals(user.mob, list(COMSIG_MOB_MOUSEDOWN, COMSIG_MOB_MOUSEUP), TYPE_PROC_REF(/datum/keybinding, intercept_mouse_special)) - return TRUE - - -/datum/keybinding/carbon/specialclick/up(client/user) - UnregisterSignal(user.mob, list(COMSIG_MOB_MOUSEDOWN, COMSIG_MOB_MOUSEUP, COMSIG_MOB_CLICKON)) - return TRUE - -/datum/keybinding/carbon/specialclick/proc/specialclicky(datum/source, atom/A, params) - SIGNAL_HANDLER - var/mob/living/carbon/user = source - if(!user.client || !(user.client.eye == user || user.client.eye == user.loc)) - UnregisterSignal(user, (COMSIG_MOB_CLICKON)) - return - A.specialclick(user) diff --git a/code/datums/keybinding/human.dm b/code/datums/keybinding/human.dm index e2e7d0bfe02a1..2ec9c4f109bec 100644 --- a/code/datums/keybinding/human.dm +++ b/code/datums/keybinding/human.dm @@ -36,7 +36,7 @@ quick_equip_slot = 5 /datum/keybinding/human/unique_action - hotkey_keys = list("Space") + hotkey_keys = list("C") name = "unique_action" full_name = "Perform unique action" keybind_signal = COMSIG_KB_UNIQUEACTION diff --git a/code/datums/keybinding/item_toggles.dm b/code/datums/keybinding/item_toggles.dm new file mode 100644 index 0000000000000..0fbbe17c03d29 --- /dev/null +++ b/code/datums/keybinding/item_toggles.dm @@ -0,0 +1,17 @@ +/datum/keybinding/item + category = CATEGORY_ITEM + weight = WEIGHT_MOB + +/datum/keybinding/item/jetpack + name = "Jetpack" + full_name = "Toggle jetpack" + description = "Toggles your jetpack on, allowing you to fly a short distance." + keybind_signal = COMSIG_ITEM_TOGGLE_JETPACK + hotkey_keys = list("G") + +/datum/keybinding/item/blinkdrive + name = "Blink drive" + full_name = "Toggle blink drive" + description = "Toggles your blink drive on, allowing you to instantly teleport short distances." + keybind_signal = COMSIG_ITEM_TOGGLE_BLINKDRIVE + hotkey_keys = list("G") diff --git a/code/datums/keybinding/mecha.dm b/code/datums/keybinding/mecha.dm index 566b70d8ca4f7..6f4d765dd1357 100644 --- a/code/datums/keybinding/mecha.dm +++ b/code/datums/keybinding/mecha.dm @@ -50,3 +50,16 @@ description = "Bombard an area with rockets" keybind_signal = COMSIG_MECHABILITY_STRIKE hotkey_keys = list("F") + +/datum/keybinding/mecha/mech_reload_weapons + name = "mech_reload_weapons" + full_name = "Mech Reload Weapons" + description = "Reload any equipped weapons" + keybind_signal = COMSIG_MECHABILITY_RELOAD + hotkey_keys = list("R") +/datum/keybinding/mecha/mech_toggle_actuators + name = "mech_toggle_actuators" + full_name = "Mecha Toggle Actuators" + description = "Toggle leg actuator overload for your mecha" + keybind_signal = COMSIG_MECHABILITY_TOGGLE_ACTUATORS + hotkey_keys = list("X") diff --git a/code/datums/keybinding/mob.dm b/code/datums/keybinding/mob.dm index d5719bfc50267..282b398ef387a 100644 --- a/code/datums/keybinding/mob.dm +++ b/code/datums/keybinding/mob.dm @@ -176,35 +176,6 @@ return TRUE */ - -/datum/keybinding/mob/examine - hotkey_keys = list("Shift") - name = "examine_kb" - full_name = "Examine" - description = "Hold this hotkey_keys and click to examine things." - keybind_signal = COMSIG_KB_MOB_EXAMINE_DOWN - - -/datum/keybinding/mob/examine/down(client/user) - . = ..() - if(.) - return - RegisterSignals(user.mob, list(COMSIG_MOB_CLICKON, COMSIG_OBSERVER_CLICKON), PROC_REF(examinate)) - RegisterSignals(user.mob, list(COMSIG_MOB_MOUSEDOWN, COMSIG_MOB_MOUSEUP), TYPE_PROC_REF(/datum/keybinding, intercept_mouse_special)) - return TRUE - - -/datum/keybinding/mob/examine/up(client/user) - UnregisterSignal(user.mob, list(COMSIG_MOB_MOUSEDOWN, COMSIG_MOB_MOUSEUP, COMSIG_MOB_CLICKON, COMSIG_OBSERVER_CLICKON)) - return TRUE - - -/datum/keybinding/mob/examine/proc/examinate(datum/source, atom/A, params) - SIGNAL_HANDLER - var/mob/user = source - user.examinate(A) - return COMSIG_MOB_CLICK_HANDLED - /datum/keybinding/mob/toggle_move_intent hotkey_keys = list("5") name = "toggle_move_intent" @@ -343,3 +314,32 @@ return user.mob.do_self_harm = !user.mob.do_self_harm user.mob.balloon_alert(user.mob, "You can [user.mob.do_self_harm ? "now" : "no longer"] hit yourself") + +/datum/keybinding/mob/interactive_emote + name = "interactive_emote" + full_name = "Do interactive emote" + description = "Perform an interactive emote with another player." + keybind_signal = COMSIG_KB_INTERACTIVE_EMOTE + +/datum/keybinding/mob/interactive_emote/down(client/user) + . = ..() + if(. || !isliving(user.mob) || CHECK_BITFIELD(user.mob.status_flags, INCORPOREAL) || !user.mob.can_interact(user.mob)) + return + + var/list/adjacent_mobs = cheap_get_living_near(user.mob, 1) + adjacent_mobs.Remove(user.mob) //Get rid of self + for(var/mob/M AS in adjacent_mobs) + if(!M.client) + adjacent_mobs.Remove(M) //Get rid of non-players + + if(!length(adjacent_mobs)) + return + + if(length(adjacent_mobs) == 1) + user.mob.interaction_emote(adjacent_mobs[1]) + return + + var/mob/target = tgui_input_list(user, "Who do you want to interact with?", "Select a target", adjacent_mobs) + if(!target || !user.mob.Adjacent(target)) //In case the target moved away while selecting them + return + user.mob.interaction_emote(target) diff --git a/code/datums/keybinding/sectoid.dm b/code/datums/keybinding/sectoid.dm new file mode 100644 index 0000000000000..f3a4195e651ef --- /dev/null +++ b/code/datums/keybinding/sectoid.dm @@ -0,0 +1,52 @@ +/datum/keybinding/sectoid + category = CATEGORY_PSIONIC + weight = WEIGHT_MOB + +/datum/keybinding/sectoid/mindmeld + name = "Mindmeld" + full_name = "Sectoid: Mindmeld" + description = "We merge minds with another of our kind, strengthening us both." + keybind_signal = COMSIG_ABILITY_MINDMELD + hotkey_keys = list("U") + +/datum/keybinding/sectoid/mindfray + name = "Mindfray" + full_name = "Sectoid: Mindfray" + description = "We attack the mind of our foe, greatly weakening them for a time." + keybind_signal = COMSIG_ABILITY_MINDFRAY + hotkey_keys = list("Q") + +/datum/keybinding/sectoid/reknit_form + name = "Reknit form" + full_name = "Sectoid: Reknit form" + description = "Flesh and bone runs like water at our will, healing horrendous damage with the power of our mind." + keybind_signal = COMSIG_ABILITY_REKNIT_FORM + hotkey_keys = list("F") + +/datum/keybinding/sectoid/fuse + name = "Fuse" + full_name = "Sectoid: Fuse" + description = "We reach out with our mind to trigger an explosive device." + keybind_signal = COMSIG_ABILITY_FUSE + hotkey_keys = list("R") + +/datum/keybinding/sectoid/stasis + name = "Stasis" + full_name = "Sectoid: Stasis" + description = "We surround a living thing with a powerful psionic field, temporarily disabling them and protecting them from all harm." + keybind_signal = COMSIG_ABILITY_STASIS + hotkey_keys = list("H") + +/datum/keybinding/sectoid/telekinesis + name = "Telekinesis" + full_name = "Sectoid: Telekinesis" + description = "We manipulate things from a distance." + keybind_signal = COMSIG_ABILITY_TELEKINESIS + hotkey_keys = list("G") + +/datum/keybinding/sectoid/reanimate + name = "Reanimate" + full_name = "Sectoid: Reanimate" + description = "With our psionic strength we turn the dead into our puppet, or revive a fallen ally." + keybind_signal = COMSIG_ABILITY_REANIMATE + hotkey_keys = list("B") diff --git a/code/datums/keybinding/weapons.dm b/code/datums/keybinding/weapons.dm new file mode 100644 index 0000000000000..5a5077bf42e57 --- /dev/null +++ b/code/datums/keybinding/weapons.dm @@ -0,0 +1,17 @@ +/datum/keybinding/weapon + category = CATEGORY_WEAPON + weight = WEIGHT_MOB + +/datum/keybinding/weapon/axe_sweep + name = "Axe sweep" + full_name = "Breaching axe: Axe sweep" + description = "A powerful sweeping blow that hits foes in the direction you are facing. Cannot stun." + keybind_signal = COMSIG_WEAPONABILITY_AXESWEEP + hotkey_keys = list("G") + +/datum/keybinding/weapon/sword_lunge + name = "Lunging strike" + full_name = "Sword: Lunging strike" + description = "Dash a short distance to inflict a staggering blow on an opponent. Cannot stun." + keybind_signal = COMSIG_WEAPONABILITY_SWORDLUNGE + hotkey_keys = list("G") diff --git a/code/datums/keybinding/xeno.dm b/code/datums/keybinding/xeno.dm index 249a171555408..9a2418d492bf1 100644 --- a/code/datums/keybinding/xeno.dm +++ b/code/datums/keybinding/xeno.dm @@ -47,6 +47,13 @@ keybind_signal = COMSIG_XENOABILITY_SECRETE_RESIN hotkey_keys = list("R") +/datum/keybinding/xeno/secrete_special_resin + name = "secrete_special_resin" + full name = "Secrete Special Resin" + description = "Builds whatever special resin you have selected." + keybind_signal = COMSIG_XENOABILITY_SECRETE_SPECIAL_RESIN + hotkey_keys = list("ShiftR") + /datum/keybinding/xeno/recycle name = "Recycle" full_name = "Recycle xenomorph" @@ -103,6 +110,13 @@ keybind_signal = COMSIG_XENOABILITY_XENO_SPIT hotkey_keys = list("Q") +/datum/keybinding/xeno/long_range_sight + name = "long_range_sight" + full_name = "Long Range Sight" + description = "Toggles the zoom in." + keybind_signal = COMSIG_XENOABILITY_LONG_RANGE_SIGHT + hotkey_keys = list("E") + /datum/keybinding/xeno/xenohide name = "xenohide" full_name = "Hide" @@ -225,13 +239,6 @@ keybind_signal = COMSIG_XENOABILITY_CREATE_BOMB hotkey_keys = list("F") -/datum/keybinding/xeno/root - name = "root" - full_name = "Boiler: Root in place" - description = "Begin rooting in place." - keybind_signal = COMSIG_XENOABILITY_ROOT - hotkey_keys = list("C") - /datum/keybinding/xeno/bombard name = "bombard" full_name = "Boiler: Bombard" @@ -251,7 +258,7 @@ full_name = "Bull: Headbutt Charge" description = "A charge that tosses the victim forward." keybind_signal = COMSIG_XENOABILITY_BULLHEADBUTT - hotkey_keys = list("E") + hotkey_keys = list("F") /datum/keybinding/xeno/gore_charge name = "gore_charge" @@ -481,11 +488,11 @@ keybind_signal = COMSIG_XENOABILITY_TRANSFUSION hotkey_keys = list("H") -/datum/keybinding/xeno/rejuvenate - name = "rejuvenate" - full_name = "Gorger: Rejuvenate" - description = "Drains blood continuosly, slows you down and reduces damage taken, while restoring some health over time. Cancel by activating again." - keybind_signal = COMSIG_XENOABILITY_REJUVENATE +/datum/keybinding/xeno/oppose + name = "oppose" + full_name = "Gorger: Oppose" + description = "Violently suffuse the nearby ground with stored blood, staggering nearby marines and healing nearby xenomorphs." + keybind_signal = COMSIG_XENOABILITY_OPPOSE hotkey_keys = list("R") /datum/keybinding/xeno/psychic_link diff --git a/code/datums/loadout/item_representation/armor_representation.dm b/code/datums/loadout/item_representation/armor_representation.dm index 5eb07acab1a95..6a0440b01a951 100644 --- a/code/datums/loadout/item_representation/armor_representation.dm +++ b/code/datums/loadout/item_representation/armor_representation.dm @@ -173,6 +173,8 @@ if(!.) return var/obj/item/armor_module/module = . + if(colors && CHECK_BITFIELD(module.attach_features_flags, ATTACH_GREYSCALE_PARENT_COPY)) + module.set_greyscale_colors(colors) for(var/datum/item_representation/armor_module/armor_attachement AS in attachments) armor_attachement.install_on_armor(seller, module, user) @@ -182,7 +184,7 @@ //if(!item_type) // return var/obj/item/armor_module/module_type = item_type - if(!CHECK_BITFIELD(initial(module_type.flags_attach_features), ATTACH_REMOVABLE)) + if(!CHECK_BITFIELD(initial(module_type.attach_features_flags), ATTACH_REMOVABLE)) bypass_vendor_check = TRUE var/obj/item/armor_module/module = instantiate_object(seller, null, user) if(!module) diff --git a/code/datums/loadout/loadout.dm b/code/datums/loadout/loadout.dm index a5954cd48c7dd..89f3570107461 100644 --- a/code/datums/loadout/loadout.dm +++ b/code/datums/loadout/loadout.dm @@ -21,40 +21,40 @@ ///Check if the item can go to the specified slot /datum/loadout/proc/can_equip_to_slot(item_type, slot) var/obj/item/item = item_type - var/flags_equip_slot = initial(item.flags_equip_slot) + var/equip_slot_flags = initial(item.equip_slot_flags) var/w_class = initial(item.w_class) switch(slot) if(slot_wear_mask_str) - return (flags_equip_slot & ITEM_SLOT_MASK) + return (equip_slot_flags & ITEM_SLOT_MASK) if(slot_back_str) - return (flags_equip_slot & ITEM_SLOT_BACK) + return (equip_slot_flags & ITEM_SLOT_BACK) if(slot_wear_suit_str) - return (flags_equip_slot & ITEM_SLOT_OCLOTHING) + return (equip_slot_flags & ITEM_SLOT_OCLOTHING) if(slot_gloves_str) - return (flags_equip_slot & ITEM_SLOT_GLOVES) + return (equip_slot_flags & ITEM_SLOT_GLOVES) if(slot_shoes_str) - return (flags_equip_slot & ITEM_SLOT_FEET) + return (equip_slot_flags & ITEM_SLOT_FEET) if(slot_belt_str) - if(!(flags_equip_slot & ITEM_SLOT_BELT)) + if(!(equip_slot_flags & ITEM_SLOT_BELT)) return FALSE if(!item_list[SLOT_W_UNIFORM]) return FALSE return TRUE if(slot_glasses_str) - return (flags_equip_slot & ITEM_SLOT_EYES) + return (equip_slot_flags & ITEM_SLOT_EYES) if(slot_head_str) - return (flags_equip_slot & ITEM_SLOT_HEAD) + return (equip_slot_flags & ITEM_SLOT_HEAD) if(slot_w_uniform_str) - return (flags_equip_slot & ITEM_SLOT_ICLOTHING) + return (equip_slot_flags & ITEM_SLOT_ICLOTHING) if(slot_l_store_str) if(!item_list[SLOT_W_UNIFORM]) return FALSE - if(w_class <= 2 || (flags_equip_slot & ITEM_SLOT_POCKET)) + if(w_class <= 2 || (equip_slot_flags & ITEM_SLOT_POCKET)) return TRUE if(slot_r_store_str) if(!item_list[SLOT_W_UNIFORM]) return FALSE - if(w_class <= 2 || (flags_equip_slot & ITEM_SLOT_POCKET)) + if(w_class <= 2 || (equip_slot_flags & ITEM_SLOT_POCKET)) return TRUE if(slot_s_store_str) if(!item_list[SLOT_W_UNIFORM]) @@ -66,9 +66,9 @@ return TRUE return FALSE if(slot_ear_str) - return (flags_equip_slot & ITEM_SLOT_EARS) + return (equip_slot_flags & ITEM_SLOT_EARS) if(slot_wear_id_str) - return (flags_equip_slot & ITEM_SLOT_ID) + return (equip_slot_flags & ITEM_SLOT_ID) if(slot_r_hand_str) return TRUE if(slot_l_hand_str) diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm old mode 100644 new mode 100755 index 7c0838e9b4014..8de9dbe882d02 --- a/code/datums/looping_sounds/machinery_sounds.dm +++ b/code/datums/looping_sounds/machinery_sounds.dm @@ -24,6 +24,13 @@ range = 8 falloff = 1 +/datum/looping_sound/flickeringambient + mid_sounds = list('sound/effects/lightbuzzloop6.ogg' = 1) + mid_length = 5 SECONDS + volume = 50 + range = 6 + falloff = 2 + /datum/looping_sound/geiger mid_sounds = list( list('sound/effects/geiger/low1.ogg'=1, 'sound/effects/geiger/low2.ogg'=1, 'sound/effects/geiger/low3.ogg'=1, 'sound/effects/geiger/low4.ogg'=1), diff --git a/code/datums/marine_main_ship.dm b/code/datums/marine_main_ship.dm index 06749955ab862..dff77022f389c 100644 --- a/code/datums/marine_main_ship.dm +++ b/code/datums/marine_main_ship.dm @@ -14,11 +14,11 @@ GLOBAL_DATUM_INIT(marine_main_ship, /datum/marine_main_ship, new) /datum/marine_main_ship/proc/make_maint_all_access() maint_all_access = TRUE - priority_announce("The maintenance access requirement has been revoked on all airlocks.", "Attention!", sound = 'sound/misc/notice1.ogg') + priority_announce("The maintenance access requirement has been revoked on all airlocks.", "Attention!", "Shipside emergency declared.", sound = 'sound/misc/notice1.ogg', color_override = "grey") /datum/marine_main_ship/proc/revoke_maint_all_access() maint_all_access = FALSE - priority_announce("The maintenance access requirement has been readded on all maintenance airlocks.", "Attention!", sound = 'sound/misc/notice2.ogg') + priority_announce("The maintenance access requirement has been readded on all maintenance airlocks.", "Attention!", "Shipside emergency revoked.", sound = 'sound/misc/notice2.ogg', color_override = "grey") /datum/marine_main_ship/proc/set_security_level(level, announce = TRUE) switch(level) @@ -79,7 +79,7 @@ GLOBAL_DATUM_INIT(marine_main_ship, /datum/marine_main_ship, new) switch(level) if(SEC_LEVEL_GREEN) if(announce) - priority_announce("Attention: Security level lowered to GREEN - all clear.", "Priority Alert", sound = 'sound/AI/code_green.ogg') + priority_announce("Attention: Security level lowered to GREEN - all clear.", title = "Security Level Lowered", subtitle = "All Clear", sound = 'sound/AI/code_green.ogg', color_override = "green") security_level = SEC_LEVEL_GREEN for(var/obj/machinery/status_display/SD in GLOB.machines) if(is_mainship_level(SD.z)) @@ -87,10 +87,10 @@ GLOBAL_DATUM_INIT(marine_main_ship, /datum/marine_main_ship, new) if(SEC_LEVEL_BLUE) if(security_level < SEC_LEVEL_BLUE) if(announce) - priority_announce("Attention: Security level elevated to BLUE - potentially hostile activity on board.", "Priority Alert", sound = 'sound/AI/code_blue_elevated.ogg') + priority_announce("Attention: Security level elevated to BLUE - potentially hostile activity on board.", title = "Security Level Elevated", sound = 'sound/AI/code_blue_elevated.ogg') else if(announce) - priority_announce("Attention: Security level lowered to BLUE - potentially hostile activity on board.", "Priority Alert", sound = 'sound/AI/code_blue_lowered.ogg') + priority_announce("Attention: Security level lowered to BLUE - potentially hostile activity on board.", title = "Security Level Lowered", sound = 'sound/AI/code_blue_lowered.ogg') security_level = SEC_LEVEL_BLUE for(var/obj/machinery/status_display/SD in GLOB.machines) if(is_mainship_level(SD.z)) @@ -98,10 +98,10 @@ GLOBAL_DATUM_INIT(marine_main_ship, /datum/marine_main_ship, new) if(SEC_LEVEL_RED) if(security_level < SEC_LEVEL_RED) if(announce) - priority_announce("Attention: Security level elevated to RED - there is an immediate threat to the ship.", "Priority Alert", sound = 'sound/AI/code_red_elevated.ogg') + priority_announce("Attention: Security level elevated to RED - there is an immediate threat to the ship.", title = "Security Level Elevated", sound = 'sound/AI/code_red_elevated.ogg', color_override = "red") else if(announce) - priority_announce("Attention: Security level lowered to RED - there is an immediate threat to the ship.", "Priority Alert", sound = 'sound/AI/code_red_lowered.ogg') + priority_announce("Attention: Security level lowered to RED - there is an immediate threat to the ship.", title = "Ship Destruction Averted", type = ANNOUNCEMENT_PRIORITY, sound = 'sound/AI/code_red_lowered.ogg', color_override = "red") /* var/area/A for(var/obj/machinery/power/apc/O in machines) @@ -117,7 +117,7 @@ GLOBAL_DATUM_INIT(marine_main_ship, /datum/marine_main_ship, new) SD.set_picture("redalert") if(SEC_LEVEL_DELTA) if(announce) - priority_announce("Attention! Delta security level reached! " + CONFIG_GET(string/alert_delta), "Priority Alert") + priority_announce("Attention! Delta security level reached! " + CONFIG_GET(string/alert_delta), title = "Ship Destruction Imminent", type = ANNOUNCEMENT_PRIORITY, color_override = "purple") security_level = SEC_LEVEL_DELTA for(var/obj/machinery/door/poddoor/shutters/mainship/D in GLOB.machines) if(D.id == "sd_lockdown") diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 192f03f281a56..de78fee190302 100644 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -246,3 +246,19 @@ id = human_mob.wear_id?.type l_store = human_mob.l_store?.type r_store = human_mob.r_store?.type + +/datum/outfit/vv_get_dropdown() + . = ..() + VV_DROPDOWN_OPTION("", "---------") + VV_DROPDOWN_OPTION(VV_HK_TO_OUTFIT_EDITOR, "Outfit Editor") + +/datum/outfit/vv_do_topic(list/href_list) + . = ..() + + if(!.) + return + + if(href_list[VV_HK_TO_OUTFIT_EDITOR]) + if(!check_rights(NONE)) + return + usr.client.open_outfit_editor(src) diff --git a/code/datums/personal_statistics.dm b/code/datums/personal_statistics.dm index 88f9bead146ef..e34ad294eaba7 100644 --- a/code/datums/personal_statistics.dm +++ b/code/datums/personal_statistics.dm @@ -38,6 +38,8 @@ GLOBAL_LIST_EMPTY(personal_statistics_list) var/projectile_damage = 0 var/melee_damage = 0 + var/mechs_destroyed = 0 + //We are watching var/friendly_fire_damage = 0 @@ -62,6 +64,7 @@ GLOBAL_LIST_EMPTY(personal_statistics_list) var/times_revived = 0 var/deaths = 0 + var/shrapnel_removed = 0 //Downtime var/time_resting = 0 @@ -105,6 +108,26 @@ GLOBAL_LIST_EMPTY(personal_statistics_list) var/war_crimes = 0 var/tactical_unalives = 0 //Someone should add a way to determine if you died to a grenade in your hand and add it to this + //campaign specific vars + var/mission_projectile_damage = 0 + var/mission_friendly_fire_damage = 0 + var/mission_melee_damage = 0 + var/mission_revives = 0 + var/mission_times_revived = 0 + var/mission_structures_built = 0 + var/mission_objective_destroyed = 0 + var/mission_blocker_destroyed = 0 + var/mission_objective_captured = 0 + var/mission_objective_decaptured = 0 + var/mission_mechs_destroyed = 0 + var/mission_shrapnel_removed = 0 + var/mission_traps_created = 0 + var/mission_grenades_primed = 0 + +/datum/personal_statistics/New() + . = ..() + RegisterSignal(SSdcs, COMSIG_GLOB_CAMPAIGN_MISSION_STARTED, PROC_REF(reset_mission_stats)) + ///Calculated from the chemicals_ingested list, returns a string: "[chemical name], [amount] units" /datum/personal_statistics/proc/get_most_ingested_chemical() var/list/winner = list("none", 0) @@ -153,6 +176,9 @@ GLOBAL_LIST_EMPTY(personal_statistics_list) if(internal_injuries_inflicted) stats += "Inflicted [internal_injuries_inflicted] internal injur[internal_injuries_inflicted > 1 ? "ies" : "y"] on [internal_injuries_inflicted > 1 ? "others" : "somebody"]." + if(mechs_destroyed) + stats += "[mechs_destroyed] hostile mechs destroyed." + //Medical stats += "
" if(self_heals) @@ -166,6 +192,8 @@ GLOBAL_LIST_EMPTY(personal_statistics_list) if(times_revived) stats += "You were revived [times_revived] time\s." stats += deaths ? "You died [deaths] time\s." : "You survived the whole round." + if(shrapnel_removed) + stats += "Removed [shrapnel_removed] piece\s of shrapnel." //Downtime var/list/downtime_stats = list() @@ -264,7 +292,46 @@ GLOBAL_LIST_EMPTY(personal_statistics_list) //Replace any instances of line breaks after horizontal rules to prevent unneeded empty spaces return replacetext(jointext(stats, "
"), "

", "
") - +/** + * Resets stats recorded for the current mission + * Used for Campaign + */ +/datum/personal_statistics/proc/reset_mission_stats() + SIGNAL_HANDLER + mission_projectile_damage = 0 + mission_friendly_fire_damage = 0 + mission_revives = 0 + mission_times_revived = 0 + mission_structures_built = 0 + mission_melee_damage = 0 + mission_objective_destroyed = 0 + mission_blocker_destroyed = 0 + mission_objective_captured = 0 + mission_objective_decaptured = 0 + mission_mechs_destroyed = 0 + mission_shrapnel_removed = 0 + mission_traps_created = 0 + mission_grenades_primed = 0 + +///Returns the credit bonus based on stats from the current mission +/datum/personal_statistics/proc/get_mission_reward() + var/credit_bonus = 0 + credit_bonus += mission_projectile_damage * 0.1 + credit_bonus -= mission_friendly_fire_damage * 0.2 + credit_bonus += mission_melee_damage * 0.2 + credit_bonus += mission_revives * 15 + credit_bonus += mission_times_revived * 5 //purple heart + credit_bonus += mission_structures_built * 6 + credit_bonus += mission_objective_destroyed * 50 + credit_bonus += mission_blocker_destroyed * 30 + credit_bonus += mission_objective_captured * 20 + credit_bonus += mission_objective_decaptured * 20 + credit_bonus += mission_mechs_destroyed * 20 + credit_bonus += mission_shrapnel_removed * 3 + credit_bonus += mission_traps_created * 4 + credit_bonus += mission_grenades_primed * 2 + + return max(floor(credit_bonus), 0) /* Not sure what folder to put a file of just record keeping procs, so just leaving them here The alternative is scattering them everywhere under their respective objects which is a bit messy */ @@ -276,6 +343,9 @@ The alternative is scattering them everywhere under their respective objects whi var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[user.ckey] personal_statistics.melee_hits++ personal_statistics.melee_damage += damage + personal_statistics.mission_melee_damage += damage + if(faction == user.faction) + personal_statistics.mission_friendly_fire_damage += damage return TRUE /mob/living/carbon/human/record_melee_damage(mob/living/user, damage, delimbed) @@ -310,17 +380,17 @@ The alternative is scattering them everywhere under their respective objects whi return ..() ///Tally to personal_statistics that a successful shot was made and record the damage dealt -/mob/living/proc/record_projectile_damage(mob/shooter, damage) - //Check if a ckey exists; the check for victim aliveness is handled before the proc call - if(!shooter.ckey) +/mob/living/proc/record_projectile_damage(damage, mob/living/victim) + if(!ckey) return FALSE - var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[shooter.ckey] + var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[ckey] personal_statistics.projectiles_hit++ personal_statistics.projectile_damage += damage - if(faction && isliving(shooter)) //See if any friendly fire was made - var/mob/living/L = shooter - if(faction == L.faction) - personal_statistics.friendly_fire_damage += damage //FF multiplier already included by the way + personal_statistics.mission_projectile_damage += damage + + if(faction == victim.faction) //See if any friendly fire was made + personal_statistics.friendly_fire_damage += damage //FF multiplier already included by the way + personal_statistics.mission_friendly_fire_damage += damage return TRUE ///Record what reagents and how much of them were transferred to a mob into their ckey's /datum/personal_statistics @@ -422,7 +492,8 @@ The alternative is scattering them everywhere under their respective objects whi if(!ckey) return FALSE var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[ckey] - personal_statistics.recycle_points_denied += trash.get_export_value() + var/list/exported_value = trash.get_export_value() + personal_statistics.recycle_points_denied += exported_value[1] return TRUE ///Separate record keeping proc to reduce copy pasta @@ -524,6 +595,7 @@ The alternative is scattering them everywhere under their respective objects whi return FALSE var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[ckey] personal_statistics.traps_created++ + personal_statistics.mission_traps_created++ return TRUE ///Tally up bullets caught/reflected @@ -542,6 +614,7 @@ The alternative is scattering them everywhere under their respective objects whi return FALSE var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[ckey] personal_statistics.structures_built++ + personal_statistics.mission_structures_built++ return TRUE /mob/proc/record_war_crime() diff --git a/code/datums/quick_load_beginners.dm b/code/datums/quick_load_beginners.dm new file mode 100644 index 0000000000000..c2554da595670 --- /dev/null +++ b/code/datums/quick_load_beginners.dm @@ -0,0 +1,673 @@ +//Any loadout that is intended for the new player loadout vendor +///When making new loadouts, remember to also add the typepath to the list under init_beginner_loadouts() or else it won't show up in the vendor + + +/datum/outfit/quick/beginner + name = "Beginner loadout base" + desc = "The base loadout for beginners. You shouldn't be able to see this" + jobtype = "Squad Marine" + + w_uniform = /obj/item/clothing/under/marine + shoes = /obj/item/clothing/shoes/marine/full + wear_suit = /obj/item/clothing/suit/modular/xenonauten + gloves = /obj/item/clothing/gloves/marine/black + mask = /obj/item/clothing/mask/bandanna + head = /obj/item/clothing/head/modular/m10x + r_store = /obj/item/storage/pouch/medkit/firstaid + l_store = /obj/item/storage/holster/flarepouch/full + back = /obj/item/storage/backpack/marine/satchel + belt = /obj/item/storage/belt/marine + ears = /obj/item/radio/headset/mainship/marine + +/datum/outfit/quick/beginner/post_equip(mob/living/carbon/human/human, visualsOnly) + . = ..() + human.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/protein_pack, SLOT_IN_HEAD) + human.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/protein_pack, SLOT_IN_HEAD) + +/datum/outfit/quick/beginner/marine/rifleman + name = "Rifleman" + desc = "A typical rifleman for the marines. \ + Wields the AR-12, a versatile all-rounder assault rifle with a powerful underbarrel grenade launcher attached. \ + Also carries the strong P-23 sidearm and a variety of flares, medical equipment, and more for every situation." + + wear_suit = /obj/item/clothing/suit/modular/xenonauten/hodgrenades + head = /obj/item/clothing/head/modular/m10x/hod + w_uniform = /obj/item/clothing/under/marine/holster + suit_store = /obj/item/weapon/gun/rifle/standard_assaultrifle/medic + l_hand = /obj/item/paper/tutorial/beginner_rifleman + +/datum/outfit/quick/beginner/marine/rifleman/post_equip(mob/living/carbon/human/human, visualsOnly) + . = ..() + human.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/gauze, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/ointment, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_assaultrifle, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_assaultrifle, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_assaultrifle, SLOT_IN_BACKPACK) + + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_assaultrifle, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_assaultrifle, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_assaultrifle, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_assaultrifle, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_assaultrifle, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_assaultrifle, SLOT_IN_BELT) + + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/standard_heavypistol, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/standard_heavypistol/beginner(human), SLOT_IN_ACCESSORY) + + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_SUIT) + +/datum/outfit/quick/beginner/marine/machinegunner + name = "Machinegunner" + desc = "The king of suppressive fire. Uses the MG-60, a fully automatic 200 round machine gun with a bipod attached. \ + Excels at denying large areas to the enemy and eliminating those who refuse to leave." + + wear_suit = /obj/item/clothing/suit/modular/xenonauten/heavy/tyr_onegeneral + head = /obj/item/clothing/head/modular/m10x/tyr + w_uniform = /obj/item/clothing/under/marine/black_vest + back = /obj/item/storage/backpack/marine/standard + belt = /obj/item/storage/belt/sparepouch + suit_store = /obj/item/weapon/gun/rifle/standard_gpmg/beginner + mask = /obj/item/clothing/mask/rebreather + l_hand = /obj/item/paper/tutorial/beginner_machinegunner + +/datum/outfit/quick/beginner/marine/machinegunner/post_equip(mob/living/carbon/human/human, visualsOnly) + . = ..() + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_gpmg, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_gpmg, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_gpmg, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_gpmg, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_gpmg, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_gpmg, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_gpmg, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_gpmg, SLOT_IN_BACKPACK) + + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_gpmg, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_gpmg, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_gpmg, SLOT_IN_BELT) + + human.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/gauze, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/ointment, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_ACCESSORY) + + human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/plasma_pistol, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/plasma_pistol, SLOT_IN_SUIT) + + +/datum/outfit/quick/beginner/marine/marksman + name = "Marksman" + desc = "Quality over quantity. Equipped with the DMR-37, an accurate long-range designated marksman rifle with a scope attached. \ + While subpar in close quarters, the precision of the DMR is unmatched, exceeding at taking out threats from afar." + + wear_suit = /obj/item/clothing/suit/modular/xenonauten/lightmedical + head = /obj/item/clothing/head/modular/style/boonie + w_uniform = /obj/item/clothing/under/marine/holster + belt = /obj/item/belt_harness/marine + l_store = /obj/item/storage/pouch/magazine/large + r_store = /obj/item/storage/pouch/magazine/large + suit_store = /obj/item/weapon/gun/rifle/standard_dmr/beginner + mask = /obj/item/clothing/mask/breath + l_hand = /obj/item/paper/tutorial/beginner_marksman + +/datum/outfit/quick/beginner/marine/marksman/post_equip(mob/living/carbon/human/human, visualsOnly) + . = ..() + human.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/gauze, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/ointment, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_dmr, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_dmr, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_dmr, SLOT_IN_BACKPACK) + + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_dmr, SLOT_IN_L_POUCH) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_dmr, SLOT_IN_L_POUCH) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_dmr, SLOT_IN_L_POUCH) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_dmr, SLOT_IN_R_POUCH) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_dmr, SLOT_IN_R_POUCH) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_dmr, SLOT_IN_R_POUCH) + + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70/beginner(human), SLOT_IN_ACCESSORY) + + human.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/bicaridine, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/kelotane, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/tricordrazine, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/tramadol, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/dylovene, SLOT_IN_SUIT) + +/datum/outfit/quick/beginner/marine/shotgunner + name = "Shotgunner" + desc = "Up close and personal. Wields the SH-39, a semi-automatic shotgun loaded with slugs. \ + An absolute monster at short to mid range, the shotgun will do heavy damage to any target hit, as well as stunning them briefly, staggering them, and knocking them back." + + w_uniform = /obj/item/clothing/under/marine/holster + wear_suit = /obj/item/clothing/suit/modular/xenonauten/lightgeneral + suit_store = /obj/item/weapon/gun/shotgun/combat/standardmarine/beginner + belt = /obj/item/storage/belt/shotgun + head = /obj/item/clothing/head/modular/m10x/freyr + gloves = /obj/item/clothing/gloves/marine/fingerless + mask = /obj/item/clothing/mask/gas/tactical/coif + l_hand = /obj/item/paper/tutorial/beginner_shotgunner + +/datum/outfit/quick/beginner/marine/shotgunner/post_equip(mob/living/carbon/human/human, visualsOnly) + . = ..() + human.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/gauze, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/ointment, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/inaprovaline, SLOT_IN_BACKPACK) + + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BELT) + + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/plasma_pistol, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/plasma_pistol, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/plasma_pistol, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/plasma_pistol/beginner(human), SLOT_IN_ACCESSORY) + + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_SUIT) + +/datum/outfit/quick/beginner/marine/shocktrooper + name = "Shocktrooper" + desc = "The bleeding edge of the corps. \ + Equipped with the experimental battery-fed laser rifle, featuring four different modes that can be freely swapped between, with an underbarrel flamethrower for area denial and clearing mazes." + + suit_store = /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_rifle/medic + glasses = /obj/item/clothing/glasses/sunglasses/fake/big + wear_suit = /obj/item/clothing/suit/modular/xenonauten/lightgeneral + head = /obj/item/clothing/head/modular/style/cap + mask = /obj/item/clothing/mask/gas/modular/skimask + r_store = /obj/item/cell/lasgun/volkite/powerpack/marine + w_uniform = /obj/item/clothing/under/marine/corpman_vest + shoes = /obj/item/clothing/shoes/marine + l_hand = /obj/item/paper/tutorial/beginner_shocktrooper + +/datum/outfit/quick/beginner/marine/shocktrooper/post_equip(mob/living/carbon/human/human, visualsOnly) + . = ..() + human.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BELT) + + human.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BOOT) + + human.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/dylovene, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/mini, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/inaprovaline, SLOT_IN_BACKPACK) + + human.equip_to_slot_or_del(new /obj/item/cell/lasgun/volkite/powerpack/marine, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_SUIT) + + human.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/bicaridine, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/kelotane, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/tricordrazine, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/tramadol, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/gauze, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/ointment, SLOT_IN_ACCESSORY) + +/datum/outfit/quick/beginner/marine/hazmat + name = "Hazmat" + desc = "Designed for danger. \ + Wields the AR-11, a powerful yet innacurate assault rifle with high magazine size and an equipped tactical sensor that detects enemies through smoke and walls. \ + Wears Mimir combat armor, rendering the user immune to the dangerous toxic gas possessed by many xenomorphs." + + head = /obj/item/clothing/head/modular/m10x/mimir + suit_store = /obj/item/weapon/gun/rifle/tx11/freelancertwo + back = /obj/item/storage/backpack/marine/standard + w_uniform = /obj/item/clothing/under/marine/black_vest + wear_suit = /obj/item/clothing/suit/modular/xenonauten/mimir + mask = /obj/item/clothing/mask/rebreather/scarf + belt = /obj/item/belt_harness/marine + l_hand = /obj/item/paper/tutorial/beginner_hazmat + +/datum/outfit/quick/beginner/marine/hazmat/post_equip(mob/living/carbon/human/human, visualsOnly) + . = ..() + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx11, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx11, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx11, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx11, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx11, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx11, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx11, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx11, SLOT_IN_BACKPACK) + + human.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/gauze, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/ointment, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_ACCESSORY) + + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx11, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx11, SLOT_IN_SUIT) + +/datum/outfit/quick/beginner/marine/cqc + name = "CQC" + desc = "Swift and lethal. \ + Equipped with the AR-18, a lightweight carbine with a rapid-fire burst mode. Designed for maximum mobility, soldiers are able to rush in, assault the enemy, and retreat before they can respond." + + suit_store = /obj/item/weapon/gun/rifle/standard_carbine/beginner + wear_suit = /obj/item/clothing/suit/modular/xenonauten/lightgeneral + w_uniform = /obj/item/clothing/under/marine/black_vest + head = /obj/item/clothing/head/modular/style/beret + glasses = /obj/item/clothing/glasses/mgoggles + l_hand = /obj/item/paper/tutorial/beginner_cqc + +/datum/outfit/quick/beginner/marine/cqc/post_equip(mob/living/carbon/human/human, visualsOnly) + . = ..() + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_carbine, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_carbine, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_carbine, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_carbine, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_carbine, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_carbine, SLOT_IN_BELT) + + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_carbine, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_carbine, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_carbine, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_carbine, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_carbine, SLOT_IN_BACKPACK) + + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_carbine, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/standard_carbine, SLOT_IN_SUIT) + + human.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/gauze, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/ointment, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_ACCESSORY) + +/datum/outfit/quick/beginner/marine/chad //Ya gotta be if you pick this loadout + name = "Grenadier" + desc = "Explosive area denial. \ + Uses the GL-70, a six shot semi-automatic grenade launcher, loaded with HEDP high explosive grenades. \ + Boasts unmatched power, though heavy caution is advised to avoid harming friendlies." + + wear_suit = /obj/item/clothing/suit/modular/xenonauten/heavy/grenadier + suit_store = /obj/item/weapon/gun/grenade_launcher/multinade_launcher/beginner + l_store = /obj/item/storage/pouch/grenade + r_store = /obj/item/storage/pouch/grenade + belt = /obj/item/storage/belt/grenade + mask = /obj/item/clothing/mask/gas + w_uniform = /obj/item/clothing/under/marine/corpman_vest + head = /obj/item/clothing/head/modular/m10x/hod + shoes = /obj/item/clothing/shoes/marine + l_hand = /obj/item/paper/tutorial/beginner_chad + +/datum/outfit/quick/beginner/marine/chad/post_equip(mob/living/carbon/human/human, visualsOnly) + . = ..() + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BELT) + + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_L_POUCH) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_L_POUCH) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_L_POUCH) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_L_POUCH) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_L_POUCH) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_L_POUCH) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_R_POUCH) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_R_POUCH) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_R_POUCH) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_R_POUCH) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_R_POUCH) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_R_POUCH) + + human.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/inaprovaline, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_BACKPACK) + + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade, SLOT_IN_SUIT) + + human.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/bicaridine, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/kelotane, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/tricordrazine, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/tramadol, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/gauze, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/ointment, SLOT_IN_ACCESSORY) + + human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/double/derringer, SLOT_IN_BOOT) //So you can kill yourself when you run out of grenades + +/datum/outfit/quick/beginner/engineer + jobtype = "Squad Engineer" + + w_uniform = /obj/item/clothing/under/marine/brown_vest + shoes = /obj/item/clothing/shoes/marine + gloves = /obj/item/clothing/gloves/marine/insulated + l_store = /obj/item/storage/pouch/tools + +/datum/outfit/quick/beginner/engineer/post_equip(mob/living/carbon/human/human, visualsOnly) + . = ..() + human.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BOOT) + + human.equip_to_slot_or_del(new /obj/item/tool/screwdriver, SLOT_IN_L_POUCH) + human.equip_to_slot_or_del(new /obj/item/tool/wirecutters, SLOT_IN_L_POUCH) + human.equip_to_slot_or_del(new /obj/item/tool/wrench, SLOT_IN_L_POUCH) + human.equip_to_slot_or_del(new /obj/item/tool/crowbar, SLOT_IN_L_POUCH) + human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/hugetank, SLOT_IN_L_POUCH) + + human.equip_to_slot_or_del(new /obj/item/explosive/grenade/chem_grenade/razorburn_small, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/circuitboard/apc, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/tool/handheld_charger/hicapcell, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/gauze, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/ointment, SLOT_IN_ACCESSORY) + + human.equip_to_slot_or_del(new /obj/item/stack/sheet/plasteel/medium_stack, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack, SLOT_IN_SUIT) + +/datum/outfit/quick/beginner/engineer/builder + name = "Engineer Standard" + desc = "Born to build. Equipped with a metric ton of metal, you can be certain that a lack of barricades is not a possibility with you around." + + suit_store = /obj/item/weapon/gun/rifle/standard_lmg/beginner + wear_suit = /obj/item/clothing/suit/modular/xenonauten/heavy/mimirengi + mask = /obj/item/clothing/mask/gas/tactical + head = /obj/item/clothing/head/modular/m10x/mimir + back = /obj/item/storage/backpack/marine/radiopack + belt = /obj/item/belt_harness/marine + glasses = /obj/item/clothing/glasses/welding/superior + l_hand = /obj/item/paper/tutorial/builder + +/datum/outfit/quick/beginner/engineer/builder/post_equip(mob/living/carbon/human/human, visualsOnly) + . = ..() + human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack, SLOT_IN_SUIT) + + human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/small_stack, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/stack/sandbags_empty/full, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/tool/shovel/etool, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_lmg, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_lmg, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_lmg, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_lmg, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_lmg, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + +/datum/outfit/quick/beginner/engineer/burnitall + name = "Flamethrower" + desc = "For those who truly love to watch the world burn. Equipped with a laser carbine and a flamethrower, you can be certain that none of your enemies will be left un-burnt." + + suit_store = /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_carbine/beginner + wear_suit = /obj/item/clothing/suit/modular/xenonauten/engineer + mask = /obj/item/clothing/mask/gas/tactical/coif + head = /obj/item/clothing/head/modular/m10x/superiorwelding + back = /obj/item/storage/holster/backholster/flamer + glasses = /obj/item/clothing/glasses/meson + l_hand = /obj/item/paper/tutorial/flamer + +/datum/outfit/quick/beginner/engineer/burnitall/post_equip(mob/living/carbon/human/human, visualsOnly) + . = ..() + human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/medium_stack, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/circuitboard/apc, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/tool/multitool, SLOT_IN_SUIT) + + human.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BELT) + human.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_BELT) + + human.equip_to_slot_or_del(new /obj/item/weapon/gun/flamer/big_flamer/marinestandard/engineer/beginner(human), SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/storage/box/explosive_mines/large, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/tool/shovel/etool, SLOT_IN_BACKPACK) + +/datum/outfit/quick/beginner/engineer/pcenjoyer + name = "Plasma Cutter" + desc = "For the open-air enjoyers. Equipped with a plasma cutter, you will be able to cut down all types of walls and obstacles that dare exist within your vicinity." + + suit_store = /obj/item/tool/pickaxe/plasmacutter + wear_suit = /obj/item/clothing/suit/modular/xenonauten/engineer + mask = /obj/item/clothing/mask/gas + head = /obj/item/clothing/head/modular/m10x/superiorwelding + back = /obj/item/storage/backpack/marine/engineerpack + belt = /obj/item/belt_harness/marine + glasses = /obj/item/clothing/glasses/meson + l_hand = /obj/item/paper/tutorial/plasmacutter + +/datum/outfit/quick/beginner/engineer/pcenjoyer/post_equip(mob/living/carbon/human/human, visualsOnly) + . = ..() + human.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_HEAD) + + human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/small_stack, SLOT_IN_SUIT) + + human.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/standard_machinepistol/compact(human), SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/standard_machinepistol, SLOT_IN_BACKPACK) + +/datum/outfit/quick/beginner/corpsman + jobtype = "Squad Corpsman" + + shoes = /obj/item/clothing/shoes/marine + w_uniform = /obj/item/clothing/under/marine/corpsman/corpman_vest + glasses = /obj/item/clothing/glasses/hud/health + r_hand = /obj/item/medevac_beacon + +/datum/outfit/quick/beginner/corpsman/post_equip(mob/living/carbon/human/human, visualsOnly) + . = ..() + human.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BOOT) + +/datum/outfit/quick/beginner/corpsman/lifesaver + name = "Standard Lifesaver" + desc = "Miracle in progress. \ + Wields the bolt action Leicaster Repeater, and is equipped with a large variety of medicine for keeping the entire corps topped up and in the fight." + + suit_store = /obj/item/weapon/gun/shotgun/pump/lever/repeater/beginner + wear_suit = /obj/item/clothing/suit/modular/xenonauten/mimirinjector + gloves = /obj/item/clothing/gloves/defibrillator + mask = /obj/item/clothing/mask/gas + head = /obj/item/clothing/head/modular/m10x/mimir + r_store = /obj/item/storage/pouch/medkit/medic + l_store = /obj/item/storage/pouch/shotgun + back = /obj/item/storage/backpack/marine/corpsman + belt = /obj/item/storage/belt/lifesaver/beginner + l_hand = /obj/item/paper/tutorial/lifesaver + +/datum/outfit/quick/beginner/corpsman/lifesaver/post_equip(mob/living/carbon/human/human, visualsOnly) + . = ..() + human.equip_to_slot_or_del(new /obj/item/roller, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/bodybag/cryobag, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/advanced/oxycodone, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/advanced/nanoblood, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/roller/medevac, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/tweezers, SLOT_IN_ACCESSORY) + + human.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/dexalinplus, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus, SLOT_IN_SUIT) + + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p4570, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p4570, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p4570, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p4570, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p4570, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p4570, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p4570, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/repeater, SLOT_IN_L_POUCH) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/repeater, SLOT_IN_L_POUCH) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/repeater, SLOT_IN_L_POUCH) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/repeater, SLOT_IN_L_POUCH) + +/datum/outfit/quick/beginner/corpsman/hypobelt + name = "Standard Hypobelt" + desc = "Putting the combat in combat medic. \ + Wields the pump action SH-35 shotgun, and is equipped with a belt full of hyposprays for rapidly treating patients in bad condition." + + suit_store = /obj/item/weapon/gun/shotgun/pump/t35/beginner + wear_suit = /obj/item/clothing/suit/modular/xenonauten/light/lightmedical + gloves = /obj/item/healthanalyzer/gloves + mask = /obj/item/clothing/mask/gas/modular/coofmask + head = /obj/item/clothing/head/modular/m10x/antenna + r_store = /obj/item/storage/pouch/medkit/medic + l_store = /obj/item/storage/pouch/shotgun + back = /obj/item/storage/backpack/marine/corpsman + belt = /obj/item/storage/belt/hypospraybelt/beginner + l_hand = /obj/item/paper/tutorial/hypobelt + +/datum/outfit/quick/beginner/corpsman/hypobelt/post_equip(mob/living/carbon/human/human, visualsOnly) + . = ..() + human.equip_to_slot_or_del(new /obj/item/stack/medical/splint, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/splint, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/splint, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/splint, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/splint, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/splint, SLOT_IN_ACCESSORY) + + human.equip_to_slot_or_del(new /obj/item/roller, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/bodybag/cryobag, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/advanced/oxycodone, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/roller/medevac, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/tweezers, SLOT_IN_SUIT) + + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_L_POUCH) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_L_POUCH) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_L_POUCH) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_L_POUCH) + + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/defibrillator, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/protein_pack, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/slug, SLOT_IN_BACKPACK) + +/datum/outfit/quick/beginner/smartgunner + jobtype = "Squad Smartgunner" + + w_uniform = /obj/item/clothing/under/marine/black_vest + shoes = /obj/item/clothing/shoes/marine + wear_suit = /obj/item/clothing/suit/modular/xenonauten/lightgeneral + mask = /obj/item/clothing/mask/gas + head = /obj/item/clothing/head/modular/m10x/antenna + belt = /obj/item/belt_harness/marine + glasses = /obj/item/clothing/glasses/night/m56_goggles + +/datum/outfit/quick/beginner/smartgunner/post_equip(mob/living/carbon/human/human, visualsOnly) + . = ..() + human.equip_to_slot_or_del(new /obj/item/storage/box/MRE, SLOT_IN_BOOT) + +/datum/outfit/quick/beginner/smartgunner/sg29 + name = "Standard Smartmachinegun" + desc = "Tactical support fire. \ + Uses the SG-29, a specialist light machine gun that will shoot through your allies, \ + equipped with a tactical sensor to detect enemies through smoke, walls, and darkness." + + suit_store = /obj/item/weapon/gun/rifle/standard_smartmachinegun/pmc + l_hand = /obj/item/paper/tutorial/smartmachinegunner + +/datum/outfit/quick/beginner/smartgunner/sg29/post_equip(mob/living/carbon/human/human, visualsOnly) + . = ..() + human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_smartmachinegun, SLOT_IN_SUIT) + + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/gauze, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/ointment, SLOT_IN_ACCESSORY) + + human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/plasma_pistol, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/inaprovaline, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_smartmachinegun, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_smartmachinegun, SLOT_IN_BACKPACK) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_smartmachinegun, SLOT_IN_BACKPACK) + +/datum/outfit/quick/beginner/smartgunner/sg85 + name = "Standard Smartminigun" + desc = "Lead wall! Wields the SG-85, a specialist minigun that holds one thousand rounds and can shoot through your allies, \ + equipped with a tactical sensor to detect enemies through smoke, walls, and darkness." + + suit_store = /obj/item/weapon/gun/minigun/smart_minigun/motion_detector + back = /obj/item/ammo_magazine/minigun_powerpack/smartgun + l_hand = /obj/item/paper/tutorial/smartminigunner + +/datum/outfit/quick/beginner/smartgunner/sg85/post_equip(mob/living/carbon/human/human, visualsOnly) + . = ..() + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/smart_minigun, SLOT_IN_SUIT) + human.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/smart_minigun, SLOT_IN_SUIT) + + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/gauze, SLOT_IN_ACCESSORY) + human.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/ointment, SLOT_IN_ACCESSORY) + diff --git a/code/datums/quick_load_outfits.dm b/code/datums/quick_load_outfits.dm index c2e5626782bca..3963455b05762 100644 --- a/code/datums/quick_load_outfits.dm +++ b/code/datums/quick_load_outfits.dm @@ -388,7 +388,6 @@ name = "SH-35 Scout" desc = "For getting too close for comfort. Equipped with a SH-35 shotgun with buckshot and flechette rounds, a MP-19 sidearm, a good amount of grenades and light armor with a cutting edge 'svallin' shield module. Provides for excellent mobility and devestating close range firepower, but will falter against sustained firepower." - belt = /obj/item/storage/belt/shotgun wear_suit = /obj/item/clothing/suit/modular/xenonauten/light/shield suit_store = /obj/item/weapon/gun/shotgun/pump/t35/standard belt = /obj/item/storage/belt/shotgun/mixed @@ -760,10 +759,6 @@ H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx15_flechette, SLOT_IN_R_POUCH) H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx15_slug, SLOT_IN_R_POUCH) - H.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_R_POUCH) - H.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_R_POUCH) - H.equip_to_slot_or_del(new /obj/item/cell/lasgun/lasrifle, SLOT_IN_R_POUCH) - /datum/outfit/quick/tgmc/corpsman/laser_medic name = "Laser Rifle Corpsman" desc = "Keeping everone else in the fight. Armed with an laser rifle with miniflamer, an impressive array of tools for healing your team, and a 'Mimir' biological protection module to allow you to continue operating in hazardous environments. With medivacs out of the question, you are the only thing standing between your buddies and an early grave." diff --git a/code/datums/round_statistics.dm b/code/datums/round_statistics.dm index 02bb1ff416c33..53a41816ee04d 100644 --- a/code/datums/round_statistics.dm +++ b/code/datums/round_statistics.dm @@ -61,6 +61,7 @@ GLOBAL_DATUM_INIT(round_statistics, /datum/round_statistics, new) var/mortar_shells_fired = 0 var/howitzer_shells_fired = 0 var/rocket_shells_fired = 0 + var/obs_fired = 0 var/queen_screech = 0 var/now_pregnant = 0 var/sentinel_drain_stings = 0 diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index 4468122b11479..3fbbc3e31695a 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -143,18 +143,13 @@ display_name = "Tadpole NK-Haul Model" /datum/map_template/shuttle/minidropship/mobile_bar - suffix = "_mobile_bar" + suffix = "_mobile_bar" description = "A Tadpole modified to provide drinks and disservices. God dammit it's him again, I thought we got rid of him." display_name = "Tadpole Mobile-Bar Model" admin_enable = FALSE -/datum/map_template/shuttle/minidropship/combat_tad - suffix = "_combat_tad" - description = "A Tadpole model modified to have three weapon hardpoints instead of just one, the majority of the other standard features had to be scrapped to fit all three of them on." - display_name = "Tadpole Combat Model" - /datum/map_template/shuttle/minidropship/umbilical - suffix = "_umbilical" + suffix = "_umbilical" description = "A high-point orbital shuttle with a tactical umbilical airlock for insertion of ground troops." display_name = "Tadpole Umbilical Model" diff --git a/code/datums/skills.dm b/code/datums/skills.dm index be7d9ad26c1a2..25c6a0df117f3 100644 --- a/code/datums/skills.dm +++ b/code/datums/skills.dm @@ -257,8 +257,8 @@ engineer, construction, leadership, medical, surgery, pilot, police, powerloader firearms = SKILL_FIREARMS_DEFAULT medical = SKILL_MEDICAL_EXPERT surgery = SKILL_SURGERY_EXPERT - construction = SKILL_CONSTRUCTION_MASTER - engineer = SKILL_ENGINEER_MASTER + construction = SKILL_CONSTRUCTION_EXPERT + engineer = SKILL_ENGINEER_EXPERT powerloader = SKILL_POWERLOADER_MASTER police = SKILL_POLICE_FLASH @@ -285,8 +285,8 @@ engineer, construction, leadership, medical, surgery, pilot, police, powerloader /datum/skills/civilian/survivor/atmos name = "Survivor Atmos Tech" - engineer = SKILL_ENGINEER_MASTER - construction = SKILL_CONSTRUCTION_MASTER + engineer = SKILL_ENGINEER_EXPERT + construction = SKILL_CONSTRUCTION_EXPERT /datum/skills/civilian/survivor/marshal name = "Survivor Marshal" @@ -314,6 +314,12 @@ engineer, construction, leadership, medical, surgery, pilot, police, powerloader construction = SKILL_CONSTRUCTION_METAL engineer = SKILL_ENGINEER_METAL +/datum/skills/combat_medic/special_forces + name = "Special Operations Medic" + construction = SKILL_CONSTRUCTION_METAL + engineer = SKILL_ENGINEER_METAL + smgs = SKILL_SMGS_TRAINED + /datum/skills/doctor name = "Doctor" cqc = SKILL_CQC_WEAK @@ -342,8 +348,8 @@ engineer, construction, leadership, medical, surgery, pilot, police, powerloader /datum/skills/ai name = "AI" - engineer = SKILL_ENGINEER_MASTER - construction = SKILL_CONSTRUCTION_MASTER + engineer = SKILL_ENGINEER_EXPERT + construction = SKILL_CONSTRUCTION_EXPERT firearms = SKILL_FIREARMS_UNTRAINED medical = SKILL_MEDICAL_EXPERT leadership = SKILL_LEAD_MASTER @@ -354,8 +360,8 @@ engineer, construction, leadership, medical, surgery, pilot, police, powerloader /datum/skills/synthetic name = SYNTHETIC - engineer = SKILL_ENGINEER_MASTER - construction = SKILL_CONSTRUCTION_MASTER + engineer = SKILL_ENGINEER_EXPERT + construction = SKILL_CONSTRUCTION_EXPERT firearms = SKILL_FIREARMS_UNTRAINED medical = SKILL_MEDICAL_EXPERT cqc = SKILL_CQC_MASTER @@ -368,10 +374,10 @@ engineer, construction, leadership, medical, surgery, pilot, police, powerloader /datum/skills/early_synthetic name = "Early Synthetic" - engineer = SKILL_ENGINEER_INHUMAN - construction = SKILL_CONSTRUCTION_INHUMAN + engineer = SKILL_ENGINEER_MASTER + construction = SKILL_CONSTRUCTION_MASTER firearms = SKILL_FIREARMS_UNTRAINED - medical = SKILL_SURGERY_PROFESSIONAL + medical = SKILL_MEDICAL_COMPETENT cqc = SKILL_CQC_MASTER surgery = SKILL_SURGERY_PROFESSIONAL pilot = SKILL_PILOT_TRAINED @@ -404,12 +410,40 @@ engineer, construction, leadership, medical, surgery, pilot, police, powerloader powerloader = SKILL_POWERLOADER_TRAINED cqc = SKILL_CQC_TRAINED +/datum/skills/veteran + name = "TGMC Retired Veteran" + engineer = SKILL_ENGINEER_ENGI //to fix CIC apc. + construction = SKILL_CONSTRUCTION_PLASTEEL + leadership = SKILL_LEAD_MASTER + medical = SKILL_MEDICAL_PRACTICED + surgery = SKILL_SURGERY_AMATEUR + police = SKILL_POLICE_MP + powerloader = SKILL_POWERLOADER_TRAINED + cqc = SKILL_CQC_TRAINED + firearms = SKILL_FIREARMS_TRAINED + rifles = SKILL_RIFLES_TRAINED + +/datum/skills/veteran_captain + name = "TGMC Retired Veteran Expedition Leader" + leadership = SKILL_LEAD_MASTER + police = SKILL_POLICE_MP + medical = SKILL_MEDICAL_COMPETENT + surgery = SKILL_SURGERY_AMATEUR + engineer = SKILL_ENGINEER_ENGI + construction = SKILL_CONSTRUCTION_ADVANCED + powerloader = SKILL_POWERLOADER_MASTER + firearms = SKILL_FIREARMS_TRAINED + rifles = SKILL_RIFLES_TRAINED + smartgun = SKILL_SMART_TRAINED + /datum/skills/so name = STAFF_OFFICER + engineer = SKILL_ENGINEER_ENGI construction = SKILL_CONSTRUCTION_PLASTEEL leadership = SKILL_LEAD_EXPERT medical = SKILL_MEDICAL_PRACTICED surgery = SKILL_SURGERY_AMATEUR + powerloader = SKILL_POWERLOADER_TRAINED police = SKILL_POLICE_MP /datum/skills/pilot @@ -418,18 +452,39 @@ engineer, construction, leadership, medical, surgery, pilot, police, powerloader powerloader = SKILL_POWERLOADER_PRO leadership = SKILL_LEAD_TRAINED +/datum/skills/transportofficer + name = TRANSPORT_OFFICER + construction = SKILL_CONSTRUCTION_ADVANCED + powerloader = SKILL_POWERLOADER_PRO + engineer = SKILL_ENGINEER_ENGI + leadership = SKILL_LEAD_TRAINED + /datum/skills/mech_pilot name = MECH_PILOT engineer = SKILL_ENGINEER_METAL construction = SKILL_CONSTRUCTION_METAL powerloader = SKILL_POWERLOADER_PRO - large_vehicle = SKILL_LARGE_VEHICLE_TRAINED + large_vehicle = SKILL_LARGE_VEHICLE_VETERAN + +/datum/skills/assault_crewman + name = ASSAULT_CREWMAN + engineer = SKILL_ENGINEER_METAL + construction = SKILL_CONSTRUCTION_METAL + powerloader = SKILL_POWERLOADER_PRO + large_vehicle = SKILL_LARGE_VEHICLE_VETERAN + +/datum/skills/transport_crewman + name = TRANSPORT_CREWMAN + engineer = SKILL_ENGINEER_METAL + construction = SKILL_CONSTRUCTION_METAL + powerloader = SKILL_POWERLOADER_PRO + large_vehicle = SKILL_LARGE_VEHICLE_EXPERIENCED /datum/skills/ce name = CHIEF_SHIP_ENGINEER engineer = SKILL_ENGINEER_MASTER construction = SKILL_CONSTRUCTION_MASTER - leadership = SKILL_LEAD_EXPERT + leadership = SKILL_LEAD_TRAINED police = SKILL_POLICE_MP powerloader = SKILL_POWERLOADER_MASTER @@ -442,8 +497,8 @@ engineer, construction, leadership, medical, surgery, pilot, police, powerloader /datum/skills/st name = SHIP_TECH - engineer = SKILL_ENGINEER_MASTER - construction = SKILL_CONSTRUCTION_MASTER + engineer = SKILL_ENGINEER_EXPERT + construction = SKILL_CONSTRUCTION_EXPERT powerloader = SKILL_POWERLOADER_MASTER /datum/skills/pmc @@ -462,10 +517,11 @@ engineer, construction, leadership, medical, surgery, pilot, police, powerloader engineer = SKILL_ENGINEER_ENGI /datum/skills/special_forces_standard - name = "Special Force Standard" + name = "Special Response Force Standard" construction = SKILL_CONSTRUCTION_METAL engineer = SKILL_ENGINEER_METAL police = SKILL_POLICE_MP + smgs = SKILL_SMGS_TRAINED /datum/skills/sl name = SQUAD_LEADER @@ -505,6 +561,7 @@ engineer, construction, leadership, medical, surgery, pilot, police, powerloader /datum/skills/sl/pmc/special_forces name = "Special Force Leader" police = SKILL_POLICE_MP + smgs = SKILL_SMGS_TRAINED /datum/skills/sl/icc name = "ICC Leader" @@ -624,7 +681,7 @@ engineer, construction, leadership, medical, surgery, pilot, police, powerloader heavy_weapons = SKILL_HEAVY_WEAPONS_TRAINED police = SKILL_POLICE_MP powerloader = SKILL_POWERLOADER_MASTER - large_vehicle = SKILL_LARGE_VEHICLE_TRAINED + large_vehicle = SKILL_LARGE_VEHICLE_VETERAN /* Deathsquad */ /datum/skills/deathsquad diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index c4587bf9e5847..a6e44d48f83e3 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -144,24 +144,24 @@ return ..() /datum/status_effect/incapacitating/sleeping/tick() - if(owner.maxHealth) - var/health_ratio = owner.health / owner.maxHealth - var/healing = BASE_HEAL_RATE //set for a base of 0.25 healed per 2-second interval asleep in a bed with covers. - if((locate(/obj/structure/bed) in owner.loc)) - healing += (2 * BASE_HEAL_RATE) - else if((locate(/obj/structure/table) in owner.loc)) - healing += BASE_HEAL_RATE - for(var/obj/item/bedsheet/bedsheet in range(owner.loc,0)) - if(bedsheet.loc != owner.loc) //bedsheets in your backpack/neck don't give you comfort - continue - healing += BASE_HEAL_RATE - break //Only count the first bedsheet - if(health_ratio > -0.5) - owner.adjustBruteLoss(healing) - owner.adjustFireLoss(healing) - owner.adjustToxLoss(healing * 0.5, TRUE, TRUE) - owner.adjustStaminaLoss(healing * 100) - owner.adjustCloneLoss(healing * health_ratio * 0.8) + if(!owner.maxHealth) + return + var/health_ratio = owner.health / owner.maxHealth + var/healing = BASE_HEAL_RATE //set for a base of 0.25 healed per 2-second interval asleep in a bed with covers. + if((locate(/obj/structure/bed) in owner.loc)) + healing += (2 * BASE_HEAL_RATE) + else if((locate(/obj/structure/table) in owner.loc)) + healing += BASE_HEAL_RATE + if(locate(/obj/item/bedsheet) in owner.loc) + healing += BASE_HEAL_RATE + if((locate(/obj/item/toy/plush) in owner.loc)) // plushie bonus in bed with a blanket + healing += 0.75 * BASE_HEAL_RATE // plushie bonus in bed with a blanket + if(health_ratio > -0.5) + owner.adjustBruteLoss(healing) + owner.adjustFireLoss(healing) + owner.adjustToxLoss(healing * 0.5, TRUE, TRUE) + owner.adjustStaminaLoss(healing * 100) + owner.adjustCloneLoss(healing * health_ratio * 0.8) if(human_owner?.drunkenness) human_owner.drunkenness *= 0.997 //reduce drunkenness by 0.3% per tick, 6% per 2 seconds if(prob(20)) @@ -426,6 +426,7 @@ return ..() /datum/status_effect/spacefreeze + alert_type = /atom/movable/screen/alert/status_effect/spacefreeze id = "spacefreeze" /datum/status_effect/spacefreeze/on_creation(mob/living/new_owner) @@ -820,3 +821,8 @@ scale = generator(GEN_VECTOR, list(0.6, 0.6), list(1, 1), NORMAL_RAND) friction = -0.05 color = "#818181" + +/atom/movable/screen/alert/status_effect/spacefreeze + name = "Freezing" + desc = "Space is very very cold, who would've thought?" + icon_state = "cold3" diff --git a/code/datums/status_effects/sectoid.dm b/code/datums/status_effects/sectoid.dm new file mode 100644 index 0000000000000..40351afc84835 --- /dev/null +++ b/code/datums/status_effects/sectoid.dm @@ -0,0 +1,137 @@ +/datum/status_effect/mindmeld + id = "mindmeld" + duration = -1 + tick_interval = 2 SECONDS + alert_type = null + /// Used to track who is the owner of this buff. + var/mob/living/carbon/link_target + /// Used to track who is giving this buff to the owner. + var/mob/living/carbon/link_partner + /// Used for particles. Holds the particles instead of the mob. See particle_holder for documentation. + var/obj/effect/abstract/particle_holder/particle_holder + /// If the target xeno was within range. + var/was_within_range = TRUE + ///Range the linkees must be to each other to benefit + var/max_range = 6 + ///Projectile accuracy buff + var/accuracy_mod = 0 + ///Max health buff + var/health_mod = 0 + ///Movement speed buff + var/speed_mod = 0 + ///% chance to ignore stuns + var/stun_resistance = 0 + +/datum/status_effect/mindmeld/on_creation(mob/living/new_owner, mob/living/carbon/partner, new_max_range, new_accuracy_mod, new_health_mod, new_speed_mod, new_stun_resistance) + link_target = new_owner + link_partner = partner + ADD_TRAIT(link_target, TRAIT_MINDMELDED, TRAIT_STATUS_EFFECT(id)) + max_range = new_max_range + accuracy_mod = new_accuracy_mod + health_mod = new_health_mod + speed_mod = new_speed_mod + if(new_stun_resistance) + stun_resistance = new_stun_resistance + RegisterSignals(link_target, list( + COMSIG_LIVING_STATUS_STUN, + COMSIG_LIVING_STATUS_KNOCKDOWN, + COMSIG_LIVING_STATUS_PARALYZE, + COMSIG_LIVING_STATUS_UNCONSCIOUS, + COMSIG_LIVING_STATUS_CONFUSED, + COMSIG_LIVING_STATUS_STAGGER, + ), PROC_REF(handle_stun)) + INVOKE_ASYNC(link_target, TYPE_PROC_REF(/mob, emote), "roar2") + toggle_buff(TRUE) + return ..() + +/datum/status_effect/mindmeld/on_remove() + link_target.balloon_alert(link_target, "mindmeld inactive") + REMOVE_TRAIT(link_target, TRAIT_MINDMELDED, TRAIT_STATUS_EFFECT(id)) + link_target.UnregisterSignal(link_target, list( + COMSIG_LIVING_STATUS_STUN, + COMSIG_LIVING_STATUS_KNOCKDOWN, + COMSIG_LIVING_STATUS_PARALYZE, + COMSIG_LIVING_STATUS_UNCONSCIOUS, + COMSIG_LIVING_STATUS_CONFUSED, + COMSIG_LIVING_STATUS_STAGGER, + )) + check_range() + return ..() + +/datum/status_effect/mindmeld/tick() + check_range() + +///Checks if mob is in buff range and toggles as required +/datum/status_effect/mindmeld/proc/check_range() + var/within_range = get_dist(link_target, link_partner) <= max_range + if(within_range != was_within_range) + was_within_range = within_range + toggle_buff(was_within_range) + +/// Toggles the buff on or off. +/datum/status_effect/mindmeld/proc/toggle_buff(toggle) + if(!toggle) + link_target.adjust_mob_accuracy(-accuracy_mod) + link_target.maxHealth -= health_mod + link_target.remove_movespeed_modifier(MOVESPEED_ID_MINDMELD) + toggle_particles(FALSE) + return + link_target.adjust_mob_accuracy(accuracy_mod) + link_target.maxHealth += health_mod + link_target.add_movespeed_modifier(MOVESPEED_ID_MINDMELD, TRUE, 0, NONE, FALSE, speed_mod) + toggle_particles(TRUE) + +/// Toggles particles on or off, adjusting their positioning to fit the buff's owner. +/datum/status_effect/mindmeld/proc/toggle_particles(toggle) + if(toggle) + link_target.add_filter("[id]", 3, outline_filter(1, LIGHT_COLOR_BLUE)) + else + link_target.remove_filter("[id]") + +/// Removes the status effect on death. +/datum/status_effect/mindmeld/proc/handle_stun(datum/source, amount, ignore_canstun) + SIGNAL_HANDLER + if(amount >= 3) + return + if(prob(stun_resistance)) + return COMPONENT_NO_STUN + +// *************************************** +// *********** Reknit form +// *************************************** +/datum/status_effect/reknit_form + id = "reknit_form" + tick_interval = 0.5 SECONDS + alert_type = /atom/movable/screen/alert/status_effect/reknit_form + +/datum/status_effect/reknit_form/on_creation(mob/living/new_owner, set_duration) + owner = new_owner + duration = set_duration + owner.add_filter("[id]", 0, outline_filter(2, LIGHT_COLOR_EMISSIVE_GREEN)) + return ..() + +/datum/status_effect/reknit_form/on_remove() + . = ..() + owner.remove_filter("[id]") + +/datum/status_effect/reknit_form/tick() + if(ishuman(owner)) + var/mob/living/carbon/human/human_owner = owner + human_owner.reagent_shock_modifier -= PAIN_REDUCTION_VERY_HEAVY //oof ow ouch + for(var/datum/limb/limb_to_fix AS in human_owner.limbs) + if(limb_to_fix.limb_status & (LIMB_BROKEN | LIMB_SPLINTED | LIMB_STABILIZED)) + if((prob(50) || limb_to_fix.brute_dam > limb_to_fix.min_broken_damage)) + continue + limb_to_fix.remove_limb_flags(LIMB_BROKEN | LIMB_SPLINTED | LIMB_STABILIZED) + limb_to_fix.add_limb_flags(LIMB_REPAIRED) + break + + owner.adjustCloneLoss(-3) + owner.adjustOxyLoss(-5) + owner.heal_overall_damage(5, 5) + owner.adjustToxLoss(-3) + +/atom/movable/screen/alert/status_effect/reknit_form + name = "Reknit form" + desc = "Your health is being restored." + icon_state = "xeno_rejuvenate" diff --git a/code/datums/status_effects/xeno_buffs.dm b/code/datums/status_effects/xeno_buffs.dm index cfa6d290f998d..c701129c79dda 100644 --- a/code/datums/status_effects/xeno_buffs.dm +++ b/code/datums/status_effects/xeno_buffs.dm @@ -331,64 +331,8 @@ enhancement_action.end_ability() // *************************************** -// *********** Rejuvenate +// *********** Psychic Link // *************************************** -/atom/movable/screen/alert/status_effect/xeno_rejuvenate - name = "Rejuvenation" - desc = "Your health is being restored." - icon_state = "xeno_rejuvenate" - -/datum/status_effect/xeno_rejuvenate - id = "xeno_rejuvenate" - tick_interval = 2 SECONDS - alert_type = /atom/movable/screen/alert/status_effect/xeno_rejuvenate - ///Amount of damage taken before reduction kicks in - var/tick_damage_limit - ///Amount of damage taken this tick - var/tick_damage - -/datum/status_effect/xeno_rejuvenate/on_creation(mob/living/new_owner, set_duration, tick_damage_limit) - owner = new_owner - duration = set_duration - src.tick_damage_limit = tick_damage_limit - RegisterSignals(owner, list(COMSIG_XENOMORPH_BRUTE_DAMAGE, COMSIG_XENOMORPH_BURN_DAMAGE), PROC_REF(handle_damage_taken)) - owner.add_movespeed_modifier(MOVESPEED_ID_GORGER_REJUVENATE, TRUE, 0, NONE, TRUE, GORGER_REJUVENATE_SLOWDOWN) - owner.add_filter("[id]m", 0, outline_filter(2, "#455d5762")) - return ..() - -/datum/status_effect/xeno_rejuvenate/on_remove() - . = ..() - UnregisterSignal(owner, list(COMSIG_XENOMORPH_BRUTE_DAMAGE, COMSIG_XENOMORPH_BURN_DAMAGE)) - owner.remove_movespeed_modifier(MOVESPEED_ID_GORGER_REJUVENATE) - owner.remove_filter("[id]m") - -/datum/status_effect/xeno_rejuvenate/tick() - var/mob/living/carbon/xenomorph/owner_xeno = owner - if(owner_xeno.plasma_stored < GORGER_REJUVENATE_COST) - to_chat(owner_xeno, span_notice("Not enough substance to sustain ourselves...")) - owner_xeno.remove_status_effect(STATUS_EFFECT_XENO_REJUVENATE) - return - - owner_xeno.plasma_stored -= GORGER_REJUVENATE_COST - new /obj/effect/temp_visual/telekinesis(get_turf(owner_xeno)) - to_chat(owner_xeno, span_notice("We feel our wounds close up.")) - - var/amount = owner_xeno.maxHealth * GORGER_REJUVENATE_HEAL - HEAL_XENO_DAMAGE(owner_xeno, amount, FALSE) - tick_damage = 0 - -///Handles damage received when the status effect is active -/datum/status_effect/xeno_rejuvenate/proc/handle_damage_taken(datum/source, amount, list/amount_mod) - SIGNAL_HANDLER - if(amount <= 0) - return - - tick_damage += amount - if(tick_damage < tick_damage_limit) - return - - amount_mod += min(amount * 0.75, 40) - #define PSYCHIC_LINK_COLOR "#2a888360" #define CALC_DAMAGE_REDUCTION(amount, amount_mod) \ if(amount <= 0) { \ @@ -398,9 +342,6 @@ amount = min(amount * redirect_mod, remaining_health); \ amount_mod += amount -// *************************************** -// *********** Psychic Link -// *************************************** /datum/status_effect/xeno_psychic_link id = "xeno_psychic_link" tick_interval = 2 SECONDS diff --git a/code/datums/weakrefs.dm b/code/datums/weakrefs.dm index 9827cd556a3fe..3c1e90f3d20b2 100644 --- a/code/datums/weakrefs.dm +++ b/code/datums/weakrefs.dm @@ -1,3 +1,5 @@ +/// Creates a weakref to the given input. +/// See /datum/weakref's documentation for more information. /proc/WEAKREF(datum/input) if(istype(input) && !QDELETED(input)) if(istype(input, /datum/weakref)) @@ -7,9 +9,49 @@ input.weak_reference = new /datum/weakref(input) return input.weak_reference -/datum/proc/create_weakref() //Forced creation for admin proccalls +/datum/proc/create_weakref() //Forced creation for admin proccalls return WEAKREF(src) +/** + * A weakref holds a non-owning reference to a datum. + * The datum can be referenced again using `resolve()`. + * + * To figure out why this is important, you must understand how deletion in + * BYOND works. + * + * Imagine a datum as a TV in a living room. When one person enters to watch + * TV, they turn it on. Others can come into the room and watch the TV. + * When the last person leaves the room, they turn off the TV because it's + * no longer being used. + * + * A datum being deleted tells everyone who's watching the TV to stop. + * If everyone leaves properly (AKA cleaning up their references), then the + * last person will turn off the TV, and everything is well. + * However, if someone is resistant (holds a hard reference after deletion), + * then someone has to walk in, drag them away, and turn off the TV forecefully. + * This process is very slow, and it's known as hard deletion. + * + * This is where weak references come in. Weak references don't count as someone + * watching the TV. Thus, when what it's referencing is destroyed, it will + * hopefully clean up properly, and limit hard deletions. + * + * A common use case for weak references is holding onto what created itself. + * For example, if a machine wanted to know what its last user was, it might + * create a `var/mob/living/last_user`. However, this is a strong reference to + * the mob, and thus will force a hard deletion when that mob is deleted. + * It is often better in this case to instead create a weakref to the user, + * meaning this type definition becomes `var/datum/weakref/last_user`. + * + * A good rule of thumb is that you should hold strong references to things + * that you *own*. For example, a dog holding a chew toy would be the owner + * of that chew toy, and thus a `var/obj/item/chew_toy` reference is fine + * (as long as it is cleaned up properly). + * However, a chew toy does not own its dog, so a `var/mob/living/dog/owner` + * might be inferior to a weakref. + * This is also a good rule of thumb to avoid circular references, such as the + * chew toy example. A circular reference that doesn't clean itself up properly + * will always hard delete. + */ /datum/weakref var/reference @@ -25,7 +67,46 @@ target?.weak_reference = null return ..() +/** + * Retrieves the datum that this weakref is referencing. + * + * This will return `null` if the datum was deleted. This MUST be respected. + */ /datum/weakref/proc/resolve() var/datum/D = locate(reference) return (!QDELETED(D) && D.weak_reference == src) ? D : null +/** + * SERIOUSLY READ THE AUTODOC COMMENT FOR THIS PROC BEFORE EVEN THINKING ABOUT USING IT + * + * Like resolve, but doesn't care if the datum is being qdeleted but hasn't been deleted yet. + * + * The return value of this proc leaves hanging references if the datum is being qdeleted but hasn't been deleted yet. + * + * Do not do anything that would create a lasting reference to the return value, such as giving it a tag, putting it on the map, + * adding it to an atom's contents or vis_contents, giving it a key (if it's a mob), attaching it to an atom (if it's an image), + * or assigning it to a datum or list referenced somewhere other than a temporary value. + * + * Unless you're resolving a weakref to a datum in a COMSIG_QDELETING signal handler registered on that very same datum, + * just use resolve instead. + */ +/datum/weakref/proc/hard_resolve() + var/datum/D = locate(reference) + return (D?.weak_reference == src) ? D : null + +/datum/weakref/vv_get_dropdown() + . = ..() + VV_DROPDOWN_OPTION(VV_HK_WEAKREF_RESOLVE, "Go to reference") + +/datum/weakref/vv_do_topic(list/href_list) + . = ..() + + if(!.) + return + + if(href_list[VV_HK_WEAKREF_RESOLVE]) + if(!check_rights(NONE)) + return + var/datum/R = resolve() + if(R) + usr.client.debug_variables(R) diff --git a/code/game/alternate_appearance.dm b/code/game/alternate_appearance.dm new file mode 100644 index 0000000000000..2e66443154b9b --- /dev/null +++ b/code/game/alternate_appearance.dm @@ -0,0 +1,134 @@ +GLOBAL_LIST_EMPTY(active_alternate_appearances) + +/atom/proc/remove_alt_appearance(key) + if(alternate_appearances) + for(var/K in alternate_appearances) + var/datum/atom_hud/alternate_appearance/AA = alternate_appearances[K] + if(AA.appearance_key == key) + AA.remove_from_hud(src) + break + +/atom/proc/add_alt_appearance(type, key, ...) + if(!type || !key) + return + if(alternate_appearances && alternate_appearances[key]) + return + if(!ispath(type, /datum/atom_hud/alternate_appearance)) + CRASH("Invalid type passed in: [type]") + var/list/arguments = args.Copy(2) + return new type(arglist(arguments)) + +/datum/atom_hud/alternate_appearance + var/appearance_key + var/transfer_overlays = FALSE + +/datum/atom_hud/alternate_appearance/New(key) + ..() + GLOB.active_alternate_appearances += src + appearance_key = key + + for(var/mob AS in GLOB.player_list) + if(mobShouldSee(mob)) + add_hud_to(mob) + +/datum/atom_hud/alternate_appearance/Destroy() + GLOB.active_alternate_appearances -= src + return ..() + +/datum/atom_hud/alternate_appearance/proc/onNewMob(mob/M) + if(mobShouldSee(M)) + add_hud_to(M) + +/datum/atom_hud/alternate_appearance/proc/mobShouldSee(mob/M) + return FALSE + +/datum/atom_hud/alternate_appearance/add_to_hud(atom/A, image/I) + . = ..() + if(.) + LAZYINITLIST(A.alternate_appearances) + A.alternate_appearances[appearance_key] = src + +/datum/atom_hud/alternate_appearance/remove_from_hud(atom/A) + . = ..() + if(.) + LAZYREMOVE(A.alternate_appearances, appearance_key) + +/datum/atom_hud/alternate_appearance/proc/copy_overlays(atom/other, cut_old) + return + +//an alternate appearance that attaches a single image to a single atom +/datum/atom_hud/alternate_appearance/basic + var/atom/target + var/image/image + var/add_ghost_version = FALSE + var/ghost_appearance + +/datum/atom_hud/alternate_appearance/basic/New(key, image/I, options = AA_TARGET_SEE_APPEARANCE) + ..() + transfer_overlays = options & AA_MATCH_TARGET_OVERLAYS + image = I + target = I.loc + if(transfer_overlays) + I.copy_overlays(target) + + hud_icons = list(appearance_key) + add_to_hud(target, I) + if((options & AA_TARGET_SEE_APPEARANCE) && ismob(target)) + add_hud_to(target) + if(add_ghost_version) + var/image/ghost_image = image(icon = I.icon , icon_state = I.icon_state, loc = I.loc) + ghost_image.override = FALSE + ghost_image.alpha = 128 + ghost_appearance = new /datum/atom_hud/alternate_appearance/basic/observers(key + "_observer", ghost_image, NONE) + +/datum/atom_hud/alternate_appearance/basic/Destroy() + . = ..() + QDEL_NULL(image) + target = null + if(ghost_appearance) + QDEL_NULL(ghost_appearance) + +/datum/atom_hud/alternate_appearance/basic/add_to_hud(atom/A) + LAZYINITLIST(A.hud_list) + A.hud_list[appearance_key] = image + . = ..() + +/datum/atom_hud/alternate_appearance/basic/remove_from_hud(atom/A) + . = ..() + A.hud_list -= appearance_key + if(. && !QDELETED(src)) + qdel(src) + +/datum/atom_hud/alternate_appearance/basic/copy_overlays(atom/other, cut_old) + image.copy_overlays(other, cut_old) + +/datum/atom_hud/alternate_appearance/basic/everyone + add_ghost_version = TRUE + +/datum/atom_hud/alternate_appearance/basic/everyone/mobShouldSee(mob/M) + return !isdead(M) + +/datum/atom_hud/alternate_appearance/basic/silicons + +/datum/atom_hud/alternate_appearance/basic/silicons/mobShouldSee(mob/M) + if(issilicon(M)) + return TRUE + return FALSE + +/datum/atom_hud/alternate_appearance/basic/observers + add_ghost_version = FALSE //just in case, to prevent infinite loops + +/datum/atom_hud/alternate_appearance/basic/observers/mobShouldSee(mob/M) + return isobserver(M) + +/datum/atom_hud/alternate_appearance/basic/one_person + var/mob/seer + +/datum/atom_hud/alternate_appearance/basic/one_person/mobShouldSee(mob/M) + if(M == seer) + return TRUE + return FALSE + +/datum/atom_hud/alternate_appearance/basic/one_person/New(key, image/I, mob/living/M) + ..(key, I, FALSE) + seer = M diff --git a/code/game/area/area.dm b/code/game/area/area.dm index 78637fd5e7b49..abccdde33f3d9 100644 --- a/code/game/area/area.dm +++ b/code/game/area/area.dm @@ -9,7 +9,7 @@ invisibility = INVISIBILITY_LIGHTING minimap_color = null - var/flags_alarm_state = NONE + var/alarm_state_flags = NONE var/unique = TRUE @@ -45,7 +45,7 @@ ///Is this area considered inside or outside var/outside = TRUE - var/flags_area = NONE + var/area_flags = NONE ///Cameras in this area var/list/cameras ///Keeps a lit of adjacent firelocks, used for alarms/ZAS @@ -206,8 +206,8 @@ /area/proc/firealert() if(name == "Space") //no fire alarms in space return - if(!(flags_alarm_state & ALARM_WARNING_FIRE)) - flags_alarm_state |= ALARM_WARNING_FIRE + if(!(alarm_state_flags & ALARM_WARNING_FIRE)) + alarm_state_flags |= ALARM_WARNING_FIRE update_icon() mouse_opacity = MOUSE_OPACITY_TRANSPARENT for(var/obj/machinery/door/firedoor/D in all_fire_doors) @@ -222,8 +222,8 @@ /area/proc/firereset() - if(flags_alarm_state & ALARM_WARNING_FIRE) - flags_alarm_state &= ~ALARM_WARNING_FIRE + if(alarm_state_flags & ALARM_WARNING_FIRE) + alarm_state_flags &= ~ALARM_WARNING_FIRE mouse_opacity = MOUSE_OPACITY_TRANSPARENT update_icon() @@ -238,16 +238,23 @@ a.cancelAlarm("Fire", src, src) -/area/update_icon() +/area/update_icon_state() + . = ..() var/I //More important == bottom. Fire normally takes priority over everything. - if(flags_alarm_state && (!requires_power || power_environ)) //It either doesn't require power or the environment is powered. And there is an alarm. - if(flags_alarm_state & ALARM_WARNING_READY) I = "alarm_ready" //Area is ready for something. - if(flags_alarm_state & ALARM_WARNING_EVAC) I = "alarm_evac" //Evacuation happening. - if(flags_alarm_state & ALARM_WARNING_ATMOS) I = "alarm_atmos" //Atmos breach. - if(flags_alarm_state & ALARM_WARNING_FIRE) I = "alarm_fire" //Fire happening. - if(flags_alarm_state & ALARM_WARNING_DOWN) I = "alarm_down" //Area is shut down. - - if(icon_state != I) icon_state = I //If the icon state changed, change it. Otherwise do nothing. + if(alarm_state_flags && (!requires_power || power_environ)) //It either doesn't require power or the environment is powered. And there is an alarm. + if(alarm_state_flags & ALARM_WARNING_READY) + I = "alarm_ready" //Area is ready for something. + if(alarm_state_flags & ALARM_WARNING_EVAC) + I = "alarm_evac" //Evacuation happening. + if(alarm_state_flags & ALARM_WARNING_ATMOS) + I = "alarm_atmos" //Atmos breach. + if(alarm_state_flags & ALARM_WARNING_FIRE) + I = "alarm_fire" //Fire happening. + if(alarm_state_flags & ALARM_WARNING_DOWN) + I = "alarm_down" //Area is shut down. + + if(icon_state != I) + icon_state = I //If the icon state changed, change it. Otherwise do nothing. /area/proc/powered(chan) diff --git a/code/game/area/areas/shuttles.dm b/code/game/area/areas/shuttles.dm index 9feee726edcbe..18983064390b1 100644 --- a/code/game/area/areas/shuttles.dm +++ b/code/game/area/areas/shuttles.dm @@ -27,7 +27,7 @@ /area/shuttle/dropship/Initialize(mapload, ...) . = ..() var/area/area = get_area(src) - area.flags_area |= MARINE_BASE + area.area_flags |= MARINE_BASE /area/shuttle/dropship/alamo name = "Dropship Alamo" @@ -47,7 +47,7 @@ /area/shuttle/minidropship/Initialize(mapload, ...) . = ..() var/area/area = get_area(src) - area.flags_area |= MARINE_BASE + area.area_flags |= MARINE_BASE /area/shuttle/ert name = "Emergency Response Team" @@ -183,7 +183,7 @@ /area/shuttle/canterbury/Initialize(mapload, ...) . = ..() var/area/area = get_area(src) - area.flags_area |= MARINE_BASE + area.area_flags |= MARINE_BASE /area/shuttle/canterbury/cic name = "Combat Information Center" diff --git a/code/game/area/bigred.dm b/code/game/area/bigred.dm index 0041d05b6f69b..7334736aa3ed9 100644 --- a/code/game/area/bigred.dm +++ b/code/game/area/bigred.dm @@ -248,12 +248,15 @@ outside = FALSE /area/bigredv2/outside/engineering - name = "Engineering Complex" + name = "West Engineering Complex" icon_state = "engine" ceiling = CEILING_METAL minimap_color = MINIMAP_AREA_ENGI outside = FALSE +/area/bigredv2/outside/engineering/east + name = "East Engineering Complex" + /area/bigredv2/outside/storage name = "Storage" icon_state = "storage" diff --git a/code/game/area/campaign_maps/jungle_outpost.dm b/code/game/area/campaign_maps/jungle_outpost.dm index f70ef395e3e12..1d29e76ca7af3 100644 --- a/code/game/area/campaign_maps/jungle_outpost.dm +++ b/code/game/area/campaign_maps/jungle_outpost.dm @@ -71,6 +71,10 @@ outside = FALSE minimap_color = MINIMAP_AREA_COLONY +/area/campaign/jungle_outpost/outpost/bar + name = "\improper Bar" + icon_state = "bar" + /area/campaign/jungle_outpost/outpost/medbay name = "\improper Medbay" icon_state = "medbay" diff --git a/code/game/area/campaign_maps/som_base.dm b/code/game/area/campaign_maps/som_base.dm index 535eb62f6692d..2afe7a03fb9cb 100644 --- a/code/game/area/campaign_maps/som_base.dm +++ b/code/game/area/campaign_maps/som_base.dm @@ -2,7 +2,7 @@ /area/rocinante_base name = "rocinante Polar Base" icon_state = "dark" - flags_area = ALWAYS_RADIO + area_flags = ALWAYS_RADIO /area/rocinante_base/ground name = "Ground" diff --git a/code/game/area/campaign_maps/som_raiding_base.dm b/code/game/area/campaign_maps/som_raiding_base.dm new file mode 100644 index 0000000000000..206dbb0e5c3ce --- /dev/null +++ b/code/game/area/campaign_maps/som_raiding_base.dm @@ -0,0 +1,223 @@ + +/area/campaign/som_raiding + icon_state = "lv-626" + area_flags = ALWAYS_RADIO + ambience = list('sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg') + +/area/campaign/som_raiding/ground + name = "Ground" + icon_state = "green" + always_unpowered = TRUE + ambience = list('sound/ambience/jungle_amb1.ogg') + +//Jungle +/area/campaign/som_raiding/ground/jungle + name = "Central Jungle" + icon_state = "central" + minimap_color = MINIMAP_AREA_JUNGLE + +/area/campaign/som_raiding/ground/jungle/south_west + name = "Southwestern Jungle" + icon_state = "southwest" + +/area/campaign/som_raiding/ground/jungle/south_east + name = "Southeastern Jungle" + icon_state = "southeast" + +/area/campaign/som_raiding/ground/jungle/north_west + name = "Northwestern Jungle" + icon_state = "northwest" + +/area/campaign/som_raiding/ground/jungle/north_east + name = "Northeastern Jungle" + icon_state = "northeast" + +/area/campaign/som_raiding/ground/jungle/west + name = "Western Jungle" + icon_state = "west" + +/area/campaign/som_raiding/ground/jungle/south + name = "Southern Jungle" + icon_state = "south" + +/area/campaign/som_raiding/ground/jungle/east + name = "Eastern Jungle" + icon_state = "east" + +/area/campaign/som_raiding/ground/jungle/north + name = "Northern Jungle" + icon_state = "north" + +//river +/area/campaign/som_raiding/ground/river + name = "\improper Southern River" + icon_state = "blueold" + +/area/campaign/som_raiding/ground/river/north + name = "\improper Northern River" + +/area/campaign/som_raiding/ground/river/west + name = "\improper Western River" + +/area/campaign/som_raiding/ground/river/east + name = "\improper Eastern River" + +/area/campaign/som_raiding/ground/river/lake + name = "\improper Southern Lake" + +//outpost +/area/campaign/som_raiding/cave + name = "\improper Mountain" + icon_state = "cave" + ceiling = CEILING_UNDERGROUND + outside = FALSE + minimap_color = MINIMAP_AREA_CAVES + +/area/campaign/som_raiding/cave/tunnel + name = "\improper Old tunnels" + icon_state = "explored" + +//outpost +/area/campaign/som_raiding/outpost + name = "\improper Outpost" + icon_state = "green" + ceiling = CEILING_UNDERGROUND_METAL + outside = FALSE + minimap_color = MINIMAP_AREA_COLONY + +/area/campaign/som_raiding/outpost/firing_range + name = "\improper Firing range" + +/area/campaign/som_raiding/outpost/construction + name = "\improper Construction site" + +/area/campaign/som_raiding/outpost/central_corridor + name = "\improper Central corridor" + +/area/campaign/som_raiding/outpost/maintenance + name = "\improper Southwest maintenance" + minimap_color = MINIMAP_AREA_CAVES + icon_state = "maint_security_starboard" + +/area/campaign/som_raiding/outpost/maintenance/engie + name = "\improper Engineering maintenance" + icon_state = "maint_engine" + +/area/campaign/som_raiding/outpost/maintenance/operation + name = "\improper Operations maintenance" + icon_state = "apmaint" + +/area/campaign/som_raiding/outpost/maintenance/cic + name = "\improper CIC maintenance" + icon_state = "fpmaint" + +/area/campaign/som_raiding/outpost/maintenance/req + name = "\improper Requisitions maintenance" + icon_state = "maint_cargo" + +/area/campaign/som_raiding/outpost/maintenance/med + name = "\improper medbay maintenance" + icon_state = "maint_medbay" + +/area/campaign/som_raiding/outpost/medbay + name = "\improper Medbay" + icon_state = "medbay" + minimap_color = MINIMAP_AREA_MEDBAY + +/area/campaign/som_raiding/outpost/security + name = "\improper Armoury" + icon_state = "security" + minimap_color = MINIMAP_AREA_SEC + +/area/campaign/som_raiding/outpost/security/south_post + name = "\improper South security checkpoint" + +/area/campaign/som_raiding/outpost/security/southeast_post + name = "\improper Southeast security checkpoint" + +/area/campaign/som_raiding/outpost/security/west_post + name = "\improper West security checkpoint" + +/area/campaign/som_raiding/outpost/security/north_post + name = "\improper North security checkpoint" + +/area/campaign/som_raiding/outpost/security/cargo_post + name = "\improper Caro security checkpoint" + +/area/campaign/som_raiding/outpost/command + name = "\improper Operations" + icon_state = "bridge" + minimap_color = MINIMAP_AREA_COMMAND + +/area/campaign/som_raiding/outpost/command/captain + name = "\improper Executive Office" + icon_state = "captain" + +/area/campaign/som_raiding/outpost/command/telecom + name = "\improper Telecommunications" + icon_state = "tcomms" + +/area/campaign/som_raiding/outpost/command/cic + name = "\improper Combat Information Centre" + +/area/campaign/som_raiding/outpost/command/north + name = "\improper North offices" + +/area/campaign/som_raiding/outpost/command/living + name = "\improper Officer's quarters" + +/area/campaign/som_raiding/outpost/engineering + name = "\improper Engineering" + icon_state = "engine_smes" + minimap_color = MINIMAP_AREA_ENGI + +/area/campaign/som_raiding/outpost/living + name = "\improper Barracks" + icon_state = "Sleep" + minimap_color = MINIMAP_AREA_LIVING + +/area/campaign/som_raiding/outpost/living/briefing + name = "\improper Briefing room" + icon_state = "conference" + +/area/campaign/som_raiding/outpost/living/bathroom + name = "\improper Bathrooms" + icon_state = "restrooms" + +/area/campaign/som_raiding/outpost/living/canteen + name = "\improper Canteen" + icon_state = "cafeteria" + +/area/campaign/som_raiding/outpost/living/kitchen + name = "\improper Kitchen" + icon_state = "kitchen" + +/area/campaign/som_raiding/outpost/req + name = "\improper Main cargo bay" + icon_state = "quart" + minimap_color = MINIMAP_AREA_REQ + +/area/campaign/som_raiding/outpost/req/north + name = "\improper North cargo bay" + +/area/campaign/som_raiding/outpost/req/aux + name = "\improper North auxiliary storage" + icon_state = "quart" + minimap_color = MINIMAP_AREA_REQ + +/area/campaign/som_raiding/outpost/req/secure + name = "\improper Secure storage" + icon_state = "quart" + minimap_color = MINIMAP_AREA_REQ + +/area/campaign/som_raiding/outpost/req/qm + name = "\improper Quartermaster's Office" + icon_state = "quartoffice" + +/area/campaign/som_raiding/outpost/tunnel + name = "\improper South tunnel" + icon_state = "explored" + ceiling = CEILING_UNDERGROUND + +/area/campaign/som_raiding/outpost/tunnel/west + name = "\improper West tunnel" diff --git a/code/game/area/daedalusprison.dm b/code/game/area/daedalusprison.dm new file mode 100644 index 0000000000000..ba9fb7c836859 --- /dev/null +++ b/code/game/area/daedalusprison.dm @@ -0,0 +1,414 @@ +// Daedalus Prison Areas + +//Caves +/area/daedalusprison/caves + name = "Caves" + icon_state = "cave" + ambience = list('sound/ambience/ambimine.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambisin4.ogg') + ceiling = CEILING_DEEP_UNDERGROUND + outside = FALSE + minimap_color = MINIMAP_AREA_CAVES + always_unpowered = TRUE + +/area/daedalusprison/caves/rock + name = "Enclosed Area" + icon_state = "transparent" + +/area/daedalusprison/caves/northwest + name = "Northwestern Caves" + icon_state = "northwest2" + +/area/daedalusprison/caves/northwest/garbledradio + ceiling = CEILING_UNDERGROUND + +/area/daedalusprison/caves/north + name = "Northern Caves" + icon_state = "north2" + +/area/daedalusprison/caves/north/garbledradio + ceiling = CEILING_UNDERGROUND + +/area/daedalusprison/caves/nukestorage + name = "Nuclear Storage" + icon_state = "nuke_storage" + ceiling = CEILING_DEEP_UNDERGROUND_METAL + minimap_color = MINIMAP_AREA_ENGI_CAVE + always_unpowered = FALSE + +/area/daedalusprison/caves/research + name = "Biologcal Research Facility" + icon_state = "research" + ceiling = CEILING_DEEP_UNDERGROUND_METAL + minimap_color = MINIMAP_AREA_RESEARCH_CAVE + always_unpowered = FALSE + +/area/daedalusprison/caves/northeast + name = "Northeastern Caves" + icon_state = "northeast2" + +/area/daedalusprison/caves/northeast/garbledradio + ceiling = CEILING_UNDERGROUND + +/area/daedalusprison/caves/southwest + name = "Southwestern Caves" + icon_state = "southwest2" + +/area/daedalusprison/caves/southwest/garbledradio + ceiling = CEILING_UNDERGROUND + +/area/daedalusprison/caves/south + name = "Southern Tunnel" + icon_state = "south2" + ceiling = CEILING_UNDERGROUND + +/area/daedalusprison/caves/east + name = "Eastern Tunnel" + icon_state = "east2" + +//Outside Area +/area/daedalusprison/outside + name = "Colony Grounds" + icon_state = "cliff_blocked" + ceiling = CEILING_NONE + outside = TRUE + minimap_color = MINIMAP_AREA_COLONY + always_unpowered = TRUE + temperature = ICE_COLONY_TEMPERATURE + +/area/daedalusprison/outside/southeast + name = "Southeastern Colony" + icon_state = "southeast" + +/area/daedalusprison/outside/south + name = "Southern Colony" + icon_state = "south" + +/area/daedalusprison/outside/southwest + name = "Southwestern Colony" + icon_state = "southeast" + +/area/daedalusprison/outside/east + name = "Eastern Grounds" + icon_state = "east" + +/area/daedalusprison/outside/northeast + name = "Northeastern Grounds" + icon_state = "northeast" + +/area/daedalusprison/outside/north + name = "Northern Grounds" + icon_state = "north" + +//Inside area parent, not used. +/area/daedalusprison/inside + name = "Inside" + icon_state = "red" + ceiling = CEILING_METAL + outside = FALSE + +/area/daedalusprison/inside/engineering + name = "Engineering" + icon_state = "engine" + minimap_color = MINIMAP_AREA_ENGI + +/area/daedalusprison/inside/colonydorms + name = "Colony Dorms" + icon_state = "Sleep" + minimap_color = MINIMAP_AREA_LIVING + +/area/daedalusprison/inside/bar + name = "Colony Bar" + icon_state = "bar" + minimap_color = MINIMAP_AREA_LIVING + +/area/daedalusprison/inside/cargo + name = "Colony Cargo" + icon_state = "primarystorage" + minimap_color = MINIMAP_AREA_REQ + +/area/daedalusprison/inside/colonyauxstorage + name = "Colony Auxillary Storage" + icon_state = "storage" + always_unpowered = TRUE + minimap_color = MINIMAP_AREA_REQ + +/area/daedalusprison/inside/bunker + name = "Landing Zone Bunker" + icon_state = "shuttlered" + minimap_color = MINIMAP_AREA_SEC + +/area/daedalusprison/inside/bunker/west + name = "Western Bunker" + +/area/daedalusprison/inside/bunker/center + name = "Central Bunker" + +/area/daedalusprison/inside/bunker/east + name = "Eastern Bunker" + +/area/daedalusprison/inside/prisonshower + name = "Prison Showers" + icon_state = "decontamination" + minimap_color = MINIMAP_AREA_CELL_MED + +/area/daedalusprison/inside/habitationnorth + name = "Prison North Habitation" + icon_state = "cells_med_n" + minimap_color = MINIMAP_AREA_CELL_MED + +/area/daedalusprison/inside/habitationsouth + name = "Prison South Habitation" + icon_state = "cells_med_s" + minimap_color = MINIMAP_AREA_CELL_MED + +/area/daedalusprison/inside/studyroom + name = "Prison Study Room" + icon_state = "library" + minimap_color = MINIMAP_AREA_LIVING + +/area/daedalusprison/inside/mining + name = "Prison Mineral Processing" + icon_state = "mining" + ceiling = CEILING_OBSTRUCTED + minimap_color = MINIMAP_AREA_CELL_MED + +/area/daedalusprison/inside/westernbooth + name = "Prison Western Security Booth" + icon_state = "brig" + minimap_color = MINIMAP_AREA_SEC + +/area/daedalusprison/inside/westcomputerlab + name = "Prison Western Computer Lab" + icon_state = "server" + minimap_color = MINIMAP_AREA_LIVING + +/area/daedalusprison/inside/substation + name = "Prison Substation" + icon_state = "substation" + minimap_color = MINIMAP_AREA_ENGI + +/area/daedalusprison/inside/prisongarden + name = "Prison Garden" + icon_state = "garden" + minimap_color = MINIMAP_AREA_LIVING + +/area/daedalusprison/inside/centralhalls + name = "Prison Central Halls" + icon_state = "hallC1" + +/area/daedalusprison/inside/laundromat + name = "Prison Laundromat" + icon_state = "LP" + minimap_color = MINIMAP_AREA_LIVING + +/area/daedalusprison/inside/laundromat/collapsedroof + outside = TRUE + ceiling = CEILING_NONE + always_unpowered = TRUE + +/area/daedalusprison/inside/mechanicshop + name = "Prison Mechanical Shop" + icon_state = "engine" + minimap_color = MINIMAP_AREA_ENGI + +/area/daedalusprison/inside/staffrestroom + name = "Prison Staff Restroom" + icon_state = "toilet" + minimap_color = MINIMAP_AREA_LIVING + +/area/daedalusprison/inside/auxstorage + name = "Prison Auxillary Storage" + icon_state = "storage" + minimap_color = MINIMAP_AREA_REQ + +/area/daedalusprison/inside/staffbreakroom + name = "Prison Staff Breakroom" + icon_state = "Holodeck" + minimap_color = MINIMAP_AREA_LIVING + +/area/daedalusprison/inside/northclass + name = "Prison Northern Classroom" + icon_state = "law" + minimap_color = MINIMAP_AREA_RESEARCH + +/area/daedalusprison/inside/southclass + name = "Prison Southern Classroom" + icon_state = "law" + minimap_color = MINIMAP_AREA_RESEARCH + +/area/daedalusprison/inside/centralbooth + name = "Prison Central Security Booth" + icon_state = "brig" + minimap_color = MINIMAP_AREA_SEC + +/area/daedalusprison/inside/recreation + name = "Prison Recreation" + icon_state = "showroom" + minimap_color = MINIMAP_AREA_LIVING + +/area/daedalusprison/inside/janitorial + name = "Prison Janitorial Room" + icon_state = "janitor" + minimap_color = MINIMAP_AREA_RESEARCH + +/area/daedalusprison/inside/freezer + name = "Prison Freezer" + icon_state = "kitchen" + minimap_color = MINIMAP_AREA_ESCAPE + +/area/daedalusprison/inside/kitchen + name = "Prison Kitchen" + icon_state = "kitchen" + minimap_color = MINIMAP_AREA_ESCAPE + +/area/daedalusprison/inside/cafeteria + name = "Prison Cafeteria" + icon_state = "cafeteria" + minimap_color = MINIMAP_AREA_ESCAPE + +/area/daedalusprison/inside/sportstorage + name = "Prison Sports Storage" + icon_state = "auxstorage" + minimap_color = MINIMAP_AREA_REQ + +/area/daedalusprison/inside/northmeetingroom + name = "Prison Meeting Room" + icon_state = "conference" + minimap_color = MINIMAP_AREA_ESCAPE + +/area/daedalusprison/inside/library + name = "Prison Library" + icon_state = "library" + minimap_color = MINIMAP_AREA_LIVING + +/area/daedalusprison/inside/execution + name = "Prison Execution" + icon_state = "sec_backroom" + minimap_color = MINIMAP_AREA_LIVING + +/area/daedalusprison/inside/basketball + name = "Prison Basketball Court" + icon_state = "anog" + minimap_color = MINIMAP_AREA_ESCAPE + +/area/daedalusprison/inside/lobby + name = "Prison Lobby" + icon_state = "red" + minimap_color = MINIMAP_AREA_LIVING + +/area/daedalusprison/inside/corporateoffice + name = "Liason Office" + icon_state = "blueold" + minimap_color = MINIMAP_AREA_ESCAPE + +/area/daedalusprison/inside/southmeetingroom + name = "Corporate Meeting Room" + icon_state = "party" + minimap_color = MINIMAP_AREA_ESCAPE + +/area/daedalusprison/inside/garage + name = "Prison Garage" + icon_state = "garage" + minimap_color = MINIMAP_AREA_REQ + +/area/daedalusprison/inside/easternhalls + name = "Prison Eastern Hallways" + icon_state = "hallS" + +/area/daedalusprison/inside/gym + name = "Prison Gym" + icon_state = "bluenew" + minimap_color = MINIMAP_AREA_ESCAPE + +/area/daedalusprison/inside/chapel + name = "Prison Chapel" + icon_state = "chapel" + minimap_color = MINIMAP_AREA_LIVING + +/area/daedalusprison/inside/security + name = "Security" + icon_state = "brig" + minimap_color = MINIMAP_AREA_SEC + +/area/daedalusprison/inside/security/easternbooth + name = "Prison Eastern Security Booth" + +/area/daedalusprison/inside/security/secbreakroom + name = "Prison Security Break Room" + +/area/daedalusprison/inside/security/cameras + name = "Prison Camera Center" + +/area/daedalusprison/inside/security/warden + name = "Prison Warden Office" + +/area/daedalusprison/inside/security/office + name = "Prison Security Office" + +/area/daedalusprison/inside/security/interrogation + name = "Prison Interrogation" + icon_state = "interrogation" + +/area/daedalusprison/inside/security/medsec + name = "Prison Medbay Security" + ceiling = CEILING_OBSTRUCTED + +/area/daedalusprison/inside/medical + name = "Prison Infirmary" + icon_state = "medbay" + minimap_color = MINIMAP_AREA_MEDBAY + ceiling = CEILING_OBSTRUCTED + +/area/daedalusprison/inside/medical/chemistry + name = "Prison Chemistry" + +/area/daedalusprison/inside/medical/treatment + name = "Prison Infirmary Treatment" + +/area/daedalusprison/inside/barracks + name = "Prison Security Barracks" + icon_state = "armory" + minimap_color = MINIMAP_AREA_SEC_CAVE + +/area/daedalusprison/inside/garden + name = "Hydroponics Garden" + icon_state = "garden" + minimap_color = MINIMAP_AREA_LIVING + +/area/daedalusprison/inside/hydroponics + name = "Hydroponics" + icon_state = "hydro" + minimap_color = MINIMAP_AREA_LIVING + +/area/daedalusprison/inside/hydroponicstesting + name = "Hydroponics Testing" + icon_state = "hydro_north" + minimap_color = MINIMAP_AREA_LIVING + +/area/daedalusprison/inside/seccheckpoint + name = "Security Checkpoint" + icon_state = "brig" + minimap_color = MINIMAP_AREA_SEC + +/area/daedalusprison/inside/secoffices + name = "Security Checkpoint Offices" + icon_state = "brig" + minimap_color = MINIMAP_AREA_SEC + +/area/daedalusprison/inside/pmcdropship + name = "Crashed PMC Dropship" + icon_state = "shuttle" + minimap_color = MINIMAP_AREA_COLONY + always_unpowered = TRUE + +/area/daedalusprison/inside/landingzoneone + name = "Landing Zone One" + icon_state = "landingzone1" + area_flags = NO_DROPPOD + minimap_color = MINIMAP_AREA_LZ + +/area/daedalusprison/inside/telecomms + name = "Telecomms" + icon_state = "tcomsatcham" + area_flags = NO_DROPPOD + requires_power = FALSE diff --git a/code/game/area/desertdam.dm b/code/game/area/desertdam.dm index 29b33c187f82c..26de7e7b3ee19 100644 --- a/code/game/area/desertdam.dm +++ b/code/game/area/desertdam.dm @@ -1004,13 +1004,13 @@ name = "LZ1 'Admin'" icon_state = "tcomsatcham" requires_power = 0 - flags_area = NO_DROPPOD + area_flags = NO_DROPPOD /area/desert_dam/landing/console2 name = "LZ2 'Supply'" icon_state = "tcomsatcham" requires_power = 0 - flags_area = NO_DROPPOD + area_flags = NO_DROPPOD //Transit Shuttle /area/shuttle/tri_trans1/alpha diff --git a/code/game/area/general.dm b/code/game/area/general.dm index 51f7079f48816..ba712738435ab 100644 --- a/code/game/area/general.dm +++ b/code/game/area/general.dm @@ -10,7 +10,7 @@ ambience = list('sound/ambience/ambispace.ogg') temperature = TCMB pressure = 0 - flags_area = NO_DROPPOD + area_flags = NO_DROPPOD ///What type of debuff do we apply when someone enters this area? var/debuff_type = /datum/status_effect/spacefreeze @@ -42,7 +42,7 @@ /area/shuttle //DO NOT TURN THE dynamic_lighting STUFF ON FOR SHUTTLES. IT BREAKS THINGS. requires_power = FALSE outside = FALSE - flags_area = OB_CAS_IMMUNE + area_flags = OB_CAS_IMMUNE minimap_color = MINIMAP_AREA_LZ /area/shuttle/arrival @@ -1201,7 +1201,7 @@ requires_power = 0 name = "Abandoned Test Room" icon_state = "storage" - flags_area = NO_DROPPOD + area_flags = NO_DROPPOD //DJSTATION diff --git a/code/game/area/lawankaoutpost.dm b/code/game/area/lawankaoutpost.dm index 4284779ac0317..e547c2ad08d24 100644 --- a/code/game/area/lawankaoutpost.dm +++ b/code/game/area/lawankaoutpost.dm @@ -210,11 +210,11 @@ /area/lawankaoutpost/colony/landingzoneone name = "Landing Zone One" icon_state = "landingzone1" - flags_area = NO_DROPPOD + area_flags = NO_DROPPOD minimap_color = MINIMAP_AREA_LZ /area/lawankaoutpost/colony/landingzonetwo name = "Landing Zone Two" icon_state = "landingzone2" - flags_area = NO_DROPPOD + area_flags = NO_DROPPOD minimap_color = MINIMAP_AREA_LZ diff --git a/code/game/area/lv624.dm b/code/game/area/lv624.dm index b7519f1bce350..1d51f20e1870c 100644 --- a/code/game/area/lv624.dm +++ b/code/game/area/lv624.dm @@ -477,17 +477,17 @@ /area/lv624/lazarus/console name = "\improper Shuttle Console" icon_state = "tcomsatcham" - flags_area = NO_DROPPOD + area_flags = NO_DROPPOD requires_power = FALSE /area/lv624/lazarus/spaceport name = "\improper Eastern Space Port" icon_state = "landingzone1" - flags_area = NO_DROPPOD + area_flags = NO_DROPPOD minimap_color = MINIMAP_AREA_LZ /area/lv624/lazarus/spaceport2 name = "\improper Western Space Port" icon_state = "landingzone2" - flags_area = NO_DROPPOD + area_flags = NO_DROPPOD minimap_color = MINIMAP_AREA_LZ diff --git a/code/game/area/magmoor_digsite.dm b/code/game/area/magmoor_digsite.dm index ea23beff76252..aa128e504788a 100644 --- a/code/game/area/magmoor_digsite.dm +++ b/code/game/area/magmoor_digsite.dm @@ -22,7 +22,7 @@ /area/magmoor/volcano name = "Magmoor Central Fissure" ceiling = CEILING_DEEP_UNDERGROUND - flags_area = NO_DROPPOD + area_flags = NO_DROPPOD always_unpowered = TRUE //Caves diff --git a/code/game/area/mainship.dm b/code/game/area/mainship.dm index 5c9cc6b3af9cb..7ea34503b97b9 100644 --- a/code/game/area/mainship.dm +++ b/code/game/area/mainship.dm @@ -157,6 +157,11 @@ icon_state = "livingspace" minimap_color = MINIMAP_AREA_COMMAND +/area/mainship/living/mechpilotquarters + name = "Mech Pilot Quarters" + icon_state = "blueold" + minimap_color = MINIMAP_AREA_COMMAND + /area/mainship/hallways/exoarmor name = "Vehicle Armor Storage" icon_state = "exoarmor" diff --git a/code/game/area/orion_outpost.dm b/code/game/area/orion_outpost.dm index 76830cb9f7e99..b13109feb1feb 100644 --- a/code/game/area/orion_outpost.dm +++ b/code/game/area/orion_outpost.dm @@ -30,7 +30,7 @@ /area/orion_outpost/surface/landing_pad name = "Landing Pad 1" icon_state = "landing_pad" - flags_area = NO_DROPPOD + area_flags = NO_DROPPOD ceiling = CEILING_METAL outside = FALSE minimap_color = MINIMAP_AREA_LZ @@ -46,7 +46,7 @@ /area/orion_outpost/surface/landing_pad_2 name = "Landing Pad 2" icon_state = "landing_pad" - flags_area = NO_DROPPOD + area_flags = NO_DROPPOD ceiling = CEILING_METAL outside = FALSE minimap_color = MINIMAP_AREA_LZ diff --git a/code/game/area/patricks_rest.dm b/code/game/area/patricks_rest.dm index 6e3942ab9f534..f0d3c28c581b0 100644 --- a/code/game/area/patricks_rest.dm +++ b/code/game/area/patricks_rest.dm @@ -30,7 +30,7 @@ /area/patricks_rest/surface/landing_pad name = "Landing Pad 1" icon_state = "landing_pad" - flags_area = NO_DROPPOD + area_flags = NO_DROPPOD ceiling = CEILING_METAL outside = FALSE minimap_color = MINIMAP_AREA_LZ @@ -45,7 +45,7 @@ /area/patricks_rest/surface/landing_pad_2 name = "Landing Pad 2" icon_state = "landing_pad" - flags_area = NO_DROPPOD + area_flags = NO_DROPPOD ceiling = CEILING_METAL outside = FALSE minimap_color = MINIMAP_AREA_LZ diff --git a/code/game/area/slumbridge.dm b/code/game/area/slumbridge.dm index f0b9884935b49..c3d75e0723ebe 100644 --- a/code/game/area/slumbridge.dm +++ b/code/game/area/slumbridge.dm @@ -331,17 +331,17 @@ /area/slumbridge/landingzoneone name = "Landing Zone One" icon_state = "landingzone1" - flags_area = NO_DROPPOD + area_flags = NO_DROPPOD minimap_color = MINIMAP_AREA_LZ /area/slumbridge/landingzonetwo name = "Landing Zone Two" icon_state = "landingzone2" - flags_area = NO_DROPPOD + area_flags = NO_DROPPOD minimap_color = MINIMAP_AREA_LZ /area/slumbridge/console name = "\improper Shuttle Console" icon_state = "tcomsatcham" - flags_area = NO_DROPPOD + area_flags = NO_DROPPOD requires_power = FALSE diff --git a/code/game/area/sulaco.dm b/code/game/area/sulaco.dm index fbe0db09b7690..904520db7757b 100644 --- a/code/game/area/sulaco.dm +++ b/code/game/area/sulaco.dm @@ -338,7 +338,7 @@ /area/shuttle/drop1/lz1 name = "Alamo Landing Zone" icon_state = "away1" - flags_area = NONE + area_flags = NONE /area/shuttle/drop2/Enter(atom/movable/arrived, direction) if(istype(arrived, /obj/structure/barricade)) @@ -376,7 +376,7 @@ /area/shuttle/drop2/lz2 name = "Normandy Landing Zone" icon_state = "away2" - flags_area = NONE + area_flags = NONE diff --git a/code/game/atoms.dm b/code/game/atoms/_atom.dm similarity index 83% rename from code/game/atoms.dm rename to code/game/atoms/_atom.dm index e5aa3e93f3ee2..49666d6277de7 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms/_atom.dm @@ -4,7 +4,7 @@ appearance_flags = TILE_BOUND var/level = 2 - var/flags_atom = NONE + var/atom_flags = NONE var/datum/reagents/reagents = null var/list/fingerprints @@ -39,9 +39,6 @@ ///How much does this atom block the explosion's shock wave. var/explosion_block = 0 - ///overlays managed by update_overlays() to prevent removing overlays that weren't added by the same proc - var/list/managed_overlays - var/datum/component/orbiter/orbiters var/datum/proximity_monitor/proximity_monitor @@ -122,6 +119,11 @@ ///Cooldown for telling someone they're buckled COOLDOWN_DECLARE(buckle_message_cooldown) + ///vis overlays managed by SSvis_overlays to automaticaly turn them like other overlays. + var/list/managed_vis_overlays + ///The list of alternate appearances for this atom + var/list/alternate_appearances + /* We actually care what this returns, since it can return different directives. Not specifically here, but in other variations of this. As a general safety, @@ -142,6 +144,11 @@ directive is properly returned. if(isturf(loc)) loc.fingerprints = fingerprints + if(alternate_appearances) + for(var/K in alternate_appearances) + var/datum/atom_hud/alternate_appearance/AA = alternate_appearances[K] + AA.remove_from_hud(src) + return ..() //=========================================================================== @@ -228,6 +235,7 @@ directive is properly returned. /atom/proc/emp_act(severity) + SEND_SIGNAL(src, COMSIG_ATOM_EMP_ACT, severity) return @@ -356,32 +364,6 @@ directive is properly returned. SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE, user, .) - -/// Updates the icon of the atom -/atom/proc/update_icon() - var/signalOut = SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON) - - if(!(signalOut & COMSIG_ATOM_NO_UPDATE_ICON_STATE)) - update_icon_state() - - if(!(signalOut & COMSIG_ATOM_NO_UPDATE_OVERLAYS)) - var/list/new_overlays = update_overlays() - if(managed_overlays) - cut_overlay(managed_overlays) - managed_overlays = null - if(length(new_overlays)) - managed_overlays = new_overlays - add_overlay(new_overlays) - -/// Updates the icon state of the atom -/atom/proc/update_icon_state() - -/// Updates the overlays of the atom -/atom/proc/update_overlays() - SHOULD_CALL_PARENT(TRUE) - . = list() - SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_OVERLAYS, .) - /// Checks if the colors given are different and if so causes a greyscale icon update /// The colors argument can be either a list or the full color string /atom/proc/set_greyscale_colors(list/colors, update=TRUE) @@ -434,7 +416,7 @@ directive is properly returned. */ /* RUTGMC DELETION /atom/proc/ex_act(severity, epicenter_dist, impact_range) - if(!(flags_atom & PREVENT_CONTENTS_EXPLOSION)) + if(!(atom_flags & PREVENT_CONTENTS_EXPLOSION)) contents_explosion(severity, epicenter_dist, impact_range) SEND_SIGNAL(src, COMSIG_ATOM_EX_ACT, severity, epicenter_dist, impact_range) */ @@ -442,12 +424,21 @@ directive is properly returned. /atom/proc/fire_act() return +///Effects of lava. Return true where we want the lava to keep processing +/atom/proc/lava_act() + if(resistance_flags & INDESTRUCTIBLE) + return FALSE + fire_act() + return TRUE /atom/proc/hitby(atom/movable/AM, speed = 5) if(density) AM.stop_throw() return TRUE +///Psionic interaction with this atom +/atom/proc/psi_act(psi_power, mob/living/user) + return /atom/proc/GenerateTag() return @@ -647,9 +638,9 @@ directive is properly returned. /atom/proc/Initialize(mapload, ...) SHOULD_CALL_PARENT(TRUE) SHOULD_NOT_SLEEP(TRUE) - if(flags_atom & INITIALIZED) + if(atom_flags & INITIALIZED) stack_trace("Warning: [src]([type]) initialized multiple times!") - flags_atom |= INITIALIZED + atom_flags |= INITIALIZED update_greyscale() @@ -695,17 +686,138 @@ directive is properly returned. SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir) dir = newdir - /atom/vv_get_dropdown() . = ..() - . += "---" - var/turf/curturf = get_turf(src) - if(curturf) - .["Jump to"] = "?_src_=holder;[HrefToken()];observecoordjump=1;X=[curturf.x];Y=[curturf.y];Z=[curturf.z]" - .["Modify Transform"] = "?_src_=vars;[HrefToken()];modtransform=[REF(src)]" - .["Add reagent"] = "?_src_=vars;[HrefToken()];addreagent=[REF(src)]" - .["Modify Filters"] = "?_src_=vars;[HrefToken()];filteredit=[REF(src)]" - .["Modify Greyscale Colors"] = "?_src_=vars;[HrefToken()];modify_greyscale=[REF(src)]" + VV_DROPDOWN_OPTION("", "---------") + VV_DROPDOWN_OPTION(VV_HK_ATOM_JUMP_TO, "Jump To") + VV_DROPDOWN_OPTION(VV_HK_MODIFY_TRANSFORM, "Modify Transform") + VV_DROPDOWN_OPTION(VV_HK_ADD_REAGENT, "Add reagent") + VV_DROPDOWN_OPTION(VV_HK_MODIFY_FILTERS, "Modify Filters") + VV_DROPDOWN_OPTION(VV_HK_MODIFY_GREYSCALE_COLORS, "Modify Greyscale Colors") + VV_DROPDOWN_OPTION(VV_HK_EDIT_COLOR_MATRIX, "Edit Color as Matrix") + VV_DROPDOWN_OPTION(VV_HK_TEST_MATRIXES, "Test Matrices") + +/atom/vv_do_topic(list/href_list) + . = ..() + + if(!.) + return + + if(href_list[VV_HK_ATOM_JUMP_TO]) + if(!check_rights(NONE)) + return + var/x = text2num(href_list["X"]) + var/y = text2num(href_list["Y"]) + var/z = text2num(href_list["Z"]) + var/client/C = usr.client + + if(x == 0 && y == 0 && z == 0) + return + + var/message + if(!isobserver(usr)) + usr.client.holder.admin_ghost() + message = TRUE + + var/mob/dead/observer/O = C.mob + var/turf/T = locate(x, y, z) + O.forceMove(T) + + if(message) + log_admin("[key_name(O)] jumped to coordinates [AREACOORD(T)].") + message_admins("[ADMIN_TPMONTY(O)] jumped to coordinates [ADMIN_VERBOSEJMP(T)].") + + if(href_list[VV_HK_MODIFY_TRANSFORM]) + if(!check_rights(R_DEBUG)) + return + if(!istype(src)) + return + var/result = input(usr, "Choose the transformation to apply", "Modify Transform") as null|anything in list("Scale","Translate","Rotate") + var/matrix/M = src.transform + switch(result) + if("Scale") + var/x = input(usr, "Choose x mod", "Modify Transform") as null|num + var/y = input(usr, "Choose y mod", "Modify Transform") as null|num + if(x == 0 || y == 0) + if(alert("You've entered 0 as one of the values, are you sure?", "Modify Transform", "Yes", "No") != "Yes") + return + if(!isnull(x) && !isnull(y)) + src.transform = M.Scale(x,y) + if("Translate") + var/x = input(usr, "Choose x mod", "Modify Transform") as null|num + var/y = input(usr, "Choose y mod", "Modify Transform") as null|num + if(x == 0 && y == 0) + return + if(!isnull(x) && !isnull(y)) + src.transform = M.Translate(x,y) + if("Rotate") + var/angle = input(usr, "Choose angle to rotate", "Modify Transform") as null|num + if(angle == 0) + if(alert("You've entered 0 as one of the values, are you sure?", "Warning", "Yes", "No") != "Yes") + return + if(!isnull(angle)) + src.transform = M.Turn(angle) + log_admin("[key_name(usr)] has used [result] transformation on [src].") + message_admins("[ADMIN_TPMONTY(usr)] has used [result] transformation on [src].") + + if(href_list[VV_HK_ADD_REAGENT]) + if(!check_rights(R_VAREDIT)) + return + if(!reagents) + var/amount = input(usr, "Specify the reagent size of [src]", "Set Reagent Size", 50) as num + if(amount) + create_reagents(amount) + if(reagents) + var/chosen_id + var/list/reagent_options = sortList(GLOB.chemical_reagents_list) + switch(alert(usr, "Choose a method.", "Add Reagents", "Enter ID", "Choose ID")) + if("Enter ID") + var/valid_id + while(!valid_id) + chosen_id = stripped_input(usr, "Enter the ID of the reagent you want to add.") + if(!chosen_id) //Get me out of here! + break + for(var/ID in reagent_options) + if(ID == chosen_id) + valid_id = TRUE + if(!valid_id) + to_chat(usr, span_warning("A reagent with that ID doesn't exist!")) + if("Choose ID") + chosen_id = input(usr, "Choose a reagent to add.", "Add Reagent") as null|anything in reagent_options + if(chosen_id) + var/amount = input(usr, "Choose the amount to add.", "Add Reagent", reagents.maximum_volume) as num + if(amount) + reagents.add_reagent(chosen_id, amount) + log_admin("[key_name(usr)] has added [amount] units of [chosen_id] to [src].") + message_admins("[ADMIN_TPMONTY(usr)] has added [amount] units of [chosen_id] to [src].") + + if(href_list[VV_HK_MODIFY_FILTERS]) + if(!check_rights(R_VAREDIT)) + return + var/client/C = usr.client + C?.open_filter_editor(src) + + if(href_list[VV_HK_MODIFY_GREYSCALE_COLORS]) + if(!check_rights(R_DEBUG)) + return + var/datum/greyscale_modify_menu/menu = new(usr) + menu.ui_interact(usr) + + if(href_list[VV_HK_EDIT_COLOR_MATRIX]) + if(!check_rights(R_VAREDIT)) + return + usr.client?.open_color_matrix_editor(src) + + if(href_list[VV_HK_TEST_MATRIXES]) + if(!check_rights(R_VAREDIT)) + return + usr.client?.open_matrix_tester(src) + +/atom/vv_get_header() + . = ..() + var/refid = REF(src) + . += "[VV_HREF_TARGETREF(refid, VV_HK_AUTO_RENAME, "[src]")]" + . += "
<< [dir2text(dir) || dir] >>" /atom/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) SEND_SIGNAL(src, COMSIG_ATOM_ENTERED, arrived, old_loc, old_locs) @@ -881,17 +993,17 @@ directive is properly returned. return TRUE - -// For special click interactions (take first item out of container, quick-climb, etc.) -/atom/proc/specialclick(mob/living/carbon/user) - return - /atom/proc/prepare_huds() hud_list = new for(var/hud in hud_possible) //Providing huds. - var/image/new_hud = image('icons/mob/hud.dmi', src, "") - new_hud.appearance_flags = KEEP_APART - hud_list[hud] = new_hud + var/hint = hud_possible[hud] + switch(hint) + if(HUD_LIST_LIST) + hud_list[hud] = list() + else + var/image/I = image('icons/mob/hud.dmi', src, "") + I.appearance_flags = RESET_COLOR|RESET_TRANSFORM|KEEP_APART + hud_list[hud] = I /** * If this object has lights, turn it on/off. @@ -980,3 +1092,7 @@ directive is properly returned. ///Returns the hard armor for the given atom. If human and a limb is specified, gets the armor for that specific limb. /atom/proc/get_hard_armor(armor_type, proj_def_zone) return + +///Interaction for using a grab on an atom +/atom/proc/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + return diff --git a/code/game/atoms/atom_appearance.dm b/code/game/atoms/atom_appearance.dm new file mode 100644 index 0000000000000..76a8268a932a1 --- /dev/null +++ b/code/game/atoms/atom_appearance.dm @@ -0,0 +1,112 @@ +/atom + ///overlays managed by [update_overlays][/atom/proc/update_overlays] to prevent removing overlays that weren't added by the same proc. Single items are stored on their own, not in a list. + var/list/managed_overlays + +/** + * Updates the appearence of the icon + * + * Mostly delegates to update_name, update_desc, and update_icon + * + * Arguments: + * - updates: A set of bitflags dictating what should be updated. Defaults to [ALL] + */ +/atom/proc/update_appearance(updates=ALL) + SHOULD_NOT_SLEEP(TRUE) + SHOULD_CALL_PARENT(TRUE) + + . = NONE + updates &= ~SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_APPEARANCE, updates) + if(updates & UPDATE_NAME) + . |= update_name(updates) + if(updates & UPDATE_DESC) + . |= update_desc(updates) + if(updates & UPDATE_ICON) + . |= update_icon(updates) + +/// Updates the name of the atom +/atom/proc/update_name(updates=ALL) + SHOULD_CALL_PARENT(TRUE) + return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_NAME, updates) + +/// Updates the description of the atom +/atom/proc/update_desc(updates=ALL) + SHOULD_CALL_PARENT(TRUE) + return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_DESC, updates) + +/// Updates the icon of the atom +/atom/proc/update_icon(updates=ALL) + SHOULD_CALL_PARENT(TRUE) + + . = NONE + updates &= ~SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON, updates) + if(updates & UPDATE_ICON_STATE) + SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON_STATE) + update_icon_state() + . |= UPDATE_ICON_STATE + + if(updates & UPDATE_OVERLAYS) + if(LAZYLEN(managed_vis_overlays)) + SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) + + var/list/new_overlays = update_overlays(updates) + var/nulls = 0 + for(var/i in 1 to length(new_overlays)) + var/atom/maybe_not_an_atom = new_overlays[i] + if(isnull(maybe_not_an_atom)) + nulls++ + continue + if(istext(maybe_not_an_atom) || isicon(maybe_not_an_atom)) + continue + new_overlays[i] = maybe_not_an_atom.appearance + if(nulls) + for(var/i in 1 to nulls) + new_overlays -= null + + var/identical = FALSE + var/new_length = length(new_overlays) + if(!managed_overlays && !new_length) + identical = TRUE + else if(!islist(managed_overlays)) + if(new_length == 1 && managed_overlays == new_overlays[1]) + identical = TRUE + else if(length(managed_overlays) == new_length) + identical = TRUE + for(var/i in 1 to length(managed_overlays)) + if(managed_overlays[i] != new_overlays[i]) + identical = FALSE + break + + if(!identical) + var/full_control = FALSE + if(managed_overlays) + full_control = length(overlays) == (islist(managed_overlays) ? length(managed_overlays) : 1) + if(full_control) + overlays = null + else + cut_overlay(managed_overlays) + + switch(length(new_overlays)) + if(0) + if(full_control) + POST_OVERLAY_CHANGE(src) + managed_overlays = null + if(1) + add_overlay(new_overlays) + managed_overlays = new_overlays[1] + else + add_overlay(new_overlays) + managed_overlays = new_overlays + + . |= UPDATE_OVERLAYS + + . |= SEND_SIGNAL(src, COMSIG_ATOM_UPDATED_ICON, updates, .) + +/// Updates the icon state of the atom +/atom/proc/update_icon_state() + + +/// Updates the overlays of the atom +/atom/proc/update_overlays() + SHOULD_CALL_PARENT(TRUE) + . = list() + SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_OVERLAYS, .) diff --git a/code/game/atoms_movable.dm b/code/game/atoms/atom_movable.dm old mode 100755 new mode 100644 similarity index 89% rename from code/game/atoms_movable.dm rename to code/game/atoms/atom_movable.dm index 0c4d920b43cdd..c95ee7c19f95f --- a/code/game/atoms_movable.dm +++ b/code/game/atoms/atom_movable.dm @@ -231,7 +231,7 @@ RU TGMC EDIT */ var/can_pass_diagonally = NONE if (direction & (direction - 1)) //Check if the first part of the diagonal move is possible moving_diagonally = TRUE - if(!(flags_atom & DIRLOCK)) + if(!(atom_flags & DIRLOCK)) setDir(direction) //We first set the direction to prevent going through dir sensible object if((direction & NORTH) && loc.Exit(src, NORTH) && get_step(loc, NORTH).Enter(src)) can_pass_diagonally = NORTH @@ -247,13 +247,13 @@ RU TGMC EDIT */ moving_diagonally = FALSE if(!get_step(loc, can_pass_diagonally)?.Exit(src, direction & ~can_pass_diagonally)) return Move(get_step(loc, can_pass_diagonally), can_pass_diagonally) - if(!(flags_atom & DIRLOCK)) //We want to set the direction to be the one of the "second" diagonal move, aka not can_pass_diagonally + if(!(atom_flags & DIRLOCK)) //We want to set the direction to be the one of the "second" diagonal move, aka not can_pass_diagonally setDir(direction &~ can_pass_diagonally) else if(!loc.Exit(src, direction)) return - if(!(flags_atom & DIRLOCK)) + if(!(atom_flags & DIRLOCK)) setDir(direction) var/enter_return_value = newloc.Enter(src) @@ -368,12 +368,12 @@ RU TGMC EDIT */ /atom/movable/proc/Moved(atom/old_loc, movement_dir, forced = FALSE, list/old_locs) - SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED, old_loc, movement_dir, forced, old_locs) + SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED, old_loc, movement_dir, forced, locs) if(client_mobs_in_contents) update_parallax_contents() if(pulledby) - SEND_SIGNAL(src, COMSIG_MOVABLE_PULL_MOVED, old_loc, movement_dir, forced, old_locs) + SEND_SIGNAL(src, COMSIG_MOVABLE_PULL_MOVED, old_loc, movement_dir, forced, locs) //Cycle through the light sources on this atom and tell them to update. for(var/datum/dynamic_light_source/light AS in hybrid_light_sources) light.source_atom.update_light() @@ -491,7 +491,7 @@ RU TGMC EDIT */ return if(!isturf(loc)) return - var/dir_to_proj = get_dir(hit_atom, old_throw_source) + var/dir_to_proj = angle_to_cardinal_dir(Get_Angle(hit_atom, old_throw_source)) if(ISDIAGONALDIR(dir_to_proj)) var/list/cardinals = list(turn(dir_to_proj, 45), turn(dir_to_proj, -45)) for(var/direction in cardinals) @@ -500,8 +500,8 @@ RU TGMC EDIT */ cardinals -= direction dir_to_proj = pick(cardinals) - var/perpendicular_angle = Get_Angle(hit_atom, get_step(hit_atom, dir_to_proj)) - var/new_angle = (perpendicular_angle + (perpendicular_angle - Get_Angle(old_throw_source, src) - 180) + rand(-10, 10)) + var/perpendicular_angle = Get_Angle(hit_atom, get_step(hit_atom, ISDIAGONALDIR(dir_to_proj) ? get_dir(hit_atom, old_throw_source) - dir_to_proj : dir_to_proj)) + var/new_angle = (perpendicular_angle + (perpendicular_angle - Get_Angle(old_throw_source, (loc == old_throw_source ? hit_atom : src)) - 180) + rand(-10, 10)) if(new_angle < -360) new_angle += 720 //north is 0 instead of 360 @@ -542,10 +542,10 @@ RU TGMC EDIT */ if(flying) set_flying(TRUE, FLY_LAYER) - var/originally_dir_locked = flags_atom & DIRLOCK + var/originally_dir_locked = atom_flags & DIRLOCK if(!originally_dir_locked) setDir(get_dir(src, target)) - flags_atom |= DIRLOCK + atom_flags |= DIRLOCK throw_source = get_turf(src) //store the origin turf @@ -574,7 +574,8 @@ RU TGMC EDIT */ var/atom/step = get_step(src, dy) if(!step) // going off the edge of the map makes get_step return null, don't let things go off the edge break - Move(step) + if(!Move(step)) + throwing = FALSE error += dist_x dist_since_sleep++ if(dist_since_sleep >= speed) @@ -584,7 +585,8 @@ RU TGMC EDIT */ var/atom/step = get_step(src, dx) if(!step) // going off the edge of the map makes get_step return null, don't let things go off the edge break - Move(step) + if(!Move(step)) + throwing = FALSE error -= dist_y dist_since_sleep++ if(dist_since_sleep >= speed) @@ -598,7 +600,8 @@ RU TGMC EDIT */ var/atom/step = get_step(src, dx) if(!step) // going off the edge of the map makes get_step return null, don't let things go off the edge break - Move(step) + if(!Move(step)) + throwing = FALSE error += dist_y dist_since_sleep++ if(dist_since_sleep >= speed) @@ -608,7 +611,8 @@ RU TGMC EDIT */ var/atom/step = get_step(src, dy) if(!step) // going off the edge of the map makes get_step return null, don't let things go off the edge break - Move(step) + if(!Move(step)) + throwing = FALSE error -= dist_x dist_since_sleep++ if(dist_since_sleep >= speed) @@ -617,16 +621,16 @@ RU TGMC EDIT */ //done throwing, either because it hit something or it finished moving if(!originally_dir_locked) - flags_atom &= ~DIRLOCK + atom_flags &= ~DIRLOCK if(isobj(src) && throwing) throw_impact(get_turf(src), speed) - if(loc) - stop_throw(flying, original_layer) - SEND_SIGNAL(loc, COMSIG_TURF_THROW_ENDED_HERE, src) - SEND_SIGNAL(src, COMSIG_MOVABLE_POST_THROW) + stop_throw(flying, original_layer) -/// Annul all throw var to ensure a clean exit out of throw state +///Clean up all throw vars /atom/movable/proc/stop_throw(flying = FALSE, original_layer) + SEND_SIGNAL(src, COMSIG_MOVABLE_POST_THROW) + if(loc) + SEND_SIGNAL(loc, COMSIG_TURF_THROW_ENDED_HERE, src) set_throwing(FALSE) if(flying) set_flying(FALSE, original_layer) @@ -731,17 +735,135 @@ RU TGMC EDIT */ // And animate the attack! animate(I, alpha = 175, pixel_x = 0, pixel_y = 0, pixel_z = 0, time = 3) - /atom/movable/vv_get_dropdown() . = ..() - . += "---" - .["Follow"] = "?_src_=holder;[HrefToken()];observefollow=[REF(src)]" - .["Get"] = "?_src_=vars;[HrefToken()];getatom=[REF(src)]" - .["Send"] = "?_src_=vars;[HrefToken()];sendatom=[REF(src)]" - .["Delete All Instances"] = "?_src_=vars;[HrefToken()];delall=[REF(src)]" - .["Update Icon"] = "?_src_=vars;[HrefToken()];updateicon=[REF(src)]" - .["Edit Particles"] = "?_src_=vars;[HrefToken()];modify_particles=[REF(src)]" + VV_DROPDOWN_OPTION("", "---------") + VV_DROPDOWN_OPTION(VV_HK_FOLLOW, "Follow") + VV_DROPDOWN_OPTION(VV_HK_GET, "Get") + VV_DROPDOWN_OPTION(VV_HK_SEND, "Send") + VV_DROPDOWN_OPTION(VV_HK_DELETE_ALL_INSTANCES, "Delete All Instances") + VV_DROPDOWN_OPTION(VV_HK_UPDATE_ICONS, "Update Icon") + VV_DROPDOWN_OPTION(VV_HK_EDIT_PARTICLES, "Edit Particles") + +/atom/movable/vv_do_topic(list/href_list) + . = ..() + + if(!.) + return + + if(href_list[VV_HK_FOLLOW]) + if(!check_rights(NONE)) + return + var/client/C = usr.client + if(isnewplayer(C.mob) || isnewplayer(src)) + return + var/message + if(!isobserver(C.mob)) + usr.client.holder.admin_ghost() + message = TRUE + var/mob/dead/observer/O = C.mob + O.ManualFollow(src) + if(message) + log_admin("[key_name(O)] jumped to follow [key_name(src)].") + message_admins("[ADMIN_TPMONTY(O)] jumped to follow [ADMIN_TPMONTY(src)].") + + if(href_list[VV_HK_GET]) + if(!check_rights(R_DEBUG)) + return + if(!istype(src)) + return + var/turf/T = get_turf(usr) + if(!istype(T)) + return + forceMove(T) + log_admin("[key_name(usr)] has sent atom [src] to themselves.") + message_admins("[ADMIN_TPMONTY(usr)] has sent atom [src] to themselves.") + if(href_list[VV_HK_SEND]) + if(!check_rights(R_DEBUG)) + return + if(!istype(src)) + return + var/atom/target + switch(input("Where do you want to send it to?", "Send Mob") as null|anything in list("Area", "Mob", "Key", "Coords")) + if("Area") + var/area/AR = input("Pick an area.", "Pick an area") as null|anything in GLOB.sorted_areas + if(!AR || !src) + return + target = pick(get_area_turfs(AR)) + if("Mob") + var/mob/N = input("Pick a mob.", "Pick a mob") as null|anything in sortList(GLOB.mob_list) + if(!N || !src) + return + target = get_turf(N) + if("Key") + var/client/C = input("Pick a key.", "Pick a key") as null|anything in sortKey(GLOB.clients) + if(!C || !src) + return + target = get_turf(C.mob) + if("Coords") + var/X = input("Select coordinate X", "Coordinate X") as null|num + var/Y = input("Select coordinate Y", "Coordinate Y") as null|num + var/Z = input("Select coordinate Z", "Coordinate Z") as null|num + if(isnull(X) || isnull(Y) || isnull(Z) || !src) + return + target = locate(X, Y, Z) + if(!target) + return + forceMove(target) + log_admin("[key_name(usr)] has sent atom [src] to [AREACOORD(target)].") + message_admins("[ADMIN_TPMONTY(usr)] has sent atom [src] to [ADMIN_VERBOSEJMP(target)].") + + if(href_list[VV_HK_DELETE_ALL_INSTANCES]) + if(!check_rights(R_DEBUG|R_SERVER)) + return + var/obj/O = src + if(!isobj(O)) + return + var/action_type = alert("Strict type ([O.type]) or type and all subtypes?", "Type", "Strict type", "Type and subtypes", "Cancel") + if(action_type == "Cancel" || !action_type) + return + if(alert("Are you really sure you want to delete all objects of type [O.type]?", "Warning", "Yes", "No") != "Yes") + return + if(alert("Second confirmation required. Delete?", "Warning", "Yes", "No") != "Yes") + return + var/O_type = O.type + var/i = 0 + var/strict + switch(action_type) + if("Strict type") + strict = TRUE + for(var/obj/Obj in world) + if(Obj.type == O_type) + i++ + qdel(Obj) + CHECK_TICK + if(!i) + to_chat(usr, "No objects of this type exist") + return + if("Type and subtypes") + for(var/obj/Obj in world) + if(istype(Obj,O_type)) + i++ + qdel(Obj) + CHECK_TICK + if(!i) + to_chat(usr, "No objects of this type exist") + return + log_admin("[key_name(usr)] deleted all objects of type[strict ? "" : " and subtypes"] of [O_type] ([i] objects deleted).") + message_admins("[ADMIN_TPMONTY(usr)] deleted all objects of type[strict ? "" : " and subtypes"] of [O_type] ([i] objects deleted).") + + if(href_list[VV_HK_UPDATE_ICONS]) + if(!check_rights(R_DEBUG)) + return + update_icon() + log_admin("[key_name(usr)] updated the icon of [src].") + + if(href_list[VV_HK_EDIT_PARTICLES]) + if(!check_rights(R_VAREDIT)) + return + var/client/C = usr.client + C?.open_particle_editor(src) /atom/movable/proc/get_language_holder(shadow = TRUE) if(language_holder) @@ -1086,10 +1208,7 @@ RU TGMC EDIT */ grab_state = newstate ///Toggles AM between throwing states -/atom/movable/proc/set_throwing(new_throwing, flying) - if(new_throwing == throwing) - return - . = throwing +/atom/movable/proc/set_throwing(new_throwing) throwing = new_throwing if(throwing) pass_flags |= PASS_THROW diff --git a/code/game/blood.dm b/code/game/blood.dm index 70c4ffd411fe8..4b61630d9e35e 100644 --- a/code/game/blood.dm +++ b/code/game/blood.dm @@ -27,7 +27,7 @@ /obj/add_blood(b_color) - if(flags_atom & NOBLOODY) + if(atom_flags & NOBLOODY) return FALSE if(b_color) blood_color = b_color @@ -145,24 +145,24 @@ var/washears = TRUE var/washglasses = TRUE if(wear_suit) - washgloves = !(wear_suit.flags_inv_hide & HIDEGLOVES) - washshoes = !(wear_suit.flags_inv_hide & HIDESHOES) + washgloves = !(wear_suit.inv_hide_flags & HIDEGLOVES) + washshoes = !(wear_suit.inv_hide_flags & HIDESHOES) if(wear_suit.clean_blood()) update_inv_wear_suit() else if(w_uniform) if(w_uniform.clean_blood()) update_inv_w_uniform() if(head) - washmask = !(head.flags_inv_hide & HIDEMASK) - washglasses = !(head.flags_inv_hide & HIDEEYES) - washears = !(head.flags_inv_hide & HIDEEARS) + washmask = !(head.inv_hide_flags & HIDEMASK) + washglasses = !(head.inv_hide_flags & HIDEEYES) + washears = !(head.inv_hide_flags & HIDEEARS) if(head.clean_blood()) update_inv_head() if(wear_mask) if(washears) - washears = !(wear_mask.flags_inv_hide & HIDEEARS) + washears = !(wear_mask.inv_hide_flags & HIDEEARS) if(washglasses) - washglasses = !(wear_mask.flags_inv_hide & HIDEEYES) + washglasses = !(wear_mask.inv_hide_flags & HIDEEYES) if(washmask && wear_mask.clean_blood()) update_inv_wear_mask() if(gloves && washgloves) diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 6927da95a7ed9..723ea4be388e0 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -108,6 +108,14 @@ /mob/living/carbon/xenomorph/med_hud_set_health() + if(hud_used?.healths) + var/bucket + if(stat == DEAD) + bucket = "critical" + else + bucket = get_bucket(XENO_HUD_ICON_BUCKETS, maxHealth, health, get_crit_threshold(), list("full", "critical")) + hud_used.healths.icon_state = "health[bucket]" + var/image/holder = hud_list[HEALTH_HUD_XENO] if(!holder) return @@ -176,7 +184,6 @@ /mob/living/carbon/xenomorph/med_hud_set_status() - hud_set_plasma() hud_set_pheromone() @@ -262,14 +269,19 @@ simple_status_hud.icon_state = "" if(stat != DEAD) status_hud.icon_state = "hudsynth" + else if(HAS_TRAIT(src, TRAIT_UNDEFIBBABLE)) + status_hud.icon_state = "hudsynthdnr" + return TRUE else - if(!client) - var/mob/dead/observer/G = get_ghost(FALSE, TRUE) + if(!mind) + var/mob/dead/observer/G = get_ghost(TRUE) if(!G) status_hud.icon_state = "hudsynthdnr" else status_hud.icon_state = "hudsynthdead" - return + else + status_hud.icon_state = "hudsynthdead" + return TRUE infection_hud.icon_state = "hudsynth" //Xenos can feel synths are not human. return TRUE @@ -306,8 +318,8 @@ hud_list[HEART_STATUS_HUD].icon_state = "still_heart" status_hud.icon_state = "huddead" return TRUE - if(!client) - var/mob/dead/observer/ghost = get_ghost() + if(!mind) + var/mob/dead/observer/ghost = get_ghost(TRUE) if(!ghost?.can_reenter_corpse) status_hud.icon_state = "huddead" return TRUE @@ -401,7 +413,6 @@ return TRUE */ - //infection status that appears on humans and monkeys, viewed by xenos only. /datum/atom_hud/xeno_infection hud_icons = list(XENO_EMBRYO_HUD) @@ -466,8 +477,16 @@ /mob/living/carbon/xenomorph/proc/hud_set_plasma() - if(!xeno_caste) // usually happens because hud ticks before New() finishes. + if(!xeno_caste) //this is cringe that we need this but currently its called before caste is set on init return + if(hud_used?.alien_plasma_display) + var/bucket + if(stat == DEAD) + bucket = "empty" + else + bucket = get_bucket(XENO_HUD_ICON_BUCKETS, xeno_caste.plasma_max, plasma_stored, 0, list("full", "empty")) + hud_used.alien_plasma_display.icon_state = "power_display_[bucket]" + var/image/holder = hud_list[PLASMA_HUD] if(!holder) return @@ -518,7 +537,7 @@ if(hive?.living_xeno_queen) if(hive.living_xeno_queen.observed_xeno == src) holder.icon_state = "queen_overwatch" - if(queen_chosen_lead) + if(xeno_flags & XENO_LEADER) var/image/I = image('modular_RUtgmc/icons/mob/hud.dmi',src, "hudxenoleader") //RUTGMC EDIT .dmi holder.overlays += I hud_list[QUEEN_OVERWATCH_HUD] = holder diff --git a/code/game/objects/effects/acid_hole.dm b/code/game/objects/effects/acid_hole.dm index 8689ce2f83248..4c14af8cfd327 100644 --- a/code/game/objects/effects/acid_hole.dm +++ b/code/game/objects/effects/acid_hole.dm @@ -50,7 +50,7 @@ use_wall_hole(user) -/obj/effect/acid_hole/specialclick(mob/living/carbon/user) +/obj/effect/acid_hole/CtrlClick(mob/living/carbon/user) if(!isxeno(user)) return if(!user.CanReach(src)) @@ -125,6 +125,8 @@ //Throwing Shiet /obj/effect/acid_hole/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return var/mob_dir = get_dir(user, src) var/crawl_dir = dir & mob_dir diff --git a/code/game/objects/effects/countdown.dm b/code/game/objects/effects/countdown.dm index 9067443aeaf8d..7faaa75f4d8c1 100644 --- a/code/game/objects/effects/countdown.dm +++ b/code/game/objects/effects/countdown.dm @@ -86,5 +86,52 @@ /obj/effect/countdown/campaign_objective/get_value() if(QDELETED(attached_to)) return - var/obj/structure/campaign_objective/capture_objective/objective = attached_to + var/obj/structure/campaign_objective/objective = attached_to return objective.get_time_left() + +/obj/effect/countdown/action_cooldown + name = "cooldown" + color = "#d1d1d1" + invisibility = SEE_INVISIBLE_LIVING + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + layer = ABOVE_HUD_LAYER + plane = HUD_PLANE + pixel_x = 5 + pixel_y = 8 + appearance_flags = KEEP_APART|RESET_COLOR + ///The action this countdown is associated with + var/datum/action/ability/attached_action + +/obj/effect/countdown/action_cooldown/Destroy() + attached_action = null + return ..() + +/obj/effect/countdown/action_cooldown/attach(atom/A) + var/atom/movable/screen/action_button/button = A + if(!istype(button)) + qdel(src) + return + attached_to = button + button.vis_contents += src + attached_action = button.source_action + +/obj/effect/countdown/action_cooldown/start() + if(!started) + START_PROCESSING(SSfastprocess, src) + started = TRUE + +/obj/effect/countdown/action_cooldown/process() + if(QDELETED(attached_to)) + qdel(src) + return + var/new_val = round(attached_action.cooldown_remaining(), 0.1) + if(new_val == displayed_text) + return + if(new_val >= 10) //avoid cropping, and deciseconds don't really matter if you're 10+ seconds away + new_val = floor(new_val) + displayed_text = new_val + + if(displayed_text) + maptext = "[displayed_text]" + else + maptext = null diff --git a/code/game/objects/effects/decals/Cleanable/aliens.dm b/code/game/objects/effects/decals/Cleanable/aliens.dm index b5af9a359fdf3..4fe964eb2a049 100644 --- a/code/game/objects/effects/decals/Cleanable/aliens.dm +++ b/code/game/objects/effects/decals/Cleanable/aliens.dm @@ -16,9 +16,6 @@ basecolor = "#dffc00" amount = 0 -/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") diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index e9a20b8767350..322fc0fecf9ea 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -46,9 +46,8 @@ deltimer(drying_timer) return ..() - -/obj/effect/decal/cleanable/blood/update_icon() - if(basecolor == "rainbow") basecolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" +/obj/effect/decal/cleanable/blood/update_icon_state() + . = ..() color = basecolor /obj/effect/decal/cleanable/blood/proc/on_cross(datum/source, mob/living/carbon/human/perp, oldloc, oldlocs) @@ -74,9 +73,6 @@ else if (hasfeet)//Or feet perp.feet_blood_color = basecolor perp.track_blood = max(amount,perp.track_blood) - else if (perp.buckled && istype(perp.buckled, /obj/structure/bed/chair/wheelchair)) - var/obj/structure/bed/chair/wheelchair/W = perp.buckled - W.bloodiness = 4 perp.update_inv_shoes(1) amount-- @@ -171,20 +167,22 @@ random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6") var/fleshcolor = "#FFC896" -/obj/effect/decal/cleanable/blood/gibs/update_icon() - - var/image/giblets = new(base_icon, "[icon_state]_flesh", dir) - if(!fleshcolor || fleshcolor == "rainbow") +/obj/effect/decal/cleanable/blood/gibs/update_icon_state() + . = ..() + if(!fleshcolor) fleshcolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" - giblets.color = fleshcolor - var/icon/blood = new(base_icon,"[icon_state]",dir) - if(basecolor == "rainbow") basecolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" - blood.Blend(basecolor,ICON_MULTIPLY) + if(basecolor == "rainbow") + basecolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" + blood.Blend(basecolor, ICON_MULTIPLY) icon = blood - overlays.Cut() - overlays += giblets + +/obj/effect/decal/cleanable/blood/gibs/update_overlays() + . = ..() + var/image/giblets = new(base_icon, "[icon_state]_flesh", dir) + giblets.color = fleshcolor + . += giblets /obj/effect/decal/cleanable/blood/gibs/up random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1") diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm index d2a1b539f7870..1f8fa7aafd19e 100644 --- a/code/game/objects/effects/decals/Cleanable/robots.dm +++ b/code/game/objects/effects/decals/Cleanable/robots.dm @@ -6,9 +6,6 @@ basecolor="#030303" random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7") -/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 diff --git a/code/game/objects/effects/decals/Cleanable/tracks.dm b/code/game/objects/effects/decals/Cleanable/tracks.dm index 624fbcf6a50c6..5f71d971b94b7 100644 --- a/code/game/objects/effects/decals/Cleanable/tracks.dm +++ b/code/game/objects/effects/decals/Cleanable/tracks.dm @@ -116,9 +116,8 @@ if(updated) update_icon() -/obj/effect/decal/cleanable/blood/tracks/update_icon() - overlays.Cut() - color = "#FFFFFF" +/obj/effect/decal/cleanable/blood/tracks/update_overlays() + . = ..() var/truedir=0 // Update ONLY the overlays that have changed. @@ -131,14 +130,14 @@ truedir=truedir>>4 if(track.overlay) - track.overlay=null + track.overlay=null //todo, not handling track overlays properly. fuck this shitcode. var/image/I = image(icon, icon_state=state, dir=num2dir(truedir)) I.color = track.basecolor track.fresh=0 track.overlay=I stack[stack_idx]=track - overlays += I + . += I updatedtracks=0 // Clear our memory of updated tracks. /obj/effect/decal/cleanable/blood/tracks/footprints diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm index 7e83d8f29c85a..65f9d965f07f1 100644 --- a/code/game/objects/effects/decals/contraband.dm +++ b/code/game/objects/effects/decals/contraband.dm @@ -36,6 +36,7 @@ /obj/structure/sign/poster/Initialize(mapload) . = ..() + icon = 'icons/obj/contraband.dmi' switch(dir) if(NORTH) pixel_y = 30 @@ -62,6 +63,8 @@ /obj/structure/sign/poster/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(iswirecutter(I)) playsound(loc, 'sound/items/wirecutter.ogg', 25, 1) if(ruined) diff --git a/code/game/objects/effects/effect.dm b/code/game/objects/effects/effect.dm index b650a43e53d70..092224cb4ed06 100644 --- a/code/game/objects/effects/effect.dm +++ b/code/game/objects/effects/effect.dm @@ -5,3 +5,6 @@ /obj/effect/add_debris_element() //they're not hittable, and prevents recursions return + +/obj/effect/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + return diff --git a/code/game/objects/effects/effect_system/smoke.dm b/code/game/objects/effects/effect_system/smoke.dm index 8e20164c335b5..8b153fb590a7e 100644 --- a/code/game/objects/effects/effect_system/smoke.dm +++ b/code/game/objects/effects/effect_system/smoke.dm @@ -13,13 +13,19 @@ pass_flags = PASS_AIR resistance_flags = UNACIDABLE|PLASMACUTTER_IMMUNE|PROJECTILE_IMMUNE|CRUSHER_IMMUNE var/amount = 3 + ///Duration in 2 second ticks var/lifetime = 5 ///time in decisecond for a smoke to spread one tile. var/expansion_speed = 1 + ///Special effect traits var/smoke_traits = NONE - var/strength = 1 // Effects scale with the emitter's bomb_strength upgrades. - var/bio_protection = 1 // how unefficient its effects are against protected target from 0 to 1. - var/datum/effect_system/smoke_spread/cloud // for associated chemical smokes. + ///Smoke effect strength mult + var/strength = 1 + ///Effect strength mult against bio protection + var/bio_protection = 1 + ///for associated chemical smoke + var/datum/effect_system/smoke_spread/cloud + ///Fraction used for chem touch effects var/fraction = 0.2 ///Delay in ticks before this smoke can affect a given mob again, applied in living's effect_smoke var/minimum_effect_delay = 1 SECONDS @@ -189,8 +195,11 @@ ///////////////////////////////////////////// /datum/effect_system/smoke_spread + ///Smoke range var/range = 3 + ///Type of smoke var/smoke_type = /obj/effect/particle_effect/smoke + ///Smoke duration in 2 sec ticks var/lifetime var/list/smokes var/list/smoked_mobs @@ -276,6 +285,23 @@ color = "#791697" smoke_traits = SMOKE_PLASMALOSS +/obj/effect/particle_effect/smoke/plasmaloss/effect_smoke(obj/effect/particle_effect/smoke/S) + . = ..() + if(!.) + return + if(S.smoke_traits & SMOKE_PURGER) + lifetime -= 4 + +////////////////////////////////////// +// ANTIGAS SMOKE +//////////////////////////////////// + +/obj/effect/particle_effect/smoke/antigas + alpha = 65 + opacity = FALSE + color = "#1b1b1b" + smoke_traits = SMOKE_PURGER + ////////////////////////////////////// // FLASHBANG SMOKE //////////////////////////////////// @@ -295,6 +321,13 @@ strength = 1.5 smoke_traits = SMOKE_SATRAPINE|SMOKE_GASP|SMOKE_COUGH +/obj/effect/particle_effect/smoke/satrapine/effect_smoke(obj/effect/particle_effect/smoke/S) + . = ..() + if(!.) + return + if(S.smoke_traits & SMOKE_PURGER) + lifetime -= 4 + ///////////////////////////////////////// // BOILER SMOKES ///////////////////////////////////////// @@ -311,40 +344,50 @@ return if(S.smoke_traits & SMOKE_PLASMALOSS) lifetime -= 2 + if(S.smoke_traits & SMOKE_PURGER) + lifetime -= 4 //Xeno acid smoke. /obj/effect/particle_effect/smoke/xeno/burn lifetime = 6 + alpha = 120 + opacity = FALSE color = "#86B028" //Mostly green? - smoke_traits = SMOKE_XENO|SMOKE_XENO_ACID|SMOKE_GASP|SMOKE_COUGH|SMOKE_HUGGER_PACIFY + smoke_traits = SMOKE_XENO|SMOKE_XENO_ACID|SMOKE_GASP|SMOKE_COUGH + +//Used for smokebomb nades. +/obj/effect/particle_effect/smoke/xeno/burn/opaque + alpha = 255 + opacity = TRUE //Xeno light acid smoke.for acid huggers /obj/effect/particle_effect/smoke/xeno/burn/light lifetime = 4 //Lasts for less time - alpha = 60 - opacity = FALSE - smoke_traits = SMOKE_XENO|SMOKE_XENO_ACID|SMOKE_GASP|SMOKE_COUGH //Xeno neurotox smoke. /obj/effect/particle_effect/smoke/xeno/neuro + alpha = 120 + opacity = FALSE color = "#ffbf58" //Mustard orange? - smoke_traits = SMOKE_XENO|SMOKE_XENO_NEURO|SMOKE_GASP|SMOKE_COUGH|SMOKE_EXTINGUISH|SMOKE_HUGGER_PACIFY + smoke_traits = SMOKE_XENO|SMOKE_XENO_NEURO|SMOKE_GASP|SMOKE_COUGH|SMOKE_EXTINGUISH ///Xeno neurotox smoke for Defilers; doesn't extinguish /obj/effect/particle_effect/smoke/xeno/neuro/medium + alpha = 255 + opacity = TRUE color = "#ffbf58" //Mustard orange? smoke_traits = SMOKE_XENO|SMOKE_XENO_NEURO|SMOKE_GASP|SMOKE_COUGH|SMOKE_HUGGER_PACIFY ///Xeno neurotox smoke for neurospit; doesn't extinguish or blind /obj/effect/particle_effect/smoke/xeno/neuro/light - alpha = 60 - opacity = FALSE smoke_traits = SMOKE_XENO|SMOKE_XENO_NEURO|SMOKE_GASP|SMOKE_COUGH|SMOKE_NEURO_LIGHT //Light neuro smoke doesn't extinguish /obj/effect/particle_effect/smoke/xeno/toxic lifetime = 2 + alpha = 60 + opacity = FALSE color = "#00B22C" - smoke_traits = SMOKE_XENO|SMOKE_XENO_TOXIC|SMOKE_GASP|SMOKE_COUGH|SMOKE_EXTINGUISH|SMOKE_HUGGER_PACIFY + smoke_traits = SMOKE_XENO|SMOKE_XENO_TOXIC|SMOKE_GASP|SMOKE_COUGH|SMOKE_EXTINGUISH /obj/effect/particle_effect/smoke/xeno/hemodile color = "#0287A1" @@ -389,6 +432,9 @@ /datum/effect_system/smoke_spread/satrapine smoke_type = /obj/effect/particle_effect/smoke/satrapine +/datum/effect_system/smoke_spread/antigas + smoke_type = /obj/effect/particle_effect/smoke/antigas + /datum/effect_system/smoke_spread/xeno smoke_type = /obj/effect/particle_effect/smoke/xeno var/strength = 1 @@ -404,6 +450,9 @@ /datum/effect_system/smoke_spread/xeno/acid smoke_type = /obj/effect/particle_effect/smoke/xeno/burn +/datum/effect_system/smoke_spread/xeno/acid/opaque + smoke_type = /obj/effect/particle_effect/smoke/xeno/burn/opaque + /datum/effect_system/smoke_spread/xeno/acid/light smoke_type = /obj/effect/particle_effect/smoke/xeno/burn/light diff --git a/code/game/objects/effects/landmarks/corpsespawner.dm b/code/game/objects/effects/landmarks/corpsespawner.dm index 245a912239bdf..c14526e6e5b37 100644 --- a/code/game/objects/effects/landmarks/corpsespawner.dm +++ b/code/game/objects/effects/landmarks/corpsespawner.dm @@ -34,7 +34,7 @@ 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/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. Use CAPTAIN if you want it to be all access. var/corpseidicon = null //For setting it to be a gold, silver, centcom etc ID @@ -259,7 +259,7 @@ /obj/effect/landmark/corpsespawner/chef name = "Chef" corpseuniform = /obj/item/clothing/under/rank/chef - corpsesuit = /obj/item/clothing/suit/chef/classic + corpsesuit = /obj/item/clothing/suit/storage/chef/classic corpseshoes = /obj/item/clothing/shoes/black corpsehelmet = /obj/item/clothing/head/chefhat corpseback = /obj/item/storage/backpack diff --git a/code/game/objects/effects/landmarks/excavation_site_spawner.dm b/code/game/objects/effects/landmarks/excavation_site_spawner.dm index 300a60c4f5539..8fc61db071c8a 100644 --- a/code/game/objects/effects/landmarks/excavation_site_spawner.dm +++ b/code/game/objects/effects/landmarks/excavation_site_spawner.dm @@ -52,5 +52,5 @@ rewards_max = 4 map_icon = "excav_xeno" rewards = list( - /obj/item/research_resource/xeno/tier_one, + /obj/item/research_resource/xeno, ) diff --git a/code/game/objects/effects/landmarks/itemspawner.dm b/code/game/objects/effects/landmarks/itemspawner.dm index e555b97efa20f..4aa8ee1782386 100644 --- a/code/game/objects/effects/landmarks/itemspawner.dm +++ b/code/game/objects/effects/landmarks/itemspawner.dm @@ -87,7 +87,7 @@ /obj/effect/landmark/itemspawner/waiter items_to_spawn = list(\ /obj/item/clothing/under/waiter,\ - /obj/item/clothing/suit/apron) + /obj/item/clothing/suit/storage/apron) /obj/effect/landmark/itemspawner/pirate diff --git a/code/game/objects/effects/landmarks/landmarks.dm b/code/game/objects/effects/landmarks/landmarks.dm index a9a5ed498c97c..63136df51e9ab 100644 --- a/code/game/objects/effects/landmarks/landmarks.dm +++ b/code/game/objects/effects/landmarks/landmarks.dm @@ -171,7 +171,7 @@ /obj/effect/landmark/resin_jelly_pod name = "xeno jelly pod landmark" - icon = 'icons/Xeno/resinpod.dmi' + icon = 'icons/Xeno/resin_pod.dmi' icon_state = "resinpod" /obj/effect/landmark/resin_jelly_pod/Initialize(mapload) @@ -422,7 +422,7 @@ /obj/item/weapon/gun/minigun, /obj/item/weapon/gun/grenade_launcher/multinade_launcher, /obj/item/weapon/gun/energy/lasgun/pulse, - /obj/item/weapon/gun/tl102/death, // memes + /obj/item/weapon/gun/hsg_102/death, // memes ) /obj/effect/landmark/weapon_spawn/tier6_weapon_spawn @@ -436,7 +436,7 @@ /obj/effect/landmark/sensor_tower name = "Sensor tower" icon = 'icons/obj/structures/sensor.dmi' - icon_state = "sensor_loyalist" + icon_state = "sensor" /obj/effect/landmark/sensor_tower/Initialize(mapload) ..() @@ -477,7 +477,7 @@ . = ..() //adds the exit points to the glob, and the start points link to them in lateinit GLOB.patrol_point_list += src - if(!(SSticker?.mode?.flags_round_type & MODE_TWO_HUMAN_FACTIONS)) + if(!(SSticker?.mode?.round_type_flags & MODE_TWO_HUMAN_FACTIONS)) return SSminimaps.add_marker(src, GLOB.faction_to_minimap_flag[faction], image('icons/UI_icons/map_blips.dmi', null, minimap_icon)) diff --git a/code/game/objects/effects/landmarks/marine_spawns.dm b/code/game/objects/effects/landmarks/marine_spawns.dm index 4da10a96c4717..b25d11fe01904 100644 --- a/code/game/objects/effects/landmarks/marine_spawns.dm +++ b/code/game/objects/effects/landmarks/marine_spawns.dm @@ -34,6 +34,10 @@ icon_state = "PO" job = /datum/job/terragov/command/pilot +/obj/effect/landmark/start/job/transportofficer + icon_state = "TO" + job = /datum/job/terragov/command/transportofficer + /obj/effect/landmark/start/job/chiefshipengineer icon_state = "CSE" job = /datum/job/terragov/engineering/chief @@ -46,6 +50,14 @@ icon_state = "MP" job = /datum/job/terragov/command/mech_pilot +/obj/effect/landmark/start/job/assault_crewman + icon_state = "AC" + job = /datum/job/terragov/command/assault_crewman + +/obj/effect/landmark/start/job/transport_crewman + icon_state = "TC" + job = /datum/job/terragov/command/transport_crewman + /obj/effect/landmark/start/job/shiptech icon_state = "SE" job = /datum/job/terragov/engineering/tech diff --git a/code/game/objects/effects/landmarks/mode.dm b/code/game/objects/effects/landmarks/mode.dm index f6b7831b42e6b..7171ffaa43511 100644 --- a/code/game/objects/effects/landmarks/mode.dm +++ b/code/game/objects/effects/landmarks/mode.dm @@ -9,7 +9,7 @@ /obj/effect/landmark/lv624/fog_blocker/Initialize(mapload) . = ..() store_location() - flags_atom |= INITIALIZED + atom_flags |= INITIALIZED return INITIALIZE_HINT_QDEL /obj/effect/landmark/lv624/fog_blocker/proc/store_location() diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index 0e4845379a5b1..71530bb0f9724 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -93,8 +93,8 @@ return TRUE -/obj/effect/forcefield/fog/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - return attack_hand(X) +/obj/effect/forcefield/fog/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + return attack_hand(xeno_attacker) /obj/effect/forcefield/fog/attack_animal(M) diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 6ebd589ba19f0..cfb06dbc71570 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -105,6 +105,23 @@ /obj/effect/overlay/blinking_laser/napalm icon_state = "napalm_target" +/obj/effect/overlay/blinking_laser/monarch + icon_state = "monarch_target" + +/obj/effect/overlay/blinking_laser/swansong + icon_state = "swansong_target" + +// Bombs, then bomblets + +/obj/effect/overlay/blinking_laser/bomb + icon_state = "bomb_target" + +/obj/effect/overlay/blinking_laser/bomb_fat + icon_state = "fat_bomb_target" + +/obj/effect/overlay/blinking_laser/bomblet + icon_state = "bomblet_target" + //Marine-only visuals. Prediction HUD, etc. Does not show without marine headset /obj/effect/overlay/blinking_laser/marine name = "prediction matrix" @@ -373,3 +390,12 @@ icon_state = "spooky" pixel_x = 16 pixel_y = 16 + +/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 2 minutes get cleaned up + var/cache_expiration = 2 MINUTES diff --git a/code/game/objects/effects/spawners/modularmappingspawner.dm b/code/game/objects/effects/spawners/modularmappingspawner.dm index 51b6010aa3091..565c56e0f9ba6 100644 --- a/code/game/objects/effects/spawners/modularmappingspawner.dm +++ b/code/game/objects/effects/spawners/modularmappingspawner.dm @@ -240,3 +240,29 @@ mapid = "EORG" spawner_height = 46 spawner_width = 46 + +/**********Jungle Outpost*******/ +/obj/effect/spawner/modularmap/jungle_outpost/westtower + mapid = "jowesttower" + spawner_width = 12 + spawner_height = 14 + +/obj/effect/spawner/modularmap/jungle_outpost/southcrates + mapid = "josouthcrates" + spawner_width = 12 + spawner_height = 14 + +/obj/effect/spawner/modularmap/jungle_outpost/hydroponics + mapid = "johydroponics" + spawner_width = 19 + spawner_height = 18 + +/obj/effect/spawner/modularmap/jungle_outpost/medbay + mapid = "jomedbay" + spawner_width = 16 + spawner_height = 24 + +/obj/effect/spawner/modularmap/jungle_outpost/engineering + mapid = "joengineering" + spawner_width = 21 + spawner_height = 21 diff --git a/code/game/objects/effects/spawners/random/clothing.dm b/code/game/objects/effects/spawners/random/clothing.dm index 6dec381cb74ab..69564dfbc9835 100644 --- a/code/game/objects/effects/spawners/random/clothing.dm +++ b/code/game/objects/effects/spawners/random/clothing.dm @@ -12,7 +12,7 @@ icon_state = "random_clothes" loot = list( /obj/item/clothing/suit/bio_suit, - /obj/item/clothing/suit/bomber, + /obj/item/clothing/suit/storage/bomber, /obj/item/clothing/suit/ianshirt, /obj/item/clothing/suit/radiation, /obj/item/clothing/suit/space, diff --git a/code/game/objects/effects/spawners/random/engineering.dm b/code/game/objects/effects/spawners/random/engineering.dm index 0c095d960dea5..e77c3daee2d94 100644 --- a/code/game/objects/effects/spawners/random/engineering.dm +++ b/code/game/objects/effects/spawners/random/engineering.dm @@ -20,8 +20,7 @@ /obj/effect/spawner/random/engineering/technology_scanner name = "Random Scanner" - icon = 'icons/obj/items/items.dmi' - icon_state = "atmos" + icon_state = "random_scanner" loot = list( /obj/item/t_scanner = 4, /obj/item/radio = 2, @@ -204,8 +203,8 @@ icon_state = "random_glass" spawn_loot_chance = 90 loot = list( - /obj/item/stack/sheet/glass = 25, - /obj/item/stack/sheet/glass/large_stack = 1, + /obj/item/stack/sheet/glass/glass = 25, + /obj/item/stack/sheet/glass/glass/large_stack = 1, ) /obj/effect/spawner/random/engineering/insulatedgloves diff --git a/code/game/objects/effects/spawners/random/food_or_drink.dm b/code/game/objects/effects/spawners/random/food_or_drink.dm index ce720e684ca68..3df1e31df6612 100644 --- a/code/game/objects/effects/spawners/random/food_or_drink.dm +++ b/code/game/objects/effects/spawners/random/food_or_drink.dm @@ -112,7 +112,7 @@ loot = list( /obj/item/reagent_containers/food/snacks/wrapped/booniebars = 26, /obj/item/reagent_containers/food/snacks/wrapped/chunk = 26, - /obj/item/reagent_containers/food/snacks/wrapped/barcardine = 26, + /obj/item/reagent_containers/food/snacks/wrapped/barcaridine = 26, /obj/item/reagent_containers/food/snacks/wrapped/proteinbar = 12, /obj/item/reagent_containers/food/snacks/candy = 5, /obj/item/reagent_containers/food/snacks/enrg_bar = 5, @@ -126,7 +126,7 @@ /obj/item/reagent_containers/food/snacks/wrapped/proteinbar = 10, /obj/item/reagent_containers/food/snacks/wrapped/booniebars = 5, /obj/item/reagent_containers/food/snacks/wrapped/chunk = 5, - /obj/item/reagent_containers/food/snacks/wrapped/barcardine = 5, + /obj/item/reagent_containers/food/snacks/wrapped/barcaridine = 5, ) /obj/effect/spawner/random/food_or_drink/cheesewedge @@ -257,7 +257,7 @@ /obj/item/reagent_containers/food/snacks/sosjerky, /obj/item/reagent_containers/food/snacks/donkpocket, /obj/item/reagent_containers/food/snacks/wrapped/booniebars, - /obj/item/reagent_containers/food/snacks/wrapped/barcardine, + /obj/item/reagent_containers/food/snacks/wrapped/barcaridine, /obj/item/reagent_containers/food/snacks/wrapped/chunk, /obj/item/reagent_containers/food/snacks/lollipop, /obj/item/reagent_containers/food/snacks/pastries/appletart, diff --git a/code/game/objects/effects/spawners/random/misc_item.dm b/code/game/objects/effects/spawners/random/misc_item.dm index d92513cf1a4fd..de1151e3ceab2 100644 --- a/code/game/objects/effects/spawners/random/misc_item.dm +++ b/code/game/objects/effects/spawners/random/misc_item.dm @@ -259,7 +259,7 @@ /obj/item/trash/tgmc_tray, /obj/item/trash/boonie, /obj/item/trash/chunk, - /obj/item/trash/barcardine, + /obj/item/trash/barcaridine, /obj/item/trash/mre, /obj/item/trash/berrybar, ) diff --git a/code/game/objects/effects/temporary_visuals/explosions.dm b/code/game/objects/effects/temporary_visuals/explosions.dm index 6ca16156905c3..175a2f14c940a 100644 --- a/code/game/objects/effects/temporary_visuals/explosions.dm +++ b/code/game/objects/effects/temporary_visuals/explosions.dm @@ -323,3 +323,63 @@ QDEL_NULL(falling_debris) QDEL_NULL(dirt_kickup) return ..() + +/obj/effect/temp_visual/rappel_dust + duration = 25 + ///smoke wave particle holder + var/obj/effect/abstract/particle_holder/smoke_wave + ///debris dirt kickup particle holder + var/obj/effect/abstract/particle_holder/dirt_kickup + ///falling debris particle holder + var/obj/effect/abstract/particle_holder/falling_debris + ///large dirt kickup particle holder + var/obj/effect/abstract/particle_holder/large_kickup + +/obj/effect/temp_visual/rappel_dust/Initialize(mapload, radius, small = FALSE, large = FALSE) + . = ..() + var/turf/turf_type = get_turf(src) + if(iswater(turf_type)) + smoke_wave = new(src, /particles/wave_water) + dirt_kickup = new(src, /particles/water_splash) + falling_debris = new(src, /particles/water_falling) + large_kickup = new(src, /particles/water_splash_large) + else + if(small) + smoke_wave = new(src, /particles/smoke_wave/small) + else + smoke_wave = new(src, /particles/smoke_wave) + + dirt_kickup = new(src, /particles/dirt_kickup) + if(small) + falling_debris = new(src, /particles/falling_debris/small) + else + falling_debris = new(src, /particles/falling_debris) + + if(large) + large_kickup = new(src, /particles/dirt_kickup_large/deva) + else + large_kickup = new(src, /particles/dirt_kickup_large) + + if(large) + smoke_wave.particles.velocity = generator(GEN_CIRCLE, 6 * radius, 6 * radius) + else if(small) + smoke_wave.particles.velocity = generator(GEN_CIRCLE, 3 * radius, 3 * radius) + else + smoke_wave.particles.velocity = generator(GEN_CIRCLE, 5 * radius, 5 * radius) + addtimer(CALLBACK(src, PROC_REF(set_count_short)), 5) + addtimer(CALLBACK(src, PROC_REF(set_count_long)), 10) + +/obj/effect/temp_visual/rappel_dust/proc/set_count_short() + smoke_wave.particles.count = 0 + large_kickup.particles.count = 0 + falling_debris.particles.count = 0 + +/obj/effect/temp_visual/rappel_dust/proc/set_count_long() + dirt_kickup.particles.count = 0 + +/obj/effect/temp_visual/rappel_dust/Destroy() + QDEL_NULL(smoke_wave) + QDEL_NULL(large_kickup) + QDEL_NULL(falling_debris) + QDEL_NULL(dirt_kickup) + return ..() diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 67db013e29dc1..78d19c0d857d9 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -114,14 +114,21 @@ GLOBAL_LIST_EMPTY(blood_particles) opacity = FALSE anchored = FALSE animate_movement = SLIDE_STEPS + randomdir = FALSE + vis_flags = VIS_INHERIT_LAYER | VIS_INHERIT_PLANE | VIS_INHERIT_ID /obj/effect/temp_visual/xenomorph/afterimage/Initialize(mapload, atom/owner) . = ..() - appearance = owner.appearance - setDir(owner.dir) - alpha = initial(alpha) - layer = initial(layer) - mouse_opacity = MOUSE_OPACITY_TRANSPARENT + var/mutable_appearance/xeno_afterimage = new() + xeno_afterimage.appearance = owner.appearance + xeno_afterimage.render_target = null + xeno_afterimage.density = initial(density) + xeno_afterimage.alpha = initial(alpha) + xeno_afterimage.appearance_flags = RESET_COLOR|RESET_ALPHA|PASS_MOUSE + xeno_afterimage.setDir(owner.dir) + xeno_afterimage.pixel_x = owner.pixel_x + xeno_afterimage.pixel_y = owner.pixel_y + appearance = xeno_afterimage animate(src, alpha = 0, time = duration) /obj/effect/temp_visual/ob_impact @@ -168,7 +175,7 @@ GLOBAL_LIST_EMPTY(blood_particles) var/marker_flags = GLOB.faction_to_minimap_flag[faction] if(marker_flags) - SSminimaps.add_marker(src, marker_flags, image('modular_RUtgmc/icons/UI_icons/map_blips_large.dmi', null, icon_state_on, VERY_HIGH_FLOAT_LAYER)) + SSminimaps.add_marker(src, marker_flags, image('modular_RUtgmc/icons/UI_icons/map_blips_large.dmi', null, icon_state_on, VERY_HIGH_FLOAT_LAYER)) //RUTGMC EDIT set_visuals(faction) /obj/effect/temp_visual/order/attack_order diff --git a/code/game/objects/effects/temporary_visuals/temporary_visual.dm b/code/game/objects/effects/temporary_visuals/temporary_visual.dm index b0b1eb4b0cd99..ad1089e5e6f9b 100644 --- a/code/game/objects/effects/temporary_visuals/temporary_visual.dm +++ b/code/game/objects/effects/temporary_visuals/temporary_visual.dm @@ -4,9 +4,13 @@ anchored = TRUE layer = ABOVE_MOB_LAYER mouse_opacity = MOUSE_OPACITY_TRANSPARENT + ///How long before the temp_visual gets deleted var/duration = 1 SECONDS - var/randomdir = TRUE + ///Timer that our duration is stored in var/timerid + ///Gives our effect a random direction on init + var/randomdir = TRUE + /obj/effect/temp_visual/Initialize(mapload) diff --git a/code/game/objects/effects/weeds.dm b/code/game/objects/effects/weeds.dm index 1cea8b0dd0e3f..55fa140a8c8dc 100644 --- a/code/game/objects/effects/weeds.dm +++ b/code/game/objects/effects/weeds.dm @@ -190,6 +190,7 @@ icon_state = "weedwall" /obj/alien/weeds/weedwall/update_icon_state() + . = ..() var/turf/closed/wall/W = loc if(!istype(W)) icon_state = initial(icon_state) @@ -208,6 +209,7 @@ var/window_type = /obj/structure/window/framed /obj/alien/weeds/weedwall/window/update_icon_state() + . = ..() var/obj/structure/window/framed/F = locate() in loc icon_state = F?.smoothing_junction ? "weedwall-[F.smoothing_junction]" : initial(icon_state) if(color_variant == STICKY_COLOR) @@ -221,11 +223,11 @@ return ..() return window.MouseDrop_T(dropping, user) -/obj/alien/weeds/weedwall/window/specialclick(mob/living/carbon/user) +/obj/alien/weeds/weedwall/window/CtrlClick(mob/living/carbon/user) var/obj/structure/window = locate(window_type) in loc if(!window) return ..() - return window.specialclick(user) + return window.CtrlClick(user) /obj/alien/weeds/weedwall/window/attackby(obj/item/I, mob/user, params) //yes, this blocks attacking the weed itself, but if you destroy the frame you destroy the weed! var/obj/structure/window = locate(window_type) in loc @@ -233,11 +235,11 @@ return ..() return window.attackby(I, user, params) -/obj/alien/weeds/weedwall/window/attack_alien(mob/living/carbon/xenomorph/X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) +/obj/alien/weeds/weedwall/window/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) var/obj/structure/window = locate(window_type) in loc if(!window) return ..() - return window.attack_alien(X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) + return window.attack_alien(xeno_attacker, damage_amount, damage_type, armor_type, effects, armor_penetration, isrightclick) /obj/alien/weeds/weedwall/window/frame window_type = /obj/structure/window_frame diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 3e060d5c959a1..9254e86376784 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -10,8 +10,9 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan mouse_drag_pointer = MOUSE_ACTIVE_POINTER light_system = MOVABLE_LIGHT allow_pass_flags = PASS_LOW_STRUCTURE - flags_atom = PREVENT_CONTENTS_EXPLOSION + atom_flags = PREVENT_CONTENTS_EXPLOSION resistance_flags = PROJECTILE_IMMUNE + move_resist = MOVE_FORCE_WEAK var/image/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite ///The iconstate that the items use for blood on blood.dmi when drawn on the mob. @@ -36,21 +37,21 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan var/hitsound = null var/w_class = WEIGHT_CLASS_NORMAL - var/flags_item = NONE //flags for item stuff that isn't clothing/equipping specific. - var/flags_equip_slot = NONE //This is used to determine on which slots an item can fit. + var/item_flags = NONE //flags for item stuff that isn't clothing/equipping specific. + var/equip_slot_flags = NONE //This is used to determine on which slots an item can fit. //Since any item can now be a piece of clothing, this has to be put here so all items share it. - var/flags_inventory = NONE //This flag is used for various clothing/equipment item stuff - var/flags_inv_hide = NONE //This flag is used to determine when items in someone's inventory cover others. IE helmets making it so you can't see glasses, etc. + var/inventory_flags = NONE //This flag is used for various clothing/equipment item stuff + var/inv_hide_flags = NONE //This flag is used to determine when items in someone's inventory cover others. IE helmets making it so you can't see glasses, etc. var/obj/item/master = null - var/flags_armor_protection = NONE //see setup.dm for appropriate bit flags - var/flags_heat_protection = NONE //flags which determine which body parts are protected from heat. Use the HEAD, CHEST, GROIN, etc. flags. See setup.dm - var/flags_cold_protection = NONE //flags which determine which body parts are protected from cold. Use the HEAD, CHEST, GROIN, etc. flags. See setup.dm + var/armor_protection_flags = NONE //see setup.dm for appropriate bit flags + var/heat_protection_flags = NONE //flags which determine which body parts are protected from heat. Use the HEAD, CHEST, GROIN, etc. flags. See setup.dm + var/cold_protection_flags = NONE //flags which determine which body parts are protected from cold. Use the HEAD, CHEST, GROIN, etc. flags. See setup.dm - var/max_heat_protection_temperature //Set this variable to determine up to which temperature (IN KELVIN) the item protects against heat damage. Keep at null to disable protection. Only protects areas set by flags_heat_protection flags - var/min_cold_protection_temperature //Set this variable to determine down to which temperature (IN KELVIN) the item protects against cold damage. 0 is NOT an acceptable number due to if(varname) tests!! Keep at null to disable protection. Only protects areas set by flags_cold_protection flags + var/max_heat_protection_temperature //Set this variable to determine up to which temperature (IN KELVIN) the item protects against heat damage. Keep at null to disable protection. Only protects areas set by heat_protection_flags flags + var/min_cold_protection_temperature //Set this variable to determine down to which temperature (IN KELVIN) the item protects against cold damage. 0 is NOT an acceptable number due to if(varname) tests!! Keep at null to disable protection. Only protects areas set by cold_protection_flags flags ///list of /datum/action's that this item has. var/list/actions @@ -123,7 +124,7 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan ///Worn inhand overlay will be shifted by this along y axis var/inhand_y_offset = 0 - var/flags_item_map_variant = NONE + var/item_map_variant_flags = NONE //TOOL RELATED VARS var/tool_behaviour = FALSE @@ -168,7 +169,7 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan else if(islist(embedding)) embedding = getEmbeddingBehavior(arglist(embedding)) - if(flags_item_map_variant) + if(item_map_variant_flags) update_item_sprites() if(current_variant) @@ -183,12 +184,22 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan master = null embedding = null embedded_into = null //Should have been removed by temporarilyRemoveItemFromInventory, but let's play it safe. - GLOB.cryoed_item_list -= src + GLOB.cryoed_item_list_gun -= src + GLOB.cryoed_item_list_ammo -= src + GLOB.cryoed_item_list_explosive -= src + GLOB.cryoed_item_list_melee -= src + GLOB.cryoed_item_list_clothing -= src + GLOB.cryoed_item_list_food -= src + GLOB.cryoed_item_list_drugs -= src + GLOB.cryoed_item_list_containers -= src + GLOB.cryoed_item_list_other -= src return ..() +/obj/item/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + return /obj/item/proc/update_item_state(mob/user) - item_state = "[initial(icon_state)][flags_item & WIELDED ? "_w" : ""]" + item_state = "[initial(icon_state)][item_flags & WIELDED ? "_w" : ""]" //user: The mob that is suiciding @@ -278,6 +289,8 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan // I have cleaned it up a little, but it could probably use more. -Sayu /obj/item/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/facepaint) && colorable_allowed != NONE) color_item(I, user) @@ -337,9 +350,9 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan // apparently called whenever an item is removed from a slot, container, or anything else. //the call happens after the item's potential loc change. /obj/item/proc/dropped(mob/user) - if((flags_item & DELONDROP) && !QDELETED(src)) + if((item_flags & DELONDROP) && !QDELETED(src)) qdel(src) - flags_item &= ~IN_INVENTORY + item_flags &= ~IN_INVENTORY SEND_SIGNAL(src, COMSIG_ITEM_DROPPED, user) ///Called whenever an item is unequipped to a new loc (IE, not when the item ends up in the hands) @@ -370,7 +383,7 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan limb_count++ UPDATEHEALTH(H) QDEL_NULL(current_acid) - flags_item |= IN_INVENTORY + item_flags |= IN_INVENTORY return ///Called to return an item to equip using the quick equip hotkey. Base proc returns the item itself, overridden for storage behavior. @@ -402,8 +415,8 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan SHOULD_CALL_PARENT(TRUE) // no exceptions SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED, user, slot) - var/equipped_to_slot = flags_equip_slot & slotdefine2slotbit(slot) - if(equipped_to_slot) // flags_equip_slot is a bitfield + var/equipped_to_slot = equip_slot_flags & slotdefine2slotbit(slot) + if(equipped_to_slot) // equip_slot_flags is a bitfield SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED_TO_SLOT, user, slot) else SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED_NOT_IN_SLOT, user, slot) @@ -412,17 +425,17 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan if(item_action_slot_check(user, slot)) //some items only give their actions buttons when in a specific slot. A.give_action(user) - flags_item |= IN_INVENTORY + item_flags |= IN_INVENTORY if(!equipped_to_slot) return if(ishuman(user)) var/mob/living/carbon/human/human_user = user - if(flags_armor_protection) + if(armor_protection_flags) human_user.add_limb_armor(src) if(slowdown) - human_user.add_movespeed_modifier(type, TRUE, 0, (flags_item & IMPEDE_JETPACK) ? SLOWDOWN_IMPEDE_JETPACK : NONE, TRUE, slowdown) + human_user.add_movespeed_modifier(type, TRUE, 0, (item_flags & IMPEDE_JETPACK) ? SLOWDOWN_IMPEDE_JETPACK : NONE, TRUE, slowdown) ///Called when an item is removed from an equipment slot. The loc should still be in the unequipper. @@ -430,7 +443,7 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan SHOULD_CALL_PARENT(TRUE) SEND_SIGNAL(src, COMSIG_ITEM_UNEQUIPPED, unequipper, slot) - var/equipped_from_slot = flags_equip_slot & slotdefine2slotbit(slot) + var/equipped_from_slot = equip_slot_flags & slotdefine2slotbit(slot) for(var/datum/action/A AS in actions) A.remove_action(unequipper) @@ -440,7 +453,7 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan if(ishuman(unequipper)) var/mob/living/carbon/human/human_unequipper = unequipper - if(flags_armor_protection) + if(armor_protection_flags) human_unequipper.remove_limb_armor(src) if(slowdown) human_unequipper.remove_movespeed_modifier(type) @@ -462,12 +475,12 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan ///Used to enable/disable an item's bump attack. Grouped in a proc to make sure the signal or flags aren't missed /obj/item/proc/toggle_item_bump_attack(mob/user, enable_bump_attack) SEND_SIGNAL(user, COMSIG_ITEM_TOGGLE_BUMP_ATTACK, enable_bump_attack) - if(flags_item & CAN_BUMP_ATTACK && enable_bump_attack) + if(item_flags & CAN_BUMP_ATTACK && enable_bump_attack) return if(enable_bump_attack) - flags_item |= CAN_BUMP_ATTACK + item_flags |= CAN_BUMP_ATTACK return - flags_item &= ~CAN_BUMP_ATTACK + item_flags &= ~CAN_BUMP_ATTACK /** * The mob M is attempting to equip this item into the slot passed through as 'slot'. Return 1 if it can do this and 0 if it can't. @@ -504,7 +517,7 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan if(!is_type_in_list(H.species, species_exception)) return FALSE - if(issynth(H) && CHECK_BITFIELD(flags_item, SYNTH_RESTRICTED) && !CONFIG_GET(flag/allow_synthetic_gun_use)) + if(issynth(H) && CHECK_BITFIELD(item_flags, SYNTH_RESTRICTED) && !CONFIG_GET(flag/allow_synthetic_gun_use)) to_chat(H, span_warning("Your programming prevents you from wearing this.")) return FALSE @@ -653,7 +666,7 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan return FALSE //Unsupported slot if(equip_to_slot) - if(!(flags_equip_slot & slotdefine2slotbit(slot))) + if(!(equip_slot_flags & slotdefine2slotbit(slot))) return FALSE return TRUE @@ -692,7 +705,7 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan /obj/item/proc/update_item_sprites() switch(SSmapping.configs[GROUND_MAP].armor_style) if(MAP_ARMOR_STYLE_JUNGLE) - if(flags_item_map_variant & ITEM_JUNGLE_VARIANT) + if(item_map_variant_flags & ITEM_JUNGLE_VARIANT) if(colorable_allowed & PRESET_COLORS_ALLOWED) greyscale_colors = ARMOR_PALETTE_BLACK //RUTGMC edit - black instead of default drab else if(colorable_allowed & ICON_STATE_VARIANTS_ALLOWED) @@ -701,7 +714,7 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan icon_state = "m_[icon_state]" item_state = "m_[item_state]" if(MAP_ARMOR_STYLE_ICE) - if(flags_item_map_variant & ITEM_ICE_VARIANT) + if(item_map_variant_flags & ITEM_ICE_VARIANT) if(colorable_allowed & PRESET_COLORS_ALLOWED) greyscale_colors = ARMOR_PALETTE_SNOW else if(colorable_allowed & ICON_STATE_VARIANTS_ALLOWED) @@ -710,7 +723,7 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan icon_state = "s_[icon_state]" item_state = "s_[item_state]" if(MAP_ARMOR_STYLE_PRISON) - if(flags_item_map_variant & ITEM_PRISON_VARIANT) + if(item_map_variant_flags & ITEM_PRISON_VARIANT) if(colorable_allowed & PRESET_COLORS_ALLOWED) greyscale_colors = ARMOR_PALETTE_BLACK else if(colorable_allowed & ICON_STATE_VARIANTS_ALLOWED) @@ -719,13 +732,13 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan icon_state = "k_[icon_state]" item_state = "k_[item_state]" if(MAP_ARMOR_STYLE_DESERT) - if(flags_item_map_variant & ITEM_DESERT_VARIANT) + if(item_map_variant_flags & ITEM_DESERT_VARIANT) if(colorable_allowed & PRESET_COLORS_ALLOWED) greyscale_colors = ARMOR_PALETTE_DESERT else if(colorable_allowed & ICON_STATE_VARIANTS_ALLOWED) current_variant = DESERT_VARIANT - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD] && (flags_item_map_variant & ITEM_ICE_PROTECTION)) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD] && (item_map_variant_flags & ITEM_ICE_PROTECTION)) min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE if(!greyscale_colors) @@ -824,7 +837,7 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan //The default action is attack_self(). //Checks before we get to here are: mob is alive, mob is not restrained, paralyzed, asleep, resting, laying, item is on the mob. /obj/item/proc/ui_action_click(mob/user, datum/action/item_action/action) - attack_self(user) + return attack_self(user) /obj/item/proc/toggle_item_state(mob/user) SHOULD_CALL_PARENT(TRUE) @@ -836,7 +849,7 @@ GLOBAL_DATUM_INIT(welding_sparks_prepdoor, /mutable_appearance, mutable_appearan set category = "Object" var/obj/item/I = get_active_held_item() - if(I && !(I.flags_item & ITEM_ABSTRACT)) + if(I && !(I.item_flags & ITEM_ABSTRACT)) visible_message("[src] holds up [I]. Take a closer look.") /* @@ -996,7 +1009,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. //This proc is here to prevent Xenomorphs from picking up objects (default attack_hand behaviour) //Note that this is overriden by every proc concerning a child of obj unless inherited -/obj/item/attack_alien(mob/living/carbon/xenomorph/X, isrightclick = FALSE) +/obj/item/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) return FALSE @@ -1011,7 +1024,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. return user.visible_message(span_danger("[user] sprays water from [src]!"), \ - span_warning("You spray water from [src]."),) + span_warning("You spray water from [src].")) playsound(user.loc, 'sound/effects/extinguish.ogg', 52, 1, 7) @@ -1238,16 +1251,14 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. return icon_override //2: species-specific sprite sheets. - var/icon = LAZYACCESS(sprite_sheets, species_type) - if(icon && !inhands) - return icon + . = LAZYACCESS(sprite_sheets, species_type) + if(. && !inhands) + return //3: slot-specific sprite sheets - icon = LAZYACCESS(item_icons, slot_name) - if(ispath(icon, /datum/greyscale_config)) - return SSgreyscale.GetColoredIconByType(icon, greyscale_colors) - if(icon) - return icon + . = LAZYACCESS(item_icons, slot_name) + if(.) + return //5: provided default_icon if(default_icon) @@ -1383,9 +1394,9 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. ///Handles registering if an item is flagged as deployed or not /obj/item/proc/toggle_deployment_flag(deployed) if(deployed) - ENABLE_BITFIELD(flags_item, IS_DEPLOYED) + ENABLE_BITFIELD(item_flags, IS_DEPLOYED) else - DISABLE_BITFIELD(flags_item, IS_DEPLOYED) + DISABLE_BITFIELD(item_flags, IS_DEPLOYED) ///Called by vendors when vending an item. Allows the item to specify what happens when it is given to the player. /obj/item/proc/on_vend(mob/user, faction, fill_container = FALSE, auto_equip = FALSE) diff --git a/code/game/objects/items/ashtray.dm b/code/game/objects/items/ashtray.dm index 1304a5f2dd228..537932d6c71f9 100644 --- a/code/game/objects/items/ashtray.dm +++ b/code/game/objects/items/ashtray.dm @@ -14,6 +14,8 @@ /obj/item/ashtray/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/trash/cigbutt) || istype(I, /obj/item/clothing/mask/cigarette) || istype(I, /obj/item/tool/match)) if(length(contents) >= max_butts) @@ -43,22 +45,29 @@ AM.forceMove(loc) return ..() - -/obj/item/ashtray/update_icon() +/obj/item/ashtray/update_desc(updates) + . = ..() if(length(contents) >= max_butts) - icon_state = icon_full desc = empty_desc + " It's stuffed full." return if(length(contents) >= max_butts / 2) - icon_state = icon_half desc = empty_desc + " It's half-filled." return - icon_state = icon_empty desc = empty_desc +/obj/item/ashtray/update_icon_state() + . = ..() + if(length(contents) >= max_butts) + icon_state = icon_full + return + if(length(contents) >= max_butts / 2) + icon_state = icon_half + return + + icon_state = icon_empty /obj/item/ashtray/plastic name = "plastic ashtray" diff --git a/code/game/objects/items/autopsy_scanner.dm b/code/game/objects/items/autopsy_scanner.dm index f4231813c6e4f..07ba8d87c6908 100644 --- a/code/game/objects/items/autopsy_scanner.dm +++ b/code/game/objects/items/autopsy_scanner.dm @@ -2,5 +2,5 @@ name = "autopsy scanner" desc = "Extracts information on wounds." icon_state = "autopsy_scanner" - flags_atom = CONDUCT + atom_flags = CONDUCT w_class = WEIGHT_CLASS_SMALL diff --git a/code/game/objects/items/binoculars.dm b/code/game/objects/items/binoculars.dm index aec8800e7bd1c..55b7033bf6465 100644 --- a/code/game/objects/items/binoculars.dm +++ b/code/game/objects/items/binoculars.dm @@ -7,7 +7,7 @@ slot_l_hand_str = 'icons/mob/inhands/equipment/binoculars_left.dmi', slot_r_hand_str = 'icons/mob/inhands/equipment/binoculars_right.dmi', ) - flags_atom = CONDUCT + atom_flags = CONDUCT force = 5 w_class = WEIGHT_CLASS_SMALL throwforce = 5 @@ -225,7 +225,7 @@ to_chat(user, span_notice("INITIATING LASER TARGETING. Stand still.")) if(!do_after(user, max(1.5 SECONDS, target_acquisition_delay - (2.5 SECONDS * user.skills.getRating(SKILL_LEADERSHIP))), NONE, TU, BUSY_ICON_GENERIC) || world.time < laser_cooldown || laser) return - if(targ_area.flags_area & OB_CAS_IMMUNE) + if(targ_area.area_flags & OB_CAS_IMMUNE) to_chat(user, span_warning("Our payload won't reach this target!")) return switch(mode) @@ -250,7 +250,7 @@ mortar.recieve_target(TU,user) return if(MODE_RAILGUN) - if(SSticker?.mode?.flags_round_type & MODE_DISALLOW_RAILGUN) + if(SSticker?.mode?.round_type_flags & MODE_DISALLOW_RAILGUN) to_chat(user, span_notice("ERROR. NO LINKED RAILGUN DETECTED. UNABLE TO FIRE.")) return to_chat(user, span_notice("ACQUIRING TARGET. RAILGUN TRIANGULATING. DON'T MOVE.")) diff --git a/code/game/objects/items/blink_drive.dm b/code/game/objects/items/blink_drive.dm index 4d5f031511e5e..5592cc1a24dc0 100644 --- a/code/game/objects/items/blink_drive.dm +++ b/code/game/objects/items/blink_drive.dm @@ -12,21 +12,25 @@ ) icon_state = "bluespace_pack" w_class = WEIGHT_CLASS_BULKY - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK obj_flags = CAN_BE_HIT light_range = 0.1 light_power = 0.1 light_color = LIGHT_COLOR_BLUE ///Number of teleport charges you currently have var/charges = 3 - ///True if you can use shift click/middle click to use it - var/selected = FALSE ///The timer for recharging the drive var/charge_timer ///The mob wearing the blink drive. Needed for item updates. var/mob/equipped_user + ///Controlling action + var/datum/action/ability/activable/item_toggle/blink_drive/blink_action COOLDOWN_DECLARE(blink_stability_cooldown) +/obj/item/blink_drive/Initialize(mapload) + . = ..() + blink_action = new(src) + /obj/item/blink_drive/update_icon() . = ..() equipped_user?.update_inv_back() @@ -52,68 +56,28 @@ . = ..() equipped_user = user if(slot == SLOT_BACK) - RegisterSignal(user, COMSIG_MOB_CLICK_ALT_RIGHT, PROC_REF(can_use)) - var/datum/action/item_action/toggle/action = new(src) - action.give_action(user) + blink_action.give_action(user) /obj/item/blink_drive/dropped(mob/user) . = ..() - UnregisterSignal(user, list(COMSIG_MOB_CLICK_ALT_RIGHT, COMSIG_MOB_MIDDLE_CLICK)) - UnregisterSignal(user, COMSIG_ITEM_EXCLUSIVE_TOGGLE) - selected = FALSE + blink_action.remove_action(user) equipped_user = null - LAZYCLEARLIST(actions) -/obj/item/blink_drive/ui_action_click(mob/user, datum/action/item_action/action) - if(selected) - UnregisterSignal(user, COMSIG_MOB_MIDDLE_CLICK) - action.set_toggle(FALSE) - UnregisterSignal(user, COMSIG_ITEM_EXCLUSIVE_TOGGLE) - else - RegisterSignal(user, COMSIG_MOB_MIDDLE_CLICK, PROC_REF(can_use)) - action.set_toggle(TRUE) - SEND_SIGNAL(user, COMSIG_ITEM_EXCLUSIVE_TOGGLE, user) - RegisterSignal(user, COMSIG_ITEM_EXCLUSIVE_TOGGLE, PROC_REF(unselect)) - selected = !selected /obj/item/blink_drive/apply_custom(mutable_appearance/standing, inhands, icon_used, state_used) . = ..() var/mutable_appearance/emissive_overlay = emissive_appearance(icon_used, "[state_used]_emissive") standing.overlays.Add(emissive_overlay) -///Signal handler for making it impossible to use middleclick to use the blink drive -/obj/item/blink_drive/proc/unselect(datum/source, mob/user) - SIGNAL_HANDLER - if(!selected) - return - selected = FALSE - UnregisterSignal(user, COMSIG_MOB_MIDDLE_CLICK) - UnregisterSignal(user, COMSIG_ITEM_EXCLUSIVE_TOGGLE) - - for(var/action in user.actions) - if(!istype(action, /datum/action/item_action)) - continue - var/datum/action/item_action/iaction = action - if(iaction?.holder_item == src) - iaction.set_toggle(FALSE) - -///Check if we can use the blink drive and give feedback to the user -/obj/item/blink_drive/proc/can_use(datum/source, atom/A) - SIGNAL_HANDLER - var/mob/living/carbon/human/human_user = usr - if(human_user.incapacitated() || human_user.lying_angle) - return - if(is_mainship_level(human_user.z)) - human_user.balloon_alert(human_user, "can't use here") - return - if(charges <= 0) - human_user.balloon_alert(human_user, "no charge") - playsound(src, 'sound/items/blink_empty.ogg', 25, 1) - return - INVOKE_ASYNC(src, PROC_REF(teleport), A, human_user) +/obj/item/blink_drive/ui_action_click(mob/user, datum/action/item_action/action, target) + return teleport(target, user) ///Handles the actual teleportation /obj/item/blink_drive/proc/teleport(atom/A, mob/user) + if(charges <= 0) + user.balloon_alert(user, "no charge") + playsound(src, 'sound/items/blink_empty.ogg', 25, 1) + return var/turf/target_turf = get_turf(A) if(target_turf == user.loc) @@ -165,6 +129,7 @@ deltimer(charge_timer) charge_timer = addtimer(CALLBACK(src, PROC_REF(recharge)), BLINK_DRIVE_CHARGE_TIME * 2, TIMER_STOPPABLE) update_icon() + return TRUE ///Recharges the drive, and sets another timer if not maxed out /obj/item/blink_drive/proc/recharge() @@ -219,3 +184,19 @@ traits += "Shared use:
If the user has grabbed another mob when activating the drive, the grabbed mob will be teleported with them.
" . += jointext(traits, "
") + +/datum/action/ability/activable/item_toggle/blink_drive + name = "Use Blink Drive" + action_icon_state = "axe_sweep" + desc = "Teleport a short distance instantly." + use_state_flags = ABILITY_USE_STAGGERED|ABILITY_USE_BUSY + keybinding_signals = list(KEYBINDING_NORMAL = COMSIG_ITEM_TOGGLE_BLINKDRIVE) + +/datum/action/ability/activable/item_toggle/blink_drive/can_use_ability(silent, override_flags, selecting) + var/mob/living/carbon/carbon_owner = owner + if(carbon_owner.incapacitated() || carbon_owner.lying_angle) + return FALSE + if(is_mainship_level(carbon_owner.z)) + carbon_owner.balloon_alert(carbon_owner, "can't use here") + return FALSE + return ..() diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index d0b930b3f098d..0b802f8bdf236 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -68,6 +68,8 @@ var/obj/item/bodybag/foldedbag_instance = null var/obj/structure/bed/roller/roller_buckled //the roller bed this bodybag is attached to. var/mob/living/bodybag_occupant + ///Should the name of the person inside be displayed? + var/display_name = TRUE /obj/structure/closet/bodybag/Initialize(mapload, foldedbag) @@ -94,7 +96,10 @@ return ..() -/obj/structure/closet/bodybag/proc/update_name() +/obj/structure/closet/bodybag/update_name(updates) + . = ..() + if(!display_name) + return if(opened) name = bag_name else @@ -106,6 +111,8 @@ /obj/structure/closet/bodybag/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tool/pen)) var/t = stripped_input(user, "What would you like the label to be?", name, null, MAX_MESSAGE_LEN) @@ -145,7 +152,7 @@ var/mob/living/carbon/human/new_guest = locate() in contents if(new_guest) bodybag_occupant = new_guest - update_name() + update_appearance() return TRUE return FALSE @@ -154,7 +161,7 @@ . = ..() if(bodybag_occupant) bodybag_occupant = null - update_name() + update_appearance() /obj/structure/closet/bodybag/MouseDrop(over_object, src_location, over_location) @@ -188,7 +195,8 @@ return ..() -/obj/structure/closet/bodybag/update_icon() +/obj/structure/closet/bodybag/update_icon_state() + . = ..() if(!opened) icon_state = icon_closed for(var/mob/living/L in contents) @@ -198,15 +206,15 @@ icon_state = icon_opened -/obj/structure/closet/bodybag/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/structure/closet/bodybag/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return FALSE if(opened) return FALSE // stop xeno closing things - X.do_attack_animation(src, ATTACK_EFFECT_CLAW) - bodybag_occupant?.attack_alien(X) + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_CLAW) + bodybag_occupant?.attack_alien(xeno_attacker) open() - X.visible_message(span_danger("\The [X] slashes \the [src] open!"), \ + xeno_attacker.visible_message(span_danger("\The [xeno_attacker] slashes \the [src] open!"), \ span_danger("We slash \the [src] open!"), null, 5) return TRUE @@ -326,19 +334,34 @@ /obj/structure/closet/bodybag/cryobag/examine(mob/living/user) . = ..() - if(!ishuman(bodybag_occupant)) + var/mob/living/carbon/human/occupant = bodybag_occupant + if(!ishuman(occupant)) return if(!hasHUD(user,"medical")) return for(var/datum/data/record/medical_record AS in GLOB.datacore.medical) - if(medical_record.fields["name"] != bodybag_occupant.real_name) + if(medical_record.fields["name"] != occupant.real_name) continue if(!(medical_record.fields["last_scan_time"])) . += "No scan report on record" else . += "Scan from [medical_record.fields["last_scan_time"]]" break - + if(occupant.stat != DEAD) + return + var/timer = 0 // variable for DNR timer check + timer = (TIME_BEFORE_DNR-(occupant.dead_ticks))*2 //Time to DNR left in seconds + if(!occupant.mind && !occupant.get_ghost(TRUE) || occupant.dead_ticks > TIME_BEFORE_DNR || occupant.suiciding) //We couldn't find a suitable ghost or patient has passed their DNR timer or suicided, this means the person is not returning + . += span_scanner("Patient is DNR") + else if(!occupant.mind && occupant.get_ghost(TRUE)) // Ghost is available but outside of the body + . += span_scanner("Defib patient to check departed status") + . += span_scanner("Patient have [timer] seconds left before DNR") + else if(!occupant.client) //Mind is in the body but no client, most likely currently disconnected. + . += span_scanner("Patient is almost departed") + . += span_scanner("Patient have [timer] seconds left before DNR") + else + . += span_scanner("Patient have [timer] seconds left before DNR") + /obj/structure/closet/bodybag/cryobag/Topic(href, href_list) . = ..() @@ -416,6 +439,7 @@ close_sound = 'sound/effects/vegetation_walk_2.ogg' foldedbag_path = /obj/item/bodybag/tarp closet_stun_delay = 0.5 SECONDS //Short delay to prevent ambushes from being too degenerate. + display_name = FALSE var/serial_number //Randomized serial number used to stop point macros and such. @@ -453,11 +477,6 @@ SIGNAL_HANDLER open() - -/obj/structure/closet/bodybag/tarp/update_name() - return //Shouldn't be revealing who's inside. - - /obj/structure/closet/bodybag/tarp/MouseDrop(over_object, src_location, over_location) . = ..() var/obj/item/bodybag/tarp/folded_tarp = foldedbag_instance diff --git a/code/game/objects/items/books/book.dm b/code/game/objects/items/books/book.dm index 9b5b08a224639..383cc39b5bc2b 100644 --- a/code/game/objects/items/books/book.dm +++ b/code/game/objects/items/books/book.dm @@ -45,6 +45,8 @@ /obj/item/book/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tool/pen)) if(unique) diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index fc123ad2594a2..945a3c36d0671 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -67,7 +67,7 @@ desc = "It's a card with a magnetic strip attached to some circuitry." name = "cryptographic sequencer" icon_state = "emag" - flags_item = NOBLUDGEON + item_flags = NOBLUDGEON /obj/item/card/id @@ -76,7 +76,9 @@ icon_state = "id" var/access = list() var/registered_name = "Unknown" // The name registered_name on the card - flags_equip_slot = ITEM_SLOT_ID + equip_slot_flags = ITEM_SLOT_ID + ///Miscelaneous ID flags + var/id_flags = CAN_BUY_LOADOUT var/blood_type = "\[UNSET\]" @@ -86,8 +88,6 @@ ///What category of items can you buy - used for armor and poucehs var/marine_buy_choices = list() - var/can_buy_loadout = TRUE - //alt titles are handled a bit weirdly in order to unobtrusively integrate into existing ID system var/assignment = null //can be alt title or the actual job var/rank = null //actual job @@ -251,6 +251,7 @@ var/dogtag_taken = FALSE /obj/item/card/id/dogtag/update_icon_state() + . = ..() if(dogtag_taken) icon_state = initial(icon_state) + "_taken" return @@ -340,6 +341,8 @@ /obj/item/dogtag/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/dogtag)) var/obj/item/dogtag/D = I diff --git a/code/game/objects/items/circuitboards/circuitboard.dm b/code/game/objects/items/circuitboards/circuitboard.dm index 93954a07aa4b9..9a99c8da7e7af 100644 --- a/code/game/objects/items/circuitboards/circuitboard.dm +++ b/code/game/objects/items/circuitboards/circuitboard.dm @@ -8,7 +8,7 @@ slot_r_hand_str = 'icons/mob/inhands/equipment/engineering_right.dmi', ) item_state = "electronic" - flags_atom = CONDUCT + atom_flags = CONDUCT var/build_path = null //Called when the circuitboard is used to contruct a new machine. diff --git a/code/game/objects/items/circuitboards/computer.dm b/code/game/objects/items/circuitboards/computer.dm index 65e8a0371e7b8..0eb2433e62348 100644 --- a/code/game/objects/items/circuitboards/computer.dm +++ b/code/game/objects/items/circuitboards/computer.dm @@ -175,6 +175,8 @@ /obj/item/circuitboard/computer/security/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/card/id)) if(!check_access(I)) diff --git a/code/game/objects/items/circuitboards/machine.dm b/code/game/objects/items/circuitboards/machine.dm index 044e5626dfbc9..581ab737e0895 100644 --- a/code/game/objects/items/circuitboards/machine.dm +++ b/code/game/objects/items/circuitboards/machine.dm @@ -88,6 +88,8 @@ to destroy them and players will be able to make replacements. /obj/item/circuitboard/machine/unary_atmos/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(isscrewdriver(I)) machine_dir = turn(machine_dir, 90) diff --git a/code/game/objects/items/cloaking.dm b/code/game/objects/items/cloaking.dm index 0b33c71291553..f7c8e8acbd487 100644 --- a/code/game/objects/items/cloaking.dm +++ b/code/game/objects/items/cloaking.dm @@ -6,8 +6,8 @@ name = "chameleon-projector" icon = 'icons/obj/device.dmi' icon_state = "shield0" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT item_icons = list( slot_l_hand_str = 'icons/mob/inhands/equipment/engineering_left.dmi', slot_r_hand_str = 'icons/mob/inhands/equipment/engineering_right.dmi', diff --git a/code/game/objects/items/cocoon.dm b/code/game/objects/items/cocoon.dm index 46dfd2b7b3b4f..3e9cbcd756b8d 100644 --- a/code/game/objects/items/cocoon.dm +++ b/code/game/objects/items/cocoon.dm @@ -42,11 +42,12 @@ /obj/structure/cocoon/process() var/psych_points_output = COCOON_PSY_POINTS_REWARD_MIN + ((HIGH_PLAYER_POP - SSmonitor.maximum_connected_players_count) / HIGH_PLAYER_POP * (COCOON_PSY_POINTS_REWARD_MAX - COCOON_PSY_POINTS_REWARD_MIN)) psych_points_output = clamp(psych_points_output, COCOON_PSY_POINTS_REWARD_MIN, COCOON_PSY_POINTS_REWARD_MAX) - SSpoints.add_psy_points(hivenumber, psych_points_output) + SSpoints.add_strategic_psy_points(hivenumber, psych_points_output) + SSpoints.add_tactical_psy_points(hivenumber, psych_points_output*0.25) //Gives marine cloneloss for a total of 30. victim.adjustCloneLoss(0.5) -/obj/structure/cocoon/take_damage(damage_amount, damage_type, damage_flag, effects, attack_dir, armour_penetration) +/obj/structure/cocoon/take_damage(damage_amount, damage_type = BRUTE, armor_type = null, effects = TRUE, attack_dir, armour_penetration = 0, mob/living/blame_mob) . = ..() if(anchored && obj_integrity < max_integrity / 2) unanchor_from_nest() @@ -115,6 +116,7 @@ return ..() /obj/structure/cocoon/update_icon_state() + . = ..() if(anchored) icon_state = "xeno_cocoon" return diff --git a/code/game/objects/items/coins.dm b/code/game/objects/items/coins.dm index a6cc0074219db..bb1a2c1f017ce 100644 --- a/code/game/objects/items/coins.dm +++ b/code/game/objects/items/coins.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/items/items.dmi' name = "Coin" icon_state = "coin" - flags_atom = CONDUCT + atom_flags = CONDUCT w_class = WEIGHT_CLASS_TINY var/string_attached var/sides = 2 @@ -49,6 +49,8 @@ /obj/item/coin/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/CC = I diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm index e1a48cd55d424..44cc2c3024f7c 100644 --- a/code/game/objects/items/cosmetics.dm +++ b/code/game/objects/items/cosmetics.dm @@ -31,33 +31,33 @@ icon_state = "full_camo" -/obj/item/facepaint/attack(mob/M as mob, mob/user as mob) - if(!ismob(M)) return +/obj/item/facepaint/attack(mob/M, mob/user) + . = ..() + if(!ishuman(M)) + to_chat(user, span_warning("Foiled!")) + return - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.lip_style) //if they already have lipstick on - to_chat(user, span_warning("You need to wipe the old paint off with paper first!")) - return - if(H == user) - paint_face(H, user) - return 1 - else - to_chat(user, span_notice("You attempt to apply [src] on [H]...")) - to_chat(H, span_notice("[user] is trying to apply [src] on your face...")) - if(tgui_alert(H, "Will you allow [user] to paint your face?", null, list("Sure","No")) == "Sure") - if( user && loc == user && (user in range(1,H)) ) //Have to be close and hold the thing. - paint_face(H, user) - return 1 + var/mob/living/carbon/human/attacked_human = M + if(attacked_human.makeup_style) //if they already have lipstick on + to_chat(user, span_warning("You need to wipe the old paint off with paper first!")) + return - to_chat(user, span_warning("Foiled!")) + if(attacked_human != user && attacked_human.client) + user.visible_message(span_notice("[user] is trying to apply [src] on [attacked_human]'s face..."), span_notice("You attempt to apply [src] on [attacked_human]...")) + if(tgui_alert(attacked_human, "Apply makeup", "Will you allow [user] to paint your face?", list("Yes","No")) != "Yes") + return + if(!user || loc != user || !user.Adjacent(attacked_human)) + return + paint_face(attacked_human, user) +///Handles applying the makeup /obj/item/facepaint/proc/paint_face(mob/living/carbon/human/H, mob/user) - if(!H || !user) return //In case they're passed as null. + if(!H || !user) + return //In case they're passed as null. user.visible_message(span_notice("[user] carefully applies [src] on [H]'s face."), \ span_notice("You apply [src].")) - H.lip_style = colour + H.makeup_style = colour H.alpha = max(0, initial(H.alpha) - 1) // decreases your alpha by 1 H.update_body() uses-- @@ -66,5 +66,3 @@ user.update_inv_l_hand(0) user.update_inv_r_hand() qdel(src) - -//you can wipe off lipstick with paper! see code/modules/paperwork/paper.dm, paper/attack() diff --git a/code/game/objects/items/defibrillator.dm b/code/game/objects/items/defibrillator.dm index e5572f75c6ae5..45be80a9d6097 100644 --- a/code/game/objects/items/defibrillator.dm +++ b/code/game/objects/items/defibrillator.dm @@ -4,9 +4,9 @@ icon = 'icons/obj/items/defibrillator.dmi' icon_state = "defib_full" item_state = "defib" - flags_atom = CONDUCT - flags_item = NOBLUDGEON - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + item_flags = NOBLUDGEON + equip_slot_flags = ITEM_SLOT_BELT force = 5 throwforce = 6 w_class = WEIGHT_CLASS_NORMAL @@ -44,6 +44,7 @@ /obj/item/defibrillator/update_icon_state() + . = ..() icon_state = "defib" if(ready) icon_state += "_out" @@ -126,7 +127,7 @@ stack_trace("Powercell deleted while powering the defib, this isn't supposed to happen normally.") set_dcell(null) -/mob/living/proc/get_ghost() +/mob/living/proc/get_ghost(bypass_client_check = FALSE) if(client) //Let's call up the correct ghost! return null for(var/mob/dead/observer/ghost AS in GLOB.observer_list) @@ -136,7 +137,7 @@ continue if(ghost.can_reenter_corpse.resolve() != src) continue - if(ghost.client) + if(ghost.client || bypass_client_check) return ghost return null @@ -196,17 +197,20 @@ user.visible_message(span_warning("[icon2html(src, viewers(user))] \The [src] buzzes: Patient's organs are too damaged to sustain life. Deliver patient to a MD for surgical intervention.")) return - if((H.wear_suit && H.wear_suit.flags_atom & CONDUCT)) + if((H.wear_suit && H.wear_suit.atom_flags & CONDUCT)) user.visible_message(span_warning("[icon2html(src, viewers(user))] \The [src] buzzes: Paddles registering >100,000 ohms, Possible cause: Suit or Armor interferring.")) return var/mob/dead/observer/G = H.get_ghost() if(G) G.reenter_corpse() - else if(!H.client) + else if(!H.mind && !H.get_ghost(TRUE)) //We couldn't find a suitable ghost, this means the person is not returning user.visible_message(span_warning("[icon2html(src, viewers(user))] \The [src] buzzes: Patient has a DNR.")) return + else if(!H.client) //Currently disconnected. + user.visible_message(span_warning("[icon2html(src, viewers(user))] \The [src] buzzes: Patient's soul has almost departed. Please try again.")) + return user.visible_message(span_notice("[user] starts setting up the paddles on [H]'s chest."), span_notice("You start setting up the paddles on [H]'s chest.")) @@ -230,7 +234,7 @@ H.visible_message(span_danger("[H]'s body convulses a bit.")) defib_cooldown = world.time + 10 //1 second cooldown before you can shock again - if(H.wear_suit && H.wear_suit.flags_atom & CONDUCT) + if(H.wear_suit && H.wear_suit.atom_flags & CONDUCT) user.visible_message(span_warning("[icon2html(src, viewers(user))] \The [src] buzzes: Defibrillation failed: Paddles registering >100,000 ohms, Possible cause: Suit or Armor interferring.")) return @@ -252,19 +256,19 @@ user.visible_message("[icon2html(src, viewers(user))] \The [src] buzzes: Positronic brain missing, cannot reboot.") return - if(!H.client) //Freak case, no client at all. This is a braindead mob (like a colonist) + if(!H.client) //Either client disconnected after being dragged in, ghosted, or this mob isn't a player (but that is caught way earlier). user.visible_message(span_warning("[icon2html(src, viewers(user))] \The [src] buzzes: No soul detected, Attempting to revive...")) - if(H.mind && !H.client) //Let's call up the correct ghost! Also, bodies with clients only, thank you. - G = H.get_ghost() + if(!H.mind) //Check if their ghost still exists if they aren't in their body. + G = H.get_ghost(TRUE) if(istype(G)) user.visible_message(span_warning("[icon2html(src, viewers(user))] \The [src] buzzes: Defibrillation failed. Patient's soul has almost departed, please try again.")) return - //We couldn't find a suitable ghost, this means the person is not returning + //No mind and no associated ghost exists. This one is DNR. user.visible_message(span_warning("[icon2html(src, viewers(user))] \The [src] buzzes: Patient has a DNR.")) return - if(!H.client) //Freak case, no client at all. This is a braindead mob (like a colonist) or someone who didn't enter their body in time. + if(!H.client) //No client, but has a mind. This means the player was in their body, but potentially disconnected. user.visible_message(span_warning("[icon2html(src, viewers(user))] \The [src] buzzes: Defibrillation failed. No soul detected. Please try again.")) playsound(get_turf(src), 'sound/items/defib_failed.ogg', 35, 0) return @@ -310,10 +314,18 @@ H.updatehealth() //One more time, so it doesn't show the target as dead on HUDs H.dead_ticks = 0 //We reset the DNR time H.initial_stage = 0 // RUTGMC ADDITION + + //Checks if our "patient" is wearing a camera. Then it turns it on if it's off. + if(istype(H.wear_ear, /obj/item/radio/headset/mainship)) + var/obj/item/radio/headset/mainship/cam_headset = H.wear_ear + if(!(cam_headset?.camera?.status)) + cam_headset.camera.toggle_cam(null, FALSE) + REMOVE_TRAIT(H, TRAIT_PSY_DRAINED, TRAIT_PSY_DRAINED) if(user.client) var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[user.ckey] personal_statistics.revives++ + personal_statistics.mission_revives++ GLOB.round_statistics.total_human_revives[H.faction]++ SSblackbox.record_feedback("tally", "round_statistics", 1, "total_human_revives[H.faction]") to_chat(H, span_notice("You suddenly feel a spark and your consciousness returns, dragging you back to the mortal plane.")) @@ -330,47 +342,74 @@ icon_state = "civ_defib_full" item_state = "defib" +/obj/item/defibrillator/internal + icon = 'icons/obj/clothing/gloves.dmi' //even though you'll never see this directly, it shows up in the chat panel due to icon2html + ready = TRUE + ready_needed = FALSE + ///Parent item containing this defib + var/obj/parent_obj + +/obj/item/defibrillator/internal/Initialize(mapload, obj/new_parent) + if(!istype(new_parent)) + return INITIALIZE_HINT_QDEL + parent_obj = new_parent + return ..() + +/obj/item/defibrillator/internal/Destroy() + parent_obj = null + return ..() -/obj/item/defibrillator/gloves +/obj/item/defibrillator/internal/update_icon() + . = ..() + parent_obj.update_icon() + +/obj/item/clothing/gloves/defibrillator name = "advanced medical combat gloves" - desc = "Advanced medical gloves, these include small electrodes to defibrilate a patiant. No more bulky units!" - icon_state = "defib_gloves" + desc = "Advanced medical gloves, these include small electrodes to defibrilate a patient No more bulky units!" + icon_state = "defib_out_full" item_state = "defib_gloves" - ready = TRUE - ready_needed = FALSE - flags_equip_slot = ITEM_SLOT_GLOVES - w_class = WEIGHT_CLASS_SMALL - icon = 'icons/obj/clothing/gloves.dmi' - item_state_worn = TRUE - siemens_coefficient = 0.50 - blood_sprite_state = "bloodyhands" - flags_armor_protection = HANDS - flags_equip_slot = ITEM_SLOT_GLOVES - attack_verb = "zaps" soft_armor = list(MELEE = 25, BULLET = 15, LASER = 10, ENERGY = 15, BOMB = 15, BIO = 5, FIRE = 15, ACID = 15) - flags_cold_protection = HANDS - flags_heat_protection = HANDS + cold_protection_flags = HANDS + heat_protection_flags = HANDS min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE + ///The internal defib item + var/obj/item/defibrillator/internal/internal_defib -/obj/item/defibrillator/gloves/equipped(mob/living/carbon/human/user, slot) +/obj/item/clothing/gloves/defibrillator/Initialize(mapload) + . = ..() + internal_defib = new(src, src) + update_icon() + +/obj/item/clothing/gloves/defibrillator/Destroy() + internal_defib = null + return ..() + +/obj/item/clothing/gloves/defibrillator/equipped(mob/living/carbon/human/user, slot) . = ..() if(user.gloves == src) RegisterSignal(user, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, PROC_REF(on_unarmed_attack)) else UnregisterSignal(user, COMSIG_HUMAN_MELEE_UNARMED_ATTACK) -/obj/item/defibrillator/gloves/unequipped(mob/living/carbon/human/user, slot) +/obj/item/clothing/gloves/defibrillator/unequipped(mob/living/carbon/human/user, slot) . = ..() UnregisterSignal(user, COMSIG_HUMAN_MELEE_UNARMED_ATTACK) //Unregisters in the case of getting delimbed +/obj/item/clothing/gloves/defibrillator/examine(mob/user) + . = ..() + . += internal_defib.maybe_message_recharge_hint() + +/obj/item/clothing/gloves/defibrillator/update_icon_state() + . = ..() + if(!internal_defib) //should only happen on init + return + icon_state = internal_defib.icon_state + //when you are wearing these gloves, this will call the normal attack code to begin defibing the target -/obj/item/defibrillator/gloves/proc/on_unarmed_attack(mob/living/carbon/human/user, mob/living/carbon/human/target) +/obj/item/clothing/gloves/defibrillator/proc/on_unarmed_attack(mob/living/carbon/human/user, mob/living/carbon/human/target) + SIGNAL_HANDLER if(user.a_intent != INTENT_HELP) return if(istype(user) && istype(target)) - defibrillate(target, user) - -/obj/item/defibrillator/gloves/update_icon_state() - return - + INVOKE_ASYNC(internal_defib, TYPE_PROC_REF(/obj/item/defibrillator, defibrillate), target, user) diff --git a/code/game/objects/items/devices/squad_transfer_tablet.dm b/code/game/objects/items/devices/squad_transfer_tablet.dm index 7099a4b6a72d3..bbcc5fa7cccad 100644 --- a/code/game/objects/items/devices/squad_transfer_tablet.dm +++ b/code/game/objects/items/devices/squad_transfer_tablet.dm @@ -3,7 +3,7 @@ desc = "A tablet for quickly transfering the squaddies from under one incompetent squad leader to another." icon = 'icons/Marine/marine-navigation.dmi' icon_state = "req_tablet_off" - flags_equip_slot = ITEM_SLOT_POCKET + equip_slot_flags = ITEM_SLOT_POCKET w_class = WEIGHT_CLASS_SMALL interaction_flags = INTERACT_MACHINE_TGUI /// REF()s for all currently active transfering marines diff --git a/code/game/objects/items/devices/tablets.dm b/code/game/objects/items/devices/tablets.dm index 53140f52d5904..297ae718e807a 100644 --- a/code/game/objects/items/devices/tablets.dm +++ b/code/game/objects/items/devices/tablets.dm @@ -4,7 +4,7 @@ icon = 'icons/Marine/marine-navigation.dmi' icon_state = "req_tablet_off" req_access = list(ACCESS_NT_CORPORATE) - flags_equip_slot = ITEM_SLOT_POCKET + equip_slot_flags = ITEM_SLOT_POCKET w_class = WEIGHT_CLASS_SMALL interaction_flags = INTERACT_MACHINE_TGUI @@ -50,6 +50,11 @@ dat += " delta" network = list("delta") req_access = list(ACCESS_MARINE_LEADER, ACCESS_MARINE_DELTA) + else + var/lowername = lowertext(squad.name) + dat = dat + " " + lowername + network = list(lowername) + req_access = list(ACCESS_MARINE_LEADER) dat += " squad leader's" if(/datum/job/terragov/command/captain) dat += " captain's" @@ -61,8 +66,12 @@ req_access = list(ACCESS_MARINE_BRIDGE, ACCESS_MARINE_LEADER) if(/datum/job/terragov/command/pilot) dat += " pilot's" - network = list("dropship1", "dropship2") + network = list("dropship1") req_access = list(ACCESS_MARINE_PILOT, ACCESS_MARINE_DROPSHIP) + if(/datum/job/terragov/command/transportofficer) + dat += " transport officer's" + network = list("dropship2") + req_access = list(ACCESS_MARINE_PILOT, ACCESS_MARINE_TADPOLE) name = dat + " hud tablet" // Convert networks to lowercase for(var/i in network) @@ -252,10 +261,15 @@ /obj/item/hud_tablet/pilot name = "pilot officers's hud tablet" - network = list("dropship1", "dropship2") + network = list("dropship1") req_access = list(ACCESS_MARINE_PILOT, ACCESS_MARINE_DROPSHIP) max_view_dist = WORLD_VIEW_NUM +/obj/item/hud_tablet/transportofficer + name = "transport officer's hud tablet" + network = list("dropship2") + req_access = list(ACCESS_MARINE_PILOT, ACCESS_MARINE_TADPOLE) + max_view_dist = WORLD_VIEW_NUM /obj/item/hud_tablet/artillery name = "artillery impact hud tablet" diff --git a/code/game/objects/items/devices/tweezers.dm b/code/game/objects/items/devices/tweezers.dm index d004f056f8a56..f4e4349e5cbed 100644 --- a/code/game/objects/items/devices/tweezers.dm +++ b/code/game/objects/items/devices/tweezers.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/items/surgery_tools.dmi' icon_state = "tweezers" item_state = "tweezers" - flags_item = NOBLUDGEON + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_SMALL /* RUTGMC REMOVAL @@ -19,7 +19,7 @@ icon = 'icons/obj/items/surgery_tools.dmi' icon_state = "predator_bone-gel" item_state = "predator_bone-gel" - flags_item = NOBLUDGEON + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_SMALL /obj/item/tweezers_advanced/Initialize(mapload) diff --git a/code/game/objects/items/embedding.dm b/code/game/objects/items/embedding.dm index 7d5d84cd68ce5..4eb47cd666cdf 100644 --- a/code/game/objects/items/embedding.dm +++ b/code/game/objects/items/embedding.dm @@ -79,7 +79,7 @@ stack_trace("limb_embed called for QDELETED [embedding]") embedding?.unembed_ourself() return FALSE - if(HAS_TRAIT(embedding, TRAIT_NODROP) || (embedding.flags_item & DELONDROP)) + if(HAS_TRAIT(embedding, TRAIT_NODROP) || (embedding.item_flags & DELONDROP)) stack_trace("limb_embed called for TRAIT_NODROP or DELONDROP [embedding]") embedding.unembed_ourself() return FALSE diff --git a/code/game/objects/items/explosives/bombvest.dm b/code/game/objects/items/explosives/bombvest.dm index 0afe25235fc1c..a69f9ff911813 100644 --- a/code/game/objects/items/explosives/bombvest.dm +++ b/code/game/objects/items/explosives/bombvest.dm @@ -4,8 +4,8 @@ icon_state = "boom_vest" soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0) slowdown = 0 - flags_item_map_variant = NONE - flags_armor_features = NONE + item_map_variant_flags = NONE + armor_features_flags = NONE ///Warcry to yell upon detonation var/bomb_message ///List of warcries that are not allowed. diff --git a/code/game/objects/items/explosives/grenades/bullet_grenade.dm b/code/game/objects/items/explosives/grenades/bullet_grenade.dm new file mode 100644 index 0000000000000..58cd11676fb71 --- /dev/null +++ b/code/game/objects/items/explosives/grenades/bullet_grenade.dm @@ -0,0 +1,69 @@ +///bullet grenade: shoots bullets out from itself in a ring +/obj/item/explosive/grenade/bullet + name = "\improper M90 leadburster grenade" + desc = "Leadburster grenades release a short burst of projectiles after detonation. Keep far away from friendlies. Or don't. I'm just a label." + icon_state = "grenade_rad" + item_state = "grenade_rad" + icon_state_mini = "grenade_red" + det_time = 40 + arm_sound = 'sound/weapons/armbomb.ogg' + hud_state = "grenade_he" + + /// amount of rotations that we will do with these bullets + var/rotations = 2 + ///whether we randomly emit or in equal intervals + var/randomized = FALSE + ///sound to play while shooting + var/fire_sound = 'sound/weapons/burst_phaser2.ogg' + /// total amount of bullets to fire, split evenly between rotations + var/projectile_count = 30 + /// range of the bullets + var/range = 7 + /// speed of the bullets + var/speed = 2 + /// ammo type to shoot out: can be ANY ammo type + var/datum/ammo/ammo_type = /datum/ammo/energy/lasgun/marine/heavy_laser + +/obj/item/explosive/grenade/bullet/prime() + var/list/bullets = list() + var/proj_type = /obj/projectile + if(initial(ammo_type.ammo_behavior_flags) & AMMO_HITSCAN) + proj_type = /obj/projectile/hitscan + for(var/i=1 to projectile_count) + var/obj/projectile/proj = new proj_type(src, initial(ammo_type.hitscan_effect_icon)) + proj.generate_bullet(ammo_type) + bullets += proj + + bullet_burst(src, bullets, null, fire_sound, range, speed, randomized, rotations) + qdel(src) + + +/obj/item/explosive/grenade/bullet/laser + name = "\improper M80 lasburster grenade" + desc = "Lasburster grenades are supercharged to scatter a beam around them when detonating. Keep far away from friendlies. Or don't. I'm just a label." + icon_state = "grenade_lasburster" + item_state = "grenade_lasburster" + icon_state_mini = "grenade_lasburster" + det_time = 40 + hud_state = "grenade_lasburster" + + rotations = -1 + fire_sound = 'sound/weapons/burst_phaser2.ogg' + projectile_count = 20 + ammo_type = /datum/ammo/energy/lasburster + +/obj/item/explosive/grenade/bullet/hefa + name = "\improper M25 HEFA grenade" + desc = "High explosive fragmentation grenades cause a powerful yet very small explosion combined with a scattering ring of buckshot shrapnel, please throw very, very, VERY far away." + icon_state = "grenade_hefa2" + item_state = "grenade_hefa2" + icon_state_mini = "grenade_hefa" + hud_state = "grenade_hefa2" + rotations = -1 + fire_sound = null + projectile_count = 50 + ammo_type = /datum/ammo/bullet/hefa_buckshot + +/obj/item/explosive/grenade/bullet/hefa/prime() + explosion(loc, light_impact_range = 2, heavy_impact_range = 1) + return ..() diff --git a/code/game/objects/items/explosives/grenades/chem_grenade.dm b/code/game/objects/items/explosives/grenades/chem_grenade.dm index 45e48dfd03a88..4b01313956619 100644 --- a/code/game/objects/items/explosives/grenades/chem_grenade.dm +++ b/code/game/objects/items/explosives/grenades/chem_grenade.dm @@ -40,7 +40,7 @@ else return ..() -/obj/item/explosive/grenade/chem_grenade/razorburn_smol/attackby(obj/item/I, mob/user, params) +/obj/item/explosive/grenade/chem_grenade/razorburn_small/attackby(obj/item/I, mob/user, params) to_chat(user, span_notice("The [initial(name)] is hermetically sealed, and does not open.")) return @@ -237,7 +237,7 @@ icon_state = initial(icon_state) +"_locked" -/obj/item/explosive/grenade/chem_grenade/razorburn_smol +/obj/item/explosive/grenade/chem_grenade/razorburn_small name = "Razorburn Grenade" desc = "Contains construction nanites ready to turn a small area into razorwire after a few seconds. DO NOT ENTER AREA WHILE ACTIVE." icon_state = "grenade_razorburn" @@ -247,7 +247,7 @@ icon_state_mini = "grenade_chem_yellow" -/obj/item/explosive/grenade/chem_grenade/razorburn_smol/Initialize(mapload, ...) +/obj/item/explosive/grenade/chem_grenade/razorburn_small/Initialize(mapload, ...) . = ..() var/obj/item/reagent_containers/glass/beaker/B1 = new(src) var/obj/item/reagent_containers/glass/beaker/B2 = new(src) diff --git a/code/game/objects/items/explosives/grenades/grenade.dm b/code/game/objects/items/explosives/grenades/grenade.dm index 1e4f136a485e3..71ef9d7067783 100644 --- a/code/game/objects/items/explosives/grenades/grenade.dm +++ b/code/game/objects/items/explosives/grenades/grenade.dm @@ -11,8 +11,8 @@ item_state = "grenade" throw_speed = 3 throw_range = 7 - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT hitsound = 'sound/weapons/smash.ogg' icon_state_mini = "grenade_red" ///if launched from a UGL/grenade launcher @@ -61,9 +61,10 @@ /obj/item/explosive/grenade/afterattack(atom/target, mob/user, has_proximity, click_parameters) . = ..() - if(!active) + if(!active || user.next_move > world.time) return - user.throw_item(target) + if(user.throw_item(target)) + user.changeNext_move(CLICK_CD_THROWING) /obj/item/explosive/grenade/proc/activate(mob/user) if(active) @@ -72,7 +73,8 @@ if(user) log_bomber(user, "primed", src) var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[user.ckey] - personal_statistics.grenades_primed++ + personal_statistics.grenades_primed ++ + personal_statistics.mission_grenades_primed ++ icon_state = initial(icon_state) + "_active" active = TRUE @@ -125,7 +127,7 @@ ///The range range for the grenade's weak effect var/outer_range = 7 ///The potency of the grenade - var/rad_strength = 20 + var/rad_strength = 16 /obj/item/explosive/grenade/rad/prime() var/turf/impact_turf = get_turf(src) diff --git a/code/game/objects/items/explosives/grenades/marines.dm b/code/game/objects/items/explosives/grenades/marines.dm index 93d1350e079a2..6f617f5d1dab5 100644 --- a/code/game/objects/items/explosives/grenades/marines.dm +++ b/code/game/objects/items/explosives/grenades/marines.dm @@ -220,18 +220,14 @@ qdel(src) -/proc/flame_radius(radius = 1, turf/epicenter, burn_intensity = 25, burn_duration = 25, burn_damage = 25, fire_stacks = 15, int_var = 0.5, dur_var = 0.5, colour = "red") //~Art updated fire. +/proc/flame_radius(radius = 1, turf/epicenter, burn_intensity = 25, burn_duration = 25, burn_damage = 25, fire_stacks = 15, colour = "red") //~Art updated fire. if(!isturf(epicenter)) CRASH("flame_radius used without a valid turf parameter") radius = clamp(radius, 1, 50) //Sanitize inputs - int_var = clamp(int_var, 0.1,0.5) - dur_var = clamp(int_var, 0.1,0.5) - fire_stacks = randfloat(burn_damage*(0.5-int_var),burn_damage*(0.5+int_var) ) + randfloat(burn_damage*(0.5-int_var),burn_damage*(0.5+int_var) ) - burn_damage = randfloat(burn_damage*(0.5-int_var),burn_damage*(0.5+int_var) ) + randfloat(burn_damage*(0.5-int_var),burn_damage*(0.5+int_var) ) for(var/t in filled_turfs(epicenter, radius, "circle", air_pass = TRUE)) var/turf/turf_to_flame = t - turf_to_flame.ignite(randfloat(burn_intensity*(0.5-int_var), burn_intensity*(0.5+int_var)) + randfloat(burn_intensity*(0.5-int_var), burn_intensity*(0.5+int_var)), randfloat(burn_duration*(0.5-int_var), burn_duration*(0.5-int_var)) + randfloat(burn_duration*(0.5-int_var), burn_duration*(0.5-int_var)), colour, burn_damage, fire_stacks) + turf_to_flame.ignite(randfloat(burn_duration*0.75, burn_duration), burn_intensity, colour, burn_damage, fire_stacks) /obj/item/explosive/grenade/incendiary/som name = "\improper S30-I incendiary grenade" @@ -287,7 +283,7 @@ /// smoke type created when the grenade is primed var/datum/effect_system/smoke_spread/smoketype = /datum/effect_system/smoke_spread/bad ///radius this smoke grenade will encompass - var/smokeradius = 7 + var/smokeradius = 6 ///The duration of the smoke var/smoke_duration = 11 @@ -316,7 +312,6 @@ det_time = 4 SECONDS dangerous = TRUE smoketype = /datum/effect_system/smoke_spread/xeno/neuro/medium - smokeradius = 6 /obj/item/explosive/grenade/smokebomb/acid name = "\improper M40-A Acid smoke grenade" @@ -326,7 +321,7 @@ hud_state = "grenade_acid" det_time = 4 SECONDS dangerous = TRUE - smoketype = /datum/effect_system/smoke_spread/xeno/acid + smoketype = /datum/effect_system/smoke_spread/xeno/acid/opaque smokeradius = 5 /obj/item/explosive/grenade/smokebomb/satrapine @@ -338,7 +333,6 @@ det_time = 4 SECONDS dangerous = TRUE smoketype = /datum/effect_system/smoke_spread/satrapine - smokeradius = 6 /obj/item/explosive/grenade/smokebomb/satrapine/activate(mob/user) . = ..() @@ -354,6 +348,7 @@ hud_state = "grenade_hide" icon_state_mini = "grenade_green" smoketype = /datum/effect_system/smoke_spread/tactical + smokeradius = 7 /obj/item/explosive/grenade/smokebomb/cloak/ags name = "\improper AGLS-37 SCDP smoke grenade" @@ -371,6 +366,19 @@ icon_state_mini = "grenade_blue" dangerous = TRUE smoketype = /datum/effect_system/smoke_spread/plasmaloss + smokeradius = 7 + +/obj/item/explosive/grenade/smokebomb/antigas + name = "\improper M40-AG smoke grenade" + desc = "A gas grenade originally designed to remove any contaminants in the air for the purpose of cleaning, now repurposed to remove hostile gases." + icon_state = "grenade_agas" + item_state = "grenade_agas" + hud_state = "grenade_antigas" + det_time = 3 SECONDS + icon_state_mini = "grenade_antigas" + dangerous = TRUE + smoketype = /datum/effect_system/smoke_spread/antigas + smokeradius = 7 /obj/item/explosive/grenade/smokebomb/drain/agls name = "\improper AGLS-T smoke grenade" @@ -402,7 +410,7 @@ smoke.set_up(6, loc, 7) smoke.start() flame_radius(4, get_turf(src)) - flame_radius(1, get_turf(src), burn_intensity = 45, burn_duration = 75, burn_damage = 15, fire_stacks = 75) //The closer to the middle you are the more it hurts + flame_radius(1, get_turf(src), burn_intensity = 75, burn_duration = 45, burn_damage = 15, fire_stacks = 75) //The closer to the middle you are the more it hurts qdel(src) /obj/item/explosive/grenade/phosphorus/activate(mob/user) @@ -439,7 +447,7 @@ qdel(src) */ - +#define FLARE_FIRE_STACKS 5 /obj/item/explosive/grenade/flare name = "\improper M40 FLDP grenade" desc = "A TGMC standard issue flare utilizing the standard DP canister chassis. Capable of being loaded in any grenade launcher, or thrown by hand." @@ -482,39 +490,36 @@ if(!fuel || !active) turn_off() -/obj/item/explosive/grenade/flare/proc/turn_off() - active = FALSE - fuel = 0 - heat = 0 - item_fire_stacks = 0 - force = initial(force) - damtype = initial(damtype) - update_brightness() - icon_state = "[initial(icon_state)]_empty" // override icon state set by update_brightness - STOP_PROCESSING(SSobj, src) +/obj/item/explosive/grenade/flare/throw_impact(atom/hit_atom, speed) + if(isopenturf(hit_atom)) + var/obj/alien/weeds/node/N = locate() in loc + if(N) + qdel(N) + turn_off() + . = ..() + if(!.) + return + if(!active) + return -/obj/item/explosive/grenade/flare/proc/turn_on() - active = TRUE - force = 5 - throwforce = 10 - ENABLE_BITFIELD(resistance_flags, ON_FIRE) - item_fire_stacks = 5 - heat = 1500 - damtype = BURN - update_brightness() - playsound(src,'sound/items/flare.ogg', 15, 1) - START_PROCESSING(SSobj, src) + if(isliving(hit_atom)) + var/mob/living/living_target = hit_atom + living_target.fire_stacks += FLARE_FIRE_STACKS + living_target.IgniteMob() -/obj/item/explosive/grenade/flare/attack_self(mob/user) + var/target_zone = check_zone(living_target.zone_selected) + if(!target_zone || rand(40)) + target_zone = "chest" + if(launched && CHECK_BITFIELD(resistance_flags, ON_FIRE) && !living_target.on_fire) + living_target.apply_damage(randfloat(throwforce * 0.75, throwforce * 1.25), BURN, target_zone, FIRE, updating_health = TRUE) //Do more damage if launched from a proper launcher and active - // Usual checks +/obj/item/explosive/grenade/flare/attack_self(mob/user) if(!fuel) to_chat(user, span_notice("It's out of fuel.")) return if(active) return - // All good, turn it on. user.visible_message(span_notice("[user] activates the flare."), span_notice("You depress the ignition button, activating it!")) turn_on(user) @@ -522,48 +527,46 @@ if(!active) turn_on(user) -/obj/item/explosive/grenade/flare/on/Initialize(mapload) - . = ..() - active = TRUE - heat = 1500 - update_brightness() - force = 5 - throwforce = 10 - ENABLE_BITFIELD(resistance_flags, ON_FIRE) - item_fire_stacks = 5 - damtype = BURN - START_PROCESSING(SSobj, src) - -/obj/item/explosive/grenade/flare/proc/update_brightness() +/obj/item/explosive/grenade/flare/update_icon_state() if(active && fuel > 0) icon_state = "[initial(icon_state)]_active" item_state = "[initial(item_state)]_active" - set_light_on(TRUE) + else if(!fuel) + icon_state = "[initial(icon_state)]_empty" + item_state = "[initial(item_state)]_empty" else icon_state = initial(icon_state) item_state = initial(item_state) - set_light_on(FALSE) -/obj/item/explosive/grenade/flare/throw_impact(atom/hit_atom, speed) - if(isopenturf(hit_atom)) - var/obj/alien/weeds/node/N = locate() in loc - if(N) - qdel(N) - turn_off() - . = ..() - if(!.) - return - if(!active) - return - if(isliving(hit_atom)) - var/mob/living/L = hit_atom +///Shuts the flare off +/obj/item/explosive/grenade/flare/proc/turn_off() + active = FALSE + fuel = 0 + heat = 0 + force = initial(force) + damtype = initial(damtype) + update_icon() + set_light_on(FALSE) + STOP_PROCESSING(SSobj, src) - var/target_zone = check_zone(L.zone_selected) - if(!target_zone || rand(40)) - target_zone = "chest" - if(launched && CHECK_BITFIELD(resistance_flags, ON_FIRE) && !L.on_fire) - L.apply_damage(randfloat(throwforce * 0.75, throwforce * 1.25), BURN, target_zone, FIRE, updating_health = TRUE) //Do more damage if launched from a proper launcher and active +///Activates the flare +/obj/item/explosive/grenade/flare/proc/turn_on() + active = TRUE + force = 5 + throwforce = 10 + ENABLE_BITFIELD(resistance_flags, ON_FIRE) + heat = 1500 + damtype = BURN + update_icon() + set_light_on(TRUE) + playsound(src,'sound/items/flare.ogg', 15, 1) + START_PROCESSING(SSobj, src) + +//Starts on +/obj/item/explosive/grenade/flare/on/Initialize(mapload) + . = ..() + turn_on() /obj/item/explosive/grenade/flare/civilian name = "flare" @@ -612,8 +615,7 @@ upper_fuel_limit = 20 light_system = STATIC_LIGHT//movable light has a max range light_color = LIGHT_COLOR_CYAN - ///The brightness of the flare - var/brightness = 12 + light_range = 12 /obj/item/explosive/grenade/flare/strongerflare/throw_impact(atom/hit_atom, speed) . = ..() @@ -621,11 +623,6 @@ return anchored = TRUE//prevents marines from picking up and running around with a stronger flare -/obj/item/explosive/grenade/flare/strongerflare/update_brightness() +/obj/item/explosive/grenade/flare/strongerflare/turn_off() . = ..() - if(active && fuel > 0) - icon_state = "[initial(icon_state)]_active" - set_light(brightness) - else - icon_state = initial(icon_state) - set_light(0) + set_light(0) diff --git a/code/game/objects/items/explosives/mine.dm b/code/game/objects/items/explosives/mine.dm index ee99ea48c8658..1d418eb3b8d72 100644 --- a/code/game/objects/items/explosives/mine.dm +++ b/code/game/objects/items/explosives/mine.dm @@ -18,7 +18,7 @@ Stepping directly on the mine will also blow it up throwforce = 5 throw_range = 6 throw_speed = 3 - flags_atom = CONDUCT + atom_flags = CONDUCT ///Trigger flags for this mine var/target_mode = MINE_LIVING_ONLY /// IFF signal - used to determine friendly units @@ -42,11 +42,12 @@ Stepping directly on the mine will also blow it up return ..() /// Update the icon, adding "_armed" if appropriate to the icon_state. -/obj/item/explosive/mine/update_icon() +/obj/item/explosive/mine/update_icon_state() + . = ..() icon_state = "[initial(icon_state)][armed ? "_armed" : ""]" /// On explosion mines trigger their own explosion, assuming there were not deleted straight away (larger explosions or probability) -/obj/item/explosive/mine/ex_act() +/obj/item/explosive/mine/ex_act(severity) . = ..() if(!QDELETED(src)) INVOKE_ASYNC(src, PROC_REF(trigger_explosion)) @@ -101,6 +102,8 @@ Stepping directly on the mine will also blow it up /// Supports diarming a mine /obj/item/explosive/mine/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!ismultitool(I) || !anchored) return @@ -162,15 +165,15 @@ Stepping directly on the mine will also blow it up return TRUE /// Alien attacks trigger the explosive to instantly detonate -/obj/item/explosive/mine/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/item/explosive/mine/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return FALSE if(triggered) //Mine is already set to go off return - if(X.a_intent == INTENT_HELP) + if(xeno_attacker.a_intent == INTENT_HELP) return - X.visible_message(span_danger("[X] has slashed [src]!"), \ + xeno_attacker.visible_message(span_danger("[xeno_attacker] has slashed [src]!"), \ span_danger("We slash [src]!")) playsound(loc, 'sound/weapons/slice.ogg', 25, 1) INVOKE_ASYNC(src, PROC_REF(trigger_explosion)) @@ -238,6 +241,10 @@ Stepping directly on the mine will also blow it up icon_state = "m92" target_mode = MINE_VEHICLE_ONLY +/obj/item/explosive/mine/anti_tank/update_icon(updates=ALL) + . = ..() + alpha = armed ? 50 : 255 + /obj/item/explosive/mine/anti_tank/trigger_explosion() if(triggered) return @@ -246,5 +253,27 @@ Stepping directly on the mine will also blow it up QDEL_NULL(tripwire) qdel(src) -/obj/item/explosive/mine/anti_tank/ex_act() - qdel(src) +/obj/item/explosive/mine/anti_tank/ex_act(severity) + switch(severity) + if(EXPLODE_DEVASTATE) + take_damage(INFINITY, BRUTE, BOMB, 0) + return + if(EXPLODE_HEAVY) + take_damage(rand(100, 250), BRUTE, BOMB, 0) + if(prob(25)) + return + if(EXPLODE_LIGHT) + take_damage(rand(10, 90), BRUTE, BOMB, 0) + if(prob(50)) + return + if(EXPLODE_WEAK) + take_damage(rand(5, 45), BRUTE, BOMB, 0) + return //not strong enough to detonate + if(QDELETED(src)) + return + if(!armed) + return + INVOKE_ASYNC(src, PROC_REF(trigger_explosion)) + +/obj/item/explosive/mine/anti_tank/flamer_fire_act(burnlevel) + return //its highly exploitable if fire detonates these diff --git a/code/game/objects/items/explosives/plastique.dm b/code/game/objects/items/explosives/plastique.dm index 77fd64792ba4b..e658f8e33ab86 100644 --- a/code/game/objects/items/explosives/plastique.dm +++ b/code/game/objects/items/explosives/plastique.dm @@ -5,7 +5,7 @@ icon = 'icons/obj/det.dmi' icon_state = "plastic-explosive" item_state = "plasticx" - flags_item = NOBLUDGEON + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_TINY /// whether the plastic explosive is armed or not var/armed = FALSE @@ -21,12 +21,16 @@ var/datum/effect_system/smoke_spread/smoketype = /datum/effect_system/smoke_spread/bad /// radius this smoke will encompass var/smokeradius = 1 + ///Current/last user of the c4 + var/mob/living/last_user /obj/item/explosive/plastique/Destroy() plant_target = null + last_user = null return ..() /obj/item/explosive/plastique/update_icon_state() + . = ..() icon_state = "[initial(icon_state)][plant_target ? "_set" : ""]" if(armed) icon_state = "[icon_state][alarm_sounded ? "_armed" : "_on"]" @@ -93,6 +97,7 @@ forceMove(location) armed = TRUE timer = target.plastique_time_mod(timer) + last_user = user log_bomber(user, "planted", src, "on [target] with a [timer] second fuse", message_admins = TRUE) @@ -111,12 +116,6 @@ /obj/item/explosive/plastique/attack_hand(mob/living/user) if(armed) - to_chat(user, "Disarm [src] first to remove it!") - return - return ..() - -/obj/item/explosive/plastique/attackby(obj/item/I, mob/user, params) - if(ismultitool(I) && armed) if(!do_after(user, 2 SECONDS, NONE, plant_target, BUSY_ICON_HOSTILE)) return @@ -141,7 +140,9 @@ armed = FALSE alarm_sounded = FALSE plant_target = null + last_user = null update_icon() + return ..() ///Handles the actual explosion effects /obj/item/explosive/plastique/proc/detonate() @@ -155,7 +156,7 @@ var/datum/effect_system/smoke_spread/smoke = new smoketype() smoke.set_up(smokeradius, plant_target, 2) smoke.start() - plant_target.plastique_act() + plant_target.plastique_act(last_user) qdel(src) ///Triggers a warning beep prior to the actual detonation, while also setting the actual detonation timer @@ -167,7 +168,7 @@ update_icon() ///Handles the effect of c4 on the atom - overridden as needed -/atom/proc/plastique_act() +/atom/proc/plastique_act(mob/living/plastique_user) ex_act(EXPLODE_DEVASTATE) /obj/item/explosive/plastique/genghis_charge @@ -189,7 +190,7 @@ flame_target.ignite(10, 5) qdel(src) return - new /obj/flamer_fire/autospread(flame_target, 17, 31) + new /obj/flamer_fire/autospread(flame_target, 9, 62) playsound(plant_target, sound(get_sfx("explosion_small")), 100, FALSE, 25) qdel(src) @@ -225,7 +226,7 @@ spread_directions |= old_spreader.possible_directions if(old_flame) qdel(old_flame) - new /obj/flamer_fire/autospread(turf_to_burn, 17, 31, flame_color, 0, 0, spread_directions) + new /obj/flamer_fire/autospread(turf_to_burn, 9, 62, flame_color, 0, 0, spread_directions) ///Allows the c4 timer to be tweaked on certain atoms as required /atom/proc/plastique_time_mod(time) diff --git a/code/game/objects/items/firesupport_binoculars.dm b/code/game/objects/items/firesupport_binoculars.dm index d4402f608d33d..bb848ea686393 100644 --- a/code/game/objects/items/firesupport_binoculars.dm +++ b/code/game/objects/items/firesupport_binoculars.dm @@ -7,10 +7,11 @@ ///Faction locks this item if specified var/faction = null ///lase effect - var/obj/effect/overlay/temp/laser_target/laser + var/image/laser_overlay + ///lasing time var/target_acquisition_delay = 5 SECONDS ///Last stored turf targetted by rangefinders - var/turf/targetturf + var/turf/target_atom ///Current mode for support request var/datum/fire_support/mode = null ///firemodes available for these binos @@ -41,11 +42,9 @@ . += span_warning("Available in [round(timeleft(mode.cooldown_timer) MILLISECONDS)] seconds.") /obj/item/binoculars/fire_support/Destroy() - if(laser) - QDEL_NULL(laser) + unset_target() mode = null mode_list = null - targetturf = null return ..() @@ -70,7 +69,7 @@ /obj/item/binoculars/fire_support/onunzoom(mob/living/user) . = ..() - QDEL_NULL(laser) + unset_target() if(!user?.client) return @@ -115,77 +114,88 @@ update_icon() ///lases a target and calls fire support on it -/obj/item/binoculars/fire_support/proc/acquire_target(atom/A, mob/living/carbon/human/user) +/obj/item/binoculars/fire_support/proc/acquire_target(atom/target, mob/living/carbon/human/user) set waitfor = 0 + if(user.do_actions) + balloon_alert_to_viewers("Busy") + return if(is_mainship_level(user.z)) user.balloon_alert(user, "Can't use here") return if(faction && user.faction != faction) balloon_alert_to_viewers("Security locks engaged") return - if(laser) + if(laser_overlay) to_chat(user, span_warning("You're already targeting something.")) return - if(!mode) - balloon_alert_to_viewers("Select a mode!") - return - if(!(mode.fire_support_flags & FIRESUPPORT_AVAILABLE)) - balloon_alert_to_viewers("[mode.name] unavailable") - return - if(!mode.uses) - balloon_alert_to_viewers("[mode.name] expended") - return - if(mode.cooldown_timer) - balloon_alert_to_viewers("On cooldown") - return - - var/turf/TU = get_turf(A) - var/distance = get_dist(TU, get_turf(user)) - var/zoom_screen_size = zoom_tile_offset + zoom_viewsize + 1 - if(TU.z != user.z || distance == -1 || (distance > zoom_screen_size)) - to_chat(user, span_warning("You can't focus properly through \the [src] while looking through something else.")) + if(!bino_checks(target, user)) return - - if(!user.mind) + if(!can_see_target(target, user)) + balloon_alert_to_viewers("No clear view") return - var/area/targ_area = get_area(A) - if(isspacearea(targ_area)) - to_chat(user, span_warning("Cannot fire into space.")) - return - if(targ_area.ceiling >= CEILING_UNDERGROUND) - to_chat(user, span_warning("DEPTH WARNING: Target too deep for ordnance.")) - return - if(user.do_actions) - return playsound(src, 'sound/effects/nightvision.ogg', 35) to_chat(user, span_notice("INITIATING LASER TARGETING. Stand still.")) - var/obj/effect/overlay/temp/laser_target/cas/CS = new (TU) - laser = CS - if(!do_after(user, target_acquisition_delay, NONE, user, BUSY_ICON_HOSTILE)) + target_atom = target + laser_overlay = image('icons/obj/items/projectiles.dmi', icon_state = "sniper_laser", layer =-LASER_LAYER) + target_atom.apply_fire_support_laser(laser_overlay) + if(!do_after(user, target_acquisition_delay, NONE, user, BUSY_ICON_HOSTILE, extra_checks = CALLBACK(src, PROC_REF(can_see_target), target, user))) + to_chat(user, span_danger("You lose sight of your target!")) + playsound(user,'sound/machines/click.ogg', 25, 1) + unset_target() + return + if(!bino_checks(target, user)) return + + playsound(src, 'sound/effects/binoctarget.ogg', 35) + mode.initiate_fire_support(get_turf(target_atom), user) + unset_target() + +///Internal bino checks, mainly around firemode +/obj/item/binoculars/fire_support/proc/bino_checks(atom/target, mob/living/user) if(!mode) balloon_alert_to_viewers("Select a mode!") - return + return FALSE if(!(mode.fire_support_flags & FIRESUPPORT_AVAILABLE)) balloon_alert_to_viewers("[mode.name] unavailable") - return + return FALSE if(!mode.uses) balloon_alert_to_viewers("[mode.name] expended") - return + return FALSE if(mode.cooldown_timer) balloon_alert_to_viewers("On cooldown") - return + return FALSE + var/area/targ_area = get_area(target) + if(isspacearea(targ_area)) + to_chat(user, span_warning("Cannot fire into space.")) + return FALSE + if(targ_area.ceiling >= CEILING_UNDERGROUND) + to_chat(user, span_warning("DEPTH WARNING: Target too deep for ordnance.")) + return FALSE + return TRUE - playsound(src, 'sound/effects/binoctarget.ogg', 35) - QDEL_NULL(laser) - mode.initiate_fire_support(TU, user) +///Checks if we can draw LOS to the target +/obj/item/binoculars/fire_support/proc/can_see_target(atom/target, mob/living/user) + if(QDELETED(target)) + return FALSE + if(target.z != user.z) + return FALSE + if(!(user in viewers(zoom_tile_offset + zoom_viewsize + 1, target))) + return FALSE + return TRUE + +///Unsets the target and cleans up +/obj/item/binoculars/fire_support/proc/unset_target() + if(target_atom) + target_atom.remove_fire_support_laser(laser_overlay) + target_atom = null + if(laser_overlay) + QDEL_NULL(laser_overlay) ///Acquires coords of a target turf /obj/item/binoculars/fire_support/proc/acquire_coordinates(atom/A, mob/living/carbon/human/user) - var/turf/TU = get_turf(A) - targetturf = TU - to_chat(user, span_notice("COORDINATES: LONGITUDE [targetturf.x]. LATITUDE [targetturf.y].")) + var/turf/target_turf = get_turf(A) + to_chat(user, span_notice("COORDINATES: LONGITUDE [target_turf.x]. LATITUDE [target_turf.y].")) playsound(src, 'sound/effects/binoctarget.ogg', 35) @@ -215,3 +225,18 @@ FIRESUPPORT_TYPE_SATRAPINE_SMOKE_MORTAR, FIRESUPPORT_TYPE_SMOKE_MORTAR_SOM, ) + +///Sets a laser overlay for fire support binos +/atom/proc/apply_fire_support_laser(image/laser_overlay) + add_overlay(laser_overlay) + +/mob/living/carbon/apply_fire_support_laser(image/laser_overlay) + overlays_standing[LASER_LAYER] = laser_overlay + apply_overlay(LASER_LAYER) + +///Removes a laser overlay for fire support binos +/atom/proc/remove_fire_support_laser(image/laser_overlay) + cut_overlay(laser_overlay) + +/mob/living/carbon/remove_fire_support_laser(image/laser_overlay) + remove_overlay(LASER_LAYER) diff --git a/code/game/objects/items/flash.dm b/code/game/objects/items/flash.dm index 85e52d03ec01f..be05ebdbc666d 100644 --- a/code/game/objects/items/flash.dm +++ b/code/game/objects/items/flash.dm @@ -8,7 +8,7 @@ w_class = WEIGHT_CLASS_SMALL throw_speed = 4 throw_range = 10 - flags_atom = CONDUCT + atom_flags = CONDUCT var/times_used = 0 //Number of times it's been used. var/broken = 0 //Is the flash burnt out? diff --git a/code/game/objects/items/flashlight.dm b/code/game/objects/items/flashlight.dm index b5d8d37b88aae..5a61ee9b61164 100644 --- a/code/game/objects/items/flashlight.dm +++ b/code/game/objects/items/flashlight.dm @@ -9,8 +9,8 @@ ) item_state = "flashlight" w_class = WEIGHT_CLASS_SMALL - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT actions_types = list(/datum/action/item_action) light_range = 5 light_power = 3 //luminosity when on @@ -40,12 +40,12 @@ update_action_button_icons() update_icon() -/obj/item/flashlight/attack_alien(mob/living/carbon/xenomorph/X, isrightclick = FALSE) - if(turn_light(X, FALSE) != CHECKS_PASSED) +/obj/item/flashlight/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(turn_light(xeno_attacker, FALSE) != CHECKS_PASSED) return playsound(loc, "alien_claw_metal", 25, 1) - X.do_attack_animation(src, ATTACK_EFFECT_CLAW) - to_chat(X, span_warning("We disable the metal thing's lights.") ) + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_CLAW) + to_chat(xeno_attacker, span_warning("We disable the metal thing's lights.") ) /obj/item/flashlight/update_icon_state() . = ..() @@ -65,6 +65,8 @@ /obj/item/flashlight/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tool/screwdriver)) if(!raillight_compatible) //No fancy messages, just no @@ -92,8 +94,8 @@ var/mob/living/carbon/human/H = M //mob has protective eyewear - if(ishuman(M) && ((H.head && H.head.flags_inventory & COVEREYES) || (H.wear_mask && H.wear_mask.flags_inventory & COVEREYES) || (H.glasses && H.glasses.flags_inventory & COVEREYES))) - to_chat(user, span_notice("You're going to need to remove that [(H.head && H.head.flags_inventory & COVEREYES) ? "helmet" : (H.wear_mask && H.wear_mask.flags_inventory & COVEREYES) ? "mask": "glasses"] first.")) + if(ishuman(M) && ((H.head && H.head.inventory_flags & COVEREYES) || (H.wear_mask && H.wear_mask.inventory_flags & COVEREYES) || (H.glasses && H.glasses.inventory_flags & COVEREYES))) + to_chat(user, span_notice("You're going to need to remove that [(H.head && H.head.inventory_flags & COVEREYES) ? "helmet" : (H.wear_mask && H.wear_mask.inventory_flags & COVEREYES) ? "mask": "glasses"] first.")) return if(M == user) //they're using it on themselves @@ -121,7 +123,7 @@ desc = "A pen-sized light, used by medical staff." icon_state = "penlight" item_state = "" - flags_atom = CONDUCT + atom_flags = CONDUCT light_range = 2 w_class = WEIGHT_CLASS_TINY raillight_compatible = FALSE @@ -174,12 +176,12 @@ if(!usr.stat) attack_self(usr) -/obj/item/flashlight/lamp/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/item/flashlight/lamp/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return FALSE - X.do_attack_animation(src, ATTACK_EFFECT_SMASH) + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_SMASH) playsound(loc, 'sound/effects/metalhit.ogg', 20, TRUE) - X.visible_message(span_danger("\The [X] smashes [src]!"), \ + xeno_attacker.visible_message(span_danger("\The [xeno_attacker] smashes [src]!"), \ span_danger("We smash [src]!"), null, 5) deconstruct(FALSE) diff --git a/code/game/objects/items/frames/alarms.dm b/code/game/objects/items/frames/alarms.dm index 0c85a54efd62f..66c946de8456a 100644 --- a/code/game/objects/items/frames/alarms.dm +++ b/code/game/objects/items/frames/alarms.dm @@ -8,10 +8,12 @@ Code shamelessly copied from apc_frame desc = "Used for building Fire Alarms" icon = 'icons/obj/objects.dmi' icon_state = "fire_bitem" - flags_atom = CONDUCT + atom_flags = CONDUCT /obj/item/frame/fire_alarm/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(iswrench(I)) new /obj/item/stack/sheet/metal(loc, 2) diff --git a/code/game/objects/items/frames/frame.dm b/code/game/objects/items/frames/frame.dm index 0e312d9db56b3..50cfb05502a1e 100644 --- a/code/game/objects/items/frames/frame.dm +++ b/code/game/objects/items/frames/frame.dm @@ -14,10 +14,12 @@ desc = "Used for repairing or building APCs" icon = 'icons/obj/objects.dmi' icon_state = "apc_frame" - flags_atom = CONDUCT + atom_flags = CONDUCT /obj/item/frame/apc/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(iswrench(I)) new /obj/item/stack/sheet/metal(loc, 2) diff --git a/code/game/objects/items/frames/light_fixtures.dm b/code/game/objects/items/frames/light_fixtures.dm index 907b862237656..5cecbe4ef2ffe 100644 --- a/code/game/objects/items/frames/light_fixtures.dm +++ b/code/game/objects/items/frames/light_fixtures.dm @@ -5,12 +5,14 @@ desc = "Used for building lights." icon = 'icons/obj/lighting.dmi' icon_state = "tube-construct-item" - flags_atom = CONDUCT + atom_flags = CONDUCT var/fixture_type = "tube" var/sheets_refunded = 2 /obj/item/frame/light_fixture/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(iswrench(I)) new /obj/item/stack/sheet/metal(loc, sheets_refunded) diff --git a/code/game/objects/items/frames/table_rack.dm b/code/game/objects/items/frames/table_rack.dm index e13d0f43fe2f0..72167b1233c7a 100644 --- a/code/game/objects/items/frames/table_rack.dm +++ b/code/game/objects/items/frames/table_rack.dm @@ -16,13 +16,15 @@ slot_r_hand_str = 'icons/mob/inhands/equipment/engineering_right.dmi', ) item_state = "table_parts" - flags_atom = CONDUCT + atom_flags = CONDUCT attack_verb = list("slammed", "bashed", "battered", "bludgeoned", "thrashed", "whacked") var/table_type = /obj/structure/table //what type of table it creates when assembled var/deconstruct_type = /obj/item/stack/sheet/metal /obj/item/frame/table/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return var/turf/table_turf = get_turf(src) if(iswrench(I) && deconstruct_type) @@ -98,12 +100,14 @@ name = "wooden table parts" desc = "A kit for a table, including a large, flat wooden surface and four legs. Some assembly required." icon_state = "wood_tableparts" - flags_atom = null + atom_flags = null table_type = /obj/structure/table/woodentable deconstruct_type = /obj/item/stack/sheet/wood /obj/item/frame/table/wood/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/stack/tile/carpet)) var/obj/item/stack/tile/carpet/C = I @@ -128,12 +132,14 @@ name = "gamble table parts" desc = "A kit for a table, including a large, flat wooden and carpet surface and four legs. Some assembly required." icon_state = "gamble_tableparts" - flags_atom = null + atom_flags = null table_type = /obj/structure/table/gamblingtable deconstruct_type = /obj/item/stack/sheet/wood /obj/item/frame/table/gambling/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(iscrowbar(I)) to_chat(user, span_notice("You pry the carpet out of [src].")) @@ -159,11 +165,13 @@ slot_r_hand_str = 'icons/mob/inhands/equipment/engineering_right.dmi', ) icon_state = "rack_parts" - flags_atom = CONDUCT + atom_flags = CONDUCT /obj/item/frame/rack/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(iswrench(I)) new /obj/item/stack/sheet/metal(loc) diff --git a/code/game/objects/items/gift_wrappaper.dm b/code/game/objects/items/gift_wrappaper.dm index 11cba3b1bae92..e100af4070f59 100644 --- a/code/game/objects/items/gift_wrappaper.dm +++ b/code/game/objects/items/gift_wrappaper.dm @@ -132,7 +132,7 @@ /obj/item/weapon/gun/launcher/rocket/m57a4/xmas - flags_gun_features = NONE + gun_features_flags = NONE /obj/item/weapon/gun/launcher/rocket/m57a4/xmas/able_to_fire(mob/living/user) @@ -144,7 +144,7 @@ /obj/item/weapon/gun/rifle/sniper/elite/xmas - flags_gun_features = NONE + gun_features_flags = NONE /obj/item/weapon/gun/rifle/sniper/elite/xmas/able_to_fire(mob/living/user) @@ -159,6 +159,8 @@ /obj/effect/spresent/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!iswirecutter(I)) to_chat(user, span_notice("You need wirecutters for that.")) @@ -186,6 +188,8 @@ /obj/item/wrapping_paper/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return var/a_used = 2 ** (w_class - 1) diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 98185408be90c..e5ac03a04b336 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -4,8 +4,8 @@ gender = PLURAL icon = 'icons/obj/items/items.dmi' icon_state = "handcuff" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT throwforce = 5 w_class = WEIGHT_CLASS_SMALL throw_speed = 2 @@ -63,7 +63,7 @@ . = ..() if(!.) return - flags_item |= DELONDROP + item_flags |= DELONDROP @@ -100,6 +100,8 @@ /obj/item/restraints/handcuffs/cable/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/stack/rods)) var/obj/item/stack/rods/R = I @@ -110,7 +112,7 @@ user.put_in_hands(W) to_chat(user, span_notice("You wrap the cable restraint around the top of the rod.")) qdel(src) - update_icon(user) + update_icon() /obj/item/restraints/handcuffs/cyborg diff --git a/code/game/objects/items/implants/implant.dm b/code/game/objects/items/implants/implant.dm index e3129754e7df6..4ce67774952aa 100644 --- a/code/game/objects/items/implants/implant.dm +++ b/code/game/objects/items/implants/implant.dm @@ -16,7 +16,7 @@ ///What level of malfunction/breakage this implant is at, used for functionality checks var/malfunction = MALFUNCTION_NONE ///Implant secific flags - var/flags_implant = GRANT_ACTIVATION_ACTION + var/implant_flags = GRANT_ACTIVATION_ACTION ///Whitelist for llimbs that this implavnt is allowed to be inserted into, all limbs by default var/list/allowed_limbs ///Activation_action reference @@ -27,7 +27,7 @@ /obj/item/implant/Initialize(mapload) . = ..() - if(flags_implant & GRANT_ACTIVATION_ACTION) + if(implant_flags & GRANT_ACTIVATION_ACTION) activation_action = new(src, src) if(allow_reagents) reagents = new /datum/reagents(MAX_IMPLANT_REAGENTS) @@ -43,7 +43,7 @@ return ..() /obj/item/implant/ui_action_click(mob/user, datum/action/item_action/action) - activate() + return activate() ///Handles the actual activation of the implant/it's effects. Returns TRUE on succesful activation and FALSE on failure for parentcalls /obj/item/implant/proc/activate() @@ -77,7 +77,7 @@ CRASH("[src] implanted into [target] [user ? "by [user]" : ""] but had no limb, despite being set to implant in [limb_targeting].") affected.implants += src part = affected - if(flags_implant & ACTIVATE_ON_HEAR) + if(implant_flags & ACTIVATE_ON_HEAR) RegisterSignal(src, COMSIG_MOVABLE_HEAR, PROC_REF(on_hear)) activation_action?.give_action(target) embed_into(target, limb_targeting, TRUE) @@ -92,7 +92,7 @@ if(!implanted) return FALSE activation_action?.remove_action(implant_owner) - if(flags_implant & ACTIVATE_ON_HEAR) + if(implant_flags & ACTIVATE_ON_HEAR) UnregisterSignal(src, COMSIG_MOVABLE_HEAR) implanted = FALSE part.implants -= src diff --git a/code/game/objects/items/implants/implant_chem.dm b/code/game/objects/items/implants/implant_chem.dm index b8224c063a75d..9dc0a00938a76 100644 --- a/code/game/objects/items/implants/implant_chem.dm +++ b/code/game/objects/items/implants/implant_chem.dm @@ -2,7 +2,7 @@ name = "chemical implant" desc = "A chemical implant containing a single use chemical cocktail which is added via syringe." allow_reagents = TRUE - flags_implant = ACTIVATE_ON_HEAR|GRANT_ACTIVATION_ACTION + implant_flags = ACTIVATE_ON_HEAR|GRANT_ACTIVATION_ACTION var/used = FALSE var/activation_phrase = "aaaaaa help i dying help maint" @@ -60,5 +60,4 @@ return FALSE var/mob/living/carbon/carb_mob = implant_owner - var/current_blood = carb_mob.blood_volume - carb_mob.blood_volume += min(BLOOD_VOLUME_MAXIMUM - current_blood, blood_amount) + carb_mob.adjust_blood_volume(blood_amount) diff --git a/code/game/objects/items/implants/implant_cloak.dm b/code/game/objects/items/implants/implant_cloak.dm index cfa861c7df6c4..d25eabf60499a 100644 --- a/code/game/objects/items/implants/implant_cloak.dm +++ b/code/game/objects/items/implants/implant_cloak.dm @@ -5,7 +5,7 @@ name = "cloak implant" desc = "A top of the line nanotrasen implant, designed for infiltration." icon_state = "gripper" - flags_implant = GRANT_ACTIVATION_ACTION + implant_flags = GRANT_ACTIVATION_ACTION cooldown_time = 0 var/deactivation_timer diff --git a/code/game/objects/items/implants/implant_items.dm b/code/game/objects/items/implants/implant_items.dm index 81e3217d5ec1d..c9af32eed5577 100644 --- a/code/game/objects/items/implants/implant_items.dm +++ b/code/game/objects/items/implants/implant_items.dm @@ -69,8 +69,8 @@ item_state = "armblade" force = 75 attack_speed = 8 - flags_atom = CONDUCT - flags_equip_slot = NONE + atom_flags = CONDUCT + equip_slot_flags = NONE w_class = WEIGHT_CLASS_BULKY //not needed but just in case why not sharp = IS_SHARP_ITEM_BIG hitsound = 'sound/weapons/slash.ogg' diff --git a/code/game/objects/items/implants/implant_neurostim.dm b/code/game/objects/items/implants/implant_neurostim.dm index 7d4292baa0bb0..469208177647c 100644 --- a/code/game/objects/items/implants/implant_neurostim.dm +++ b/code/game/objects/items/implants/implant_neurostim.dm @@ -2,7 +2,7 @@ name = "neurostimulator implant" desc = "An implant which regulates nociception and sensory function. Benefits include pain reduction, improved balance, and improved resistance to overstimulation and disoritentation. To encourage compliance, negative stimulus is applied if the implant hears a (non-radio) spoken codeprhase. Implant may be degraded by the body's immune system over time, and thus may occasionally malfunction." icon_state = "implant_evil" - flags_implant = ACTIVATE_ON_HEAR + implant_flags = ACTIVATE_ON_HEAR var/phrase = "supercalifragilisticexpialidocious" /obj/item/implant/neurostim/get_data() diff --git a/code/game/objects/items/implants/implant_suicidedust.dm b/code/game/objects/items/implants/implant_suicidedust.dm index 9f860f7b9f256..72d479d4e0e00 100644 --- a/code/game/objects/items/implants/implant_suicidedust.dm +++ b/code/game/objects/items/implants/implant_suicidedust.dm @@ -2,7 +2,7 @@ ///In order to prevent Marines from looting things they should not ever have /obj/item/implant/suicide_dust name = "self-dusting implant" - flags_implant = NONE + implant_flags = NONE /obj/item/implant/suicide_dust/implant(mob/living/carbon/human/target, mob/living/user) . = ..() diff --git a/code/game/objects/items/implants/implantcase.dm b/code/game/objects/items/implants/implantcase.dm index 204d9a1b28bc5..5170cfd476ecb 100644 --- a/code/game/objects/items/implants/implantcase.dm +++ b/code/game/objects/items/implants/implantcase.dm @@ -25,6 +25,7 @@ return ..() /obj/item/implantcase/update_icon_state() + . = ..() if(imp) icon_state = "implantcase-[imp.implant_color]" else @@ -33,6 +34,8 @@ /obj/item/implantcase/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tool/pen)) var/label = stripped_input(user, "What would you like the label to be?", "[name]", null) diff --git a/code/game/objects/items/jetpack.dm b/code/game/objects/items/jetpack.dm index 24fe22c49e1fe..849ea47fe7137 100644 --- a/code/game/objects/items/jetpack.dm +++ b/code/game/objects/items/jetpack.dm @@ -12,7 +12,7 @@ slot_r_hand_str = 'icons/mob/inhands/equipment/backpacks_right.dmi', ) w_class = WEIGHT_CLASS_BULKY - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK obj_flags = CAN_BE_HIT ///Time between uses var/cooldown_time = 10 SECONDS @@ -26,11 +26,12 @@ var/speed = 1 ///True when jetpack has flame overlay var/lit = FALSE - ///True if you can use shift click/middle click to use it - var/selected = FALSE + ///Controlling action + var/datum/action/ability/activable/item_toggle/jetpack/toggle_action /obj/item/jetpack_marine/Initialize(mapload) . = ..() + toggle_action = new(src) update_icon() /obj/item/jetpack_marine/examine(mob/user, distance, infix, suffix) @@ -45,40 +46,14 @@ /obj/item/jetpack_marine/equipped(mob/user, slot) . = ..() if(slot == SLOT_BACK) - var/datum/action/item_action/toggle/action = new(src) - action.give_action(user) + toggle_action.give_action(user) /obj/item/jetpack_marine/dropped(mob/user) . = ..() - UnregisterSignal(user, list(COMSIG_MOB_MIDDLE_CLICK, COMSIG_MOB_CLICK_ALT_RIGHT, COMSIG_ITEM_EXCLUSIVE_TOGGLE)) - selected = FALSE - LAZYCLEARLIST(actions) - -/obj/item/jetpack_marine/ui_action_click(mob/user, datum/action/item_action/action) - if(selected) - UnregisterSignal(user, list(COMSIG_MOB_MIDDLE_CLICK, COMSIG_MOB_CLICK_ALT_RIGHT, COMSIG_ITEM_EXCLUSIVE_TOGGLE)) - action.set_toggle(FALSE) - else - RegisterSignals(user, list(COMSIG_MOB_MIDDLE_CLICK, COMSIG_MOB_CLICK_ALT_RIGHT), PROC_REF(can_use_jetpack)) - SEND_SIGNAL(user, COMSIG_ITEM_EXCLUSIVE_TOGGLE, user) - RegisterSignal(user, COMSIG_ITEM_EXCLUSIVE_TOGGLE, PROC_REF(unselect)) - action.set_toggle(TRUE) - selected = !selected - -///Signal handler for making it impossible to use middleclick to use the jetpack -/obj/item/jetpack_marine/proc/unselect(datum/source, mob/user) - SIGNAL_HANDLER - if(!selected) - return - selected = FALSE - UnregisterSignal(user, list(COMSIG_MOB_MIDDLE_CLICK, COMSIG_MOB_CLICK_ALT_RIGHT, COMSIG_ITEM_EXCLUSIVE_TOGGLE)) - for(var/action in user.actions) - if (!istype(action, /datum/action/item_action)) - continue - var/datum/action/item_action/iaction = action - if(iaction?.holder_item == src) - iaction.set_toggle(FALSE) + toggle_action.remove_action(user) +/obj/item/jetpack_marine/ui_action_click(mob/user, datum/action/item_action/action, target) + return use_jetpack(target, user) ///remove the flame overlay /obj/item/jetpack_marine/proc/reset_flame(mob/living/carbon/human/human_user) @@ -105,8 +80,8 @@ human_user.update_inv_back() update_icon() new /obj/effect/temp_visual/smoke(get_turf(human_user)) - human_user.fly_at(A, calculate_range(human_user), speed) RegisterSignal(human_user, COMSIG_MOVABLE_POST_THROW, PROC_REF(reset_flame)) + human_user.fly_at(A, calculate_range(human_user), speed) return TRUE ///Calculate the max range of the jetpack, changed by some item slowdown @@ -122,21 +97,6 @@ if(1.2 to INFINITY)//heavy armor with shield and tyr mk2 return 2 -///Check if we can use the jetpack and give feedback to the users -/obj/item/jetpack_marine/proc/can_use_jetpack(datum/source, atom/A) - SIGNAL_HANDLER - var/mob/living/carbon/human/human_user = usr - if(human_user.incapacitated() || human_user.lying_angle) - return - var/time_left = S_TIMER_COOLDOWN_TIMELEFT(src, COOLDOWN_JETPACK) - if(time_left) - balloon_alert(human_user, "[time_left * 0.1] seconds") - return - if(fuel_left < FUEL_USE) - balloon_alert(human_user, "No fuel") - return - INVOKE_ASYNC(src, PROC_REF(use_jetpack), A, human_user) - /obj/item/jetpack_marine/update_overlays() . = ..() switch(fuel_indicator) @@ -190,6 +150,8 @@ /obj/item/jetpack_marine/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!istype(I, /obj/item/ammo_magazine/flamer_tank)) return var/obj/item/ammo_magazine/flamer_tank/FT = I @@ -206,6 +168,27 @@ balloon_alert(user, "Refilled") update_icon() +/datum/action/ability/activable/item_toggle/jetpack + name = "Use jetpack" + action_icon_state = "axe_sweep" + desc = "Briefly fly using your jetpack." + use_state_flags = ABILITY_USE_STAGGERED|ABILITY_USE_BUSY + keybinding_signals = list(KEYBINDING_NORMAL = COMSIG_ITEM_TOGGLE_JETPACK) + +/datum/action/ability/activable/item_toggle/jetpack/New(Target, obj/item/holder) + . = ..() + var/obj/item/jetpack_marine/jetpack = Target + cooldown_duration = jetpack.cooldown_time + +/datum/action/ability/activable/item_toggle/jetpack/can_use_ability(silent, override_flags, selecting) + var/mob/living/carbon/carbon_owner = owner + if(carbon_owner.incapacitated() || carbon_owner.lying_angle) + return FALSE + var/obj/item/jetpack_marine/jetpack = holder_item + if(jetpack.fuel_left < FUEL_USE) + carbon_owner.balloon_alert(carbon_owner, "No fuel") + return + return ..() /obj/item/jetpack_marine/heavy name = "heavy lift jetpack" diff --git a/code/game/objects/items/lightreplacer.dm b/code/game/objects/items/lightreplacer.dm index e69b12102395d..80d5fabb41674 100644 --- a/code/game/objects/items/lightreplacer.dm +++ b/code/game/objects/items/lightreplacer.dm @@ -31,8 +31,8 @@ ) item_state = "electronic" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_SMALL @@ -52,6 +52,8 @@ /obj/item/lightreplacer/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/stack/sheet/glass)) var/obj/item/stack/sheet/glass/G = I diff --git a/code/game/objects/items/loot_box.dm b/code/game/objects/items/loot_box.dm index 2d2d5238a91af..d5274f30c93f7 100644 --- a/code/game/objects/items/loot_box.dm +++ b/code/game/objects/items/loot_box.dm @@ -421,7 +421,7 @@ /obj/item/storage/box/crate/loot/sadarclassic_pack, ) rare_list = list( - /obj/item/storage/box/crate/loot/tl102_pack, + /obj/item/storage/box/crate/loot/hsg_102_pack, /obj/item/storage/box/crate/loot/mortar_pack, /obj/structure/closet/crate/loot/howitzer_pack, /obj/item/storage/box/crate/loot/sentry_pack, @@ -620,10 +620,10 @@ new /obj/item/mortal_shell/howitzer/white_phos(src) new /obj/item/mortal_shell/howitzer/white_phos(src) -/obj/item/storage/box/crate/loot/tl102_pack/Initialize(mapload) +/obj/item/storage/box/crate/loot/hsg_102_pack/Initialize(mapload) . = ..() - new /obj/item/storage/box/tl102(src) - new /obj/item/storage/box/tl102(src) + new /obj/item/storage/box/hsg_102(src) + new /obj/item/storage/box/hsg_102(src) /obj/item/storage/box/crate/loot/agl_pack/Initialize(mapload) . = ..() @@ -676,5 +676,5 @@ /obj/item/storage/box/crate/loot/sadarclassic_pack/Initialize(mapload) . = ..() new /obj/item/weapon/gun/launcher/rocket/sadar(src) - new /obj/item/storage/backpack/marine/satchel/scout_cloak/scout(src) + new /obj/item/storage/backpack/marine/satchel/scout_cloak(src) new /obj/item/ammo_magazine/rocket/sadar/ap(src) diff --git a/code/game/objects/items/marine_gear.dm b/code/game/objects/items/marine_gear.dm index 07f1d72c973fa..f17e9eb1bfb98 100644 --- a/code/game/objects/items/marine_gear.dm +++ b/code/game/objects/items/marine_gear.dm @@ -64,7 +64,7 @@ list("dark chocolate TGMC protein bar","The dark chocolate flavor helps it out a bit, but its still a cheap protein bar.","#5a3b1d",list("bitter dark chocolate" = 1)), list("milk chocolate TGMC protein bar","A nice milky addition to a otherwise bland protein taste.","#efc296",list("off flavor milk chocolate"= 1)), list("raspberry lime TGMC protein bar","A flavored protein bar, some might say a bit too strongly flavored for their tastes.","#ff0066",list("sour raspberry and lime" = 1)), - list("chicken TGMC protein bar","Protein bar covered with chicken powder one might find in ramen. Get some extra sodium with your protein.","#cccc00",list= ("powdered chicken")), + list("chicken TGMC protein bar","Protein bar covered with chicken powder one might find in ramen. Get some extra sodium with your protein.","#cccc00",list("powdered chicken" = 1)), list("blueberry TGMC protein bar","A nice blueberry crunch into your otherwise stale and boring protein bar.","#4e39c5",list("blueberry" = 1)), list("cement TGMC protein bar", "A gray bar that's allegedly made of cement. It seems to have hardened up. Perhaps it'll make you harden up, too.", "#B2B2B2", list("cement" = 1)) ), @@ -77,7 +77,7 @@ list("milk chocolate SOM protein bar","A nice milky addition to a otherwise bland protein taste.","#efc296",list("off flavor milk chocolate"= 1)), list("beef SOM protein bar","A beef flavored protein bar, doesn't taste like any cow you've ever tried.","#ff0066",list("meat substitute" = 1)), list("meat SOM protein bar","A surprisingly tasty protein bar made from an unspecified meat. Rumors claiming they're made from reconstituted TGMC personnel have been widely dismissed.","#a7576b",list("pork" = 1)), - list("chicken SOM protein bar","Protein bar covered with chicken powder one might find in ramen. Get some extra sodium with your protein.","#cccc00",list= ("powdered chicken")), + list("chicken SOM protein bar","Protein bar covered with chicken powder one might find in ramen. Get some extra sodium with your protein.","#cccc00",list("powdered chicken" = 1)), list("blueberry SOM protein bar","A nice blueberry crunch into your otherwise stale and boring protein bar.","#4e39c5",list("blueberry" = 1)) ), ) @@ -248,11 +248,11 @@ icon = 'icons/obj/clothing/belts.dmi' icon_state = "gun_sling" item_state = "gun_sling" - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_BULKY equip_delay_self = 2 SECONDS unequip_delay_self = 1 SECONDS - flags_inventory = NOQUICKEQUIP + inventory_flags = NOQUICKEQUIP ///The current attacher. Gets remade for every new item var/datum/component/reequip/reequip_component diff --git a/code/game/objects/items/megaphone.dm b/code/game/objects/items/megaphone.dm index 738397e174100..991d22eef181c 100644 --- a/code/game/objects/items/megaphone.dm +++ b/code/game/objects/items/megaphone.dm @@ -9,7 +9,7 @@ ) item_state = "radio" w_class = WEIGHT_CLASS_SMALL - flags_atom = CONDUCT + atom_flags = CONDUCT var/spamcheck = 0 var/list/voicespan = list(SPAN_COMMAND) diff --git a/code/game/objects/items/misc.dm b/code/game/objects/items/misc.dm index c216bbb75e074..9b94a042cb8be 100644 --- a/code/game/objects/items/misc.dm +++ b/code/game/objects/items/misc.dm @@ -123,3 +123,11 @@ desc = "A small set of servos and gears, coupled to a battery, antenna and circuitry. Attach it to a mortar to allow a shipborne AI to remotely target it." icon = 'icons/obj/items/items.dmi' icon_state = "modkit" + +/obj/item/rosary + name = "Rosary" + desc = "A small hematite-beaded silver rosary" + icon = 'icons/obj/items/items.dmi' + icon_state = "rosary" + item_state = "rosary" + w_class = WEIGHT_CLASS_TINY diff --git a/code/game/objects/items/motion_detector.dm b/code/game/objects/items/motion_detector.dm index 6afe631102738..1169178dbd9c0 100644 --- a/code/game/objects/items/motion_detector.dm +++ b/code/game/objects/items/motion_detector.dm @@ -24,6 +24,7 @@ qdel(src) /obj/effect/blip/edge_blip/update_icon_state() + . = ..() icon_state = "edge_blip_[identifier]" /obj/effect/blip/close_blip @@ -52,7 +53,7 @@ desc = "A device that detects hostile movement. Hostiles appear as red blips. Friendlies with the correct IFF signature appear as green, and their bodies as blue, unrevivable bodies as dark blue. It has a mode selection interface." icon_state = "minidetector" slot = ATTACHMENT_SLOT_RAIL - attachment_action_type = /datum/action/item_action/toggle/motion_detector + attachment_action_type = /datum/action/item_action/toggle /// Who's using this item var/mob/living/carbon/human/operator ///If a hostile was detected @@ -65,19 +66,20 @@ var/list/obj/effect/blip/blips_list = list() /obj/item/attachable/motiondetector/Destroy() - clean_operator() + clean_operator(forced = TRUE) return ..() /obj/item/attachable/motiondetector/activate(mob/user, turn_off) if(operator) - clean_operator() - return + clean_operator(forced = TRUE) + return TRUE operator = user RegisterSignals(operator, list(COMSIG_QDELETING, COMSIG_GUN_USER_UNSET), PROC_REF(clean_operator)) RegisterSignals(src, list(COMSIG_ITEM_EQUIPPED_TO_SLOT, COMSIG_ITEM_REMOVED_INVENTORY), PROC_REF(clean_operator)) UnregisterSignal(operator, COMSIG_GUN_USER_SET) START_PROCESSING(SSobj, src) update_icon() + return TRUE ///Activate the attachement when your are putting the gun out of your suit slot /obj/item/attachable/motiondetector/proc/start_processing_again(datum/source, obj/item/weapon/gun/equipping) @@ -93,12 +95,8 @@ /obj/item/attachable/motiondetector/attack_self(mob/user) activate(user) -/obj/item/attachable/motiondetector/update_icon() - . = ..() - for(var/datum/action/action AS in master_gun?.actions) - action.update_button_icon() - /obj/item/attachable/motiondetector/update_icon_state() + . = ..() icon_state = initial(icon_state) + (isnull(operator) ? "" : "_on") /obj/item/attachable/motiondetector/equipped(mob/user, slot) @@ -108,12 +106,12 @@ /obj/item/attachable/motiondetector/removed_from_inventory(mob/user) . = ..() - clean_operator() + clean_operator(forced = TRUE) //Exploit prevention. If you are putting the tac sensor into a storage in your hand (Like holding a satchel), hand == loc will return /// Signal handler to clean out user vars -/obj/item/attachable/motiondetector/proc/clean_operator() +/obj/item/attachable/motiondetector/proc/clean_operator(datum/source, obj/item/weapon/gun/gun, forced = FALSE) SIGNAL_HANDLER - if(operator && (operator.l_hand == src || operator.r_hand == src || operator.l_hand == loc || operator.r_hand == loc)) + if(!forced && operator && (operator.l_hand == src || operator.r_hand == src || operator.l_hand == loc || operator.r_hand == loc)) return STOP_PROCESSING(SSobj, src) clean_blips() diff --git a/code/game/objects/items/multitool.dm b/code/game/objects/items/multitool.dm index 72c0a5593aac0..a97dea728da00 100644 --- a/code/game/objects/items/multitool.dm +++ b/code/game/objects/items/multitool.dm @@ -8,7 +8,7 @@ name = "multitool" desc = "Used for pulsing wires to test which to cut. Not recommended by doctors." icon_state = "multitool" - flags_atom = CONDUCT + atom_flags = CONDUCT force = 5 w_class = WEIGHT_CLASS_SMALL throwforce = 5 diff --git a/code/game/objects/items/pamphlets.dm b/code/game/objects/items/pamphlets.dm new file mode 100644 index 0000000000000..ce2adbc2788d6 --- /dev/null +++ b/code/game/objects/items/pamphlets.dm @@ -0,0 +1,41 @@ +//skill modifying item +/obj/item/pamphlet + name = "generic phamplet" + desc = "you shouldnt see this" + icon = 'icons/obj/items/paper.dmi' + icon_state = "paper_words" + var/cqc + var/melee_weapons + var/firearms + var/pistols + var/shotguns + var/rifles + var/smgs + var/heavy_weapons + var/smartgun + var/engineer + var/construction + var/leadership + var/medical + var/surgery + var/pilot + var/police + var/powerloader + var/large_vehicle + var/stamina + +/obj/item/pamphlet/attack_self(mob/living/user) + . = ..() + if(!do_after(user, 5 SECONDS, NONE, user)) + return + user.set_skills(user.skills.modifyRating(cqc, melee_weapons, firearms, pistols, shotguns, rifles, smgs, heavy_weapons, smartgun, \ + engineer, construction, leadership, medical, surgery, pilot, police, powerloader, large_vehicle, stamina)) + user.temporarilyRemoveItemFromInventory(src) + qdel(src) + + +/obj/item/pamphlet/tank_loader + name = "loader's instruction manual" + desc = "A crude drawing depicting what you think is loading a tank gun. Is that crayon?" + large_vehicle = 1 + diff --git a/code/game/objects/items/pinpointer.dm b/code/game/objects/items/pinpointer.dm index ec28ba5951f8c..98e16d7e3103a 100644 --- a/code/game/objects/items/pinpointer.dm +++ b/code/game/objects/items/pinpointer.dm @@ -2,8 +2,8 @@ name = "Xeno structure pinpointer" icon = 'icons/Marine/marine-navigation.dmi' icon_state = "pinoff" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_TINY item_icons = list( slot_l_hand_str = 'icons/mob/inhands/equipment/engineering_left.dmi', diff --git a/code/game/objects/items/plantable_flags.dm b/code/game/objects/items/plantable_flags.dm index 4f172ae09b931..4a9d4bdbbff08 100644 --- a/code/game/objects/items/plantable_flags.dm +++ b/code/game/objects/items/plantable_flags.dm @@ -25,7 +25,7 @@ playsound(loc, 'sound/effects/thud.ogg', 100) user.dropItemToGround(src) is_collapsed = FALSE - update_icon_state() + update_appearance() /obj/item/flag_base/attack_hand(mob/living/user) @@ -34,8 +34,8 @@ to_chat(user, "You decide against removing the flag here.") return is_collapsed = TRUE - update_icon_state() - . = ..() + update_appearance() + return ..() /obj/item/flag_base/update_icon_state() diff --git a/code/game/objects/items/portable_vendor.dm b/code/game/objects/items/portable_vendor.dm index dc8748f926559..54ac8f97ea0b2 100644 --- a/code/game/objects/items/portable_vendor.dm +++ b/code/game/objects/items/portable_vendor.dm @@ -11,7 +11,7 @@ slot_l_hand_str = 'icons/mob/inhands/items/containers_left.dmi', slot_r_hand_str = 'icons/mob/inhands/items/containers_right.dmi', ) - flags_atom = CONDUCT + atom_flags = CONDUCT force = 8 hitsound = "swing_hit" throw_speed = 1 @@ -132,7 +132,7 @@ playsound(src, "sound/machines/fax.ogg", 5) balloon_alert(user, "fabricating") fabricating = TRUE - update_overlays() + update_appearance() addtimer(CALLBACK(src, PROC_REF(do_vend), L[3], user), 1 SECONDS) /obj/item/portable_vendor/proc/do_vend(thing, mob/user) @@ -140,7 +140,7 @@ if(loc == user) user.put_in_hands(IT) fabricating = FALSE - update_overlays() + update_appearance() /obj/item/portable_vendor/update_overlays() . = ..() @@ -161,7 +161,7 @@ /obj/item/portable_vendor/Initialize(mapload) . = ..() START_PROCESSING(SSobj, src) - update_overlays() + update_appearance() /obj/item/portable_vendor/Destroy() STOP_PROCESSING(SSobj, src) @@ -173,7 +173,7 @@ T.visible_message(span_warning("[src] shudders as its internal components break apart!")) broken = 1 STOP_PROCESSING(SSobj, src) - update_overlays() + update_appearance() playsound(src, 'sound/effects/sparks4.ogg', 60, 1) var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread diff --git a/code/game/objects/items/quickdeploy_cade.dm b/code/game/objects/items/quickdeploy_cade.dm index 1e2c2fc1f5e4e..78ba11f4e3349 100644 --- a/code/game/objects/items/quickdeploy_cade.dm +++ b/code/game/objects/items/quickdeploy_cade.dm @@ -51,7 +51,7 @@ for(var/obj/thing in user.loc) if(!thing.density) //not dense, move on continue - if(!(thing.flags_atom & ON_BORDER)) //dense and non-directional, end + if(!(thing.atom_flags & ON_BORDER)) //dense and non-directional, end balloon_alert(user, "No space") return FALSE if(thing.dir != user.dir) diff --git a/code/game/objects/items/radio/detpack.dm b/code/game/objects/items/radio/detpack.dm index 788c674ee354d..f43da27d5e8e8 100644 --- a/code/game/objects/items/radio/detpack.dm +++ b/code/game/objects/items/radio/detpack.dm @@ -9,7 +9,7 @@ slot_r_hand_str = 'icons/mob/inhands/weapons/explosives_right.dmi', ) item_state = "plasticx" - flags_item = NOBLUDGEON + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_SMALL layer = MOB_LAYER - 0.1 var/frequency = 1457 @@ -70,6 +70,7 @@ /obj/item/detpack/update_icon_state() + . = ..() icon_state = "detpack_[plant_target ? "set_" : ""]" if(on) icon_state = "[icon_state][armed ? "armed" : "on"]" @@ -79,6 +80,8 @@ /obj/item/detpack/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(ismultitool(I) && armed) if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_METAL) @@ -136,8 +139,9 @@ if(!signal || !on) return - var/turf/location = get_turf(signal.source) - if(location.z != z) + var/turf/source_location = get_turf(signal.source) + var/turf/det_location = get_turf(src) + if(source_location.z != det_location.z) return if(signal.data["code"] != code) @@ -340,15 +344,13 @@ //Time to go boom playsound(src.loc, 'sound/weapons/ring.ogg', 200, FALSE) boom = TRUE + var/turf/det_location = get_turf(plant_target) + plant_target.ex_act(EXPLODE_DEVASTATE) + plant_target = null if(det_mode == TRUE) //If we're on demolition mode, big boom. - explosion(plant_target, 3, 5, 6, 0, 6) + explosion(det_location, 3, 5, 6, 0, 6) else //if we're not, focused boom. - explosion(plant_target, 2, 2, 3, 0, 3, throw_range = FALSE) - if(plant_target) - if(isobj(plant_target)) - plant_target = null - if(!istype(plant_target,/obj/vehicle/multitile/root/cm_armored)) - qdel(plant_target) + explosion(det_location, 2, 2, 3, 0, 3, throw_range = FALSE) qdel(src) diff --git a/code/game/objects/items/radio/electropack.dm b/code/game/objects/items/radio/electropack.dm index 424b0913b6b25..ed39207150ba8 100644 --- a/code/game/objects/items/radio/electropack.dm +++ b/code/game/objects/items/radio/electropack.dm @@ -8,8 +8,8 @@ slot_r_hand_str = 'icons/mob/inhands/equipment/security_right.dmi', ) item_state = "electropack" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BACK + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_HUGE diff --git a/code/game/objects/items/radio/encryptionkey.dm b/code/game/objects/items/radio/encryptionkey.dm index 1d4d60343636b..204d4459dd634 100644 --- a/code/game/objects/items/radio/encryptionkey.dm +++ b/code/game/objects/items/radio/encryptionkey.dm @@ -124,6 +124,11 @@ GLOBAL_LIST_EMPTY_TYPED(custom_updating_encryptkeys, /obj/item/encryptionkey) channels = list(RADIO_CHANNEL_ICC = TRUE) independent = TRUE +/obj/item/encryptionkey/retired + name = "\improper retirement home encryption key" + channels = list(RADIO_CHANNEL_RETIRED = TRUE) + independent = TRUE + /obj/item/encryptionkey/sectoid name = "\improper alien encryption key" channels = list(RADIO_CHANNEL_SECTOID = TRUE) diff --git a/code/game/objects/items/radio/headset.dm b/code/game/objects/items/radio/headset.dm index c607f3097ba67..f3e4d131bb0f0 100644 --- a/code/game/objects/items/radio/headset.dm +++ b/code/game/objects/items/radio/headset.dm @@ -24,7 +24,7 @@ GLOBAL_LIST_INIT(channel_tokens, list( subspace_transmission = TRUE canhear_range = 0 // can't hear headsets from very far away - flags_equip_slot = ITEM_SLOT_EARS + equip_slot_flags = ITEM_SLOT_EARS var/obj/item/encryptionkey/keyslot2 = null @@ -54,6 +54,8 @@ GLOBAL_LIST_INIT(channel_tokens, list( /obj/item/radio/headset/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(isscrewdriver(I)) if(keyslot || keyslot2) @@ -170,7 +172,7 @@ GLOBAL_LIST_INIT(channel_tokens, list( icon_state = "cargo_headset" item_state = "headset" frequency = FREQ_COMMON - flags_atom = CONDUCT | PREVENT_CONTENTS_EXPLOSION + atom_flags = CONDUCT | PREVENT_CONTENTS_EXPLOSION freerange = TRUE var/obj/machinery/camera/camera var/datum/atom_hud/squadhud = null @@ -210,7 +212,8 @@ GLOBAL_LIST_INIT(channel_tokens, list( /obj/item/radio/headset/mainship/proc/safety_protocol(mob/living/carbon/human/user) balloon_alert_to_viewers("Explodes") playsound(user, 'sound/effects/explosion_micro1.ogg', 50, 1) - user.ex_act(EXPLODE_LIGHT) + if(wearer) + wearer.ex_act(EXPLODE_LIGHT) qdel(src) /* RUTGMC DELETION, SL_locator beheading runtime fix @@ -234,7 +237,6 @@ GLOBAL_LIST_INIT(channel_tokens, list( if(wearer) if(headset_hud_on && wearer.wear_ear == src) squadhud.remove_hud_from(wearer) - wearer.SL_directional = null if(wearer.assigned_squad) SSdirection.stop_tracking(wearer.assigned_squad.tracking_id, wearer) wearer = null @@ -286,8 +288,8 @@ GLOBAL_LIST_INIT(channel_tokens, list( if(HAS_TRAIT(wearer, TRAIT_UNDEFIBBABLE)) SSminimaps.add_marker(wearer, marker_flags, image('icons/UI_icons/map_blips.dmi', null, "undefibbable")) return - if(!wearer.client) - var/mob/dead/observer/ghost = wearer.get_ghost() + if(!wearer.mind) + var/mob/dead/observer/ghost = wearer.get_ghost(TRUE) if(!ghost?.can_reenter_corpse) SSminimaps.add_marker(wearer, marker_flags, image('icons/UI_icons/map_blips.dmi', null, "undefibbable")) return @@ -450,7 +452,10 @@ GLOBAL_LIST_INIT(channel_tokens, list( /obj/item/radio/headset/mainship/marine/Initialize(mapload, datum/squad/squad, rank) if(squad) - icon_state = "headset_marine_[lowertext(squad.name)]" + icon_state = "headset_marine_greyscale" + var/image/coloring = image(icon, icon_state="headset_marine_overlay") + coloring.color = squad.color + add_overlay(coloring) var/dat = "marine [lowertext(squad.name)]" frequency = squad.radio_freq if(ispath(rank, /datum/job/terragov/squad/leader)) @@ -649,6 +654,11 @@ GLOBAL_LIST_INIT(channel_tokens, list( name = "\improper Echo Task Force headset" keyslot = /obj/item/encryptionkey/echo +/obj/item/radio/headset/distress/retired + name = "retirement home headset" + keyslot = /obj/item/encryptionkey/retired + frequency = FREQ_RETIRED + //SOM headsets /obj/item/radio/headset/mainship/som diff --git a/code/game/objects/items/radio/intercom.dm b/code/game/objects/items/radio/intercom.dm index 6f6dd8adf3bae..d28bd5154d1bd 100644 --- a/code/game/objects/items/radio/intercom.dm +++ b/code/game/objects/items/radio/intercom.dm @@ -6,7 +6,7 @@ anchored = TRUE w_class = WEIGHT_CLASS_BULKY canhear_range = 2 - flags_atom = CONDUCT|NOBLOODY + atom_flags = CONDUCT|NOBLOODY light_range = 1.5 light_power = 0.5 light_color = LIGHT_COLOR_EMISSIVE_YELLOW @@ -28,15 +28,15 @@ pixel_x = 32 START_PROCESSING(SSobj, src) become_hearing_sensitive() - update_icon() + check_light() /obj/item/radio/intercom/Destroy() STOP_PROCESSING(SSobj, src) return ..() -/obj/item/radio/intercom/update_icon() - . = ..() +///Checks if we're on, if so a light turns on +/obj/item/radio/intercom/proc/check_light() if(!on) set_light(0) return @@ -44,6 +44,7 @@ set_light(initial(light_range)) /obj/item/radio/intercom/update_icon_state() + . = ..() if(!on) icon_state = "intercom_unpowered" else @@ -56,16 +57,14 @@ . += emissive_appearance(icon, "[icon_state]_emissive") /obj/item/radio/intercom/attack_ai(mob/user as mob) - spawn (0) - attack_self(user) + attack_self(user) /obj/item/radio/intercom/attack_hand(mob/living/user) . = ..() if(.) return - spawn (0) - attack_self(user) + attack_self(user) /obj/item/radio/intercom/can_receive(freq, list/levels) @@ -100,7 +99,7 @@ return else on = new_state - update_icon() + check_light() /obj/item/radio/intercom/general name = "General Listening Channel" diff --git a/code/game/objects/items/radio/radio.dm b/code/game/objects/items/radio/radio.dm index b2dc331551c43..a784a5b1efa19 100644 --- a/code/game/objects/items/radio/radio.dm +++ b/code/game/objects/items/radio/radio.dm @@ -8,8 +8,8 @@ ) item_state = "radio" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT throw_speed = 2 throw_range = 9 w_class = WEIGHT_CLASS_SMALL @@ -292,10 +292,21 @@ return var/area/A = get_area(src) - if(!isnull(A) && (A.ceiling >= CEILING_UNDERGROUND) && !(A.flags_area & ALWAYS_RADIO)) + var/radio_disruption = CAVE_NO_INTERFERENCE + if(!isnull(A) && (A.ceiling >= CEILING_UNDERGROUND) && !(A.area_flags & ALWAYS_RADIO)) + radio_disruption = CAVE_MINOR_INTERFERENCE if(A.ceiling >= CEILING_DEEP_UNDERGROUND) + radio_disruption = CAVE_FULL_INTERFERENCE + + var/list/inplace_interference = list(radio_disruption) + SEND_SIGNAL(talking_movable, COMSIG_CAVE_INTERFERENCE_CHECK, inplace_interference) + radio_disruption = inplace_interference[1] + + switch(radio_disruption) + if(CAVE_MINOR_INTERFERENCE) + signal.data["compression"] += rand(20, 40) + if(CAVE_FULL_INTERFERENCE) return - signal.data["compression"] += rand(20, 40) // All non-independent radios make an attempt to use the subspace system first signal.send_to_receivers() @@ -345,8 +356,23 @@ var/turf/position = get_turf(src) if(!position || !(position.z in levels)) return FALSE + var/radio_disruption = CAVE_NO_INTERFERENCE var/area/A = get_area(src) - if(A?.ceiling >= CEILING_DEEP_UNDERGROUND) + if(A?.ceiling >= CEILING_UNDERGROUND && !(A.area_flags & ALWAYS_RADIO)) + radio_disruption = CAVE_MINOR_INTERFERENCE //Unused for this case but may aswell create parity on what the value of the var is. + if(A.ceiling >= CEILING_DEEP_UNDERGROUND) + radio_disruption = CAVE_FULL_INTERFERENCE + var/list/potential_owners = get_nested_locs(src) //Sometimes not equipped, sometimes not even equippable, sometimes in storage, this feels like it's an okay way to do it. + var/mob/living/found_owner + for(var/mob/living/candidate in potential_owners) + found_owner = candidate + break + + if(found_owner) + var/inplace_interference = list(radio_disruption) + SEND_SIGNAL(found_owner, COMSIG_CAVE_INTERFERENCE_CHECK, inplace_interference) + radio_disruption = inplace_interference[1] + if(radio_disruption == CAVE_FULL_INTERFERENCE) return FALSE // allow checks: are we listening on that frequency? @@ -372,6 +398,8 @@ /obj/item/radio/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(isscrewdriver(I) && !subspace_transmission) unscrewed = !unscrewed if(unscrewed) diff --git a/code/game/objects/items/rcd.dm b/code/game/objects/items/rcd.dm index ef0ba36e35755..ca528c098d9be 100644 --- a/code/game/objects/items/rcd.dm +++ b/code/game/objects/items/rcd.dm @@ -6,7 +6,7 @@ opacity = FALSE density = FALSE anchored = FALSE - flags_atom = CONDUCT + atom_flags = CONDUCT force = 10 throwforce = 10 throw_speed = 1 diff --git a/code/game/objects/items/reagent_containers/autoinjectors.dm b/code/game/objects/items/reagent_containers/autoinjectors.dm index e9982bf2388b8..60a1a1157abd1 100644 --- a/code/game/objects/items/reagent_containers/autoinjectors.dm +++ b/code/game/objects/items/reagent_containers/autoinjectors.dm @@ -11,6 +11,7 @@ list_reagents = list(/datum/reagent/consumable/sodiumchloride = 30) /obj/item/reagent_containers/hypospray/autoinjector/update_icon_state() + . = ..() if(!(reagents.total_volume) && is_drawable()) icon_state += "X" name = "expended [name]" //So people can see what have been expended since we have smexy new sprites people aren't used too... @@ -309,7 +310,7 @@ icon_state = "autoinjector-6" amount_per_transfer_from_this = 1 volume = 1 - list_reagents = list(/datum/reagent/medicine/research/medicalnanites = 1) + list_reagents = list(/datum/reagent/medicalnanites = 1) free_refills = FALSE /obj/item/reagent_containers/hypospray/autoinjector/pain //made for debugging diff --git a/code/game/objects/items/reagent_containers/blood_pack.dm b/code/game/objects/items/reagent_containers/blood_pack.dm index 760e4b61a802a..05909c8ccb68a 100644 --- a/code/game/objects/items/reagent_containers/blood_pack.dm +++ b/code/game/objects/items/reagent_containers/blood_pack.dm @@ -20,7 +20,7 @@ update_icon() /obj/item/reagent_containers/blood/update_icon_state() - + . = ..() var/percent = PERCENT(reagents.total_volume / volume) switch(percent) if(0 to 9.9) diff --git a/code/game/objects/items/reagent_containers/dropper.dm b/code/game/objects/items/reagent_containers/dropper.dm index f1a7bd01052c8..4f3a89d1986a2 100644 --- a/code/game/objects/items/reagent_containers/dropper.dm +++ b/code/game/objects/items/reagent_containers/dropper.dm @@ -42,10 +42,10 @@ var/obj/item/safe_thing = null if( victim.wear_mask ) - if ( victim.wear_mask.flags_inventory & COVEREYES ) + if ( victim.wear_mask.inventory_flags & COVEREYES ) safe_thing = victim.wear_mask if( victim.head ) - if ( victim.head.flags_inventory & COVEREYES ) + if ( victim.head.inventory_flags & COVEREYES ) safe_thing = victim.head if(victim.glasses) if ( !safe_thing ) diff --git a/code/game/objects/items/reagent_containers/food/burgers.dm b/code/game/objects/items/reagent_containers/food/burgers.dm index d38e885308b47..f6cc39b46f9cf 100644 --- a/code/game/objects/items/reagent_containers/food/burgers.dm +++ b/code/game/objects/items/reagent_containers/food/burgers.dm @@ -294,6 +294,8 @@ // Human Burger + cheese wedge = cheeseburger /obj/item/reagent_containers/food/snacks/burger/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/reagent_containers/food/snacks/cheesewedge)) new /obj/item/reagent_containers/food/snacks/burger/cheese(src) @@ -305,6 +307,8 @@ // Burger + cheese wedge = cheeseburger /obj/item/reagent_containers/food/snacks/burger/plain/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/reagent_containers/food/snacks/cheesewedge)) new /obj/item/reagent_containers/food/snacks/burger/cheese(src) @@ -330,6 +334,8 @@ /obj/item/reagent_containers/food/snacks/burger/bun/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return // Bun + meatball = burger if(istype(I, /obj/item/reagent_containers/food/snacks/meatball)) new /obj/item/reagent_containers/food/snacks/burger/plain(src) diff --git a/code/game/objects/items/reagent_containers/food/cans.dm b/code/game/objects/items/reagent_containers/food/cans.dm index d1670b2e7a2d4..3d1cf57458099 100644 --- a/code/game/objects/items/reagent_containers/food/cans.dm +++ b/code/game/objects/items/reagent_containers/food/cans.dm @@ -3,10 +3,10 @@ init_reagent_flags = NONE var/canopened = FALSE -/obj/item/reagent_containers/food/drinks/cans/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) +/obj/item/reagent_containers/food/drinks/cans/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) if(!CONFIG_GET(flag/fun_allowed)) return FALSE - attack_hand(X) + attack_hand(xeno_attacker) /obj/item/reagent_containers/food/drinks/cans/attack_self(mob/user as mob) diff --git a/code/game/objects/items/reagent_containers/food/donuts.dm b/code/game/objects/items/reagent_containers/food/donuts.dm index 1eb1531fc6621..2b6af43e10d2a 100644 --- a/code/game/objects/items/reagent_containers/food/donuts.dm +++ b/code/game/objects/items/reagent_containers/food/donuts.dm @@ -179,7 +179,7 @@ desc = "Goes great with a bottle of Bastion Burbon!" icon_state = "donut_laugh" list_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/sugar = 3, /datum/reagent/consumable/laughter = 3) - tastes = list("donut" = 3, "fizzy tutti frutti" = 1,) + tastes = list("donut" = 3, "fizzy tutti frutti" = 1) /obj/item/reagent_containers/food/snacks/donut/jelly/trumpet name = "spaceman's jelly donut" diff --git a/code/game/objects/items/reagent_containers/food/drinks.dm b/code/game/objects/items/reagent_containers/food/drinks.dm index 8c9965b70f511..3ee18a0e283bc 100644 --- a/code/game/objects/items/reagent_containers/food/drinks.dm +++ b/code/game/objects/items/reagent_containers/food/drinks.dm @@ -113,7 +113,7 @@ amount_per_transfer_from_this = 20 possible_transfer_amounts = null volume = 150 - flags_atom = CONDUCT + atom_flags = CONDUCT /obj/item/reagent_containers/food/drinks/golden_cup/tournament_26_06_2011 desc = "A golden cup. It will be presented to a winner of tournament 26 june and name of the winner will be graved on it." diff --git a/code/game/objects/items/reagent_containers/food/drinks/bottle.dm b/code/game/objects/items/reagent_containers/food/drinks/bottle.dm index abbdd3e56ce5a..53fa066ccff34 100644 --- a/code/game/objects/items/reagent_containers/food/drinks/bottle.dm +++ b/code/game/objects/items/reagent_containers/food/drinks/bottle.dm @@ -74,10 +74,10 @@ //Finally, smash the bottle. This kills (del) the bottle. smash(target, user) -/obj/item/reagent_containers/food/drinks/bottle/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) +/obj/item/reagent_containers/food/drinks/bottle/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) if(!CONFIG_GET(flag/fun_allowed)) return FALSE - attack_hand(X) + attack_hand(xeno_attacker) /obj/item/reagent_containers/food/drinks/bottle/gin name = "\improper Griffeater Gin" diff --git a/code/game/objects/items/reagent_containers/food/drinks/drinkingglass.dm b/code/game/objects/items/reagent_containers/food/drinks/drinkingglass.dm index 6ba09eadaddf1..83de06e7a5321 100644 --- a/code/game/objects/items/reagent_containers/food/drinks/drinkingglass.dm +++ b/code/game/objects/items/reagent_containers/food/drinks/drinkingglass.dm @@ -611,10 +611,10 @@ center_of_mass = list("x"=16, "y"=10) return -/obj/item/reagent_containers/food/drinks/drinkingglass/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) +/obj/item/reagent_containers/food/drinks/drinkingglass/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) if(!CONFIG_GET(flag/fun_allowed)) return FALSE - attack_hand(X) + attack_hand(xeno_attacker) // for /obj/machinery/vending/sovietsoda /obj/item/reagent_containers/food/drinks/drinkingglass/soda diff --git a/code/game/objects/items/reagent_containers/food/pizzapasta.dm b/code/game/objects/items/reagent_containers/food/pizzapasta.dm index 0b6c83ce48681..7a2bf6ca795fd 100644 --- a/code/game/objects/items/reagent_containers/food/pizzapasta.dm +++ b/code/game/objects/items/reagent_containers/food/pizzapasta.dm @@ -171,56 +171,55 @@ var/list/boxes = list() // If the boxes are stacked, they come here var/boxtag = "" -/obj/item/pizzabox/update_icon() - - overlays = list() - - // Set appropriate description - if( open && pizza ) +/obj/item/pizzabox/update_desc(updates) + . = ..() + if(open && pizza) desc = "A box suited for pizzas. It appears to have a [pizza.name] inside." - else if( boxes.len > 0 ) + else if(boxes.len > 0) desc = "A pile of boxes suited for pizzas. There appears to be [boxes.len + 1] boxes in the pile." var/obj/item/pizzabox/topbox = boxes[boxes.len] var/toptag = topbox.boxtag - if( toptag != "" ) + if(toptag != "") desc = "[desc] The box on top has a tag, it reads: '[toptag]'." else desc = "A box suited for pizzas." - if( boxtag != "" ) + if(boxtag != "") desc = "[desc] The box has a tag, it reads: '[boxtag]'." - // Icon states and overlays - if( open ) - if( ismessy ) +/obj/item/pizzabox/update_icon_state() + . = ..() + if(open) + if(ismessy) icon_state = "pizzabox_messy" else icon_state = "pizzabox_open" + return - if( pizza ) - var/image/pizzaimg = image("pizzaspaghetti.dmi", icon_state = pizza.icon_state) - pizzaimg.pixel_y = -3 - overlays += pizzaimg + icon_state = "pizzabox[boxes.len+1]" +/obj/item/pizzabox/update_overlays() + . = ..() + if(open && pizza) + var/image/pizzaimg = image("pizzaspaghetti.dmi", icon_state = pizza.icon_state) + pizzaimg.pixel_y = -3 + . += pizzaimg return + // Stupid code because byondcode sucks - imagine blaming the engine for you being bad at coding. TODO: clean this up + var/doimgtag = 0 + if(boxes.len > 0) + var/obj/item/pizzabox/topbox = boxes[boxes.len] + if(topbox.boxtag != "") + doimgtag = 1 else - // Stupid code because byondcode sucks - var/doimgtag = 0 - if( boxes.len > 0 ) - var/obj/item/pizzabox/topbox = boxes[boxes.len] - if( topbox.boxtag != "" ) - doimgtag = 1 - else - if( boxtag != "" ) - doimgtag = 1 + if(boxtag != "") + doimgtag = 1 - if( doimgtag ) - var/image/tagimg = image("pizzaspaghetti.dmi", icon_state = "pizzabox_tag") - tagimg.pixel_y = boxes.len * 3 - overlays += tagimg - - icon_state = "pizzabox[boxes.len+1]" + if(doimgtag) + var/image/tagimg = image("pizzaspaghetti.dmi", icon_state = "pizzabox_tag") + tagimg.pixel_y = boxes.len * 3 + . += tagimg //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/pizzabox/attack_hand(mob/living/user) @@ -261,6 +260,8 @@ /obj/item/pizzabox/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/pizzabox)) var/obj/item/pizzabox/box = I diff --git a/code/game/objects/items/reagent_containers/food/sandwich.dm b/code/game/objects/items/reagent_containers/food/sandwich.dm index 1578d3c6aabd0..d6e90327c2b02 100644 --- a/code/game/objects/items/reagent_containers/food/sandwich.dm +++ b/code/game/objects/items/reagent_containers/food/sandwich.dm @@ -3,6 +3,8 @@ /obj/item/reagent_containers/food/snacks/sandwiches/breadslice/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/shard) || istype(I, /obj/item/reagent_containers/food/snacks)) var/obj/item/reagent_containers/food/snacks/sandwiches/csandwich/S = new(loc) @@ -82,6 +84,8 @@ /obj/item/reagent_containers/food/snacks/sandwiches/csandwich/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return var/sandwich_limit = 4 for(var/obj/item/reagent_containers/food/snacks/sandwiches/breadslice/B in ingredients) diff --git a/code/game/objects/items/reagent_containers/food/snacks.dm b/code/game/objects/items/reagent_containers/food/snacks.dm index 27887aa2022f7..626ec4b121ff3 100644 --- a/code/game/objects/items/reagent_containers/food/snacks.dm +++ b/code/game/objects/items/reagent_containers/food/snacks.dm @@ -47,10 +47,10 @@ /obj/item/reagent_containers/food/snacks/attack_self(mob/user as mob) return -/obj/item/reagant_containers/food/snacks/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) +/obj/item/reagant_containers/food/snacks/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) if(!CONFIG_GET(flag/fun_allowed)) return FALSE - attack_hand(X) + attack_hand(xeno_attacker) /obj/item/reagent_containers/food/snacks/attack(mob/M, mob/user, def_zone) if(!reagents.total_volume) //Shouldn't be needed but it checks to see if it has anything left in it. @@ -144,6 +144,8 @@ /obj/item/reagent_containers/food/snacks/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tool/kitchen/utensil)) //todo early return var/obj/item/tool/kitchen/utensil/U = I @@ -173,6 +175,8 @@ /obj/item/reagent_containers/food/snacks/sliceable/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(I.sharp == IS_NOT_SHARP_ITEM) if(I.w_class >= WEIGHT_CLASS_SMALL) @@ -1164,6 +1168,8 @@ // Flour + egg = dough /obj/item/reagent_containers/food/snacks/flour/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/reagent_containers/food/snacks/egg)) new /obj/item/reagent_containers/food/snacks/dough(src) @@ -1174,6 +1180,8 @@ // Egg + flour = dough /obj/item/reagent_containers/food/snacks/egg/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/reagent_containers/food/snacks/flour)) new /obj/item/reagent_containers/food/snacks/dough(src) @@ -1205,6 +1213,8 @@ // Dough + rolling pin = flat dough /obj/item/reagent_containers/food/snacks/dough/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tool/kitchen/rollingpin)) new /obj/item/reagent_containers/food/snacks/sliceable/flatdough(src) @@ -1243,6 +1253,8 @@ /obj/item/reagent_containers/food/snacks/meat/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tool/kitchen/knife)) new /obj/item/reagent_containers/food/snacks/rawcutlet(src) @@ -1282,6 +1294,8 @@ /obj/item/reagent_containers/food/snacks/rawcutlet/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tool/kitchen/knife)) new /obj/item/reagent_containers/food/snacks/rawmeatball(src) @@ -1479,12 +1493,12 @@ list_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/coco = 10) tastes = list("compressed matter" = 1) -/obj/item/reagent_containers/food/snacks/wrapped/barcardine - name = "Barcardine Bars" +/obj/item/reagent_containers/food/snacks/wrapped/barcaridine + name = "Barcaridine Bars" desc = "A bar of chocolate, it smells like the medical bay. \"Chocolate always helps the pain go away.\"" icon_state = "barcardine" - wrapper = /obj/item/trash/barcardine - list_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/coco = 2, /datum/reagent/medicine/tramadol = 1, /datum/reagent/medicine/tramadol = 1) + wrapper = /obj/item/trash/barcaridine + list_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/coco = 2, /datum/reagent/medicine/tramadol = 2) tastes = list ("cough syrup" = 1) /obj/item/reagent_containers/food/snacks/wrapped/berrybar @@ -1498,7 +1512,8 @@ /datum/reagent/medicine/tramadol = 10, /datum/reagent/medicine/bicaridine = 10, /datum/reagent/medicine/kelotane = 10, - /datum/reagent/medicine/tricordrazine = 10,) + /datum/reagent/medicine/tricordrazine = 10, + ) tastes = list("delicious processed berries" = 1) bitesize = 9 @@ -1562,7 +1577,7 @@ icon = 'icons/obj/items/lollipop.dmi' icon_state = "lollipop_stick" item_state = "lollipop_stick" - flags_equip_slot = ITEM_SLOT_MASK + equip_slot_flags = ITEM_SLOT_MASK w_class = WEIGHT_CLASS_TINY list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/sugar = 4) tastes = list("candy" = 1) diff --git a/code/game/objects/items/reagent_containers/food/snacks/grown.dm b/code/game/objects/items/reagent_containers/food/snacks/grown.dm index f5286f2881d8f..95ffd212116cd 100644 --- a/code/game/objects/items/reagent_containers/food/snacks/grown.dm +++ b/code/game/objects/items/reagent_containers/food/snacks/grown.dm @@ -82,6 +82,8 @@ /obj/item/reagent_containers/food/snacks/grown/potato/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(iscablecoil(I)) var/obj/item/stack/cable_coil/C = I @@ -246,6 +248,8 @@ /obj/item/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/I, mob/user, param) . = ..() + if(.) + return if(I.sharp == IS_SHARP_ITEM_ACCURATE || I.sharp == IS_SHARP_ITEM_BIG) to_chat(user, span_notice("You carve a face into [src]!")) diff --git a/code/game/objects/items/reagent_containers/glass.dm b/code/game/objects/items/reagent_containers/glass.dm index d3eca61d7cb04..4fc8598173621 100644 --- a/code/game/objects/items/reagent_containers/glass.dm +++ b/code/game/objects/items/reagent_containers/glass.dm @@ -107,6 +107,8 @@ /obj/item/reagent_containers/glass/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tool/pen) || istype(I, /obj/item/flashlight/pen)) var/tmp_label = stripped_input(user, "Enter a label for [name]", "Label", label_text) @@ -151,28 +153,35 @@ return update_icon() -/obj/item/reagent_containers/glass/beaker/update_icon() - overlays.Cut() +/obj/item/reagent_containers/glass/beaker/update_overlays() + . = ..() if(reagents.total_volume) var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10") var/percent = round((reagents.total_volume / volume) * 100) switch(percent) - if(0 to 9) filling.icon_state = "[icon_state]-10" - if(10 to 24) filling.icon_state = "[icon_state]10" - if(25 to 49) filling.icon_state = "[icon_state]25" - if(50 to 74) filling.icon_state = "[icon_state]50" - if(75 to 79) filling.icon_state = "[icon_state]75" - if(80 to 90) filling.icon_state = "[icon_state]80" - if(91 to INFINITY) filling.icon_state = "[icon_state]100" + if(0 to 9) + filling.icon_state = "[icon_state]-10" + if(10 to 24) + filling.icon_state = "[icon_state]10" + if(25 to 49) + filling.icon_state = "[icon_state]25" + if(50 to 74) + filling.icon_state = "[icon_state]50" + if(75 to 79) + filling.icon_state = "[icon_state]75" + if(80 to 90) + filling.icon_state = "[icon_state]80" + if(91 to INFINITY) + filling.icon_state = "[icon_state]100" filling.color = mix_color_from_reagents(reagents.reagent_list) - overlays += filling + . += filling if(!is_open_container()) var/image/lid = image(icon, src, "lid_[initial(icon_state)]") - overlays += lid + . += lid /obj/item/reagent_containers/glass/beaker/large name = "large beaker" @@ -250,6 +259,8 @@ /obj/item/reagent_containers/glass/bucket/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tool/mop)) if(reagents.total_volume < 1) @@ -260,12 +271,12 @@ to_chat(user, span_notice("You wet [I] in [src].")) playsound(loc, 'sound/effects/slosh.ogg', 25, 1) -/obj/item/reagent_containers/glass/bucket/update_icon() - overlays.Cut() +/obj/item/reagent_containers/glass/bucket/update_overlays() + . = ..() if(!is_open_container()) var/image/lid = image(icon, src, "lid_[initial(icon_state)]") - overlays += lid + . += lid /obj/item/reagent_containers/glass/bucket/janibucket name = "janitorial bucket" @@ -276,14 +287,17 @@ update_icon() -/obj/item/reagent_containers/glass/bucket/janibucket/update_icon() - ..() +/obj/item/reagent_containers/glass/bucket/janibucket/update_icon_state() + . = ..() if(reagents.total_volume) var/percent = round((reagents.total_volume / volume) * 100) switch(percent) - if(0 to 9) icon_state = "janibucket" - if(10 to 65) icon_state = "janibucket_half" - if(66 to INFINITY) icon_state = "janibucket_full" + if(0 to 9) + icon_state = "janibucket" + if(10 to 65) + icon_state = "janibucket_half" + if(66 to INFINITY) + icon_state = "janibucket_full" else icon_state = "janibucket" diff --git a/code/game/objects/items/reagent_containers/glass/bottle.dm b/code/game/objects/items/reagent_containers/glass/bottle.dm index c85f4415119b1..2e241ee381472 100644 --- a/code/game/objects/items/reagent_containers/glass/bottle.dm +++ b/code/game/objects/items/reagent_containers/glass/bottle.dm @@ -34,28 +34,35 @@ if(!icon_state) icon_state = "bottle-[rand(1, 5)]" -/obj/item/reagent_containers/glass/bottle/update_icon() - overlays.Cut() +/obj/item/reagent_containers/glass/bottle/update_overlays() + . = ..() if(reagents.total_volume && (icon_state == "bottle-1" || icon_state == "bottle-2" || icon_state == "bottle-3" || icon_state == "bottle-4")) //only for those who have reagentfillings icons var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10") var/percent = round((reagents.total_volume / volume) * 100) switch(percent) - if(0 to 9) filling.icon_state = "[icon_state]--10" - if(10 to 24) filling.icon_state = "[icon_state]-10" - if(25 to 49) filling.icon_state = "[icon_state]-25" - if(50 to 74) filling.icon_state = "[icon_state]-50" - if(75 to 79) filling.icon_state = "[icon_state]-75" - if(80 to 90) filling.icon_state = "[icon_state]-80" - if(91 to INFINITY) filling.icon_state = "[icon_state]-100" + if(0 to 9) + filling.icon_state = "[icon_state]--10" + if(10 to 24) + filling.icon_state = "[icon_state]-10" + if(25 to 49) + filling.icon_state = "[icon_state]-25" + if(50 to 74) + filling.icon_state = "[icon_state]-50" + if(75 to 79) + filling.icon_state = "[icon_state]-75" + if(80 to 90) + filling.icon_state = "[icon_state]-80" + if(91 to INFINITY) + filling.icon_state = "[icon_state]-100" filling.color = mix_color_from_reagents(reagents.reagent_list) - overlays += filling + . += filling if (!is_open_container()) var/image/lid = image(icon, src, "lid_bottle") - overlays += lid + . += lid /obj/item/reagent_containers/glass/bottle/empty //Because the parent has RNG icon_state icon_state = "bottle-1" //Same one when you make a bottle in the chem master @@ -245,6 +252,6 @@ /obj/item/reagent_containers/glass/bottle/doctor_delight name = "\improper Doctor's Delight bottle" - desc = "A small bottle. Contains Doctor's Delight." + desc = "A small bottle. Contains Doctor's Delight - functions similar to tricordrazine, but is weaker and makes the patient hungry." icon_state = "bottle3" list_reagents = list(/datum/reagent/consumable/drink/doctor_delight = 60) diff --git a/code/game/objects/items/reagent_containers/hypospray.dm b/code/game/objects/items/reagent_containers/hypospray.dm index 55b8431ca479c..8ca2e249240a3 100644 --- a/code/game/objects/items/reagent_containers/hypospray.dm +++ b/code/game/objects/items/reagent_containers/hypospray.dm @@ -12,22 +12,18 @@ possible_transfer_amounts = list(1, 3, 5, 10, 15, 20, 30) volume = 60 init_reagent_flags = OPENCONTAINER - flags_equip_slot = ITEM_SLOT_BELT - flags_item = NOBLUDGEON + equip_slot_flags = ITEM_SLOT_BELT + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_SMALL + interaction_flags = INTERACT_OBJ_UI var/skilllock = 1 var/inject_mode = HYPOSPRAY_INJECT_MODE_INJECT var/core_name = "hypospray" + ///If we add a custom label, our name becomes "[core_name] ([label])" var/label = null /// Small description appearing as an overlay var/description_overlay = "" -/obj/item/reagent_containers/hypospray/advanced - name = "Advanced hypospray" - desc = "The hypospray is a sterile, air-needle reusable autoinjector for rapid administration of drugs to patients with customizable dosages. Comes complete with an internal reagent analyzer, digital labeler and 2 letter tagger. Handy." - core_name = "hypospray" - - /obj/item/reagent_containers/hypospray/proc/empty(mob/user) if(tgui_alert(user, "Are you sure you want to empty [src]?", "Flush [src]:", list("Yes", "No")) != "Yes") return @@ -70,6 +66,11 @@ if(!reagents.total_volume) balloon_alert(user, "Hypospray is Empty.") return + if(iscarbon(A)) + var/mob/living/carbon/C = A + if((C.species.species_flags & NO_CHEM_METABOLIZATION) || (C.species.species_flags & IS_SYNTHETIC)) + C.balloon_alert(user, "Can't inject (robot)") + return if(!A.is_injectable() && !ismob(A)) A.balloon_alert(user, "Can't fill.") return @@ -205,119 +206,110 @@ desc.maptext_width = 16 . += desc -/obj/item/reagent_containers/hypospray/advanced - icon_state = "hypo" - init_reagent_flags = REFILLABLE|DRAINABLE - liquifier = TRUE +/obj/item/reagent_containers/hypospray/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Hypospray", name) + ui.open() + +/obj/item/reagent_containers/hypospray/ui_data(mob/user) + var/list/data = list() + data["IsAdvanced"] = liquifier + data["InjectMode"] = inject_mode + data["CurrentLabel"] = label + data["CurrentTag"] = description_overlay + data["TransferAmount"] = amount_per_transfer_from_this -/obj/item/reagent_containers/hypospray/open_ui(mob/user) - var/dat = {" - Activate Autolabeler
- Current Label: [label]
-
- Activate Tagger
- Current Tag: [description_overlay]
-
- Toggle Mode:
- Current Mode: [inject_mode ? "Inject" : "Draw"]
-
- Set Transfer Amount:
- Current Transfer Amount [amount_per_transfer_from_this]
-
- Empty Hypospray:
-
"} - - var/datum/browser/popup = new(user, "hypospray") - popup.set_content(dat) - popup.open() - - -/obj/item/reagent_containers/hypospray/advanced/open_ui(mob/user) - var/dat = {" - Activate Autolabeler
- Current Label: [label]
-
- Activate Tagger
- Current Tag: [description_overlay]
-
- Toggle Mode:
- Current Mode: [inject_mode ? "Inject" : "Draw"]
-
- Set Transfer Amount:
- Current Transfer Amount: [amount_per_transfer_from_this]
-
- Display Reagent Content:
-
-
- Empty Hypospray:
-
"} - - var/datum/browser/popup = new(user, "hypospray") - popup.set_content(dat) - popup.open() - - -/obj/item/reagent_containers/hypospray/Topic(href, href_list) + return data + +/obj/item/reagent_containers/hypospray/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return - if(href_list["inject_mode"]) - if(inject_mode) - to_chat(usr, span_notice("[src] has been set to draw mode. It will now drain reagents.")) - - else - to_chat(usr, span_notice("[src] has been set to inject mode. It will now inject reagents.")) - inject_mode = !inject_mode - update_icon() - - else if(href_list["autolabeler"]) - var/mob/user = usr - var/str = copytext(reject_bad_text(input(user,"Hypospray label text?", "Set label", "")), 1, MAX_NAME_LEN) - if(!length(str)) - user.balloon_alert(user, "Invalid text.") - return - balloon_alert(user, "Labeled \"[str]\".") - name = "[core_name] ([str])" - label = str - - else if(href_list["overlayer"]) - var/mob/user = usr - var/str = copytext(reject_bad_text(input(user,"Hypospray tag text?", "Set tag", "")), 1, MAX_NAME_HYPO) - if(!length(str)) - user.balloon_alert(user, "Invalid text.") - return - user.balloon_alert(user, "You tag [src] as \"[str]\".") - description_overlay = str - update_icon() + switch(action) + if("ActivateAutolabeler") + var/mob/user = usr + var/str = copytext(reject_bad_text(input(user,"Hypospray label text?", "Set label", "")), 1, MAX_NAME_LEN) + if(!length(str)) + user.balloon_alert(user, "Invalid text.") + return + balloon_alert(user, "Labeled \"[str]\".") + name = "[core_name] ([str])" + label = str + + if("ActivateTagger") + var/mob/user = usr + var/str = copytext(reject_bad_text(input(user,"Hypospray tag text?", "Set tag", "")), 1, MAX_NAME_HYPO) + if(!length(str)) + user.balloon_alert(user, "Invalid text.") + return + user.balloon_alert(user, "You tag [src] as \"[str]\".") + description_overlay = str + update_icon() + + if("ToggleMode") + if(inject_mode) + to_chat(usr, span_notice("[src] has been set to draw mode. It will now drain reagents.")) - else if(href_list["set_transfer"]) - var/N = tgui_input_list(usr, "Amount per transfer from this:", "[src]", possible_transfer_amounts) - if(!N) - return + else + to_chat(usr, span_notice("[src] has been set to inject mode. It will now inject reagents.")) + inject_mode = !inject_mode + update_icon() - amount_per_transfer_from_this = N + if("SetTransferAmount") + var/N = tgui_input_list(usr, "Amount per transfer from this:", "[src]", possible_transfer_amounts) + if(!N) + return - else if(href_list["flush"]) - empty(usr) + amount_per_transfer_from_this = N - updateUsrDialog() + if("EmptyHypospray") + empty(usr) +/obj/item/reagent_containers/hypospray/advanced + name = "Advanced hypospray" + desc = "The hypospray is a sterile, air-needle reusable autoinjector for rapid administration of drugs to patients with customizable dosages. Comes complete with an internal reagent analyzer, digital labeler and 2 letter tagger. Handy." + core_name = "hypospray" + icon_state = "hypo" + init_reagent_flags = REFILLABLE|DRAINABLE + liquifier = TRUE -/obj/item/reagent_containers/hypospray/advanced/Topic(href, href_list) +/obj/item/reagent_containers/hypospray/advanced/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return - if(href_list["displayreagents"]) + if(action == "DisplayReagentContent") to_chat(usr, display_reagents()) + return TRUE +/obj/item/reagent_containers/hypospray/advanced/update_icon_state() + . = ..() + if(!reagents?.total_volume) + icon_state = "[initial(icon_state)]_0" + return + var/percent = round((reagents.total_volume / volume) * 100) + switch(percent) + if(0 to 9) + icon_state = initial(icon_state) + if(10 to 24) + icon_state = "[initial(icon_state)]_10" + if(25 to 49) + icon_state = "[initial(icon_state)]_25" + if(50 to 64) + icon_state = "[initial(icon_state)]_50" + if(65 to 79) + icon_state = "[initial(icon_state)]_65" + if(80 to 90) + icon_state = "[initial(icon_state)]_80" + if(91 to INFINITY) + icon_state = "[initial(icon_state)]_100" /obj/item/reagent_containers/hypospray/advanced/update_overlays() . = ..() - overlays.Cut() if(reagents.total_volume) var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10") @@ -327,37 +319,28 @@ filling.icon_state = "[initial(icon_state)]-10" if(10 to 24) filling.icon_state = "[initial(icon_state)]10" - icon_state = "[initial(icon_state)]_10" if(25 to 49) filling.icon_state = "[initial(icon_state)]25" - icon_state = "[initial(icon_state)]_25" if(50 to 64) filling.icon_state = "[initial(icon_state)]50" - icon_state = "[initial(icon_state)]_50" if(65 to 79) filling.icon_state = "[initial(icon_state)]65" - icon_state = "[initial(icon_state)]_65" if(80 to 90) filling.icon_state = "[initial(icon_state)]80" - icon_state = "[initial(icon_state)]_80" if(91 to INFINITY) filling.icon_state = "[initial(icon_state)]100" - icon_state = "[initial(icon_state)]_100" filling.color = mix_color_from_reagents(reagents.reagent_list) - overlays += filling - - else - icon_state = "[initial(icon_state)]_0" + . += filling if(ismob(loc)) var/injoverlay switch(inject_mode) - if (HYPOSPRAY_INJECT_MODE_DRAW) + if(HYPOSPRAY_INJECT_MODE_DRAW) injoverlay = "draw" - if (HYPOSPRAY_INJECT_MODE_INJECT) + if(HYPOSPRAY_INJECT_MODE_INJECT) injoverlay = "inject" - add_overlay(injoverlay) + . += injoverlay /obj/item/reagent_containers/hypospray/advanced/examine(mob/user as mob) . = ..() @@ -483,7 +466,7 @@ list_reagents = list( /datum/reagent/hypervene = 60, ) - description_overlay = "Ht" + description_overlay = "Hy" /obj/item/reagent_containers/hypospray/advanced/nanoblood name = "nanoblood hypospray" diff --git a/code/game/objects/items/reagent_containers/reagent_container.dm b/code/game/objects/items/reagent_containers/reagent_container.dm index dd13fced78263..7fe1bed0895ca 100644 --- a/code/game/objects/items/reagent_containers/reagent_container.dm +++ b/code/game/objects/items/reagent_containers/reagent_container.dm @@ -21,7 +21,6 @@ ///Whether we can restock this in a vendor without it having its starting reagents var/free_refills = TRUE - /obj/item/reagent_containers/Initialize(mapload) . = ..() create_reagents(volume, init_reagent_flags, list_reagents) @@ -30,41 +29,27 @@ /obj/item/reagent_containers/attack_hand_alternate(mob/living/user) . = ..() + change_transfer_amount(user) + +/obj/item/reagent_containers/attack_self_alternate(mob/living/user) + . = ..() + change_transfer_amount(user) + +///Opens a tgui_input_list and changes the transfer_amount of our container based on our selection +/obj/item/reagent_containers/proc/change_transfer_amount(mob/living/user) if(!possible_transfer_amounts) - return + return FALSE var/result = tgui_input_list(user, "Amount per transfer from this:","[src]", possible_transfer_amounts) if(result) amount_per_transfer_from_this = result - -/obj/item/reagent_containers/interact(mob/user) - . = ..() - if(.) - return - - open_ui(user) - -///Opens the relevant UI -/obj/item/reagent_containers/proc/open_ui(mob/user) - if(!length(possible_transfer_amounts)) - return - - var/N = tgui_input_list(user, "Amount per transfer from this:", "[src]", possible_transfer_amounts) - if(!N) - return - - amount_per_transfer_from_this = N + return TRUE /obj/item/reagent_containers/verb/set_APTFT() 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) - return - - amount_per_transfer_from_this = N - + change_transfer_amount(usr) //returns a text listing the reagents (and their volume) in the atom. Used by Attack logs for reagents in pills /obj/item/reagent_containers/proc/get_reagent_list_text() diff --git a/code/game/objects/items/reagent_containers/spray.dm b/code/game/objects/items/reagent_containers/spray.dm index b4436911e92ad..e4b0077838d37 100644 --- a/code/game/objects/items/reagent_containers/spray.dm +++ b/code/game/objects/items/reagent_containers/spray.dm @@ -9,8 +9,8 @@ ) item_state = "cleaner" init_reagent_flags = OPENCONTAINER_NOUNIT - flags_item = NOBLUDGEON - flags_equip_slot = ITEM_SLOT_BELT + item_flags = NOBLUDGEON + equip_slot_flags = ITEM_SLOT_BELT throwforce = 3 w_class = WEIGHT_CLASS_SMALL throw_speed = 2 diff --git a/code/game/objects/items/reagent_containers/syringes.dm b/code/game/objects/items/reagent_containers/syringes.dm index f919b6c787daa..6b8f32ebec3a0 100644 --- a/code/game/objects/items/reagent_containers/syringes.dm +++ b/code/game/objects/items/reagent_containers/syringes.dm @@ -20,7 +20,7 @@ possible_transfer_amounts = null //list(5,10,15) volume = 15 w_class = WEIGHT_CLASS_TINY - flags_item = NOBLUDGEON + item_flags = NOBLUDGEON sharp = IS_SHARP_ITEM_SIMPLE var/mode = SYRINGE_DRAW @@ -185,32 +185,37 @@ update_icon() -/obj/item/reagent_containers/syringe/update_icon() +/obj/item/reagent_containers/syringe/update_icon_state() + . = ..() if(mode == SYRINGE_BROKEN) icon_state = "broken" - overlays.Cut() return + var/rounded_vol = round(reagents.total_volume,5) - overlays.Cut() + icon_state = "[rounded_vol]" + item_state = "syringe_[rounded_vol]" + +/obj/item/reagent_containers/syringe/update_overlays() + . = ..() + if(mode == SYRINGE_BROKEN) + return if(ismob(loc)) var/injoverlay switch(mode) - if (SYRINGE_DRAW) + if(SYRINGE_DRAW) injoverlay = "draw" - if (SYRINGE_INJECT) + if(SYRINGE_INJECT) injoverlay = "inject" - overlays += injoverlay - icon_state = "[rounded_vol]" - item_state = "syringe_[rounded_vol]" + . += injoverlay + var/rounded_vol = round(reagents.total_volume,5) if(reagents.total_volume) var/image/filling = image('icons/obj/reagentfillings.dmi', src, "syringe10") filling.icon_state = "syringe[rounded_vol]" filling.color = mix_color_from_reagents(reagents.reagent_list) - overlays += filling - + . += filling /obj/item/reagent_containers/syringe/proc/syringestab(mob/living/carbon/target as mob, mob/living/carbon/user as mob) diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index fbe752d120bf8..4fdc489b68000 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -7,8 +7,8 @@ ) item_state = "buildpipe" icon_state = "blank" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT var/list/part /obj/item/robot_parts/l_arm @@ -53,7 +53,7 @@ /obj/item/robot_parts/biotic name = "biotic limbs" icon = 'icons/mob/human_races/r_human.dmi' - flags_atom = NONE + atom_flags = NONE /obj/item/robot_parts/biotic/l_arm name = "biotic left arm" diff --git a/code/game/objects/items/scanners.dm b/code/game/objects/items/scanners.dm index 0adbe90c14a7a..e45da80161c85 100644 --- a/code/game/objects/items/scanners.dm +++ b/code/game/objects/items/scanners.dm @@ -16,8 +16,8 @@ REAGENT SCANNER icon = 'icons/obj/device.dmi' icon_state = "t-ray0" var/on = 0 - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_SMALL item_icons = list( slot_l_hand_str = 'icons/mob/inhands/equipment/engineering_left.dmi', @@ -71,8 +71,8 @@ REAGENT SCANNER ) item_state = "healthanalyzer" desc = "A hand-held body scanner able to distinguish vital signs of the subject. The front panel is able to provide the basic readout of the subject's status." - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT throwforce = 3 w_class = WEIGHT_CLASS_SMALL throw_speed = 5 @@ -267,12 +267,13 @@ REAGENT SCANNER ) damaged_organs += list(current_organ) data["damaged_organs"] = damaged_organs - + var/ssd = null if(patient.has_brain() && patient.stat != DEAD && ishuman(patient)) if(!patient.key) - data["ssd"] = "No soul detected." // they ghosted + ssd = "No soul detected." // they ghosted else if(!patient.client) - data["ssd"] = "SSD detected." // SSD + ssd = "SSD detected." // SSD + data["ssd"] = ssd return data @@ -286,18 +287,18 @@ REAGENT SCANNER desc = "Advanced medical gloves, these include a built-in analyzer to quickly scan patients." icon_state = "medscan_gloves" item_state = "medscan_gloves" - flags_equip_slot = ITEM_SLOT_GLOVES + equip_slot_flags = ITEM_SLOT_GLOVES w_class = WEIGHT_CLASS_SMALL icon = 'icons/obj/clothing/gloves.dmi' item_state_worn = TRUE siemens_coefficient = 0.50 blood_sprite_state = "bloodyhands" - flags_armor_protection = HANDS - flags_equip_slot = ITEM_SLOT_GLOVES + armor_protection_flags = HANDS + equip_slot_flags = ITEM_SLOT_GLOVES attack_verb = "scans" soft_armor = list(MELEE = 25, BULLET = 15, LASER = 10, ENERGY = 15, BOMB = 15, BIO = 5, FIRE = 15, ACID = 15) - flags_cold_protection = HANDS - flags_heat_protection = HANDS + cold_protection_flags = HANDS + heat_protection_flags = HANDS min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE @@ -350,8 +351,8 @@ REAGENT SCANNER icon_state = "atmos" item_state = "analyzer" w_class = WEIGHT_CLASS_SMALL - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT throwforce = 5 throw_speed = 4 throw_range = 20 @@ -400,14 +401,13 @@ REAGENT SCANNER icon_state = "spectrometer" item_state = "analyzer" w_class = WEIGHT_CLASS_SMALL - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT throwforce = 5 throw_speed = 4 throw_range = 20 var/details = FALSE - var/recent_fail = TRUE /obj/item/mass_spectrometer/Initialize(mapload) . = ..() @@ -422,9 +422,6 @@ REAGENT SCANNER /obj/item/mass_spectrometer/attack_self(mob/user as mob) if (user.stat) return - if (crit_fail) - to_chat(user, span_warning("This device has critically failed and is no longer functional!")) - return if(!reagents.total_volume) return var/list/blood_traces @@ -438,16 +435,7 @@ REAGENT SCANNER break var/dat = "Trace Chemicals Found: " for(var/R in blood_traces) - if(prob(reliability)) - dat += "\n\t[R][details ? " ([blood_traces[R]] units)" : "" ]" - recent_fail = FALSE - else if(recent_fail) - crit_fail = TRUE - reagents.clear_reagents() - to_chat(user, span_warning("Device malfunction occured. Please consult manual for manufacturer contact and warranty.")) - return - else - recent_fail = TRUE + dat += "\n\t[R][details ? " ([blood_traces[R]] units)" : "" ]" to_chat(user, "[dat]") reagents.clear_reagents() @@ -464,14 +452,13 @@ REAGENT SCANNER icon_state = "spectrometer" item_state = "analyzer" w_class = WEIGHT_CLASS_SMALL - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT throwforce = 5 throw_speed = 4 throw_range = 20 var/details = FALSE - var/recent_fail = FALSE /obj/item/reagent_scanner/afterattack(obj/O, mob/user as mob, proximity) if(!proximity) @@ -480,24 +467,13 @@ REAGENT SCANNER return if(!istype(O)) return - if (crit_fail) - to_chat(user, span_warning("This device has critically failed and is no longer functional!")) - return if(!O.reagents || !length(O.reagents.reagent_list)) to_chat(user, span_notice("No chemical agents found in [O]")) return var/dat = "" var/one_percent = O.reagents.total_volume / 100 for (var/datum/reagent/R in O.reagents.reagent_list) - if(prob(reliability)) - dat += "\n \t [span_notice(" [R.name][details ? ": [R.volume / one_percent]%" : ""]")]" - recent_fail = FALSE - else if(recent_fail) - crit_fail = TRUE - to_chat(user, span_warning("Device malfunction occured. Please consult manual for manufacturer contact and warranty.")) - return - else - recent_fail = TRUE + dat += "\n \t [span_notice(" [R.name][details ? ": [R.volume / one_percent]%" : ""]")]" to_chat(user, span_notice("Chemicals found: [dat]")) /obj/item/reagent_scanner/adv diff --git a/code/game/objects/items/shards.dm b/code/game/objects/items/shards.dm index 63b9b2bec1409..92921b3e8ae2b 100644 --- a/code/game/objects/items/shards.dm +++ b/code/game/objects/items/shards.dm @@ -16,7 +16,7 @@ ) item_state = "shard-glass" attack_verb = list("stabbed", "slashed", "sliced", "cut") - var/source_sheet_type = /obj/item/stack/sheet/glass + var/source_sheet_type = /obj/item/stack/sheet/glass/glass var/shardsize /obj/item/shard/suicide_act(mob/user) @@ -52,6 +52,8 @@ /obj/item/shard/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(iswelder(I)) var/obj/item/tool/weldingtool/WT = I @@ -106,7 +108,7 @@ if(H.species.species_flags & ROBOTIC_LIMBS || H.species.species_flags & IS_INSULATED) return - if(!H.shoes && !(H.wear_suit?.flags_armor_protection & FEET)) + if(!H.shoes && !(H.wear_suit?.armor_protection_flags & FEET)) INVOKE_ASYNC(src, PROC_REF(pierce_foot), H) /obj/item/shard/proc/pierce_foot(mob/living/carbon/human/target) diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index 0a4d9e13477f9..e8896d7639905 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -28,7 +28,7 @@ icon = 'icons/obj/objects.dmi' icon_state = "target_stake" density = TRUE - flags_atom = CONDUCT + atom_flags = CONDUCT max_integrity = 15000 //important that what the marines are shooting at doesn't break, we don't make it invulnerable because we still need to plasma cutter it sometimes soft_armor = list(MELEE = 80, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 120, BIO = 100, FIRE = 100, ACID = 0) ///ungas need to actually hit this @@ -36,6 +36,8 @@ /obj/structure/target_stake/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!istype(I, /obj/item/target)) return var/obj/item/target/targetcushion = I diff --git a/code/game/objects/items/stacks/barbed_wire.dm b/code/game/objects/items/stacks/barbed_wire.dm index 147f877a19b83..d02df54cc31ed 100644 --- a/code/game/objects/items/stacks/barbed_wire.dm +++ b/code/game/objects/items/stacks/barbed_wire.dm @@ -4,7 +4,7 @@ desc = "A spiky length of wire." icon = 'icons/Marine/marine-items.dmi' icon_state = "barbed_wire" - flags_item = NOBLUDGEON + item_flags = NOBLUDGEON singular_name = "length" w_class = WEIGHT_CLASS_SMALL force = 0 @@ -29,6 +29,8 @@ /obj/item/stack/barbed_wire/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!istype(I, /obj/item/stack/rods)) return diff --git a/code/game/objects/items/stacks/catwalk.dm b/code/game/objects/items/stacks/catwalk.dm index 1ad00da269d96..4f0b5f8f543be 100644 --- a/code/game/objects/items/stacks/catwalk.dm +++ b/code/game/objects/items/stacks/catwalk.dm @@ -9,5 +9,5 @@ throwforce = 8 throw_speed = 3 throw_range = 6 - flags_atom = CONDUCT + atom_flags = CONDUCT max_amount = 60 diff --git a/code/game/objects/items/stacks/flags.dm b/code/game/objects/items/stacks/flags.dm index 897b9aa943ab3..565626bfe3cc9 100644 --- a/code/game/objects/items/stacks/flags.dm +++ b/code/game/objects/items/stacks/flags.dm @@ -31,6 +31,8 @@ /obj/item/stack/flag/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(upright && istype(I, type)) return attack_hand(user) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 44d5863abcb4f..97f0dd6bc97af 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -181,28 +181,10 @@ /obj/item/stack/medical/heal_pack/advanced dir = NORTH - flags_atom = DIRLOCK + atom_flags = DIRLOCK skill_level_needed = SKILL_MEDICAL_PRACTICED unskilled_delay = SKILL_TASK_EASY -/* //RUTGMC edit - turning off unused proc -/obj/item/stack/medical/heal_pack/advanced/update_icon_state() - if(max_amount < 1 || amount > max_amount) - return - var/percentage = round(amount / max_amount) * 100 - switch(percentage) - if(1 to 20) - setDir(SOUTH) - if(21 to 40) - setDir(EAST) - if(41 to 60) - setDir(SOUTHEAST) - if(61 to 80) - setDir(WEST) - if(81 to INFINITY) - setDir(NORTH) -*/ - /obj/item/stack/medical/heal_pack/advanced/bruise_pack name = "advanced trauma kit" singular_name = "advanced trauma kit" diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm index e58b980c2ce17..f9506ec160417 100644 --- a/code/game/objects/items/stacks/nanopaste.dm +++ b/code/game/objects/items/stacks/nanopaste.dm @@ -18,7 +18,7 @@ var/datum/limb/S = H.get_limb(user.zone_selected) if(H.species.species_flags & IS_SYNTHETIC) - H.blood_volume = BLOOD_VOLUME_NORMAL + H.set_blood_volume(BLOOD_VOLUME_NORMAL) if(S.surgery_open_stage == 0) if (S && (S.limb_status & LIMB_ROBOT)) diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 13d889e577293..153a5aab8c8c1 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -3,7 +3,7 @@ desc = "Some rods. Can be used for building, or something." singular_name = "metal rod" icon_state = "rods" - flags_atom = CONDUCT + atom_flags = CONDUCT w_class = WEIGHT_CLASS_NORMAL force = 9 throwforce = 15 @@ -14,7 +14,9 @@ /obj/item/stack/rods/attackby(obj/item/W as obj, mob/user as mob) - ..() + . = ..() + if(.) + return if(istype(W, /obj/item/stack/barbed_wire)) // making razorwire obstacles var/obj/item/stack/barbed_wire/B = W @@ -46,8 +48,6 @@ if (!R && replace) user.put_in_hands(new_item) return - ..() - /obj/item/stack/rods/attack_self(mob/user as mob) diff --git a/code/game/objects/items/stacks/sandbags.dm b/code/game/objects/items/stacks/sandbags.dm index 9408d2360f9f2..cada5cca97479 100644 --- a/code/game/objects/items/stacks/sandbags.dm +++ b/code/game/objects/items/stacks/sandbags.dm @@ -22,6 +22,8 @@ /obj/item/stack/sandbags_empty/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tool/shovel)) var/obj/item/tool/shovel/ET = I @@ -86,5 +88,5 @@ /obj/item/stack/sandbags/attack_self(mob/living/user) . = ..() - var/building_time = LERP(2 SECONDS, 1 SECONDS, user.skills.getPercent(SKILL_CONSTRUCTION, SKILL_ENGINEER_MASTER)) + var/building_time = LERP(2 SECONDS, 1 SECONDS, user.skills.getPercent(SKILL_CONSTRUCTION, SKILL_ENGINEER_EXPERT)) create_object(user, new/datum/stack_recipe("sandbag barricade", /obj/structure/barricade/sandbags, 5, time = building_time, max_per_turf = STACK_RECIPE_ONE_DIRECTIONAL_PER_TILE, on_floor = TRUE), 1) diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 3dbd6282c5bbf..112f298f23c9f 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -15,7 +15,6 @@ singular_name = "glass sheet" icon_state = "sheet-glass" item_state = "sheet-glass" - merge_type = /obj/item/stack/sheet/glass var/created_window = /obj/structure/window var/reinforced_type = /obj/item/stack/sheet/glass/reinforced var/is_reinforced = FALSE @@ -58,6 +57,8 @@ GLOBAL_LIST_INIT(glass_radial_images, list( /obj/item/stack/sheet/glass/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(is_reinforced) return @@ -74,8 +75,9 @@ GLOBAL_LIST_INIT(glass_radial_images, list( V.use(1) if(!src && !RG) user.put_in_hands(RG) - -/obj/item/stack/sheet/glass/large_stack +/obj/item/stack/sheet/glass/glass //this exists because otherwise glass can be merger into any ofthe other glass types. + merge_type = /obj/item/stack/sheet/glass/glass +/obj/item/stack/sheet/glass/glass/large_stack amount = 50 @@ -88,6 +90,7 @@ GLOBAL_LIST_INIT(glass_radial_images, list( singular_name = "reinforced glass sheet" icon_state = "sheet-rglass" item_state = "sheet-rglass" + merge_type = /obj/item/stack/sheet/glass/reinforced created_window = /obj/structure/window/reinforced is_reinforced = TRUE @@ -101,9 +104,11 @@ GLOBAL_LIST_INIT(glass_radial_images, list( desc = "Phoron glass is a silicate-phoron alloy turned into a non-crystalline solid. It is transparent just like glass, even if visibly tainted pink, and very resistant to damage and heat." singular_name = "phoron glass sheet" icon_state = "sheet-phoronglass" + merge_type = /obj/item/stack/sheet/glass/phoronglass created_window = /obj/structure/window/phoronbasic reinforced_type = /obj/item/stack/sheet/glass/phoronrglass + /* * Reinforced phoron glass sheets */ @@ -112,5 +117,6 @@ GLOBAL_LIST_INIT(glass_radial_images, list( desc = "Reinforced phoron glass is made out of squares of silicate-phoron alloy glass layered on a metallic rod matrice. It is insanely resistant to both physical shock and heat." singular_name = "reinforced phoron glass sheet" icon_state = "sheet-phoronrglass" + merge_type = /obj/item/stack/sheet/glass/phoronrglass created_window = /obj/structure/window/phoronreinforced is_reinforced = TRUE diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 7baaa36b7a4ee..b7279d03f79d9 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -88,6 +88,8 @@ //Step one - dehairing. /obj/item/stack/sheet/animalhide/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(I.sharp) user.visible_message(span_notice(" \the [user] starts cutting hair off \the [src]"), span_notice(" You start cutting the hair off \the [src]"), "You hear the sound of a knife rubbing against flesh") diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index a338918e27f91..6c0896d6f3d40 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -32,21 +32,21 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ new/datum/stack_recipe("reinforced table parts", /obj/item/frame/table/reinforced, 2), \ new/datum/stack_recipe("rack parts", /obj/item/frame/rack, 1), \ new/datum/stack_recipe_list("airlock assemblies", list( \ - new/datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_MASTER), \ - new/datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_MASTER), \ - new/datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_MASTER), \ - new/datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_MASTER), \ - new/datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_MASTER), \ - new/datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_MASTER), \ - new/datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_MASTER), \ - new/datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_MASTER), \ - new/datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_MASTER), \ - new/datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_MASTER), \ - new/datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_MASTER), \ - new/datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_MASTER), \ - new/datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_MASTER), \ - new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_MASTER), \ - new/datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_MASTER), \ + new/datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_EXPERT), \ + new/datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_EXPERT), \ + new/datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_EXPERT), \ + new/datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_EXPERT), \ + new/datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_EXPERT), \ + new/datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_EXPERT), \ + new/datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_EXPERT), \ + new/datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_EXPERT), \ + new/datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_EXPERT), \ + new/datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_EXPERT), \ + new/datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_EXPERT), \ + new/datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_EXPERT), \ + new/datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_EXPERT), \ + new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_EXPERT), \ + new/datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 5 SECONDS, max_per_turf = STACK_RECIPE_ONE_PER_TILE, on_floor = TRUE, skill_req = SKILL_CONSTRUCTION_EXPERT), \ ), 4), \ null, \ )) @@ -66,9 +66,9 @@ GLOBAL_LIST_INIT(metal_radial_images, list( singular_name = "metal sheet" icon_state = "sheet-metal" item_state = "sheet-metal" - flags_item = NOBLUDGEON + item_flags = NOBLUDGEON throwforce = 14 - flags_atom = CONDUCT + atom_flags = CONDUCT merge_type = /obj/item/stack/sheet/metal number_of_extra_variants = 3 @@ -132,9 +132,9 @@ GLOBAL_LIST_INIT(metal_radial_images, list( desc = "This sheet is an alloy of iron and phoron." icon_state = "sheet-plasteel" item_state = "sheet-plasteel" - flags_item = NOBLUDGEON + item_flags = NOBLUDGEON throwforce = 15 - flags_atom = CONDUCT + atom_flags = CONDUCT merge_type = /obj/item/stack/sheet/plasteel number_of_extra_variants = 3 diff --git a/code/game/objects/items/stacks/snow.dm b/code/game/objects/items/stacks/snow.dm index 91c1af488d74f..91e29432d2c77 100644 --- a/code/game/objects/items/stacks/snow.dm +++ b/code/game/objects/items/stacks/snow.dm @@ -15,6 +15,8 @@ /obj/item/stack/snow/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!istype(I, /obj/item/tool/shovel)) return @@ -61,7 +63,8 @@ return var/turf/open/T = target if(T.get_dirt_type() == DIRT_TYPE_SNOW) - if(T.slayer >= 3) + var/turf/open/floor/plating/ground/snow/snowy_turf = T + if(snowy_turf.slayer >= 3) to_chat(user, "This ground is already full of snow.") return if(amount < 5) @@ -70,11 +73,12 @@ to_chat(user, "You start putting some snow back on the ground.") if(!do_after(user, 15, IGNORE_HELD_ITEM, target, BUSY_ICON_BUILD)) return - if(T.slayer >= 3) + if(snowy_turf.slayer >= 3) return to_chat(user, "You put a new snow layer on the ground.") - T.slayer += 1 - T.update_icon(TRUE, FALSE) + snowy_turf.slayer += 1 + snowy_turf.update_appearance() + snowy_turf.update_sides() use(5) /obj/item/stack/snow/attack_self(mob/user) @@ -93,7 +97,7 @@ //Using same safeties as other constructions for(var/obj/O in user.loc) //Objects, we don't care about mobs. Turfs are checked elsewhere if(O.density) - if(O.flags_atom & ON_BORDER) + if(O.atom_flags & ON_BORDER) if(O.dir == user.dir) to_chat(user, span_warning("There is already \a [O.name] in this direction!")) return @@ -109,7 +113,7 @@ return for(var/obj/O in user.loc) //Objects, we don't care about mobs. Turfs are checked elsewhere if(O.density) - if(!(O.flags_atom & ON_BORDER) || O.dir == user.dir) + if(!(O.atom_flags & ON_BORDER) || O.dir == user.dir) return var/obj/structure/barricade/snow/SB = new(user.loc, user.dir) user.visible_message(span_notice("[user] assembles a snow barricade."), diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index a6363a127de57..4a38cb9ec68fd 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -56,6 +56,7 @@ /obj/item/stack/update_icon_state() + . = ..() if(!number_of_extra_variants) return var/ratio = round((amount * (number_of_extra_variants + 1)) / max_amount) @@ -271,7 +272,7 @@ continue if(!AM.density) continue - if(AM.flags_atom & ON_BORDER && AM.dir != user.dir) + if(AM.atom_flags & ON_BORDER && AM.dir != user.dir) if(istype(AM, /obj/structure/window)) var/obj/structure/window/W = AM if(!W.is_full_window()) diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 1c23e9e576337..f5d8d0c4d83e6 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -32,7 +32,7 @@ throwforce = 8 throw_speed = 3 throw_range = 6 - flags_atom = CONDUCT + atom_flags = CONDUCT turf_type = /turf/open/floor ///Creates plating, used for space turfs only @@ -87,6 +87,8 @@ /obj/item/stack/tile/light/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tool/crowbar)) new /obj/item/stack/sheet/metal(user.loc) diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index cd6a0f5a815a6..227e446ef74ea 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -19,7 +19,7 @@ "Ratcher Combat Robot" = 'icons/mob/species/robot/backpack.dmi', ) w_class = WEIGHT_CLASS_BULKY - flags_equip_slot = ITEM_SLOT_BACK //ERROOOOO + equip_slot_flags = ITEM_SLOT_BACK //ERROOOOO max_w_class = WEIGHT_CLASS_NORMAL storage_slots = null max_storage_space = 24 @@ -66,28 +66,11 @@ max_w_class = WEIGHT_CLASS_BULKY max_storage_space = 28 -/obj/item/storage/backpack/holding/proc/failcheck(mob/user) - if (prob(reliability)) - return TRUE //No failure - if (prob(reliability)) - to_chat(user, span_warning("The Bluespace portal resists your attempt to add another item.")) - else - to_chat(user, span_warning("The Bluespace generator malfunctions!")) - for (var/obj/O in src.contents) //it broke, delete what was in it - qdel(O) - crit_fail = 1 - icon_state = "brokenpack" - /obj/item/storage/backpack/holding/attackby(obj/item/I, mob/user, params) - if(crit_fail) - to_chat(user, span_warning("The Bluespace generator isn't working.")) - - else if(istype(I, /obj/item/storage/backpack/holding) && !I.crit_fail) - to_chat(user, span_warning("The Bluespace interfaces of the two devices conflict and malfunction.")) - qdel(I) - - else + if(!istype(I, /obj/item/storage/backpack/holding)) return ..() + to_chat(user, span_warning("The Bluespace interfaces of the two devices conflict and malfunction.")) + qdel(I) /obj/item/storage/backpack/santabag name = "Santa's Gift Bag" @@ -314,6 +297,7 @@ . += span_warning("Its defibrillator recharge unit does not have a power cell installed!") /obj/item/storage/backpack/marine/corpsman/update_icon_state() + . = ..() icon_state = icon_skin if(cell?.charge >= 0) switch(PERCENT(cell.charge/cell.maxcharge)) @@ -329,13 +313,18 @@ icon_state += "_0" /obj/item/storage/backpack/marine/corpsman/MouseDrop_T(obj/item/W, mob/living/user) //Dragging the defib/power cell onto the backpack will trigger its special functionality. + var/obj/item/defibrillator/defib if(istype(W, /obj/item/defibrillator)) + defib = W + else if(istype(W, /obj/item/clothing/gloves/defibrillator)) + var/obj/item/clothing/gloves/defibrillator/defib_gloves = W + defib = defib_gloves.internal_defib + if(defib) if(cell) - var/obj/item/defibrillator/D = W - var/charge_difference = D.dcell.maxcharge - D.dcell.charge + var/charge_difference = defib.dcell.maxcharge - defib.dcell.charge if(charge_difference) //If the defib has less than max charge, recharge it. use_charge(user, charge_difference) //consume an appropriate amount of charge - D.dcell.charge += min(charge_difference, cell.charge) //Recharge the defibrillator battery with the lower of the difference between its present and max cap, or the remaining charge + defib.dcell.charge += min(charge_difference, cell.charge) //Recharge the defibrillator battery with the lower of the difference between its present and max cap, or the remaining charge else to_chat(user, span_warning("This defibrillator is already at maximum charge!")) else @@ -358,14 +347,14 @@ /obj/item/storage/backpack/marine/tech name = "\improper TGMC technician backpack" - desc = "The standard-issue backpack worn by TGMC technicians. Specially equipped to hold sentry gun and M56D emplacement parts." + desc = "The standard-issue backpack worn by TGMC technicians. Specially equipped to hold sentry gun and HSG-102 emplacement parts." icon_state = "marinepackt" item_state = "marinepackt" bypass_w_limit = list( /obj/item/weapon/gun/sentry/big_sentry, /obj/item/weapon/gun/sentry/mini, - /obj/item/weapon/gun/tl102, - /obj/item/ammo_magazine/tl102, + /obj/item/weapon/gun/hsg_102, + /obj/item/ammo_magazine/hsg_102, /obj/item/ammo_magazine/sentry, /obj/item/ammo_magazine/minisentry, /obj/item/mortal_shell, @@ -405,7 +394,7 @@ item_state = "marinesatt" bypass_w_limit = list( /obj/item/weapon/gun/sentry/mini, - /obj/item/ammo_magazine/tl102, + /obj/item/ammo_magazine/hsg_102, /obj/item/ammo_magazine/sentry, /obj/item/ammo_magazine/minisentry, /obj/item/mortal_shell, @@ -462,8 +451,6 @@ var/stealth_delay = null actions_types = list(/datum/action/item_action/toggle) -/obj/item/storage/backpack/marine/satchel/scout_cloak/scout - /obj/item/storage/backpack/marine/satchel/scout_cloak/Destroy() camo_off() return ..() @@ -474,13 +461,48 @@ STOP_PROCESSING(SSprocessing, src) return ..() -/obj/item/storage/backpack/marine/satchel/scout_cloak/verb/use_camouflage() - set name = "Toggle M68 Thermal Camouflage" - set desc = "Activate your cloak's camouflage." - set category = "Scout" - +/obj/item/storage/backpack/marine/satchel/scout_cloak/attack_self(mob/user) + . = ..() camouflage() +/obj/item/storage/backpack/marine/satchel/scout_cloak/process() + if(!wearer) + camo_off() + return + else if(wearer.stat != CONSCIOUS) + camo_off(wearer) + return + + stealth_delay = world.time - SCOUT_CLOAK_STEALTH_DELAY + if(camo_last_shimmer > stealth_delay) //Shimmer after taking aggressive actions; no energy regeneration + wearer.alpha = shimmer_alpha //50% invisible + else if(camo_last_stealth > stealth_delay ) //We have an initial reprieve at max invisibility allowing us to reposition; no energy recovery during this time + wearer.alpha = SCOUT_CLOAK_STILL_ALPHA + return + //Stationary stealth + else if( wearer.last_move_intent < stealth_delay ) //If we're standing still and haven't shimmed in the past 3 seconds we become almost completely invisible + wearer.alpha = SCOUT_CLOAK_STILL_ALPHA //95% invisible + camo_adjust_energy(wearer, SCOUT_CLOAK_ACTIVE_RECOVERY) + +///Handles the wearer moving with the cloak active +/obj/item/storage/backpack/marine/satchel/scout_cloak/proc/handle_movement(mob/living/carbon/human/source, atom/old_loc, movement_dir, forced, list/old_locs) + SIGNAL_HANDLER + if(!camo_active) + return + if(camo_last_shimmer > world.time - SCOUT_CLOAK_STEALTH_DELAY) //Shimmer after taking aggressive actions + source.alpha = SCOUT_CLOAK_RUN_ALPHA + camo_adjust_energy(src, SCOUT_CLOAK_RUN_DRAIN) + else if(camo_last_stealth > world.time - SCOUT_CLOAK_STEALTH_DELAY) //We have an initial reprieve at max invisibility allowing us to reposition, albeit at a high drain rate + source.alpha = SCOUT_CLOAK_STILL_ALPHA + camo_adjust_energy(src, SCOUT_CLOAK_RUN_DRAIN) + else if(source.m_intent == MOVE_INTENT_WALK) + source.alpha = SCOUT_CLOAK_WALK_ALPHA + camo_adjust_energy(src, SCOUT_CLOAK_WALK_DRAIN) + else + source.alpha = SCOUT_CLOAK_RUN_ALPHA + camo_adjust_energy(src, SCOUT_CLOAK_RUN_DRAIN) + +///Activates the cloak /obj/item/storage/backpack/marine/satchel/scout_cloak/proc/camouflage() if (usr.incapacitated(TRUE)) return @@ -497,6 +519,7 @@ camo_off(usr) return + //other sources of cloaking if(SEND_SIGNAL(M, COMSIG_MOB_ENABLE_STEALTH) & STEALTH_ALREADY_ACTIVE) to_chat(M, span_warning("You are already cloaked!")) return FALSE @@ -509,7 +532,6 @@ camo_last_stealth = world.time wearer = M - RegisterSignal(wearer, COMSIG_MOB_ENABLE_STEALTH, PROC_REF(on_other_activate)) M.visible_message("[M] fades into thin air!", span_notice("You activate your cloak's camouflage.")) playsound(M.loc,'sound/effects/cloak_scout_on.ogg', 15, 1) @@ -537,11 +559,11 @@ COMSIG_MOB_ITEM_ATTACK), PROC_REF(action_taken)) START_PROCESSING(SSprocessing, src) - wearer.cloaking = TRUE + RegisterSignal(wearer, COMSIG_MOVABLE_MOVED, PROC_REF(handle_movement)) return TRUE - +///Sig handler for other sources of cloaking /obj/item/storage/backpack/marine/satchel/scout_cloak/proc/on_other_activate() SIGNAL_HANDLER return STEALTH_ALREADY_ACTIVE @@ -592,9 +614,10 @@ COMSIG_MOB_GUN_AUTOFIRED, COMSIG_MOB_ATTACHMENT_FIRED, COMSIG_MOB_THROW, - COMSIG_MOB_ITEM_ATTACK)) + COMSIG_MOB_ITEM_ATTACK, + COMSIG_MOVABLE_MOVED, + )) STOP_PROCESSING(SSprocessing, src) - wearer.cloaking = FALSE /obj/item/storage/backpack/marine/satchel/scout_cloak/proc/process_camo_cooldown(mob/living/user, cooldown) if(!camo_cooldown_timer) @@ -630,11 +653,6 @@ return FALSE return TRUE - -/obj/item/storage/backpack/marine/satchel/scout_cloak/attack_self(mob/user) - . = ..() - camouflage() - /obj/item/storage/backpack/marine/satchel/scout_cloak/proc/camo_adjust_energy(mob/user, drain = SCOUT_CLOAK_WALK_DRAIN) camo_energy = clamp(camo_energy - drain,0,initial(camo_energy)) @@ -658,34 +676,16 @@ camo_last_shimmer = world.time //Reduces transparency to 50% wearer.alpha = max(wearer.alpha,shimmer_alpha) -/obj/item/storage/backpack/marine/satchel/scout_cloak/process() - if(!wearer) - camo_off() - return - else if(wearer.stat != CONSCIOUS) - camo_off(wearer) - return - - stealth_delay = world.time - SCOUT_CLOAK_STEALTH_DELAY - if(camo_last_shimmer > stealth_delay) //Shimmer after taking aggressive actions; no energy regeneration - wearer.alpha = shimmer_alpha //50% invisible - else if(camo_last_stealth > stealth_delay ) //We have an initial reprieve at max invisibility allowing us to reposition; no energy recovery during this time - wearer.alpha = SCOUT_CLOAK_STILL_ALPHA - return - //Stationary stealth - else if( wearer.last_move_intent < stealth_delay ) //If we're standing still and haven't shimmed in the past 3 seconds we become almost completely invisible - wearer.alpha = SCOUT_CLOAK_STILL_ALPHA //95% invisible - camo_adjust_energy(wearer, SCOUT_CLOAK_ACTIVE_RECOVERY) - /obj/item/storage/backpack/marine/satchel/scout_cloak/sniper name = "\improper M68-B Thermal Cloak" icon_state = "smock" desc = "The M68-B thermal cloak is a variant custom-purposed for snipers, allowing for faster, superior, stationary concealment at the expense of mobile concealment. It is designed to be paired with the lightweight M3 recon battle armor. Serves as a satchel." shimmer_alpha = SCOUT_CLOAK_RUN_ALPHA * 0.5 //Half the normal shimmer transparency. -/obj/item/storage/backpack/marine/satchel/scout_cloak/sniper/equippedsniper/Initialize(mapload) - . = ..() - new /obj/item/detpack(src) +/obj/item/storage/backpack/marine/satchel/scout_cloak/sniper/handle_movement(mob/living/carbon/human/source, atom/old_loc, movement_dir, forced, list/old_locs) + if(!camo_active) + return + source.alpha = initial(source.alpha) //Sniper variant has *no* mobility stealth, but no drain on movement either /obj/item/storage/backpack/marine/satchel/scout_cloak/sniper/process() if(!wearer) @@ -707,7 +707,7 @@ /obj/item/storage/backpack/marine/engineerpack name = "\improper TGMC technician welderpack" - desc = "A specialized backpack worn by TGMC technicians. It carries a fueltank for quick welder refueling and use," + desc = "A specialized backpack worn by TGMC technicians. It carries a fueltank for quick welder refueling." icon_state = "engineerpack" item_state = "engineerpack" var/max_fuel = 260 diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 70b204e0bcb93..6dda103b35603 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -20,7 +20,7 @@ allow_quick_empty = 1 display_contents_with_number = 0 // UNStABLE AS FuCK, turn on when it stops crashing clients use_to_pickup = 1 - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT // ----------------------------- // Trash bag @@ -39,6 +39,7 @@ cant_hold = list(/obj/item/disk/nuclear) /obj/item/storage/bag/trash/update_icon_state() + . = ..() if(length(contents) == 0) icon_state = "trashbag0" else if(length(contents) < 12) @@ -75,7 +76,7 @@ desc = "This little bugger can be used to store and transport ores." icon = 'icons/obj/mining.dmi' icon_state = "satchel" - flags_equip_slot = ITEM_SLOT_BELT|ITEM_SLOT_POCKET + equip_slot_flags = ITEM_SLOT_BELT|ITEM_SLOT_POCKET w_class = WEIGHT_CLASS_NORMAL storage_slots = 50 max_storage_space = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index b73abf8ee40e7..019fdcaa04894 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -7,7 +7,7 @@ icon_state = "utilitybelt" item_state = "utility" item_state_worn = TRUE - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT attack_verb = list("whipped", "lashed", "disciplined") w_class = WEIGHT_CLASS_BULKY allow_drawing_method = TRUE @@ -177,6 +177,30 @@ new /obj/item/reagent_containers/hypospray/autoinjector/dexalinplus(src) new /obj/item/healthanalyzer(src) +/obj/item/storage/belt/lifesaver/beginner/Initialize(mapload, ...) //For beginner vendor + . = ..() + new /obj/item/storage/pill_bottle/bicaridine(src) + new /obj/item/storage/pill_bottle/meralyne(src) + new /obj/item/storage/pill_bottle/kelotane(src) + new /obj/item/storage/pill_bottle/dermaline(src) + new /obj/item/storage/pill_bottle/tramadol(src) + new /obj/item/storage/pill_bottle/tricordrazine(src) + new /obj/item/storage/pill_bottle/dylovene(src) + new /obj/item/storage/pill_bottle/inaprovaline(src) + new /obj/item/storage/pill_bottle/isotonic(src) + new /obj/item/storage/pill_bottle/spaceacillin(src) + new /obj/item/storage/pill_bottle/alkysine(src) + new /obj/item/storage/pill_bottle/imidazoline(src) + new /obj/item/storage/pill_bottle/quickclot(src) + new /obj/item/storage/pill_bottle/hypervene(src) + new /obj/item/stack/medical/splint(src) + new /obj/item/stack/medical/splint(src) + new /obj/item/stack/medical/splint(src) + new /obj/item/stack/medical/splint(src) + new /obj/item/stack/medical/splint(src) + new /obj/item/stack/medical/splint(src) + new /obj/item/healthanalyzer(src) + /obj/item/storage/belt/lifesaver/full/upp name ="\improper Type 41 pattern lifesaver bag" desc = "The Type 41 load rig is the standard-issue LBE of the UPP military. This configuration mounts a satchel filled with a range of injectors and light medical supplies, common among medics and partisans." @@ -325,15 +349,15 @@ new /obj/item/storage/pill_bottle/tricordrazine(src) new /obj/item/storage/pill_bottle/dylovene(src) new /obj/item/storage/pill_bottle/inaprovaline(src) - new /obj/item/storage/pill_bottle/dexalin(src) + new /obj/item/storage/pill_bottle/isotonic(src) new /obj/item/storage/pill_bottle/spaceacillin(src) new /obj/item/storage/pill_bottle/alkysine(src) new /obj/item/storage/pill_bottle/imidazoline(src) new /obj/item/storage/pill_bottle/quickclot(src) new /obj/item/storage/pill_bottle/hypervene(src) + new /obj/item/bodybag/cryobag(src) new /obj/item/defibrillator(src) new /obj/item/tool/research/excavation_tool(src) - new /obj/item/tool/research/xeno_analyzer(src) new /obj/item/healthanalyzer(src) /obj/item/storage/belt/hypospraybelt @@ -352,7 +376,7 @@ /obj/item/storage/syringe_case, ) -/obj/item/storage/belt/hypospraybelt/Initialize(mapload) //The belt, with all it's magic inside! +/obj/item/storage/belt/hypospraybelt/full/Initialize(mapload) //The belt, with all it's magic inside! . = ..() new /obj/item/reagent_containers/glass/bottle/bicaridine(src) new /obj/item/reagent_containers/glass/bottle/kelotane(src) @@ -372,6 +396,31 @@ new /obj/item/reagent_containers/hypospray/advanced/hypervene(src) new /obj/item/healthanalyzer(src) +/obj/item/storage/belt/hypospraybelt/beginner/Initialize(mapload) + . = ..() + new /obj/item/reagent_containers/glass/bottle/bicaridine(src) + new /obj/item/reagent_containers/glass/bottle/kelotane(src) + new /obj/item/reagent_containers/glass/bottle/tramadol(src) + new /obj/item/reagent_containers/glass/bottle/tricordrazine(src) + new /obj/item/reagent_containers/hypospray/advanced/big/bicaridine(src) + new /obj/item/reagent_containers/hypospray/advanced/big/kelotane(src) + new /obj/item/reagent_containers/hypospray/advanced/big/tramadol(src) + new /obj/item/reagent_containers/hypospray/advanced/big/tricordrazine(src) + new /obj/item/reagent_containers/hypospray/advanced/big/combatmix(src) + new /obj/item/reagent_containers/hypospray/advanced/big/dylovene(src) + new /obj/item/reagent_containers/hypospray/advanced/big/inaprovaline(src) + new /obj/item/reagent_containers/hypospray/advanced/big/isotonic(src) + new /obj/item/reagent_containers/hypospray/advanced/big/spaceacillin(src) + new /obj/item/reagent_containers/hypospray/advanced/big/quickclot(src) + new /obj/item/reagent_containers/hypospray/advanced/imialky(src) + new /obj/item/reagent_containers/hypospray/advanced/hypervene(src) + new /obj/item/reagent_containers/hypospray/advanced/peridaxonplus(src) + new /obj/item/reagent_containers/hypospray/advanced/quickclotplus(src) + new /obj/item/storage/syringe_case/meraderm(src) + new /obj/item/storage/syringe_case/meraderm(src) + new /obj/item/reagent_containers/hypospray/advanced/meraderm(src) + + /obj/item/storage/belt/security name = "\improper M276 pattern security rig" desc = "The M276 is the standard load-bearing equipment of the TGMC. It consists of a modular belt with various clips. This configuration is commonly seen among TGMC Military Police and peacekeepers, though it can hold some light munitions." @@ -718,12 +767,11 @@ /obj/item/storage/belt/shotgun/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/ammo_magazine)) var/obj/item/ammo_magazine/M = I - if(CHECK_BITFIELD(M.flags_magazine, MAGAZINE_HANDFUL)) + if(CHECK_BITFIELD(M.magazine_flags, MAGAZINE_HANDFUL)) return ..() - if(M.flags_magazine & MAGAZINE_REFILLABLE) + if(M.magazine_flags & MAGAZINE_REFILLABLE) if(!M.current_rounds) to_chat(user, span_warning("[M] is empty.")) return @@ -862,47 +910,44 @@ /obj/item/storage/belt/shotgun/martini name = "martini henry ammo belt" desc = "A belt good enough for holding all your .577/400 ball rounds." - icon_state = ".557_belt" + icon_state = "martini_belt" storage_slots = 12 max_storage_space = 24 - + sprite_slots = 6 draw_mode = 1 - flags_atom = DIRLOCK + atom_flags = DIRLOCK /obj/item/storage/belt/shotgun/martini/Initialize(mapload, ...) . = ..() update_icon() -/obj/item/storage/belt/shotgun/martini/update_icon() - if(!length(contents)) - icon_state = initial(icon_state) + "_e" - return - icon_state = initial(icon_state) +/obj/item/storage/belt/shotgun/martini/attackby(obj/item/I, mob/user, params) + if(!istype(I, /obj/item/ammo_magazine)) + update_icon() + return ..() - var/holding = round((length(contents) + 1) / 2) - setDir(holding + round(holding/3)) + var/obj/item/ammo_magazine/new_mag = I + if(new_mag.caliber != CALIBER_557) + to_chat(user, span_notice("[src] can only be filled with .557/440 ball rifle rounds.")) + return -/obj/item/storage/belt/shotgun/martini/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/ammo_magazine)) - var/obj/item/ammo_magazine/new_mag = I - if(new_mag.caliber != CALIBER_557) - to_chat(user, span_notice("[src] can only be filled with .557/440 ball rifle rounds.")) - return - . = ..() - update_icon() + return ..() /obj/item/storage/belt/shotgun/martini/attack_hand(mob/living/user) - if (loc != user) + if(!ishuman(user)) + return + + if(loc != user) . = ..() for(var/mob/M in content_watchers) close(M) - if(!draw_mode || !ishuman(user) && !length(contents)) - open(user) - if(!length(contents)) - return + open(user) //Empty belt? Open the inventory + + if(!draw_mode) + return ..() //No draw mode so we just click like normal var/obj/item/I = contents[length(contents)] if(!istype(I, /obj/item/ammo_magazine/handful)) @@ -917,7 +962,6 @@ existing_handful.create_handful(user, 1) update_icon() - /obj/item/storage/belt/knifepouch name="\improper M276 pattern knife rig" desc="The M276 is the standard load-bearing equipment of the TGMC. It consists of a modular belt with various clips. This version is specially designed with six holsters to store throwing knives. Not commonly issued, but kept in service." diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 1aafb5ffc2fa0..81807542d8cf4 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -235,7 +235,7 @@ icon_state = "matchbox" item_state = "zippo" w_class = WEIGHT_CLASS_TINY - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT spawn_type = /obj/item/tool/match spawn_number = 14 @@ -349,6 +349,7 @@ spawn_number = 5 /obj/item/storage/box/explosive_mines/update_icon_state() + . = ..() icon_state = initial(icon_state) if(!length(contents)) icon_state += "_e" @@ -381,7 +382,8 @@ spawn_type = /obj/item/explosive/grenade/flare spawn_number = 14 -/obj/item/storage/box/m94/update_icon() +/obj/item/storage/box/m94/update_icon_state() + . = ..() icon_state = initial(icon_state) if(!length(contents)) icon_state += "_e" @@ -445,7 +447,8 @@ if(. && !length(contents) && !gc_destroyed) qdel(src) -/obj/item/storage/box/MRE/update_icon() +/obj/item/storage/box/MRE/update_icon_state() + . = ..() if(!isopened) isopened = 1 icon_state += "opened" @@ -668,7 +671,7 @@ /obj/item/ammo_magazine/smg, /obj/item/ammo_magazine/sniper, /obj/item/ammo_magazine/standard_gpmg, - /obj/item/ammo_magazine/tl102, + /obj/item/ammo_magazine/hsg_102, /obj/item/ammo_magazine/standard_lmg, /obj/item/ammo_magazine/standard_mmg, /obj/item/ammo_magazine/heavymachinegun, @@ -1148,9 +1151,9 @@ /obj/item/storage/box/visual/grenade/phosphorus name = "\improper M40 HPDP grenade box" desc = "A secure box holding 15 M40 HPDP white phosphorous grenades. War crimes for the entire platoon!" - storage_slots = 15 + storage_slots = 25 max_storage_space = 30 - spawn_number = 15 + spawn_number = 25 spawn_type = /obj/item/explosive/grenade/phosphorus closed_overlay = "grenade_box_overlay_phosphorus" @@ -1182,13 +1185,20 @@ spawn_type = /obj/item/explosive/grenade/smokebomb/drain closed_overlay = "grenade_box_overlay_drain" +/obj/item/storage/box/visual/grenade/antigas + name = "\improper M40-AG grenade box" + desc = "A secure box holding 25 M40-AG gas grenades. Quickly clears out hostile smoke." + spawn_number = 25 + spawn_type = /obj/item/explosive/grenade/smokebomb/antigas + closed_overlay = "grenade_box_overlay_antigas" + /obj/item/storage/box/visual/grenade/razorburn name = "razorburn grenade box" desc = "A secure box holding 15 razor burn grenades. Used for quick flank coverage." - storage_slots = 15 + storage_slots = 25 max_storage_space = 30 - spawn_number = 15 - spawn_type = /obj/item/explosive/grenade/chem_grenade/razorburn_smol + spawn_number = 25 + spawn_type = /obj/item/explosive/grenade/chem_grenade/razorburn_small closed_overlay = "grenade_box_overlay_razorburn" /obj/item/storage/box/visual/grenade/razorburn_large @@ -1206,6 +1216,20 @@ spawn_type = /obj/item/explosive/grenade/chem_grenade/teargas closed_overlay = "grenade_box_overlay_teargas" +/obj/item/storage/box/visual/grenade/lasburster + name = "\improper M80 lasburster grenade box" + desc = "A secure box holding 25 M80 lasburster grenades." + spawn_number = 25 + spawn_type = /obj/item/explosive/grenade/bullet/laser + closed_overlay = "grenade_box_overlay_grenade_lasburster" + +/obj/item/storage/box/visual/grenade/hefa + name = "\improper M25 HEFA grenade box" + desc = "A secure box holding 25 M25 high explosive fragmentation grenades. Keep very far away from extreme heat and flame." + spawn_number = 25 + spawn_type = /obj/item/explosive/grenade/bullet/hefa + closed_overlay = "grenade_box_overlay_grenade_hefa2" + /obj/item/storage/box/visual/grenade/training name = "\improper M07 training grenade box" desc = "A secure box holding 25 M07 training grenades. Harmless and reusable." diff --git a/code/game/objects/items/storage/briefcase.dm b/code/game/objects/items/storage/briefcase.dm index 78b42fa622799..ba9e334cd2650 100644 --- a/code/game/objects/items/storage/briefcase.dm +++ b/code/game/objects/items/storage/briefcase.dm @@ -3,7 +3,7 @@ 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" - flags_atom = CONDUCT + atom_flags = CONDUCT force = 8 throw_speed = 1 throw_range = 4 @@ -16,7 +16,7 @@ desc = "A well made, expensive looking case, made to fit an R-76 Magnum and its accessories. For the discerning gun owner." icon_state = "magnum_case" item_state = "briefcase" - flags_atom = CONDUCT + atom_flags = CONDUCT force = 12 throw_speed = 1 throw_range = 4 diff --git a/code/game/objects/items/storage/dispenser.dm b/code/game/objects/items/storage/dispenser.dm index 44a70023e47d4..481c060426308 100644 --- a/code/game/objects/items/storage/dispenser.dm +++ b/code/game/objects/items/storage/dispenser.dm @@ -113,7 +113,7 @@ desc = "The TX-9000 also known as \"Dispenser\" is a machine capable of holding a big amount of items on it, while also healing nearby synthetics. Your allies will often ask you to lay down one of those." icon = 'icons/obj/items/storage/storage_48.dmi' icon_state = "dispenser" - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK max_storage_space = 48 max_integrity = 250 @@ -122,12 +122,12 @@ AddComponent(/datum/component/deployable_item, /obj/machinery/deployable/dispenser, 0, 0) /obj/item/storage/backpack/dispenser/attack_hand(mob/living/user) - if(!CHECK_BITFIELD(flags_item, IS_DEPLOYED)) + if(!CHECK_BITFIELD(item_flags, IS_DEPLOYED)) return ..() open(user) /obj/item/storage/backpack/dispenser/open(mob/user) - if(CHECK_BITFIELD(flags_item, IS_DEPLOYED)) + if(CHECK_BITFIELD(item_flags, IS_DEPLOYED)) return ..() /obj/item/storage/backpack/dispenser/attempt_draw_object(mob/living/user) diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index 02d96ac9f7e01..5e6fb8ca22eea 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -29,6 +29,7 @@ new spawn_type(src) /obj/item/storage/fancy/update_icon_state() + . = ..() icon_state = "[icon_type]box[length(contents)]" /obj/item/storage/fancy/remove_from_storage(obj/item/W, atom/new_location, mob/user) @@ -75,7 +76,7 @@ item_state = "candlebox5" storage_slots = 5 throwforce = 2 - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT spawn_type = /obj/item/tool/candle spawn_number = 5 @@ -111,6 +112,8 @@ /obj/item/storage/fancy/crayons/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/toy/crayon)) var/obj/item/toy/crayon/C = I @@ -131,7 +134,7 @@ item_state = "cigpacket" w_class = WEIGHT_CLASS_TINY throwforce = 2 - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT max_storage_space = 18 storage_slots = 18 can_hold = list( @@ -146,6 +149,7 @@ new /obj/item/clothing/mask/cigarette(src) /obj/item/storage/fancy/cigarettes/update_icon_state() + . = ..() icon_state = "[initial(icon_state)][length(contents)]" /obj/item/storage/fancy/cigarettes/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) @@ -170,7 +174,7 @@ item_state = "chempacketbox" w_class = WEIGHT_CLASS_TINY throwforce = 2 - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT max_storage_space = 18 storage_slots = 18 can_hold = list( @@ -192,10 +196,10 @@ // for(var/i in 1 to 5) // new /obj/item/clothing/mask/cigarette/antitox(src) - new /obj/item/clothing/mask/cigarette/emergency(src) new /obj/item/tool/lighter(src) /obj/item/storage/fancy/chemrettes/update_icon_state() + . = ..() icon_state = "[initial(icon_state)][length(contents)]" /obj/item/storage/fancy/cigarettes/dromedaryco @@ -231,13 +235,14 @@ w_class = WEIGHT_CLASS_TINY throwforce = 2 w_class = WEIGHT_CLASS_SMALL - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT storage_slots = 7 spawn_type = /obj/item/clothing/mask/cigarette/cigar spawn_number = 7 icon_type = "cigar" /obj/item/storage/fancy/cigar/update_icon_state() + . = ..() icon_state = "[initial(icon_state)][length(contents)]" @@ -287,8 +292,9 @@ . = ..() update_icon() -/obj/item/storage/lockbox/vials/update_icon(itemremoved = 0) - icon_state = "vialbox[length(contents)-itemremoved]" +/obj/item/storage/lockbox/vials/update_icon_state() + . = ..() + icon_state = "vialbox[length(contents)]" /obj/item/storage/lockbox/vials/update_overlays() . = ..() diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm index 0afa7561e1ca3..19a3522bf950d 100644 --- a/code/game/objects/items/storage/firstaid.dm +++ b/code/game/objects/items/storage/firstaid.dm @@ -36,7 +36,8 @@ fill_firstaid_kit() -/obj/item/storage/firstaid/update_icon() +/obj/item/storage/firstaid/update_icon_state() + . = ..() if(!length(contents)) icon_state = icon_state += "_empty" else @@ -351,6 +352,7 @@ pill_type_to_fill = /obj/item/reagent_containers/pill/kelotane greyscale_colors = "#CC9900#FFFFFF" description_overlay = "Ke" + storage_flags = BYPASS_VENDOR_CHECK /obj/item/storage/pill_bottle/dermaline name = "dermaline pill bottle" @@ -366,6 +368,7 @@ pill_type_to_fill = /obj/item/reagent_containers/pill/dylovene greyscale_colors = "#669900#ffffff" description_overlay = "Dy" + storage_flags = BYPASS_VENDOR_CHECK /obj/item/storage/pill_bottle/isotonic name = "isotonic pill bottle" @@ -373,6 +376,7 @@ pill_type_to_fill = /obj/item/reagent_containers/pill/isotonic greyscale_colors = "#5c0e0e#ffffff" description_overlay = "Is" + storage_flags = BYPASS_VENDOR_CHECK /obj/item/storage/pill_bottle/inaprovaline name = "inaprovaline pill bottle" @@ -388,6 +392,7 @@ pill_type_to_fill = /obj/item/reagent_containers/pill/tramadol greyscale_colors = "#8a8686#ffffff" description_overlay = "Ta" + storage_flags = BYPASS_VENDOR_CHECK /obj/item/storage/pill_bottle/paracetamol name = "paracetamol pill bottle" @@ -397,6 +402,7 @@ greyscale_config = /datum/greyscale_config/pillbottlebox greyscale_colors = "#f8f4f8#ffffff" description_overlay = "Pa" + storage_flags = BYPASS_VENDOR_CHECK /obj/item/storage/pill_bottle/spaceacillin name = "spaceacillin pill bottle" @@ -412,6 +418,7 @@ pill_type_to_fill = /obj/item/reagent_containers/pill/bicaridine greyscale_colors = "#DA0000#ffffff" description_overlay = "Bi" + storage_flags = BYPASS_VENDOR_CHECK /obj/item/storage/pill_bottle/meralyne name = "meralyne pill bottle" @@ -480,6 +487,7 @@ greyscale_colors = "#f8f8f8#ffffff" greyscale_config = /datum/greyscale_config/pillbottleround description_overlay = "Ti" + storage_flags = BYPASS_VENDOR_CHECK /obj/item/storage/pill_bottle/happy name = "happy pill bottle" diff --git a/code/game/objects/items/storage/holsters.dm b/code/game/objects/items/storage/holsters.dm index b6d76933f91f5..af1ad9d6756e0 100644 --- a/code/game/objects/items/storage/holsters.dm +++ b/code/game/objects/items/storage/holsters.dm @@ -7,7 +7,7 @@ max_w_class = WEIGHT_CLASS_BULKY ///normally the special item will be larger than what should fit. Child items will have lower limits and an override storage_slots = 1 max_storage_space = 4 - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK draw_mode = 1 allow_drawing_method = TRUE storage_type_limits = list(/obj/item/weapon = 1) @@ -70,6 +70,7 @@ return ..() /obj/item/storage/holster/update_icon_state() + . = ..() if(holstered_item) icon_state = initial(icon_state) + "_full" else @@ -78,7 +79,7 @@ /obj/item/storage/holster/update_icon() . = ..() - if(flags_item & HAS_UNDERLAY) + if(item_flags & HAS_UNDERLAY) update_underlays() var/mob/user = loc if(!istype(user)) @@ -91,10 +92,7 @@ ///Adds or removes underlay sprites, checks holstered_item to see which underlay to add /obj/item/storage/holster/proc/update_underlays() if(holstered_item && !holstered_item_underlay) - if(holstered_item.greyscale_config && holstered_item.greyscale_colors) - holstered_item_underlay = image(SSgreyscale.GetColoredIconByType(holstered_item.greyscale_config, holstered_item.greyscale_colors), "belt") - else - holstered_item_underlay = image(icon, src, holstered_item.icon_state) + holstered_item_underlay = image(icon, src, holstered_item.icon_state) underlays += holstered_item_underlay else underlays -= holstered_item_underlay @@ -157,9 +155,9 @@ /obj/item/weapon/gun/launcher/rocket/recoillessrifle, /obj/item/weapon/gun/launcher/rocket/recoillessrifle/low_impact, ) - bypass_w_limit = list(/obj/item/weapon/gun/launcher/rocket/recoillessrifle,) + bypass_w_limit = list(/obj/item/weapon/gun/launcher/rocket/recoillessrifle) ///only one RR per bag - storage_type_limits = list(/obj/item/weapon/gun/launcher/rocket/recoillessrifle = 1,) + storage_type_limits = list(/obj/item/weapon/gun/launcher/rocket/recoillessrifle = 1) can_hold = list( /obj/item/ammo_magazine/rocket, /obj/item/weapon/gun/launcher/rocket/recoillessrifle, @@ -250,9 +248,9 @@ storage_slots = null max_storage_space = 30 access_delay = 0 - holsterable_allowed = list(/obj/item/mortar_kit,) - bypass_w_limit = list(/obj/item/mortar_kit,) - storage_type_limits = list(/obj/item/mortar_kit = 1,) + holsterable_allowed = list(/obj/item/mortar_kit) + bypass_w_limit = list(/obj/item/mortar_kit) + storage_type_limits = list(/obj/item/mortar_kit = 1) can_hold = list( /obj/item/mortal_shell/he, /obj/item/mortal_shell/incendiary, @@ -285,9 +283,9 @@ max_storage_space = 16 max_w_class = WEIGHT_CLASS_NORMAL access_delay = 0 - holsterable_allowed = list(/obj/item/weapon/gun/flamer/big_flamer/marinestandard/engineer,) - bypass_w_limit = list(/obj/item/weapon/gun/flamer/big_flamer/marinestandard/engineer,) - storage_type_limits = list(/obj/item/weapon/gun/flamer/big_flamer/marinestandard/engineer = 1,) + holsterable_allowed = list(/obj/item/weapon/gun/flamer/big_flamer/marinestandard/engineer) + bypass_w_limit = list(/obj/item/weapon/gun/flamer/big_flamer/marinestandard/engineer) + storage_type_limits = list(/obj/item/weapon/gun/flamer/big_flamer/marinestandard/engineer = 1) ///The internal fuel tank var/obj/item/ammo_magazine/flamer_tank/internal/tank @@ -368,7 +366,7 @@ name = "\improper H5 pattern M2132 machete scabbard" desc = "A large leather scabbard used to carry a M2132 machete. It can be strapped to the back, waist or armor." icon_state = "machete_holster" - flags_equip_slot = ITEM_SLOT_BELT|ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BELT|ITEM_SLOT_BACK holsterable_allowed = list( /obj/item/weapon/claymore/mercsword/machete, /obj/item/weapon/claymore/harvester, @@ -397,7 +395,7 @@ icon_state = "katana_holster" force = 12 attack_verb = list("bludgeoned", "struck", "cracked") - flags_equip_slot = ITEM_SLOT_BELT|ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BELT|ITEM_SLOT_BACK holsterable_allowed = list(/obj/item/weapon/katana) can_hold = list(/obj/item/weapon/katana) @@ -410,7 +408,7 @@ name = "\improper officer sword scabbard" desc = "A large leather scabbard used to carry a sword. Appears to be a reproduction, rather than original. It can be strapped to the waist or armor." icon_state = "officer_sheath" - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT holsterable_allowed = list(/obj/item/weapon/claymore/mercsword/machete/officersword) can_hold = list(/obj/item/weapon/claymore/mercsword/machete/officersword) @@ -460,7 +458,7 @@ desc = "The M276 is the standard load-bearing equipment of the TGMC. It consists of a modular belt with various clips. This version is designed for the M25 SMG, and features a larger frame to support the gun. Due to its unorthodox design, it isn't a very common sight, and is only specially issued." icon_state = "m25_holster" icon = 'icons/obj/clothing/belts.dmi' - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT holsterable_allowed = list( /obj/item/weapon/gun/smg/m25, /obj/item/weapon/gun/smg/m25/holstered, @@ -477,7 +475,7 @@ desc = "The M276 is the standard load-bearing equipment of the TGMC. It consists of a modular belt with various clips. This version is designed for the MP-19 SMG, and features a larger frame to support the gun. Due to its unorthodox design, it isn't a very common sight, and is only specially issued." icon_state = "t19_holster" icon = 'icons/obj/clothing/belts.dmi' - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT holsterable_allowed = list( /obj/item/weapon/gun/smg/standard_machinepistol, /obj/item/weapon/gun/smg/standard_machinepistol/compact, @@ -501,7 +499,7 @@ /obj/item/storage/holster/flarepouch name = "flare pouch" desc = "A pouch designed to hold flares and a single flaregun. Refillable with a M94 flare pack." - flags_equip_slot = ITEM_SLOT_POCKET + equip_slot_flags = ITEM_SLOT_POCKET storage_slots = 28 max_storage_space = 28 icon = 'icons/Marine/marine-pouches.dmi' @@ -535,6 +533,32 @@ for(var/i in 1 to (storage_slots-flare_gun.w_class)) new /obj/item/explosive/grenade/flare(src) + +/obj/item/storage/holster/icc_mg + name = "\improper ML-41 scabbard (10x26mm)" + desc = "A backpack holster allowing the storage of any a ML-41 Assault Machinegun, also carries ammo for the other portion of the system." + icon_state = "icc_bagmg" + storage_slots = 5 + max_storage_space = 16 + holsterable_allowed = list( + /obj/item/weapon/gun/rifle/icc_mg, + ) + can_hold = list( + /obj/item/weapon/gun/rifle/icc_mg, + /obj/item/ammo_magazine/icc_mg/packet, + ) + +/obj/item/storage/holster/icc_mg/full/Initialize(mapload) + . = ..() + var/obj/item/weapon/gun/new_gun = new /obj/item/weapon/gun/rifle/icc_mg(src) + new /obj/item/ammo_magazine/icc_mg/packet(src) + new /obj/item/ammo_magazine/icc_mg/packet(src) + new /obj/item/ammo_magazine/icc_mg/packet(src) + new /obj/item/ammo_magazine/icc_mg/packet(src) + INVOKE_ASYNC(src, PROC_REF(handle_item_insertion), new_gun) + + + ////////////////////////////// GUN BELTS ///////////////////////////////////// /obj/item/storage/holster/belt @@ -542,8 +566,8 @@ desc = "A belt-holster assembly that allows one to hold a pistol and two magazines." icon = 'icons/obj/clothing/belts.dmi' icon_state = "m4a3_holster" - flags_equip_slot = ITEM_SLOT_BELT - flags_item = HAS_UNDERLAY + equip_slot_flags = ITEM_SLOT_BELT + item_flags = HAS_UNDERLAY use_sound = null storage_slots = 7 max_storage_space = 15 @@ -554,6 +578,7 @@ /obj/item/weapon/gun/pistol, /obj/item/ammo_magazine/pistol, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_pistol, + /obj/item/cell/lasgun/plasma, /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/serpenta, /obj/item/cell/lasgun/lasrifle, /obj/item/cell/lasgun/volkite/small, @@ -579,6 +604,7 @@ /obj/item/ammo_magazine/pistol, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_pistol, /obj/item/cell/lasgun/lasrifle, + /obj/item/cell/lasgun/plasma, ) /obj/item/storage/holster/belt/pistol/m4a3/full/Initialize(mapload) @@ -658,6 +684,7 @@ /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/serpenta, /obj/item/cell/lasgun/lasrifle, /obj/item/cell/lasgun/volkite/small, + /obj/item/cell/lasgun/plasma, ) /obj/item/storage/holster/belt/pistol/m4a3/som/serpenta/Initialize(mapload, ...) diff --git a/code/game/objects/items/storage/internal.dm b/code/game/objects/items/storage/internal.dm index 2604e4522a868..5c38e9afe7ba1 100644 --- a/code/game/objects/items/storage/internal.dm +++ b/code/game/objects/items/storage/internal.dm @@ -43,9 +43,6 @@ if(user.lying_angle || user.incapacitated()) //Can't use your inventory when lying return FALSE - if(istype(user.loc, /obj/vehicle/multitile/root/cm_armored)) //Stops inventory actions in a mech/tank - return FALSE - if(over_object == user && Adjacent(user)) //This must come before the screen objects only block open(user) return FALSE @@ -122,7 +119,7 @@ close(M) return TRUE -/obj/item/storage/internal/Adjacent(atom/neighbor) +/obj/item/storage/internal/Adjacent(atom/neighbor, atom/target, atom/movable/mover) return master_item.Adjacent(neighbor) diff --git a/code/game/objects/items/storage/marine_boxes.dm b/code/game/objects/items/storage/marine_boxes.dm index 08ef5190e7102..7c73e823ffaa5 100644 --- a/code/game/objects/items/storage/marine_boxes.dm +++ b/code/game/objects/items/storage/marine_boxes.dm @@ -6,90 +6,8 @@ foldable = /obj/item/stack/sheet/wood /obj/item/storage/box/crate/update_icon_state() - icon_state = length(contents) ? initial(icon_state) : "empty_case" - -/obj/item/storage/box/crate/heavy_armor - name = "\improper B-Series defensive armor crate" - desc = "A large case containing an experiemental suit of B18 armor for the discerning specialist." - icon_state = "armor_case" - w_class = WEIGHT_CLASS_HUGE - storage_slots = 3 - can_hold = list() //Nada. Once you take the stuff out it doesn't fit back in. - -/obj/item/storage/box/crate/heavy_armor/Initialize(mapload, ...) - . = ..() - new /obj/item/clothing/gloves/marine/specialist(src) - new /obj/item/clothing/suit/storage/marine/specialist(src) - new /obj/item/clothing/head/helmet/marine/specialist(src) - -/obj/item/storage/box/crate/grenade_system - name = "\improper M92 grenade launcher case" - desc = "A large case containing a heavy-duty multi-shot grenade launcher, the Armat Systems M92. Drag this sprite into you to open it up!\nNOTE: You cannot put items back inside this case." - icon_state = "grenade_case" - w_class = WEIGHT_CLASS_HUGE - storage_slots = 2 - slowdown = 1 - can_hold = list() //Nada. Once you take the stuff out it doesn't fit back in. - -/obj/item/storage/box/crate/grenade_system/Initialize(mapload, ...) - . = ..() - new /obj/item/weapon/gun/grenade_launcher/multinade_launcher(src) - new /obj/item/storage/belt/grenade/b17(src) - -/obj/item/storage/box/crate/rocket_system - name = "\improper M5 RPG crate" - desc = "A large case containing a heavy-caliber antitank missile launcher and missiles. Drag this sprite into you to open it up!\nNOTE: You cannot put items back inside this case." - icon_state = "rocket_case" - w_class = WEIGHT_CLASS_HUGE - storage_slots = 6 - slowdown = 1 - can_hold = list() //Nada. Once you take the stuff out it doesn't fit back in. - -/obj/item/storage/box/crate/rocket_system/Initialize(mapload, ...) - . = ..() - new /obj/item/weapon/gun/launcher/rocket/sadar(src) - new /obj/item/ammo_magazine/rocket/sadar(src) - new /obj/item/ammo_magazine/rocket/sadar(src) - new /obj/item/ammo_magazine/rocket/sadar/ap(src) - new /obj/item/ammo_magazine/rocket/sadar/ap(src) - new /obj/item/ammo_magazine/rocket/sadar/wp(src) - -/obj/item/storage/box/crate/heavy_grenadier - name = "\improper Heavy Grenadier case" - desc = "A large case containing B17 Heavy Armor and a heavy-duty multi-shot grenade launcher, the Armat Systems M92. Drag this sprite into you to open it up!\nNOTE: You cannot put items back inside this case." - icon_state = "grenade_case" - w_class = WEIGHT_CLASS_HUGE - storage_slots = 6 - slowdown = 1 - can_hold = list() //Nada. Once you take the stuff out it doesn't fit back in. - -/obj/item/storage/box/crate/heavy_grenadier/Initialize(mapload, ...) . = ..() - new /obj/item/weapon/gun/grenade_launcher/multinade_launcher(src) - new /obj/item/storage/belt/grenade/b17(src) - new /obj/item/clothing/suit/storage/marine/B17(src) - new /obj/item/clothing/head/helmet/marine/grenadier(src) - new /obj/item/storage/box/visual/grenade/frag(src) - new /obj/item/storage/box/visual/grenade/frag(src) - new /obj/item/storage/box/visual/grenade/incendiary(src) - -/obj/item/storage/box/crate/heavy_gunner - name = "\improper Heavy Minigunner case" - desc = "A large case containing B18 armor, munitions, and a goddamn minigun. Drag this sprite into you to open it up!\nNOTE: You cannot put items back inside this case." - icon_state = "rocket_case" - w_class = WEIGHT_CLASS_HUGE - storage_slots = 16 - slowdown = 1 - can_hold = list() //Nada. Once you take the stuff out it doesn't fit back in. - -/obj/item/storage/box/crate/heavy_gunner/Initialize(mapload, ...) - . = ..() - new /obj/item/clothing/gloves/marine/specialist(src) - new /obj/item/clothing/suit/storage/marine/specialist(src) - new /obj/item/clothing/head/helmet/marine/specialist(src) - new /obj/item/weapon/gun/minigun(src) - new /obj/item/belt_harness/marine(src) - new /obj/item/ammo_magazine/minigun_powerpack(src) + icon_state = length(contents) ? initial(icon_state) : "empty_case" /obj/item/storage/box/crate/m42c_system name = "\improper antimaterial scoped rifle system (recon set)" diff --git a/code/game/objects/items/storage/misc.dm b/code/game/objects/items/storage/misc.dm index 14dfdedafb711..be83920b3bc0b 100644 --- a/code/game/objects/items/storage/misc.dm +++ b/code/game/objects/items/storage/misc.dm @@ -36,18 +36,22 @@ if(!length(contents)) return ..() - -/obj/item/storage/donut_box/update_icon() - overlays.Cut() +/obj/item/storage/donut_box/update_icon_state() + . = ..() if(!open) icon_state = "donutbox" return icon_state = "donutbox_o" + +/obj/item/storage/donut_box/update_overlays() + . = ..() + if(!open) + return var/i = 0 for(var/obj/item/reagent_containers/food/snacks/donut/D in contents) i++ var/image/img = image('icons/obj/items/food/donuts.dmi', "[D.overlay_state]-[i]") - overlays += img + . += img /obj/item/storage/donut_box/empty icon_state = "donutbox_o" diff --git a/code/game/objects/items/storage/pill_packets.dm b/code/game/objects/items/storage/pill_packets.dm index 3219bffe488a3..96246b8beac0b 100644 --- a/code/game/objects/items/storage/pill_packets.dm +++ b/code/game/objects/items/storage/pill_packets.dm @@ -15,7 +15,7 @@ var/trash_item = /obj/item/trash/pillpacket refill_types = null refill_sound = null - flags_storage = BYPASS_VENDOR_CHECK + storage_flags = BYPASS_VENDOR_CHECK /obj/item/storage/pill_bottle/packet/remove_from_storage(obj/item/item, atom/new_location, mob/user) . = ..() diff --git a/code/game/objects/items/storage/pouch.dm b/code/game/objects/items/storage/pouch.dm index 31fc63ee706c6..713d452dac886 100644 --- a/code/game/objects/items/storage/pouch.dm +++ b/code/game/objects/items/storage/pouch.dm @@ -4,7 +4,7 @@ icon_state = "small_drop" w_class = WEIGHT_CLASS_BULKY //does not fit in backpack max_w_class = WEIGHT_CLASS_SMALL - flags_equip_slot = ITEM_SLOT_POCKET + equip_slot_flags = ITEM_SLOT_POCKET storage_slots = 1 draw_mode = 0 allow_drawing_method = TRUE @@ -395,11 +395,18 @@ /obj/item/storage/pouch/explosive/razorburn/Initialize(mapload) . = ..() - new /obj/item/explosive/grenade/chem_grenade/razorburn_smol(src) - new /obj/item/explosive/grenade/chem_grenade/razorburn_smol(src) - new /obj/item/explosive/grenade/chem_grenade/razorburn_smol(src) + new /obj/item/explosive/grenade/chem_grenade/razorburn_small(src) + new /obj/item/explosive/grenade/chem_grenade/razorburn_small(src) + new /obj/item/explosive/grenade/chem_grenade/razorburn_small(src) new /obj/item/explosive/grenade/chem_grenade/razorburn_large(src) +/obj/item/storage/pouch/explosive/antigas/Initialize(mapload) + . = ..() + new /obj/item/explosive/grenade/smokebomb/antigas(src) + new /obj/item/explosive/grenade/smokebomb/antigas(src) + new /obj/item/explosive/grenade/smokebomb/antigas(src) + new /obj/item/explosive/grenade/smokebomb/antigas(src) + /obj/item/storage/pouch/explosive/upp fill_type = /obj/item/explosive/grenade/upp fill_number = 4 @@ -438,6 +445,15 @@ new /obj/item/explosive/grenade/flashbang/stun(src) new /obj/item/explosive/grenade/flashbang/stun(src) +/obj/item/storage/pouch/grenade/standard/Initialize(mapload) + . = ..() + new /obj/item/explosive/grenade(src) + new /obj/item/explosive/grenade(src) + new /obj/item/explosive/grenade(src) + new /obj/item/explosive/grenade/bullet/laser(src) + new /obj/item/explosive/grenade/bullet/laser(src) + new /obj/item/explosive/grenade/incendiary(src) + /obj/item/storage/pouch/grenade/som desc = "It can contain grenades. This one looks to be made out of traditional SOM leather." icon_state = "grenade_som" @@ -461,6 +477,15 @@ new /obj/item/explosive/grenade/som(src) new /obj/item/explosive/grenade/som(src) +/obj/item/storage/pouch/grenade/som/standard/Initialize(mapload) + . = ..() + new /obj/item/explosive/grenade/som(src) + new /obj/item/explosive/grenade/som(src) + new /obj/item/explosive/grenade/som(src) + new /obj/item/explosive/grenade/som(src) + new /obj/item/explosive/grenade/incendiary/som(src) + new /obj/item/explosive/grenade/incendiary/som(src) + /obj/item/storage/pouch/medkit name = "medkit pouch" desc = "A standard use medkit pouch that can contain all kinds of medical supplies and equipment." @@ -521,7 +546,7 @@ /obj/item/storage/pouch/medical_injectors/firstaid desc = "Standard marine first-aid injector pouch. Specialized to store only auto-injectors. Contains basic injectors, a stabilizing injector, stimulant injector, and an emergency injector." -/obj/item/storage/pouch/medical_injectors/firstaid/Initialize(mapload) +/obj/item/storage/pouch/medical_injectors/firstaid/Initialize(mapload) //used in hvh and erts . = ..() new /obj/item/reagent_containers/hypospray/autoinjector/bicaridine (src) new /obj/item/reagent_containers/hypospray/autoinjector/kelotane (src) @@ -532,6 +557,17 @@ new /obj/item/reagent_containers/hypospray/autoinjector/synaptizine (src) new /obj/item/reagent_containers/hypospray/autoinjector/russian_red (src) +/obj/item/storage/pouch/medical_injectors/standard/Initialize(mapload) //normal access variant available by default to marines + . = ..() + new /obj/item/reagent_containers/hypospray/autoinjector/bicaridine(src) + new /obj/item/reagent_containers/hypospray/autoinjector/kelotane(src) + new /obj/item/reagent_containers/hypospray/autoinjector/tramadol(src) + new /obj/item/reagent_containers/hypospray/autoinjector/tricordrazine(src) + new /obj/item/reagent_containers/hypospray/autoinjector/dylovene(src) + new /obj/item/reagent_containers/hypospray/autoinjector/inaprovaline(src) + new /obj/item/reagent_containers/hypospray/autoinjector/synaptizine(src) + new /obj/item/reagent_containers/hypospray/autoinjector/synaptizine(src) + /obj/item/storage/pouch/medical_injectors/medic/Initialize(mapload) //corpsman autoinjector pouch gets upgraded, but more general chems. . = ..() new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced(src) @@ -594,7 +630,7 @@ sprite_slots = 3 storage_slots = 3 - can_hold = list(/obj/item/storage/box/combat_lolipop,) + can_hold = list(/obj/item/storage/box/combat_lolipop) /obj/item/storage/pouch/med_lolipops/Initialize(mapload) . = ..() @@ -673,7 +709,7 @@ /obj/item/flashlight, /obj/item/whistle, /obj/item/binoculars, - /obj/item/beacon/supply_beacon, + /obj/item/supply_beacon, /obj/item/compass, /obj/item/deployable_camera, /obj/item/hud_tablet, @@ -824,13 +860,12 @@ draw_mode = 0 can_hold = list(/obj/item/ammo_magazine/handful) - /obj/item/storage/pouch/shotgun/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/ammo_magazine)) var/obj/item/ammo_magazine/M = I - if(CHECK_BITFIELD(M.flags_magazine, MAGAZINE_HANDFUL)) + if(CHECK_BITFIELD(M.magazine_flags, MAGAZINE_HANDFUL)) return ..() - if(M.flags_magazine & MAGAZINE_REFILLABLE) + if(M.magazine_flags & MAGAZINE_REFILLABLE) if(!M.current_rounds) to_chat(user, span_warning("[M] is empty.")) return diff --git a/code/game/objects/items/storage/reagent_pouch.dm b/code/game/objects/items/storage/reagent_pouch.dm index ebd86f3eb62b9..8e1b7834581dc 100644 --- a/code/game/objects/items/storage/reagent_pouch.dm +++ b/code/game/objects/items/storage/reagent_pouch.dm @@ -53,7 +53,7 @@ You can Alt-Click to remove the canister in order to refill it." can_hold = list(/obj/item/reagent_containers/hypospray) cant_hold = list(/obj/item/reagent_containers/glass/reagent_canister) //To prevent chat spam when you try to put the container in - flags_item = NOBLUDGEON + item_flags = NOBLUDGEON draw_mode = TRUE ///The internal container of the pouch. Holds the reagent that you use to refill the connected injector var/obj/item/reagent_containers/glass/reagent_canister/inner diff --git a/code/game/objects/items/storage/secure.dm b/code/game/objects/items/storage/secure.dm index 0ea8c091f11f7..73e995524ebfd 100644 --- a/code/game/objects/items/storage/secure.dm +++ b/code/game/objects/items/storage/secure.dm @@ -165,7 +165,7 @@ icon_opened = "safe0" icon_locking = "safeb" icon_sparking = "safespark" - flags_atom = CONDUCT + atom_flags = CONDUCT force = 8 w_class = WEIGHT_CLASS_GIGANTIC max_w_class = WEIGHT_CLASS_GIGANTIC diff --git a/code/game/objects/items/storage/storage.dm b/code/game/objects/items/storage/storage.dm index fde59f2dd7f2c..c09ac3b44cce9 100644 --- a/code/game/objects/items/storage/storage.dm +++ b/code/game/objects/items/storage/storage.dm @@ -77,7 +77,7 @@ ///What sound gets played when the item is tactical refilled var/refill_sound = null ///Flags for specifically storage items - var/flags_storage = NONE + var/storage_flags = NONE /obj/item/storage/MouseDrop(obj/over_object as obj) if(!ishuman(usr)) @@ -86,9 +86,6 @@ if(usr.lying_angle) return - if(istype(usr.loc, /obj/vehicle/multitile/root/cm_armored)) // stops inventory actions in a mech/tank - return - if(over_object == usr && Adjacent(usr)) // this must come before the screen objects only block open(usr) return @@ -96,6 +93,9 @@ if(!istype(over_object, /atom/movable/screen)) return ..() + if(HAS_TRAIT(src, TRAIT_NODROP)) + 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(loc != usr || (loc && loc.loc == usr)) @@ -304,9 +304,6 @@ if(usr.incapacitated(TRUE)) return - if(istype(usr.loc, /obj/vehicle/multitile/root/cm_armored)) // stops inventory actions in a mech/tank - return - var/list/PL = params2list(params) if(!master) @@ -346,7 +343,7 @@ sample_object = null return ..() -///This proc determins the size of the inventory to be displayed. Please touch it only if you know what you're doing. +///This proc determines the size of the inventory to be displayed. Please touch it only if you know what you're doing. /obj/item/storage/proc/orient2hud() var/adjusted_contents = length(contents) @@ -553,6 +550,8 @@ ///This proc is called when you want to place an item into the storage item. /obj/item/storage/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(length(refill_types)) for(var/typepath in refill_types) @@ -668,7 +667,7 @@ if(!allow_drawing_method) verbs -= /obj/item/storage/verb/toggle_draw_mode - boxes = new + boxes = new() boxes.name = "storage" boxes.master = src boxes.icon_state = "block" @@ -676,21 +675,21 @@ boxes.layer = HUD_LAYER boxes.plane = HUD_PLANE - storage_start = new /atom/movable/screen/storage( ) + storage_start = new /atom/movable/screen/storage() storage_start.name = "storage" storage_start.master = src storage_start.icon_state = "storage_start" storage_start.screen_loc = "7,7 to 10,8" storage_start.layer = HUD_LAYER storage_start.plane = HUD_PLANE - storage_continue = new /atom/movable/screen/storage( ) + storage_continue = new /atom/movable/screen/storage() storage_continue.name = "storage" storage_continue.master = src storage_continue.icon_state = "storage_continue" storage_continue.screen_loc = "7,7 to 10,8" storage_continue.layer = HUD_LAYER storage_continue.plane = HUD_PLANE - storage_end = new /atom/movable/screen/storage( ) + storage_end = new /atom/movable/screen/storage() storage_end.name = "storage" storage_end.master = src storage_end.icon_state = "storage_end" @@ -698,20 +697,20 @@ storage_end.layer = HUD_LAYER storage_end.plane = HUD_PLANE - stored_start = new /obj //we just need these to hold the icon + stored_start = new /obj() //we just need these to hold the icon stored_start.icon_state = "stored_start" stored_start.layer = HUD_LAYER stored_start.plane = HUD_PLANE - stored_continue = new /obj + stored_continue = new /obj() stored_continue.icon_state = "stored_continue" stored_continue.layer = HUD_LAYER stored_continue.plane = HUD_PLANE - stored_end = new /obj + stored_end = new /obj() stored_end.icon_state = "stored_end" stored_end.layer = HUD_LAYER stored_end.plane = HUD_PLANE - closer = new + closer = new() closer.master = src /obj/item/storage/Destroy() @@ -745,7 +744,7 @@ ///BubbleWrap - A box can be folded up to make card /obj/item/storage/attack_self(mob/user) - + . = ..() //Clicking on itself will empty it, if it has the verb to do that. if(allow_quick_empty) @@ -876,6 +875,7 @@ return /obj/item/storage/update_icon_state() + . = ..() if(!sprite_slots) icon_state = initial(icon_state) return diff --git a/code/game/objects/items/storage/surgical_tray.dm b/code/game/objects/items/storage/surgical_tray.dm index bed8f1703cf2f..479c322944d77 100644 --- a/code/game/objects/items/storage/surgical_tray.dm +++ b/code/game/objects/items/storage/surgical_tray.dm @@ -2,7 +2,7 @@ name = "surgical tray" desc = "A small metallic tray covered in sterile tarp. Intended to store surgical tools in a neat and clean fashion." icon_state = "surgical_tray" - flags_atom = CONDUCT + atom_flags = CONDUCT w_class = WEIGHT_CLASS_BULKY //Should not fit in backpacks storage_slots = 12 max_storage_space = 24 @@ -27,6 +27,7 @@ new /obj/item/stack/nanopaste(src) /obj/item/storage/surgical_tray/update_icon_state() + . = ..() if(!length(contents)) icon_state = "surgical_tray_e" else diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index 6c5aed7a864b0..acab4433f9d26 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -7,7 +7,7 @@ slot_r_hand_str = 'icons/mob/inhands/equipment/toolboxes_right.dmi', ) item_state = "toolbox_red" - flags_atom = CONDUCT + atom_flags = CONDUCT force = 5 throwforce = 10 throw_speed = 1 diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm index 2e6133e9764e1..ddc70217409b6 100644 --- a/code/game/objects/items/storage/wallets.dm +++ b/code/game/objects/items/storage/wallets.dm @@ -25,7 +25,7 @@ /obj/item/tool/screwdriver, /obj/item/tool/stamp, ) - flags_equip_slot = ITEM_SLOT_ID + equip_slot_flags = ITEM_SLOT_ID var/obj/item/card/id/front_id = null @@ -46,8 +46,8 @@ name = "[name] ([front_id])" update_icon() -/obj/item/storage/wallet/update_icon() - +/obj/item/storage/wallet/update_icon_state() + . = ..() if(front_id) switch(front_id.icon_state) if("id") diff --git a/code/game/objects/items/suit_cooling.dm b/code/game/objects/items/suit_cooling.dm index f43f8aa0c7a80..b1d9ec88562f2 100644 --- a/code/game/objects/items/suit_cooling.dm +++ b/code/game/objects/items/suit_cooling.dm @@ -4,8 +4,8 @@ icon = 'icons/obj/device.dmi' w_class = WEIGHT_CLASS_BULKY icon_state = "suitcooler0" - flags_equip_slot = ITEM_SLOT_BACK - flags_atom = CONDUCT + equip_slot_flags = ITEM_SLOT_BACK + atom_flags = CONDUCT force = 5 throwforce = 10 throw_speed = 1 diff --git a/code/game/objects/items/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm index 0a4db04a31656..c701130c6dff8 100644 --- a/code/game/objects/items/tanks/tank_types.dm +++ b/code/game/objects/items/tanks/tank_types.dm @@ -55,8 +55,8 @@ name = "phoron tank" desc = "Contains dangerous phoron. Do not inhale. Warning: extremely flammable." icon_state = "phoron" - flags_atom = CONDUCT - flags_equip_slot = NONE //they have no straps! + atom_flags = CONDUCT + equip_slot_flags = NONE //they have no straps! @@ -67,8 +67,8 @@ 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" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_TINY force = 4 distribute_pressure = ONE_ATMOSPHERE*O2STANDARD diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index 695bf1fbb0375..f17d48924fb09 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -8,8 +8,8 @@ slot_l_hand_str = 'icons/mob/inhands/equipment/tanks_left.dmi', slot_r_hand_str = 'icons/mob/inhands/equipment/tanks_right.dmi', ) - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BACK + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_NORMAL var/pressure_full = ONE_ATMOSPHERE*4 @@ -54,6 +54,8 @@ /obj/item/tank/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if((istype(I, /obj/item/tool/analyzer)) && get_dist(user, src) <= 1) visible_message(span_warning("[user] has used [I] on [icon2html(src, user)] [src]")) diff --git a/code/game/objects/items/taperecorder.dm b/code/game/objects/items/taperecorder.dm index ec84e411a1080..6233564f0b3e9 100644 --- a/code/game/objects/items/taperecorder.dm +++ b/code/game/objects/items/taperecorder.dm @@ -13,7 +13,7 @@ var/list/storedinfo = list() var/list/timestamp = list() var/canprint = 1 - flags_atom = CONDUCT + atom_flags = CONDUCT throwforce = 2 throw_speed = 4 throw_range = 20 diff --git a/code/game/objects/items/tools/extinguisher.dm b/code/game/objects/items/tools/extinguisher.dm index 6c73dc8baf91b..fc67c43282e3e 100644 --- a/code/game/objects/items/tools/extinguisher.dm +++ b/code/game/objects/items/tools/extinguisher.dm @@ -9,7 +9,7 @@ ) item_state = "fire_extinguisher" hitsound = 'sound/weapons/smash.ogg' - flags_atom = CONDUCT + atom_flags = CONDUCT throwforce = 10 w_class = WEIGHT_CLASS_NORMAL throw_speed = 2 diff --git a/code/game/objects/items/tools/flame_tools.dm b/code/game/objects/items/tools/flame_tools.dm index a06edf3ce0d7c..34b0d38584e0b 100644 --- a/code/game/objects/items/tools/flame_tools.dm +++ b/code/game/objects/items/tools/flame_tools.dm @@ -34,14 +34,13 @@ CIGARETTE PACKETS ARE IN FANCY.DM var/wax = 800 /obj/item/tool/candle/update_icon_state() - var/i - if(wax>150) - i = 1 - else if(wax>80) - i = 2 + . = ..() + if(wax > 150) + icon_state = "candle[1][heat ? "_lit" : ""]" + else if(wax > 80) + icon_state = "candle[2][heat ? "_lit" : ""]" else - i = 3 - icon_state = "candle[i][heat ? "_lit" : ""]" + icon_state = "candle[3][heat ? "_lit" : ""]" /obj/item/tool/candle/Destroy() if(heat) @@ -161,7 +160,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM throw_speed = 0.5 item_state = "cigoff" w_class = WEIGHT_CLASS_TINY - flags_armor_protection = NONE + armor_protection_flags = NONE light_range = 0.1 light_power = 0.1 light_color = LIGHT_COLOR_ORANGE @@ -412,7 +411,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/clothing/mask/cigarette/bica name = "strawberry flavored cigarette" - desc = "Red tipped. Has got a single word stamped on the side: \"(BICARDINE)\"." + desc = "Red tipped. Has got a single word stamped on the side: \"(BICARIDINE)\"." icon_state = "bicacigoff" item_state = "bicacigoff" icon_on = "bicacigon" @@ -562,8 +561,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM light_color = LIGHT_COLOR_FIRE w_class = WEIGHT_CLASS_TINY throwforce = 4 - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT attack_verb = list("burnt", "singed") /obj/item/tool/lighter/zippo diff --git a/code/game/objects/items/tools/hydro_tools.dm b/code/game/objects/items/tools/hydro_tools.dm index 626b23a4e5c38..865651d370630 100644 --- a/code/game/objects/items/tools/hydro_tools.dm +++ b/code/game/objects/items/tools/hydro_tools.dm @@ -6,8 +6,8 @@ /obj/item/tool/plantspray icon = 'icons/obj/items/spray.dmi' item_state = "spray" - flags_item = NOBLUDGEON - flags_equip_slot = ITEM_SLOT_BELT + item_flags = NOBLUDGEON + equip_slot_flags = ITEM_SLOT_BELT throwforce = 4 w_class = WEIGHT_CLASS_SMALL throw_speed = 2 @@ -88,8 +88,8 @@ icon = 'icons/obj/items/weapons.dmi' icon_state = "hoe" item_state = "hoe" - flags_atom = CONDUCT - flags_item = NOBLUDGEON + atom_flags = CONDUCT + item_flags = NOBLUDGEON force = 5 throwforce = 7 w_class = WEIGHT_CLASS_SMALL @@ -104,7 +104,7 @@ desc = "A sharp hand hatchet, commonly used to cut things apart, be it timber or other objects. Often found in the hands of woodsmen, scouts, and looters." icon = 'icons/obj/items/weapons.dmi' icon_state = "hatchet" - flags_atom = CONDUCT + atom_flags = CONDUCT force = 25 w_class = WEIGHT_CLASS_SMALL throwforce = 20 @@ -129,8 +129,8 @@ throw_speed = 1 throw_range = 3 w_class = WEIGHT_CLASS_BULKY - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BACK + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BACK attack_verb = list("chopped", "sliced", "cut", "reaped") /obj/item/tool/scythe/afterattack(atom/A, mob/user as mob, proximity) diff --git a/code/game/objects/items/tools/kitchen_tools.dm b/code/game/objects/items/tools/kitchen_tools.dm index d13bfea7b9b59..5a1f5dcb4e2b9 100644 --- a/code/game/objects/items/tools/kitchen_tools.dm +++ b/code/game/objects/items/tools/kitchen_tools.dm @@ -26,7 +26,7 @@ throwforce = 5 throw_speed = 3 throw_range = 5 - flags_atom = CONDUCT + atom_flags = CONDUCT attack_verb = list("attacked", "stabbed", "poked") sharp = 0 var/loaded //Descriptive string for currently loaded food object. @@ -60,10 +60,10 @@ else ..() -/obj/item/tool/kitchen/utensil/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) +/obj/item/tool/kitchen/utensil/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) if(!CONFIG_GET(flag/fun_allowed)) return FALSE - attack_hand(X) + attack_hand(xeno_attacker) /obj/item/tool/kitchen/utensil/fork name = "fork" @@ -123,7 +123,7 @@ name = "kitchen knife" icon_state = "knife" desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come." - flags_atom = CONDUCT + atom_flags = CONDUCT sharp = IS_SHARP_ITEM_ACCURATE edge = 1 force = 10 @@ -152,7 +152,7 @@ name = "butcher's cleaver" icon_state = "butch" desc = "A huge thing used for chopping and chopping up meat. This includes clowns and clown-by-products." - flags_atom = CONDUCT + atom_flags = CONDUCT force = 15 w_class = WEIGHT_CLASS_SMALL throwforce = 8 @@ -195,7 +195,7 @@ throw_speed = 1 throw_range = 5 w_class = WEIGHT_CLASS_NORMAL - flags_atom = CONDUCT + atom_flags = CONDUCT /* // NOPE var/food_total= 0 var/burger_amt = 0 @@ -260,7 +260,7 @@ - if(ishuman(M) && ((H.head && (H.head.flags_inventory & COVEREYES) ) || (H.wear_mask && (H.wear_mask.flags_inventory & COVEREYES) ) || (H.glasses && (H.glasses.flags_inventory & COVEREYES) ))) + if(ishuman(M) && ((H.head && (H.head.inventory_flags & COVEREYES) ) || (H.wear_mask && (H.wear_mask.inventory_flags & COVEREYES) ) || (H.glasses && (H.glasses.inventory_flags & COVEREYES) ))) to_chat(M, span_warning("You get slammed in the face with the tray, against your mask!")) if(prob(33)) src.add_mob_blood(H) @@ -317,6 +317,8 @@ /obj/item/tool/kitchen/tray/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tool/kitchen/rollingpin)) if(cooldown < world.time - 25) diff --git a/code/game/objects/items/tools/maintenance_tools.dm b/code/game/objects/items/tools/maintenance_tools.dm index 940466d749b25..e522e151cc136 100644 --- a/code/game/objects/items/tools/maintenance_tools.dm +++ b/code/game/objects/items/tools/maintenance_tools.dm @@ -2,8 +2,8 @@ name = "wrench" desc = "A wrench with many common uses. Can be usually found in your hand." icon_state = "wrench" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT force = 5 throwforce = 7 w_class = WEIGHT_CLASS_SMALL @@ -16,8 +16,8 @@ name = "screwdriver" desc = "You can be totally screwwy with this." icon_state = "screwdriver_map" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT force = 5 w_class = WEIGHT_CLASS_TINY throwforce = 5 @@ -65,8 +65,8 @@ name = "wirecutters" desc = "This cuts wires." icon_state = "cutters" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT force = 6 throw_speed = 2 throw_range = 9 @@ -99,8 +99,8 @@ name = "blowtorch" desc = "Used for welding and repairing various things." icon_state = "welder" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT //Amount of OUCH when it's thrown force = 3 @@ -179,6 +179,8 @@ /obj/item/tool/weldingtool/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tool/screwdriver)) flamethrower_screwdriver(src, user) @@ -330,8 +332,8 @@ name = "crowbar" desc = "Used to remove floors and to pry open doors." icon_state = "crowbar" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT force = 5 throwforce = 7 item_state = "crowbar" @@ -351,7 +353,7 @@ /obj/item/tool/weldpack name = "Welding kit" desc = "A heavy-duty, portable fuel carrier. Welder and flamer compatible." - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK icon = 'icons/obj/items/tank.dmi' icon_state = "welderpack" w_class = WEIGHT_CLASS_BULKY @@ -366,6 +368,8 @@ /obj/item/tool/weldpack/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(reagents.total_volume == 0) balloon_alert(user, "Out of fuel") return @@ -447,7 +451,7 @@ /obj/item/tool/weldpack/marinestandard name = "M-22 welding kit" desc = "A heavy-duty, portable fuel carrier. Mainly used in flamethrowers. Welder and flamer compatible." - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK icon_state = "marine_flamerpack" w_class = WEIGHT_CLASS_BULKY max_fuel = 500 //Because the marine backpack can carry 260, and still allows you to take items, there should be a reason to still use this one. @@ -456,14 +460,14 @@ name = "handheld charger" desc = "A hand-held, lightweight cell charger. It isn't going to give you tons of power, but it can help in a pinch." icon = 'icons/obj/items/tools.dmi' - icon_state = "handheldcharger_black_empty" + icon_state = "handheldcharger_black" item_state = "handheldcharger_black_empty" w_class = WEIGHT_CLASS_SMALL - flags_atom = CONDUCT + atom_flags = CONDUCT force = 6 throw_speed = 2 throw_range = 9 - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT /// This is the cell we ar charging var/obj/item/cell/cell ///Are we currently recharging something. @@ -471,7 +475,14 @@ /obj/item/tool/handheld_charger/Initialize(mapload) . = ..() - cell = null + update_icon() + +/obj/item/tool/handheld_charger/update_icon_state() + . = ..() + if(cell) + icon_state = initial(icon_state) + else + icon_state = initial(icon_state) + "_empty" /obj/item/tool/handheld_charger/attack_self(mob/user) if(!cell) @@ -499,6 +510,8 @@ /obj/item/tool/handheld_charger/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!istype(I, /obj/item/cell)) return @@ -528,7 +541,7 @@ cell = null playsound(user, 'sound/machines/click.ogg', 20, 1, 5) balloon_alert(user, "Removes the cell") - icon_state = "handheldcharger_black_empty" + update_appearance() /obj/item/tool/handheld_charger/attack_hand(mob/living/user) if(user.get_inactive_held_item() != src) @@ -540,8 +553,12 @@ cell = null playsound(user, 'sound/machines/click.ogg', 20, 1, 5) balloon_alert(user, "Removes the cell") - icon_state = "handheldcharger_black_empty" + update_appearance() /obj/item/tool/handheld_charger/Destroy() QDEL_NULL(cell) return ..() + +/obj/item/tool/handheld_charger/hicapcell/Initialize(mapload) + cell = new /obj/item/cell/high(src) + return ..() diff --git a/code/game/objects/items/tools/mining_tools.dm b/code/game/objects/items/tools/mining_tools.dm index 8570dabd3d962..25ab6d4f44689 100644 --- a/code/game/objects/items/tools/mining_tools.dm +++ b/code/game/objects/items/tools/mining_tools.dm @@ -7,8 +7,8 @@ name = "pickaxe" icon = 'icons/obj/mining.dmi' icon_state = "pickaxe" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT force = 15 throwforce = 4 item_state = "pickaxe" @@ -86,7 +86,7 @@ icon_state = "plasma_cutter_off" item_state = "plasmacutter" w_class = WEIGHT_CLASS_BULKY - flags_equip_slot = ITEM_SLOT_BELT|ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BELT|ITEM_SLOT_BACK force = 70 damtype = BURN digspeed = 20 //Can slice though normal walls, all girders, or be used in reinforced wall deconstruction @@ -166,7 +166,6 @@ spark_system.attach(source) spark_system.start(source) if(!no_string) - balloon_alert(user, "Cutting...") if(custom_string) to_chat(user, span_notice(custom_string)) else @@ -185,8 +184,6 @@ balloon_alert(user, "Charge Remaining: [cell.charge]/[cell.maxcharge]") if(custom_string) to_chat(user, span_notice(custom_string)) - else - balloon_alert(user, "Cuts apart") /obj/item/tool/pickaxe/plasmacutter/proc/debris(location, metal = 0, rods = 0, wood = 0, wires = 0, shards = 0, plasteel = 0) if(metal) @@ -290,7 +287,8 @@ if(!ST.slayer) return ST.slayer = max(0 , ST.slayer - dirt_amt_per_dig) - ST.update_icon(1,0) + ST.update_appearance() + ST.update_sides() cut_apart(user, target.name, target, 0, "You melt the snow with [src]. ") //costs nothing diff --git a/code/game/objects/items/tools/misc_tools.dm b/code/game/objects/items/tools/misc_tools.dm index b9b8df77ce62d..aefa38d499ad3 100644 --- a/code/game/objects/items/tools/misc_tools.dm +++ b/code/game/objects/items/tools/misc_tools.dm @@ -55,6 +55,8 @@ /obj/item/tool/hand_labeler/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/paper)) to_chat(user, span_notice("You insert [I] into [src].")) qdel(I) @@ -80,7 +82,7 @@ slot_r_hand_str = 'icons/mob/inhands/items/civilian_right.dmi', ) item_state = "pen" - flags_equip_slot = ITEM_SLOT_BELT|ITEM_SLOT_EARS + equip_slot_flags = ITEM_SLOT_BELT|ITEM_SLOT_EARS w_class = WEIGHT_CLASS_TINY throw_speed = 7 throw_range = 15 @@ -117,7 +119,7 @@ */ /obj/item/tool/pen/sleepypen desc = "It's a black ink pen with a sharp point and a carefully engraved \"Waffle Co.\"" - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT /obj/item/tool/pen/sleepypen/Initialize(mapload) @@ -139,7 +141,7 @@ * Parapens */ /obj/item/tool/pen/paralysis - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT /obj/item/tool/pen/paralysis/attack(mob/living/M as mob, mob/user as mob) diff --git a/code/game/objects/items/tools/policetape.dm b/code/game/objects/items/tools/policetape.dm index f861a0503532e..1eef67cea2f58 100644 --- a/code/game/objects/items/tools/policetape.dm +++ b/code/game/objects/items/tools/policetape.dm @@ -3,7 +3,7 @@ name = "tape roll" icon = 'icons/obj/policetape.dmi' icon_state = "rollstart" - flags_item = NOBLUDGEON + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_SMALL var/turf/start var/turf/end diff --git a/code/game/objects/items/tools/research_tools.dm b/code/game/objects/items/tools/research_tools.dm index dc485e36c7b49..7d86d8682a41a 100644 --- a/code/game/objects/items/tools/research_tools.dm +++ b/code/game/objects/items/tools/research_tools.dm @@ -5,68 +5,11 @@ ///Skill level needed to use the tool var/skill_threshold = SKILL_MEDICAL_EXPERT -#define RESEARCH_DELAY 2 SECONDS - /obj/item/tool/research/xeno_analyzer - name = "xenomorph analyzer" - desc = "A tool for analyzing xenomorphs for research material. Just click on a xenomorph. Can be used to befriend Newt." - icon = 'icons/obj/items/surgery_tools.dmi' - icon_state = "predator_bonesaw" - ///List of rewards for each xeno tier - var/static/list/xeno_tier_rewards = list( - XENO_TIER_ZERO = list( - /obj/item/research_resource/xeno/tier_one, - ), - XENO_TIER_ONE = list( - /obj/item/research_resource/xeno/tier_one, - ), - XENO_TIER_TWO = list( - /obj/item/research_resource/xeno/tier_two, - ), - XENO_TIER_THREE = list( - /obj/item/research_resource/xeno/tier_three, - ), - XENO_TIER_FOUR = list( - /obj/item/research_resource/xeno/tier_four, - ), - ) - -/obj/item/tool/research/xeno_analyzer/attack(mob/living/M, mob/living/user) - if(!isxeno(M)) - return ..() - - var/mob/living/carbon/xenomorph/target_xeno = M - - var/list/xeno_rewards = xeno_tier_rewards[target_xeno.tier] - if(!xeno_rewards) - balloon_alert(user, "Can't research") - return ..() - - if(HAS_TRAIT(target_xeno, TRAIT_RESEARCHED)) - balloon_alert(user, "Already probed") - return ..() - - if(user.skills.getRating(SKILL_MEDICAL) < SKILL_MEDICAL_EXPERT) - user.balloon_alert_to_viewers("Tries to find weak point on [target_xeno]") - var/fumbling_time = 15 SECONDS - 2 SECONDS * user.skills.getRating(SKILL_MEDICAL) - if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED)) - return ..() - user.balloon_alert_to_viewers("Begins cutting [target_xeno]") - if(!do_after(user, 5 SECONDS, NONE, src, BUSY_ICON_FRIENDLY)) - return ..() - - if(HAS_TRAIT(target_xeno, TRAIT_RESEARCHED)) - balloon_alert(user, "Already probed") - return ..() - - var/reward_typepath = pick(xeno_rewards) - var/obj/reward = new reward_typepath - reward.forceMove(get_turf(user)) - ADD_TRAIT(target_xeno, TRAIT_RESEARCHED, TRAIT_RESEARCHED) - - return ..() - -#undef RESEARCH_DELAY + name = "xenolinguistic analyzer" + desc = "A tool translating communications with some alien species. Can be used to befriend Newt." + icon = 'icons/obj/items/implants.dmi' + icon_state = "implantcase-b" /obj/item/tool/research/excavation_tool name = "subterrain scanner and excavator" diff --git a/code/game/objects/items/tools/shovel_tools.dm b/code/game/objects/items/tools/shovel_tools.dm index bb2dd145ca413..e9dddcdfa60c3 100644 --- a/code/game/objects/items/tools/shovel_tools.dm +++ b/code/game/objects/items/tools/shovel_tools.dm @@ -6,8 +6,8 @@ icon = 'icons/obj/items/tools.dmi' icon_state = "shovel" item_state = "shovel" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT force = 8 throwforce = 4 w_class = WEIGHT_CLASS_NORMAL @@ -85,7 +85,8 @@ if(!ST.slayer) return ST.slayer -= 1 - ST.update_icon(1,0) + ST.update_appearance() + ST.update_sides() balloon_alert(user, "Digs up snow") else balloon_alert(user, "Digs up dirt") @@ -151,7 +152,7 @@ else icon_state = "etool_c" item_state = "etool_c" - ..() + return ..() /obj/item/tool/shovel/etool/attack_self(mob/user as mob) if(sharp) diff --git a/code/game/objects/items/tools/surgery_tools.dm b/code/game/objects/items/tools/surgery_tools.dm index cc64c17e62f83..005e5e468e638 100644 --- a/code/game/objects/items/tools/surgery_tools.dm +++ b/code/game/objects/items/tools/surgery_tools.dm @@ -11,14 +11,14 @@ name = "retractor" desc = "Retracts stuff." icon_state = "retractor" - flags_atom = CONDUCT + atom_flags = CONDUCT w_class = WEIGHT_CLASS_SMALL /obj/item/tool/surgery/hemostat name = "hemostat" desc = "You think you have seen this before." icon_state = "hemostat" - flags_atom = CONDUCT + atom_flags = CONDUCT w_class = WEIGHT_CLASS_SMALL attack_verb = list("attacked", "pinched") @@ -26,7 +26,7 @@ name = "cautery" desc = "This stops bleeding." icon_state = "cautery" - flags_atom = CONDUCT + atom_flags = CONDUCT w_class = WEIGHT_CLASS_TINY attack_verb = list("burnt") @@ -35,7 +35,7 @@ desc = "You can drill using this item. You dig?" icon_state = "drill" hitsound = 'sound/weapons/circsawhit.ogg' - flags_atom = CONDUCT + atom_flags = CONDUCT force = 15 w_class = WEIGHT_CLASS_SMALL attack_verb = list("drilled") @@ -48,7 +48,7 @@ name = "scalpel" desc = "Cut, cut, and once more cut." icon_state = "scalpel" - flags_atom = CONDUCT + atom_flags = CONDUCT force = 10 sharp = IS_SHARP_ITEM_ACCURATE edge = 1 @@ -88,7 +88,7 @@ desc = "For heavy duty cutting." icon_state = "saw" hitsound = 'sound/weapons/circsawhit.ogg' - flags_atom = CONDUCT + atom_flags = CONDUCT force = 15 w_class = WEIGHT_CLASS_SMALL throwforce = 9 diff --git a/code/game/objects/items/toys/cards.dm b/code/game/objects/items/toys/cards.dm index b4aeeeb525ccc..dfbcd78b4472c 100644 --- a/code/game/objects/items/toys/cards.dm +++ b/code/game/objects/items/toys/cards.dm @@ -32,6 +32,8 @@ /obj/item/toy/deck/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/toy/handcard)) var/obj/item/toy/handcard/H = I @@ -42,6 +44,7 @@ to_chat(user, "You place your cards on the bottom of the deck.") /obj/item/toy/deck/update_icon_state() + . = ..() switch(length(cards)) if(52) icon_state = "deck" @@ -136,14 +139,9 @@ user.visible_message("\The [user] deals a card to \the [target].") H.throw_at(get_step(target,target.dir),10,1,H) -/obj/item/toy/deck/attack_self(mob/user as mob) - - var/list/newcards = list() - while(length(cards)) - var/datum/playingcard/P = pick(cards) - newcards += P - cards -= P - cards = newcards +/obj/item/toy/deck/attack_self(mob/user) + . = ..() + shuffle_inplace(cards) user.visible_message("\The [user] shuffles [src].") /obj/item/toy/deck/MouseDrop(atom/over) @@ -167,6 +165,8 @@ var/concealed = 0 var/list/cards = list() + ///The last direction the person who dropped us was facing + var/last_direction = SOUTH /obj/item/toy/handcard/Initialize(mapload, card_type) . = ..() @@ -178,6 +178,8 @@ /obj/item/toy/handcard/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/toy/handcard)) var/obj/item/toy/handcard/H = I @@ -250,16 +252,22 @@ for(var/datum/playingcard/P in cards) . += "-[P.name]" -/obj/item/toy/handcard/update_icon(direction = 0) +/obj/item/toy/handcard/update_name(updates) + . = ..() if(length(cards) > 1) name = "hand of cards" - desc = "Some playing cards." else name = "a playing card" - desc = "A playing card." - overlays.Cut() +/obj/item/toy/handcard/update_desc(updates) + . = ..() + if(length(cards) > 1) + desc = "Some playing cards." + else + desc = "A playing card." +/obj/item/toy/handcard/update_overlays() + . = ..() if(!length(cards)) return @@ -268,14 +276,14 @@ var/image/I = new(src.icon, (concealed ? "card_back" : "[P.card_icon]") ) I.pixel_x += (-5+rand(10)) I.pixel_y += (-5+rand(10)) - overlays += I + . += I return var/offset = FLOOR(20/length(cards), 1) var/matrix/M = matrix() - if(direction) - switch(direction) + if(last_direction) + switch(last_direction) if(NORTH) M.Translate( 0, 0) if(SOUTH) @@ -290,7 +298,7 @@ for(var/datum/playingcard/P in cards) var/image/I = new(src.icon, (concealed ? "card_back" : "[P.card_icon]") ) //I.pixel_x = origin+(offset*i) - switch(direction) + switch(last_direction) if(SOUTH) I.pixel_x = 8-(offset*i) if(WEST) @@ -300,15 +308,14 @@ else I.pixel_x = -7+(offset*i) I.transform = M - overlays += I + . += I i++ /obj/item/toy/handcard/dropped(mob/user as mob) - ..() + . = ..() if(locate(/obj/structure/table, loc)) - src.update_icon(user.dir) - else - update_icon() + last_direction = user.dir + update_icon() /obj/item/toy/handcard/pickup(mob/user as mob) src.update_icon() @@ -357,12 +364,34 @@ P.card_icon = "Wildcard" cards += P for(var/k in 0 to 3) + P = new() P.name= "Draw 4" P.card_icon = "Draw 4" cards += P /obj/item/toy/deck/kotahi/update_icon_state() + . = ..() switch(length(cards)) - if(107 to 108) icon_state = "deck" - if(37 to 106) icon_state = "deck_open" - if(0 to 36) icon_state = "deck_empty" + if(107 to 108) + icon_state = "deck" + if(37 to 106) + icon_state = "deck_open" + if(0 to 36) + icon_state = "deck_empty" + +// purely cosmetic for helmet stuff, can't be stacked with normal cards +/obj/item/toy/card/ace/hearts + name = "Ancient Ace of Hearts card" + desc = "An ancient copy of an Ace of Hearts from a deck of playing cards." + icon = 'icons/obj/items/items.dmi' + icon_state = "ace_of_hearts" + item_state = "ace_of_hearts" + w_class = WEIGHT_CLASS_TINY + +/obj/item/toy/card/ace/spades + name = "Ancient Ace of Spades card" + desc = "An ancient copy of an Ace of Spades from a deck of playing cards." + icon = 'icons/obj/items/items.dmi' + icon_state = "ace_of_spades" + item_state = "ace_of_spades" + w_class = WEIGHT_CLASS_TINY diff --git a/code/game/objects/items/toys/toy_weapons.dm b/code/game/objects/items/toys/toy_weapons.dm index 27393f6e8f0a7..628a81998a4a7 100644 --- a/code/game/objects/items/toys/toy_weapons.dm +++ b/code/game/objects/items/toys/toy_weapons.dm @@ -14,7 +14,7 @@ desc = "Looks almost like the real thing! Ages 8 and up. Please recycle in an autolathe when you're out of caps!" icon_state = "capgun" item_state = "gun" - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_NORMAL attack_verb = list("struck", "pistol whipped", "hit", "bashed") @@ -66,6 +66,7 @@ var/amount_left = 7 /obj/item/toy/gun_ammo/update_icon_state() + . = ..() if(amount_left) icon_state = "cap_ammo" else @@ -220,8 +221,8 @@ desc = "Woefully underpowered in D20." icon = 'icons/obj/items/weapons.dmi' icon_state = "katana" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT|ITEM_SLOT_BACK + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT|ITEM_SLOT_BACK force = 5 throwforce = 5 w_class = WEIGHT_CLASS_NORMAL diff --git a/code/game/objects/items/toys/toys.dm b/code/game/objects/items/toys/toys.dm index e25b26fdc7f35..c3685440ed322 100755 --- a/code/game/objects/items/toys/toys.dm +++ b/code/game/objects/items/toys/toys.dm @@ -25,10 +25,10 @@ throw_range = 20 force = 0 -/obj/item/toy/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) +/obj/item/toy/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) if(!CONFIG_GET(flag/fun_allowed)) return FALSE - attack_hand(X) + attack_hand(xeno_attacker) /* @@ -61,6 +61,8 @@ /obj/item/toy/balloon/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/reagent_containers/glass)) if(!I.reagents) @@ -96,6 +98,7 @@ QDEL_IN(src, 5) /obj/item/toy/balloon/update_icon_state() + . = ..() if(reagents.total_volume) icon_state = "waterballoon" item_state = "balloon" @@ -362,7 +365,7 @@ icon_state = "inflatable" item_state = "inflatable" icon = 'icons/obj/clothing/belts.dmi' - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT /obj/item/toy/beach_ball @@ -773,28 +776,33 @@ var/side = "" var/id = "" - -/obj/structure/hoop/attackby(obj/item/I, mob/user, params) +/obj/structure/hoop/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) . = ..() + if(.) + return + if(!isliving(grab.grabbed_thing)) + return + if(user.a_intent == INTENT_HARM) + return + var/mob/living/grabbed_mob = grab.grabbed_thing + if(user.grab_state <= GRAB_AGGRESSIVE) + to_chat(user, span_warning("You need a better grip to do that!")) + return - if(istype(I, /obj/item/grab) && get_dist(src, user) <= 1) - var/obj/item/grab/G = I - if(!isliving(G.grabbed_thing)) - return + grabbed_mob.forceMove(loc) + grabbed_mob.Paralyze(4 SECONDS) + for(var/obj/machinery/scoreboard/X in GLOB.machines) + if(X.id == id) + X.score(side, 3)// 3 points for dunking a mob + visible_message(span_danger("[user] dunks [grabbed_mob] into the [src]!")) - var/mob/living/L = G.grabbed_thing - if(user.grab_state < GRAB_AGGRESSIVE) - to_chat(user, span_warning("You need a better grip to do that!")) - return - L.forceMove(loc) - L.Paralyze(10 SECONDS) - for(var/obj/machinery/scoreboard/X in GLOB.machines) - if(X.id == id) - X.score(side, 3)// 3 points for dunking a mob - // no break, to update multiple scoreboards - visible_message(span_danger("[user] dunks [L] into the [src]!")) - else if(get_dist(src, user) < 2) +/obj/structure/hoop/attackby(obj/item/I, mob/user, params) + . = ..() + if(.) + return + + if(get_dist(src, user) < 2) user.transferItemToLoc(I, loc) for(var/obj/machinery/scoreboard/X in GLOB.machines) if(X.id == id) diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index 9d6c8722ff65e..4167ec4a2be05 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -148,9 +148,9 @@ desc = "An empty box from a chunk bar. Significantly less heavy." icon_state = "chunk_trash" -/obj/item/trash/barcardine - name = "barcardine bar wrapper" - desc = "An empty wrapper from a barcardine bar. You notice the inside has several medical labels. You're not sure if you care or not about that." +/obj/item/trash/barcaridine + name = "barcaridine bar wrapper" + desc = "An empty wrapper from a barcaridine bar. You notice the inside has several medical labels. You're not sure if you care or not about that." icon_state = "barcardine_trash" /obj/item/trash/berrybar diff --git a/code/game/objects/items/weapons/blades.dm b/code/game/objects/items/weapons/blades.dm index 0f8fc8d30706d..4b4ca8a9da8a1 100644 --- a/code/game/objects/items/weapons/blades.dm +++ b/code/game/objects/items/weapons/blades.dm @@ -22,23 +22,95 @@ desc = "What are you standing around staring at this for? Get to killing!" icon_state = "claymore" item_state = "claymore" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT force = 40 throwforce = 10 sharp = IS_SHARP_ITEM_BIG edge = 1 w_class = WEIGHT_CLASS_NORMAL attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + hitsound = 'sound/weapons/bladeslice.ogg' + ///Special attack action granted to users with the right trait + var/datum/action/ability/activable/weapon_skill/sword_lunge/special_attack /obj/item/weapon/claymore/Initialize(mapload) . = ..() AddElement(/datum/element/scalping) + special_attack = new(src, force, penetration) + +/obj/item/weapon/claymore/Destroy() + QDEL_NULL(special_attack) + return ..() + +/obj/item/weapon/claymore/equipped(mob/user, slot) + . = ..() + if(HAS_TRAIT(user, TRAIT_SWORD_EXPERT)) + special_attack.give_action(user) + +/obj/item/weapon/claymore/dropped(mob/user) + . = ..() + special_attack.remove_action(user) /obj/item/weapon/claymore/suicide_act(mob/user) user.visible_message(span_danger("[user] is falling on the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.")) return(BRUTELOSS) +//Special attack +/datum/action/ability/activable/weapon_skill/sword_lunge + name = "Lunging strike" + action_icon_state = "sword_lunge" + desc = "A powerful leaping strike. Cannot stun." + ability_cost = 8 + cooldown_duration = 6 SECONDS + keybinding_signals = list( + KEYBINDING_NORMAL = COMSIG_WEAPONABILITY_SWORDLUNGE, + ) + +/datum/action/ability/activable/weapon_skill/sword_lunge/use_ability(atom/A) + var/mob/living/carbon/carbon_owner = owner + + RegisterSignal(carbon_owner, COMSIG_MOVABLE_MOVED, PROC_REF(movement_fx)) + RegisterSignal(carbon_owner, COMSIG_MOVABLE_BUMP, PROC_REF(lunge_impact)) + RegisterSignal(carbon_owner, COMSIG_MOVABLE_POST_THROW, PROC_REF(charge_complete)) + + carbon_owner.visible_message(span_danger("[carbon_owner] charges towards \the [A]!")) + playsound(owner, "sound/effects/alien_tail_swipe2.ogg", 50, 0, 4) + carbon_owner.throw_at(A, 2, 1, carbon_owner) + succeed_activate() + add_cooldown() + +///Create an after image +/datum/action/ability/activable/weapon_skill/sword_lunge/proc/movement_fx() + SIGNAL_HANDLER + new /obj/effect/temp_visual/xenomorph/afterimage(get_turf(owner), owner) + +///Unregisters signals after lunge complete +/datum/action/ability/activable/weapon_skill/sword_lunge/proc/charge_complete() + SIGNAL_HANDLER + UnregisterSignal(owner, list(COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_POST_THROW, COMSIG_MOVABLE_MOVED)) + +///Sig handler for atom impacts during lunge +/datum/action/ability/activable/weapon_skill/sword_lunge/proc/lunge_impact(datum/source, obj/target, speed) + SIGNAL_HANDLER + INVOKE_ASYNC(src, PROC_REF(do_lunge_impact), source, target) + charge_complete() + +///Actual effects of lunge impact +/datum/action/ability/activable/weapon_skill/sword_lunge/proc/do_lunge_impact(datum/source, obj/target) + var/mob/living/carbon/carbon_owner = source + if(!ishuman(target)) + var/obj/obj_victim = target + obj_victim.take_damage(damage, BRUTE, MELEE, TRUE, TRUE, get_dir(obj_victim, carbon_owner), penetration, carbon_owner) + if(!obj_victim.anchored && obj_victim.move_resist < MOVE_FORCE_VERY_STRONG) + obj_victim.knockback(carbon_owner, 1, 2) + else + var/mob/living/carbon/human/human_victim = target + human_victim.apply_damage(damage, BRUTE, BODY_ZONE_CHEST, MELEE, TRUE, TRUE, TRUE, penetration) + human_victim.adjust_stagger(1 SECONDS) + playsound(human_victim, "sound/weapons/wristblades_hit.ogg", 25, 0, 5) + shake_camera(human_victim, 2, 1) + /obj/item/weapon/claymore/mercsword name = "combat sword" desc = "A dusty sword commonly seen in historical museums. Where you got this is a mystery, for sure. Only a mercenary would be nuts enough to carry one of these. Sharpened to deal massive damage." @@ -97,15 +169,11 @@ attack_speed = 10 w_class = WEIGHT_CLASS_BULKY -/obj/item/weapon/claymore/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - playsound(loc, 'sound/weapons/bladeslice.ogg', 25, 1) - return ..() - /obj/item/weapon/katana name = "katana" desc = "A finely made Japanese sword, with a well sharpened blade. The blade has been filed to a molecular edge, and is extremely deadly. Commonly found in the hands of mercenaries and yakuza." icon_state = "katana" - flags_atom = CONDUCT + atom_flags = CONDUCT force = 50 throwforce = 10 sharp = IS_SHARP_ITEM_BIG @@ -164,7 +232,7 @@ icon_state = "combat_knife" item_state = "combat_knife" desc = "A standard survival knife of high quality. You can slide this knife into your boots, and can be field-modified to attach to the end of a rifle with cable coil." - flags_atom = CONDUCT + atom_flags = CONDUCT sharp = IS_SHARP_ITEM_ACCURATE force = 30 w_class = WEIGHT_CLASS_SMALL @@ -217,7 +285,7 @@ icon_state = "karambit" item_state = "karambit" desc = "A small high quality knife with a curved blade, good for slashing and hooking. This one has a mottled red finish." - flags_atom = CONDUCT + atom_flags = CONDUCT sharp = IS_SHARP_ITEM_ACCURATE force = 30 w_class = WEIGHT_CLASS_SMALL @@ -260,7 +328,7 @@ desc="A military knife designed to be thrown at the enemy. Much quieter than a firearm, but requires a steady hand to be used effectively." stack_name = "pile" singular_name = "knife" - flags_atom = CONDUCT|DIRLOCK + atom_flags = CONDUCT|DIRLOCK sharp = IS_SHARP_ITEM_ACCURATE force = 20 w_class = WEIGHT_CLASS_TINY @@ -269,7 +337,7 @@ throw_range = 7 hitsound = 'sound/weapons/slash.ogg' attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - flags_equip_slot = ITEM_SLOT_POCKET + equip_slot_flags = ITEM_SLOT_POCKET max_amount = 5 amount = 5 @@ -285,13 +353,9 @@ RegisterSignal(src, COMSIG_MOVABLE_POST_THROW, PROC_REF(post_throw)) AddComponent(/datum/component/automatedfire/autofire, throw_delay, _fire_mode = GUN_FIREMODE_AUTOMATIC, _callback_reset_fire = CALLBACK(src, PROC_REF(stop_fire)), _callback_fire = CALLBACK(src, PROC_REF(throw_knife))) -/obj/item/stack/throwing_knife/update_icon() +/obj/item/stack/throwing_knife/update_icon_state() . = ..() - var/amount_to_show = amount > max_amount ? max_amount : amount - if(amount_to_show > 8) - setDir(8) - return - setDir(amount_to_show + round(amount_to_show / 3)) + icon_state = "throwing_knife_[amount]" /obj/item/stack/throwing_knife/equipped(mob/user, slot) . = ..() diff --git a/code/game/objects/items/weapons/energy.dm b/code/game/objects/items/weapons/energy.dm index a7faf3b092115..0b1dd7cbe2469 100644 --- a/code/game/objects/items/weapons/energy.dm +++ b/code/game/objects/items/weapons/energy.dm @@ -1,5 +1,5 @@ /obj/item/weapon/energy - flags_atom = NOBLOODY + atom_flags = NOBLOODY /obj/item/weapon/energy/suicide_act(mob/user) user.visible_message(pick(span_danger("[user] is slitting [user.p_their()] stomach open with the [name]! It looks like [user.p_theyre()] trying to commit seppuku."), \ @@ -17,7 +17,7 @@ throw_speed = 1 throw_range = 5 w_class = WEIGHT_CLASS_NORMAL - flags_atom = CONDUCT|NOBLOODY + atom_flags = CONDUCT|NOBLOODY attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") sharp = IS_SHARP_ITEM_BIG edge = 1 @@ -52,23 +52,33 @@ throw_speed = 1 throw_range = 5 w_class = WEIGHT_CLASS_SMALL - flags_atom = NOBLOODY + atom_flags = NOBLOODY attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") sharp = IS_SHARP_ITEM_BIG edge = 1 - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT ///Sword color, if applicable var/sword_color ///Force of the weapon when activated var/active_force = 40 + ///Penetration when activated + var/active_penetration = 30 + ///Special attack action granted to users with the right trait + var/datum/action/ability/activable/weapon_skill/sword_lunge/special_attack /obj/item/weapon/energy/sword/Initialize(mapload) . = ..() if(!sword_color) sword_color = pick("red","blue","green","purple") - AddComponent(/datum/component/shield, SHIELD_TOGGLE|SHIELD_PURE_BLOCKING, shield_cover = list(MELEE = 35, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0)) + AddComponent(/datum/component/shield, SHIELD_TOGGLE|SHIELD_PURE_BLOCKING, list(MELEE = 35, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0)) AddComponent(/datum/component/stun_mitigation, shield_cover = list(MELEE = 40, BULLET = 40, LASER = 40, ENERGY = 40, BOMB = 40, BIO = 40, FIRE = 40, ACID = 40)) AddElement(/datum/element/strappable) + AddElement(/datum/element/scalping) + special_attack = new(src, active_force, active_penetration) + +/obj/item/weapon/energy/sword/Destroy() + QDEL_NULL(special_attack) + return ..() /obj/item/weapon/energy/sword/attack_self(mob/living/user) switch_state(src, user) @@ -84,27 +94,30 @@ SIGNAL_HANDLER toggle_active() if(active) + RegisterSignals(src, list(COMSIG_ITEM_EQUIPPED_TO_SLOT, COMSIG_ITEM_EQUIPPED_NOT_IN_SLOT, COMSIG_ITEM_UNEQUIPPED), PROC_REF(switch_state)) toggle_item_bump_attack(user, TRUE) hitsound = 'sound/weapons/blade1.ogg' force = active_force throwforce = active_force - penetration = 30 + penetration = active_penetration heat = 3500 icon_state = "[initial(icon_state)]_[sword_color]" w_class = WEIGHT_CLASS_BULKY playsound(src, 'sound/weapons/saberon.ogg', 25, 1) - RegisterSignals(src, list(COMSIG_ITEM_EQUIPPED_TO_SLOT, COMSIG_ITEM_EQUIPPED_NOT_IN_SLOT, COMSIG_ITEM_UNEQUIPPED), PROC_REF(switch_state)) + if(HAS_TRAIT(user, TRAIT_SWORD_EXPERT)) + special_attack.give_action(user) else + UnregisterSignal(src, list(COMSIG_ITEM_EQUIPPED_TO_SLOT, COMSIG_ITEM_EQUIPPED_NOT_IN_SLOT, COMSIG_ITEM_UNEQUIPPED)) toggle_item_bump_attack(user, FALSE) hitsound = initial(hitsound) force = initial(force) throwforce = initial(throwforce) - penetration = 0 + penetration = initial(penetration) heat = 0 icon_state = "[initial(icon_state)]" w_class = WEIGHT_CLASS_SMALL playsound(src, 'sound/weapons/saberoff.ogg', 25, 1) - UnregisterSignal(src, list(COMSIG_ITEM_EQUIPPED_TO_SLOT, COMSIG_ITEM_EQUIPPED_NOT_IN_SLOT, COMSIG_ITEM_UNEQUIPPED)) + special_attack.remove_action(user) /obj/item/weapon/energy/sword/pirate name = "energy cutlass" diff --git a/code/game/objects/items/weapons/holo_weapons.dm b/code/game/objects/items/weapons/holo_weapons.dm index 597c3466a19f5..a1d153935c345 100644 --- a/code/game/objects/items/weapons/holo_weapons.dm +++ b/code/game/objects/items/weapons/holo_weapons.dm @@ -11,7 +11,7 @@ throw_speed = 1 throw_range = 5 w_class = WEIGHT_CLASS_SMALL - flags_item = NOBLUDGEON + item_flags = NOBLUDGEON var/sword_color diff --git a/code/game/objects/items/weapons/misc.dm b/code/game/objects/items/weapons/misc.dm index 369b4692e140f..80a298c491957 100644 --- a/code/game/objects/items/weapons/misc.dm +++ b/code/game/objects/items/weapons/misc.dm @@ -3,8 +3,8 @@ desc = "A tool used by great men to placate the frothing masses." icon_state = "chain" item_state = "chain" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT force = 10 throwforce = 7 w_class = WEIGHT_CLASS_NORMAL @@ -20,7 +20,7 @@ icon = 'icons/obj/items/weapons.dmi' icon_state = "cane" item_state = "cane" - flags_atom = CONDUCT + atom_flags = CONDUCT force = 5 throwforce = 7 w_class = WEIGHT_CLASS_SMALL @@ -50,7 +50,7 @@ desc = "A metal gauntlet with a energy-powered fist to throw back enemies. Altclick to clamp it around your hand, use it to change power settings and click with an empty off-hand or right click to pop out the cell." icon_state = "powerfist" item_state = "powerfist" - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT force = 10 attack_verb = list("smashed", "rammed", "power-fisted") var/obj/item/cell/cell @@ -188,5 +188,5 @@ attack_verb = list("smacked", "whacked", "bonked", "pelted", "thwacked", "cracked") hitsound = 'sound/weapons/heavyhit.ogg' singular_name = "stone" - flags_atom = DIRLOCK + atom_flags = DIRLOCK sharp = IS_NOT_SHARP_ITEM diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index e50a9dd5bbd6b..f663ad2b3f060 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -10,7 +10,7 @@ set_shield() /obj/item/weapon/shield/proc/set_shield() - AddComponent(/datum/component/shield, SHIELD_PARENT_INTEGRITY, shield_cover = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 80, BIO = 30, FIRE = 50, ACID = 80)) + AddComponent(/datum/component/shield, SHIELD_PARENT_INTEGRITY, list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 80, BIO = 30, FIRE = 50, ACID = 80)) AddComponent(/datum/component/stun_mitigation) /obj/item/weapon/shield/riot @@ -19,8 +19,8 @@ icon = 'icons/obj/items/weapons.dmi' icon_state = "riot" max_integrity = 200 - flags_item = IMPEDE_JETPACK - flags_equip_slot = ITEM_SLOT_BACK + item_flags = IMPEDE_JETPACK + equip_slot_flags = ITEM_SLOT_BACK force = 5 throwforce = 5 throw_speed = 1 @@ -53,6 +53,8 @@ /obj/item/weapon/shield/riot/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/stack/sheet/metal)) var/obj/item/stack/sheet/metal/metal_sheets = I @@ -91,7 +93,7 @@ desc = "A heavy shield adept at blocking blunt or sharp objects from connecting with the shield wielder. Looks very robust. Alt click to tighten the strap." icon = 'icons/obj/items/weapons.dmi' icon_state = "marine_shield" - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK max_integrity = 400 integrity_failure = 100 soft_armor = list(MELEE = 40, BULLET = 50, LASER = 20, ENERGY = 70, BOMB = 15, BIO = 50, FIRE = 0, ACID = 30) @@ -104,6 +106,7 @@ AddElement(/datum/element/strappable) /obj/item/weapon/shield/riot/marine/update_icon_state() + . = ..() if(obj_integrity <= integrity_failure) icon_state = initial(icon_state) + "_broken" else @@ -137,13 +140,13 @@ desc = "A compact shield adept at blocking blunt or sharp objects from connecting with the shield wielder. Can be deployed as a barricade. Alt click to tighten the strap." icon = 'icons/obj/items/weapons.dmi' icon_state = "folding_shield" - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_NORMAL max_integrity = 300 integrity_failure = 50 soft_armor = list(MELEE = 35, BULLET = 30, LASER = 20, ENERGY = 40, BOMB = 25, BIO = 50, FIRE = 0, ACID = 30) slowdown = 0.3 - flags_item = IS_DEPLOYABLE + item_flags = IS_DEPLOYABLE ///The item this deploys into var/deployable_item = /obj/structure/barricade/metal/deployable ///Time to deploy @@ -158,14 +161,14 @@ AddComponent(/datum/component/deployable_item, deployable_item, deploy_time, undeploy_time) /obj/item/weapon/shield/riot/marine/deployable/set_shield() - AddComponent(/datum/component/shield, SHIELD_PARENT_INTEGRITY, shield_cover = list(MELEE = 40, BULLET = 35, LASER = 35, ENERGY = 35, BOMB = 40, BIO = 15, FIRE = 30, ACID = 35)) + AddComponent(/datum/component/shield, SHIELD_PARENT_INTEGRITY, list(MELEE = 40, BULLET = 35, LASER = 35, ENERGY = 35, BOMB = 40, BIO = 15, FIRE = 30, ACID = 35)) /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/items/weapons.dmi' icon_state = "eshield0" // eshield1 for expanded - flags_atom = CONDUCT|NOBLOODY + atom_flags = CONDUCT|NOBLOODY force = 3 throwforce = 5 throw_speed = 1 diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 5c264d6b0966f..62855da1d467a 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -3,7 +3,7 @@ desc = "A stun baton for incapacitating people with." icon_state = "stunbaton" item_state = "baton" - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT force = 15 sharp = 0 edge = 0 @@ -38,6 +38,7 @@ return 0 /obj/item/weapon/baton/update_icon_state() + . = ..() if(status) icon_state = "[initial(name)]_active" else if(!bcell) @@ -84,6 +85,8 @@ /obj/item/weapon/baton/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/cell)) if(bcell) @@ -200,7 +203,7 @@ agonyforce = 60 //same force as a stunbaton, but uses way more charge. hitcost = 2500 attack_verb = list("poked") - flags_equip_slot = NONE + equip_slot_flags = NONE has_user_lock = FALSE @@ -209,7 +212,7 @@ desc = "A specialised prod designed for incapacitating xenomorphic lifeforms with." icon_state = "stunbaton" item_state = "baton" - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT force = 12 throwforce = 7 w_class = WEIGHT_CLASS_NORMAL @@ -223,6 +226,7 @@ /obj/item/weapon/stunprod/update_icon_state() + . = ..() if(status) icon_state = "stunbaton_active" else diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index 3eaa6733a30e4..463d06d476a8e 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -22,7 +22,7 @@ icon = 'icons/obj/items/weapons.dmi' icon_state = "baton" item_state = "classic_baton" - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT force = 10 /obj/item/weapon/classic_baton/attack(mob/living/M, mob/living/user) @@ -40,7 +40,7 @@ icon = 'icons/obj/items/weapons.dmi' icon_state = "telebaton_0" item_state = "telebaton_0" - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_SMALL force = 3 var/on = 0 diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 89bb9d67d447c..db3090941c70f 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -6,7 +6,7 @@ var/force_wielded = 0 var/wieldsound var/unwieldsound - flags_item = TWOHANDED + item_flags = TWOHANDED /obj/item/weapon/twohanded/mob_can_equip(mob/user, slot, warning = TRUE, override_nodrop = FALSE, bitslot = FALSE) unwield(user) @@ -24,7 +24,7 @@ /obj/item/proc/wield(mob/user) - if(!(flags_item & TWOHANDED) || flags_item & WIELDED) + if(!(item_flags & TWOHANDED) || item_flags & WIELDED) return FALSE var/obj/item/offhand = user.get_inactive_held_item() @@ -59,7 +59,7 @@ /obj/item/proc/unwield(mob/user) - if(!CHECK_MULTIPLE_BITFIELDS(flags_item, TWOHANDED|WIELDED)) + if(!CHECK_MULTIPLE_BITFIELDS(item_flags, TWOHANDED|WIELDED)) return FALSE toggle_wielded(user, FALSE) @@ -95,9 +95,9 @@ /obj/item/proc/toggle_wielded(user, wielded) if(wielded) - flags_item |= WIELDED + item_flags |= WIELDED else - flags_item &= ~WIELDED + item_flags &= ~WIELDED /obj/item/weapon/twohanded/wield(mob/user) . = ..() @@ -126,7 +126,7 @@ /obj/item/weapon/twohanded/attack_self(mob/user) . = ..() - if(flags_item & WIELDED) + if(item_flags & WIELDED) unwield(user) else wield(user) @@ -137,7 +137,7 @@ w_class = WEIGHT_CLASS_HUGE icon_state = "offhand" name = "offhand" - flags_item = DELONDROP|TWOHANDED|WIELDED + item_flags = DELONDROP|TWOHANDED|WIELDED resistance_flags = RESIST_ALL @@ -178,9 +178,9 @@ sharp = IS_SHARP_ITEM_BIG edge = TRUE w_class = WEIGHT_CLASS_BULKY - flags_equip_slot = ITEM_SLOT_BELT|ITEM_SLOT_BACK - flags_atom = CONDUCT - flags_item = TWOHANDED + equip_slot_flags = ITEM_SLOT_BELT|ITEM_SLOT_BACK + atom_flags = CONDUCT + item_flags = TWOHANDED force_wielded = 75 attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") @@ -213,26 +213,99 @@ force = 40 force_wielded = 80 penetration = 35 - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK attack_speed = 15 + ///Special attack action granted to users with the right trait + var/datum/action/ability/activable/weapon_skill/axe_sweep/special_attack /obj/item/weapon/twohanded/fireaxe/som/Initialize(mapload) . = ..() - AddComponent(/datum/component/shield, SHIELD_TOGGLE|SHIELD_PURE_BLOCKING, shield_cover = list(MELEE = 45, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0)) + AddComponent(/datum/component/shield, SHIELD_TOGGLE|SHIELD_PURE_BLOCKING, list(MELEE = 45, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0)) AddComponent(/datum/component/stun_mitigation, SHIELD_TOGGLE, shield_cover = list(MELEE = 60, BULLET = 60, LASER = 60, ENERGY = 60, BOMB = 60, BIO = 60, FIRE = 60, ACID = 60)) AddElement(/datum/element/strappable) + special_attack = new(src, force_wielded, penetration) + +/obj/item/weapon/twohanded/fireaxe/som/Destroy() + QDEL_NULL(special_attack) + return ..() /obj/item/weapon/twohanded/fireaxe/som/wield(mob/user) . = ..() if(!.) return toggle_item_bump_attack(user, TRUE) + if(HAS_TRAIT(user, TRAIT_AXE_EXPERT)) + special_attack.give_action(user) /obj/item/weapon/twohanded/fireaxe/som/unwield(mob/user) . = ..() if(!.) return toggle_item_bump_attack(user, FALSE) + special_attack.remove_action(user) + +//Special attack +/datum/action/ability/activable/weapon_skill/axe_sweep + name = "Sweeping blow" + action_icon_state = "axe_sweep" + desc = "A powerful sweeping blow that hits foes in the direction you are facing. Cannot stun." + ability_cost = 10 + cooldown_duration = 6 SECONDS + keybinding_signals = list( + KEYBINDING_NORMAL = COMSIG_WEAPONABILITY_AXESWEEP, + ) + /// Used for particles. Holds the particles instead of the mob. See particle_holder for documentation. + var/obj/effect/abstract/particle_holder/particle_holder + +/datum/action/ability/activable/weapon_skill/axe_sweep/use_ability(atom/A) + succeed_activate() + add_cooldown() + var/mob/living/carbon/carbon_owner = owner + carbon_owner.Move(get_step_towards(carbon_owner, A), get_dir(src, A)) + carbon_owner.face_atom(A) + activate_particles(owner.dir) + playsound(owner, "sound/effects/alien_tail_swipe3.ogg", 50, 0, 5) + owner.visible_message(span_danger("[owner] Swing their weapon in a deadly arc!")) + + var/list/atom/movable/atoms_to_ravage = get_step(owner, owner.dir).contents.Copy() + atoms_to_ravage += get_step(owner, turn(owner.dir, -45)).contents + atoms_to_ravage += get_step(owner, turn(owner.dir, 45)).contents + for(var/atom/movable/victim AS in atoms_to_ravage) + if((victim.resistance_flags & INDESTRUCTIBLE)) + continue + if(!ishuman(victim)) + var/obj/obj_victim = victim + obj_victim.take_damage(damage, BRUTE, MELEE, TRUE, TRUE, get_dir(obj_victim, carbon_owner), penetration, carbon_owner) + if(!obj_victim.anchored && obj_victim.move_resist < MOVE_FORCE_VERY_STRONG) + obj_victim.knockback(owner, 1, 2) + continue + var/mob/living/carbon/human/human_victim = victim + if(human_victim.lying_angle) + continue + human_victim.apply_damage(damage, BRUTE, BODY_ZONE_CHEST, MELEE, TRUE, TRUE, TRUE, penetration) + human_victim.knockback(owner, 1, 2) + human_victim.adjust_stagger(1 SECONDS) + playsound(human_victim, "sound/weapons/wristblades_hit.ogg", 25, 0, 5) + shake_camera(human_victim, 2, 1) + +/// Handles the activation and deactivation of particles, as well as their appearance. +/datum/action/ability/activable/weapon_skill/axe_sweep/proc/activate_particles(direction) + particle_holder = new(get_turf(owner), /particles/ravager_slash) + QDEL_NULL_IN(src, particle_holder, 5) + particle_holder.particles.rotation += dir2angle(direction) + switch(direction) // There's no shared logic here because sprites are magical. + if(NORTH) // Gotta define stuff for each angle so it looks good. + particle_holder.particles.position = list(8, 4) + particle_holder.particles.velocity = list(0, 20) + if(EAST) + particle_holder.particles.position = list(3, -8) + particle_holder.particles.velocity = list(20, 0) + if(SOUTH) + particle_holder.particles.position = list(-9, -3) + particle_holder.particles.velocity = list(0, -20) + if(WEST) + particle_holder.particles.position = list(-4, 9) + particle_holder.particles.velocity = list(-20, 0) /* * Double-Bladed Energy Swords - Cheridan @@ -250,7 +323,7 @@ force_wielded = 150 wieldsound = 'sound/weapons/saberon.ogg' unwieldsound = 'sound/weapons/saberoff.ogg' - flags_atom = NOBLOODY + atom_flags = NOBLOODY attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") sharp = IS_SHARP_ITEM_BIG edge = 1 @@ -267,7 +340,7 @@ item_state = "spearglass" force = 40 w_class = WEIGHT_CLASS_BULKY - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK force_wielded = 75 throwforce = 75 throw_speed = 3 @@ -313,7 +386,7 @@ /obj/item/weapon/twohanded/spear/tactical/tacticool name = "M-23 TACTICOOL spear" - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/Marine/spear.dmi' desc = "A TACTICOOL spear. Used for TACTICOOLNESS in combat." /obj/item/weapon/twohanded/spear/tactical/tacticool/Initialize(mapload) @@ -356,24 +429,26 @@ desc = "A huge, powerful blade on a metallic pole. Mysterious writing is carved into the weapon." force = 28 w_class = WEIGHT_CLASS_BULKY - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK force_wielded = 90 throwforce = 65 throw_speed = 3 edge = 1 sharp = IS_SHARP_ITEM_BIG - flags_atom = CONDUCT - hitsound = 'sound/weapons/bladeslice.ogg' + atom_flags = CONDUCT attack_verb = list("sliced", "slashed", "jabbed", "torn", "gored") resistance_flags = UNACIDABLE attack_speed = 12 //Default is 7. +/obj/item/weapon/twohanded/glaive/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + playsound(loc, 'sound/weapons/bladeslice.ogg', 25, 1) + return ..() + /obj/item/weapon/twohanded/glaive/damaged name = "war glaive" desc = "A huge, powerful blade on a metallic pole. Mysterious writing is carved into the weapon. This one is ancient and has suffered serious acid damage, making it near-useless." force = 18 force_wielded = 28 - /obj/item/weapon/twohanded/rocketsledge name = "rocket sledge" desc = "Fitted with a rocket booster at the head, the rocket sledge would deliver a tremendously powerful impact, easily crushing your enemies. Uses fuel to power itself. Press AltClick to tighten your grip. Press Spacebar to change modes." @@ -381,13 +456,13 @@ item_state = "rocketsledge" force = 30 w_class = WEIGHT_CLASS_BULKY - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK force_wielded = 75 throwforce = 50 throw_speed = 2 edge = 1 sharp = IS_SHARP_ITEM_BIG - flags_atom = CONDUCT | TWOHANDED + atom_flags = CONDUCT | TWOHANDED attack_verb = list("smashed", "hammered") attack_speed = 20 @@ -444,7 +519,8 @@ update_icon() /obj/item/weapon/twohanded/rocketsledge/update_icon_state() - if ((reagents.get_reagent_amount(/datum/reagent/fuel) > fuel_used) && (CHECK_BITFIELD(flags_item, WIELDED))) + . = ..() + if ((reagents.get_reagent_amount(/datum/reagent/fuel) > fuel_used) && (CHECK_BITFIELD(item_flags, WIELDED))) icon_state = "rocketsledge_w" else icon_state = "rocketsledge" @@ -482,7 +558,7 @@ playsound(loc, 'sound/machines/switch.ogg', 25) /obj/item/weapon/twohanded/rocketsledge/attack(mob/living/carbon/M, mob/living/carbon/user as mob) - if(!CHECK_BITFIELD(flags_item, WIELDED)) + if(!CHECK_BITFIELD(item_flags, WIELDED)) to_chat(user, span_warning("You need a more secure grip to use [src]!")) return diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index aeddd6d6a4ded..048e34e7ad78f 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -5,7 +5,7 @@ name = "banhammer" icon = 'icons/obj/items/items.dmi' icon_state = "toyhammer" - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_SMALL throw_speed = 7 throw_range = 15 @@ -20,7 +20,7 @@ desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of paranormal phenomenae." icon_state = "nullrod" item_state = "nullrod" - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT force = 15 throw_speed = 1 throw_range = 4 @@ -118,7 +118,7 @@ desc = "A rod with some wire wrapped around the top. It'd be easy to attach something to the top bit." icon_state = "wiredrod" item_state = "rods" - flags_atom = CONDUCT + atom_flags = CONDUCT force = 8 throwforce = 10 w_class = WEIGHT_CLASS_NORMAL @@ -127,6 +127,8 @@ /obj/item/weapon/wirerod/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/shard)) var/obj/item/weapon/twohanded/spear/S = new @@ -135,4 +137,4 @@ to_chat(user, span_notice("You fasten the glass shard to the top of the rod with the cable.")) qdel(I) qdel(src) - update_icon(user) + update_icon() diff --git a/code/game/objects/items/whistle.dm b/code/game/objects/items/whistle.dm index e29e036aca29d..bf26b51a631f8 100644 --- a/code/game/objects/items/whistle.dm +++ b/code/game/objects/items/whistle.dm @@ -4,13 +4,13 @@ desc = "A metal pea-whistle. Can be blown while held, or worn in the mouth" icon_state = "whistle" w_class = WEIGHT_CLASS_TINY - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_MASK + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_MASK actions_types = list(/datum/action/item_action) // RUTGMC ADDITION var/volume = 60 - var/spamcheck = FALSE - + /// The range in tiles which whistle makes people warcry + var/warcryrange = 5 /obj/item/whistle/attack_self(mob/user) . = ..() @@ -19,6 +19,8 @@ /obj/item/whistle/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(user.wear_mask == src) whistle_playsound(user) @@ -33,14 +35,22 @@ /obj/item/whistle/proc/whistle_playsound(mob/user as mob) - if (spamcheck) + if(TIMER_COOLDOWN_CHECK(user, COOLDOWN_WHISTLE_BLOW)) + user.balloon_alert(user, "Catch your breath!") return user.visible_message(span_warning("[user] blows into [src]!")) playsound(get_turf(src), 'sound/items/whistle.ogg', volume, 1) - spamcheck = TRUE - addtimer(VARSET_CALLBACK(src, spamcheck, FALSE), 3 SECONDS) + if(TIMER_COOLDOWN_CHECK(user, COOLDOWN_WHISTLE_WARCRY)) + to_chat(user, span_notice("You have to wait a while to rally your troops...")) + else + TIMER_COOLDOWN_START(user, COOLDOWN_WHISTLE_WARCRY, 1 MINUTES) + for(var/mob/living/carbon/human/human in get_hearers_in_view(warcryrange, user.loc)) + human.emote("warcry", intentional = TRUE) + CHECK_TICK + + TIMER_COOLDOWN_START(user, COOLDOWN_WHISTLE_BLOW, 3 SECONDS) /obj/item/hailer @@ -50,7 +60,7 @@ icon_state = "voice" item_state = "flashbang" //looks exactly like a flash (and nothing like a flashbang) w_class = WEIGHT_CLASS_TINY - flags_atom = CONDUCT + atom_flags = CONDUCT var/spamcheck = FALSE diff --git a/code/game/objects/machinery.dm b/code/game/objects/machinery.dm index 48d31828ec5b4..128167ac8f5a0 100644 --- a/code/game/objects/machinery.dm +++ b/code/game/objects/machinery.dm @@ -30,7 +30,7 @@ component_parts = list() var/turf/current_turf = get_turf(src) if(anchored && current_turf && density) - current_turf.flags_atom |= AI_BLOCKED + current_turf.atom_flags |= AI_BLOCKED /obj/machinery/Destroy() @@ -41,7 +41,7 @@ operator = null var/turf/current_turf = get_turf(src) if(anchored && current_turf && density) - current_turf.flags_atom &= ~ AI_BLOCKED + current_turf.atom_flags &= ~ AI_BLOCKED return ..() /obj/machinery/proc/is_operational() @@ -49,7 +49,7 @@ /obj/machinery/proc/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel = 0, custom_deconstruct = FALSE) - . = !(flags_atom & NODECONSTRUCT) && crowbar.tool_behaviour == TOOL_CROWBAR + . = !(atom_flags & NODECONSTRUCT) && crowbar.tool_behaviour == TOOL_CROWBAR if(!. || custom_deconstruct) return crowbar.play_tool_sound(src, 50) @@ -65,7 +65,7 @@ return TRUE /obj/machinery/deconstruct(disassembled = TRUE) - if(!(flags_atom & NODECONSTRUCT)) + if(!(atom_flags & NODECONSTRUCT)) on_deconstruction() if(length(component_parts)) spawn_frame(disassembled) diff --git a/code/game/objects/machinery/OpTable.dm b/code/game/objects/machinery/OpTable.dm index 025803c3397bd..3920ff5fb5420 100644 --- a/code/game/objects/machinery/OpTable.dm +++ b/code/game/objects/machinery/OpTable.dm @@ -188,6 +188,8 @@ /obj/machinery/optable/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tank/anesthetic)) if(anes_tank) @@ -196,32 +198,33 @@ anes_tank = I to_chat(user, span_notice("You connect \the [anes_tank] to \the [src].")) - if(!istype(I, /obj/item/grab)) +/obj/machinery/optable/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + . = ..() + if(.) return - - var/obj/item/grab/G = I - if(victim && victim != G.grabbed_thing) + if(victim && victim != grab.grabbed_thing) to_chat(user, span_warning("The table is already occupied!")) return - var/mob/living/carbon/M - if(iscarbon(G.grabbed_thing)) - M = G.grabbed_thing - if(M.buckled) + var/mob/living/carbon/grabbed_mob + if(iscarbon(grab.grabbed_thing)) + grabbed_mob = grab.grabbed_thing + if(grabbed_mob.buckled) to_chat(user, span_warning("Unbuckle first!")) return - else if(istype(G.grabbed_thing, /obj/structure/closet/bodybag/cryobag)) - var/obj/structure/closet/bodybag/cryobag/C = G.grabbed_thing - if(!C.bodybag_occupant) + else if(istype(grab.grabbed_thing, /obj/structure/closet/bodybag/cryobag)) + var/obj/structure/closet/bodybag/cryobag/cryobag = grab.grabbed_thing + if(!cryobag.bodybag_occupant) return - M = C.bodybag_occupant - C.open() + grabbed_mob = cryobag.bodybag_occupant + cryobag.open() user.stop_pulling() - user.start_pulling(M) + user.start_pulling(grabbed_mob) - if(!M) + if(!grabbed_mob) return - take_victim(M, user) + take_victim(grabbed_mob, user) + return TRUE /obj/machinery/optable/proc/check_table(mob/living/carbon/patient as mob) if(victim) diff --git a/code/game/objects/machinery/adv_med.dm b/code/game/objects/machinery/adv_med.dm index 95063a17355ec..52f96cd5af02b 100644 --- a/code/game/objects/machinery/adv_med.dm +++ b/code/game/objects/machinery/adv_med.dm @@ -32,6 +32,7 @@ set_light(initial(light_range)) /obj/machinery/bodyscanner/update_icon_state() + . = ..() if(occupant) icon_state = "[initial(icon_state)]_occupied" else @@ -107,57 +108,59 @@ return go_out() - /obj/machinery/bodyscanner/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/healthanalyzer) && occupant) //Allows us to use the analyzer on the occupant without taking him out; this is here mainly for consistency's sake. var/obj/item/healthanalyzer/J = I J.attack(occupant, user) return - var/mob/M - if(!istype(I, /obj/item/grab)) +/obj/machinery/bodyscanner/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + . = ..() + if(.) return - - else if(occupant) + if(occupant) to_chat(user, span_warning("The scanner is already occupied!")) return - var/obj/item/grab/G = I - if(istype(G.grabbed_thing,/obj/structure/closet/bodybag/cryobag)) - var/obj/structure/closet/bodybag/cryobag/C = G.grabbed_thing - if(!C.bodybag_occupant) + var/mob/grabbed_mob + if(ismob(grab.grabbed_thing)) + grabbed_mob = grab.grabbed_thing + else if(istype(grab.grabbed_thing, /obj/structure/closet/bodybag/cryobag)) + var/obj/structure/closet/bodybag/cryobag/cryobag = grab.grabbed_thing + if(!cryobag.bodybag_occupant) to_chat(user, span_warning("The stasis bag is empty!")) return - M = C.bodybag_occupant - C.open() - user.start_pulling(M) - else if(ismob(G.grabbed_thing)) - M = G.grabbed_thing + grabbed_mob = cryobag.bodybag_occupant + cryobag.open() + user.start_pulling(grabbed_mob) - if(!M) + if(!grabbed_mob) return - if(M.abiotic()) + if(grabbed_mob.abiotic()) to_chat(user, span_warning("Subject cannot have abiotic items on.")) return - M.forceMove(src) - occupant = M + grabbed_mob.forceMove(src) + occupant = grabbed_mob update_icon() for(var/obj/O in src) O.forceMove(loc) + return TRUE -/obj/machinery/bodyscanner/attack_alien(mob/living/carbon/xenomorph/X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) +/obj/machinery/bodyscanner/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) if(!occupant) - to_chat(X, span_xenowarning("There is nothing of interest in there.")) + to_chat(xeno_attacker, span_xenowarning("There is nothing of interest in there.")) return - if(X.status_flags & INCORPOREAL || X.do_actions) + if(xeno_attacker.status_flags & INCORPOREAL || xeno_attacker.do_actions) return - visible_message(span_warning("[X] begins to pry the [src]'s cover!"), 3) + visible_message(span_warning("[xeno_attacker] begins to pry the [src]'s cover!"), 3) playsound(src,'sound/effects/metal_creaking.ogg', 25, 1) - if(!do_after(X, 2 SECONDS)) + if(!do_after(xeno_attacker, 2 SECONDS)) return playsound(loc, 'sound/effects/metal_creaking.ogg', 25, 1) go_out() diff --git a/code/game/objects/machinery/air_alarm.dm b/code/game/objects/machinery/air_alarm.dm index e644e46a4e20c..ea737f7f2af5d 100644 --- a/code/game/objects/machinery/air_alarm.dm +++ b/code/game/objects/machinery/air_alarm.dm @@ -36,6 +36,7 @@ set_light(initial(light_range)) /obj/machinery/air_alarm/update_icon_state() + . = ..() if(machine_stat & (NOPOWER|BROKEN)) icon_state = "alarm_unpowered" else diff --git a/code/game/objects/machinery/autodoc.dm b/code/game/objects/machinery/autodoc.dm index 5fc73f11f9685..4bd4fc7ab1a1c 100644 --- a/code/game/objects/machinery/autodoc.dm +++ b/code/game/objects/machinery/autodoc.dm @@ -105,6 +105,7 @@ set_light(initial(light_range)) /obj/machinery/autodoc/update_icon_state() + . = ..() if(machine_stat & NOPOWER) icon_state = "autodoc_off" else if(surgery) @@ -193,15 +194,15 @@ if(updating_health) occupant.updatehealth() -/obj/machinery/autodoc/attack_alien(mob/living/carbon/xenomorph/X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) +/obj/machinery/autodoc/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) if(!occupant) - to_chat(X, span_xenowarning("There is nothing of interest in there.")) + to_chat(xeno_attacker, span_xenowarning("There is nothing of interest in there.")) return - if(X.status_flags & INCORPOREAL || X.do_actions) + if(xeno_attacker.status_flags & INCORPOREAL || xeno_attacker.do_actions) return - visible_message(span_warning("[X] begins to pry the [src]'s cover!"), 3) + visible_message(span_warning("[xeno_attacker] begins to pry the [src]'s cover!"), 3) playsound(src,'sound/effects/metal_creaking.ogg', 25, 1) - if(!do_after(X, 2 SECONDS)) + if(!do_after(xeno_attacker, 2 SECONDS)) return playsound(loc, 'sound/effects/metal_creaking.ogg', 25, 1) go_out() @@ -851,6 +852,8 @@ /obj/machinery/autodoc/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!ishuman(user)) return // no @@ -870,67 +873,63 @@ J.attack(occupant, user) return - else if(!istype(I, /obj/item/grab)) +/obj/machinery/autodoc/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + . = ..() + if(.) + return + if(!ishuman(user)) return - if(machine_stat & (NOPOWER|BROKEN)) - to_chat(user, span_notice("[src] is non-functional!")) + to_chat(user, span_notice("\ [src] is non-functional!")) return - else if(occupant) - to_chat(user, span_notice("[src] is already occupied!")) + if(occupant) + to_chat(user, span_notice("\ [src] is already occupied!")) return - if(!istype(I, /obj/item/grab)) - return + var/mob/grabbed_mob - var/obj/item/grab/G = I + if(ismob(grab.grabbed_thing)) + grabbed_mob = grab.grabbed_thing - var/mob/M - if(ismob(G.grabbed_thing)) - M = G.grabbed_thing - else if(istype(G.grabbed_thing, /obj/structure/closet/bodybag/cryobag)) - var/obj/structure/closet/bodybag/cryobag/C = G.grabbed_thing - if(!C.bodybag_occupant) + else if(istype(grab.grabbed_thing,/obj/structure/closet/bodybag/cryobag)) + var/obj/structure/closet/bodybag/cryobag/cryobag = grab.grabbed_thing + if(!cryobag.bodybag_occupant) to_chat(user, span_warning("The stasis bag is empty!")) return - M = C.bodybag_occupant - C.open() - user.start_pulling(M) + grabbed_mob = cryobag.bodybag_occupant + cryobag.open() + user.start_pulling(grabbed_mob) - - if(!M) - return - - else if(!ishuman(M)) // stop fucking monkeys and xenos being put in. // MONKEEY IS FREE - to_chat(user, span_notice("[src] is compatible with humanoid anatomies only!")) + if(!ishuman(grabbed_mob)) + to_chat(user, span_notice("\ [src] is compatible with humanoid anatomies only!")) return - else if(M.abiotic()) + if(grabbed_mob.abiotic()) to_chat(user, span_warning("Subject cannot have abiotic items on.")) return if(user.skills.getRating(SKILL_SURGERY) < SKILL_SURGERY_TRAINED && !event) - user.visible_message(span_notice("[user] fumbles around figuring out how to put [M] into [src]."), - span_notice("You fumble around figuring out how to put [M] into [src].")) + user.visible_message(span_notice("[user] fumbles around figuring out how to put [grabbed_mob] into [src]."), + span_notice("You fumble around figuring out how to put [grabbed_mob] into [src].")) var/fumbling_time = max(0 , SKILL_TASK_TOUGH - ( SKILL_TASK_EASY * user.skills.getRating(SKILL_SURGERY) ))// 8 secs non-trained, 5 amateur - if(!do_after(user, fumbling_time, NONE, M, BUSY_ICON_UNSKILLED) || QDELETED(src)) + if(!do_after(user, fumbling_time, NONE, grabbed_mob, BUSY_ICON_UNSKILLED) || QDELETED(src)) return - visible_message("[user] starts putting [M] into [src].", 3) + visible_message("[user] starts putting [grabbed_mob] into [src].", 3) - if(!do_after(user, 10, IGNORE_HELD_ITEM, M, BUSY_ICON_GENERIC) || QDELETED(src)) + if(!do_after(user, 10, IGNORE_HELD_ITEM, grabbed_mob, BUSY_ICON_GENERIC) || QDELETED(src)) return if(occupant) to_chat(user, span_notice("[src] is already occupied!")) return - if(!M || !G) + if(!grabbed_mob || !grab) return - M.forceMove(src) - occupant = M + grabbed_mob.forceMove(src) + occupant = grabbed_mob update_icon() var/implants = list(/obj/item/implant/neurostim) var/mob/living/carbon/human/H = occupant @@ -941,6 +940,7 @@ say("Automatic mode engaged, initialising procedures.") addtimer(CALLBACK(src, PROC_REF(auto_start)), 5 SECONDS) + return TRUE ///////////////////////////////////////////////////////////// diff --git a/code/game/objects/machinery/bioprinter.dm b/code/game/objects/machinery/bioprinter.dm index d58009e2896a4..27bd83acc06e4 100644 --- a/code/game/objects/machinery/bioprinter.dm +++ b/code/game/objects/machinery/bioprinter.dm @@ -58,6 +58,8 @@ /obj/machinery/bioprinter/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/reagent_containers/glass/beaker)) var/obj/item/reagent_containers/glass/beaker/B = I if(B.reagents.has_reagent(/datum/reagent/medicine/biomass, 30)) @@ -83,6 +85,7 @@ . += "It has [stored_matter] matter and [stored_metal] metal left." /obj/machinery/bioprinter/update_icon_state() + . = ..() if(machine_stat & NOPOWER) icon_state = "bioprinter_off" return diff --git a/code/game/objects/machinery/buttons.dm b/code/game/objects/machinery/buttons.dm index 892b33cfe2a4d..183f3bc09e4c9 100644 --- a/code/game/objects/machinery/buttons.dm +++ b/code/game/objects/machinery/buttons.dm @@ -27,6 +27,7 @@ /obj/machinery/button/update_icon_state() + . = ..() if(machine_stat & (NOPOWER|BROKEN)) icon_state = "[initial(icon_state)]-p" else @@ -123,7 +124,7 @@ /obj/machinery/button/door/open_only/landing_zone/Initialize(mapload) . = ..() var/area/area = get_area(src) - area.flags_area |= MARINE_BASE + area.area_flags |= MARINE_BASE /obj/machinery/button/door/open_only/landing_zone/attack_hand(mob/living/user) if((machine_stat & (NOPOWER|BROKEN))) @@ -249,6 +250,7 @@ update_icon() /obj/machinery/medical_help_button/update_icon_state() + . = ..() if(machine_stat & NOPOWER) icon_state = "doorctrl-p" else @@ -283,7 +285,7 @@ ///The list of outfits we can equip on the humans we're spawning var/outfit_list = list() -/obj/machinery/button/valhalla/xeno_button/attack_alien(mob/living/carbon/xenomorph/X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) +/obj/machinery/button/valhalla/xeno_button/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) var/list/job_outfits = list() for(var/type in subtypesof(/datum/outfit/job)) if(istype(type, /datum/outfit)) @@ -301,7 +303,7 @@ QDEL_NULL(linked) if(!get_turf(GLOB.valhalla_button_spawn_landmark[link])) - to_chat(X, span_warning("An error occured, yell at the coders.")) + to_chat(xeno_attacker, span_warning("An error occured, yell at the coders.")) CRASH("Valhalla button linked with an improper landmark: button ID: [link].") linked = new /mob/living/carbon/human(get_turf(GLOB.valhalla_button_spawn_landmark[link])) if(selected_outfit == "Naked" || !selected_outfit) diff --git a/code/game/objects/machinery/camera/camera.dm b/code/game/objects/machinery/camera/camera.dm index 1d8cd4c61ea98..44133deb5e1d7 100644 --- a/code/game/objects/machinery/camera/camera.dm +++ b/code/game/objects/machinery/camera/camera.dm @@ -93,6 +93,8 @@ /obj/machinery/camera/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/paper) && isliving(user)) var/mob/living/U = user @@ -164,16 +166,16 @@ return TRUE -/obj/machinery/camera/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/machinery/camera/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return FALSE if(obj_integrity <= 0) - to_chat(X, span_warning("The camera is already disabled.")) + to_chat(xeno_attacker, span_warning("The camera is already disabled.")) return - X.do_attack_animation(src, ATTACK_EFFECT_CLAW) - X.visible_message(span_danger("[X] slashes \the [src]!"), \ + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_CLAW) + xeno_attacker.visible_message(span_danger("[xeno_attacker] slashes \the [src]!"), \ span_danger("We slash \the [src]!")) playsound(loc, "alien_claw_metal", 25, 1) @@ -218,6 +220,7 @@ to_chat(AI, span_notice("[src] has been deactivated at [myarea]")) /obj/machinery/camera/update_icon_state() + . = ..() if(obj_integrity <= 0) icon_state = "camera_assembly" else @@ -402,10 +405,6 @@ /obj/machinery/camera/autoname/lz_camera/ex_act() return - -/obj/machinery/camera/autoname/lz_camera/update_icon() - return - //Thunderdome cameras /obj/machinery/camera/autoname/thunderdome name = "thunderdome camera" @@ -415,5 +414,6 @@ //Special invisible cameras, to get even better angles without looking ugly /obj/machinery/camera/autoname/thunderdome/hidden -/obj/machinery/camera/autoname/thunderdome/hidden/update_icon() +/obj/machinery/camera/autoname/thunderdome/hidden/update_icon_state() + . = ..() icon_state = "nothing" diff --git a/code/game/objects/machinery/camera/camera_assembly.dm b/code/game/objects/machinery/camera/camera_assembly.dm index d1a4e5005cf07..adb5fa8d7c988 100644 --- a/code/game/objects/machinery/camera/camera_assembly.dm +++ b/code/game/objects/machinery/camera/camera_assembly.dm @@ -81,6 +81,8 @@ /obj/structure/camera_assembly/attackby(obj/item/I, mob/living/user, params) . = ..() + if(.) + return switch(state) if(STATE_WRENCHED) @@ -173,7 +175,7 @@ /obj/structure/camera_assembly/deconstruct(disassembled = TRUE) - if(!(flags_atom & NODECONSTRUCT)) + if(!(atom_flags & NODECONSTRUCT)) new /obj/item/stack/sheet/metal(loc) return ..() diff --git a/code/game/objects/machinery/camera/deployable_camera.dm b/code/game/objects/machinery/camera/deployable_camera.dm index 35e5791b33476..58058623dff2e 100644 --- a/code/game/objects/machinery/camera/deployable_camera.dm +++ b/code/game/objects/machinery/camera/deployable_camera.dm @@ -7,7 +7,8 @@ GLOBAL_VAR_INIT(deployed_cameras, 0) icon_state = "deployable" layer = ABOVE_ALL_MOB_LAYER//it flies after all -/obj/machinery/camera/deployable/update_icon() +/obj/machinery/camera/deployable/update_icon_state() + . = ..() if(obj_integrity <= 0) icon_state = "deployableoff" else diff --git a/code/game/objects/machinery/cell_charger.dm b/code/game/objects/machinery/cell_charger.dm index 04bd92eb0c891..d7149a4024b3e 100644 --- a/code/game/objects/machinery/cell_charger.dm +++ b/code/game/objects/machinery/cell_charger.dm @@ -37,6 +37,8 @@ /obj/machinery/cell_charger/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(machine_stat & BROKEN) return diff --git a/code/game/objects/machinery/cic_maptable.dm b/code/game/objects/machinery/cic_maptable.dm index dafadd77d288f..af9ccd28672e9 100644 --- a/code/game/objects/machinery/cic_maptable.dm +++ b/code/game/objects/machinery/cic_maptable.dm @@ -145,17 +145,16 @@ . = ..() if(.) return - if(user.skills.getRating(SKILL_LEADERSHIP) < SKILL_LEAD_EXPERT) - user.balloon_alert(user, "Can't use that!") - return TRUE - if(is_banned_from(user.client.ckey, GLOB.roles_allowed_minimap_draw)) - to_chat(user, span_boldwarning("You have been banned from a command role. You may not use [src] until the ban has been lifted.")) - return TRUE /obj/machinery/cic_maptable/drawable/interact(mob/user) . = ..() if(.) return + if(user.skills.getRating(SKILL_LEADERSHIP) < SKILL_LEAD_EXPERT) + return + if(is_banned_from(user.client.ckey, GLOB.roles_allowed_minimap_draw)) + to_chat(user, span_boldwarning("You have been banned from a command role. You may not use access draw functions until the ban has been lifted.")) + return user.client.screen += drawing_tools /obj/machinery/cic_maptable/drawable/on_unset_interaction(mob/user) @@ -179,7 +178,15 @@ pixel_x = -16 pixel_y = -14 coverage = 75 - allow_pass_flags = PASS_LOW_STRUCTURE|PASSABLE + allow_pass_flags = PASS_LOW_STRUCTURE|PASSABLE|PASS_WALKOVER + bound_width = 64 + +/obj/machinery/cic_maptable/drawable/big/Initialize(mapload) + . = ..() + var/static/list/connections = list( + COMSIG_OBJ_TRY_ALLOW_THROUGH = PROC_REF(can_climb_over), + ) + AddElement(/datum/element/connect_loc, connections) /obj/machinery/cic_maptable/drawable/big/som minimap_flag = MINIMAP_FLAG_MARINE_SOM diff --git a/code/game/objects/machinery/cloning/cloning.dm b/code/game/objects/machinery/cloning/cloning.dm index 52d2f5c33563d..6aebe9b342b10 100644 --- a/code/game/objects/machinery/cloning/cloning.dm +++ b/code/game/objects/machinery/cloning/cloning.dm @@ -207,6 +207,7 @@ These act as a respawn mechanic growning a body and offering it up to ghosts. set_light(0) /obj/machinery/cloning/vats/update_icon_state() + . = ..() if(!beaker) icon_state = "cell_0" return diff --git a/code/game/objects/machinery/computer/HolodeckControl.dm b/code/game/objects/machinery/computer/HolodeckControl.dm index 0e1cc11d0e497..0c1b155dbf38a 100644 --- a/code/game/objects/machinery/computer/HolodeckControl.dm +++ b/code/game/objects/machinery/computer/HolodeckControl.dm @@ -15,23 +15,8 @@ /obj/structure/table/holotable/attackby(obj/item/I, mob/user, params) if(iswrench(I)) to_chat(user, "It's a holotable! There are no bolts!") - - else if(istype(I, /obj/item/grab) && get_dist(src, user) <= 1) - var/obj/item/grab/G = I - if(!isliving(G.grabbed_thing)) - return - - var/mob/living/L = G.grabbed_thing - if(user.grab_state < GRAB_AGGRESSIVE) - to_chat(user, span_warning("You need a better grip to do that!")) - return - - L.forceMove(loc) - L.Paralyze(10 SECONDS) - user.visible_message(span_danger("[user] puts [L] on the table.")) - - else - return ..() + return + return ..() /obj/structure/table/holotable/wood name = "table" @@ -49,7 +34,7 @@ density = TRUE layer = WINDOW_LAYER anchored = TRUE - flags_atom = ON_BORDER + atom_flags = ON_BORDER @@ -63,60 +48,7 @@ desc = "Here's your chance, do your dance at the Space Jam." w_class = WEIGHT_CLASS_BULKY //Stops people from hiding it in their bags/pockets -/obj/item/toy/beach_ball/holoball/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) +/obj/item/toy/beach_ball/holoball/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) if(!CONFIG_GET(flag/fun_allowed)) return FALSE - attack_hand(X) - -/obj/structure/holohoop - name = "basketball hoop" - desc = "Boom, Shakalaka!" - icon = 'icons/obj/structures/misc.dmi' - icon_state = "hoop" - anchored = TRUE - density = TRUE - var/side = "" - var/id = "" - -/obj/structure/holohoop/attackby(obj/item/I, mob/user, params) - . = ..() - - if(istype(I, /obj/item/grab) && get_dist(src, user) <= 1) - var/obj/item/grab/G = I - if(!isliving(G.grabbed_thing)) - return - - var/mob/living/L = G.grabbed_thing - if(user.grab_state < GRAB_AGGRESSIVE) - to_chat(user, span_warning("You need a better grip to do that!")) - return - L.forceMove(loc) - L.Paralyze(10 SECONDS) - for(var/obj/machinery/scoreboard/X in GLOB.machines) - if(X.id == id) - X.score(side, 3)// 3 points for dunking a mob - // no break, to update multiple scoreboards - visible_message(span_danger("[user] dunks [L] into the [src]!")) - - else if(get_dist(src, user) < 2) - user.transferItemToLoc(I, loc) - for(var/obj/machinery/scoreboard/X in GLOB.machines) - if(X.id == id) - X.score(side) - visible_message(span_notice("[user] dunks [I] into the [src]!")) - -/obj/structure/holohoop/CanAllowThrough(atom/movable/mover, turf/target) - if(istype(mover,/obj/item) && mover.throwing) - var/obj/item/I = mover - if(prob(50)) - I.loc = src.loc - for(var/obj/machinery/scoreboard/X in GLOB.machines) - if(X.id == id) - X.score(side) - // no break, to update multiple scoreboards - visible_message(span_notice(" Swish! \the [I] lands in \the [src]."), 3) - else - visible_message(span_warning(" \the [I] bounces off of \the [src]'s rim!"), 3) - return FALSE - else - return ..() + attack_hand(xeno_attacker) diff --git a/code/game/objects/machinery/computer/Operating.dm b/code/game/objects/machinery/computer/Operating.dm index 1b448c2727959..00b0cc34210af 100644 --- a/code/game/objects/machinery/computer/Operating.dm +++ b/code/game/objects/machinery/computer/Operating.dm @@ -30,7 +30,7 @@
Name: [src.victim.real_name]
Age: [src.victim.age]
-Blood Type: [src.victim.b_type]
+Blood Type: [src.victim.blood_type]

Health: [src.victim.health]
Brute Damage: [src.victim.getBruteLoss()]
diff --git a/code/game/objects/machinery/computer/buildandrepair.dm b/code/game/objects/machinery/computer/buildandrepair.dm index f1f77d2fb4e78..857acbbbdf916 100644 --- a/code/game/objects/machinery/computer/buildandrepair.dm +++ b/code/game/objects/machinery/computer/buildandrepair.dm @@ -26,7 +26,7 @@ return playsound(loc, 'sound/items/welder.ogg', 25, 1) - if(!do_after(user, 20, NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(WT, /obj/item/tool/weldingtool/proc/isOn))) + if(!do_after(user, 20, NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(WT, TYPE_PROC_REF(/obj/item/tool/weldingtool, isOn)))) return FALSE to_chat(user, span_notice("You deconstruct the frame.")) diff --git a/code/game/objects/machinery/computer/camera_advanced.dm b/code/game/objects/machinery/computer/camera_advanced.dm index 8099fb2f152b1..61abeeb0a785c 100644 --- a/code/game/objects/machinery/computer/camera_advanced.dm +++ b/code/game/objects/machinery/computer/camera_advanced.dm @@ -242,7 +242,6 @@ var/visible_icon = 0 var/image/user_image = null - /mob/camera/aiEye/remote/update_remote_sight(mob/living/user) user.see_invisible = SEE_INVISIBLE_LIVING user.sight = SEE_SELF|SEE_MOBS|SEE_OBJS|SEE_TURFS|SEE_BLACKNESS diff --git a/code/game/objects/machinery/computer/camera_console.dm b/code/game/objects/machinery/computer/camera_console.dm index a86c34b9a2ad3..b717b0c6e2765 100644 --- a/code/game/objects/machinery/computer/camera_console.dm +++ b/code/game/objects/machinery/computer/camera_console.dm @@ -169,6 +169,7 @@ /obj/machinery/computer/security/telescreen/update_icon_state() + . = ..() icon_state = initial(icon_state) if(machine_stat & (BROKEN|DISABLED)) icon_state += "b" diff --git a/code/game/objects/machinery/computer/communications.dm b/code/game/objects/machinery/computer/communications.dm index fdc1537a07a14..c797fe1cc4e12 100644 --- a/code/game/objects/machinery/computer/communications.dm +++ b/code/game/objects/machinery/computer/communications.dm @@ -118,7 +118,7 @@ to_chat(usr, span_warning("That announcement contained charachters prohibited in IC chat! Consider reviewing the server rules.")) return FALSE - priority_announce(input, type = ANNOUNCEMENT_COMMAND) + priority_announce(input, subtitle = "Sent by [usr]", type = ANNOUNCEMENT_COMMAND) message_admins("[ADMIN_TPMONTY(usr)] has just sent a command announcement") log_game("[key_name(usr)] has just sent a command announcement.") cooldown_message = world.time @@ -149,11 +149,11 @@ to_chat(usr, span_warning("The ship must be under red alert in order to enact evacuation procedures.")) return FALSE - if(SSevacuation.flags_scuttle & FLAGS_SDEVAC_TIMELOCK) + if(SSevacuation.scuttle_flags & FLAGS_SDEVAC_TIMELOCK) to_chat(usr, span_warning("The sensors do not detect a sufficient threat present.")) return FALSE - if(SSevacuation.flags_scuttle & FLAGS_EVACUATION_DENY) + if(SSevacuation.scuttle_flags & FLAGS_EVACUATION_DENY) to_chat(usr, span_warning("The TGMC has placed a lock on deploying the evacuation pods.")) return FALSE @@ -172,7 +172,7 @@ state = STATE_EVACUATION - if("evacuation_cancel") + if("delta_cancel") if(state == STATE_EVACUATION_CANCEL) if(!SSevacuation.cancel_evacuation()) to_chat(usr, span_warning("You are unable to cancel the evacuation right now!")) @@ -356,7 +356,7 @@ dat += "
\[ Send Distress Beacon \]" switch(SSevacuation.evac_status) if(EVACUATION_STATUS_STANDING_BY) dat += "
\[ Initiate emergency evacuation \]" - if(EVACUATION_STATUS_INITIATING) dat += "
\[ Cancel emergency evacuation \]" + if(EVACUATION_STATUS_INITIATING) dat += "
\[ Cancel Delta Alert \]" else dat += "
\[ LOG IN \]" @@ -365,7 +365,7 @@ dat += "Are you sure you want to evacuate the [SSmapping.configs[SHIP_MAP].map_name]? \[ Confirm\]" if(STATE_EVACUATION_CANCEL) - dat += "Are you sure you want to cancel the evacuation of the [SSmapping.configs[SHIP_MAP].map_name]? \[ Confirm\]" + dat += "Are you sure you want to cancel Delta Alert and prevent the evacuation and/or self destruction of the [SSmapping.configs[SHIP_MAP].map_name]? \[ Confirm\]" if(STATE_DISTRESS) if(CONFIG_GET(flag/infestation_ert_allowed)) diff --git a/code/game/objects/machinery/computer/computer.dm b/code/game/objects/machinery/computer/computer.dm index 85e1b1db479cb..286c5a5279843 100644 --- a/code/game/objects/machinery/computer/computer.dm +++ b/code/game/objects/machinery/computer/computer.dm @@ -103,6 +103,7 @@ set_light(initial(light_range)) /obj/machinery/computer/update_icon_state() + . = ..() if(machine_stat & (BROKEN|DISABLED)) icon_state = "[initial(icon_state)]_broken" else @@ -140,10 +141,10 @@ if(!welder.tool_use_check(user, 2)) return FALSE - if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_MASTER) + if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_EXPERT) user.visible_message(span_notice("[user] fumbles around figuring out how to deconstruct [src]."), span_notice("You fumble around figuring out how to deconstruct [src].")) - var/fumbling_time = 5 SECONDS * (SKILL_ENGINEER_MASTER - user.skills.getRating(SKILL_ENGINEER)) + var/fumbling_time = 5 SECONDS * (SKILL_ENGINEER_EXPERT - user.skills.getRating(SKILL_ENGINEER)) if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED)) return @@ -167,12 +168,14 @@ /obj/machinery/computer/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(isscrewdriver(I) && circuit) - if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_MASTER) + if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_EXPERT) user.visible_message(span_notice("[user] fumbles around figuring out how to deconstruct [src]."), span_notice("You fumble around figuring out how to deconstruct [src].")) - var/fumbling_time = 50 * ( SKILL_ENGINEER_MASTER - user.skills.getRating(SKILL_ENGINEER) ) + var/fumbling_time = 50 * ( SKILL_ENGINEER_EXPERT - user.skills.getRating(SKILL_ENGINEER) ) if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED)) return @@ -217,25 +220,25 @@ pick(playsound(src, 'sound/machines/computer_typing1.ogg', 5, 1), playsound(src, 'sound/machines/computer_typing2.ogg', 5, 1), playsound(src, 'sound/machines/computer_typing3.ogg', 5, 1)) ///So Xenos can smash computers out of the way without actually breaking them -/obj/machinery/computer/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/machinery/computer/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return FALSE if(resistance_flags & INDESTRUCTIBLE) - to_chat(X, span_xenowarning("We're unable to damage this!")) + to_chat(xeno_attacker, span_xenowarning("We're unable to damage this!")) return if(machine_stat & (BROKEN|DISABLED)) //If we're already broken or disabled, don't bother - to_chat(X, span_xenowarning("This peculiar thing is already broken!")) + to_chat(xeno_attacker, span_xenowarning("This peculiar thing is already broken!")) return if(durability <= 0) set_disabled() - to_chat(X, span_xenowarning("We smash the annoying device, disabling it!")) + to_chat(xeno_attacker, span_xenowarning("We smash the annoying device, disabling it!")) else durability-- - to_chat(X, span_xenowarning("We smash the annoying device!")) + to_chat(xeno_attacker, span_xenowarning("We smash the annoying device!")) - X.do_attack_animation(src, ATTACK_EFFECT_DISARM2) //SFX - playsound(loc, pick('sound/effects/bang.ogg','sound/effects/metal_crash.ogg','sound/effects/meteorimpact.ogg'), 25, 1) //SFX + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_DISARM2) //SFxeno_attacker + playsound(loc, pick('sound/effects/bang.ogg','sound/effects/metal_crash.ogg','sound/effects/meteorimpact.ogg'), 25, 1) //SFxeno_attacker Shake(duration = 0.5 SECONDS) diff --git a/code/game/objects/machinery/computer/dropship_weapons.dm b/code/game/objects/machinery/computer/dropship_weapons.dm index 8a67d9eecac0a..463df4e343ac8 100644 --- a/code/game/objects/machinery/computer/dropship_weapons.dm +++ b/code/game/objects/machinery/computer/dropship_weapons.dm @@ -7,6 +7,7 @@ icon_state = "consoleright" screen_overlay = "consoleright_emissive" circuit = null + opacity = FALSE resistance_flags = RESIST_ALL interaction_flags = INTERACT_MACHINE_TGUI var/shuttle_tag // Used to know which shuttle we're linked to. diff --git a/code/game/objects/machinery/computer/intel_computer.dm b/code/game/objects/machinery/computer/intel_computer.dm index 99effa1e947a2..38dbdde62acc5 100644 --- a/code/game/objects/machinery/computer/intel_computer.dm +++ b/code/game/objects/machinery/computer/intel_computer.dm @@ -53,7 +53,7 @@ printing_complete = TRUE SSpoints.supply_points[faction] += supply_reward SSpoints.dropship_points += dropship_reward - priority_announce("Classified transmission recieved from [get_area(src)]. Bonus delivered as [supply_reward] supply points and [dropship_reward] dropship points.", title = "TGMC Intel Division") + minor_announce("Classified transmission recieved from [get_area(src)]. Bonus delivered as [supply_reward] supply points and [dropship_reward] dropship points.", title = "TGMC Intel Division") SSminimaps.remove_marker(src) /obj/machinery/computer/intel_computer/Destroy() diff --git a/code/game/objects/machinery/computer/marines_consoles.dm b/code/game/objects/machinery/computer/marines_consoles.dm index a8dced845cecd..61840a74f8f78 100644 --- a/code/game/objects/machinery/computer/marines_consoles.dm +++ b/code/game/objects/machinery/computer/marines_consoles.dm @@ -15,6 +15,8 @@ /obj/machinery/computer/marine_card/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/card/id)) var/obj/item/card/id/idcard = I @@ -352,6 +354,8 @@ /obj/machinery/computer/squad_changer/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/card/id)) var/obj/item/card/id/idcard = I diff --git a/code/game/objects/machinery/computer/medical.dm b/code/game/objects/machinery/computer/medical.dm index 78e6f3fa59f85..397558576d355 100644 --- a/code/game/objects/machinery/computer/medical.dm +++ b/code/game/objects/machinery/computer/medical.dm @@ -35,6 +35,8 @@ /obj/machinery/computer/med_data/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/card/id) && !scan) if(!user.drop_held_item()) diff --git a/code/game/objects/machinery/computer/nt_access.dm b/code/game/objects/machinery/computer/nt_access.dm index 5e7724d4ff679..028e05a0f174f 100644 --- a/code/game/objects/machinery/computer/nt_access.dm +++ b/code/game/objects/machinery/computer/nt_access.dm @@ -1,4 +1,5 @@ // -- generate override code computer +//TODO: Make a parent computer to remove all the nuke disk copy paste /obj/item/circuitboard/computer/nt_access name = "circuit board (nuke disk generator)" build_path = /obj/machinery/computer/nt_access @@ -15,11 +16,9 @@ resistance_flags = INDESTRUCTIBLE|UNACIDABLE layer = ABOVE_MOB_LAYER ///Time needed for the machine to generate the disc - var/segment_time = 1.5 MINUTES + var/segment_time = 1 MINUTES ///Time to start a segment - var/start_time = 15 SECONDS - ///Time to print a disk - var/printing_time = 15 SECONDS + var/start_time = 5 SECONDS ///Total number of times the hack is required var/total_segments = 5 ///What segment we are on, (once this hits total, disk is printed) @@ -71,7 +70,7 @@ visible_message("[src] shuts down as it loses power. Any running programs will now exit") /obj/machinery/computer/nt_access/update_icon_state() - icon_state = initial(icon_state) + return /obj/machinery/computer/nt_access/attackby(obj/item/I, mob/living/user, params) return attack_hand(user) @@ -128,13 +127,14 @@ busy = TRUE usr.visible_message("[usr] started a program to send the [code_color] security override command.", "You started a program to send the [code_color] security override command.") - if(!do_after(usr, printing_time, NONE, src, BUSY_ICON_GENERIC, null, null, CALLBACK(src, TYPE_PROC_REF(/datum, process)))) + if(!do_after(usr, start_time, NONE, src, BUSY_ICON_GENERIC, null, null, CALLBACK(src, TYPE_PROC_REF(/datum, process)))) busy = FALSE return visible_message(span_notice("[src] beeps as it finishes sending the security override command.")) SEND_GLOBAL_SIGNAL(COMSIG_GLOB_CAMPAIGN_NT_OVERRIDE_CODE, code_color) busy = FALSE + set_disabled() //stops spamming the signal return busy = TRUE @@ -145,7 +145,7 @@ return busy = FALSE - + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_CAMPAIGN_NT_OVERRIDE_RUNNING, src) current_timer = addtimer(CALLBACK(src, PROC_REF(complete_segment)), segment_time, TIMER_STOPPABLE) update_minimap_icon() running = TRUE @@ -155,6 +155,7 @@ ///Completes a stage of program progress /obj/machinery/computer/nt_access/proc/complete_segment() + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_CAMPAIGN_NT_OVERRIDE_STOP_RUNNING, src) playsound(src, 'sound/machines/ping.ogg', 25, 1) deltimer(current_timer) current_timer = null diff --git a/code/game/objects/machinery/computer/nuke_disk_generator.dm b/code/game/objects/machinery/computer/nuke_disk_generator.dm index 7d8c9561be29e..6fe47e59f1bdd 100644 --- a/code/game/objects/machinery/computer/nuke_disk_generator.dm +++ b/code/game/objects/machinery/computer/nuke_disk_generator.dm @@ -185,7 +185,7 @@ ///Change minimap icon if its on or off /obj/machinery/computer/nuke_disk_generator/proc/update_minimap_icon() SSminimaps.remove_marker(src) - SSminimaps.add_marker(src, MINIMAP_FLAG_ALL, image('modular_RUtgmc/icons/UI_icons/map_blips_large.dmi', null, "[disk_color]_disk[current_timer ? "_on" : "_off"]", VERY_HIGH_FLOAT_LAYER)) + SSminimaps.add_marker(src, MINIMAP_FLAG_ALL, image('modular_RUtgmc/icons/UI_icons/map_blips_large.dmi', null, "[disk_color]_disk[current_timer ? "_on" : "_off"]", VERY_HIGH_FLOAT_LAYER)) //RUTGMC EDIT /obj/machinery/computer/nuke_disk_generator/red name = "red nuke disk generator" diff --git a/code/game/objects/machinery/computer/security.dm b/code/game/objects/machinery/computer/security.dm index 23c3764766787..f26895f72f50f 100644 --- a/code/game/objects/machinery/computer/security.dm +++ b/code/game/objects/machinery/computer/security.dm @@ -41,6 +41,8 @@ /obj/machinery/computer/secure_data/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/card/id) && !scan) if(!user.drop_held_item()) diff --git a/code/game/objects/machinery/computer/skills.dm b/code/game/objects/machinery/computer/skills.dm index 54cc570ee14c2..3e22e802f9d60 100644 --- a/code/game/objects/machinery/computer/skills.dm +++ b/code/game/objects/machinery/computer/skills.dm @@ -23,6 +23,8 @@ /obj/machinery/computer/skills/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/card/id) && !scan) if(!user.drop_held_item()) diff --git a/code/game/objects/machinery/computer/som_computer.dm b/code/game/objects/machinery/computer/som_computer.dm index c1c60943a836f..2dcd787e872f6 100644 --- a/code/game/objects/machinery/computer/som_computer.dm +++ b/code/game/objects/machinery/computer/som_computer.dm @@ -13,6 +13,7 @@ pixel_y = 10 /obj/machinery/computer/som/update_icon_state() + . = ..() if(machine_stat & (BROKEN|DISABLED)) icon_state = "[initial(icon_state)]_broken" else if(machine_stat & NOPOWER) diff --git a/code/game/objects/machinery/constructable_frame.dm b/code/game/objects/machinery/constructable_frame.dm index 22ef9574cdda1..2a6969c75a236 100644 --- a/code/game/objects/machinery/constructable_frame.dm +++ b/code/game/objects/machinery/constructable_frame.dm @@ -10,7 +10,8 @@ var/state = 1 -/obj/machinery/constructable_frame/proc/update_desc() +/obj/machinery/constructable_frame/update_desc(updates) + . = ..() var/D if(req_components) D = "Requires " @@ -32,10 +33,6 @@ /obj/machinery/constructable_frame/machine_frame/attackby(obj/item/I, mob/living/user, params) - if(I.crit_fail) - to_chat(user, span_warning("This part is faulty, you cannot add this to the machine!")) - return - switch(state) if(1) if(iscablecoil(I)) diff --git a/code/game/objects/machinery/cryopod.dm b/code/game/objects/machinery/cryopod.dm index ad6153f93d3e8..8345ffa69f90b 100644 --- a/code/game/objects/machinery/cryopod.dm +++ b/code/game/objects/machinery/cryopod.dm @@ -1,3 +1,12 @@ +#define STATE_GUN 0 +#define STATE_AMMO 1 +#define STATE_EXPLOSIVE 2 +#define STATE_MELEE 4 +#define STATE_CLOTHING 5 +#define STATE_FOOD 6 +#define STATE_DRUGS 7 +#define STATE_CONTAINERS 8 +#define STATE_OTHER 9 /obj/machinery/computer/cryopod name = "hypersleep bay console" @@ -7,6 +16,7 @@ screen_overlay = "cellconsole_screen" circuit = /obj/item/circuitboard/computer/cryopodcontrol resistance_flags = RESIST_ALL + var/state = STATE_GUN /obj/machinery/computer/cryopod/interact(mob/user) . = ..() @@ -22,11 +32,81 @@ dat +="" dat += "
" dat += "
Dispense All

" - for(var/obj/item/I AS in GLOB.cryoed_item_list) - if(QDELETED(I)) - GLOB.cryoed_item_list -= I - continue - dat += "

[I.name]

" + dat += "Guns
" + dat += "Ammo
" + dat += "Explosives
" + dat += "Melee
" + dat += "Clothing
" + dat += "Food
" + dat += "Drugs
" + dat += "Containers
" + dat += "Other
" + dat += "
" + + switch(state) + if(STATE_GUN) + dat += "
Guns

" + for(var/obj/item/I in GLOB.cryoed_item_list_gun) + if(QDELETED(I)) + GLOB.cryoed_item_list_gun -= I + continue + dat += "

[I.name]

" + if(STATE_AMMO) + dat += "
Ammo

" + for(var/obj/item/I in GLOB.cryoed_item_list_ammo) + if(QDELETED(I)) + GLOB.cryoed_item_list_ammo -= I + continue + dat += "

[I.name]

" + if(STATE_EXPLOSIVE) + dat += "
Explosives

" + for(var/obj/item/I in GLOB.cryoed_item_list_explosive) + if(QDELETED(I)) + GLOB.cryoed_item_list_explosive -= I + continue + dat += "

[I.name]

" + if(STATE_MELEE) + dat += "
Melee

" + for(var/obj/item/I in GLOB.cryoed_item_list_melee) + if(QDELETED(I)) + GLOB.cryoed_item_list_melee -= I + continue + dat += "

[I.name]

" + if(STATE_CLOTHING) + dat += "
Clothing

" + for(var/obj/item/I in GLOB.cryoed_item_list_clothing) + if(QDELETED(I)) + GLOB.cryoed_item_list_clothing -= I + continue + dat += "

[I.name]

" + if(STATE_FOOD) + dat += "
Food

" + for(var/obj/item/I in GLOB.cryoed_item_list_food) + if(QDELETED(I)) + GLOB.cryoed_item_list_food -= I + continue + dat += "

[I.name]

" + if(STATE_DRUGS) + dat += "
Drugs

" + for(var/obj/item/I in GLOB.cryoed_item_list_drugs) + if(QDELETED(I)) + GLOB.cryoed_item_list_drugs -= I + continue + dat += "

[I.name]

" + if(STATE_CONTAINERS) + dat += "
Containers

" + for(var/obj/item/I in GLOB.cryoed_item_list_containers) + if(QDELETED(I)) + GLOB.cryoed_item_list_containers -= I + continue + dat += "

[I.name]

" + if(STATE_OTHER) + dat += "
Other

" + for(var/obj/item/I in GLOB.cryoed_item_list_other) + if(QDELETED(I)) + GLOB.cryoed_item_list_other -= I + continue + dat += "

[I.name]

" dat += "
" var/datum/browser/popup = new(user, "cryopod_console", "
Cryogenics
") @@ -39,20 +119,80 @@ if(.) return + switch(href_list["operation"]) + if("gun") + state = STATE_GUN + if("ammo") + state = STATE_AMMO + if("explosive") + state = STATE_EXPLOSIVE + if("melee") + state = STATE_MELEE + if("clothing") + state = STATE_CLOTHING + if("food") + state = STATE_FOOD + if("drug") + state = STATE_DRUGS + if("container") + state = STATE_CONTAINERS + if("other") + state = STATE_OTHER + updateUsrDialog() + if(href_list["item"]) - var/obj/item/I = locate(href_list["item"]) in GLOB.cryoed_item_list + var/obj/item/I + switch(state) + if(STATE_GUN) + I = locate(href_list["item"]) in GLOB.cryoed_item_list_gun + if(STATE_AMMO) + I = locate(href_list["item"]) in GLOB.cryoed_item_list_ammo + if(STATE_EXPLOSIVE) + I = locate(href_list["item"]) in GLOB.cryoed_item_list_explosive + if(STATE_MELEE) + I = locate(href_list["item"]) in GLOB.cryoed_item_list_melee + if(STATE_CLOTHING) + I = locate(href_list["item"]) in GLOB.cryoed_item_list_clothing + if(STATE_FOOD) + I = locate(href_list["item"]) in GLOB.cryoed_item_list_food + if(STATE_DRUGS) + I = locate(href_list["item"]) in GLOB.cryoed_item_list_drugs + if(STATE_CONTAINERS) + I = locate(href_list["item"]) in GLOB.cryoed_item_list_containers + if(STATE_OTHER) + I = locate(href_list["item"]) in GLOB.cryoed_item_list_other dispense_item(I, usr) else if(href_list["allitems"]) - if(!length(GLOB.cryoed_item_list)) + if(!length(GLOB.cryoed_item_list_gun) && !length(GLOB.cryoed_item_list_ammo) && !length(GLOB.cryoed_item_list_explosive) && !length(GLOB.cryoed_item_list_melee) && !length(GLOB.cryoed_item_list_clothing) && !length(GLOB.cryoed_item_list_food) && !length(GLOB.cryoed_item_list_drugs) && !length(GLOB.cryoed_item_list_containers) && !length(GLOB.cryoed_item_list_other)) to_chat(usr, span_warning("There is nothing to recover from storage.")) updateUsrDialog() return visible_message(span_notice("[src] beeps happily as it disgorges the desired objects.")) - for(var/obj/item/I AS in GLOB.cryoed_item_list) + var/list/combined_list + switch(state) + if(STATE_GUN) + combined_list = GLOB.cryoed_item_list_gun + if(STATE_AMMO) + combined_list = GLOB.cryoed_item_list_ammo + if(STATE_EXPLOSIVE) + combined_list = GLOB.cryoed_item_list_explosive + if(STATE_MELEE) + combined_list = GLOB.cryoed_item_list_melee + if(STATE_CLOTHING) + combined_list = GLOB.cryoed_item_list_clothing + if(STATE_FOOD) + combined_list = GLOB.cryoed_item_list_food + if(STATE_DRUGS) + combined_list = GLOB.cryoed_item_list_drugs + if(STATE_CONTAINERS) + combined_list = GLOB.cryoed_item_list_containers + if(STATE_OTHER) + combined_list = GLOB.cryoed_item_list_other + for(var/obj/item/I in combined_list) dispense_item(I, usr, FALSE) updateUsrDialog() @@ -60,16 +200,35 @@ /obj/machinery/computer/cryopod/proc/dispense_item(obj/item/I, mob/user, message = TRUE) if(!istype(I) || QDELETED(I)) - GLOB.cryoed_item_list -= I + GLOB.cryoed_item_list_gun -= I; + GLOB.cryoed_item_list_ammo -= I; + GLOB.cryoed_item_list_explosive -= I; + GLOB.cryoed_item_list_melee -= I; + GLOB.cryoed_item_list_clothing -= I; + GLOB.cryoed_item_list_food -= I; + GLOB.cryoed_item_list_drugs -= I; + GLOB.cryoed_item_list_containers -= I; + GLOB.cryoed_item_list_other -= I; CRASH("Deleted or erroneous variable ([I]) called for hypersleep inventory retrivial.") - if(!(I in GLOB.cryoed_item_list)) + if((!I) in (GLOB.cryoed_item_list_gun || GLOB.cryoed_item_list_ammo || GLOB.cryoed_item_list_explosive || GLOB.cryoed_item_list_melee || GLOB.cryoed_item_list_clothing || GLOB.cryoed_item_list_food || GLOB.cryoed_item_list_drugs || GLOB.cryoed_item_list_containers || GLOB.cryoed_item_list_other)) if(message) to_chat(user, span_warning("[I] is no longer in storage.")) return if(message) visible_message(span_notice("[src] beeps happily as it disgorges [I].")) I.forceMove(get_turf(src)) - GLOB.cryoed_item_list -= I + // For when we have south and north facing sprites. + // I.forceMove(get_step(loc, dir)) + + GLOB.cryoed_item_list_gun -= I; + GLOB.cryoed_item_list_ammo -= I; + GLOB.cryoed_item_list_explosive -= I; + GLOB.cryoed_item_list_melee -= I; + GLOB.cryoed_item_list_clothing -= I; + GLOB.cryoed_item_list_food -= I; + GLOB.cryoed_item_list_drugs -= I; + GLOB.cryoed_item_list_containers -= I; + GLOB.cryoed_item_list_other -= I; //Decorative structures to go alongside cryopods. /obj/structure/cryofeed @@ -129,6 +288,7 @@ set_light(initial(light_range)) /obj/machinery/cryopod/update_icon_state() + . = ..() if(occupant) icon_state = "[initial(icon_state)]_occupied" else @@ -190,53 +350,56 @@ return ..() /obj/item/proc/store_in_cryo() - if(is_type_in_typecache(src, GLOB.do_not_preserve) || HAS_TRAIT(src, TRAIT_NODROP) || (flags_item & (ITEM_ABSTRACT|DELONDROP))) + if(is_type_in_typecache(src, GLOB.do_not_preserve) || HAS_TRAIT(src, TRAIT_NODROP) || (item_flags & (ITEM_ABSTRACT|DELONDROP))) if(!QDELETED(src)) qdel(src) return moveToNullspace() - GLOB.cryoed_item_list += src + if(istype(src, /obj/item/weapon/gun)) + GLOB.cryoed_item_list_gun += src + else if(istype(src, /obj/item/ammo_magazine)) + GLOB.cryoed_item_list_ammo += src + else if(istype(src, /obj/item/explosive)) + GLOB.cryoed_item_list_explosive += src + else if(istype(src, /obj/item/weapon)) + GLOB.cryoed_item_list_melee += src + else if(istype(src, /obj/item/clothing)) + GLOB.cryoed_item_list_clothing += src + else if(isfood(src)) + GLOB.cryoed_item_list_food += src + else if(istype(src, /obj/item/reagent_containers/hypospray) || istype(src, /obj/item/reagent_containers/syringe) || istype(src, /obj/item/reagent_containers/pill)) + GLOB.cryoed_item_list_drugs += src + else if(istype(src, /obj/item/storage)) + GLOB.cryoed_item_list_containers += src + else + GLOB.cryoed_item_list_other += src /obj/item/storage/store_in_cryo() for(var/obj/item/I AS in src) I.store_in_cryo() return ..() -/obj/machinery/cryopod/attackby(obj/item/I, mob/user, params) +/obj/machinery/cryopod/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) . = ..() - - if(!istype(I, /obj/item/grab)) - return - - else if(isxeno(user)) - return - - var/obj/item/grab/G = I - if(!isliving(G.grabbed_thing)) + if(.) return - - if(!QDELETED(occupant)) - to_chat(user, span_warning("[src] is occupied.")) + if(isxeno(user)) return - - var/mob/living/M = G.grabbed_thing - - if(M.stat == DEAD) //This mob is dead - to_chat(user, span_warning("[src] immediately rejects [M]. [M.p_they(TRUE)] passed away!")) + var/mob/living/carbon/human/grabbed_mob = grab.grabbed_thing + if(!ishuman(grabbed_mob)) + to_chat(user, span_warning("There is no way [src] will accept [grabbed_mob]!")) return - if(!ishuman(M)) - to_chat(user, span_warning("There is no way [src] will accept [M]!")) - return - - if(M.client) - if(tgui_alert(M, "Would you like to enter cryosleep?", null, list("Yes", "No")) == "Yes") - if(QDELETED(M) || !(G?.grabbed_thing == M)) + if(grabbed_mob.client) + if(tgui_alert(grabbed_mob, "Would you like to enter cryosleep?", null, list("Yes", "No")) == "Yes") + if(QDELETED(grabbed_mob) || !(grab?.grabbed_thing == grabbed_mob)) return else return - climb_in(M, user) + climb_in(grabbed_mob, user) + + return TRUE /obj/machinery/cryopod/verb/eject() set name = "Eject Pod" @@ -313,15 +476,25 @@ occupant = null update_icon() -/obj/machinery/cryopod/attack_alien(mob/living/carbon/xenomorph/X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) +/obj/machinery/cryopod/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) if(!occupant) - to_chat(X, span_xenowarning("There is nothing of interest in there.")) + to_chat(xeno_attacker, span_xenowarning("There is nothing of interest in there.")) return - if(X.status_flags & INCORPOREAL || X.do_actions) + if(xeno_attacker.status_flags & INCORPOREAL || xeno_attacker.do_actions) return - visible_message(span_warning("[X] begins to pry the [src]'s cover!"), 3) + visible_message(span_warning("[xeno_attacker] begins to pry the [src]'s cover!"), 3) playsound(src,'sound/effects/metal_creaking.ogg', 25, 1) - if(!do_after(X, 2 SECONDS)) + if(!do_after(xeno_attacker, 2 SECONDS)) return playsound(loc, 'sound/effects/metal_creaking.ogg', 25, 1) go_out() + +#undef STATE_GUN +#undef STATE_AMMO +#undef STATE_EXPLOSIVE +#undef STATE_MELEE +#undef STATE_CLOTHING +#undef STATE_FOOD +#undef STATE_DRUGS +#undef STATE_CONTAINERS +#undef STATE_OTHER diff --git a/code/game/objects/machinery/deployable.dm b/code/game/objects/machinery/deployable.dm index 14465a874d949..4d2b0d0708bad 100644 --- a/code/game/objects/machinery/deployable.dm +++ b/code/game/objects/machinery/deployable.dm @@ -1,5 +1,5 @@ /obj/machinery/deployable - flags_atom = PREVENT_CONTENTS_EXPLOSION + atom_flags = PREVENT_CONTENTS_EXPLOSION hud_possible = list(MACHINE_HEALTH_HUD) obj_flags = CAN_BE_HIT allow_pass_flags = PASS_AIR @@ -58,8 +58,8 @@ var/obj/item/item = get_internal_item() if(!item) return - if(CHECK_BITFIELD(item.flags_item, DEPLOYED_NO_PICKUP)) - to_chat(user, span_notice("The [src] is anchored in place and cannot be disassembled.")) + if(CHECK_BITFIELD(item.item_flags, DEPLOYED_NO_PICKUP)) + balloon_alert(user, "Cannot disassemble") return operator?.unset_interaction() SEND_SIGNAL(src, COMSIG_ITEM_UNDEPLOY, user) @@ -77,7 +77,7 @@ var/obj/item/_internal_item = get_internal_item() if(!_internal_item) return - if(CHECK_BITFIELD(_internal_item.flags_item, DEPLOYED_WRENCH_DISASSEMBLE)) + if(CHECK_BITFIELD(_internal_item.item_flags, DEPLOYED_WRENCH_DISASSEMBLE)) to_chat(user, span_notice("You cannot disassemble [src] without a wrench.")) return disassemble(user) @@ -86,7 +86,7 @@ var/obj/item/_internal_item = get_internal_item() if(!_internal_item) return - if(!CHECK_BITFIELD(_internal_item.flags_item, DEPLOYED_WRENCH_DISASSEMBLE)) + if(!CHECK_BITFIELD(_internal_item.item_flags, DEPLOYED_WRENCH_DISASSEMBLE)) return ..() disassemble(user) @@ -99,8 +99,8 @@ if(EXPLODE_DEVASTATE) qdel(src) if(EXPLODE_HEAVY) - take_damage(200, damage_flag = BOMB, effects = TRUE) + take_damage(200, armor_type = BOMB, effects = TRUE) if(EXPLODE_LIGHT) - take_damage(100, damage_flag = BOMB, effects = TRUE) + take_damage(100, armor_type = BOMB, effects = TRUE) if(EXPLODE_WEAK) - take_damage(50, damage_flag = BOMB, effects = TRUE) + take_damage(50, armor_type = BOMB, effects = TRUE) diff --git a/code/game/objects/machinery/door_control.dm b/code/game/objects/machinery/door_control.dm index 4bff08604124c..d7e5c252a920f 100644 --- a/code/game/objects/machinery/door_control.dm +++ b/code/game/objects/machinery/door_control.dm @@ -128,6 +128,7 @@ update_icon() /obj/machinery/door_control/update_icon_state() + . = ..() if(machine_stat & NOPOWER) icon_state = "doorctrl-p" else if(pressed) @@ -141,6 +142,8 @@ /obj/machinery/driver_button/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/detective_scanner)) return @@ -281,6 +284,7 @@ directional = FALSE /obj/machinery/door_control/old/update_icon_state() + . = ..() if(machine_stat & NOPOWER) icon_state = "olddoorctrl-p" else if(pressed) diff --git a/code/game/objects/machinery/door_display/door_display.dm b/code/game/objects/machinery/door_display/door_display.dm index 18d81891c61f8..43b7c871812e0 100644 --- a/code/game/objects/machinery/door_display/door_display.dm +++ b/code/game/objects/machinery/door_display/door_display.dm @@ -110,17 +110,17 @@ //icon update function // if NOPOWER, display blank // if BROKEN, display blue screen of death icon AI uses -/obj/machinery/door_display/update_icon() - cut_overlays() - if (machine_stat & (NOPOWER)) +/obj/machinery/door_display/update_overlays() + . = ..() + if(machine_stat & (NOPOWER)) return - if (machine_stat & (BROKEN)) - add_overlay("ai_bsod") + if(machine_stat & (BROKEN)) + . += "ai_bsod" return if(open) - add_overlay("open") + . += "open" else - add_overlay("closed") + . += "closed" //************ RESEARCH DOORS ****************\\ // Research cells have flashers and shutters/pod doors. diff --git a/code/game/objects/machinery/doors/airlock.dm b/code/game/objects/machinery/doors/airlock.dm old mode 100644 new mode 100755 index a26410a7f22c8..2b8b10b3ab1dc --- a/code/game/objects/machinery/doors/airlock.dm +++ b/code/game/objects/machinery/doors/airlock.dm @@ -7,7 +7,7 @@ use_power = IDLE_POWER_USE idle_power_usage = 5 active_power_usage = 360 - flags_atom = HTML_USE_INITAL_ICON_1 + atom_flags = HTML_USE_INITAL_ICON_1 obj_flags = CAN_BE_HIT var/aiControlDisabled = 0 //If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in. @@ -63,6 +63,8 @@ /obj/machinery/door/airlock/LateInitialize() . = ..() + if(cyclelinkeddir) + cyclelinkairlock() if(!abandoned) return var/outcome = rand(1,40) @@ -84,6 +86,28 @@ if(24 to 30) machine_stat ^= PANEL_OPEN +///connect potential airlocks to each other for cycling +/obj/machinery/door/airlock/proc/cyclelinkairlock() + if (cycle_linked_airlock) + cycle_linked_airlock.cycle_linked_airlock = null + cycle_linked_airlock = null + if (!cyclelinkeddir) + return + var/limit = world.view + var/turf/T = get_turf(src) + var/obj/machinery/door/airlock/FoundDoor + do + T = get_step(T, cyclelinkeddir) + FoundDoor = locate() in T + if (FoundDoor && FoundDoor.cyclelinkeddir != get_dir(FoundDoor, src)) + FoundDoor = null + limit-- + while(!FoundDoor && limit) + if (!FoundDoor) + return + FoundDoor.cycle_linked_airlock = src + cycle_linked_airlock = FoundDoor + /obj/machinery/door/airlock/proc/isElectrified() if(secondsElectrified != MACHINE_NOT_ELECTRIFIED) return TRUE @@ -91,6 +115,8 @@ /obj/machinery/door/airlock/proc/canAIControl(mob/user) + if(hackProof) + return if(z != user.z) return return ((aiControlDisabled != 1) && !isAllPowerCut()) @@ -182,25 +208,45 @@ else return 0 - -/obj/machinery/door/airlock/update_icon() - if(overlays) overlays.Cut() +/obj/machinery/door/airlock/update_icon_state() + . = ..() if(density) - if(emergency && hasPower()) - overlays += image(icon, "emergency_access_on") if(locked && lights) icon_state = "door_locked" else icon_state = "door_closed" - if(CHECK_BITFIELD(machine_stat, PANEL_OPEN) || welded) - overlays = list() - if(CHECK_BITFIELD(machine_stat, PANEL_OPEN)) - overlays += image(icon, "panel_open") - if(welded) - overlays += image(icon, "welded") else icon_state = "door_open" +/obj/machinery/door/airlock/update_overlays() + . = ..() + if(!density) + return + if(emergency && hasPower()) + . += image(icon, "emergency_access_on") + if(CHECK_BITFIELD(machine_stat, PANEL_OPEN)) + . += image(icon, "panel_open") + if(welded) + . += image(icon, "welded") + if(hasPower() && unres_sides) + for(var/heading in list(NORTH,SOUTH,EAST,WEST)) + if(!(unres_sides & heading)) + continue + var/image/access_overlay = image('icons/obj/doors/overlays.dmi', "unres_[heading]", layer = DOOR_HELPER_LAYER, pixel_y = -4) + switch(heading) + if(NORTH) + access_overlay.pixel_x = 0 + access_overlay.pixel_y = 32 + if(SOUTH) + access_overlay.pixel_x = 0 + access_overlay.pixel_y = -32 + if(EAST) + access_overlay.pixel_x = 32 + access_overlay.pixel_y = 0 + if(WEST) + access_overlay.pixel_x = -32 + access_overlay.pixel_y = 0 + . += access_overlay /obj/machinery/door/airlock/do_animate(animation) switch(animation) @@ -227,46 +273,46 @@ //Prying open doors -/obj/machinery/door/airlock/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/machinery/door/airlock/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return FALSE - var/turf/cur_loc = X.loc + var/turf/cur_loc = xeno_attacker.loc if(isElectrified()) - if(shock(X, 70)) + if(shock(xeno_attacker, 70)) return if(locked) - to_chat(X, span_warning("\The [src] is bolted down tight.")) + to_chat(xeno_attacker, span_warning("\The [src] is bolted down tight.")) return FALSE if(welded) - to_chat(X, span_warning("\The [src] is welded shut.")) + to_chat(xeno_attacker, span_warning("\The [src] is welded shut.")) return FALSE if(!istype(cur_loc)) return FALSE //Some basic logic here if(!density) - to_chat(X, span_warning("\The [src] is already open!")) + to_chat(xeno_attacker, span_warning("\The [src] is already open!")) return FALSE - if(X.do_actions) + if(xeno_attacker.do_actions) return FALSE playsound(loc, 'sound/effects/metal_creaking.ogg', 25, 1) if(hasPower()) - X.visible_message(span_warning("\The [X] digs into \the [src] and begins to pry it open."), \ + xeno_attacker.visible_message(span_warning("\The [xeno_attacker] digs into \the [src] and begins to pry it open."), \ span_warning("We dig into \the [src] and begin to pry it open."), null, 5) - if(!do_after(X, 4 SECONDS, IGNORE_HELD_ITEM, src, BUSY_ICON_HOSTILE) && !X.lying_angle) + if(!do_after(xeno_attacker, 4 SECONDS, IGNORE_HELD_ITEM, src, BUSY_ICON_HOSTILE) && !xeno_attacker.lying_angle) return FALSE if(locked) - to_chat(X, span_warning("\The [src] is bolted down tight.")) + to_chat(xeno_attacker, span_warning("\The [src] is bolted down tight.")) return FALSE if(welded) - to_chat(X, span_warning("\The [src] is welded shut.")) + to_chat(xeno_attacker, span_warning("\The [src] is welded shut.")) return FALSE if(density) //Make sure it's still closed open(TRUE) - X.visible_message(span_danger("\The [X] pries \the [src] open."), \ + xeno_attacker.visible_message(span_danger("\The [xeno_attacker] pries \the [src] open."), \ span_danger("We pry \the [src] open."), null, 5) /obj/machinery/door/airlock/attack_larva(mob/living/carbon/xenomorph/larva/M) @@ -307,6 +353,8 @@ /obj/machinery/door/airlock/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/clothing/mask/cigarette) && isElectrified()) var/obj/item/clothing/mask/cigarette/L = I diff --git a/code/game/objects/machinery/doors/airlock_control.dm b/code/game/objects/machinery/doors/airlock_control.dm index 60a254001d1b8..76fa2d62910ab 100644 --- a/code/game/objects/machinery/doors/airlock_control.dm +++ b/code/game/objects/machinery/doors/airlock_control.dm @@ -149,6 +149,7 @@ /obj/machinery/access_button/update_icon_state() + . = ..() if(on) icon_state = "access_button_standby" else @@ -156,6 +157,8 @@ /obj/machinery/access_button/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/card/id)) attack_hand(user) diff --git a/code/game/objects/machinery/doors/door.dm b/code/game/objects/machinery/doors/door.dm old mode 100644 new mode 100755 index bd76a3b972de1..ba9b41ebde229 --- a/code/game/objects/machinery/doors/door.dm +++ b/code/game/objects/machinery/doors/door.dm @@ -21,14 +21,20 @@ var/operating = FALSE var/autoclose = FALSE var/glass = FALSE + /// Unrestricted sides. A bitflag for which direction (if any) can open the door with no access + var/unres_sides = NONE var/normalspeed = TRUE var/locked = FALSE var/welded = FALSE var/not_weldable = FALSE // stops people welding the door if true var/openspeed = 10 //How many seconds does it take to open it? Default 1 second. Use only if you have long door opening animations var/list/fillers - //used for determining emergency access + ///used for determining emergency access var/emergency = FALSE + ///bool for determining linked state + var/cyclelinkeddir = FALSE + ///what airlock we are linked with + var/obj/machinery/door/airlock/cycle_linked_airlock //Multi-tile doors dir = EAST @@ -38,14 +44,14 @@ . = ..() if(density) layer = closed_layer - update_flags_heat_protection(get_turf(src)) + update_heat_protection_flags(get_turf(src)) else layer = open_layer if(width > 1) handle_multidoor() var/turf/current_turf = get_turf(src) - current_turf.flags_atom &= ~ AI_BLOCKED + current_turf.atom_flags &= ~ AI_BLOCKED if(glass) allow_pass_flags |= PASS_GLASS @@ -100,11 +106,17 @@ user = null if(density) - if(allowed(user) || emergency) + if(allowed(user) || emergency || unrestricted_side(user)) + if(cycle_linked_airlock) + if(!emergency && !cycle_linked_airlock.emergency && allowed(user)) + cycle_linked_airlock.close() open() else flick("door_deny", src) +///Allows for specific sides of airlocks to be unrestricted (IE, can exit maint freely, but need access to enter) +/obj/machinery/door/proc/unrestricted_side(mob/opener) + return get_dir(src, opener) & unres_sides /obj/machinery/door/attack_hand(mob/living/user) . = ..() @@ -160,7 +172,8 @@ s.start() -/obj/machinery/door/update_icon() +/obj/machinery/door/update_icon_state() + . = ..() if(density) icon_state = "door1" else @@ -235,7 +248,7 @@ /obj/machinery/door/proc/hasPower() return !CHECK_BITFIELD(machine_stat, NOPOWER) -/obj/machinery/door/proc/update_flags_heat_protection(turf/source) +/obj/machinery/door/proc/update_heat_protection_flags(turf/source) /obj/machinery/door/proc/autoclose() if(!density && !operating && !locked && !welded && autoclose) diff --git a/code/game/objects/machinery/doors/firedoor.dm b/code/game/objects/machinery/doors/firedoor.dm index 8dd7ddca4d5e1..a0f1ed4fdb40a 100644 --- a/code/game/objects/machinery/doors/firedoor.dm +++ b/code/game/objects/machinery/doors/firedoor.dm @@ -48,7 +48,7 @@ . = ..() for(var/obj/machinery/door/firedoor/F in loc) if(F != src) - flags_atom |= INITIALIZED + atom_flags |= INITIALIZED return INITIALIZE_HINT_QDEL var/area/A = get_area(src) ASSERT(istype(A)) @@ -117,32 +117,32 @@ return ..() return FALSE -/obj/machinery/door/firedoor/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/machinery/door/firedoor/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return FALSE - var/turf/cur_loc = X.loc + var/turf/cur_loc = xeno_attacker.loc if(blocked) - to_chat(X, span_warning("\The [src] is welded shut.")) + to_chat(xeno_attacker, span_warning("\The [src] is welded shut.")) return FALSE if(!istype(cur_loc)) return FALSE //Some basic logic here if(!density) - to_chat(X, span_warning("\The [src] is already open!")) + to_chat(xeno_attacker, span_warning("\The [src] is already open!")) return FALSE playsound(loc, 'sound/effects/metal_creaking.ogg', 25, 1) - X.visible_message(span_warning("\The [X] digs into \the [src] and begins to pry it open."), \ + xeno_attacker.visible_message(span_warning("\The [xeno_attacker] digs into \the [src] and begins to pry it open."), \ span_warning("We dig into \the [src] and begin to pry it open."), null, 5) - if(do_after(X, 30, IGNORE_HELD_ITEM, src, BUSY_ICON_BUILD)) + if(do_after(xeno_attacker, 30, IGNORE_HELD_ITEM, src, BUSY_ICON_BUILD)) if(blocked) - to_chat(X, span_warning("\The [src] is welded shut.")) + to_chat(xeno_attacker, span_warning("\The [src] is welded shut.")) return FALSE if(density) //Make sure it's still closed spawn(0) open(1) - X.visible_message(span_danger("\The [X] pries \the [src] open."), \ + xeno_attacker.visible_message(span_danger("\The [xeno_attacker] pries \the [src] open."), \ span_danger("We pry \the [src] open."), null, 5) /obj/machinery/door/firedoor/attack_hand(mob/living/user) @@ -158,7 +158,7 @@ var/alarmed = lockdown for(var/area/A in areas_added) //Checks if there are fire alarms in any areas associated with that firedoor - if(A.flags_alarm_state & ALARM_WARNING_FIRE || A.air_doors_activated) + if(A.alarm_state_flags & ALARM_WARNING_FIRE || A.air_doors_activated) alarmed = TRUE var/answer = tgui_alert(user, "Would you like to [density ? "open" : "close"] this [src.name]?[ alarmed && density ? "\nNote that by doing so, you acknowledge any damages from opening this\n[src.name] as being your own fault, and you will be held accountable under the law." : ""]",\ @@ -194,7 +194,7 @@ spawn(50) alarmed = FALSE for(var/area/A in areas_added) //Just in case a fire alarm is turned off while the firedoor is going through an autoclose cycle - if(A.flags_alarm_state & ALARM_WARNING_FIRE || A.air_doors_activated) + if(A.alarm_state_flags & ALARM_WARNING_FIRE || A.air_doors_activated) alarmed = TRUE if(alarmed) nextstate = FIREDOOR_CLOSED @@ -202,6 +202,8 @@ /obj/machinery/door/firedoor/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(operating) return @@ -287,26 +289,29 @@ flick("door_closing", src) playsound(loc, 'sound/machines/emergency_shutter.ogg', 25) - -/obj/machinery/door/firedoor/update_icon() - overlays.Cut() +/obj/machinery/door/firedoor/update_icon_state() + . = ..() if(density) icon_state = "door_closed" + else + icon_state = "door_open" + +/obj/machinery/door/firedoor/update_overlays() + . = ..() + if(density) if(blocked) - overlays += "welded" + . += "welded" if(pdiff_alert) - overlays += "palert" + . += "palert" if(dir_alerts) for(var/d=1;d<=4;d++) var/cdir = GLOB.cardinals[d] for(var/i=1;i<=length(ALERT_STATES);i++) if(dir_alerts[d] & (1<<(i-1))) - overlays += new/icon(icon,"alert_[ALERT_STATES[i]]", dir=cdir) + . += new/icon(icon,"alert_[ALERT_STATES[i]]", dir=cdir) else - icon_state = "door_open" if(blocked) - overlays += "welded_open" - + . += "welded_open" /obj/machinery/door/firedoor/mainship name = "\improper Emergency Shutter" @@ -323,7 +328,7 @@ /obj/machinery/door/firedoor/border_only icon = 'icons/obj/doors/edge_Doorfire.dmi' - flags_atom = ON_BORDER + atom_flags = ON_BORDER allow_pass_flags = PASS_GLASS /obj/machinery/door/firedoor/border_only/Initialize(mapload) diff --git a/code/game/objects/machinery/doors/multi_tile.dm b/code/game/objects/machinery/doors/multi_tile.dm index 69595ac2e6439..9972fa1607245 100644 --- a/code/game/objects/machinery/doors/multi_tile.dm +++ b/code/game/objects/machinery/doors/multi_tile.dm @@ -2,10 +2,10 @@ /obj/machinery/door/airlock/multi_tile width = 2 -/obj/machinery/door/airlock/multi_tile/close() //Nasty as hell O(n^2) code but unfortunately necessary +/obj/machinery/door/airlock/multi_tile/close() //Nasty as hell O(n^2) code but unfortunately necessary //honestly probably not, TODO fixme for(var/turf/T in locs) - for(var/obj/vehicle/multitile/M in T) - if(M) return FALSE + for(var/obj/hitbox/hit in T) + return FALSE return ..() @@ -133,12 +133,11 @@ /obj/machinery/door/airlock/multi_tile/mainship/blackgeneric name = "\improper Airlock" icon = 'icons/obj/doors/mainship/2x1almayerdoor.dmi' - opacity = FALSE - glass = FALSE /obj/machinery/door/airlock/multi_tile/mainship/blackgeneric/glass name = "\improper Glass Airlock" icon = 'icons/obj/doors/mainship/2x1almayerdoor_glass.dmi' + opacity = FALSE glass = TRUE //PREP DOORS @@ -314,8 +313,6 @@ /obj/machinery/door/airlock/multi_tile/mainship/engineering name = "\improper Engineering Airlock" icon = 'icons/obj/doors/mainship/2x1engidoor.dmi' - opacity = FALSE - glass = FALSE req_one_access = list(ACCESS_MARINE_LOGISTICS, ACCESS_MARINE_ENGINEERING) /obj/machinery/door/airlock/multi_tile/mainship/engineering/glass diff --git a/code/game/objects/machinery/doors/poddoor.dm b/code/game/objects/machinery/doors/poddoor.dm index fecb6742f6045..ecf8149440e58 100644 --- a/code/game/objects/machinery/doors/poddoor.dm +++ b/code/game/objects/machinery/doors/poddoor.dm @@ -15,12 +15,12 @@ . = ..() var/turf/current_turf = get_turf(src) if(anchored && current_turf && density) - current_turf.flags_atom |= AI_BLOCKED + current_turf.atom_flags |= AI_BLOCKED /obj/machinery/door/poddoor/Destroy() var/turf/current_turf = get_turf(src) if(anchored && current_turf && density) - current_turf.flags_atom &= ~AI_BLOCKED + current_turf.atom_flags &= ~AI_BLOCKED return ..() /obj/machinery/door/poddoor/bumpopen(mob/user) @@ -30,13 +30,13 @@ . = ..() var/turf/current_turf = get_turf(src) if(anchored && current_turf && density) - current_turf.flags_atom &= ~AI_BLOCKED + current_turf.atom_flags &= ~AI_BLOCKED /obj/machinery/door/poddoor/close() . = ..() var/turf/current_turf = get_turf(src) if(anchored && current_turf && density) - current_turf.flags_atom |= AI_BLOCKED + current_turf.atom_flags |= AI_BLOCKED /obj/machinery/door/poddoor/Bumped(atom/AM) if(!density) @@ -48,7 +48,8 @@ /obj/machinery/door/poddoor/try_to_activate_door(mob/user) return -/obj/machinery/door/poddoor/update_icon() +/obj/machinery/door/poddoor/update_icon_state() + . = ..() if(density) icon_state = "pdoor1" else @@ -98,7 +99,6 @@ /obj/machinery/door/poddoor/telecomms name = "Telecomms Emergency Window" id = "tcomwind" - opacity = FALSE /obj/machinery/door/poddoor/two_tile_hor icon = 'icons/obj/doors/1x2blast_hor.dmi' @@ -266,14 +266,14 @@ . = ..() if(mapload) var/area/ourarea = get_area(src) - ENABLE_BITFIELD(ourarea.flags_area, DISALLOW_WEEDING) - ENABLE_BITFIELD(ourarea.flags_area, NEAR_FOB) + ENABLE_BITFIELD(ourarea.area_flags, DISALLOW_WEEDING) + ENABLE_BITFIELD(ourarea.area_flags, NEAR_FOB) /obj/machinery/door/poddoor/timed_late/containment/landing_zone/open() . = ..() var/area/ourarea = get_area(src) - DISABLE_BITFIELD(ourarea.flags_area, DISALLOW_WEEDING) + DISABLE_BITFIELD(ourarea.area_flags, DISALLOW_WEEDING) /obj/machinery/door/poddoor/timed_late/containment/landing_zone id = "landing_zone" diff --git a/code/game/objects/machinery/doors/railing.dm b/code/game/objects/machinery/doors/railing.dm index 65fcc85836118..35a2312795acc 100644 --- a/code/game/objects/machinery/doors/railing.dm +++ b/code/game/objects/machinery/doors/railing.dm @@ -3,7 +3,7 @@ icon = 'icons/obj/doors/railing.dmi' icon_state = "railing1" use_power = 0 - flags_atom = ON_BORDER + atom_flags = ON_BORDER allow_pass_flags = PASSABLE opacity = FALSE open_layer = CATWALK_LAYER @@ -57,7 +57,8 @@ return TRUE -/obj/machinery/door/poddoor/railing/update_icon() +/obj/machinery/door/poddoor/railing/update_icon_state() + . = ..() if(density) icon_state = "railing1" else @@ -68,7 +69,7 @@ operating = FALSE var/turf/current_turf = get_turf(src) if(current_turf) - current_turf.flags_atom &= ~AI_BLOCKED + current_turf.atom_flags &= ~AI_BLOCKED /obj/machinery/door/poddoor/railing/close() if (!SSticker || operating || density) @@ -81,7 +82,7 @@ icon_state = "railing1" var/turf/current_turf = get_turf(src) if(current_turf) - current_turf.flags_atom |= AI_BLOCKED + current_turf.atom_flags |= AI_BLOCKED addtimer(CALLBACK(src, PROC_REF(do_close)), 12) return TRUE diff --git a/code/game/objects/machinery/doors/shutters.dm b/code/game/objects/machinery/doors/shutters.dm index 3d019311d6513..81cee63954d24 100644 --- a/code/game/objects/machinery/doors/shutters.dm +++ b/code/game/objects/machinery/doors/shutters.dm @@ -55,7 +55,8 @@ operating = FALSE -/obj/machinery/door/poddoor/shutters/update_icon() +/obj/machinery/door/poddoor/shutters/update_icon_state() + . = ..() if(operating) return icon_state = "shutter[density]" diff --git a/code/game/objects/machinery/doors/windowdoor.dm b/code/game/objects/machinery/doors/windowdoor.dm index 56389874d968e..ab4c9a7d900d2 100644 --- a/code/game/objects/machinery/doors/windowdoor.dm +++ b/code/game/objects/machinery/doors/windowdoor.dm @@ -11,7 +11,7 @@ soft_armor = list(MELEE = 20, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 100, FIRE = 70, ACID = 100) visible = FALSE use_power = FALSE - flags_atom = ON_BORDER + atom_flags = ON_BORDER allow_pass_flags = PASS_GLASS opacity = FALSE var/obj/item/circuitboard/airlock/electronics = null @@ -44,7 +44,8 @@ return ..() -/obj/machinery/door/window/update_icon() +/obj/machinery/door/window/update_icon_state() + . = ..() if(operating) return icon_state = density ? base_state : "[base_state]open" @@ -128,6 +129,8 @@ /obj/machinery/door/window/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(operating) return TRUE diff --git a/code/game/objects/machinery/dropship_part_fabricator.dm b/code/game/objects/machinery/dropship_part_fabricator.dm index d2024fea2e511..0d7ccebc193da 100644 --- a/code/game/objects/machinery/dropship_part_fabricator.dm +++ b/code/game/objects/machinery/dropship_part_fabricator.dm @@ -19,6 +19,7 @@ var/busy = FALSE /obj/machinery/dropship_part_fabricator/update_icon_state() + . = ..() if(machine_stat & NOPOWER) icon_state = "drone_fab_nopower" return diff --git a/code/game/objects/machinery/fax.dm b/code/game/objects/machinery/fax.dm index f39f5fc0e5158..4291cce94f600 100644 --- a/code/game/objects/machinery/fax.dm +++ b/code/game/objects/machinery/fax.dm @@ -144,6 +144,8 @@ /obj/machinery/faxmachine/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/paper)) if(!message) user.transferItemToLoc(I, src) diff --git a/code/game/objects/machinery/fire_alarm.dm b/code/game/objects/machinery/fire_alarm.dm index 23d03243cb0ae..4c95dc3aed05b 100644 --- a/code/game/objects/machinery/fire_alarm.dm +++ b/code/game/objects/machinery/fire_alarm.dm @@ -56,7 +56,7 @@ FIRE ALARM return var/area/A = get_area(src) - if(A.flags_alarm_state & ALARM_WARNING_FIRE) + if(A.alarm_state_flags & ALARM_WARNING_FIRE) set_light_color(LIGHT_COLOR_EMISSIVE_ORANGE) else switch(GLOB.marine_main_ship.get_security_level()) @@ -74,7 +74,7 @@ FIRE ALARM /obj/machinery/firealarm/update_icon_state() . = ..() var/area/A = get_area(src) - icon_state = "fire[!CHECK_BITFIELD(A.flags_alarm_state, ALARM_WARNING_FIRE)]" + icon_state = "fire[!CHECK_BITFIELD(A.alarm_state_flags, ALARM_WARNING_FIRE)]" /obj/machinery/firealarm/update_overlays() . = ..() @@ -86,7 +86,7 @@ FIRE ALARM . += emissive_appearance(icon, "fire_o[(is_mainship_level(z)) ? GLOB.marine_main_ship.get_security_level() : "green"]") . += mutable_appearance(icon, "fire_o[(is_mainship_level(z)) ? GLOB.marine_main_ship.get_security_level() : "green"]") var/area/A = get_area(src) - if(A.flags_alarm_state & ALARM_WARNING_FIRE) + if(A.alarm_state_flags & ALARM_WARNING_FIRE) . += mutable_appearance(icon, "fire_o1") /obj/machinery/firealarm/fire_act(temperature, volume) @@ -100,6 +100,8 @@ FIRE ALARM /obj/machinery/firealarm/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(isscrewdriver(I) && buildstage == 2) wiresexposed = !wiresexposed @@ -176,7 +178,7 @@ FIRE ALARM var/d1 var/d2 - if (A.flags_alarm_state & ALARM_WARNING_FIRE) + if (A.alarm_state_flags & ALARM_WARNING_FIRE) d1 = "Reset - Lockdown" else d1 = "Alarm - Lockdown" diff --git a/code/game/objects/machinery/flasher.dm b/code/game/objects/machinery/flasher.dm index f269b918c1ef6..c714e2cfa5e5d 100644 --- a/code/game/objects/machinery/flasher.dm +++ b/code/game/objects/machinery/flasher.dm @@ -34,6 +34,7 @@ /obj/machinery/flasher/update_icon_state() + . = ..() if(!(machine_stat & NOPOWER)) icon_state = "[base_state]1" else @@ -105,6 +106,8 @@ /obj/machinery/flasher/portable/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(iswrench(I)) anchored = !anchored @@ -120,6 +123,8 @@ /obj/machinery/flasher_button/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return return attack_hand(user) /obj/machinery/flasher_button/attack_hand(mob/living/user) diff --git a/code/game/objects/machinery/floodlight.dm b/code/game/objects/machinery/floodlight.dm index f16b5e2addcc9..c981aea68462b 100644 --- a/code/game/objects/machinery/floodlight.dm +++ b/code/game/objects/machinery/floodlight.dm @@ -125,6 +125,7 @@ turn_light(user, !light_on) /obj/machinery/deployable/floodlight/update_icon_state() + . = ..() icon_state = "floodlightcombat_deployed" + (light_on ? "_on" : "_off") /obj/item/deployable_floodlight @@ -133,7 +134,7 @@ icon = 'icons/obj/machines/floodlight.dmi' icon_state = "floodlightcombat" max_integrity = 200 - flags_item = IS_DEPLOYABLE + item_flags = IS_DEPLOYABLE w_class = WEIGHT_CLASS_NORMAL var/deployable_item = /obj/machinery/deployable/floodlight @@ -177,7 +178,7 @@ update_icon() -/obj/machinery/floodlight/colony/update_icon() +/obj/machinery/floodlight/colony/update_icon_state() . = ..() if(light_on) icon_state = "floodon" @@ -199,7 +200,7 @@ resistance_flags = RESIST_ALL var/turned_on = FALSE //has to be toggled in engineering -/obj/machinery/colony_floodlight_switch/update_icon() +/obj/machinery/colony_floodlight_switch/update_icon_state() . = ..() if(machine_stat & NOPOWER) icon_state = "panelnopower" diff --git a/code/game/objects/machinery/fuelcell_recycler.dm b/code/game/objects/machinery/fuelcell_recycler.dm index a91363d75284a..8c37b8cb30dff 100644 --- a/code/game/objects/machinery/fuelcell_recycler.dm +++ b/code/game/objects/machinery/fuelcell_recycler.dm @@ -15,6 +15,8 @@ /obj/machinery/fuelcell_recycler/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/fuel_cell)) if(!cell_left) if(user.transferItemToLoc(I, src)) @@ -85,18 +87,22 @@ update_icon() -/obj/machinery/fuelcell_recycler/update_icon() - src.overlays.Cut() - +/obj/machinery/fuelcell_recycler/update_icon_state() + . = ..() if(machine_stat & (BROKEN|NOPOWER)) icon_state = "recycler0" + else + icon_state = "recycler" + +/obj/machinery/fuelcell_recycler/update_overlays() + . = ..() + + if(machine_stat & (BROKEN|NOPOWER)) if(cell_left != null) src.overlays += "recycler-left-cell" if(cell_right != null) src.overlays += "recycler-right-cell" return - else - icon_state = "recycler" var/overlay_builder = "recycler-" if(cell_left == null && cell_right == null) @@ -107,8 +113,8 @@ else overlay_builder += "left-charging" - src.overlays += overlay_builder - src.overlays += "recycler-left-cell" + . += overlay_builder + . += "recycler-left-cell" return else if(cell_left == null) if(cell_right.is_regenerated()) @@ -116,8 +122,8 @@ else overlay_builder += "right-charging" - src.overlays += overlay_builder - src.overlays += "recycler-right-cell" + . += overlay_builder + . += "recycler-right-cell" return else // both left and right cells are there if(cell_left.is_regenerated()) @@ -130,7 +136,6 @@ else overlay_builder += "-right-charging" - src.overlays += overlay_builder - src.overlays += "recycler-left-cell" - src.overlays += "recycler-right-cell" - return + . += overlay_builder + . += "recycler-left-cell" + . += "recycler-right-cell" diff --git a/code/game/objects/machinery/hologram.dm b/code/game/objects/machinery/hologram.dm index 1a6de82d0c063..878e61ba616de 100644 --- a/code/game/objects/machinery/hologram.dm +++ b/code/game/objects/machinery/hologram.dm @@ -335,11 +335,6 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/holopad/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) . = ..() - if(speaker && LAZYLEN(masters) && !radio_freq)//Master is mostly a safety in case lag hits or something. Radio_freq so AIs dont hear holopad stuff through radios. - for(var/mob/living/silicon/ai/master in masters) - if(masters[master] && speaker != master) - master.relay_speech(message, speaker, message_language, raw_message, radio_freq, spans, message_mode) - for(var/datum/holocall/holocall_to_update AS in holo_calls) if(holocall_to_update.connected_holopad == src && speaker != holocall_to_update.hologram) holocall_to_update.user.Hear(message, speaker, message_language, raw_message, radio_freq, spans, message_mode) @@ -359,6 +354,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ update_icon() /obj/machinery/holopad/update_icon_state() + . = ..() var/total_users = LAZYLEN(masters) + LAZYLEN(holo_calls) if(ringing) icon_state = "holopad_ringing" diff --git a/code/game/objects/machinery/holosign.dm b/code/game/objects/machinery/holosign.dm index 4217b4ba818dc..70940add018de 100644 --- a/code/game/objects/machinery/holosign.dm +++ b/code/game/objects/machinery/holosign.dm @@ -17,6 +17,7 @@ update_icon() /obj/machinery/holosign/update_icon_state() + . = ..() if(!lit) icon_state = "sign_off" else @@ -51,6 +52,8 @@ /obj/machinery/holosign_switch/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/detective_scanner)) return diff --git a/code/game/objects/machinery/igniter.dm b/code/game/objects/machinery/igniter.dm index fb08154766ea9..016a4c3fd8925 100644 --- a/code/game/objects/machinery/igniter.dm +++ b/code/game/objects/machinery/igniter.dm @@ -30,7 +30,8 @@ icon_state = "igniter[on]" -/obj/machinery/igniter/update_icon() +/obj/machinery/igniter/update_icon_state() + . = ..() if(is_operational()) icon_state = "igniter[on]" else @@ -52,17 +53,17 @@ var/base_state = "migniter" anchored = TRUE -/obj/machinery/sparker/update_icon() - if ( !(machine_stat & NOPOWER) && disable == 0 ) - +/obj/machinery/sparker/update_icon_state() + . = ..() + if(!(machine_stat & NOPOWER) && disable == 0) icon_state = "[base_state]" -// src.sd_SetLuminosity(2) else icon_state = "[base_state]-p" -// src.sd_SetLuminosity(0) /obj/machinery/sparker/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/detective_scanner)) return @@ -109,6 +110,8 @@ /obj/machinery/ignition_switch/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return return attack_hand(user) /obj/machinery/ignition_switch/attack_hand(mob/living/user) diff --git a/code/game/objects/machinery/iv_drip.dm b/code/game/objects/machinery/iv_drip.dm index 7ab2a83e7962b..0c5c2bcacf60f 100644 --- a/code/game/objects/machinery/iv_drip.dm +++ b/code/game/objects/machinery/iv_drip.dm @@ -10,37 +10,44 @@ var/obj/item/reagent_containers/beaker = null var/datum/beam/current_beam //RUTGMC ADDON -/obj/machinery/iv_drip/update_icon() - /* СМ КОСТЫЛЬ - if(src.attached) +/obj/machinery/iv_drip/update_icon_state() + . = ..() + if(attached) icon_state = "hooked" else icon_state = "" - */ - icon_state = "" //КОСТЫЛЬ - //У нас нет системы которая позволила бы изменить pixel x/y вары у начальной и конечной точек beam'а - //Поэтому оставляю 1 айкон стейт, чтобы не выглядело всё слишком плохо +/obj/machinery/iv_drip/update_overlays() + . = ..() - overlays = null + if(!beaker) + return - 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.color = mix_color_from_reagents(reagents.reagent_list) - overlays += filling + var/datum/reagents/reagents = beaker.reagents + if(!reagents?.total_volume) + return + + 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.color = mix_color_from_reagents(reagents.reagent_list) + . += filling /obj/machinery/iv_drip/MouseDrop(over_object, src_location, over_location) ..() @@ -70,6 +77,8 @@ /obj/machinery/iv_drip/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/reagent_containers)) if(beaker) diff --git a/code/game/objects/machinery/kitchen/gibber.dm b/code/game/objects/machinery/kitchen/gibber.dm index 38a85bf7d66f4..09cadb8dc5a8c 100644 --- a/code/game/objects/machinery/kitchen/gibber.dm +++ b/code/game/objects/machinery/kitchen/gibber.dm @@ -51,39 +51,32 @@ startgibbing(user) -/obj/machinery/gibber/attackby(obj/item/grab/I, mob/user, param) - . = ..() - +/obj/machinery/gibber/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + if(!is_operational()) + return ..() if(occupant) to_chat(user, span_warning("The gibber is full, empty it first!")) return - - else if(!(istype(I, /obj/item/grab)) ) + var/mob/living/grabbed_mob = grab.grabbed_thing + if(!iscarbon(grabbed_mob) && !istype(grabbed_mob, /mob/living/simple_animal)) to_chat(user, span_warning("This item is not suitable for the gibber!")) return - - else if(!iscarbon(I.grabbed_thing) && !istype(I.grabbed_thing, /mob/living/simple_animal)) - to_chat(user, span_warning("This item is not suitable for the gibber!")) - return - - var/mob/living/M = I.grabbed_thing if(user.grab_state < GRAB_AGGRESSIVE) to_chat(user, span_warning("You need a better grip to do that!")) return - - else if(M.abiotic(TRUE)) + if(grabbed_mob.abiotic(TRUE)) to_chat(user, span_warning("Subject may not have abiotic items on.")) return + user.visible_message(span_danger("[user] starts to put [grabbed_mob] into the gibber!")) - user.visible_message(span_danger("[user] starts to put [M] into the gibber!")) - - if(!do_after(user, 30, NONE, M, BUSY_ICON_DANGER) || QDELETED(src) || occupant) + if(!do_after(user, 30, NONE, grabbed_mob, BUSY_ICON_DANGER) || QDELETED(src) || occupant) return - user.visible_message(span_danger("[user] stuffs [M] into the gibber!")) - M.forceMove(src) - occupant = M + user.visible_message(span_danger("[user] stuffs [grabbed_mob] into the gibber!")) + grabbed_mob.forceMove(src) + occupant = grabbed_mob update_icon() + return TRUE /obj/machinery/gibber/verb/eject() set category = "Object" diff --git a/code/game/objects/machinery/kitchen/microwave.dm b/code/game/objects/machinery/kitchen/microwave.dm index 3e894ef52ba72..0141c1475b3bf 100644 --- a/code/game/objects/machinery/kitchen/microwave.dm +++ b/code/game/objects/machinery/kitchen/microwave.dm @@ -48,6 +48,8 @@ /obj/machinery/microwave/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(broken == 2 && isscrewdriver(I)) balloon_alert_to_viewers("starts to fix the microwave") @@ -120,14 +122,48 @@ return FALSE - else if(istype(I, /obj/item/grab)) - return TRUE - else balloon_alert(user, "Can't cook anything with this") return TRUE +/obj/machinery/microwave/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + if(!is_operational()) + return ..() + if(isxeno(user)) + return + if(user.do_actions) + return + if(!isliving(grab.grabbed_thing)) + return + if(user.a_intent != INTENT_HARM) + return + if(user.grab_state <= GRAB_AGGRESSIVE) + to_chat(user, span_warning("You need a better grip to do that!")) + return + var/mob/living/grabbed_mob = grab.grabbed_thing + if(grabbed_mob.mob_size > MOB_SIZE_HUMAN) + to_chat(user, span_warning("They're too big to fit!")) + return + user.visible_message(span_danger("[user] starts to force [grabbed_mob] into [src]!"), span_notice("You start to force [grabbed_mob] into [src]!")) + if(!do_after(user, 3 SECONDS, NONE, src, BUSY_ICON_HOSTILE, extra_checks = CALLBACK(src, PROC_REF(microwave_victim), grabbed_mob))) + playsound(src.loc, 'sound/machines/ding.ogg', 25, 1) + return + + user.visible_message(span_danger("[user] microwaves [grabbed_mob]!"), span_notice("You microwave [grabbed_mob]!"), "You hear sizzling.") + log_combat(user, grabbed_mob, "microwaved") + playsound(src.loc, 'sound/machines/ding.ogg', 25, 1) + return TRUE + +/obj/machinery/microwave/proc/microwave_victim(mob/living/victim) + victim.apply_damage(3, BURN, "head", ENERGY, updating_health = TRUE, penetration = 20) + victim.jitter(5) + if(prob(10)) + victim.emote("scream") + victim.adjustBrainLoss(5) + if(victim.stat != DEAD) + return TRUE + /obj/machinery/microwave/nopower use_power = NO_POWER_USE diff --git a/code/game/objects/machinery/kitchen/processor.dm b/code/game/objects/machinery/kitchen/processor.dm index aa139464bd6d7..79908c9c25081 100644 --- a/code/game/objects/machinery/kitchen/processor.dm +++ b/code/game/objects/machinery/kitchen/processor.dm @@ -37,6 +37,8 @@ /obj/machinery/processor/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(processing) to_chat(user, span_warning("The processor is in the process of processing.")) @@ -48,7 +50,7 @@ var/obj/O = I - if(istype(I, /obj/item/grab)) + if(isgrabitem(I)) var/obj/item/grab/G = I O = G.grabbed_thing @@ -61,6 +63,29 @@ user.drop_held_item() O.forceMove(src) +/obj/machinery/processor/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + if(!is_operational()) + return ..() + if(isxeno(user)) + return + if(!isliving(grab.grabbed_thing)) + return + if(user.a_intent != INTENT_HARM) + return + if(user.grab_state <= GRAB_AGGRESSIVE) + to_chat(user, span_warning("You need a better grip to do that!")) + return + var/mob/living/grabbed_mob = grab.grabbed_thing + user.visible_message(span_danger("[user] starts to force [grabbed_mob] into [src]!"), span_notice("You start to force [grabbed_mob] into [src]!")) + if(!do_after(user, 3 SECONDS, NONE, src, BUSY_ICON_HOSTILE)) + return + + user.visible_message(span_danger("[user] processes [grabbed_mob]!"), span_notice("You process [grabbed_mob]!"), "You hear churning.") + log_combat(user, grabbed_mob, "food processed") + playsound(loc, 'sound/machines/blender.ogg', 25, 1) + grabbed_mob.apply_damage(80, BRUTE, "head", MELEE, TRUE, updating_health = TRUE) + return TRUE + /obj/machinery/processor/attack_hand(mob/living/user) . = ..() if(.) diff --git a/code/game/objects/machinery/kitchen/smartfridge.dm b/code/game/objects/machinery/kitchen/smartfridge.dm index 1b8d4713d4a66..f3e1d3b43c143 100644 --- a/code/game/objects/machinery/kitchen/smartfridge.dm +++ b/code/game/objects/machinery/kitchen/smartfridge.dm @@ -41,8 +41,9 @@ if(src.shoot_inventory && prob(2)) src.throw_item() -/obj/machinery/smartfridge/update_icon() - if( !(machine_stat & NOPOWER) ) +/obj/machinery/smartfridge/update_icon_state() + . = ..() + if(!(machine_stat & NOPOWER)) icon_state = icon_on else icon_state = icon_off @@ -53,6 +54,8 @@ /obj/machinery/smartfridge/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(isscrewdriver(I)) TOGGLE_BITFIELD(machine_stat, PANEL_OPEN) diff --git a/code/game/objects/machinery/lightswitch.dm b/code/game/objects/machinery/lightswitch.dm index f4762b8f83a35..b810656ae3eaa 100644 --- a/code/game/objects/machinery/lightswitch.dm +++ b/code/game/objects/machinery/lightswitch.dm @@ -25,6 +25,7 @@ update_icon() /obj/machinery/light_switch/update_icon_state() + . = ..() if(machine_stat & NOPOWER) icon_state = "light-p" return diff --git a/code/game/objects/machinery/line_nexter.dm b/code/game/objects/machinery/line_nexter.dm index add6e694b9203..1e41d9835ec63 100644 --- a/code/game/objects/machinery/line_nexter.dm +++ b/code/game/objects/machinery/line_nexter.dm @@ -7,7 +7,7 @@ icon_state = "turnstile" anchored = TRUE allow_pass_flags = PASS_DEFENSIVE_STRUCTURE|PASSABLE - flags_atom = ON_BORDER + atom_flags = ON_BORDER dir = 8 var/last_use var/id diff --git a/code/game/objects/machinery/minelayer.dm b/code/game/objects/machinery/minelayer.dm index 796b63d617ed9..a13be8935aa52 100644 --- a/code/game/objects/machinery/minelayer.dm +++ b/code/game/objects/machinery/minelayer.dm @@ -4,7 +4,7 @@ icon = 'icons/Marine/marine-items.dmi' icon_state = "minelayer" max_integrity = 200 - flags_item = IS_DEPLOYABLE + item_flags = IS_DEPLOYABLE w_class = WEIGHT_CLASS_NORMAL ///amount of currently stored mines var/stored_mines = 0 @@ -65,6 +65,8 @@ /obj/machinery/deployable/minelayer/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/explosive/mine) && stored_amount <= max_amount) stored_amount++ qdel(I) diff --git a/code/game/objects/machinery/miner.dm b/code/game/objects/machinery/miner.dm index 6e09369e27e82..e9c971e301953 100644 --- a/code/game/objects/machinery/miner.dm +++ b/code/game/objects/machinery/miner.dm @@ -73,7 +73,8 @@ var/marker_icon = "miner_[mineral_value >= PLATINUM_CRATE_SELL_AMOUNT ? "platinum" : "phoron"]_on" SSminimaps.add_marker(src, MINIMAP_FLAG_ALL, image('modular_RUtgmc/icons/UI_icons/map_blips.dmi', null, marker_icon)) //RU TGMC edit -/obj/machinery/miner/update_icon() +/obj/machinery/miner/update_icon_state() + . = ..() switch(miner_status) if(MINER_RUNNING) icon_state = "mining_drill_active_[miner_upgrade_type]" @@ -127,6 +128,8 @@ /obj/machinery/miner/attackby(obj/item/I,mob/user,params) . = ..() + if(.) + return if(istype(I, /obj/item/minerupgrade)) var/obj/item/minerupgrade/upgrade = I if(!(miner_status == MINER_RUNNING)) @@ -173,13 +176,13 @@ user.visible_message(span_notice("[user] fumbles around figuring out [src]'s internals."), span_notice("You fumble around figuring out [src]'s internals.")) var/fumbling_time = 10 SECONDS - 2 SECONDS * user.skills.getRating(SKILL_ENGINEER) - if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED, extra_checks = CALLBACK(weldingtool, /obj/item/tool/weldingtool/proc/isOn))) + if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED, extra_checks = CALLBACK(weldingtool, TYPE_PROC_REF(/obj/item/tool/weldingtool, isOn)))) return FALSE playsound(loc, 'sound/items/weldingtool_weld.ogg', 25) user.visible_message(span_notice("[user] starts welding [src]'s internal damage."), span_notice("You start welding [src]'s internal damage.")) add_overlay(GLOB.welding_sparks) - if(!do_after(user, 200, NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(weldingtool, /obj/item/tool/weldingtool/proc/isOn))) + if(!do_after(user, 200, NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(weldingtool, TYPE_PROC_REF(/obj/item/tool/weldingtool, isOn)))) cut_overlay(GLOB.welding_sparks) return FALSE if(miner_status != MINER_DESTROYED ) @@ -313,26 +316,26 @@ else add_tick += 1 -/obj/machinery/miner/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) //Incorporeal xenos cannot attack physically. +/obj/machinery/miner/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) //Incorporeal xenos cannot attack physically. return - if(miner_upgrade_type == MINER_RESISTANT && !(X.mob_size == MOB_SIZE_BIG || X.xeno_caste.caste_flags & CASTE_IS_STRONG)) - X.visible_message(span_notice("[X]'s claws bounce off of [src]'s reinforced plating."), + if(miner_upgrade_type == MINER_RESISTANT && !(xeno_attacker.mob_size == MOB_SIZE_BIG || xeno_attacker.xeno_caste.caste_flags & CASTE_IS_STRONG)) + xeno_attacker.visible_message(span_notice("[xeno_attacker]'s claws bounce off of [src]'s reinforced plating."), span_notice("We can't slash through [src]'s reinforced plating!")) return while(miner_status != MINER_DESTROYED) - if(X.do_actions) - return balloon_alert(X, "busy") - if(!do_after(X, 1.5 SECONDS, NONE, src, BUSY_ICON_DANGER, BUSY_ICON_HOSTILE)) + if(xeno_attacker.do_actions) + return balloon_alert(xeno_attacker, "busy") + if(!do_after(xeno_attacker, 1.5 SECONDS, NONE, src, BUSY_ICON_DANGER, BUSY_ICON_HOSTILE)) return - X.do_attack_animation(src, ATTACK_EFFECT_CLAW) - X.visible_message(span_danger("[X] slashes \the [src]!"), \ + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_CLAW) + xeno_attacker.visible_message(span_danger("[xeno_attacker] slashes \the [src]!"), \ span_danger("We slash \the [src]!"), null, 5) playsound(loc, "alien_claw_metal", 25, TRUE) miner_integrity -= 25 set_miner_status() - if(miner_status == MINER_DESTROYED && X.client) - var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[X.ckey] + if(miner_status == MINER_DESTROYED && xeno_attacker.client) + var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[xeno_attacker.ckey] personal_statistics.miner_sabotages_performed++ /* RUTGMC DELETION diff --git a/code/game/objects/machinery/mortar.dm b/code/game/objects/machinery/mortar.dm index af2ed87f17983..5be0bc9868465 100644 --- a/code/game/objects/machinery/mortar.dm +++ b/code/game/objects/machinery/mortar.dm @@ -189,6 +189,8 @@ /obj/machinery/deployable/mortar/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(firing) user.balloon_alert(user, "The barrel is steaming hot. Wait till it cools off") @@ -275,8 +277,7 @@ var/datum/ammo/ammo = GLOB.ammo_list[arty_shell.ammo_type] shell.generate_bullet(ammo) var/shell_range = min(get_dist_euclidean(src, target), ammo.max_range) - // shell.fire_at(target, null, src, shell_range, ammo.shell_speed) // FUTURE ORIGINAL, WE DON'T HAVE NEEDED CHANGES YET - shell.fire_at(target, src, src, shell_range, ammo.shell_speed) // RUTGMC OLD VERSION + shell.fire_at(target, null, src, shell_range, ammo.shell_speed) perform_firing_visuals() @@ -429,7 +430,7 @@ icon_state = "mortar" max_integrity = 200 soft_armor = list(MELEE = 0, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 15, BIO = 100, FIRE = 0, ACID = 0) - flags_item = IS_DEPLOYABLE + item_flags = IS_DEPLOYABLE /// What item is this going to deploy when we put down the mortar? var/deployable_item = /obj/machinery/deployable/mortar resistance_flags = RESIST_ALL @@ -458,7 +459,7 @@ desc = "A manual, crew-operated mortar system intended to rain down 80mm goodness on anything it's aimed at. Needs to be set down first to fire. This one is a double barreled mortar that can hold 4 rounds usually fitted in TAV's." icon_state = "mortar_db" max_integrity = 400 - flags_item = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE + item_flags = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE w_class = WEIGHT_CLASS_HUGE deployable_item = /obj/machinery/deployable/mortar/double @@ -479,7 +480,7 @@ icon = 'icons/Marine/howitzer.dmi' icon_state = "howitzer" max_integrity = 400 - flags_item = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE + item_flags = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE w_class = WEIGHT_CLASS_HUGE deployable_item = /obj/machinery/deployable/mortar/howitzer @@ -564,7 +565,7 @@ desc = "A manual, crew-operated and towable multiple rocket launcher system piece used by the TerraGov Marine Corps, it is meant to saturate an area with munitions to total up to large amounts of firepower, it thus has high scatter when firing to accomplish such a task. Fires in only bursts of up to 16 rockets, it can hold 32 rockets in total. Uses 60mm Rockets." icon_state = "mlrs" max_integrity = 400 - flags_item = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE + item_flags = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE w_class = WEIGHT_CLASS_HUGE deployable_item = /obj/machinery/deployable/mortar/howitzer/mlrs @@ -581,6 +582,8 @@ allowed_shells = list( /obj/item/mortal_shell/rocket/mlrs, /obj/item/mortal_shell/rocket/mlrs/gas, + /obj/item/mortal_shell/rocket/mlrs/incendiary, + /obj/item/mortal_shell/rocket/mlrs/cloak, ) tally_type = TALLY_ROCKET_ARTY cool_off_time = 80 SECONDS @@ -598,7 +601,7 @@ user.balloon_alert(user, "The barrel is steaming hot. Wait till it cools off") return - if(!istype(I, /obj/item/storage/box/mlrs_rockets) && !istype(I, /obj/item/storage/box/mlrs_rockets_gas)) + if(!istype(I, /obj/item/storage/box/mlrs_rockets)) return ..() var/obj/item/storage/box/rocket_box = I @@ -660,7 +663,7 @@ ) icon_state = "mortar_ammo_cas" w_class = WEIGHT_CLASS_SMALL - flags_atom = CONDUCT + atom_flags = CONDUCT ///Ammo datum typepath that the shell uses var/ammo_type @@ -745,6 +748,18 @@ icon_state = "mlrs_rocket_gas" ammo_type = /datum/ammo/mortar/rocket/smoke/mlrs +/obj/item/mortal_shell/rocket/mlrs/cloak + name = "\improper 60mm 'S-2' cloak rocket" + desc = "A 60mm rocket loaded with cloak smoke that hides any friendlies inside of it with advanced chemical technology." + icon_state = "mlrs_rocket_cloak" + ammo_type = /datum/ammo/mortar/rocket/smoke/mlrs/cloak + +/obj/item/mortal_shell/rocket/mlrs/incendiary + name = "\improper 60mm incendiary rocket" + desc = "A 60mm rocket loaded with an incendiary payload with a minor side of explosive." + icon_state = "mlrs_rocket_incendiary" + ammo_type = /datum/ammo/mortar/rocket/mlrs/incendiary + /obj/structure/closet/crate/mortar_ammo name = "\improper T-50S mortar ammo crate" desc = "A crate containing live mortar shells with various payloads. DO NOT DROP. KEEP AWAY FROM FIRE SOURCES." @@ -776,7 +791,7 @@ desc = "A crate containing a basic set of a mortar and some shells, to get an engineer started." /obj/structure/closet/crate/mortar_ammo/mortar_kit/PopulateContents() - new /obj/item/mortar_kit(src) + new /obj/item/storage/holster/backholster/mortar/full(src) new /obj/item/mortal_shell/he(src) new /obj/item/mortal_shell/he(src) new /obj/item/mortal_shell/he(src) @@ -880,8 +895,7 @@ desc = "A large case containing rockets in a compressed setting for the TA-40L MLRS. Drag this sprite into you to open it up!\nNOTE: You cannot put items back inside this case." storage_slots = 16 -/obj/item/storage/box/mlrs_rockets/Initialize(mapload) - . = ..() +/obj/item/storage/box/mlrs_rockets/PopulateContents() new /obj/item/mortal_shell/rocket/mlrs(src) new /obj/item/mortal_shell/rocket/mlrs(src) new /obj/item/mortal_shell/rocket/mlrs(src) @@ -899,13 +913,10 @@ new /obj/item/mortal_shell/rocket/mlrs(src) new /obj/item/mortal_shell/rocket/mlrs(src) -/obj/item/storage/box/mlrs_rockets_gas +/obj/item/storage/box/mlrs_rockets/gas name = "\improper TA-40L X-50 rocket crate" - desc = "A large case containing rockets in a compressed setting for the TA-40L MLRS. Drag this sprite into you to open it up!\nNOTE: You cannot put items back inside this case." - storage_slots = 16 -/obj/item/storage/box/mlrs_rockets_gas/Initialize(mapload) - . = ..() +/obj/item/storage/box/mlrs_rockets/gas/PopulateContents() new /obj/item/mortal_shell/rocket/mlrs/gas(src) new /obj/item/mortal_shell/rocket/mlrs/gas(src) new /obj/item/mortal_shell/rocket/mlrs/gas(src) @@ -923,5 +934,49 @@ new /obj/item/mortal_shell/rocket/mlrs/gas(src) new /obj/item/mortal_shell/rocket/mlrs/gas(src) +/obj/item/storage/box/mlrs_rockets/cloak + name = "\improper TA-40L 'S-2' rocket crate" + +/obj/item/storage/box/mlrs_rockets/cloak/PopulateContents() + new /obj/item/mortal_shell/rocket/mlrs/cloak(src) + new /obj/item/mortal_shell/rocket/mlrs/cloak(src) + new /obj/item/mortal_shell/rocket/mlrs/cloak(src) + new /obj/item/mortal_shell/rocket/mlrs/cloak(src) + new /obj/item/mortal_shell/rocket/mlrs/cloak(src) + new /obj/item/mortal_shell/rocket/mlrs/cloak(src) + new /obj/item/mortal_shell/rocket/mlrs/cloak(src) + new /obj/item/mortal_shell/rocket/mlrs/cloak(src) + new /obj/item/mortal_shell/rocket/mlrs/cloak(src) + new /obj/item/mortal_shell/rocket/mlrs/cloak(src) + new /obj/item/mortal_shell/rocket/mlrs/cloak(src) + new /obj/item/mortal_shell/rocket/mlrs/cloak(src) + new /obj/item/mortal_shell/rocket/mlrs/cloak(src) + new /obj/item/mortal_shell/rocket/mlrs/cloak(src) + new /obj/item/mortal_shell/rocket/mlrs/cloak(src) + new /obj/item/mortal_shell/rocket/mlrs/cloak(src) + +/obj/item/storage/box/mlrs_rockets/incendiary + name = "\improper TA-40L incendiary rocket crate" + +/obj/item/storage/box/mlrs_rockets/incendiary/PopulateContents() + new /obj/item/mortal_shell/rocket/mlrs/incendiary(src) + new /obj/item/mortal_shell/rocket/mlrs/incendiary(src) + new /obj/item/mortal_shell/rocket/mlrs/incendiary(src) + new /obj/item/mortal_shell/rocket/mlrs/incendiary(src) + new /obj/item/mortal_shell/rocket/mlrs/incendiary(src) + new /obj/item/mortal_shell/rocket/mlrs/incendiary(src) + new /obj/item/mortal_shell/rocket/mlrs/incendiary(src) + new /obj/item/mortal_shell/rocket/mlrs/incendiary(src) + new /obj/item/mortal_shell/rocket/mlrs/incendiary(src) + new /obj/item/mortal_shell/rocket/mlrs/incendiary(src) + new /obj/item/mortal_shell/rocket/mlrs/incendiary(src) + new /obj/item/mortal_shell/rocket/mlrs/incendiary(src) + new /obj/item/mortal_shell/rocket/mlrs/incendiary(src) + new /obj/item/mortal_shell/rocket/mlrs/incendiary(src) + new /obj/item/mortal_shell/rocket/mlrs/incendiary(src) + new /obj/item/mortal_shell/rocket/mlrs/incendiary(src) + + #undef TALLY_MORTAR #undef TALLY_HOWITZER +#undef TALLY_ROCKET_ARTY diff --git a/code/game/objects/machinery/nuclearbomb.dm b/code/game/objects/machinery/nuclearbomb.dm index 0c124657cf668..2b1b58efd3816 100644 --- a/code/game/objects/machinery/nuclearbomb.dm +++ b/code/game/objects/machinery/nuclearbomb.dm @@ -13,10 +13,10 @@ density = TRUE anchored = TRUE coverage = 20 - flags_atom = CRITICAL_ATOM + atom_flags = CRITICAL_ATOM resistance_flags = RESIST_ALL layer = BELOW_MOB_LAYER - interaction_flags = INTERACT_OBJ_UI + interaction_flags = INTERACT_MACHINE_TGUI var/deployable = TRUE var/extended = FALSE var/lighthack = FALSE @@ -103,6 +103,8 @@ /obj/machinery/nuclearbomb/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!extended) return if(!istype(I, /obj/item/disk/nuclear)) @@ -119,23 +121,23 @@ if(r_auth && g_auth && b_auth) has_auth = TRUE -/obj/machinery/nuclearbomb/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/machinery/nuclearbomb/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return FALSE if(!timer_enabled) - to_chat(X, span_warning("\The [src] is soundly asleep. We better not disturb it.")) + to_chat(xeno_attacker, span_warning("\The [src] is soundly asleep. We better not disturb it.")) return - X.visible_message("[X] begins to slash delicately at the nuke", + xeno_attacker.visible_message("[xeno_attacker] begins to slash delicately at the nuke", "You start slashing delicately at the nuke.") - if(!do_after(X, 5 SECONDS, NONE, src, BUSY_ICON_DANGER, BUSY_ICON_HOSTILE)) + if(!do_after(xeno_attacker, 5 SECONDS, NONE, src, BUSY_ICON_DANGER, BUSY_ICON_HOSTILE)) return - X.visible_message("[X] disabled the nuke", + xeno_attacker.visible_message("[xeno_attacker] disabled the nuke", "You disabled the nuke.") disable() - SEND_GLOBAL_SIGNAL(COMSIG_GLOB_NUKE_DIFFUSED, src, X) + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_NUKE_DIFFUSED, src, xeno_attacker) /obj/machinery/nuclearbomb/can_interact(mob/user) . = ..() @@ -350,7 +352,7 @@ ///Change minimap icon if its on or off /obj/machinery/nuclearbomb/proc/update_minimap_icon() SSminimaps.remove_marker(src) - SSminimaps.add_marker(src, MINIMAP_FLAG_ALL, image('modular_RUtgmc/icons/UI_icons/map_blips_large.dmi', null, "nuke[timer_enabled ? "_on" : "_off"]", VERY_HIGH_FLOAT_LAYER)) + SSminimaps.add_marker(src, MINIMAP_FLAG_ALL, image('modular_RUtgmc/icons/UI_icons/map_blips_large.dmi', null, "nuke[timer_enabled ? "_on" : "_off"]", VERY_HIGH_FLOAT_LAYER)) //RUTGMC EDIT #undef NUKE_STAGE_NONE #undef NUKE_STAGE_COVER_REMOVED diff --git a/code/game/objects/machinery/overwatch.dm b/code/game/objects/machinery/overwatch.dm index beabe1afa2baf..81c934bf09eb7 100644 --- a/code/game/objects/machinery/overwatch.dm +++ b/code/game/objects/machinery/overwatch.dm @@ -327,30 +327,8 @@ GLOBAL_LIST_EMPTY(active_cas_targets) state = OW_MAIN if("monitor") state = OW_MONITOR - if("monitoralpha_squad") - state = OW_MONITOR - current_squad = get_squad_by_id(ALPHA_SQUAD) - if("monitorbravo_squad") - state = OW_MONITOR - current_squad = get_squad_by_id(BRAVO_SQUAD) - if("monitorcharlie_squad") - state = OW_MONITOR - current_squad = get_squad_by_id(CHARLIE_SQUAD) - if("monitordelta_squad") - state = OW_MONITOR - current_squad = get_squad_by_id(DELTA_SQUAD) - if("monitorzulu_squad") - state = OW_MONITOR - current_squad = get_squad_by_id(ZULU_SQUAD) - if("monitoryankee_squad") - state = OW_MONITOR - current_squad = get_squad_by_id(YANKEE_SQUAD) - if("monitorxray_squad") - state = OW_MONITOR - current_squad = get_squad_by_id(XRAY_SQUAD) - if("monitorwhiskey_squad") - state = OW_MONITOR - current_squad = get_squad_by_id(WHISKEY_SQUAD) + if(href_list["squad_id"]) + current_squad = get_squad_by_id(href_list["squad_id"]) if("change_operator") if(operator != usr) if(current_squad) @@ -556,7 +534,7 @@ GLOBAL_LIST_EMPTY(active_cas_targets) dat += "Squad Overwatch: [S.overwatch_officer.name]
" else dat += "Squad Overwatch: NONE
" - dat += "[S.name] Squad Monitor
" + dat += "[S.name] Squad Monitor
" dat += "----------------------
" dat += "Orbital Bombardment Control
" dat += "Current Cannon Status: " @@ -624,7 +602,7 @@ GLOBAL_LIST_EMPTY(active_cas_targets) dat += "Squad Overwatch: [S.overwatch_officer.name]
" else dat += "Squad Overwatch: NONE
" - dat += "[S.name] Squad Monitor
" + dat += "[S.name] Squad Monitor
" if(OW_MONITOR)//Info screen. dat += get_squad_info() diff --git a/code/game/objects/machinery/pipe/construction.dm b/code/game/objects/machinery/pipe/construction.dm index 18bea1f105ef0..c62cf1eed5397 100644 --- a/code/game/objects/machinery/pipe/construction.dm +++ b/code/game/objects/machinery/pipe/construction.dm @@ -130,6 +130,8 @@ Buildable meters /obj/item/pipe/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(user.incapacitated()) return FALSE if(iswrench(I)) diff --git a/code/game/objects/machinery/pipe/pipe_dispenser.dm b/code/game/objects/machinery/pipe/pipe_dispenser.dm index bbacead24a43a..efd04f3c2dc88 100644 --- a/code/game/objects/machinery/pipe/pipe_dispenser.dm +++ b/code/game/objects/machinery/pipe/pipe_dispenser.dm @@ -64,6 +64,8 @@ /obj/machinery/pipedispenser/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/pipe) || istype(I, /obj/item/pipe_meter)) to_chat(usr, span_notice("You put [I] back into [src].")) diff --git a/code/game/objects/machinery/portable_reagent_tank.dm b/code/game/objects/machinery/portable_reagent_tank.dm index 68a1a1c60f87b..3da26bacf4607 100644 --- a/code/game/objects/machinery/portable_reagent_tank.dm +++ b/code/game/objects/machinery/portable_reagent_tank.dm @@ -66,9 +66,9 @@ var/obj/item/storage/internal_bag = get_internal_item() internal_bag?.open(user) -/obj/machinery/deployable/reagent_tank/attack_alien(mob/living/carbon/xenomorph/X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) - if(X.a_intent != INTENT_HARM) - return drink_from_nozzle(X, TRUE) +/obj/machinery/deployable/reagent_tank/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.a_intent != INTENT_HARM) + return drink_from_nozzle(xeno_attacker, TRUE) return ..() ///Process for drinking reagents directly from the dispenser's nozzle @@ -122,7 +122,7 @@ icon_state = "dispenser" item_state_worn = TRUE item_state = "reagent_dispenser" - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_HUGE max_w_class = WEIGHT_CLASS_SMALL //Beaker size storage_slots = null @@ -172,16 +172,16 @@ update_icon() /obj/item/storage/reagent_tank/attack_hand(mob/living/user) - if(CHECK_BITFIELD(flags_item, IS_DEPLOYED)) + if(CHECK_BITFIELD(item_flags, IS_DEPLOYED)) return open(user) return ..() /obj/item/storage/reagent_tank/open(mob/user) - if(CHECK_BITFIELD(flags_item, IS_DEPLOYED)) + if(CHECK_BITFIELD(item_flags, IS_DEPLOYED)) return ..() /obj/item/storage/reagent_tank/attempt_draw_object(mob/living/user) - if(!CHECK_BITFIELD(flags_item, IS_DEPLOYED)) + if(!CHECK_BITFIELD(item_flags, IS_DEPLOYED)) balloon_alert(user, "Not deployed") return FALSE return ..() @@ -190,7 +190,7 @@ balloon_alert(user, "Not deployed") /obj/item/storage/reagent_tank/can_be_inserted(obj/item/W, warning) - if(!CHECK_BITFIELD(flags_item, IS_DEPLOYED)) + if(!CHECK_BITFIELD(item_flags, IS_DEPLOYED)) balloon_alert(usr, "Not deployed") return FALSE return ..() diff --git a/code/game/objects/machinery/recharger.dm b/code/game/objects/machinery/recharger.dm index 4c4f48c0fbe9d..41868a9ba86bb 100644 --- a/code/game/objects/machinery/recharger.dm +++ b/code/game/objects/machinery/recharger.dm @@ -12,6 +12,8 @@ /obj/machinery/recharger/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(issilicon(user)) return @@ -140,29 +142,29 @@ B.bcell.charge = 0 ..(severity) -/obj/machinery/recharger/update_icon() - overlays = list() +/obj/machinery/recharger/update_overlays() + . = ..() if((machine_stat & (NOPOWER|BROKEN))) return - else if(!charging) - overlays += "recharger-power" + if(!charging) + . += "recharger-power" return if(percent_charge_complete < 25) - overlays += "recharger-10" + . += "recharger-10" else if(percent_charge_complete >= 25 && percent_charge_complete < 50) - overlays += "recharger-25" + . += "recharger-25" else if(percent_charge_complete >= 50 && percent_charge_complete < 75) - overlays += "recharger-50" + . += "recharger-50" else if(percent_charge_complete >= 75 && percent_charge_complete < 100) - overlays += "recharger-75" + . += "recharger-75" else if(percent_charge_complete >= 100) - overlays += "recharger-100" + . += "recharger-100" if(istype(charging, /obj/item/weapon/gun/energy/taser)) - overlays += "recharger-taser" + . += "recharger-taser" else if(istype(charging, /obj/item/weapon/baton)) - overlays += "recharger-baton" + . += "recharger-baton" /obj/machinery/recharger/nopower use_power = NO_POWER_USE diff --git a/code/game/objects/machinery/research.dm b/code/game/objects/machinery/research.dm index 84e8b8b2b0d8a..097a7cd36a62b 100644 --- a/code/game/objects/machinery/research.dm +++ b/code/game/objects/machinery/research.dm @@ -48,7 +48,6 @@ RES_TIER_UNCOMMON = list( /obj/item/research_product/money/uncommon, /obj/item/implanter/blade, - /obj/item/attachable/shoulder_mount, ), RES_TIER_RARE = list( /obj/item/research_product/money/rare, @@ -65,7 +64,6 @@ RES_TIER_UNCOMMON = list( /obj/item/research_product/money/uncommon, /obj/item/implanter/chem/blood, - /obj/item/attachable/shoulder_mount, ), RES_TIER_RARE = list( /obj/item/research_product/money/rare, @@ -90,6 +88,8 @@ /obj/machinery/researchcomp/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(researching || !istype(I, /obj/item/research_resource)) return @@ -248,16 +248,10 @@ ) /obj/item/research_resource/xeno + name = "Xenomorph research material" research_type = RES_XENO icon = 'icons/obj/alien_autopsy.dmi' icon_state = "sample_0" - -/obj/item/research_resource/xeno/Initialize(mapload) - . = ..() - icon_state = "sample_[rand(0, 11)]" - -/obj/item/research_resource/xeno/tier_one - name = "Xenomorph research material - tier 1" color = "#f0bee3" reward_probs = list( RES_TIER_BASIC = 100, @@ -266,35 +260,9 @@ RES_TIER_RARE = 1, ) -/obj/item/research_resource/xeno/tier_two - name = "Xenomorph research material - tier 2" - color = "#d6e641" - reward_probs = list( - RES_TIER_BASIC = 100, - RES_TIER_COMMON = 40, - RES_TIER_UNCOMMON = 20, - RES_TIER_RARE = 6, - ) - -/obj/item/research_resource/xeno/tier_three - name = "Xenomorph research material - tier 3" - color = "#e43939" - reward_probs = list( - RES_TIER_BASIC = 100, - RES_TIER_COMMON = 50, - RES_TIER_UNCOMMON = 40, - RES_TIER_RARE = 10, - ) - -/obj/item/research_resource/xeno/tier_four - name = "Xenomorph research material - tier 4" - color = "#a800ad" - reward_probs = list( - RES_TIER_BASIC = 100, - RES_TIER_COMMON = 50, - RES_TIER_UNCOMMON = 40, - RES_TIER_RARE = 50, - ) +/obj/item/research_resource/xeno/Initialize(mapload) + . = ..() + icon_state = "sample_[rand(0, 11)]" /// ///Items designed to be products of research diff --git a/code/game/objects/machinery/robotic_cradle.dm b/code/game/objects/machinery/robotic_cradle.dm index 69bf7b1f3d26f..4567a7d5b87c3 100644 --- a/code/game/objects/machinery/robotic_cradle.dm +++ b/code/game/objects/machinery/robotic_cradle.dm @@ -1,62 +1,57 @@ #define CRADLE_NOTICE_SUCCESS 1 #define CRADLE_NOTICE_DEATH 2 -#define CRADLE_NOTICE_NO_RECORD 3 -#define CRADLE_NOTICE_NO_POWER 4 -#define CRADLE_NOTICE_XENO_FUCKERY 5 -#define CRADLE_NOTICE_IDIOT_EJECT 6 -#define CRADLE_NOTICE_FORCE_EJECT 7 +#define CRADLE_NOTICE_NO_POWER 3 +#define CRADLE_NOTICE_XENO_FUCKERY 4 +#define CRADLE_NOTICE_EARLY_EJECT 5 //Cradle /obj/machinery/robotic_cradle name = "robotic cradle" desc = "A highly experimental robotic maintenence machine using a bath of industrial nanomachines to quickly restore any robotic machine inserted." - icon = 'icons/obj/objects.dmi' - icon_state = "borgcharger0" + icon = 'icons/obj/machines/suit_cycler.dmi' + icon_state = "suit_cycler" density = TRUE max_integrity = 350 soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, FIRE = 30, ACID = 30) - //This var is used to see if the machine is currently repairing or not. - var/repairing = FALSE - //This var is the reference used for the patient - var/mob/living/carbon/human/occupant - //It uses power use_power = ACTIVE_POWER_USE idle_power_usage = 15 active_power_usage = 10000 // It rebuilds you from nothing... - //This var is in reference to the radio the cradle uses to speak to the craw. + ///This var is used to see if the machine is currently repairing or not. + var/repairing = FALSE + ///This var is the reference used for the patient + var/mob/living/carbon/human/occupant + ///This var is in reference to the radio the cradle uses to speak to the crew var/obj/item/radio/headset/mainship/doc/radio + ///This var is so we can call deltimer() it if we need to abort the operation early + var/operation_timer /obj/machinery/robotic_cradle/Initialize(mapload) . = ..() radio = new(src) /obj/machinery/robotic_cradle/Destroy() - do_eject(forceeject = TRUE) + if(occupant) + visible_message("\The [src] malfunctions as it is destroyed mid-repair, ejecting [occupant] with unfinished repair wounds and showering them in debris.") + occupant.take_limb_damage(rand(30,50),rand(30,50)) + remove_occupant() if(radio) QDEL_NULL(radio) return ..() /obj/machinery/robotic_cradle/update_icon_state() - if(machine_stat & NOPOWER) - icon_state = "borgcharger0" - return - if(repairing) - icon_state = "borgcharger1" - return - if(occupant) - icon_state = "borgcharger1" - return - icon_state = "borgcharger0" + if(occupant && !(machine_stat & NOPOWER)) + icon_state = "suit_cycler_active" + return ..() + icon_state = "suit_cycler" /obj/machinery/robotic_cradle/power_change() . = ..() if(is_operational() || !occupant) return visible_message("[src] engages the safety override, ejecting the occupant.") - repairing = FALSE - go_out(CRADLE_NOTICE_NO_POWER) + perform_eject(CRADLE_NOTICE_NO_POWER) /obj/machinery/robotic_cradle/process() if(!occupant) @@ -64,45 +59,22 @@ if(occupant.stat == DEAD) say("Patient has expired.") - repairing = FALSE - go_out(CRADLE_NOTICE_DEATH) + perform_eject(CRADLE_NOTICE_DEATH) return if(!repairing) return -//This proc handles the actual repair once the timer is up, ejection of the healed robot and radio message of ejection. -/obj/machinery/robotic_cradle/proc/repair_op() - if(QDELETED(occupant) || occupant.stat == DEAD) - if(!ishuman(occupant)) - stack_trace("Non-human occupant made its way into the autodoc: [occupant] | [occupant?.type].") - visible_message("[src] buzzes.") - go_out(CRADLE_NOTICE_DEATH) //kick them out too. - return - - occupant.revive() - visible_message("\The [src] clicks and opens up having finished the requested operations.") - repairing = FALSE - go_out(CRADLE_NOTICE_SUCCESS) - -/obj/machinery/robotic_cradle/attack_alien(mob/living/carbon/xenomorph/X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) +/obj/machinery/robotic_cradle/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) if(!occupant) - to_chat(X, span_xenowarning("There is nothing of interest in there.")) - return - if(X.status_flags & INCORPOREAL || X.do_actions) + to_chat(xeno_attacker, span_xenowarning("There is nothing of interest in there.")) return - visible_message(span_warning("[X] begins to pry the [src]'s cover!"), 3) - playsound(src,'sound/effects/metal_creaking.ogg', 25, 1) - if(!do_after(X, 2 SECONDS)) + if(xeno_attacker.status_flags & INCORPOREAL || xeno_attacker.do_actions) return - playsound(loc, 'sound/effects/metal_creaking.ogg', 25, 1) - go_out() + start_emergency_eject(xeno_attacker) -//This proc acts as a heads up to the doctors/engineers about the patient exiting the cradle for whatever reason. Does not warn if the patient itself exits the cradle. it also wipes the memory of who the patient was and readies the cradle for a new patient. -/obj/machinery/robotic_cradle/proc/go_out(notice_code = FALSE) - if(!occupant) - return - occupant.forceMove(drop_location()) +///This proc acts as a heads up to the doctors/engineers about the patient exiting the cradle for whatever reason. Takes CRADLE_NOTICE defines as arguments +/obj/machinery/robotic_cradle/proc/notify_about_eject(notice_code = FALSE) var/reason = "Reason for discharge: Procedural completion." switch(notice_code) if(CRADLE_NOTICE_SUCCESS) @@ -110,167 +82,169 @@ if(CRADLE_NOTICE_DEATH) playsound(src, 'sound/machines/warning-buzzer.ogg', 50, FALSE) reason = "Reason for discharge: Patient has expired." - if(CRADLE_NOTICE_NO_RECORD) - playsound(src, 'sound/machines/warning-buzzer.ogg', 50, FALSE) - reason = "Reason for discharge: Medical records not detected. Alerting security advised." if(CRADLE_NOTICE_NO_POWER) playsound(src, 'sound/machines/warning-buzzer.ogg', 50, FALSE) reason = "Reason for discharge: Power failure." if(CRADLE_NOTICE_XENO_FUCKERY) playsound(src, 'sound/machines/warning-buzzer.ogg', 50, FALSE) reason = "Reason for discharge: Unauthorized manual release. Alerting security advised." - if(CRADLE_NOTICE_IDIOT_EJECT) - playsound(src, 'sound/machines/warning-buzzer.ogg', 50, FALSE) - reason = "Reason for discharge: Unauthorized manual release during repair. Alerting security advised." - if(CRADLE_NOTICE_FORCE_EJECT) - playsound(src, 'sound/machines/warning-buzzer.ogg', 50, FALSE) - reason = "Reason for discharge: Destruction of linked CRADLE Engineering System. Alerting security advised." + if(CRADLE_NOTICE_EARLY_EJECT) + playsound(src,'sound/machines/buzz-two.ogg',50,FALSE) + reason = "Reason for discharge: Operation manually terminated by end user." + if(!radio)//The radio shouldn't ever be deleted, but this is a sanity check just in case + return radio.talk_into(src, "Patient: [occupant] has been released from [src] at: [get_area(src)]. [reason]", RADIO_CHANNEL_MEDICAL) + +///Forces the occupant out of the cradle, leaves it empty for someone else to enter. +/obj/machinery/robotic_cradle/proc/remove_occupant() + if(!occupant) + return + occupant.forceMove(drop_location()) occupant = null update_icon() stop_processing() -//This proc is what a robot calls when they try to enter a cradle on their own. -/obj/machinery/robotic_cradle/proc/move_inside_wrapper(mob/living/dropped, mob/dragger) - if(dragger.incapacitated() || !ishuman(dragger) || !isrobot(dropped)) - return - +///Finishes ejecting the patient after the cradle is done. Takes CRADLE_NOTICE defines as arguments, used in notify_about_eject() +/obj/machinery/robotic_cradle/proc/perform_eject(notice_code = FALSE) + repairing = FALSE + if(operation_timer) + deltimer(operation_timer) + notify_about_eject(notice_code) + remove_occupant() + +///Handles any mob placing themselves or someone else into the cradle. target_mob is the mob being placed in, operating_mob is the person placing the mob in. Returns true if the mob got placed inside, false otherwise +/obj/machinery/robotic_cradle/proc/place_mob_inside(mob/living/target_mob, mob/operating_mob) + if(operating_mob.incapacitated()||!ishuman(operating_mob)||!ishuman(target_mob)) + return FALSE if(occupant) - to_chat(dragger, span_notice("[src] is already occupied!")) - return - + to_chat(operating_mob, span_notice("[src] is already occupied!")) + return FALSE + var/mob/living/carbon/human/patient = target_mob + if(!(patient.species.species_flags & ROBOTIC_LIMBS)) + visible_message(span_warning("[src] buzzes. Subject is biological, cannot repair")) + playsound(src, 'sound/machines/buzz-two.ogg', 50, FALSE) + return FALSE + if(patient.abiotic()) + visible_message(span_warning("[src] buzzes. Subject cannot wear abiotic items.")) + playsound(src, 'sound/machines/buzz-two.ogg', 50, FALSE) + return FALSE if(machine_stat & (NOPOWER|BROKEN)) - to_chat(dragger, span_notice("[src] is non-functional!")) + to_chat(operating_mob, span_notice("[src] is non-functional!")) + return FALSE + + if(operating_mob == patient) + patient.visible_message(span_notice("[patient] starts climbing into \the [src]."), + span_notice("You start climbing into \the [src].")) + else + operating_mob.visible_message(span_notice("[operating_mob] starts placing [patient] \the [src]."), + span_notice("You start placing [patient] into \the [src].")) + + if(!do_after(patient, 1 SECONDS, IGNORE_HELD_ITEM, src, BUSY_ICON_GENERIC)) + return FALSE + if(occupant) //In case someone tried climbing in earlier than us, while the cradle was empty + to_chat(operating_mob, span_notice("[src] is already occupied!")) + return FALSE + patient.stop_pulling() + patient.forceMove(src) + occupant = patient + return TRUE +///Starts the repair operation of the cradle +/obj/machinery/robotic_cradle/proc/start_repair_operation() + if(!occupant) return - if(dragger.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) - dropped.visible_message(span_notice("[dropped] fumbles around figuring out how to get into \the [src]."), - span_notice("You fumble around figuring out how to get into \the [src].")) - var/fumbling_time = max(0 , SKILL_TASK_TOUGH - ( SKILL_TASK_EASY * dragger.skills.getRating(SKILL_ENGINEER) ))// 8 secs non-trained, 5 amateur - if(!do_after(dropped, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED)) - return - - dropped.visible_message(span_notice("[dropped] starts climbing into \the [src]."), - span_notice("You start climbing into \the [src].")) - if(!do_after(dropped, 1 SECONDS, IGNORE_HELD_ITEM, src, BUSY_ICON_GENERIC)) + if(powered()) + use_power(active_power_usage) + playsound(loc, 'sound/machines/ping.ogg', 25, 1) + else + perform_eject(CRADLE_NOTICE_NO_POWER) return - if(occupant) - to_chat(dragger, span_notice("[src] is already occupied!")) - return - dropped.stop_pulling() - dropped.forceMove(src) - occupant = dropped - icon_state = "pod_0" - var/implants = list(/obj/item/implant/neurostim) - var/mob/living/carbon/human/H = occupant - var/doc_dat - med_scan(H, doc_dat, implants, TRUE) - start_processing() - say("Automatic mode engaged, initialising procedure.") - addtimer(CALLBACK(src, PROC_REF(auto_start)), 20 SECONDS) - -///Callback to start auto mode on someone entering -/obj/machinery/robotic_cradle/proc/auto_start() - if(repairing) + start_processing() + update_icon() + repairing = TRUE + say("Automatic mode engaged, initialising repair procedure.") + operation_timer = addtimer(CALLBACK(src, PROC_REF(handle_repair_operation)), 20 SECONDS,TIMER_STOPPABLE) + +///Callback to start repair on someone entering the cradle +/obj/machinery/robotic_cradle/proc/handle_repair_operation() + if(!occupant) //sanity check, in case we get teleported outside the cradle midrepair without calling perform_eject() + if(operation_timer) + deltimer(operation_timer) + repairing = FALSE + visible_message(span_warning("[src] buzzes. Occupant missing, procedures canceled.")) + playsound(src, 'sound/machines/buzz-two.ogg', 50, FALSE) return + say("Repair procedure complete.") + perform_repair() + +///This proc handles the actual repair once the timer is up and ejects the healed robot. +/obj/machinery/robotic_cradle/proc/perform_repair() if(!occupant) - say("Occupant missing, procedures canceled.") return - say("Beginning repair procedure.") - repair_op() + if(QDELETED(occupant) || occupant.stat == DEAD) + if(!ishuman(occupant)) + stack_trace("Non-human occupant made its way into the autodoc: [occupant] | [occupant?.type].") + visible_message(span_warning("[src] buzzes.")) + perform_eject(CRADLE_NOTICE_DEATH) + return + occupant.revive() + visible_message("\The [src] clicks and opens up having finished the requested operations.") + perform_eject(CRADLE_NOTICE_SUCCESS) -/obj/machinery/robotic_cradle/MouseDrop_T(mob/M, mob/user) +/obj/machinery/robotic_cradle/MouseDrop_T(mob/dropping, mob/user) . = ..() - move_inside_wrapper(M, user) + if(place_mob_inside(dropping, user)) + start_repair_operation() /obj/machinery/robotic_cradle/verb/move_inside() set name = "Enter Cradle" set category = "Object" set src in oview(1) - move_inside_wrapper(usr, usr) + if(place_mob_inside(usr, usr)) + start_repair_operation() -//This proc is called when someone has a robot grabbed either by hand or in a stasis bag. It is also lets docs/engineers use health analyzers on the cradle if they really want to. /obj/machinery/robotic_cradle/attackby(obj/item/I, mob/user, params) . = ..() - - if(!ishuman(user)) - return //no + if(.) + return if(istype(I, /obj/item/healthanalyzer) && occupant) //Allows us to use the analyzer on the occupant without taking him out. var/obj/item/healthanalyzer/J = I J.attack(occupant, user) return - if(!istype(I, /obj/item/grab)) +/obj/machinery/robotic_cradle/attack_hand(mob/living/user) + . = ..() + if(user.do_actions) //stops them from spamming if they're attempting to eject someone or otherwise busy return - - if(machine_stat & (NOPOWER|BROKEN)) - to_chat(user, span_notice("[src] is non-functional!")) + if(!occupant) return + start_emergency_eject(user) - if(occupant) - to_chat(user, span_notice("[src] is already occupied!")) +/obj/machinery/robotic_cradle/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + . = ..() + if(.) return + var/mob/grabbed_mob - var/obj/item/grab/G = I + if(ismob(grab.grabbed_thing)) + grabbed_mob = grab.grabbed_thing - var/mob/M - if(ismob(G.grabbed_thing)) - M = G.grabbed_thing - else if(istype(G.grabbed_thing, /obj/structure/closet/bodybag/cryobag)) - var/obj/structure/closet/bodybag/cryobag/C = G.grabbed_thing - if(!C.bodybag_occupant) + else if(istype(grab.grabbed_thing,/obj/structure/closet/bodybag/cryobag)) + var/obj/structure/closet/bodybag/cryobag/cryobag = grab.grabbed_thing + if(!cryobag.bodybag_occupant) to_chat(user, span_warning("The stasis bag is empty!")) return - M = C.bodybag_occupant - C.open() - user.start_pulling(M) - - if(!M) - return - - if(!ishuman(M)) // No monkee or beano - to_chat(user, span_notice("[src] is compatible with humanoid anatomies only!")) - return - - if(M.abiotic()) - to_chat(user, span_warning("Subject cannot have abiotic items on.")) - return - - if(ishumanbasic(M)) - to_chat(user, span_warning("Subject is biological, cannot repair.")) - return - - if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) - user.visible_message(span_notice("[user] fumbles around figuring out how to put [M] into [src]."), - span_notice("You fumble around figuring out how to put [M] into [src].")) - var/fumbling_time = max(0 , SKILL_TASK_TOUGH - ( SKILL_TASK_EASY * user.skills.getRating(SKILL_ENGINEER) ))// 8 secs non-trained, 5 amateur - if(!do_after(user, fumbling_time, NONE, M, BUSY_ICON_UNSKILLED) || QDELETED(src)) - return - - visible_message("[user] starts putting [M] into [src].", 3) - - if(!do_after(user, 10, IGNORE_HELD_ITEM, M, BUSY_ICON_GENERIC) || QDELETED(src)) - return - - if(occupant) - to_chat(user, span_notice("[src] is already occupied!")) - return + grabbed_mob = cryobag.bodybag_occupant + cryobag.open() + user.start_pulling(grabbed_mob) - if(!M || !G) - return + if(place_mob_inside(grabbed_mob,user)) + start_repair_operation() - M.forceMove(src) - occupant = M - icon_state = "pod_1" - var/implants = list(/obj/item/implant/neurostim) - var/mob/living/carbon/human/H = occupant - med_scan(H, null, implants, TRUE) - start_processing() - say("Automatic mode engaged, initialising procedure.") - addtimer(CALLBACK(src, PROC_REF(auto_start)), 20 SECONDS) + return TRUE /obj/machinery/robotic_cradle/verb/eject() set name = "Eject cradle" @@ -278,45 +252,34 @@ set src in oview(1) if(usr.incapacitated()) return - do_eject() + start_emergency_eject(usr) -//This proc ejects whomever is inside the cradle, by force if needed depending if the cradle is destroyed or not. -/obj/machinery/robotic_cradle/proc/do_eject(forceeject) +///This proc ejects whomever is inside the cradle while it is presumably operating. mob_ejecting is the mob triggering the eject +/obj/machinery/robotic_cradle/proc/start_emergency_eject(mob/mob_ejecting) if(!occupant) return - if(forceeject) - if(!repairing) - visible_message("\The [src] is destroyed, ejecting [occupant] and showering them in debris.") - occupant.take_limb_damage(rand(10,20),rand(10,20)) - else - visible_message("\The [src] malfunctions as it is destroyed mid-repair, ejecting [occupant] with unfinished repair wounds and showering them in debris.") - occupant.take_limb_damage(rand(30,50),rand(30,50)) - go_out(CRADLE_NOTICE_FORCE_EJECT) - return - if(isxeno(usr) && !repairing) // let xenos eject people hiding inside; a xeno ejecting someone during repair does so like someone untrained - go_out(CRADLE_NOTICE_XENO_FUCKERY) + if(!repairing)//this shouldn't be possible unless you get var edited inside without triggering start_repair_operation(), in that case just get them out + remove_occupant() return - if(!ishuman(usr)) + if(!mob_ejecting) + perform_eject(CRADLE_NOTICE_EARLY_EJECT) return - if(usr == occupant) - if(repairing) - to_chat(usr, span_warning("There's no way you're getting out while this thing is operating on you!")) - return - else - visible_message("[usr] engages the internal release mechanism, and climbs out of \the [src].") - if(usr.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) - usr.visible_message(span_notice("[usr] fumbles around figuring out how to use [src]."), - span_notice("You fumble around figuring out how to use [src].")) - var/fumbling_time = max(0 , SKILL_TASK_TOUGH - ( SKILL_TASK_EASY * usr.skills.getRating(SKILL_ENGINEER) ))// 8 secs non-trained, 5 amateur - if(!do_after(usr, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED) || !occupant) + if(isxeno(mob_ejecting)) + mob_ejecting.visible_message(span_notice("[mob_ejecting] pries the cover of [src]"), + span_notice("You begin to pry at the cover of [src].")) + playsound(mob_ejecting,'sound/effects/metal_creaking.ogg', 25, 1) + if(!do_after(mob_ejecting, 2 SECONDS, NONE, src, BUSY_ICON_DANGER) || !occupant) return - if(repairing) - repairing = 0 - if(usr.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) //Untrained people will fail to terminate the repair properly. - visible_message("\The [src] malfunctions as [usr] aborts the rapair in progress.") - occupant.take_limb_damage(rand(30,50),rand(30,50)) - log_game("[key_name(usr)] ejected [key_name(occupant)] from the cradle during repair causing damage.") - message_admins("[ADMIN_TPMONTY(usr)] ejected [ADMIN_TPMONTY(occupant)] from the cradle during repair causing damage.") - go_out(CRADLE_NOTICE_IDIOT_EJECT) - return - go_out() + perform_eject(CRADLE_NOTICE_XENO_FUCKERY) + return + if(!ishuman(mob_ejecting)) + return + if(mob_ejecting == occupant) + to_chat(usr, span_warning("There's no way you're getting out while this thing is operating on you!")) + return + perform_eject(CRADLE_NOTICE_EARLY_EJECT) + +#undef CRADLE_NOTICE_SUCCESS +#undef CRADLE_NOTICE_DEATH +#undef CRADLE_NOTICE_NO_POWER +#undef CRADLE_NOTICE_EARLY_EJECT diff --git a/code/game/objects/machinery/seed_extractor.dm b/code/game/objects/machinery/seed_extractor.dm index f7641018c92e5..14ce66e941761 100644 --- a/code/game/objects/machinery/seed_extractor.dm +++ b/code/game/objects/machinery/seed_extractor.dm @@ -9,6 +9,8 @@ /obj/machinery/seed_extractor/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return // Fruits and vegetables. if(istype(I, /obj/item/reagent_containers/food/snacks/grown) || istype(I, /obj/item/grown)) if(!user.temporarilyRemoveItemFromInventory(I)) diff --git a/code/game/objects/machinery/self_destruct.dm b/code/game/objects/machinery/self_destruct.dm index c31edda08bd86..95f89676ce6dd 100644 --- a/code/game/objects/machinery/self_destruct.dm +++ b/code/game/objects/machinery/self_destruct.dm @@ -81,7 +81,7 @@ if("dest_start") to_chat(usr, span_notice("You press a few keys on the panel.")) to_chat(usr, span_notice("The system must be booting up the self-destruct sequence now.")) - priority_announce("Danger. The emergency destruct system is now activated. The ship will detonate in T-minus 20 minutes. Automatic detonation is unavailable. Manual detonation is required.", "Priority Alert", sound = 'sound/AI/selfdestruct.ogg') + priority_announce("Danger. The emergency destruct system is now activated. The ship will detonate in T-minus 20 minutes. Automatic detonation is unavailable. Manual detonation is required.", title = "Self Destruct System", type = ANNOUNCEMENT_PRIORITY, sound = 'sound/AI/selfdestruct.ogg', color_override = "purple") active_state = SELF_DESTRUCT_MACHINE_ARMED var/obj/machinery/self_destruct/rod/I = SSevacuation.dest_rods[SSevacuation.dest_index] I.activate_time = world.time diff --git a/code/game/objects/machinery/sleeper.dm b/code/game/objects/machinery/sleeper.dm index 32cceba5f64ec..de45bf9a75985 100644 --- a/code/game/objects/machinery/sleeper.dm +++ b/code/game/objects/machinery/sleeper.dm @@ -261,6 +261,7 @@ set_light(initial(light_range)) /obj/machinery/sleeper/update_icon_state() + . = ..() if(occupant) icon_state = "[initial(icon_state)]_occupied" else @@ -277,36 +278,50 @@ /obj/machinery/sleeper/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/healthanalyzer) && occupant) //Allows us to use the analyzer on the occupant without taking him out. var/obj/item/healthanalyzer/J = I J.attack(occupant, user) return +/obj/machinery/sleeper/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + . = ..() + if(.) + return if(isxeno(user)) return - + if(machine_stat & (NOPOWER|BROKEN)) + to_chat(user, span_notice("\ [src] is non-functional!")) + return if(occupant) - to_chat(user, span_notice("The sleeper is already occupied!")) + to_chat(user, span_notice("\ [src] is already occupied!")) return + var/mob/grabbed_mob - if(!istype(I, /obj/item/grab)) - return - - var/obj/item/grab/G = I - if(!ismob(G.grabbed_thing)) + if(ismob(grab.grabbed_thing)) + grabbed_mob = grab.grabbed_thing + else if(istype(grab.grabbed_thing,/obj/structure/closet/bodybag/cryobag)) + var/obj/structure/closet/bodybag/cryobag/cryobag = grab.grabbed_thing + if(!cryobag.bodybag_occupant) + to_chat(user, span_warning("The stasis bag is empty!")) + return + grabbed_mob = cryobag.bodybag_occupant + cryobag.open() + user.start_pulling(grabbed_mob) + if(!grabbed_mob) return - var/mob/M = G.grabbed_thing - if(!M.forceMove(src)) + if(!grabbed_mob.forceMove(src)) return - - visible_message("[user] puts [M] into the sleeper.", 3) - occupant = M + visible_message("[user] puts [grabbed_mob] into the sleeper.", 3) + occupant = grabbed_mob start_processing() connected.start_processing() update_icon() + return TRUE /obj/machinery/sleeper/ex_act(severity) if(filtering) @@ -406,15 +421,15 @@ else to_chat(user, span_notice("There is no one inside!")) -/obj/machinery/sleeper/attack_alien(mob/living/carbon/xenomorph/X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) +/obj/machinery/sleeper/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) if(!occupant) - to_chat(X, span_xenowarning("There is nothing of interest in there.")) + to_chat(xeno_attacker, span_xenowarning("There is nothing of interest in there.")) return - if(X.status_flags & INCORPOREAL || X.do_actions) + if(xeno_attacker.status_flags & INCORPOREAL || xeno_attacker.do_actions) return - visible_message(span_warning("[X] begins to pry the [src]'s cover!"), 3) + visible_message(span_warning("[xeno_attacker] begins to pry the [src]'s cover!"), 3) playsound(src,'sound/effects/metal_creaking.ogg', 25, 1) - if(!do_after(X, 2 SECONDS)) + if(!do_after(xeno_attacker, 2 SECONDS)) return playsound(loc, 'sound/effects/metal_creaking.ogg', 25, 1) go_out() diff --git a/code/game/objects/machinery/spaceheater.dm b/code/game/objects/machinery/spaceheater.dm index 2fa3048c05004..56aea6421dc30 100644 --- a/code/game/objects/machinery/spaceheater.dm +++ b/code/game/objects/machinery/spaceheater.dm @@ -72,6 +72,8 @@ /obj/machinery/space_heater/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!istype(I, /obj/item/cell)) return if(!open) diff --git a/code/game/objects/machinery/squad_manager.dm b/code/game/objects/machinery/squad_manager.dm index a0621b2cda5b5..ecdf7489c4371 100644 --- a/code/game/objects/machinery/squad_manager.dm +++ b/code/game/objects/machinery/squad_manager.dm @@ -1,5 +1,7 @@ #define MAX_SQUAD_NAME_LEN 15 +GLOBAL_DATUM_INIT(squad_manager, /datum/squad_manager, new) + /obj/machinery/computer/squad_manager name = "squad managment console" desc = "A console for squad management. Allows squad leaders to manage their squad." @@ -8,12 +10,21 @@ interaction_flags = INTERACT_OBJ_UI /obj/machinery/computer/squad_manager/ui_interact(mob/user, datum/tgui/ui) + return GLOB.squad_manager.ui_interact(arglist(args)) + +/datum/squad_manager + interaction_flags = INTERACT_UI_INTERACT + +/datum/squad_manager/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "SquadManager", name) + ui = new(user, src, "SquadManager", "Squad Management") ui.open() -/obj/machinery/computer/squad_manager/ui_data(mob/user) +/datum/squad_manager/ui_state(mob/user) + return GLOB.conscious_state + +/datum/squad_manager/ui_data(mob/user) var/list/data = list() data["active_squads"] = list() for(var/datum/squad/squad AS in SSjob.active_squads[user.faction]) @@ -22,7 +33,7 @@ data["valid_colors"] = GLOB.custom_squad_colors return data -/obj/machinery/computer/squad_manager/ui_act(action, list/params) +/datum/squad_manager/ui_act(action, list/params) . = ..() if(.) return @@ -77,5 +88,5 @@ log_game(log_msg) message_admins(log_msg) new_squad.desc = new_desc - ui_close(user) - balloon_alert(user, "\"[new_name]\" created") + SStgui.close_user_uis(usr, src) + user.balloon_alert(user, "\"[new_name]\" created") diff --git a/code/game/objects/machinery/squad_selector.dm b/code/game/objects/machinery/squad_selector.dm index 9c12e733c5a8c..e7f0df80ba42f 100644 --- a/code/game/objects/machinery/squad_selector.dm +++ b/code/game/objects/machinery/squad_selector.dm @@ -1,3 +1,5 @@ +GLOBAL_DATUM_INIT(squad_selector, /datum/squad_selector, new) + /obj/machinery/computer/squad_selector name = "squad selection console" desc = "A console for squad management. Allows users to join a squad." @@ -8,12 +10,21 @@ interaction_flags = INTERACT_OBJ_UI /obj/machinery/computer/squad_selector/ui_interact(mob/user, datum/tgui/ui) + return GLOB.squad_selector.ui_interact(arglist(args)) + +/datum/squad_selector + interaction_flags = INTERACT_UI_INTERACT + +/datum/squad_selector/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "SquadSelector", name) + ui = new(user, src, "SquadSelector", "Squad Selection") ui.open() -/obj/machinery/computer/squad_selector/ui_data(mob/user) +/datum/squad_selector/ui_state(mob/user) + return GLOB.conscious_state + +/datum/squad_selector/ui_data(mob/user) var/list/data = list() if(!SSjob.active_squads[user.faction]) return data @@ -24,7 +35,7 @@ data["active_squads"] = squad_data return data -/obj/machinery/computer/squad_selector/ui_act(action, list/params) +/datum/squad_selector/ui_act(action, list/params) . = ..() if(.) return @@ -37,3 +48,4 @@ if(new_squad == user.assigned_squad) return user.change_squad(new_squad_id) + SStgui.close_user_uis(usr, src) diff --git a/code/game/objects/machinery/squad_supply/supply_beacon.dm b/code/game/objects/machinery/squad_supply/supply_beacon.dm index f4df56df68bf8..0ffc3da886c45 100644 --- a/code/game/objects/machinery/squad_supply/supply_beacon.dm +++ b/code/game/objects/machinery/squad_supply/supply_beacon.dm @@ -1,160 +1,10 @@ -/obj/item/beacon - w_class = WEIGHT_CLASS_SMALL - /// If this beacon is activated - var/activated = FALSE - /// How long to activate this beacon - var/activation_time = 80 - /// The icon when acticated - var/icon_activated = "" - /// The camera attached to the beacon - var/obj/machinery/camera/beacon_cam = null - ///Can work underground - var/underground_signal = FALSE - -/obj/item/beacon/update_icon_state() - icon_state = activated ? icon_activated : initial(icon_state) - -/obj/item/beacon/attack_self(mob/living/carbon/human/H) - if(!istype(H)) - return - activate(H) - -/obj/item/beacon/attack_hand(mob/living/carbon/human/H) - if(!ishuman(H)) - return ..() - if(activated) - deactivate(H) - return - return ..() - -/// Set this beacon on the ground and activate it -/obj/item/beacon/proc/activate(mob/living/carbon/human/H) - if(!is_ground_level(H.z)) - to_chat(H, span_warning("You have to be on the planet to use this or it won't transmit.")) - return FALSE - var/area/A = get_area(H) - if(A && istype(A) && A.ceiling >= CEILING_DEEP_UNDERGROUND && !underground_signal) - to_chat(H, span_warning("This won't work if you're standing deep underground.")) - return FALSE - if(istype(A, /area/shuttle/dropship)) - to_chat(H, span_warning("You have to be outside the dropship to use this or it won't transmit.")) - return FALSE - var/delay = max(1.5 SECONDS, activation_time - 2 SECONDS * H.skills.getRating(SKILL_LEADERSHIP)) - H.visible_message(span_notice("[H] starts setting up [src] on the ground."), - span_notice("You start setting up [src] on the ground and inputting all the data it needs.")) - if(!do_after(H, delay, NONE, src, BUSY_ICON_GENERIC)) - return FALSE - var/obj/machinery/camera/beacon_cam/BC = new(src, "[H.get_paygrade()] [H.name] [src]") - H.transferItemToLoc(src, H.loc) - beacon_cam = BC - message_admins("[ADMIN_TPMONTY(usr)] set up a supply beacon.") - name = "transmitting orbital beacon - [get_area(src)] - [H]" - activated = TRUE - anchored = TRUE - w_class = WEIGHT_CLASS_GIGANTIC - layer = ABOVE_FLY_LAYER - set_light(2, 1) - playsound(src, 'sound/machines/twobeep.ogg', 15, 1) - H.visible_message("[H] activates [src].", - "You activate [src].") - - var/marker_flags = GLOB.faction_to_minimap_flag[H.faction] - if(!marker_flags) - marker_flags = MINIMAP_FLAG_MARINE - //RUTGMC EDIT CHANGE BEGIN - ORBITAL_BEACON - //SSminimaps.add_marker(src, marker_flags, image('icons/UI_icons/map_blips.dmi', null, "supply")) RUTGMC EDIT - ORIGINAL - SSminimaps.add_marker(src, marker_flags, image('modular_RUtgmc/icons/UI_icons/map_blips.dmi', null, beacon_mini_icon, ABOVE_FLOAT_LAYER)) - //RUTGMC EDIT CHANGE END - update_icon() - return TRUE - -/// Deactivate this beacon and put it in the hand of the human -/obj/item/beacon/proc/deactivate(mob/living/carbon/human/H) - var/delay = max(1 SECONDS, activation_time * 0.5 - 2 SECONDS * H.skills.getRating(SKILL_LEADERSHIP)) //Half as long as setting it up. - H.visible_message(span_notice("[H] starts removing [src] from the ground."), - span_notice("You start removing [src] from the ground, deactivating it.")) - if(!do_after(H, delay, NONE, src, BUSY_ICON_GENERIC)) - return FALSE - QDEL_NULL(beacon_cam) - activated = FALSE - anchored = FALSE - w_class = initial(w_class) - layer = initial(layer) - name = initial(name) - set_light(0) - playsound(src, 'sound/machines/twobeep.ogg', 15, 1) - H.visible_message("[H] deactivates [src].", - "You deactivate [src].") - H.put_in_active_hand(src) - SSminimaps.remove_marker(src) - update_icon() - return TRUE - -/obj/item/beacon/Destroy() - if(beacon_cam) - qdel(beacon_cam) - beacon_cam = null - return ..() - -/obj/item/beacon/supply_beacon +/obj/item/supply_beacon name = "supply beacon" desc = "A rugged, glorified laser pointer capable of sending a beam into space. Activate and throw this to call for a supply drop." icon = 'icons/Marine/marine-navigation.dmi' icon_state = "motion0" - icon_activated = "motion2" - activation_time = 60 - /// Reference to the datum used by the supply drop console - var/datum/supply_beacon/beacon_datum - -/obj/item/beacon/supply_beacon/Destroy() - if(beacon_datum) - UnregisterSignal(beacon_datum, COMSIG_QDELETING) - QDEL_NULL(beacon_datum) - return ..() - -/// Signal handler to nullify beacon datum -/obj/item/beacon/supply_beacon/proc/clean_beacon_datum() - SIGNAL_HANDLER - beacon_datum = null - -/obj/item/beacon/supply_beacon/onTransitZ(old_z,new_z) - . = ..() - //Assumes doMove sets loc before onTransitZ - if(beacon_datum) // RUTGMC ADDITION, supply beacon runtime fix - beacon_datum.drop_location = loc - -/obj/item/beacon/supply_beacon/activate(mob/living/carbon/human/H) - var/area/A = get_area(H) - . = ..() - if(!.) - return - beacon_datum = new /datum/supply_beacon("[H.name] + [A]", loc, H.faction) - RegisterSignal(beacon_datum, COMSIG_QDELETING, PROC_REF(clean_beacon_datum)) + w_class = WEIGHT_CLASS_SMALL -/obj/item/beacon/supply_beacon/deactivate(mob/living/carbon/human/H) +/obj/item/supply_beacon/Initialize(mapload) . = ..() - if(!.) - return - UnregisterSignal(beacon_datum, COMSIG_QDELETING) - QDEL_NULL(beacon_datum) - -/datum/supply_beacon - /// Name printed on the supply console - var/name = "" - /// Where the supply drops will land - var/turf/drop_location - /// The faction of the beacon - var/faction = "" - -/datum/supply_beacon/New(_name, turf/_drop_location, _faction, life_time = 0 SECONDS) - name = _name - drop_location = _drop_location - faction = _faction - GLOB.supply_beacon[name] = src - if(life_time) - QDEL_IN(src, life_time) - -/// Remove that beacon from the list of glob supply beacon -/datum/supply_beacon/Destroy() - GLOB.supply_beacon -= name - return ..() + AddComponent(/datum/component/beacon, TRUE, 60, "motion2") diff --git a/code/game/objects/machinery/squad_supply/supply_console.dm b/code/game/objects/machinery/squad_supply/supply_console.dm index 18c246a5ea5fd..285b54ab0bc9e 100644 --- a/code/game/objects/machinery/squad_supply/supply_console.dm +++ b/code/game/objects/machinery/squad_supply/supply_console.dm @@ -25,6 +25,7 @@ /obj/machinery/computer/supplydrop_console/Initialize(mapload) . = ..() + RegisterSignal(SSdcs, COMSIG_GLOB_SUPPLY_BEACON_CREATED, PROC_REF(ping_beacon)) return INITIALIZE_HINT_LATELOAD /obj/machinery/computer/supplydrop_console/LateInitialize() @@ -34,6 +35,11 @@ supply_pad = _supply_pad return +/// Used to notify of a new beacon target +/obj/machinery/computer/supplydrop_console/proc/ping_beacon() + SIGNAL_HANDLER + playsound(src,'sound/machines/terminal_prompt_confirm.ogg', 50, TRUE) + /obj/machinery/computer/supplydrop_console/Destroy() supply_beacon = null supply_pad = null @@ -68,8 +74,14 @@ switch(action) if("select_beacon") - var/datum/supply_beacon/supply_beacon_choice = GLOB.supply_beacon[tgui_input_list(ui.user, "Select the beacon to send supplies", "Beacon choice", GLOB.supply_beacon)] - if(!istype(supply_beacon_choice)) + var/list/beacon_list = GLOB.supply_beacon.Copy() + for(var/beacon_name in beacon_list) + var/datum/supply_beacon/beacon = beacon_list[beacon_name] + if(!is_ground_level(beacon.drop_location.z)) + beacon_list -= beacon_name + continue + var/datum/supply_beacon/supply_beacon_choice = beacon_list[tgui_input_list(ui.user, "Select the beacon to send supplies", "Beacon choice", beacon_list)] + if(!istype(supply_beacon_choice) && is_ground_level(supply_beacon.drop_location.z)) return supply_beacon = supply_beacon_choice RegisterSignal(supply_beacon, COMSIG_QDELETING, PROC_REF(clean_supply_beacon), override = TRUE) diff --git a/code/game/objects/machinery/suit_storage_unit.dm b/code/game/objects/machinery/suit_storage_unit.dm index 3d4a67b897e4f..1a8a884f7b5cf 100644 --- a/code/game/objects/machinery/suit_storage_unit.dm +++ b/code/game/objects/machinery/suit_storage_unit.dm @@ -35,31 +35,32 @@ inserted_tank = new starting_tank_type(src) update_icon() - -/obj/machinery/suit_storage_unit/update_icon() - overlays.Cut() - if(isUV) - icon_state = "disinfecting" +/obj/machinery/suit_storage_unit/update_overlays() + . = ..() + if(isUV || !isopen) return - else if(isopen) - if(inserted_helmet) - overlays += image("helmet") - if(inserted_suit) - overlays += image("suit") - if(inserted_mask) - overlays += image("mask") - if(inserted_tank) - overlays += image("tank") + if(inserted_helmet) + . += image("helmet") + if(inserted_suit) + . += image("suit") + if(inserted_mask) + . += image("mask") + if(inserted_tank) + . += image("tank") - icon_state = "open" +/obj/machinery/suit_storage_unit/update_icon_state() + . = ..() + if(isUV) + return + if(isopen) + icon_state = "open" else icon_state = "closed" if(machine_stat & NOPOWER) icon_state += "_off" - /obj/machinery/suit_storage_unit/power_change() ..() if(machine_stat & NOPOWER) @@ -228,6 +229,8 @@ /obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(machine_stat & NOPOWER) return diff --git a/code/game/objects/machinery/telecomms/broadcasting.dm b/code/game/objects/machinery/telecomms/broadcasting.dm index 54fd59fbc57e3..e87c0718dc798 100644 --- a/code/game/objects/machinery/telecomms/broadcasting.dm +++ b/code/game/objects/machinery/telecomms/broadcasting.dm @@ -186,7 +186,7 @@ // Add observers who have ghost radio enabled. for(var/mob/dead/observer/ghost in GLOB.player_list) - if(ghost.client.prefs.toggles_chat & CHAT_GHOSTRADIO) + if(ghost?.client?.prefs?.toggles_chat & CHAT_GHOSTRADIO) receive |= ghost // Render the message and have everybody hear it. diff --git a/code/game/objects/machinery/telecomms/telecomunications.dm b/code/game/objects/machinery/telecomms/telecomunications.dm index 37eee7febe775..523f07c031a19 100644 --- a/code/game/objects/machinery/telecomms/telecomunications.dm +++ b/code/game/objects/machinery/telecomms/telecomunications.dm @@ -144,7 +144,8 @@ GLOBAL_LIST_EMPTY(telecomms_freq_listening_list) return -/obj/machinery/telecomms/update_icon() +/obj/machinery/telecomms/update_icon_state() + . = ..() if(on) if(CHECK_BITFIELD(machine_stat, PANEL_OPEN)) icon_state = "[initial(icon_state)]_o" diff --git a/code/game/objects/machinery/vending/beginner_vendor.dm b/code/game/objects/machinery/vending/beginner_vendor.dm new file mode 100644 index 0000000000000..3824ab4aad171 --- /dev/null +++ b/code/game/objects/machinery/vending/beginner_vendor.dm @@ -0,0 +1,39 @@ +//Beginner Vendor + +GLOBAL_LIST_INIT(beginner_loadouts, init_beginner_loadouts()) + +/proc/init_beginner_loadouts() //List of all loadouts in quick_load_beginners.dm + . = list() + var/list/loadout_list = list( + /datum/outfit/quick/beginner/marine/rifleman, + /datum/outfit/quick/beginner/marine/machinegunner, + /datum/outfit/quick/beginner/marine/marksman, + /datum/outfit/quick/beginner/marine/shotgunner, + /datum/outfit/quick/beginner/marine/shocktrooper, + /datum/outfit/quick/beginner/marine/hazmat, + /datum/outfit/quick/beginner/marine/cqc, + /datum/outfit/quick/beginner/marine/chad, + /datum/outfit/quick/beginner/engineer/builder, + /datum/outfit/quick/beginner/engineer/burnitall, + /datum/outfit/quick/beginner/engineer/pcenjoyer, + /datum/outfit/quick/beginner/corpsman/lifesaver, + /datum/outfit/quick/beginner/corpsman/hypobelt, + /datum/outfit/quick/beginner/smartgunner/sg29, + /datum/outfit/quick/beginner/smartgunner/sg85, + ) + + for(var/X in loadout_list) + .[X] = new X + +/obj/machinery/quick_vendor/beginner //Loadout vendor that shits out basic pre-made loadouts so new players can get something usable + icon_state = "loadoutvendor" + categories = list( + "Squad Marine", + "Squad Engineer", + "Squad Corpsman", + "Squad Smartgunner", + ) + drop_worn_items = TRUE + +/obj/machinery/quick_vendor/beginner/set_stock_list() + global_list_to_use = GLOB.beginner_loadouts diff --git a/code/game/objects/machinery/vending/loadout_vendor.dm b/code/game/objects/machinery/vending/loadout_vendor.dm index ba5fd54604b59..42539a1bc0d42 100644 --- a/code/game/objects/machinery/vending/loadout_vendor.dm +++ b/code/game/objects/machinery/vending/loadout_vendor.dm @@ -26,6 +26,7 @@ set_light(0) /obj/machinery/loadout_vendor/update_icon_state() + . = ..() if(is_operational()) icon_state = initial(icon_state) else diff --git a/code/game/objects/machinery/vending/marine_vending.dm b/code/game/objects/machinery/vending/marine_vending.dm index 0c65676120a03..ce3dfdcdca327 100644 --- a/code/game/objects/machinery/vending/marine_vending.dm +++ b/code/game/objects/machinery/vending/marine_vending.dm @@ -23,18 +23,23 @@ ), "Energy Weapons" = list( /obj/item/cell/lasgun/lasrifle = -1, + /obj/item/cell/lasgun/volkite/powerpack/marine = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_rifle = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_sniper = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_carbine = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_mlaser = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_pistol = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/tesla = 2, + /obj/item/cell/lasgun/plasma = -1, ), "SMGs" = list( /obj/item/weapon/gun/smg/standard_smg = -1, /obj/item/ammo_magazine/smg/standard_smg = -1, /obj/item/weapon/gun/smg/standard_machinepistol = -1, /obj/item/ammo_magazine/smg/standard_machinepistol = -1, + /obj/item/weapon/gun/smg/standard_heavysmg = -1, + /obj/item/ammo_magazine/smg/standard_heavysmg = -1, + /obj/item/ammo_magazine/smg/standard_heavysmg/squashhead = -1, ), "Marksman" = list( /obj/item/weapon/gun/rifle/standard_dmr = -1, @@ -80,7 +85,6 @@ /obj/item/weapon/twohanded/spear/tactical = -1, /obj/item/weapon/twohanded/glaive/harvester = -1, /obj/item/weapon/powerfist = -1, - /obj/item/weapon/shield/riot/marine = 6, /obj/item/weapon/shield/riot/marine/deployable = 6, /obj/item/weapon/combat_knife/harvester = 12, ), @@ -116,9 +120,11 @@ /obj/item/explosive/grenade/incendiary = 50, /obj/item/explosive/grenade/smokebomb = 25, /obj/item/explosive/grenade/smokebomb/cloak = 25, + /obj/item/explosive/grenade/smokebomb/antigas = 20, /obj/item/explosive/grenade/sticky/cloaker = 10, - /obj/item/explosive/grenade/smokebomb/drain = 10, /obj/item/explosive/grenade/mirage = 100, + /obj/item/explosive/grenade/bullet/laser = 30, + /obj/item/explosive/grenade/bullet/hefa = 10, /obj/item/storage/box/m94 = 200, /obj/item/storage/box/m94/cas = 30, ), @@ -136,7 +142,7 @@ /obj/structure/closet/crate/mortar_ammo/mortar_kit = 1, /obj/structure/closet/crate/mortar_ammo/howitzer_kit = 1, /obj/item/storage/box/crate/sentry = 4, - /obj/item/storage/box/tl102 = 1, + /obj/item/storage/box/hsg_102 = 1, /obj/item/weapon/gun/heavymachinegun = 1, /obj/item/ammo_magazine/heavymachinegun = 5, /obj/item/ammo_magazine/heavymachinegun/small = 10, @@ -169,8 +175,6 @@ /obj/item/ammo_magazine/rifle/pepperball/pepperball_mini = -1, /obj/item/attachable/stock/t76 = -1, /obj/item/attachable/flamer_nozzle = -1, - /obj/item/attachable/flamer_nozzle/wide = -1, - /obj/item/attachable/flamer_nozzle/long = -1, ), "Boxes" = list( /obj/item/ammo_magazine/packet/p9mm = -1, @@ -239,18 +243,23 @@ ), "Energy Weapons" = list( /obj/item/cell/lasgun/lasrifle = -1, + /obj/item/cell/lasgun/volkite/powerpack/marine = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_rifle = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_sniper = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_carbine = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_mlaser = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_pistol = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/tesla = 2, + /obj/item/cell/lasgun/plasma = -1, ), "SMGs" = list( /obj/item/weapon/gun/smg/standard_smg = -1, /obj/item/ammo_magazine/smg/standard_smg = -1, /obj/item/weapon/gun/smg/standard_machinepistol = -1, /obj/item/ammo_magazine/smg/standard_machinepistol = -1, + /obj/item/weapon/gun/smg/standard_heavysmg = -1, + /obj/item/ammo_magazine/smg/standard_heavysmg = -1, + /obj/item/ammo_magazine/smg/standard_heavysmg/squashhead = -1, ), "Marksman" = list( /obj/item/weapon/gun/rifle/standard_dmr = -1, @@ -295,7 +304,6 @@ /obj/item/weapon/twohanded/spear/tactical = -1, /obj/item/weapon/twohanded/glaive/harvester = -1, /obj/item/weapon/powerfist = -1, - /obj/item/weapon/shield/riot/marine = 6, /obj/item/weapon/shield/riot/marine/deployable = 6, /obj/item/weapon/combat_knife/harvester = 12, ), @@ -306,7 +314,6 @@ /obj/item/ammo_magazine/pistol/standard_heavypistol = -1, /obj/item/weapon/gun/revolver/standard_revolver = -1, /obj/item/ammo_magazine/revolver/standard_revolver = -1, - /obj/item/weapon/gun/revolver/standard_magnum = -1, /obj/item/ammo_magazine/revolver/standard_magnum = -1, /obj/item/weapon/gun/pistol/standard_pocketpistol = -1, /obj/item/ammo_magazine/pistol/standard_pocketpistol = -1, @@ -325,8 +332,9 @@ /obj/item/explosive/grenade/sticky = 125, /obj/item/explosive/grenade/incendiary = 50, /obj/item/explosive/grenade/smokebomb/cloak = 25, - /obj/item/explosive/grenade/smokebomb/drain = 10, + /obj/item/explosive/grenade/smokebomb/antigas = 20, /obj/item/explosive/grenade/mirage = 100, + /obj/item/explosive/grenade/bullet/laser = 30, /obj/item/storage/box/m94 = 200, /obj/item/storage/box/m94/cas = 50, ), @@ -367,8 +375,6 @@ /obj/item/ammo_magazine/rifle/pepperball/pepperball_mini = -1, /obj/item/attachable/stock/t76 = -1, /obj/item/attachable/flamer_nozzle = -1, - /obj/item/attachable/flamer_nozzle/wide = -1, - /obj/item/attachable/flamer_nozzle/long = -1, ), "Boxes" = list( /obj/item/ammo_magazine/packet/p9mm = -1, @@ -437,18 +443,25 @@ ), "Energy Weapons" = list( /obj/item/cell/lasgun/lasrifle = -1, + /obj/item/cell/lasgun/volkite/powerpack/marine = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_rifle = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_sniper = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_carbine = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_mlaser = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_pistol = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/tesla = -1, + /obj/item/cell/lasgun/plasma = -1, + /obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/rifle = -1, + /obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/cannon = -1, ), "SMGs" = list( /obj/item/weapon/gun/smg/standard_smg = -1, /obj/item/ammo_magazine/smg/standard_smg = -1, /obj/item/weapon/gun/smg/standard_machinepistol = -1, /obj/item/ammo_magazine/smg/standard_machinepistol = -1, + /obj/item/weapon/gun/smg/standard_heavysmg = -1, + /obj/item/ammo_magazine/smg/standard_heavysmg = -1, + /obj/item/ammo_magazine/smg/standard_heavysmg/squashhead = -1, ), "Marksman" = list( /obj/item/weapon/gun/rifle/standard_dmr = -1, @@ -457,6 +470,7 @@ /obj/item/ammo_magazine/rifle/standard_br = -1, /obj/item/weapon/gun/rifle/chambered = -1, /obj/item/ammo_magazine/rifle/chamberedrifle = -1, + /obj/item/ammo_magazine/rifle/chamberedrifle/flak = -1, /obj/item/weapon/gun/shotgun/pump/bolt = -1, /obj/item/ammo_magazine/rifle/bolt = -1, /obj/item/weapon/gun/shotgun/double/martini = -1, @@ -525,14 +539,18 @@ /obj/item/ammo_magazine/rifle/tx54/smoke = -1, /obj/item/ammo_magazine/rifle/tx54/smoke/dense = -1, /obj/item/ammo_magazine/rifle/tx54/smoke/tangle = -1, + /obj/item/ammo_magazine/rifle/tx54/smoke/acid = -1, + /obj/item/ammo_magazine/rifle/tx54/razor = -1, /obj/item/explosive/grenade = -1, /obj/item/explosive/grenade/m15 = -1, /obj/item/explosive/grenade/sticky = -1, /obj/item/explosive/grenade/sticky/trailblazer = -1, /obj/item/explosive/grenade/incendiary = -1, /obj/item/explosive/grenade/smokebomb/cloak = -1, - /obj/item/explosive/grenade/smokebomb/drain = -1, + /obj/item/explosive/grenade/smokebomb/antigas = -1, /obj/item/explosive/grenade/mirage = -1, + /obj/item/explosive/grenade/bullet/laser = -1, + /obj/item/explosive/grenade/bullet/hefa = -1, /obj/item/storage/box/m94 = -1, /obj/item/storage/box/m94/cas = -1, ), @@ -547,23 +565,11 @@ "Heavy Weapons" = list( /obj/structure/closet/crate/mortar_ammo/mortar_kit = -1, /obj/structure/closet/crate/mortar_ammo/howitzer_kit = -1, - /obj/structure/largecrate/supply/weapons/standard_atgun = -1, - /obj/item/ammo_magazine/standard_atgun = -1, - /obj/item/ammo_magazine/standard_atgun/apcr = -1, - /obj/item/ammo_magazine/standard_atgun/he = -1, - /obj/item/ammo_magazine/standard_atgun/beehive = -1, - /obj/item/ammo_magazine/standard_atgun/incend = -1, /obj/item/storage/box/crate/sentry = -1, - /obj/item/storage/box/tl102 = -1, + /obj/item/storage/box/hsg_102 = -1, /obj/item/weapon/gun/heavymachinegun = -1, /obj/item/ammo_magazine/heavymachinegun = -1, - /obj/item/storage/holster/backholster/rpg/full = -1, - /obj/item/ammo_magazine/rocket/recoilless = -1, - /obj/item/ammo_magazine/rocket/recoilless/light = -1, - /obj/item/ammo_magazine/rocket/recoilless/heat = -1, - /obj/item/ammo_magazine/rocket/recoilless/cloak = -1, - /obj/item/ammo_magazine/rocket/recoilless/smoke = -1, - /obj/item/ammo_magazine/rocket/recoilless/plasmaloss = -1, + /obj/item/ammo_magazine/heavymachinegun/small = -1, ), "Attachments" = list( /obj/item/attachable/bayonet = -1, @@ -712,7 +718,7 @@ products = list( "Surplus Special Equipment" = list( /obj/item/pinpointer = 1, - /obj/item/beacon/supply_beacon = 1, + /obj/item/supply_beacon = 1, /obj/item/ammo_magazine/rifle/autosniper = 3, /obj/item/ammo_magazine/rifle/tx8 = 3, /obj/item/ammo_magazine/rocket/sadar = 3, @@ -747,6 +753,7 @@ /obj/item/storage/box/visual/grenade/incendiary = 2, /obj/item/storage/box/visual/grenade/M15 = 2, /obj/item/storage/box/visual/grenade/cloak = 1, + /obj/item/storage/box/visual/grenade/lasburster = 1, ), "Ammo Boxes" = list( /obj/item/big_ammo_box = -1, @@ -821,7 +828,8 @@ . = ..() update_icon() -/obj/machinery/vending/lasgun/update_icon() +/obj/machinery/vending/lasgun/update_icon_state() + . = ..() if(machine_max_charge) switch(machine_current_charge / max(1,machine_max_charge)) if(0.7 to 1) @@ -915,7 +923,6 @@ /obj/item/reagent_containers/hypospray/autoinjector/imidazoline = 20, /obj/item/reagent_containers/hypospray/autoinjector/quickclot = 10, /obj/item/reagent_containers/hypospray/autoinjector/medicalnanites = 20, - /obj/item/reagent_containers/hypospray/autoinjector/russian_red = 10, ), "Heal Pack" = list( /obj/item/stack/medical/heal_pack/gauze = -1, @@ -1069,7 +1076,7 @@ "General" = list( /obj/item/clothing/suit/modular = -1, /obj/item/clothing/suit/modular/rownin = -1, - /obj/item/clothing/suit/modular/xenonauten/pilot = -1, + /obj/item/clothing/suit/storage/marine/ballistic = -1, /obj/item/facepaint/green = -1, ), "Armor modules" = list( @@ -1097,19 +1104,6 @@ /obj/item/armor_module/module/style/light_armor = -1, /obj/item/armor_module/module/style/medium_armor = -1, /obj/item/armor_module/module/style/heavy_armor = -1, - /obj/item/clothing/head/modular/marine/kabuto = -1, - /obj/item/armor_module/armor/chest/marine/kabuto = -1, - /obj/item/armor_module/armor/legs/marine/kabuto = -1, - /obj/item/armor_module/armor/arms/marine/kabuto = -1, - /obj/item/clothing/head/modular/marine/hotaru = -1, - /obj/item/clothing/suit/modular/jaeger/hotaru = -1, - /obj/item/armor_module/armor/chest/marine/hotaru = -1, - /obj/item/armor_module/armor/legs/marine/hotaru = -1, - /obj/item/armor_module/armor/arms/marine/hotaru = -1, - /obj/item/clothing/head/modular/marine/dashe = -1, - /obj/item/armor_module/armor/chest/marine/dashe = -1, - /obj/item/armor_module/armor/arms/marine/dashe = -1, - /obj/item/armor_module/armor/legs/marine/dashe = -1, ), "Jaeger Mk.I chestpieces" = list( /obj/item/armor_module/armor/chest/marine/skirmisher = -1, @@ -1417,12 +1411,15 @@ /obj/item/ammo_magazine/railgun = -1, /obj/item/ammo_magazine/railgun/smart = -1, /obj/item/ammo_magazine/railgun/hvap = -1, - /obj/item/weapon/gun/rifle/tx8 = -1, - /obj/item/ammo_magazine/rifle/tx8 = -1, - /obj/item/ammo_magazine/rifle/tx8/impact = -1, - /obj/item/ammo_magazine/rifle/tx8/incendiary = -1, /obj/item/ammo_magazine/packet/scout_rifle = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/xray = -1, + /obj/item/weapon/gun/launcher/rocket/recoillessrifle = -1, + /obj/item/ammo_magazine/rocket/recoilless = -1, + /obj/item/ammo_magazine/rocket/recoilless/light = -1, + /obj/item/ammo_magazine/rocket/recoilless/heat = -1, + /obj/item/ammo_magazine/rocket/recoilless/cloak = -1, + /obj/item/ammo_magazine/rocket/recoilless/smoke = -1, + /obj/item/ammo_magazine/rocket/recoilless/plasmaloss = -1, /obj/item/weapon/gun/launcher/rocket/m57a4/t57 = -1, /obj/item/ammo_magazine/rocket/m57a4 = -1, /obj/item/weapon/gun/launcher/rocket/sadar/valhalla = -1, @@ -1433,18 +1430,8 @@ /obj/item/ammo_magazine/rocket/sadar/wp/unguided = -1, /obj/item/weapon/gun/shotgun/zx76 = -1, /obj/item/ammo_magazine/shotgun/incendiary = -1, - /obj/item/weapon/gun/rifle/standard_autosniper = -1, - /obj/item/ammo_magazine/rifle/autosniper = -1, - /obj/item/weapon/gun/rifle/sniper/antimaterial = -1, - /obj/item/ammo_magazine/sniper = -1, - /obj/item/ammo_magazine/rifle/autosniper = -1, /obj/item/weapon/gun/minigun/valhalla = -1, /obj/item/ammo_magazine/minigun_powerpack = -1, - /obj/item/weapon/gun/rifle/standard_smartmachinegun = -1, - /obj/item/ammo_magazine/standard_smartmachinegun = -1, - /obj/item/weapon/gun/minigun/smart_minigun = -1, - /obj/item/ammo_magazine/minigun_powerpack/smartgun = -1, - /obj/item/ammo_magazine/packet/smart_minigun = -1, /obj/item/weapon/gun/launcher/rocket/oneuse = -1, /obj/item/storage/holster/belt/mateba/full = -1, /obj/item/ammo_magazine/revolver/mateba = -1, @@ -1459,13 +1446,50 @@ /obj/item/explosive/grenade/smokebomb/neuro = -1, /obj/item/explosive/grenade/smokebomb/acid = -1, /obj/item/explosive/grenade/smokebomb/satrapine = -1, + /obj/item/explosive/grenade/smokebomb/drain = -1, + /obj/item/explosive/grenade/chem_grenade/cleaner = -1, /obj/item/weapon/gun/rifle/m412l1_hpr = -1, /obj/item/ammo_magazine/m412l1_hpr = -1, /obj/item/weapon/gun/rifle/famas = -1, /obj/item/ammo_magazine/rifle/famas = -1, ), + "Smartguns/IFF" = list( + /obj/item/weapon/gun/rifle/standard_smartmachinegun = -1, + /obj/item/ammo_magazine/standard_smartmachinegun = -1, + /obj/item/weapon/gun/minigun/smart_minigun = -1, + /obj/item/ammo_magazine/minigun_powerpack/smartgun = -1, + /obj/item/ammo_magazine/packet/smart_minigun = -1, + /obj/item/weapon/gun/rifle/standard_smarttargetrifle = -1, + /obj/item/ammo_magazine/rifle/standard_smarttargetrifle = -1, + /obj/item/ammo_magazine/packet/smart_targetrifle = -1, + /obj/item/ammo_magazine/rifle/standard_spottingrifle = -1, + /obj/item/ammo_magazine/rifle/standard_spottingrifle/highimpact = -1, + /obj/item/ammo_magazine/rifle/standard_spottingrifle/heavyrubber = -1, + /obj/item/ammo_magazine/rifle/standard_spottingrifle/tungsten = -1, + /obj/item/ammo_magazine/rifle/standard_spottingrifle/flak = -1, + /obj/item/ammo_magazine/rifle/standard_spottingrifle/plasmaloss = -1, + /obj/item/ammo_magazine/rifle/standard_spottingrifle/incendiary = -1, + /obj/item/weapon/gun/pistol/smart_pistol = -1, + /obj/item/ammo_magazine/pistol/standard_pistol/smart_pistol = -1, + /obj/item/weapon/gun/rifle/tx8 = -1, + /obj/item/ammo_magazine/rifle/tx8 = -1, + /obj/item/ammo_magazine/rifle/tx8/impact = -1, + /obj/item/ammo_magazine/rifle/tx8/incendiary = -1, + /obj/item/weapon/gun/rifle/standard_autosniper = -1, + /obj/item/ammo_magazine/rifle/autosniper = -1, + /obj/item/weapon/gun/rifle/sniper/antimaterial = -1, + /obj/item/ammo_magazine/sniper = -1, + /obj/item/ammo_magazine/sniper/incendiary = -1, + /obj/item/ammo_magazine/sniper/flak = -1, + ), "Mounted" = list( - /obj/item/weapon/gun/standard_auto_cannon = -1, + /obj/item/weapon/gun/standard_atgun = -1, + /obj/item/ammo_magazine/standard_atgun = -1, + /obj/item/ammo_magazine/standard_atgun/apcr = -1, + /obj/item/ammo_magazine/standard_atgun/he = -1, + /obj/item/ammo_magazine/standard_atgun/beehive = -1, + /obj/item/ammo_magazine/standard_atgun/incend = -1, + /obj/structure/largecrate/supply/weapons/standard_flakgun = -1, /obj/item/ammo_magazine/auto_cannon = -1, /obj/item/ammo_magazine/auto_cannon/flak = -1, /obj/item/weapon/gun/standard_minigun = -1, @@ -1477,7 +1501,7 @@ /obj/item/ammo_magazine/standard_agls/flare = -1, /obj/item/ammo_magazine/standard_agls/cloak = -1, /obj/item/ammo_magazine/standard_agls/tanglefoot = -1, - /obj/item/weapon/gun/heavy_isg = -1, + /obj/structure/largecrate/supply/weapons/heavy_flakgun = -1, /obj/item/ammo_magazine/heavy_isg/he = -1, /obj/item/ammo_magazine/heavy_isg/sabot = -1, ), @@ -1490,15 +1514,15 @@ /obj/item/clothing/gloves/marine/specialist = -1, /obj/item/clothing/suit/storage/marine/B17/valhalla = -1, /obj/item/clothing/head/helmet/marine/grenadier = -1, - /obj/item/storage/backpack/marine/satchel/scout_cloak/scout = -1, + /obj/item/storage/backpack/marine/satchel/scout_cloak = -1, /obj/item/storage/backpack/marine/satchel/scout_cloak/sniper = -1, /obj/item/storage/belt/grenade/b17 = -1, + /obj/item/storage/holster/m25 = -1, /obj/item/armor_module/module/valkyrie_autodoc = -1, /obj/item/armor_module/module/fire_proof = -1, /obj/item/armor_module/module/fire_proof_helmet = -1, /obj/item/armor_module/module/tyr_extra_armor = -1, /obj/item/armor_module/module/tyr_head = -1, - /obj/item/attachable/shoulder_mount = -1, /* RU TGMC EDIT /obj/item/armor_module/module/mimir_environment_protection = -1, /obj/item/armor_module/module/mimir_environment_protection/mimir_helmet = -1, @@ -1601,6 +1625,12 @@ RU TGMC EDIT*/ /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/culverin = -1, /obj/item/cell/lasgun/volkite = -1, /obj/item/cell/lasgun/volkite/powerpack = -1, + /obj/item/weapon/gun/launcher/rocket/som = -1, + /obj/item/ammo_magazine/rocket/som = -1, + /obj/item/ammo_magazine/rocket/som/incendiary = -1, + /obj/item/ammo_magazine/rocket/som/heat = -1, + /obj/item/weapon/gun/flamer/som = -1, + /obj/item/ammo_magazine/flamer_tank/large/som = -1, ), "ICC" = list( /obj/item/weapon/gun/rifle/icc_battlecarbine = -1, @@ -1630,6 +1660,15 @@ RU TGMC EDIT*/ /obj/item/ammo_magazine/rifle/dpm = -1, /obj/item/weapon/gun/clf_heavyrifle = -1, /obj/item/shotgunbox/clf_heavyrifle = -1, + /obj/item/weapon/gun/launcher/rocket/icc = -1, + /obj/item/ammo_magazine/rocket/icc = -1, + /obj/item/ammo_magazine/rocket/icc/heat = -1, + /obj/item/ammo_magazine/rocket/icc/thermobaric = -1, + /obj/item/weapon/gun/rifle/icc_mg = -1, + /obj/item/ammo_magazine/icc_mg = -1, + /obj/item/ammo_magazine/icc_mg/belt = -1, + /obj/item/weapon/gun/icc_hmg = -1, + /obj/item/ammo_magazine/icc_hmg = -1, ), "PMC" = list( /obj/item/weapon/gun/rifle/sniper/elite = -1, diff --git a/code/game/objects/machinery/vending/new_marine_vendors.dm b/code/game/objects/machinery/vending/new_marine_vendors.dm index ad6063b329bff..973f64ae6bae3 100644 --- a/code/game/objects/machinery/vending/new_marine_vendors.dm +++ b/code/game/objects/machinery/vending/new_marine_vendors.dm @@ -41,6 +41,7 @@ set_light(0) /obj/machinery/marine_selector/update_icon_state() + . = ..() if(is_operational()) icon_state = initial(icon_state) else @@ -63,11 +64,11 @@ to_chat(user, span_warning("Access denied. Your assigned role doesn't have access to this machinery.")) return FALSE - var/obj/item/card/id/I = H.get_idcard() - if(!istype(I)) //not wearing an ID + var/obj/item/card/id/user_id = H.get_idcard() + if(!istype(user_id)) //not wearing an ID return FALSE - if(I.registered_name != H.real_name) + if(user_id.registered_name != H.real_name) return FALSE if(lock_flags & JOB_LOCK && vendor_role && !istype(H.job, vendor_role)) @@ -144,13 +145,16 @@ return var/idx = text2path(params["vend"]) - var/obj/item/card/id/I = usr.get_idcard() + var/obj/item/card/id/user_id = usr.get_idcard() var/list/L = listed_products[idx] var/item_category = L[1] var/cost = L[3] - if(use_points && (item_category in I.marine_points) && I.marine_points[item_category] < cost) + if(!(user_id.id_flags & CAN_BUY_LOADOUT)) //If you use the quick-e-quip, you cannot also use the GHMMEs + to_chat(usr, span_warning("Access denied. You have already vended a loadout.")) + return FALSE + if(use_points && (item_category in user_id.marine_points) && user_id.marine_points[item_category] < cost) to_chat(usr, span_warning("Not enough points.")) if(icon_deny) flick(icon_deny, src) @@ -163,9 +167,9 @@ flick(icon_deny, src) return - if(item_category in I.marine_buy_choices) - if(I.marine_buy_choices[item_category] && GLOB.marine_selector_cats[item_category]) - I.marine_buy_choices[item_category] -= 1 + if(item_category in user_id.marine_buy_choices) + if(user_id.marine_buy_choices[item_category] && GLOB.marine_selector_cats[item_category]) + user_id.marine_buy_choices[item_category] -= 1 else if(cost == 0) to_chat(usr, span_warning("You can't buy things from this category anymore.")) @@ -198,9 +202,10 @@ for (var/obj/item/vended_item in vended_items) vended_item.on_vend(usr, faction, auto_equip = TRUE) - if(use_points && (item_category in I.marine_points)) - I.marine_points[item_category] -= cost + if(use_points && (item_category in user_id.marine_points)) + user_id.marine_points[item_category] -= cost . = TRUE + user_id.id_flags |= USED_GHMME /obj/machinery/marine_selector/clothes name = "GHMME Automated Closet" @@ -382,6 +387,11 @@ lock_flags = JOB_LOCK gives_webbing = FALSE +/obj/machinery/marine_selector/clothes/commander/valhalla + vendor_role = /datum/job/fallen/marine/fieldcommander + resistance_flags = INDESTRUCTIBLE + lock_flags = JOB_LOCK + /* RUTGMC DELETION /obj/machinery/marine_selector/clothes/commander/Initialize(mapload) . = ..() @@ -701,6 +711,7 @@ ) /obj/effect/vendor_bundle/stretcher + desc = "A standard-issue TerraGov Marine Corps corpsman medivac stretcher. Comes with an extra beacon, but multiple beds can be linked to one beacon." gear_to_spawn = list( /obj/item/roller/medevac, /obj/item/medevac_beacon, @@ -709,7 +720,7 @@ /obj/effect/vendor_bundle/engi gear_to_spawn = list( /obj/item/explosive/plastique, - /obj/item/explosive/grenade/chem_grenade/razorburn_smol, + /obj/item/explosive/grenade/chem_grenade/razorburn_small, /obj/item/clothing/gloves/marine/insulated, /obj/item/cell/high, /obj/item/lightreplacer, @@ -728,8 +739,8 @@ /obj/effect/vendor_bundle/leader gear_to_spawn = list( /obj/item/explosive/plastique, - /obj/item/beacon/supply_beacon, - /obj/item/beacon/supply_beacon, + /obj/item/supply_beacon, + /obj/item/supply_beacon, //RUTGMC EDIT ADDITION BEGIN - ORBITAL_BEACON /obj/item/beacon/orbital_bombardment_beacon, //RUTGMC EDIT ADDITION END @@ -743,7 +754,7 @@ /obj/effect/vendor_bundle/commander gear_to_spawn = list( /obj/item/explosive/plastique, - /obj/item/beacon/supply_beacon, + /obj/item/supply_beacon, //RUTGMC EDIT ADDITION BEGIN - ORBITAL_BEACON /obj/item/beacon/orbital_bombardment_beacon, //RUTGMC EDIT ADDITION END diff --git a/code/game/objects/machinery/vending/quick_vendor.dm b/code/game/objects/machinery/vending/quick_vendor.dm index db2e6553aaa73..2a68fe84ceb67 100644 --- a/code/game/objects/machinery/vending/quick_vendor.dm +++ b/code/game/objects/machinery/vending/quick_vendor.dm @@ -81,10 +81,10 @@ GLOBAL_LIST_INIT(quick_loadouts, init_quick_loadouts()) for(var/X in loadout_list) .[X] = new X - /obj/machinery/quick_vendor name = "Kwik-E-Quip vendor" - desc = "An advanced vendor to instantly arm soldiers with specific sets of equipment, allowing for immediate combat deployment." + desc = "An advanced vendor to instantly arm soldiers with specific sets of equipment, allowing for immediate combat deployment. \ + Mutually exclusive with the GHMME." icon = 'icons/obj/machines/vending.dmi' icon_state = "specialist" density = TRUE @@ -106,6 +106,18 @@ GLOBAL_LIST_INIT(quick_loadouts, init_quick_loadouts()) "Squad Smartgunner", "Squad Leader", ) + ///Whichever global loadout is used to build the vendor stock + var/list/global_list_to_use + ///If the vendor drops your items, or deletes them when you vend a loadout + var/drop_worn_items = FALSE + +/obj/machinery/quick_vendor/Initialize(mapload) + . = ..() + set_stock_list() + +///Chooses which global list the vendor will build stock from, gets run on Initialize() +/obj/machinery/quick_vendor/proc/set_stock_list() + global_list_to_use = GLOB.quick_loadouts /obj/machinery/quick_vendor/Initialize(mapload) . = ..() @@ -119,6 +131,7 @@ GLOBAL_LIST_INIT(quick_loadouts, init_quick_loadouts()) set_light(0) /obj/machinery/quick_vendor/update_icon_state() + . = ..() if(is_operational()) icon_state = initial(icon_state) else @@ -148,6 +161,7 @@ GLOBAL_LIST_INIT(quick_loadouts, init_quick_loadouts()) var/obj/item/card/id/user_id = human_user.get_idcard() if(user_id.registered_name != human_user.real_name) return FALSE + return TRUE /obj/machinery/quick_vendor/ui_interact(mob/living/user, datum/tgui/ui) @@ -164,9 +178,9 @@ GLOBAL_LIST_INIT(quick_loadouts, init_quick_loadouts()) . = ..() var/list/data = list() var/list/loadouts_data_tgui = list() - for(var/loadout_data in GLOB.quick_loadouts) + for(var/loadout_data in global_list_to_use) var/list/next_loadout_data = list() //makes a list item with the below lines, for each loadout entry in the list - var/datum/outfit/quick/current_loadout = GLOB.quick_loadouts[loadout_data] + var/datum/outfit/quick/current_loadout = global_list_to_use[loadout_data] next_loadout_data["job"] = current_loadout.jobtype next_loadout_data["name"] = current_loadout.name next_loadout_data["desc"] = current_loadout.desc @@ -191,7 +205,7 @@ GLOBAL_LIST_INIT(quick_loadouts, init_quick_loadouts()) return switch(action) if("selectLoadout") - var/datum/outfit/quick/selected_loadout = GLOB.quick_loadouts[text2path(params["loadout_outfit"])] + var/datum/outfit/quick/selected_loadout = global_list_to_use[text2path(params["loadout_outfit"])] if(!selected_loadout) to_chat(ui.user, span_warning("Error when loading this loadout")) CRASH("Fail to load loadouts") @@ -199,13 +213,28 @@ GLOBAL_LIST_INIT(quick_loadouts, init_quick_loadouts()) to_chat(usr, span_warning("This loadout has been depleted, you'll need to pick another.")) return var/obj/item/card/id/user_id = usr.get_idcard() //ui.user better? - if(selected_loadout.jobtype != user_id.rank) + var/user_job = user_id.rank + user_job = replacetext(user_job, "Fallen ", "") //So that jobs in valhalla can vend a loadout too + if(selected_loadout.jobtype != user_job) to_chat(usr, span_warning("You are not in the right job for this loadout!")) return - if(user_id.can_buy_loadout) - user_id.can_buy_loadout = FALSE + if(user_id.id_flags & USED_GHMME) //Same check here, in case they opened the UI before vending a loadout somehow + to_chat(ui.user, span_warning("Access denied, continue using the GHHME.")) + return FALSE + if(user_id.id_flags & CAN_BUY_LOADOUT) + user_id.id_flags &= ~CAN_BUY_LOADOUT selected_loadout.quantity -- + if(drop_worn_items) + for(var/obj/item/inventory_items in ui.user) + if(inventory_items.equip_slot_flags == ITEM_SLOT_ID) + continue + ui.user.dropItemToGround(inventory_items) selected_loadout.equip(ui.user) //actually equips the loadout + //After vending a quick loadout, remove points and GHMME options so that you can't vend them via loadout vendor + for(var/points in user_id.marine_points) + user_id.marine_points[points] = 0 + for(var/option in user_id.marine_buy_choices) + user_id.marine_buy_choices[option] = 0 else to_chat(usr, span_warning("You can't buy things from this category anymore.")) diff --git a/code/game/objects/machinery/vending/vending.dm b/code/game/objects/machinery/vending/vending.dm index 74acae91a45a5..77e7981cb0f13 100644 --- a/code/game/objects/machinery/vending/vending.dm +++ b/code/game/objects/machinery/vending/vending.dm @@ -279,38 +279,38 @@ for(var/season in seasonal_items) products[seasonal_items[season]] += SSpersistence.season_items[season] -/obj/machinery/vending/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/machinery/vending/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return FALSE - if(X.a_intent == INTENT_HARM) - X.do_attack_animation(src, ATTACK_EFFECT_SMASH) - if(prob(X.xeno_caste.melee_damage)) + if(xeno_attacker.a_intent == INTENT_HARM) + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_SMASH) + if(prob(damage_amount)) playsound(loc, 'sound/effects/metalhit.ogg', 25, 1) - X.visible_message(span_danger("\The [X] smashes \the [src] beyond recognition!"), \ + xeno_attacker.visible_message(span_danger("\The [xeno_attacker] smashes \the [src] beyond recognition!"), \ span_danger("We enter a frenzy and smash \the [src] apart!"), null, 5) malfunction() return TRUE else - X.visible_message(span_danger("[X] slashes \the [src]!"), \ + xeno_attacker.visible_message(span_danger("[xeno_attacker] slashes \the [src]!"), \ span_danger("We slash \the [src]!"), null, 5) playsound(loc, 'sound/effects/metalhit.ogg', 25, 1) return TRUE if(tipped_level) - to_chat(X, span_warning("There's no reason to bother with that old piece of trash.")) + to_chat(xeno_attacker, span_warning("There's no reason to bother with that old piece of trash.")) return FALSE - X.visible_message(span_warning("\The [X] begins to lean against \the [src]."), \ + xeno_attacker.visible_message(span_warning("\The [xeno_attacker] begins to lean against \the [src]."), \ span_warning("You begin to lean against \the [src]."), null, 5) tipped_level = 1 var/shove_time = 1 SECONDS - if(X.mob_size == MOB_SIZE_BIG) + if(xeno_attacker.mob_size == MOB_SIZE_BIG) shove_time = 5 SECONDS - if(istype(X,/mob/living/carbon/xenomorph/crusher)) + if(istype(xeno_attacker,/mob/living/carbon/xenomorph/crusher)) shove_time = 1.5 SECONDS - if(do_after(X, shove_time, IGNORE_HELD_ITEM, src, BUSY_ICON_HOSTILE)) - X.visible_message(span_danger("\The [X] knocks \the [src] down!"), \ + if(do_after(xeno_attacker, shove_time, IGNORE_HELD_ITEM, src, BUSY_ICON_HOSTILE)) + xeno_attacker.visible_message(span_danger("\The [xeno_attacker] knocks \the [src] down!"), \ span_danger("You knock \the [src] down!"), null, 5) tip_over() else @@ -337,6 +337,8 @@ /obj/machinery/vending/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(tipped_level) to_chat(user, "Tip it back upright first!") @@ -378,12 +380,12 @@ user.visible_message("[user] tightens the bolts securing \the [src] to the floor.", "You tighten the bolts securing \the [src] to the floor.") var/turf/current_turf = get_turf(src) if(current_turf && density) - current_turf.flags_atom |= AI_BLOCKED + current_turf.atom_flags |= AI_BLOCKED else user.visible_message("[user] unfastens the bolts securing \the [src] to the floor.", "You unfasten the bolts securing \the [src] to the floor.") var/turf/current_turf = get_turf(src) if(current_turf && density) - current_turf.flags_atom &= ~AI_BLOCKED + current_turf.atom_flags &= ~AI_BLOCKED else if(isitem(I)) var/obj/item/to_stock = I stock(to_stock, user) @@ -658,6 +660,34 @@ return do_stock(item_to_stock, user, show_feedback, record) +/obj/machinery/vending/lasgun/do_stock(obj/item/item_to_stock, mob/user, show_feedback = TRUE, datum/vending_product/record) + //Special snowflake handling of cells + if(!iscell(item_to_stock)) + return ..() + + var/recharge_amount = 0 //the amount of charge required to fully charge our cell + var/obj/item/cell/cell = item_to_stock + if(cell.charge < cell.maxcharge) + // Item is not full. Time to try to recharge + recharge_amount = cell.maxcharge - cell.charge + if(machine_current_charge == 0) + display_message_and_visuals(user, show_feedback, "No power!", VENDING_RESTOCK_DENY) + return FALSE + else if(machine_current_charge < recharge_amount) // Not enough but some charge remaining so partially recharge cell and move on + cell.give(machine_current_charge) + machine_current_charge = 0 + cell.update_icon() + display_message_and_visuals(user, show_feedback, "Cell charged partially! [round(cell.percent())]%.", VENDING_RESTOCK_RECHARGE) + playsound(loc, 'sound/machines/hydraulics_1.ogg', 25, 0, 1) + return FALSE + else + machine_current_charge -= recharge_amount + cell.give(recharge_amount) + if(!record.attempt_restock(item_to_stock, user, show_feedback)) + return FALSE + display_message_and_visuals(user, show_feedback, "Restocked and recharged", VENDING_RESTOCK_ACCEPT_RECHARGE) + return TRUE + ///Actually does the restock. Overridden by lasgun vendor for snowflake behaviour /obj/machinery/vending/proc/do_stock(obj/item/item_to_stock, mob/user, show_feedback = TRUE, datum/vending_product/record) if(!record.attempt_restock(item_to_stock, user, show_feedback)) @@ -703,7 +733,7 @@ //More accurate comparison between absolute paths. if(isstorage(item_to_stock)) //Nice try, specialists/engis var/obj/item/storage/storage_to_stock = item_to_stock - if(!(storage_to_stock.flags_storage & BYPASS_VENDOR_CHECK)) //If your storage has this flag, it can be restocked + if(!(storage_to_stock.storage_flags & BYPASS_VENDOR_CHECK)) //If your storage has this flag, it can be restocked user?.balloon_alert(user, "Can't restock containers!") return FALSE @@ -742,7 +772,7 @@ //Actually restocks the item after our checks if(user) if(item_to_stock.loc == user) //Inside the mob's inventory - if(item_to_stock.flags_item & WIELDED) + if(item_to_stock.item_flags & WIELDED) item_to_stock.unwield(user) user.temporarilyRemoveItemFromInventory(item_to_stock) @@ -830,6 +860,7 @@ set_light(initial(light_range)) /obj/machinery/vending/update_icon_state() + . = ..() if(machine_stat & BROKEN) icon_state = "[initial(icon_state)]-broken" else if(machine_stat & NOPOWER) @@ -885,7 +916,7 @@ . = TRUE -/obj/machinery/vending/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", effects = TRUE, attack_dir, armour_penetration = 0) +/obj/machinery/vending/take_damage(damage_amount, damage_type = BRUTE, armor_type = null, effects = TRUE, attack_dir, armour_penetration = 0, mob/living/blame_mob) if(density && damage_amount >= knockdown_threshold) tip_over() return ..() diff --git a/code/game/objects/machinery/vending/vending_types.dm b/code/game/objects/machinery/vending/vending_types.dm index 373d0cb011c67..1c3197b03efc5 100644 --- a/code/game/objects/machinery/vending/vending_types.dm +++ b/code/game/objects/machinery/vending/vending_types.dm @@ -112,11 +112,15 @@ /obj/item/reagent_containers/food/snacks/enrg_bar = -1, /obj/item/reagent_containers/food/snacks/wrapped/booniebars = -1, /obj/item/reagent_containers/food/snacks/wrapped/chunk = -1, - /obj/item/reagent_containers/food/snacks/wrapped/barcardine = -1, + /obj/item/reagent_containers/food/snacks/wrapped/barcaridine = -1, /obj/item/reagent_containers/food/snacks/lollipop = -1, /obj/item/reagent_containers/food/snacks/wrapped/berrybar = -1, ) +/obj/machinery/vending/snack/alamo + product_slogans = "" //silent for no spam + wrenchable = FALSE + /obj/machinery/vending/cola name = "Souto Softdrinks" desc = "A softdrink vendor provided by Souto Soda Company, Havana." @@ -137,19 +141,9 @@ /obj/item/reagent_containers/food/drinks/cans/cola = -1, ) - prices = list( - /obj/item/reagent_containers/food/drinks/cans/souto = 5, - /obj/item/reagent_containers/food/drinks/cans/souto/diet = 5, - /obj/item/reagent_containers/food/drinks/cans/souto/cherry = 5, - /obj/item/reagent_containers/food/drinks/cans/souto/cherry/diet = 5, - /obj/item/reagent_containers/food/drinks/cans/souto/lime = 5, - /obj/item/reagent_containers/food/drinks/cans/souto/lime/diet = 5, - /obj/item/reagent_containers/food/drinks/cans/souto/grape = 5, - /obj/item/reagent_containers/food/drinks/cans/souto/grape/diet = 5, - /obj/item/reagent_containers/food/drinks/cans/waterbottle = 2, - /obj/item/reagent_containers/food/drinks/cans/cola = 10, - ) - idle_power_usage = 200 +/obj/machinery/vending/cola/alamo + product_slogans = "" //silent for no spam + wrenchable = FALSE /obj/machinery/vending/medical name = "NanotrasenMed Plus" @@ -216,7 +210,7 @@ /obj/item/storage/reagent_tank/bktt = 1, ), "Misc" = list( - /obj/item/tool/research/xeno_analyzer = -1, + /obj/item/tool/research/xeno_analyzer = 2, /obj/item/tool/research/excavation_tool = -1, /obj/item/storage/pouch/surgery = -1, /obj/item/armor_module/storage/uniform/surgery_webbing = -1, @@ -264,7 +258,6 @@ /obj/item/reagent_containers/glass/bottle/adminordrazine = -1, /obj/item/reagent_containers/glass/bottle/lemoline = -1, /obj/item/reagent_containers/glass/bottle/nanoblood = -1, - /obj/item/reagent_containers/glass/bottle/doctor_delight = -1, ), "Pill Bottle" = list( /obj/item/storage/pill_bottle/bicaridine = -1, @@ -321,6 +314,8 @@ /obj/item/reagent_containers/hypospray/autoinjector/virilyth = -1, /obj/item/reagent_containers/hypospray/autoinjector/roulettium = -1, /obj/item/reagent_containers/glass/bottle/toxin = -1, + /obj/item/reagent_containers/glass/bottle/doctor_delight = -1, + /obj/item/alien_embryo = -1, ), ) @@ -380,6 +375,7 @@ /obj/machinery/vending/nanomed/tadpolemed name = "Flight surgeon medical equipment dispenser" desc = "Dedicated for the surgeon with wings, this humble box contains a lot for its size." + layer = ABOVE_OBJ_LAYER products = list( "Autoinjectors" = list( /obj/item/reagent_containers/hypospray/autoinjector/sleeptoxin = 2, @@ -534,7 +530,7 @@ /obj/item/tool/kitchen/utensil/fork = 6, /obj/item/tool/kitchen/knife = 3, /obj/item/reagent_containers/food/drinks/drinkingglass = 8, - /obj/item/clothing/suit/chef/classic = 2, + /obj/item/clothing/suit/storage/chef/classic = 2, /obj/item/tool/kitchen/utensil/spoon = 2, /obj/item/tool/kitchen/utensil/knife = 2, /obj/item/tool/kitchen/rollingpin = 2, diff --git a/code/game/objects/machinery/washing_machine.dm b/code/game/objects/machinery/washing_machine.dm index 30f1aa74230cf..0c69863af5b92 100644 --- a/code/game/objects/machinery/washing_machine.dm +++ b/code/game/objects/machinery/washing_machine.dm @@ -67,12 +67,15 @@ usr.loc = src.loc -/obj/machinery/washing_machine/update_icon() +/obj/machinery/washing_machine/update_icon_state() + . = ..() icon_state = "wm_[state][panel]" /obj/machinery/washing_machine/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/toy/crayon) || istype(I, /obj/item/tool/stamp)) if(!(state in list(1, 3, 6))) diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 50c9357423a17..c43d9446cad18 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -1,15 +1,15 @@ -/obj/proc/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", effects = TRUE, attack_dir, armour_penetration = 0) +/obj/proc/take_damage(damage_amount, damage_type = BRUTE, armor_type = null, effects = TRUE, attack_dir, armour_penetration = 0, mob/living/blame_mob) if(QDELETED(src)) CRASH("[src] taking damage after deletion") if(!damage_amount) return if(effects) - play_attack_sound(damage_amount, damage_type, damage_flag) + play_attack_sound(damage_amount, damage_type, armor_type) if((resistance_flags & INDESTRUCTIBLE) || obj_integrity <= 0) return - if(damage_flag) - damage_amount = round(modify_by_armor(damage_amount, damage_flag, armour_penetration), DAMAGE_PRECISION) + if(armor_type) + damage_amount = round(modify_by_armor(damage_amount, armor_type, armour_penetration, null, attack_dir), DAMAGE_PRECISION) if(damage_amount < DAMAGE_PRECISION) return . = damage_amount @@ -18,11 +18,11 @@ //BREAKING FIRST if(integrity_failure && obj_integrity <= integrity_failure) - obj_break(damage_flag) + obj_break(armor_type) //DESTROYING SECOND if(obj_integrity <= 0) - obj_destruction(damage_amount, damage_type, damage_flag) + obj_destruction(damage_amount, damage_type, armor_type, blame_mob) ///Increase obj_integrity and record it to the repairer's stats /obj/proc/repair_damage(repair_amount, mob/user) @@ -67,6 +67,15 @@ take_damage(rand(5, 45), BRUTE, BOMB, 0) */ +/obj/lava_act() + if(resistance_flags & INDESTRUCTIBLE) + return FALSE + if(!take_damage(50, BURN, FIRE)) + return FALSE + if(QDELETED(src)) + return FALSE + fire_act() + return TRUE /obj/hitby(atom/movable/AM, speed = 5) . = ..() @@ -92,13 +101,13 @@ return playsound(loc, P.hitsound, 50, 1) visible_message(span_warning("\the [src] is damaged by \the [P]!"), visible_message_flags = COMBAT_MESSAGE) - take_damage(P.damage, P.ammo.damage_type, P.ammo.armor_type, 0, REVERSE_DIR(P.dir), P.ammo.penetration) + take_damage(P.damage, P.ammo.damage_type, P.ammo.armor_type, 0, REVERSE_DIR(P.dir), P.ammo.penetration, isliving(P.firer) ? P.firer : null) -/obj/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0) //used by attack_alien, attack_animal, and attack_slime +/obj/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = 0) //used by attack_alien, attack_animal, and attack_slime user.do_attack_animation(src, ATTACK_EFFECT_SMASH) user.changeNext_move(CLICK_CD_MELEE) - return take_damage(damage_amount, damage_type, damage_flag, effects, get_dir(src, user), armor_penetration) + return take_damage(damage_amount, damage_type, armor_type, effects, get_dir(src, user), armor_penetration, user) /obj/attack_animal(mob/living/simple_animal/M) @@ -115,22 +124,22 @@ playsound(loc, 'sound/effects/meteorimpact.ogg', 100, 1) -/obj/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) +/obj/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) // SHOULD_CALL_PARENT(TRUE) // TODO: fix this - if(X.status_flags & INCORPOREAL) //Ghosts can't attack machines + if(xeno_attacker.status_flags & INCORPOREAL) //Ghosts can't attack machines return FALSE - SEND_SIGNAL(X, COMSIG_XENOMORPH_ATTACK_OBJ, src) - if(SEND_SIGNAL(src, COMSIG_OBJ_ATTACK_ALIEN, X) & COMPONENT_NO_ATTACK_ALIEN) + SEND_SIGNAL(xeno_attacker, COMSIG_XENOMORPH_ATTACK_OBJ, src) + if(SEND_SIGNAL(src, COMSIG_OBJ_ATTACK_ALIEN, xeno_attacker) & COMPONENT_NO_ATTACK_ALIEN) return FALSE if(!(resistance_flags & XENO_DAMAGEABLE)) - to_chat(X, span_warning("We stare at \the [src] cluelessly.")) + to_chat(xeno_attacker, span_warning("We stare at \the [src] cluelessly.")) return FALSE if(effects) - X.visible_message(span_danger("[X] has slashed [src]!"), + xeno_attacker.visible_message(span_danger("[xeno_attacker] has slashed [src]!"), span_danger("We slash [src]!")) - X.do_attack_animation(src, ATTACK_EFFECT_CLAW) + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_CLAW) playsound(loc, "alien_claw_metal", 25) - attack_generic(X, damage_amount, damage_type, damage_flag, effects, armor_penetration) + attack_generic(xeno_attacker, damage_amount, damage_type, armor_type, effects, armor_penetration) return TRUE /obj/attack_larva(mob/living/carbon/xenomorph/larva/L) @@ -151,7 +160,7 @@ ///what happens when the obj's integrity reaches zero. -/obj/proc/obj_destruction(damage_amount, damage_type, damage_flag) +/obj/proc/obj_destruction(damage_amount, damage_type, damage_flag, mob/living/blame_mob) SHOULD_CALL_PARENT(TRUE) if(destroy_sound) playsound(loc, destroy_sound, 35, 1) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 127984fb8dc93..aa96df4e841c5 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -13,30 +13,26 @@ /// %-reduction-based armor. var/datum/armor/soft_armor - /// Flat-damage-reduction-based armor. + ///Modifies the AP of incoming attacks var/datum/armor/hard_armor - - var/obj_integrity //defaults to max_integrity + ///Object HP + var/obj_integrity + ///Max object HP var/max_integrity = 500 - var/integrity_failure = 0 //0 if we have no special broken behavior - var/reliability = 100 //Used by SOME devices to determine how reliable they are. - var/crit_fail = 0 - - ///throwforce needs to be at least 1 else it causes runtimes with shields + ///Integrety below this number causes special behavior + var/integrity_failure = 0 + ///Base throw damage. Throwforce needs to be at least 1 else it causes runtimes with shields var/throwforce = 1 - + ///Object behavior flags var/obj_flags = NONE - var/hit_sound //Sound this object makes when hit, overrides specific item hit sound. - var/destroy_sound //Sound this object makes when destroyed. - - var/item_fire_stacks = 0 //How many fire stacks it applies - + ///Sound when hit + var/hit_sound + ///Sound this object makes when destroyed + var/destroy_sound + ///ID access where all are required to access this object var/list/req_access = null + ///ID access where any one is required to access this object var/list/req_one_access = null - - ///Optimization for dynamic explosion block values, for things whose explosion block is dependent on certain conditions. - var/real_explosion_block - ///Odds of a projectile hitting the object, if the object is dense var/coverage = 50 @@ -108,7 +104,7 @@ . = ..() if(.) return - if((flags_atom & ON_BORDER) && !(get_dir(loc, target) & dir)) + if((atom_flags & ON_BORDER) && !(get_dir(loc, target) & dir)) return TRUE if((allow_pass_flags & PASS_DEFENSIVE_STRUCTURE) && (mover.pass_flags & PASS_DEFENSIVE_STRUCTURE)) return TRUE @@ -124,7 +120,7 @@ return FALSE if((allow_pass_flags & PASS_MOB)) return TRUE - if((allow_pass_flags & PASS_WALKOVER) && SEND_SIGNAL(target, COMSIG_OBJ_TRY_ALLOW_THROUGH)) + if((allow_pass_flags & PASS_WALKOVER) && SEND_SIGNAL(target, COMSIG_OBJ_TRY_ALLOW_THROUGH, mover)) return TRUE ///Handles extra checks for things trying to exit this objects turf @@ -140,16 +136,16 @@ return TRUE if((allow_pass_flags & PASS_GLASS) && (mover.pass_flags & PASS_GLASS)) return NONE - if(!density || !(flags_atom & ON_BORDER) || !(direction & dir) || (mover.status_flags & INCORPOREAL)) + if(!density || !(atom_flags & ON_BORDER) || !(direction & dir) || (mover.status_flags & INCORPOREAL)) return NONE knownblockers += src return COMPONENT_ATOM_BLOCK_EXIT ///Signal handler to check if you can move from one low object to another -/obj/proc/can_climb_over(datum/source) +/obj/proc/can_climb_over(datum/source, atom/mover) SIGNAL_HANDLER - if(!(flags_atom & ON_BORDER) && density) + if(!(atom_flags & ON_BORDER) && density) return TRUE /obj/proc/updateUsrDialog() @@ -230,6 +226,62 @@ return TRUE return ..() +/obj/vv_get_dropdown() + . = ..() + VV_DROPDOWN_OPTION("", "---------") + VV_DROPDOWN_OPTION(VV_HK_MASS_DEL_TYPE, "Delete all of type") + VV_DROPDOWN_OPTION(VV_HK_OSAY, "Object Say") + +/obj/vv_do_topic(list/href_list) + . = ..() + + if(!.) + return + + if(href_list[VV_HK_OSAY]) + if(check_rights(R_FUN, FALSE)) + usr.client.object_say(src) + + if(href_list[VV_HK_MASS_DEL_TYPE]) + if(!check_rights(R_DEBUG|R_SERVER)) + return + var/action_type = tgui_alert(usr, "Strict type ([type]) or type and all subtypes?",,list("Strict type","Type and subtypes","Cancel")) + if(action_type == "Cancel" || !action_type) + return + + if(tgui_alert(usr, "Are you really sure you want to delete all objects of type [type]?",,list("Yes","No")) != "Yes") + return + + if(tgui_alert(usr, "Second confirmation required. Delete?",,list("Yes","No")) != "Yes") + return + + var/O_type = type + switch(action_type) + if("Strict type") + var/i = 0 + for(var/obj/Obj in world) + if(Obj.type == O_type) + i++ + qdel(Obj) + CHECK_TICK + if(!i) + to_chat(usr, "No objects of this type exist") + return + log_admin("[key_name(usr)] deleted all objects of type [O_type] ([i] objects deleted) ") + message_admins(span_notice("[key_name(usr)] deleted all objects of type [O_type] ([i] objects deleted) ")) + if("Type and subtypes") + var/i = 0 + for(var/obj/Obj in world) + if(istype(Obj,O_type)) + i++ + qdel(Obj) + CHECK_TICK + if(!i) + to_chat(usr, "No objects of this type exist") + return + log_admin("[key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) ") + message_admins(span_notice("[key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) ")) + ///Called to return an internally stored item, currently for the deployable element /obj/proc/get_internal_item() return @@ -270,6 +322,9 @@ if(!do_after(user, (fumble_time ? fumble_time : repair_time) * (skill_required - user.skills.getRating(SKILL_ENGINEER)), NONE, src, BUSY_ICON_BUILD)) return TRUE + if(user.skills.getRating(SKILL_ENGINEER) > skill_required) + repair_amount *= (1+(0.1*(user.skills.getRating(SKILL_ENGINEER) - (skill_required + 1)))) + repair_time *= welder.toolspeed balloon_alert_to_viewers("starting repair...") handle_weldingtool_overlay() @@ -297,3 +352,27 @@ playsound(loc, 'sound/items/welder2.ogg', 25, TRUE) handle_weldingtool_overlay(TRUE) return TRUE + +/obj/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + if(isxeno(user)) + return + if(user.a_intent != INTENT_HARM) + return + if(!isliving(grab.grabbed_thing)) + return + if(user.grab_state <= GRAB_AGGRESSIVE) + to_chat(user, span_warning("You need a better grip to do that!")) + return + + var/mob/living/grabbed_mob = grab.grabbed_thing + if(prob(15)) + grabbed_mob.Paralyze(2 SECONDS) + user.drop_held_item() + step_towards(grabbed_mob, src) + var/damage = base_damage + (user.skills.getRating(SKILL_CQC) * CQC_SKILL_DAMAGE_MOD) + grabbed_mob.apply_damage(damage, BRUTE, "head", MELEE, is_sharp, updating_health = TRUE) + user.visible_message(span_danger("[user] slams [grabbed_mob]'s face against [src]!"), + span_danger("You slam [grabbed_mob]'s face against [src]!")) + log_combat(user, grabbed_mob, "slammed", "", "against \the [src]") + take_damage(damage, BRUTE, MELEE) + return TRUE diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 9026acd470003..2570caa2008e0 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -2,7 +2,7 @@ icon = 'icons/obj/structures/structures.dmi' var/climbable = FALSE var/climb_delay = 50 - var/flags_barrier = NONE + var/barrier_flags = NONE var/broken = FALSE //similar to machinery's stat BROKEN obj_flags = CAN_BE_HIT anchored = TRUE @@ -49,7 +49,7 @@ do_climb(usr) -/obj/structure/specialclick(mob/living/carbon/user) +/obj/structure/CtrlClick(mob/living/carbon/user) . = ..() INVOKE_ASYNC(src, PROC_REF(do_climb), user) @@ -73,7 +73,7 @@ if(!user.Adjacent(src)) return - if((flags_atom & ON_BORDER)) + if((atom_flags & ON_BORDER)) if(user_turf != destination_turf && user_turf != get_step(destination_turf, dir)) to_chat(user, span_warning("You need to be up against [src] to leap over.")) return @@ -88,7 +88,7 @@ var/obj/structure/structure = object if(structure.allow_pass_flags & PASS_WALKOVER) continue - if(object.density && (!(object.flags_atom & ON_BORDER) || object.dir & get_dir(src,user))) + if(object.density && (!(object.atom_flags & ON_BORDER) || object.dir & get_dir(src,user))) to_chat(user, span_warning("There's \a [object.name] in the way.")) return @@ -97,7 +97,7 @@ var/obj/structure/structure = object if(structure.allow_pass_flags & PASS_WALKOVER) continue - if(object.density && (object.flags_atom & ON_BORDER) && object.dir & get_dir(user, src)) + if(object.density && (object.atom_flags & ON_BORDER) && object.dir & get_dir(user, src)) to_chat(user, span_warning("There's \a [object.name] in the way.")) return @@ -108,7 +108,7 @@ if(user.do_actions || !can_climb(user)) return - user.visible_message(span_warning("[user] starts [flags_atom & ON_BORDER ? "leaping over" : "climbing onto"] \the [src]!")) + user.visible_message(span_warning("[user] starts [atom_flags & ON_BORDER ? "leaping over" : "climbing onto"] \the [src]!")) if(!do_after(user, climb_delay, IGNORE_HELD_ITEM, src, BUSY_ICON_GENERIC)) return @@ -121,7 +121,7 @@ user.unbuckle_mob(m) user.forceMove(destination_turf) - user.visible_message(span_warning("[user] [flags_atom & ON_BORDER ? "leaps over" : "climbs onto"] \the [src]!")) + user.visible_message(span_warning("[user] [atom_flags & ON_BORDER ? "leaps over" : "climbs onto"] \the [src]!")) /obj/structure/proc/structure_shaken() diff --git a/code/game/objects/structures/barricade.dm b/code/game/objects/structures/barricade.dm index 24fd65e74fae9..1c5f878f53b14 100644 --- a/code/game/objects/structures/barricade.dm +++ b/code/game/objects/structures/barricade.dm @@ -6,13 +6,13 @@ anchored = TRUE density = TRUE layer = BELOW_OBJ_LAYER - flags_atom = ON_BORDER + atom_flags = ON_BORDER resistance_flags = XENO_DAMAGEABLE allow_pass_flags = PASS_DEFENSIVE_STRUCTURE|PASSABLE|PASS_WALKOVER climb_delay = 20 //Leaping a barricade is universally much faster than clumsily climbing on a table or rack interaction_flags = INTERACT_CHECK_INCAPACITATED max_integrity = 100 - flags_barrier = HANDLE_BARRIER_CHANCE + barrier_flags = HANDLE_BARRIER_CHANCE ///The type of stack the barricade dropped when disassembled if any. var/stack_type ///The amount of stack dropped when disassembled at full health @@ -75,18 +75,20 @@ /obj/structure/barricade/attack_animal(mob/user) return attack_alien(user) -/obj/structure/barricade/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/structure/barricade/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return FALSE if(is_wired) - balloon_alert(X, "Wire slices into us") - X.apply_damage(10, blocked = MELEE , sharp = TRUE, updating_health = TRUE) + balloon_alert(xeno_attacker, "Wire slices into us") + xeno_attacker.apply_damage(10, blocked = MELEE , sharp = TRUE, updating_health = TRUE) return ..() /obj/structure/barricade/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return for(var/obj/effect/xenomorph/acid/A in loc) if(A.acid_t == src) @@ -267,6 +269,8 @@ //Item Attack /obj/structure/barricade/snow/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return for(var/obj/effect/xenomorph/acid/A in loc) if(A.acid_t == src) @@ -345,6 +349,8 @@ /obj/structure/barricade/wooden/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return for(var/obj/effect/xenomorph/acid/A in loc) if(A.acid_t == src) @@ -438,6 +444,8 @@ /* RUTGMC DELETION, moved to modular /obj/structure/barricade/metal/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!istype(I, /obj/item/stack/sheet/metal)) return @@ -894,6 +902,8 @@ /* RUTGMC DELETION, moved to modular /obj/structure/barricade/plasteel/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/stack/sheet/plasteel)) var/obj/item/stack/sheet/plasteel/plasteel_sheets = I @@ -1003,6 +1013,8 @@ /obj/structure/barricade/sandbags/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return for(var/obj/effect/xenomorph/acid/A in loc) if(A.acid_t == src) @@ -1059,7 +1071,7 @@ is_wired = FALSE soft_armor = list(MELEE = 35, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 25, BIO = 100, FIRE = 100, ACID = 30) ///Whether this item can be deployed or undeployed - var/flags_item = IS_DEPLOYABLE + var/item_flags = IS_DEPLOYABLE ///What it deploys into. typecast version of internal_item var/obj/item/weapon/shield/riot/marine/deployable/internal_shield @@ -1073,9 +1085,10 @@ name = internal_shield.name desc = internal_shield.desc //if the shield is wired, it deploys wired - if (internal_shield.is_wired) + if(internal_shield.is_wired) can_wire = FALSE is_wired = TRUE + climbable = FALSE /obj/structure/barricade/metal/deployable/get_internal_item() return internal_shield @@ -1085,8 +1098,8 @@ ///Dissassembles the device /obj/structure/barricade/metal/deployable/proc/disassemble(mob/user) - if(CHECK_BITFIELD(internal_shield.flags_item, DEPLOYED_NO_PICKUP)) - balloon_alert(user, "cannot be disassembled") + if(CHECK_BITFIELD(internal_shield.item_flags, DEPLOYED_NO_PICKUP)) + balloon_alert(user, "Cannot disassemble") return SEND_SIGNAL(src, COMSIG_ITEM_UNDEPLOY, user) diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm index 5de219f123bf6..fccf55b9d037f 100644 --- a/code/game/objects/structures/barsign.dm +++ b/code/game/objects/structures/barsign.dm @@ -70,6 +70,8 @@ /obj/structure/sign/double/barsign/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(ismultitool(I)) var/sign_type = tgui_input_list(user, "What would you like to change the barsign to?", null, list("Off", "Pink Flamingo", "Magma Sea", "Limbo", "Rusty Axe", "Armok Bar", "Broken Drum", "Mead Bay", "The Damn Wall", "The Cavern", "Cindi Kate", "The Orchard", "The Saucy Clown", "The Clowns Head", "Whiskey Implant", "Carpe Carp", "Robust Roadhouse", "The Redshirt", "Maltese Falcon", "The Bark", "The Harmbaton", "The Singulo", "The Drunk Carp", "Scotch Servin Willys", "Officer Beersky", "The Cavern", "The Outer Spess", "Slippery Shots","The Grey Tide", "Honked N Loaded", "The Nest", "The Coderbus", "The Adminbus", "The Old Cock Inn", "The Wretched Hive", "The Robusta Cafe", "The Emergency Rum Party", "The Combo Cafe", "Vlad's Salad Bar", "The Shaken", "The Ale Nath", "The Aloha Snackbar", "The Net", "Maid Cafe", "The Lightbulb", "The Syndi Cat", "ERROR")) diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 46eafc7015f98..e7db0eccdca67 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -101,7 +101,8 @@ LINEN BINS . += "There are [amount] bed sheets in the bin." -/obj/structure/bedsheetbin/update_icon() +/obj/structure/bedsheetbin/update_icon_state() + . = ..() switch(amount) if(0) icon_state = "linenbin-empty" @@ -113,6 +114,8 @@ LINEN BINS /obj/structure/bedsheetbin/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/bedsheet)) if(!user.drop_held_item()) diff --git a/code/game/objects/structures/benchpress.dm b/code/game/objects/structures/benchpress.dm index 1c799861315dc..6b30b436325b9 100644 --- a/code/game/objects/structures/benchpress.dm +++ b/code/game/objects/structures/benchpress.dm @@ -85,11 +85,11 @@ return do_workout_set(user) -/obj/structure/benchpress/attack_alien(mob/living/carbon/xenomorph/X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) +/obj/structure/benchpress/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) . = ..() if(.) return - do_workout_set(X) + do_workout_set(xeno_attacker) ///checks if possible and if yes performs a workout set for this mob /obj/structure/benchpress/proc/do_workout_set(mob/living/user) @@ -99,7 +99,7 @@ ADD_TRAIT(src, BENCH_BEING_USED, WEIGHTBENCH_TRAIT) // yea this is meh but IN_USE and interact code are a mess rn and too buggy so less sidestep it update_icon() user.setDir(SOUTH) - user.flags_atom |= DIRLOCK + user.atom_flags |= DIRLOCK ADD_TRAIT(user, TRAIT_IMMOBILE, WEIGHTBENCH_TRAIT) user.forceMove(loc) var/bragmessage = pick("pushing it to the limit","going into overdrive","burning with determination","rising up to the challenge", "getting strong now","getting ripped") @@ -112,7 +112,7 @@ creak_loop.stop(src) playsound(user, 'sound/machines/click.ogg', 60, TRUE) REMOVE_TRAIT(src, BENCH_BEING_USED, WEIGHTBENCH_TRAIT) - user.flags_atom &= ~DIRLOCK + user.atom_flags &= ~DIRLOCK REMOVE_TRAIT(user, TRAIT_IMMOBILE, WEIGHTBENCH_TRAIT) update_icon() if(user.faction) diff --git a/code/game/objects/structures/bookcase.dm b/code/game/objects/structures/bookcase.dm index d5bfa240ac36e..51f2ae164ccd6 100644 --- a/code/game/objects/structures/bookcase.dm +++ b/code/game/objects/structures/bookcase.dm @@ -18,6 +18,8 @@ /obj/structure/bookcase/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/book)) user.drop_held_item() @@ -67,7 +69,8 @@ qdel(src) -/obj/structure/bookcase/update_icon() +/obj/structure/bookcase/update_icon_state() + . = ..() if(length(contents) < 5) icon_state = "book-[length(contents)]" else diff --git a/code/game/objects/structures/campaign_props.dm b/code/game/objects/structures/campaign_props.dm index 6723521d5dcf1..c0beb09ae244e 100644 --- a/code/game/objects/structures/campaign_props.dm +++ b/code/game/objects/structures/campaign_props.dm @@ -21,6 +21,15 @@ allow_pass_flags = PASS_AIR bound_width = 128 +/obj/structure/prop/train/Initialize(mapload) + . = ..() + update_icon() + +/obj/structure/prop/train/update_overlays() + . = ..() + var/image/new_overlay = image(icon, src, "[icon_state]_overlay", ABOVE_ALL_MOB_LAYER, dir) + . += new_overlay + /obj/structure/prop/train/carriage name = "rail carriage" desc = "A heavy duty maglev carriage. I wonder what's inside?." diff --git a/code/game/objects/structures/campaign_structures/campaign_structure.dm b/code/game/objects/structures/campaign_structures/campaign_structure.dm index f0b5597afde8d..7c3c2d9aae227 100644 --- a/code/game/objects/structures/campaign_structures/campaign_structure.dm +++ b/code/game/objects/structures/campaign_structures/campaign_structure.dm @@ -27,9 +27,11 @@ anchored = TRUE allow_pass_flags = PASSABLE destroy_sound = 'sound/effects/meteorimpact.ogg' - icon = 'icons/obj/structures/campaign_structures.dmi' + ///overhead timer + var/obj/effect/countdown/campaign_objective/countdown + /obj/structure/campaign_objective/Initialize(mapload) . = ..() GLOB.campaign_objectives += src @@ -56,3 +58,7 @@ /obj/structure/campaign_objective/proc/update_control_minimap_icon() SSminimaps.remove_marker(src) SSminimaps.add_marker(src, MINIMAP_FLAG_ALL, image('icons/UI_icons/map_blips.dmi', null, "campaign_objective", HIGH_FLOAT_LAYER)) + +///Remaining time for overhead countdown if applicable +/obj/structure/campaign_objective/proc/get_time_left() + return diff --git a/code/game/objects/structures/campaign_structures/capture_objectives.dm b/code/game/objects/structures/campaign_structures/capture_objectives.dm index 1c68a76a20b13..cc6681602c561 100644 --- a/code/game/objects/structures/campaign_structures/capture_objectives.dm +++ b/code/game/objects/structures/campaign_structures/capture_objectives.dm @@ -15,8 +15,6 @@ var/capturing_faction ///Timer holder for the current capture/decapture timer var/capture_timer - ///overhead timer - var/obj/effect/countdown/campaign_objective/countdown /obj/structure/campaign_objective/capture_objective/Initialize(mapload) . = ..() @@ -112,6 +110,9 @@ owning_faction = null update_icon() SEND_GLOBAL_SIGNAL(COMSIG_GLOB_CAMPAIGN_CAPTURE_OBJECTIVE_DECAPTURED, src, user) + if(user.ckey) + var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[user.ckey] + personal_statistics.mission_objective_decaptured ++ return finish_capture(user) @@ -120,10 +121,12 @@ SHOULD_CALL_PARENT(TRUE) owning_faction = user.faction SEND_GLOBAL_SIGNAL(COMSIG_GLOB_CAMPAIGN_CAPTURE_OBJECTIVE_CAPTURED, src, user) + if(user.ckey) + var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[user.ckey] + personal_statistics.mission_objective_captured ++ update_icon() -///Returns time left on the nuke in seconds -/obj/structure/campaign_objective/capture_objective/proc/get_time_left() +/obj/structure/campaign_objective/capture_objective/get_time_left() return capture_timer ? round(timeleft(capture_timer) MILLISECONDS) : null //sensor tower @@ -131,7 +134,13 @@ name = "sensor tower objective" icon = 'icons/obj/structures/sensor.dmi' icon_state = "sensor" - mission_types = list(/datum/campaign_mission/tdm, /datum/campaign_mission/tdm/lv624, /datum/campaign_mission/tdm/first_mission, /datum/campaign_mission/tdm/mech_wars) + mission_types = list( + /datum/campaign_mission/tdm, + /datum/campaign_mission/tdm/orion, + /datum/campaign_mission/tdm/first_mission, + /datum/campaign_mission/tdm/mech_wars, + /datum/campaign_mission/tdm/mech_wars/som, + ) spawn_object = /obj/structure/campaign_objective/capture_objective/sensor_tower /obj/structure/campaign_objective/capture_objective/sensor_tower @@ -148,6 +157,7 @@ countdown.pixel_y = 90 /obj/structure/campaign_objective/capture_objective/sensor_tower/update_icon_state() + . = ..() icon_state = initial(icon_state) if(!owning_faction) switch(capturing_faction) @@ -220,12 +230,17 @@ icon_state = "asat" desc = "A sophisticated surface to space missile system designed for attacking orbiting satellites or spacecraft." capture_flags = CAPTURE_OBJECTIVE_RECAPTURABLE - ///owning faction - var/faction = FACTION_TERRAGOV + owning_faction = FACTION_TERRAGOV /obj/structure/campaign_objective/capture_objective/fultonable/asat_system/capture_check(mob/living/user) //This is a 'defend' objective. The defending faction can't actually claim it for themselves, just decap it. - if((user.faction == faction) && !capturing_faction && !owning_faction) + if((user.faction == owning_faction) && !capturing_faction) user.balloon_alert(user, "Defend this objective!") return FALSE return ..() + +/obj/structure/campaign_objective/capture_objective/fultonable/asat_system/do_capture(mob/living/user) + capturing_faction = null + capture_timer = null + countdown.stop() + finish_capture(user) diff --git a/code/game/objects/structures/campaign_structures/deploy_blockers.dm b/code/game/objects/structures/campaign_structures/deploy_blockers.dm index 7e544312cded0..3558749cfc1e8 100644 --- a/code/game/objects/structures/campaign_structures/deploy_blockers.dm +++ b/code/game/objects/structures/campaign_structures/deploy_blockers.dm @@ -17,7 +17,7 @@ icon_state = "tele_blocker" pixel_x = -16 ///What flag this removes from the mission - var/flags_to_remove = MISSION_DISALLOW_TELEPORT + var/to_remove_flags = MISSION_DISALLOW_TELEPORT ///The faction this belongs to var/faction = FACTION_TERRAGOV var/owning_faction_notification = "A teleportation disruptor has been deployed in this area. Protect the disruptor to ensure hostile forces cannot deploy via teleportation. " @@ -43,12 +43,15 @@ /obj/structure/campaign_deployblocker/ex_act() return -/obj/structure/campaign_deployblocker/plastique_act() +/obj/structure/campaign_deployblocker/plastique_act(mob/living/plastique_user) + if(plastique_user && plastique_user.ckey) + var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[plastique_user.ckey] + personal_statistics.mission_blocker_destroyed += (faction != plastique_user.faction ? 1 : -1) qdel(src) ///Signals its destruction, enabling the use of the teleporter asset /obj/structure/campaign_deployblocker/proc/deactivate() - SEND_SIGNAL(SSdcs, COMSIG_GLOB_CAMPAIGN_TELEBLOCKER_DISABLED, src, flags_to_remove, faction) + SEND_SIGNAL(SSdcs, COMSIG_GLOB_CAMPAIGN_TELEBLOCKER_DISABLED, src, to_remove_flags, faction) SSminimaps.remove_marker(src) GLOB.campaign_structures -= src @@ -56,13 +59,17 @@ name = "TELEBLOCKER" icon = 'icons/obj/structures/campaign_structures.dmi' icon_state = "drop_block" - mission_types = list(/datum/campaign_mission/destroy_mission/supply_raid, /datum/campaign_mission/destroy_mission/fire_support_raid) + mission_types = list( + /datum/campaign_mission/destroy_mission/supply_raid, + /datum/campaign_mission/destroy_mission/fire_support_raid, + /datum/campaign_mission/raiding_base, + ) spawn_object = /obj/structure/campaign_deployblocker/drop_blocker /obj/structure/campaign_deployblocker/drop_blocker name = "drop pod guidance disruptor array" desc = "A sophisticated device intended to severely disrupt drop pod guidance systems, rendering them unusable while the tower stands." - flags_to_remove = MISSION_DISALLOW_DROPPODS + to_remove_flags = MISSION_DISALLOW_DROPPODS faction = FACTION_SOM owning_faction_notification = "A drop pod disruptor has been deployed in this area. Protect the disruptor to ensure hostile forces cannot deploy via drop pod. " hostile_faction_notification = "The enemy has a device in this area that will prevent the use of our drop pods. Destroy this first to allow for drop pod assault against primary objectives. " diff --git a/code/game/objects/structures/campaign_structures/destroy_objectives.dm b/code/game/objects/structures/campaign_structures/destroy_objectives.dm index b36a00e85cd72..ddc07b4891e0c 100644 --- a/code/game/objects/structures/campaign_structures/destroy_objectives.dm +++ b/code/game/objects/structures/campaign_structures/destroy_objectives.dm @@ -5,12 +5,17 @@ soft_armor = list(MELEE = 200, BULLET = 200, LASER = 200, ENERGY = 200, BOMB = 200, BIO = 200, FIRE = 200, ACID = 200) //require c4 normally ///explosion smoke particle holder var/obj/effect/abstract/particle_holder/explosion_smoke + ///The faction this belongs to + var/faction = FACTION_TERRAGOV /obj/structure/campaign_objective/destruction_objective/Destroy() QDEL_NULL(explosion_smoke) return ..() -/obj/structure/campaign_objective/destruction_objective/plastique_act() +/obj/structure/campaign_objective/destruction_objective/plastique_act(mob/living/plastique_user) + if(plastique_user && plastique_user.ckey) + var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[plastique_user.ckey] + personal_statistics.mission_objective_destroyed += (faction != plastique_user.faction ? 1 : -1) qdel(src) /obj/structure/campaign_objective/destruction_objective/plastique_time_mod(time) @@ -30,6 +35,7 @@ icon = 'icons/Marine/howitzer.dmi' icon_state = "howitzer_deployed" pixel_x = -16 + faction = FACTION_SOM //MLRS /obj/effect/landmark/campaign_structure/mlrs @@ -67,10 +73,13 @@ /obj/structure/campaign_objective/destruction_objective/mlrs/update_overlays() . = ..() - var/image/new_overlay = image(icon, src, "[icon_state]_overlay", ABOVE_MOB_LAYER, dir) + var/image/new_overlay = image(icon, src, "[icon_state]_overlay", ABOVE_ALL_MOB_LAYER, dir) . += new_overlay -/obj/structure/campaign_objective/destruction_objective/mlrs/plastique_act() +/obj/structure/campaign_objective/destruction_objective/mlrs/plastique_act(mob/living/plastique_user) + if(plastique_user && plastique_user.ckey) + var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[plastique_user.ckey] + personal_statistics.mission_objective_destroyed += (faction != plastique_user.faction ? 1 : -1) disable() /obj/structure/campaign_objective/destruction_objective/mlrs/disable() @@ -115,8 +124,8 @@ spawn_object = /obj/structure/campaign_objective/destruction_objective/mlrs/tank /obj/structure/campaign_objective/destruction_objective/mlrs/tank - name = "\improper tank" - desc = "A massive multi launch rocket system on a tracked chassis. Can unleash a tremendous amount of firepower in a short amount of time." + name = "\improper M34A2 Longstreet Light Tank" + desc = "A giant piece of armor with a big gun, good for blowing stuff up." icon_state = "tank" /obj/effect/landmark/campaign_structure/apc @@ -128,8 +137,8 @@ spawn_object = /obj/structure/campaign_objective/destruction_objective/mlrs/apc /obj/structure/campaign_objective/destruction_objective/mlrs/apc - name = "\improper APC" - desc = "A massive multi launch rocket system on a tracked chassis. Can unleash a tremendous amount of firepower in a short amount of time." + name = "\improper M577 armored personnel carrier" + desc = "A giant piece of armor for carrying troops in relative safety. Still has a pretty big gun." icon_state = "apc" smoke_type = /particles/tank_wreck_smoke/apc @@ -137,13 +146,6 @@ position = list(87, 60, 0) //Supply depot objectives -/obj/effect/landmark/campaign_structure/supply_objective - name = "howitzer objective" - icon = 'icons/Marine/howitzer.dmi' - icon_state = "howitzer_deployed" - mission_types = list(/datum/campaign_mission/destroy_mission/fire_support_raid) - spawn_object = /obj/structure/campaign_objective/destruction_objective/howitzer - /obj/structure/campaign_objective/destruction_objective/supply_objective name = "SUPPLY_OBJECTIVE" icon = 'icons/Marine/howitzer.dmi' @@ -165,6 +167,15 @@ allow_pass_flags = PASS_PROJECTILE|PASS_AIR bound_width = 128 +/obj/structure/campaign_objective/destruction_objective/supply_objective/train/Initialize(mapload) + . = ..() + update_icon() + +/obj/structure/campaign_objective/destruction_objective/supply_objective/train/update_overlays() + . = ..() + var/image/new_overlay = image(icon, src, "[icon_state]_overlay", ABOVE_ALL_MOB_LAYER, dir) + . += new_overlay + /obj/effect/landmark/campaign_structure/train/carriage name = "carriage objective" icon_state = "carriage_lit" @@ -190,6 +201,7 @@ icon_state = "phoron_stack" bound_height = 32 bound_width = 64 + faction = FACTION_SOM /obj/structure/campaign_objective/destruction_objective/supply_objective/phoron_stack/Initialize(mapload) . = ..() @@ -197,7 +209,7 @@ /obj/structure/campaign_objective/destruction_objective/supply_objective/phoron_stack/update_overlays() . = ..() - var/image/new_overlay = image(icon, src, "[icon_state]_overlay", ABOVE_MOB_LAYER, dir) + var/image/new_overlay = image(icon, src, "[icon_state]_overlay", ABOVE_ALL_MOB_LAYER, dir) . += new_overlay //NT base @@ -242,6 +254,7 @@ bound_width = 64 pixel_y = -18 pixel_x = -16 + faction = FACTION_SOM var/status = BLUESPACE_CORE_OK /obj/structure/campaign_objective/destruction_objective/bluespace_core/Initialize(mapload) @@ -260,10 +273,10 @@ switch(status) if(BLUESPACE_CORE_OK) . += image(icon, icon_state = "top_overlay", layer = ABOVE_MOB_LAYER) - . += image(icon, icon_state = "bsd_c_s", layer = TANK_BARREL_LAYER) + . += image(icon, icon_state = "bsd_c_s", layer = ABOVE_MOB_PROP_LAYER) if(BLUESPACE_CORE_UNSTABLE) . += image(icon, icon_state = "top_overlay", layer = ABOVE_MOB_LAYER) - . += image(icon, icon_state = "bsd_c_u", layer = TANK_BARREL_LAYER) + . += image(icon, icon_state = "bsd_c_u", layer = ABOVE_MOB_PROP_LAYER) if(BLUESPACE_CORE_BROKEN) . += image(icon, icon_state = "top_overlay_broken", layer = ABOVE_MOB_LAYER) @@ -276,15 +289,18 @@ if(status == BLUESPACE_CORE_BROKEN) disable() -/obj/structure/campaign_objective/destruction_objective/bluespace_core/plastique_act() +/obj/structure/campaign_objective/destruction_objective/bluespace_core/plastique_act(mob/living/plastique_user) if(status == BLUESPACE_CORE_OK) change_status(BLUESPACE_CORE_UNSTABLE) else if(status == BLUESPACE_CORE_UNSTABLE) + if(plastique_user && plastique_user.ckey) + var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[plastique_user.ckey] + personal_statistics.mission_objective_destroyed += (faction != plastique_user.faction ? 1 : -1) change_status(BLUESPACE_CORE_BROKEN) //airbase /obj/structure/prop/som_fighter - name = "\improper Harbinger" + name = "harbinger" desc = "A state of the art Harbinger class fighter. The premier fighter for SOM forces in space and atmosphere, bristling with high tech systems and weapons." icon = 'icons/Marine/mainship_props96.dmi' icon_state = "SOM_fighter" @@ -294,7 +310,7 @@ allow_pass_flags = PASS_AIR /obj/effect/landmark/campaign_structure/harbinger - name = "\improper Harbinger" + name = "harbinger" icon = 'icons/Marine/mainship_props96.dmi' icon_state = "SOM_fighter" pixel_x = -33 @@ -303,7 +319,7 @@ spawn_object = /obj/structure/campaign_objective/destruction_objective/harbinger /obj/structure/campaign_objective/destruction_objective/harbinger - name = "\improper Harbinger" + name = "harbinger" desc = "A state of the art harbinger class fighter. The premier fighter for SOM forces in space and atmosphere, bristling with high tech systems and weapons." icon = 'icons/Marine/mainship_props96.dmi' icon_state = "SOM_fighter" @@ -313,6 +329,7 @@ bound_width = 3 bound_x = -32 layer = ABOVE_MOB_LAYER + faction = FACTION_SOM /obj/effect/landmark/campaign_structure/viper name = "\improper Viper" diff --git a/code/game/objects/structures/campaign_structures/misc_structures.dm b/code/game/objects/structures/campaign_structures/misc_structures.dm new file mode 100644 index 0000000000000..a46501d122a38 --- /dev/null +++ b/code/game/objects/structures/campaign_structures/misc_structures.dm @@ -0,0 +1,26 @@ +//misc campaign structures/landmark spawners. Make sure mission types are set correctly, with child types made as required to avoid conflicts +/obj/effect/landmark/campaign_structure/barricade + name = "fire_support_raid_barricade" + icon = 'icons/Marine/barricades.dmi' + icon_state = "metal_0" + mission_types = list(/datum/campaign_mission/destroy_mission/fire_support_raid) + spawn_object = /obj/structure/barricade/metal + +/obj/effect/landmark/campaign_structure/barricade/sandbags + name = "fire_support_raid_sandbags" + icon_state = "sandbag_0" + mission_types = list(/datum/campaign_mission/destroy_mission/fire_support_raid) + spawn_object = /obj/structure/barricade/sandbags + +/obj/effect/landmark/campaign_structure/barricade/sandbags/som + mission_types = list(/datum/campaign_mission/destroy_mission/fire_support_raid/som) + +/obj/effect/landmark/campaign_structure/barricade/sandbags/asat + name = "ASAT_capture_sandbags" + mission_types = list(/datum/campaign_mission/capture_mission/asat) + +/obj/effect/landmark/campaign_structure/barricade/concrete + name = "fire_support_raid_concrete" + icon_state = "concrete_0" + mission_types = list(/datum/campaign_mission/destroy_mission/fire_support_raid) + spawn_object = /obj/structure/barricade/concrete diff --git a/code/game/objects/structures/campaign_structures/orbital_beacons.dm b/code/game/objects/structures/campaign_structures/orbital_beacons.dm new file mode 100644 index 0000000000000..4a2808959010f --- /dev/null +++ b/code/game/objects/structures/campaign_structures/orbital_beacons.dm @@ -0,0 +1,118 @@ +/obj/item/campaign_beacon + name = "default campaign beacon" + desc = "what smelly admin spawned this?" + icon = 'icons/Marine/marine-navigation.dmi' + icon_state = "motion4" + w_class = WEIGHT_CLASS_SMALL + item_flags = IS_DEPLOYABLE + ///Type path for what this deploys into + var/deployable_type + ///Time to deploy + var/deploy_time = 2 SECONDS + ///Time to undeploy + var/undeploy_time = 2 SECONDS + +/obj/item/campaign_beacon/Initialize(mapload) + . = ..() + AddComponent(/datum/component/deployable_item, deployable_type, deploy_time, undeploy_time, CALLBACK(src, PROC_REF(can_deploy))) + +///Any Additional checks for deploying validity +/obj/item/campaign_beacon/proc/can_deploy(mob/user, turf/location) + return TRUE + +/obj/item/campaign_beacon/bunker_buster + name = "orbital beacon" + desc = "A bulky device that is used to provide precision guidance to powerful orbital weapon systems." + icon = 'icons/Marine/marine-navigation.dmi' + icon_state = "motion4" + deployable_type = /obj/structure/campaign_objective/destruction_objective/bunker_buster + deploy_time = 2 SECONDS + undeploy_time = 2 SECONDS + ///Can only be deployed in map areas listed here + var/list/valid_deploy_areas + +/obj/item/campaign_beacon/bunker_buster/Initialize(mapload) + . = ..() + GLOB.campaign_objectives += src + var/datum/campaign_mission/raiding_base/current_mission = get_current_mission() + if(!istype(current_mission)) + return + valid_deploy_areas = current_mission.get_valid_beacon_areas() + +/obj/item/campaign_beacon/bunker_buster/Destroy() + GLOB.campaign_objectives -= src + return ..() + +/obj/item/campaign_beacon/bunker_buster/examine(mob/user) + . = ..() + if(!length(valid_deploy_areas)) + return + var/location_info + location_info += "Can be deployed in the following areas: \n" + for(var/area/valid_area AS in valid_deploy_areas) + location_info += "[valid_area::name]\n" + . += location_info + +///Checks if we can deploy the beacon here +/obj/item/campaign_beacon/bunker_buster/can_deploy(mob/user, turf/location) + var/area/beacon_area = get_area(location) + if(beacon_area.type in valid_deploy_areas) + return TRUE + if(user) + user.balloon_alert(user, "Cannot deploy here") + return FALSE + +///Delay between beacon timer finishing and the actual explosion +#define CAMPAIGN_OB_BEACON_IMPACT_DELAY 10 SECONDS + +/obj/structure/campaign_objective/destruction_objective/bunker_buster + name = "deployed orbital beacon" + desc = "An ominous red beacon, used to provide precision guidance to powerful orbital weapon systems." + icon = 'icons/Marine/marine-navigation.dmi' + icon_state = "motion1" + faction = FACTION_TERRAGOV + density = FALSE + ///How long the beacon takes to trigger its effect + var/beacon_duration = 3 MINUTES + ///Holds the actual timer for the beacon + var/beacon_timer + +/obj/structure/campaign_objective/destruction_objective/bunker_buster/Initialize(mapload) + . = ..() + RegisterSignal(SSdcs, COMSIG_GLOB_CAMPAIGN_OB_BEACON_TRIGGERED, PROC_REF(cancel_beacon)) + SEND_SIGNAL(SSdcs, COMSIG_GLOB_CAMPAIGN_OB_BEACON_ACTIVATION, src) + + beacon_timer = addtimer(CALLBACK(src, PROC_REF(beacon_effect)), beacon_duration, TIMER_STOPPABLE) + countdown = new(src) + countdown.pixel_x = 7 + countdown.pixel_y = 24 + countdown.start() + +/obj/structure/campaign_objective/destruction_objective/bunker_buster/Destroy() + QDEL_NULL(countdown) + if(beacon_timer) + deltimer(beacon_timer) + beacon_timer = null + return ..() + +/obj/structure/campaign_objective/destruction_objective/bunker_buster/get_time_left() + return beacon_timer ? round(timeleft(beacon_timer) MILLISECONDS) : null + +///Clears the beacon if another beacon successfully activates +/obj/structure/campaign_objective/destruction_objective/bunker_buster/proc/cancel_beacon(datum/source) + SIGNAL_HANDLER + qdel(src) + +///Effects triggered when the timer runs out +/obj/structure/campaign_objective/destruction_objective/bunker_buster/proc/beacon_effect() + UnregisterSignal(SSdcs, COMSIG_GLOB_CAMPAIGN_OB_BEACON_TRIGGERED) + SEND_SIGNAL(SSdcs, COMSIG_GLOB_CAMPAIGN_OB_BEACON_TRIGGERED, src, CAMPAIGN_OB_BEACON_IMPACT_DELAY) + for(var/mob/mob AS in GLOB.player_list) + if(mob.z != z) + continue + var/play_sound = 'sound/effects/OB_warning_announce_novoiceover.ogg' + if(isobserver(mob) || mob.faction == faction) + play_sound = 'sound/effects/OB_warning_announce.ogg' + mob.playsound_local(loc, play_sound, 125, falloff = 10, distance_multiplier = 0.2) + +#undef CAMPAIGN_OB_BEACON_IMPACT_DELAY diff --git a/code/game/objects/structures/coathanger.dm b/code/game/objects/structures/coathanger.dm index 150dbf4121217..16035f84ab4ac 100644 --- a/code/game/objects/structures/coathanger.dm +++ b/code/game/objects/structures/coathanger.dm @@ -5,7 +5,7 @@ icon_state = "coatrack0" coverage = 5 var/obj/item/clothing/suit/coat - var/list/allowed = list(/obj/item/clothing/suit/storage/labcoat, /obj/item/clothing/suit/storage/det_suit, /obj/item/clothing/suit/bomber) + var/list/allowed = list(/obj/item/clothing/suit/storage/labcoat, /obj/item/clothing/suit/storage/det_suit, /obj/item/clothing/suit/storage/bomber) /obj/structure/coatrack/Initialize(mapload) . = ..() @@ -25,6 +25,8 @@ /obj/structure/coatrack/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!(I.type in allowed) || coat) to_chat(user, span_notice("You cannot hang [I] on [src]")) @@ -50,11 +52,11 @@ break -/obj/structure/coatrack/update_icon() - overlays.Cut() +/obj/structure/coatrack/update_overlays() + . = ..() if(istype(coat, /obj/item/clothing/suit/storage/labcoat)) - overlays += image(icon, icon_state = "coat_lab") + . += image(icon, icon_state = "coat_lab") if(istype(coat, /obj/item/clothing/suit/storage/labcoat/cmo)) - overlays += image(icon, icon_state = "coat_cmo") + . += image(icon, icon_state = "coat_cmo") if(istype(coat, /obj/item/clothing/suit/storage/det_suit)) - overlays += image(icon, icon_state = "coat_det") + . += image(icon, icon_state = "coat_det") diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 8007f73dcfade..268bcfd48835f 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -215,17 +215,17 @@ dump_contents() qdel(src) -/obj/structure/closet/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) +/obj/structure/closet/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) . = ..() if(!.) return - if(X.a_intent == INTENT_HARM && !opened && prob(70)) + if(xeno_attacker.a_intent == INTENT_HARM && !opened && prob(70)) break_open() /obj/structure/closet/attackby(obj/item/I, mob/user, params) if(user in src) return FALSE - if(I.flags_item & ITEM_ABSTRACT) + if(I.item_flags & ITEM_ABSTRACT) return FALSE . = ..() if(opened) @@ -323,15 +323,17 @@ else balloon_alert(usr, "Can't do this") -/obj/structure/closet/update_icon()//Putting the welded stuff in updateicon() so it's easy to overwrite for special cases (Fridges, cabinets, and whatnot) - overlays.Cut() +/obj/structure/closet/update_icon_state()//Putting the welded stuff in updateicon() so it's easy to overwrite for special cases (Fridges, cabinets, and whatnot) + . = ..() if(!opened) icon_state = icon_closed - if(welded) - overlays += image(icon, overlay_welded) else icon_state = icon_opened +/obj/structure/closet/update_overlays() + . = ..() + if(!opened && welded) + . += image(icon, overlay_welded) /obj/structure/closet/resisted_against(datum/source) container_resist(source) @@ -458,7 +460,7 @@ return FALSE if(!CHECK_BITFIELD(destination.closet_flags, CLOSET_ALLOW_DENSE_OBJ) && density) return FALSE - if(CHECK_BITFIELD(flags_item, DELONDROP)) + if(CHECK_BITFIELD(item_flags, DELONDROP)) return FALSE var/item_size = CEILING(w_class * 0.5, 1) if(item_size + destination.item_size_counter > destination.storage_capacity) diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm index 8d2413ac2367c..6a0eab48d6d7c 100644 --- a/code/game/objects/structures/crates_lockers/closets/coffin.dm +++ b/code/game/objects/structures/crates_lockers/closets/coffin.dm @@ -8,6 +8,7 @@ anchored = FALSE /obj/structure/closet/coffin/update_icon_state() + . = ..() if(!opened) icon_state = icon_closed else diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm index 9504f2a66392c..b4dc832c61e04 100644 --- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm +++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm @@ -30,7 +30,7 @@ to_chat(user, "You disable the locking modules.") update_icon() return - else if(!(O.flags_item & NOBLUDGEON) && O.force) + else if(!(O.item_flags & NOBLUDGEON) && O.force) var/obj/item/W = O if(src.smashed || src.localopened) if(localopened) @@ -53,7 +53,7 @@ return if (istype(O, /obj/item/weapon/twohanded/fireaxe) && src.localopened) if(!fireaxe) - if(O.flags_item & WIELDED) + if(O.item_flags & WIELDED) to_chat(user, span_warning("Unwield the axe first.")) return fireaxe = O @@ -191,7 +191,9 @@ to_chat(user, span_notice("Cabinet unlocked.")) return -/obj/structure/closet/fireaxecabinet/update_icon() //Template: fireaxe[has fireaxe][is opened][hits taken][is smashed]. If you want the opening or closing animations, add "opening" or "closing" right after the numbers +//Template: fireaxe[has fireaxe][is opened][hits taken][is smashed]. If you want the opening or closing animations, add "opening" or "closing" right after the numbers +/obj/structure/closet/fireaxecabinet/update_icon_state() + . = ..() var/hasaxe = 0 if(fireaxe) hasaxe = 1 diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index 06e05dff0860f..c4f4a99119ad5 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -9,6 +9,7 @@ AddElement(/datum/element/debris, DEBRIS_WOOD, -10, 5) /obj/structure/closet/cabinet/update_icon_state() + . = ..() if(!opened) icon_state = icon_closed else diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm index c3686b58dc40e..92590d29814b3 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm @@ -23,6 +23,7 @@ new /obj/item/reagent_containers/food/drinks/cans/beer( src ) /obj/structure/closet/secure_closet/bar/update_icon_state() + . = ..() if(broken) icon_state = icon_broken 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 7e65054f0121d..854b71e9c9752 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -8,6 +8,7 @@ icon_off = "fridge1" /obj/structure/closet/secure_closet/freezer/update_icon_state() + . = ..() if(broken) icon_state = icon_broken return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm index c2314e38e1a0c..7082cbc11ba9d 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm @@ -13,9 +13,9 @@ . = ..() switch(rand(1,2)) if(1) - new /obj/item/clothing/suit/apron(src) + new /obj/item/clothing/suit/storage/apron(src) if(2) - new /obj/item/clothing/suit/apron/overalls(src) + new /obj/item/clothing/suit/storage/apron/overalls(src) new /obj/item/storage/bag/plants(src) new /obj/item/clothing/under/rank/hydroponics(src) new /obj/item/tool/analyzer/plant_analyzer(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm index 68434d3284483..ab112d2039125 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -31,7 +31,8 @@ icon_broken = "cabinetdetective_broken" icon_off = "cabinetdetective_broken" -/obj/structure/closet/secure_closet/personal/cabinet/update_icon() +/obj/structure/closet/secure_closet/personal/cabinet/update_icon_state() + . = ..() if(broken) icon_state = icon_broken else 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 a29102023f1a2..93618348f5f14 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 @@ -50,14 +50,17 @@ return togglelock(usr) -/obj/structure/closet/secure_closet/update_icon() - overlays.Cut() +/obj/structure/closet/secure_closet/update_icon_state() + . = ..() if(opened) icon_state = icon_opened else icon_state = locked ? icon_locked : icon_closed + +/obj/structure/closet/secure_closet/update_overlays() + . = ..() if(welded) - overlays += overlay_welded + . += overlay_welded /obj/structure/closet/secure_closet/break_open() broken = TRUE 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 12872e153fd1f..e91d658cfd0a5 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -271,7 +271,8 @@ new /obj/item/armor_module/storage/uniform/holster/armpit(src) -/obj/structure/closet/secure_closet/detective/update_icon() +/obj/structure/closet/secure_closet/detective/update_icon_state() + . = ..() if(broken) icon_state = icon_broken else @@ -356,7 +357,8 @@ large = FALSE -/obj/structure/closet/secure_closet/wall/update_icon() +/obj/structure/closet/secure_closet/wall/update_icon_state() + . = ..() if(broken) icon_state = icon_broken else 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 58fc58a48db8b..461263a1d6fc0 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -78,7 +78,8 @@ new /obj/item/tool/extinguisher(src) new /obj/item/clothing/head/hardhat/red(src) -/obj/structure/closet/firecloset/update_icon() +/obj/structure/closet/firecloset/update_icon_state() + . = ..() if(!opened) icon_state = icon_closed else diff --git a/code/game/objects/structures/crates_lockers/largecrate_supplies.dm b/code/game/objects/structures/crates_lockers/largecrate_supplies.dm index 41f1254c74285..f05ef65fc5837 100644 --- a/code/game/objects/structures/crates_lockers/largecrate_supplies.dm +++ b/code/game/objects/structures/crates_lockers/largecrate_supplies.dm @@ -139,7 +139,7 @@ /obj/structure/largecrate/supply/weapons/standard_hmg name = "\improper HSG-102 mounted heavy smartgun chest (x2)" desc = "A supply crate containing two boxed HSG-102 mounted heavy smartguns." - supplies = list(/obj/item/storage/box/tl102 = 2) + supplies = list(/obj/item/storage/box/hsg_102 = 2) /obj/structure/largecrate/supply/weapons/standard_atgun name = "\improper AT-36 anti tank gun and ammo chest (x1, x10)" @@ -160,6 +160,11 @@ /obj/item/ammo_magazine/auto_cannon/flak = 3, ) +/obj/structure/largecrate/supply/weapons/heavy_flakgun + name = "\improper FK-88 mounted flak gun (x1)" + desc = "A supply crate containing a FK-88 mounted flak gun. Ammo sold separately." + supplies = list(/obj/item/weapon/gun/heavy_isg = 1) + /obj/structure/largecrate/supply/ammo name = "ammunition case" icon_state = "case" @@ -197,7 +202,7 @@ /obj/structure/largecrate/supply/ammo/standard_hmg name = "\improper HSG-102 ammunition box case (x6)" desc = "An ammunition case containing six HSG-102 ammunition boxes." - supplies = list(/obj/item/ammo_magazine/tl102 = 6) + supplies = list(/obj/item/ammo_magazine/hsg_102 = 6) /obj/structure/largecrate/supply/ammo/standard_ammo name = "large surplus ammuniton crate" @@ -397,7 +402,7 @@ /obj/structure/largecrate/machine/autodoc/attackby(obj/item/I, mob/user, params) . = ..() - if(!.) + if(.) return if(iscrowbar(I)) @@ -417,7 +422,7 @@ /obj/structure/largecrate/supply/machine/bodyscanner/attackby(obj/item/I, mob/user, params) . = ..() - if(!.) + if(.) return if(iscrowbar(I)) @@ -436,7 +441,7 @@ /obj/structure/largecrate/machine/sleeper/attackby(obj/item/I, mob/user, params) . = ..() - if(!.) + if(.) return if(iscrowbar(I)) diff --git a/code/game/objects/structures/crates_lockers/secure_crates.dm b/code/game/objects/structures/crates_lockers/secure_crates.dm index 06f22499cc5e6..ac69840f78c02 100644 --- a/code/game/objects/structures/crates_lockers/secure_crates.dm +++ b/code/game/objects/structures/crates_lockers/secure_crates.dm @@ -17,16 +17,17 @@ . = ..() update_icon() - -/obj/structure/closet/crate/secure/update_icon() - overlays.Cut() +/obj/structure/closet/crate/secure/update_icon_state() + . = ..() if(opened) icon_state = icon_opened else icon_state = locked ? icon_locked : icon_unlocked - if(welded) - overlays += overlay_welded +/obj/structure/closet/crate/secure/update_overlays() + . = ..() + if(welded) + . += overlay_welded /obj/structure/closet/crate/secure/can_open() return !locked diff --git a/code/game/objects/structures/crates_lockers/walllocker.dm b/code/game/objects/structures/crates_lockers/walllocker.dm index cfe5ff7b18c10..c37ccbcdebed2 100644 --- a/code/game/objects/structures/crates_lockers/walllocker.dm +++ b/code/game/objects/structures/crates_lockers/walllocker.dm @@ -50,6 +50,7 @@ icon_closed = "hydrant" icon_opened = "hydrantopen" overlay_welded = "hydrant-medical_welded" + layer = ABOVE_OBJ_LAYER /obj/structure/closet/walllocker/hydrant/extinguisher diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index eea081b66866b..c8d0e8e33e4f9 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -23,11 +23,11 @@ playsound(get_turf(loc), "rustle", 15, 1, 6) toggle() -/obj/structure/curtain/attack_alien(mob/living/carbon/xenomorph/attackingxeno, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) - if(!do_after(attackingxeno, XENO_CURTAIN_PULL_DELAY, NONE, src, BUSY_ICON_FRIENDLY)) +/obj/structure/curtain/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(!do_after(xeno_attacker, XENO_CURTAIN_PULL_DELAY, NONE, src, BUSY_ICON_FRIENDLY)) return - attackingxeno.do_attack_animation(src, ATTACK_EFFECT_CLAW) - attackingxeno.visible_message(span_danger("\The [attackingxeno] pulls [src] down and slices it apart!"), \ + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_CLAW) + xeno_attacker.visible_message(span_danger("\The [xeno_attacker] pulls [src] down and slices it apart!"), \ span_danger("You pull the [src] down and rip it to shreds!"), null, 5) qdel(src) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 70352e706a1a8..d1e29cdba9921 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -24,7 +24,8 @@ */ -/obj/structure/displaycase/update_icon() +/obj/structure/displaycase/update_icon_state() + . = ..() if(destroyed) icon_state = "glassboxb[occupied]" else diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index edb2d65539f29..8fc90a3ebafa6 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -136,7 +136,8 @@ /obj/structure/door_assembly/attackby(obj/item/I, mob/user, params) . = ..() - + if(.) + return if(istype(I, /obj/item/tool/pen)) var/t = copytext(stripped_input(user, "Enter the name for the door.", name, created_name), 1, MAX_NAME_LEN) if(!t) diff --git a/code/game/objects/structures/droppod.dm b/code/game/objects/structures/droppod.dm index 7ff0b37230fac..0d0489116c595 100644 --- a/code/game/objects/structures/droppod.dm +++ b/code/game/objects/structures/droppod.dm @@ -4,6 +4,8 @@ GLOBAL_LIST_INIT(blocked_droppod_tiles, typecacheof(list(/turf/open/space/transi #define DROPPOD_TRANSIT_TIME 10 SECONDS ///radius of dispersion for leader pods #define LEADER_POD_DISPERSION 5 +///radius of dispersion for pods for randomisation or obstacle avoidance +#define DROPPOD_BASE_DISPERSION 1 ///base marine drop pod. can be controlled by an attached [/obj/structure/droppod/leader] or [/obj/machinery/computer/droppod_control] /obj/structure/droppod @@ -18,7 +20,7 @@ GLOBAL_LIST_INIT(blocked_droppod_tiles, typecacheof(list(/turf/open/space/transi interaction_flags = INTERACT_OBJ_DEFAULT|INTERACT_POWERLOADER_PICKUP_ALLOWED_BYPASS_ANCHOR soft_armor = list(MELEE = 25, BULLET = 80, LASER = 80, ENERGY = 90, BOMB = 70, BIO = 100, FIRE = 0, ACID = 0) max_integrity = 75 - flags_atom = PREVENT_CONTENTS_EXPLOSION + atom_flags = PREVENT_CONTENTS_EXPLOSION coverage = 75 buckle_flags = CAN_BUCKLE|BUCKLE_PREVENTS_PULL light_range = 1 @@ -99,6 +101,7 @@ GLOBAL_LIST_INIT(blocked_droppod_tiles, typecacheof(list(/turf/open/space/transi set_light(0) /obj/structure/droppod/update_icon_state() + . = ..() if(drop_state == DROPPOD_ACTIVE) icon_state = initial(icon_state) else if(operation_started && launch_allowed) @@ -167,7 +170,7 @@ GLOBAL_LIST_INIT(blocked_droppod_tiles, typecacheof(list(/turf/open/space/transi balloon_alert(user, "Hazardous zone") return FALSE var/area/targetarea = get_area(target) - if(targetarea.flags_area & NO_DROPPOD) // Thou shall not pass! + if(targetarea.area_flags & NO_DROPPOD) // Thou shall not pass! if(user) balloon_alert(user, "Invalid area") return FALSE @@ -210,13 +213,18 @@ GLOBAL_LIST_INIT(blocked_droppod_tiles, typecacheof(list(/turf/open/space/transi if(drop_state != DROPPOD_READY) return + var/turf/target = locate(target_x, target_y, target_z) + if(!commanded_drop) //we randomise the landing slightly, its already randomised for mass launch + target = find_new_target() + target_x = target.x + target_y = target.y + if(!checklanding(user)) return for(var/mob/podder AS in buckled_mobs) podder.forceMove(src) - var/turf/target = locate(target_x, target_y, target_z) if(user) log_game("[key_name(user)] launched pod [src] at [AREACOORD(target)]") deadchat_broadcast(" has been launched", src, turf_target = target) @@ -230,6 +238,22 @@ GLOBAL_LIST_INIT(blocked_droppod_tiles, typecacheof(list(/turf/open/space/transi flick("[icon_state]_closing", src) addtimer(CALLBACK(src, PROC_REF(launch_pod), user), 2.5 SECONDS) +///Find a new suitable target turf around the pods initial target +/obj/structure/droppod/proc/find_new_target(mob/user) + var/scatter_radius = DROPPOD_BASE_DISPERSION + GLOB.current_orbit + var/turf/T0 = locate(target_x + scatter_radius, target_y + scatter_radius, target_z) + var/turf/T1 = locate(target_x - scatter_radius, target_y - scatter_radius, target_z) + var/list/block = block(T0,T1) + shuffle_inplace(block) + for(var/turf/attemptdrop AS in block) + if(!checklanding(optional_turf = attemptdrop)) + continue + return attemptdrop + + if(user) + to_chat(user, span_warning("[icon2html(src, user)] RECALCULATION FAILED!")) + return locate(target_x, target_y, target_z) //no other alt spots found, we return our original target + ///actually launches the pod /obj/structure/droppod/proc/launch_pod(mob/user) if(!launch_allowed) @@ -244,33 +268,21 @@ GLOBAL_LIST_INIT(blocked_droppod_tiles, typecacheof(list(/turf/open/space/transi playsound(src, 'sound/effects/escape_pod_launch.ogg', 70) playsound(src, 'sound/effects/droppod_launch.ogg', 70) - addtimer(CALLBACK(src, PROC_REF(finish_drop), user), DROPPOD_TRANSIT_TIME) + addtimer(CALLBACK(src, PROC_REF(finish_drop), user), ROUND_UP(DROPPOD_TRANSIT_TIME * ((GLOB.current_orbit + 3) / 6))) forceMove(pick(reserved_area.reserved_turfs)) new /area/arrival(loc) //adds a safezone so we dont suffocate on the way down, cleaned up with reserved turfs /// Moves the droppod into its target turf, which it updates if needed /obj/structure/droppod/proc/finish_drop(mob/user) var/turf/targetturf = locate(target_x, target_y, target_z) - for(var/a in targetturf.contents) - var/atom/target = a - if(target.density) //if theres something dense in the turf try to recalculate a new turf - if(user) - to_chat(user, span_warning("[icon2html(src, user)] WARNING! TARGET ZONE OCCUPIED! EVADING!")) - balloon_alert(user, "EVADING") - var/turf/T0 = locate(target_x + 2,target_y + 2, target_z) - var/turf/T1 = locate(target_x - 2,target_y - 2, target_z) - var/list/block = block(T0,T1) - targetturf - for(var/t in block)//Randomly selects a free turf in a 5x5 block around the target - var/turf/attemptdrop = t - if(!attemptdrop.density && !is_type_in_typecache(attemptdrop, GLOB.blocked_droppod_tiles)) - targetturf = attemptdrop - break - if(targetturf.density)//We tried and failed, revert to the old one, which has a new dense obj but is at least not dense - if(user) - to_chat(user, span_warning("[icon2html(src, user)] RECALCULATION FAILED!")) - targetturf = locate(target_x, target_y, target_z) - break - + for(var/atom/target AS in targetturf.contents) + if(!target.density) + continue + if(user) + to_chat(user, span_warning("[icon2html(src, user)] WARNING! TARGET ZONE OCCUPIED! EVADING!")) + balloon_alert(user, "EVADING") + targetturf = find_new_target(user) + break forceMove(targetturf) SEND_GLOBAL_SIGNAL(COMSIG_GLOB_DROPPOD_LANDED, targetturf) pixel_y = 500 @@ -320,7 +332,8 @@ GLOBAL_LIST_INIT(blocked_droppod_tiles, typecacheof(list(/turf/open/space/transi for(var/obj/structure/droppod/pod AS in GLOB.droppod_list) if(LAZYLEN(pod.buckled_mobs) || LAZYLEN(pod.contents)) occupied_pods++ - var/dispersion = max(LEADER_POD_DISPERSION, LEADER_POD_DISPERSION + ((occupied_pods - 10) / 5)) + var/dispersion = LEADER_POD_DISPERSION + GLOB.current_orbit + dispersion = max(dispersion, dispersion + ((occupied_pods - 10) / 5)) var/turf/topright = locate(new_x + dispersion, new_y + dispersion, target_z) var/turf/bottomleft = locate(new_x - dispersion, new_y - dispersion, target_z) var/list/block = block(bottomleft, topright) - locate() @@ -374,6 +387,7 @@ GLOBAL_LIST_INIT(blocked_droppod_tiles, typecacheof(list(/turf/open/space/transi return ..() /obj/structure/droppod/nonmob/update_icon_state() + . = ..() if(drop_state == DROPPOD_ACTIVE) icon_state = initial(icon_state) else if(stored_object) @@ -466,7 +480,7 @@ GLOBAL_LIST_INIT(blocked_droppod_tiles, typecacheof(list(/turf/open/space/transi /obj/structure/droppod/nonmob/mech_pod name = "\improper TGMC Zeus mech drop pod" - desc = "A menacing metal hunk of steel that is used by the TGMC for quick tactical redeployment. This is a larger model designed specifically to carry mechs." + desc = "A menacing metal hunk of steel that is used by the TGMC for quick tactical redeployment. This is a larger model designed specifically to carry mechs. Shift click to enter when inside a mech." icon = 'icons/obj/structures/big_droppod.dmi' icon_state = "mechpod" light_range = 2 @@ -494,7 +508,7 @@ GLOBAL_LIST_INIT(blocked_droppod_tiles, typecacheof(list(/turf/open/space/transi /obj/structure/droppod/nonmob/mech_pod/ex_act(severity) switch(severity) if(EXPLODE_DEVASTATE) - take_damage(100, BRUTE, BOMB, 0) + take_damage(100, BRUTE, BOMB) if(EXPLODE_HEAVY) take_damage(50, BRUTE, BOMB, 0) */ @@ -610,3 +624,12 @@ GLOBAL_LIST_INIT(blocked_droppod_tiles, typecacheof(list(/turf/open/space/transi /obj/structure/drop_pod_launcher/leader pod_type = /obj/structure/droppod/leader + +/obj/structure/drop_pod_launcher/mech + pod_type = /obj/structure/droppod/nonmob/mech_pod + +/obj/structure/drop_pod_launcher/supply + pod_type = /obj/structure/droppod/nonmob/supply_pod + +/obj/structure/drop_pod_launcher/sentry + pod_type = /obj/structure/droppod/nonmob/turret_pod diff --git a/code/game/objects/structures/dropship_ammo.dm b/code/game/objects/structures/dropship_ammo.dm index ce2a8fc74f8d6..a6e5c8ac72eb6 100644 --- a/code/game/objects/structures/dropship_ammo.dm +++ b/code/game/objects/structures/dropship_ammo.dm @@ -16,16 +16,23 @@ var/travelling_time = 10 SECONDS ///type of equipment that accept this type of ammo. var/equipment_type + ///current ammo count var/ammo_count + ///maximum ammo count. does NOT determine starting ammo var/max_ammo_count - var/ammo_name = "rounds" //what to call the ammo in the ammo transfering message + ///what to call the ammo in the ammo transfering message + var/ammo_name = "rounds" var/ammo_id ///whether the ammo inside this magazine can be transfered to another magazine. var/transferable_ammo = FALSE ///sound played mere seconds before impact var/warning_sound = 'sound/machines/hydraulics_2.ogg' + ///voiceline to play half a second after the weapon is fired + var/firing_voiceline + ///how much ammo to use up per firing sequence var/ammo_used_per_firing = 1 - var/point_cost = 0 //how many points it costs to build this with the fabricator, set to 0 if unbuildable. + ///how many points it costs to build this with the fabricator, set to 0 if unbuildable. + var/point_cost = 0 ///Type of ammo var/ammo_type @@ -211,12 +218,12 @@ transferable_ammo = TRUE ammo_used_per_firing = 200 point_cost = 100 + ammo_type = CAS_30MM + cas_effect = /obj/effect/overlay/blinking_laser/heavygun ///Radius of the square that the bullets will strafe var/bullet_spread_range = 2 ///Width of the square we are attacking, so you can make rectangular attacks later var/attack_width = 3 - ammo_type = CAS_30MM - cas_effect = /obj/effect/overlay/blinking_laser/heavygun /obj/structure/ship_ammo/cas/heavygun/examine(mob/user) . = ..() @@ -268,7 +275,7 @@ name = "high-velocity 30mm ammo crate" icon_state = "30mm_crate_hv" desc = "A crate full of 30mm high-velocity bullets used on the dropship heavy guns. Moving this will require some sort of lifter." - travelling_time = 3 SECONDS + travelling_time = 2 SECONDS point_cost = 225 @@ -322,10 +329,10 @@ ammo_used_per_firing = 10 warning_sound = 'sound/effects/nightvision.ogg' point_cost = 150 - ///The length of the beam that will come out of when we fire do both ends xxxoxxx where o is where you click - var/laze_radius = 4 ammo_type = CAS_LASER_BATTERY cas_effect = /obj/effect/overlay/blinking_laser/laser + ///The length of the beam that will come out of when we fire do both ends xxxoxxx where o is where you click + var/laze_radius = 4 /obj/structure/ship_ammo/cas/laser_battery/examine(mob/user) . = ..() @@ -367,7 +374,7 @@ T.ignite(5, 30) //short but intense -//Rockets +//Rockets are defined by being one shot and done, and generally having solid payloads and low travel times. /obj/structure/ship_ammo/cas/rocket name = "abstract rocket" @@ -378,6 +385,7 @@ max_ammo_count = 1 ammo_name = "rocket" ammo_id = "" + firing_voiceline = 'sound/voice/plane_vws/shot_missile.ogg' bound_width = 64 bound_height = 32 travelling_time = 4 SECONDS @@ -385,39 +393,76 @@ ammo_type = CAS_MISSILE /obj/structure/ship_ammo/cas/rocket/detonate_on(turf/impact, attackdir = NORTH) + impact.ceiling_debris_check(3) + explosion(impact, devastating_explosion_range, heavy_explosion_range, light_explosion_range) qdel(src) +//ATGMs, defined by 3 second travel time and tight explosion sizes. -//this one is air-to-air only +// The widowmaker is defined by being the fastest ATGM on offer, however it suffers in explosive potiential due to being so fast. /obj/structure/ship_ammo/cas/rocket/widowmaker - name = "\improper AIM-224 'Widowmaker'" - desc = "The AIM-224 is the latest in air to air missile technology. Earning the nickname of 'Widowmaker' from various dropship pilots after improvements to its guidence warhead prevents it from being jammed leading to its high kill rate. Not well suited for ground bombardment, but its high velocity makes it reach its target quickly. Moving this will require some sort of lifter." + name = "\improper AGM-224 'Widowmaker'" + desc = "The AGM-224 is the latest in air to ground missile technology. Earning the nickname of 'Widowmaker' from various pilots after improvements allow it to land at incredibly high speeds, at the cost of explosive payload. Well suited for ground bombardment, its high velocity making it reach its target quickly. Moving this will require some sort of lifter." icon_state = "single" - travelling_time = 3 SECONDS //not powerful, but reaches target fast + travelling_time = 2 SECONDS //The epitome of ATGMs. ammo_id = "" + point_cost = 300 + devastating_explosion_range = 2 + heavy_explosion_range = 3 + prediction_type = CAS_AMMO_EXPLOSIVE + cas_effect = /obj/effect/overlay/blinking_laser/widowmaker + +/obj/structure/ship_ammo/cas/rocket/keeper + name = "\improper AGM-67 'Keeper II" + desc = "The AGM-67 'Keeper II' is the latest in a generation of laser guided weaponry that spans all the way back to the 20th century. Earning its nickname from a contract that developed its guidance system and the various uses of it during peacekeeping conflicts. Its payload is designed to devastate armored targets. Moving this will require some sort of lifter." + icon_state = "keeper" + ammo_id = "k" point_cost = 225 devastating_explosion_range = 2 heavy_explosion_range = 4 - light_explosion_range = 7 + travelling_time = 3 SECONDS prediction_type = CAS_AMMO_EXPLOSIVE - cas_effect = /obj/effect/overlay/blinking_laser/widowmaker -/obj/structure/ship_ammo/cas/rocket/widowmaker/detonate_on(turf/impact, attackdir = NORTH) +// Da warcrime ATGM. Lower explosive yield, but long lasting fire. +/obj/structure/ship_ammo/cas/rocket/napalm + name = "\improper AGM-99 'Napalm'" + desc = "The AGM-99 'Napalm' is an incendiary rocket used to turn specific targeted areas into giant balls of fire for quite a long time, it has a smaller outer explosive payload than other AGMs, however. Moving this will require some sort of lifter." + icon_state = "napalm" + ammo_id = "n" + point_cost = 275 + devastating_explosion_range = 2 + heavy_explosion_range = 3 + light_explosion_range = 4 + fire_range = 3 + travelling_time = 3 SECONDS + prediction_type = CAS_AMMO_INCENDIARY + cas_effect = /obj/effect/overlay/blinking_laser/napalm + +/obj/structure/ship_ammo/cas/rocket/napalm/detonate_on(turf/impact, attackdir = NORTH) impact.ceiling_debris_check(3) explosion(impact, devastating_explosion_range, heavy_explosion_range, light_explosion_range) + flame_radius(fire_range, impact, 30, 60) //cooking for a long time + var/datum/effect_system/smoke_spread/phosphorus/warcrime = new + warcrime.set_up(fire_range + 1, impact, 7) + warcrime.start() qdel(src) + +// High yield missiles are defined by having... high yields and high travel time, usually around six seconds. + +//The Banshee is defined by combining both explosive and fire into one, literally. At the cost of some outer payload yield. /obj/structure/ship_ammo/cas/rocket/banshee - name = "\improper AGM-227 'Banshee'" - desc = "The AGM-227 missile is a mainstay of the overhauled dropship fleet against any mobile or armored ground targets. It's earned the nickname of 'Banshee' from the sudden wail that it emitts right before hitting a target. Useful to clear out large areas. Moving this will require some sort of lifter." + name = "\improper PGHM-227 'Banshee'" + desc = "The PGHM-227 missile is a mainstay of the fleet against any mobile or armored ground targets. It's earned the nickname of 'Banshee' from the sudden wail that it emitts right before hitting a target. Useful to clear out large areas. Moving this will require some sort of lifter." icon_state = "banshee" ammo_id = "b" - point_cost = 225 + point_cost = 275 devastating_explosion_range = 2 heavy_explosion_range = 4 - light_explosion_range = 7 + light_explosion_range = 5 fire_range = 7 prediction_type = CAS_AMMO_INCENDIARY + travelling_time = 6 SECONDS cas_effect = /obj/effect/overlay/blinking_laser/banshee /obj/structure/ship_ammo/cas/rocket/banshee/detonate_on(turf/impact, attackdir = NORTH) @@ -425,32 +470,18 @@ explosion(impact, devastating_explosion_range, heavy_explosion_range, light_explosion_range, flame_range = fire_range) //more spread out, with flames qdel(src) -/obj/structure/ship_ammo/cas/rocket/keeper - name = "\improper GBU-67 'Keeper II'" - desc = "The GBU-67 'Keeper II' is the latest in a generation of laser guided weaponry that spans all the way back to the 20th century. Earning its nickname from a shortening of 'Peacekeeper' which comes from the program that developed its guidance system and the various uses of it during peacekeeping conflicts. Its payload is designed to devastate armored targets. Moving this will require some sort of lifter." - icon_state = "keeper" - ammo_id = "k" - point_cost = 300 - devastating_explosion_range = 4 - heavy_explosion_range = 4 - light_explosion_range = 5 - prediction_type = CAS_AMMO_EXPLOSIVE - -/obj/structure/ship_ammo/cas/rocket/keeper/detonate_on(turf/impact, attackdir = NORTH) - impact.ceiling_debris_check(3) - explosion(impact, devastating_explosion_range, heavy_explosion_range, light_explosion_range) //tighter blast radius, but more devastating near center - qdel(src) - +//The fatty is well.. Fat. /obj/structure/ship_ammo/cas/rocket/fatty - name = "\improper SM-17 'Fatty'" - desc = "The SM-17 'Fatty' is the most devestating rocket in TGMC arsenal, only second after its big cluster brother in Orbital Cannon. These rocket are also known for highest number of Friendly-on-Friendly incidents due to secondary cluster explosions as well as range of these explosions, TGMC recommends pilots to encourage usage of signal flares or laser for 'Fatty' support. Moving this will require some sort of lifter." + name = "\improper PHGM-17 'Fatty'" + desc = "The PHGM-17 'Fatty' is the most devestating rocket in TGMC arsenal, only second after its big cluster brother in Orbital Cannon. These rocket are also known for highest number of Friendly-on-Friendly incidents due to secondary cluster explosions as well as range of these explosions, TGMC recommends pilots to encourage usage of signal flares or laser for 'Fatty' support. Moving this will require some sort of lifter." icon_state = "fatty" ammo_id = "f" - point_cost = 325 + point_cost = 300 devastating_explosion_range = 2 heavy_explosion_range = 3 light_explosion_range = 4 prediction_type = CAS_AMMO_EXPLOSIVE + travelling_time = 6 SECONDS cas_effect = /obj/effect/overlay/blinking_laser/fatty /obj/structure/ship_ammo/cas/rocket/fatty/detonate_on(turf/impact, attackdir = NORTH) @@ -474,31 +505,36 @@ explosion(detonation_target, devastating_explosion_range, heavy_explosion_range, light_explosion_range, adminlog = FALSE) qdel(src) -/obj/structure/ship_ammo/cas/rocket/napalm - name = "\improper XN-99 'Napalm'" - desc = "The XN-99 'Napalm' is an incendiary rocket used to turn specific targeted areas into giant balls of fire for a long time. Moving this will require some sort of lifter." - icon_state = "napalm" - ammo_id = "n" +// This is the "Default" heavy rocket. +/obj/structure/ship_ammo/cas/rocket/monarch + name = "\improper PHGM-7 'Monarch'" + desc = "The PHGM-7 'Monarch' is a well tried and tested dumb rocket design due to being a mere dumb rocket. Its payload is designed to devastate areas for cheap. Moving this will require some sort of lifter." + icon_state = "monarch" + ammo_id = "m" point_cost = 250 - devastating_explosion_range = 2 - heavy_explosion_range = 3 - light_explosion_range = 4 - fire_range = 5 - prediction_type = CAS_AMMO_INCENDIARY - cas_effect = /obj/effect/overlay/blinking_laser/incendiary - -/obj/structure/ship_ammo/cas/rocket/napalm/detonate_on(turf/impact, attackdir = NORTH) - impact.ceiling_debris_check(3) - explosion(impact, devastating_explosion_range, heavy_explosion_range, light_explosion_range) //relatively weak - flame_radius(fire_range, impact, 60, 30) //cooking for a long time - var/datum/effect_system/smoke_spread/phosphorus/warcrime = new - warcrime.set_up(fire_range + 1, impact, 7) - warcrime.start() - qdel(src) + devastating_explosion_range = 3 + heavy_explosion_range = 5 + light_explosion_range = 7 + travelling_time = 6 SECONDS + prediction_type = CAS_AMMO_EXPLOSIVE + cas_effect = /obj/effect/overlay/blinking_laser/monarch +// High speed missiles are defined by their four second deploy time, solid yield. -//minirockets +//The Swansong is the bogstandard missile, it missiles. +/obj/structure/ship_ammo/cas/rocket/swansong + name = "\improper PLGM-50 'Swansong'" + desc = "The PLGM-7 'Swansong' is the bogstandard air to ground missile load of the Navy. Named after barely dodging discontinuation dozens of times to more expensive design types. Moving this will require some sort of lifter." + icon_state = "swansong" + ammo_id = "s" + point_cost = 200 + devastating_explosion_range = 2 + heavy_explosion_range = 4 + light_explosion_range = 6 + prediction_type = CAS_AMMO_EXPLOSIVE + cas_effect = /obj/effect/overlay/blinking_laser/swansong +//Minirockets are effectively just da small rockets. /obj/structure/ship_ammo/cas/minirocket name = "mini rocket stack" desc = "A pack of explosive laser guided mini rockets. Moving this will require some sort of lifter." @@ -508,6 +544,7 @@ ammo_count = 6 max_ammo_count = 6 ammo_name = "minirocket" + firing_voiceline = 'sound/voice/plane_vws/shot_missile.ogg' travelling_time = 2 SECONDS transferable_ammo = TRUE point_cost = 175 @@ -589,6 +626,7 @@ point_cost = 50 // Not a real rocket, so its cheap travelling_time = 4 SECONDS cas_effect = /obj/effect/overlay/blinking_laser/flare + firing_voiceline = 'sound/voice/plane_vws/shot_flare.ogg' devastating_explosion_range = 0 heavy_explosion_range = 0 light_explosion_range = 0 @@ -602,3 +640,96 @@ /obj/structure/ship_ammo/cas/minirocket/illumination/proc/drop_cas_flare(turf/impact) new /obj/effect/temp_visual/above_flare(impact) + +// Bombs have a long travel time but are decently numerous, ranging in payloads from 200 to 1000lbs. Higher is bigger. +/obj/structure/ship_ammo/cas/bomb + name = "\improper AOE-200lb 'Tiny' stack" + desc = "A decent-sized payload of explosive bombs, will only fit in a full-sized bomb pod. Moving this will require some sort of lifter." + icon_state = "bomb_200" + icon = 'icons/Marine/mainship_props.dmi' + equipment_type = /obj/structure/dropship_equipment/cas/weapon/bomb_pod + ammo_count = 8 + max_ammo_count = 8 + ammo_name = "bomb_200" + firing_voiceline = 'sound/voice/plane_vws/shot_bomb.ogg' + travelling_time = 12 SECONDS + transferable_ammo = TRUE + point_cost = 200 // Bombs are numerous. + ammo_type = CAS_BOMB + devastating_explosion_range = 0 + heavy_explosion_range = 3 + light_explosion_range = 4 + prediction_type = CAS_AMMO_EXPLOSIVE + cas_effect = /obj/effect/overlay/blinking_laser/bomb + + +/obj/structure/ship_ammo/cas/bomb/detonate_on(turf/impact, attackdir = NORTH) + impact.ceiling_debris_check(2) + explosion(impact, devastating_explosion_range, heavy_explosion_range, light_explosion_range, adminlog = FALSE)//no messaging admin, that'd spam them. + +// Four hundos have no real gimmick beyond being a bigger payload. +/obj/structure/ship_ammo/cas/bomb/fourhundred + name = "\improper AOE-400lb 'Mighty' stack" + desc = "A decently-sized payload of explosive bombs, will only fit in a full-sized bomb pod. Moving this will require some sort of lifter." + icon_state = "bomb_400" + equipment_type = /obj/structure/dropship_equipment/cas/weapon/bomb_pod + ammo_count = 4 + max_ammo_count = 4 + ammo_name = "bomb_400" + point_cost = 225 // Bombs are numerous. + heavy_explosion_range = 4 + light_explosion_range = 5 + prediction_type = CAS_AMMO_EXPLOSIVE + cas_effect = /obj/effect/overlay/blinking_laser/bomb + +// The mother of all bombs, Jack. +/obj/structure/ship_ammo/cas/bomb/moab + name = "\improper AOE-1000lb 'MOAB' stack" + desc = "A incredibly high yield payload bomb used to utterly ruin someone's day, generally termed as the 'Mother of all Bombs'. will only fit in a full-sized bomb pod. Moving this will require some sort of lifter." + icon_state = "bomb_1000" + ammo_count = 2 + max_ammo_count = 2 + devastating_explosion_range = 6 + heavy_explosion_range = 8 + light_explosion_range = 0 + ammo_name = "bomb_1000" + travelling_time = 14 SECONDS + point_cost = 600 // This is literally a minituare OB. + cas_effect = /obj/effect/overlay/blinking_laser/bomb_fat + +// Bomblets are small and numerious, with small paylods but high quantity. +/obj/structure/ship_ammo/cas/bomblet + name = "\improper AOE-50lb 'Dandelions' stack" + desc = "A large litter of explosive bomblets, will only fit in a bomblet pod. Moving this will require some sort of lifter." + icon_state = "bomb_50" + icon = 'icons/Marine/mainship_props.dmi' + equipment_type = /obj/structure/dropship_equipment/cas/weapon/bomblet_pod + ammo_count = 40 + max_ammo_count = 40 + ammo_name = "bomb_50" + firing_voiceline = 'sound/voice/plane_vws/shot_bomb.ogg' + travelling_time = 10 SECONDS + transferable_ammo = TRUE + point_cost = 150 + ammo_type = CAS_BOMBLET + light_explosion_range = 2 + heavy_explosion_range = 0 + prediction_type = CAS_AMMO_EXPLOSIVE + cas_effect = /obj/effect/overlay/blinking_laser/bomblet + + +/obj/structure/ship_ammo/cas/bomblet/detonate_on(turf/impact, attackdir = NORTH) + impact.ceiling_debris_check(2) + explosion(impact, heavy_explosion_range, light_explosion_range, adminlog = FALSE)//no messaging admin, that'd spam them. + +/obj/structure/ship_ammo/cas/bomblet/medium + name = "\improper AOE-75lb 'Poppies' stack" + desc = "A large litter of explosive bomblets. Moving this will require some sort of lifter." + icon_state = "bomb_75" + ammo_count = 20 + max_ammo_count = 20 + ammo_name = "bomb_75" + travelling_time = 12 SECONDS + point_cost = 175 + light_explosion_range = 3 + prediction_type = CAS_AMMO_EXPLOSIVE diff --git a/code/game/objects/structures/dropship_equipment.dm b/code/game/objects/structures/dropship_equipment.dm index 918e89b11f420..89de39d69df67 100644 --- a/code/game/objects/structures/dropship_equipment.dm +++ b/code/game/objects/structures/dropship_equipment.dm @@ -104,9 +104,11 @@ pixel_y = 32 /obj/effect/attach_point/crew_weapon - name = "rear attach point" + name = "interior attach point" base_category = DROPSHIP_CREW_WEAPON density = FALSE + layer = HOLOPAD_LAYER //Keeps xenos from hiding under them + plane = FLOOR_PLANE //Doesn't layer under weeds unless it has this /obj/effect/attach_point/crew_weapon/dropship1 ship_tag = SHUTTLE_ALAMO @@ -323,6 +325,8 @@ /obj/structure/dropship_equipment/shuttle/flare_launcher/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/explosive/grenade/flare) && stored_amount < max_amount) stored_amount++ user.balloon_alert(user, "You insert a flare, remaining flares [stored_amount].") @@ -506,6 +510,7 @@ update_icon() /obj/structure/dropship_equipment/shuttle/weapon_holder/update_icon_state() + . = ..() if(ship_base) icon_state = deployed_icon_state else @@ -518,10 +523,10 @@ /obj/structure/dropship_equipment/shuttle/weapon_holder/machinegun name = "machinegun deployment system" - desc = "A box that deploys a modified M56D crewserved machine gun. Fits on the crewserved weapon attach points of dropships. You need a powerloader to lift it." + desc = "A box that deploys a modified HSG-102 crewserved machine gun. Fits on the crewserved weapon attach points of dropships. You need a powerloader to lift it." icon_state = "mg_system" point_cost = 300 - deployable_type = /obj/item/weapon/gun/tl102/hsg_nest + deployable_type = /obj/item/weapon/gun/hsg_102/hsg_nest /obj/structure/dropship_equipment/shuttle/weapon_holder/minigun name = "minigun deployment system" @@ -642,9 +647,12 @@ bound_height = 64 dropship_equipment_flags = USES_AMMO|IS_WEAPON|IS_INTERACTABLE|FIRE_MISSION_ONLY screen_mode = 1 - COOLDOWN_DECLARE(last_fired) //used for weapon cooldown after use. + ///used for weapon cooldown after use + COOLDOWN_DECLARE(last_fired) + ///primary firing sound on the plane var/firing_sound - var/firing_delay = 20 //delay between firing. 2 seconds by default + ///delay between firing. + var/firing_delay = 2 SECONDS /obj/structure/dropship_equipment/cas/weapon/update_equipment() if(ship_base) @@ -681,13 +689,18 @@ /obj/structure/dropship_equipment/cas/weapon/proc/open_fire(obj/selected_target, attackdir) var/turf/target_turf = get_turf(selected_target) if(firing_sound) - playsound(loc, firing_sound, 70, 1) + playsound(loc, firing_sound, 70, TRUE) var/obj/structure/ship_ammo/SA = ammo_equipped //necessary because we nullify ammo_equipped when firing big rockets var/ammo_travelling_time = SA.travelling_time //how long the rockets/bullets take to reach the ground target. var/ammo_warn_sound = SA.warning_sound deplete_ammo() COOLDOWN_START(src, last_fired, firing_delay) + if((SA.max_ammo_count > 1) && (SA.ammo_count <= 0)) + playsound(loc, 'sound/voice/plane_vws/ammunition_zero.ogg', 70, FALSE) + else if(SA.firing_voiceline) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), loc, SA.firing_voiceline, 80, FALSE), 5) + if(ammo_warn_sound) playsound(target_turf, ammo_warn_sound, 70, 1) @@ -706,14 +719,15 @@ /obj/structure/dropship_equipment/cas/weapon/heavygun name = "\improper GAU-21 30mm cannon" - desc = "A dismounted GAU-21 'Rattler' 30mm rotary cannon. It seems to be missing its feed links and has exposed connection wires. Capable of firing 5200 rounds a minute, feared by many for its power. Earned the nickname 'Rattler' from the vibrations it would cause on dropships in its inital production run. Moving this will require some sort of lifter." + desc = "A dismounted GAU-21 'Rattler' 30mm rotary cannon. Capable of firing 5200 rounds a minute, feared by many for its power. Earned the nickname 'Rattler' from the vibrations it would cause on ships in its inital production run. Moving this will require some sort of lifter." icon_state = "30mm_cannon" firing_sound = 'sound/weapons/gunship_chaingun.ogg' point_cost = 300 dropship_equipment_flags = USES_AMMO|IS_WEAPON|IS_INTERACTABLE ammo_type_used = CAS_30MM -/obj/structure/dropship_equipment/cas/weapon/heavygun/update_icon() +/obj/structure/dropship_equipment/cas/weapon/heavygun/update_icon_state() + . = ..() if(ammo_equipped) icon_state = "30mm_cannon_loaded[ammo_equipped.ammo_count?"1":"0"]" else @@ -744,7 +758,8 @@ ammo_equipped = null //nothing left to empty after firing update_icon() -/obj/structure/dropship_equipment/cas/weapon/rocket_pod/update_icon() +/obj/structure/dropship_equipment/cas/weapon/rocket_pod/update_icon_state() + . = ..() if(ammo_equipped?.ammo_count) icon_state = "rocket_pod_loaded[ammo_equipped.ammo_id]" else @@ -764,7 +779,8 @@ point_cost = 450 ammo_type_used = CAS_MINI_ROCKET -/obj/structure/dropship_equipment/cas/weapon/minirocket_pod/update_icon() +/obj/structure/dropship_equipment/cas/weapon/minirocket_pod/update_icon_state() + . = ..() if(ammo_equipped?.ammo_count) icon_state = "minirocket_pod_loaded" else @@ -789,7 +805,8 @@ dropship_equipment_flags = USES_AMMO|IS_WEAPON|IS_INTERACTABLE ammo_type_used = CAS_LASER_BATTERY -/obj/structure/dropship_equipment/cas/weapon/laser_beam_gun/update_icon() +/obj/structure/dropship_equipment/cas/weapon/laser_beam_gun/update_icon_state() + . = ..() if(ammo_equipped?.ammo_count) icon_state = "laser_beam_loaded" else @@ -810,7 +827,8 @@ equip_category = DROPSHIP_CREW_WEAPON //fits inside the central spot of the dropship point_cost = 0 -/obj/structure/dropship_equipment/cas/weapon/launch_bay/update_icon() +/obj/structure/dropship_equipment/cas/weapon/launch_bay/update_icon_state() + . = ..() if(ammo_equipped?.ammo_count) icon_state = "launch_bay_loaded" else @@ -857,3 +875,43 @@ deployed_table.layer = ABOVE_OBJ_LAYER + 0.01 //make sure its directly ABOVE the layer deployed_table.loc = loc icon_state = "table2-idle" + +/obj/structure/dropship_equipment/cas/weapon/bomblet_pod + name = "bomblet pod" + icon_state = "bomblet_pod" + desc = "A pnuematic thrower machine capable of up to 40 smaller bombs, generally called 'bomblets'. Moving this will require some sort of lifter." + icon = 'icons/Marine/mainship_props64.dmi' + firing_sound = 'sound/weapons/gunship_rocketpod.ogg' + firing_delay = 0.5 SECONDS + point_cost = 450 + dropship_equipment_flags = USES_AMMO|IS_WEAPON|IS_INTERACTABLE + ammo_type_used = CAS_BOMBLET + +/obj/structure/dropship_equipment/cas/weapon/bomblet_pod/update_icon_state() + . = ..() + if(ammo_equipped?.ammo_count) + icon_state = "bomblet_pod_loaded" + else if(ship_base) + icon_state = "bomblet_pod_installed" + else + icon_state = "bomblet_pod" + +/obj/structure/dropship_equipment/cas/weapon/bomb_pod + name = "bomb pod" + icon_state = "bomb_pod" + desc = "A bomb pod capable of launching several large bombs. Moving this will require some sort of lifter." + icon = 'icons/Marine/mainship_props64.dmi' + firing_sound = 'sound/weapons/gunship_rocketpod.ogg' + firing_delay = 2 SECONDS + point_cost = 450 + dropship_equipment_flags = USES_AMMO|IS_WEAPON|IS_INTERACTABLE + ammo_type_used = CAS_BOMB + +/obj/structure/dropship_equipment/cas/weapon/bomb_pod/update_icon_state() + . = ..() + if(ammo_equipped?.ammo_count) + icon_state = "bomb_pod_loaded" + else if(ship_base) + icon_state = "bomb_pod_installed" + else + icon_state = "bomb_pod" diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 97b19ed104a51..0c76545d36271 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -30,6 +30,8 @@ /obj/structure/extinguisher_cabinet/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tool/extinguisher)) if(has_extinguisher || !opened) @@ -58,12 +60,14 @@ opened = !opened update_icon() -/obj/structure/extinguisher_cabinet/update_icon() - overlays.Cut() +/obj/structure/extinguisher_cabinet/update_icon_state() + . = ..() icon_state = "[initial(icon_state)][opened]" +/obj/structure/extinguisher_cabinet/update_overlays() + . = ..() if(opened && has_extinguisher) - overlays += "extinguishero_[has_extinguisher.sprite_name]" + . += "extinguishero_[has_extinguisher.sprite_name]" /obj/structure/extinguisher_cabinet/mini starter_extinguisher = /obj/item/tool/extinguisher/mini diff --git a/code/game/objects/structures/fence.dm b/code/game/objects/structures/fence.dm index 9fe779360f734..475bc15bb8bb1 100644 --- a/code/game/objects/structures/fence.dm +++ b/code/game/objects/structures/fence.dm @@ -16,6 +16,8 @@ smoothing_flags = SMOOTH_BITMASK smoothing_groups = list(SMOOTH_GROUP_FENCE) canSmoothWith = list(SMOOTH_GROUP_FENCE) + ///Chance for the fence to break on /init + var/chance_to_break = 80 //Defaults to 80% /obj/structure/fence/ex_act(severity) switch(severity) @@ -30,6 +32,8 @@ /obj/structure/fence/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/stack/rods) && obj_integrity < max_integrity) if(user.skills.getRating(SKILL_CONSTRUCTION) < SKILL_CONSTRUCTION_PLASTEEL) @@ -71,46 +75,46 @@ else if(cut) //Cut/brokn grilles can't be messed with further than this return - else if(istype(I, /obj/item/grab) && get_dist(src, user) < 2) - var/obj/item/grab/G = I - if(!isliving(G.grabbed_thing)) - return + if(!iswirecutter(I)) + return + user.visible_message(span_notice("[user] starts cutting through [src] with [I]."), + "You start cutting through [src] with [I]") + playsound(loc, 'sound/items/wirecutter.ogg', 25, 1) + if(!do_after(user, 20, NONE, src, BUSY_ICON_BUILD)) + return - var/mob/living/M = G.grabbed_thing - var/state = user.grab_state - user.drop_held_item() - switch(state) - if(GRAB_PASSIVE) - M.visible_message(span_warning("[user] slams [M] against \the [src]!")) - M.apply_damage(7, blocked = MELEE) - UPDATEHEALTH(M) - take_damage(10) - if(GRAB_AGGRESSIVE) - M.visible_message(span_danger("[user] bashes [M] against \the [src]!")) - if(prob(50)) - M.Paralyze(2 SECONDS) - M.apply_damage(10, blocked = MELEE) - UPDATEHEALTH(M) - take_damage(25) - if(GRAB_NECK) - M.visible_message(span_danger("[user] crushes [M] against \the [src]!")) - M.Paralyze(10 SECONDS) - M.apply_damage(20, blocked = MELEE) - UPDATEHEALTH(M) - take_damage(50) - - else if(iswirecutter(I)) - user.visible_message(span_notice("[user] starts cutting through [src] with [I]."), - "You start cutting through [src] with [I]") - playsound(loc, 'sound/items/wirecutter.ogg', 25, 1) - if(!do_after(user, 20, NONE, src, BUSY_ICON_BUILD)) - return + playsound(loc, 'sound/items/wirecutter.ogg', 25, 1) + user.visible_message(span_notice("[user] cuts through [src] with [I]."), + "You cut through [src] with [I]") + deconstruct(TRUE) - playsound(loc, 'sound/items/wirecutter.ogg', 25, 1) - user.visible_message(span_notice("[user] cuts through [src] with [I]."), - "You cut through [src] with [I]") - deconstruct(TRUE) +/obj/structure/fence/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + if(!isliving(grab.grabbed_thing)) + return + var/mob/living/grabbed_mob = grab.grabbed_thing + var/state = user.grab_state + user.drop_held_item() + var/damage = (user.skills.getRating(SKILL_CQC) * CQC_SKILL_DAMAGE_MOD) + switch(state) + if(GRAB_PASSIVE) + damage += BASE_OBJ_SLAM_DAMAGE + grabbed_mob.visible_message(span_warning("[user] slams [grabbed_mob] against \the [src]!")) + log_combat(user, grabbed_mob, "slammed", "", "against \the [src]") + if(GRAB_AGGRESSIVE) + damage += BASE_OBJ_SLAM_DAMAGE * 1.5 + grabbed_mob.visible_message(span_danger("[user] bashes [grabbed_mob] against \the [src]!")) + log_combat(user, grabbed_mob, "bashed", "", "against \the [src]") + if(prob(50)) + grabbed_mob.Paralyze(2 SECONDS) + if(GRAB_NECK) + damage += BASE_OBJ_SLAM_DAMAGE * 2 + grabbed_mob.visible_message(span_danger("[user] crushes [grabbed_mob] against \the [src]!")) + log_combat(user, grabbed_mob, "crushed", "", "against \the [src]") + grabbed_mob.Paralyze(2 SECONDS) + grabbed_mob.apply_damage(damage, blocked = MELEE, updating_health = TRUE) + take_damage(damage * 2, BRUTE, MELEE) + return TRUE /obj/structure/fence/deconstruct(disassembled = TRUE) SHOULD_CALL_PARENT(FALSE) @@ -123,7 +127,7 @@ /obj/structure/fence/Initialize(mapload, start_dir) . = ..() - if(prob(80)) + if(prob(chance_to_break)) obj_integrity = 0 deconstruct(FALSE) @@ -137,5 +141,8 @@ /obj/structure/fence/fire_act(exposed_temperature, exposed_volume) if(exposed_temperature > T0C + 800) - take_damage(round(exposed_volume / 100), BURN, "fire") + take_damage(round(exposed_volume / 100), BURN, FIRE) return ..() + +/obj/structure/fence/broken + chance_to_break = 100 diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 8967fa3d1759f..9b8e5742d3f2e 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -78,6 +78,8 @@ /obj/structure/flora/tree/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!I.sharp && I.force <= 0) return @@ -510,6 +512,8 @@ /obj/structure/flora/jungle/vines/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(I.sharp != IS_SHARP_ITEM_BIG || !isliving(user)) return diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 527d448e3cdd4..e2d948d5e2aa7 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -14,7 +14,7 @@ var/reinforcement = null var/icon_prefix = "girder" smoothing_flags = SMOOTH_BITMASK - canSmoothWith = list(SMOOTH_GROUP_GIRDER,SMOOTH_GROUP_SURVIVAL_TITANIUM_WALLS,) + canSmoothWith = list(SMOOTH_GROUP_GIRDER,SMOOTH_GROUP_SURVIVAL_TITANIUM_WALLS) smoothing_groups = list(SMOOTH_GROUP_GIRDER) base_icon_state = "girder" @@ -53,6 +53,8 @@ /obj/structure/girder/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, GIRDER_REINF_METAL) || istype(I, GIRDER_REINF_PLASTEEL)) if(user.do_actions) return TRUE //no afterattack @@ -334,6 +336,7 @@ /obj/structure/girder/update_icon_state() + . = ..() switch(girder_state) if(GIRDER_BROKEN, GIRDER_BROKEN_PATCHED) icon = 'icons/obj/smooth_objects/girder_broke.dmi' diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index ad149b922b016..dbe4709fcffc5 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -7,7 +7,7 @@ density = TRUE anchored = TRUE coverage = 10 - flags_atom = CONDUCT + atom_flags = CONDUCT allow_pass_flags = PASS_AIR|PASS_PROJECTILE|PASS_GRILLE layer = OBJ_LAYER resistance_flags = XENO_DAMAGEABLE diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index ffe92ca493949..123739e74ddb5 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -73,6 +73,8 @@ /obj/structure/inflatable/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(can_puncture(I)) visible_message(span_danger("[user] pierces [src] with [I]!")) deflate(TRUE) diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 5b1b8fa98006d..45ecbc10a5532 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -34,6 +34,8 @@ /obj/structure/janitorialcart/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/storage/bag/trash) && !mybag) user.drop_held_item() diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm index 5189ccb463c2c..d9c9ef48f4e8f 100644 --- a/code/game/objects/structures/ladders.dm +++ b/code/game/objects/structures/ladders.dm @@ -53,6 +53,7 @@ return ..() /obj/structure/ladder/update_icon_state() + . = ..() if(up && down) icon_state = "ladder11" @@ -65,8 +66,8 @@ else //wtf make your ladders properly assholes icon_state = "ladder00" -/obj/structure/ladder/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - return attack_hand(X) +/obj/structure/ladder/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + return attack_hand(xeno_attacker) /obj/structure/ladder/attack_larva(mob/living/carbon/xenomorph/larva/X) return attack_hand(X) @@ -209,6 +210,8 @@ //Throwing Shiet /obj/structure/ladder/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/explosive/grenade)) var/obj/item/explosive/grenade/G = I diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm index c3d25dadd31f4..3e83aed557759 100644 --- a/code/game/objects/structures/lamarr_cage.dm +++ b/code/game/objects/structures/lamarr_cage.dm @@ -55,5 +55,5 @@ stat = DEAD -/obj/item/clothing/mask/facehugger/lamarr/update_icon() +/obj/item/clothing/mask/facehugger/lamarr/update_icon_state() return diff --git a/code/game/objects/structures/mine_structures.dm b/code/game/objects/structures/mine_structures.dm index 343799e5ec4e3..b8c020005e916 100644 --- a/code/game/objects/structures/mine_structures.dm +++ b/code/game/objects/structures/mine_structures.dm @@ -17,10 +17,10 @@ density = TRUE /obj/structure/mine_structure/wooden/flamer_fire_act(burnlevel) - take_damage(burnlevel, BURN, "fire") + take_damage(burnlevel, BURN, FIRE) /obj/structure/mine_structure/wooden/fire_act() - take_damage(25, BURN, "fire") + take_damage(25, BURN, FIRE) /obj/structure/mine_structure/wooden/support_wall name = "wooden support" diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index d3681918b2e7d..6c994d67dbfc7 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -75,7 +75,8 @@ update_icon() addtimer(VARSET_CALLBACK(src, switching_states, FALSE), 1 SECONDS) -/obj/structure/mineral_door/update_icon() +/obj/structure/mineral_door/update_icon_state() + . = ..() if(open) icon_state = "[base_icon_state][smoothing_flags ? "-[smoothing_junction]" : ""]-open" else @@ -84,13 +85,15 @@ /obj/structure/mineral_door/attackby(obj/item/W, mob/living/user) . = ..() + if(.) + return if(QDELETED(src)) return var/multiplier = 1 - if(istype(W, /obj/item/tool/pickaxe/plasmacutter) && !user.do_actions) + if(isplasmacutter(W) && !user.do_actions) var/obj/item/tool/pickaxe/plasmacutter/P = W - if(P.start_cut(user, src.name, src, PLASMACUTTER_BASE_COST * PLASMACUTTER_VLOW_MOD)) + if(P.start_cut(user, src.name, src, PLASMACUTTER_BASE_COST * PLASMACUTTER_VLOW_MOD, no_string = TRUE)) if(istype(src, /obj/structure/mineral_door/resin)) multiplier += PLASMACUTTER_RESIN_MULTIPLIER //Plasma cutters are particularly good at destroying resin structures. else @@ -117,24 +120,28 @@ name = "silver door" material_type = /obj/item/stack/sheet/mineral/silver base_icon_state = "silver" + icon_state = "silver" max_integrity = 500 /obj/structure/mineral_door/gold name = "gold door" material_type = /obj/item/stack/sheet/mineral/gold base_icon_state = "gold" + icon_state = "gold" max_integrity = 250 /obj/structure/mineral_door/uranium name = "uranium door" material_type = /obj/item/stack/sheet/mineral/uranium base_icon_state = "uranium" + icon_state = "uranium" max_integrity = 500 /obj/structure/mineral_door/sandstone name = "sandstone door" material_type = /obj/item/stack/sheet/mineral/sandstone base_icon_state = "sandstone" + icon_state = "sandstone" max_integrity = 100 /obj/structure/mineral_door/transparent @@ -150,6 +157,7 @@ name = "phoron door" material_type = /obj/item/stack/sheet/mineral/phoron base_icon_state = "phoron" + icon_state = "phoron" max_integrity = 250 /obj/structure/mineral_door/transparent/phoron/attackby(obj/item/W as obj, mob/user as mob) @@ -172,6 +180,7 @@ name = "diamond door" material_type = /obj/item/stack/sheet/mineral/diamond base_icon_state = "diamond" + icon_state = "diamond" max_integrity = 1000 @@ -179,6 +188,7 @@ name = "wooden door" material_type = /obj/item/stack/sheet/wood base_icon_state = "wood" + icon_state = "wood" trigger_sound = 'sound/effects/doorcreaky.ogg' max_integrity = 100 diff --git a/code/game/objects/structures/misc.dm b/code/game/objects/structures/misc.dm index 2479de87a51c2..e51e78fd16b4c 100644 --- a/code/game/objects/structures/misc.dm +++ b/code/game/objects/structures/misc.dm @@ -73,6 +73,8 @@ /obj/structure/mopbucket/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tool/mop)) if(reagents.total_volume < 1) @@ -382,7 +384,7 @@ /obj/structure/cryopods name = "hypersleep chamber" icon = 'icons/obj/machines/cryogenics.dmi' - icon_state = "body_scanner_0" + icon_state = "body_scanner" desc = "A large automated capsule with LED displays intended to put anyone inside into 'hypersleep'." density = TRUE anchored = TRUE diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 10bd407fd3dc5..7c52734fc2517 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -23,7 +23,8 @@ QDEL_NULL(connected) return ..() -/obj/structure/morgue/update_icon() +/obj/structure/morgue/update_icon_state() + . = ..() if (morgue_open) icon_state = "[morgue_type]0" else @@ -87,6 +88,8 @@ /obj/structure/morgue/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tool/pen)) var/t = copytext(stripped_input(user, "What would you like the label to be?", name, null), 1, MAX_MESSAGE_LEN) @@ -181,11 +184,9 @@ /obj/structure/morgue/crematorium/update_icon() + . = ..() if(cremating) icon_state = "[morgue_type]_active" - else - ..() - /obj/structure/morgue/crematorium/proc/cremate(mob/user) set waitfor = 0 diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 366fd419017c9..071d535e9bad0 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -19,6 +19,8 @@ //attaching papers!! /obj/structure/noticeboard/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/paper)) if(notices >= 5) diff --git a/code/game/objects/structures/orbital_cannon.dm b/code/game/objects/structures/orbital_cannon.dm index 2cb104172289a..32e9a3f52e819 100644 --- a/code/game/objects/structures/orbital_cannon.dm +++ b/code/game/objects/structures/orbital_cannon.dm @@ -45,6 +45,7 @@ return ..() /obj/structure/orbital_cannon/update_icon_state() + . = ..() if(chambered_tray) icon_state = "OBC_chambered" return @@ -171,6 +172,13 @@ /// Handles the playing of the Orbital Bombardment incoming sound and other visual and auditory effects of the cannon, usually a spiraling whistle noise but can be overridden. /obj/structure/orbital_cannon/proc/handle_ob_firing_effects(target, ob_sound = 'sound/effects/OB_incoming.ogg') flick("OBC_firing",src) + for(var/mob/living/current_mob AS in GLOB.mob_living_list) + if(!current_mob || !is_mainship_level(current_mob.z)) + continue + if(get_dist(src, current_mob) > 20) + current_mob.playsound_local(current_mob, 'sound/effects/obalarm.ogg', 25) + shake_camera(current_mob, 0.7 SECONDS) + to_chat(current_mob, span_warning("The deck of the [SSmapping.configs[SHIP_MAP].map_name] shudders as her orbital cannon opens fire.")) playsound(loc, 'sound/effects/obfire.ogg', 100, FALSE, 20, 4) for(var/mob/M AS in hearers(WARHEAD_FALLING_SOUND_RANGE, target)) M.playsound_local(target, ob_sound, falloff = 2) @@ -200,11 +208,23 @@ if("plasma") inaccurate_fuel = abs(GLOB.marine_main_ship?.ob_type_fuel_requirements[4] - tray.fuel_amt) - var/turf/target = locate(T.x + inaccurate_fuel * pick(-1,1),T.y + inaccurate_fuel * pick(-1,1),T.z) + // Give marines a warning if misfuelled. + var/fuel_warning = "Warhead fuel level: safe." + if(inaccurate_fuel > 0) + fuel_warning = "Warhead fuel level: incorrect.
Warhead may be inaccurate." - playsound_z_humans(target.z, 'sound/effects/OB_warning_announce.ogg', 100) //for marines on ground + var/turf/target = locate(T.x + inaccurate_fuel * pick(-1,1),T.y + inaccurate_fuel * pick(-1,1),T.z) + GLOB.round_statistics.obs_fired++ + SSblackbox.record_feedback("tally", "round_statistics", 1, "obs_fired") + priority_announce( + message = "Get out of danger close!

Warhead type: [tray.warhead.warhead_kind].
[fuel_warning]
Estimated location of impact: [get_area(T)].", + title = "Orbital bombardment launch command detected!", + type = ANNOUNCEMENT_PRIORITY, + sound = 'sound/effects/OB_warning_announce.ogg', + channel_override = SSsounds.random_available_channel(), // This way, we can't have it be cut off by other sounds. + color_override = "red" + ) playsound(target, 'sound/effects/OB_warning_announce_novoiceover.ogg', 125, FALSE, 30, 10) //VOX-less version for xenomorphs - playsound_z(z, 'sound/effects/OB_warning_announce.ogg', 100) //for the ship var/impact_time = 10 SECONDS + (WARHEAD_FLY_TIME * (GLOB.current_orbit/3)) @@ -327,7 +347,7 @@ . += "Moving this will require some sort of lifter." -/obj/structure/ob_ammo/obj_destruction(damage_amount, damage_type, damage_flag) +/obj/structure/ob_ammo/obj_destruction(damage_amount, damage_type, damage_flag, mob/living/blame_mob) explosion(loc, light_impact_range = 2, flash_range = 3, flame_range = 2) return ..() @@ -363,7 +383,7 @@ /obj/structure/ob_ammo/warhead/incendiary/warhead_impact(turf/target, inaccuracy_amt = 0) . = ..() var/range_num = max(15 - inaccuracy_amt, 12) - flame_radius(range_num, target, burn_intensity = 36, burn_duration = 40, colour = "blue") + flame_radius(range_num, target, burn_intensity = 46, burn_duration = 40, colour = "blue") var/datum/effect_system/smoke_spread/phosphorus/warcrime = new warcrime.set_up(17, target, 20) warcrime.start() @@ -385,7 +405,7 @@ var/total_amt = max(25 - inaccuracy_amt, 20) for(var/i = 1 to total_amt) var/turf/U = pick_n_take(turf_list) - explosion(U, 1, 4, 6, 0, 6, throw_range = 0, adminlog = FALSE) //rocket barrage + explosion(U, 2, 4, 6, 0, 6, throw_range = 0, adminlog = FALSE) //rocket barrage sleep(0.1 SECONDS) */ @@ -399,7 +419,7 @@ /obj/structure/ob_ammo/warhead/plasmaloss/warhead_impact(turf/target, inaccuracy_amt = 0) . = ..() var/datum/effect_system/smoke_spread/plasmaloss/smoke = new - smoke.set_up(25, target, 3 SECONDS)//Vape nation + smoke.set_up(25, target, 30 - (inaccuracy_amt * 2))//Vape nation smoke.start() */ @@ -423,7 +443,7 @@ icon_state = "ob_console" screen_overlay = "ob_console_screen" dir = WEST - flags_atom = ON_BORDER|CONDUCT + atom_flags = ON_BORDER|CONDUCT var/orbital_window_page = 0 /obj/machinery/computer/orbital_cannon_console/Initialize(mapload) diff --git a/code/game/objects/structures/patrol_points.dm b/code/game/objects/structures/patrol_points.dm index 9841d4e610d53..07dc1a7df3d33 100644 --- a/code/game/objects/structures/patrol_points.dm +++ b/code/game/objects/structures/patrol_points.dm @@ -1,6 +1,10 @@ +#define PATROL_POINT_RAPPEL_EFFECT "patrol_point_rappel_effect" +#define RAPPEL_DURATION 0.6 SECONDS +#define RAPPEL_HEIGHT 128 + /obj/structure/patrol_point name = "Patrol start point" - desc = "A one way ticket to the combat zone." + desc = "A one way ticket to the combat zone. Shift click to deploy when inside a mech." icon = 'icons/effects/effects.dmi' icon_state = "patrolpoint" anchored = TRUE @@ -66,8 +70,22 @@ span_notice("You walk through the [src].")) user.trainteleport(linked_point.loc) add_spawn_protection(user) + if(!obj_mover) + new /atom/movable/effect/rappel_rope(linked_point.loc) //mechs don't need a rope + + var/atom/movable/mover = obj_mover ? obj_mover : user + + mover.add_filter(PATROL_POINT_RAPPEL_EFFECT, 2, drop_shadow_filter(y = -RAPPEL_HEIGHT, color = COLOR_TRANSPARENT_SHADOW, size = 4)) + var/shadow_filter = mover.get_filter(PATROL_POINT_RAPPEL_EFFECT) - new /atom/movable/effect/rappel_rope(linked_point.loc) + var/current_layer = mover.layer + mover.pixel_y += RAPPEL_HEIGHT + mover.layer = FLY_LAYER + + animate(mover, pixel_y = mover.pixel_y - RAPPEL_HEIGHT, time = RAPPEL_DURATION) + animate(shadow_filter, y = 0, size = 0.9, time = RAPPEL_DURATION, flags = ANIMATION_PARALLEL) + + addtimer(CALLBACK(src, PROC_REF(end_rappel), user, mover, current_layer), RAPPEL_DURATION) if(!user) return @@ -111,10 +129,21 @@ user.forceMove(linked_point.loc) ///Temporarily applies godmode to prevent spawn camping -/obj/structure/patrol_point/proc/add_spawn_protection(mob/user) +/obj/structure/patrol_point/proc/add_spawn_protection(mob/living/user) + user.ImmobilizeNoChain(RAPPEL_DURATION) //looks weird if they can move while rappeling user.status_flags |= GODMODE addtimer(CALLBACK(src, PROC_REF(remove_spawn_protection), user), 10 SECONDS) +///Ends the rappel effects +/obj/structure/patrol_point/proc/end_rappel(mob/living/user, atom/movable/mover, original_layer) + mover.remove_filter(PATROL_POINT_RAPPEL_EFFECT) + mover.layer = original_layer + SEND_SIGNAL(mover, COMSIG_MOVABLE_PATROL_DEPLOYED, TRUE, 1.5, 2) + if(ismecha(mover)) + new /obj/effect/temp_visual/rappel_dust(linked_point.loc, 3) + playsound(linked_point.loc, 'sound/effects/behemoth/behemoth_stomp.ogg', 40, TRUE) + shake_camera(user, 0.2 SECONDS, 0.5) + ///Removes spawn protection godmode /obj/structure/patrol_point/proc/remove_spawn_protection(mob/user) user.status_flags &= ~GODMODE diff --git a/code/game/objects/structures/platforms.dm b/code/game/objects/structures/platforms.dm index 670b23a7d8a36..4cd05b6e94c2c 100644 --- a/code/game/objects/structures/platforms.dm +++ b/code/game/objects/structures/platforms.dm @@ -6,7 +6,7 @@ coverage = 10 density = TRUE layer = BELOW_OBJ_LAYER - flags_atom = ON_BORDER + atom_flags = ON_BORDER resistance_flags = RESIST_ALL interaction_flags = INTERACT_CHECK_INCAPACITATED allow_pass_flags = PASS_LOW_STRUCTURE|PASSABLE|PASS_WALKOVER @@ -75,6 +75,11 @@ new_overlay.pixel_x = -32 . += new_overlay +/obj/structure/platform/nondense + density = FALSE + climbable = FALSE + coverage = 0 + /obj/structure/platform/rockcliff icon_state = "rockcliff" name = "rock cliff" @@ -83,6 +88,11 @@ /obj/structure/platform/rockcliff/icycliff icon_state = "icerock" +/obj/structure/platform/rockcliff/icycliff/nondense + density = FALSE + climbable = FALSE + coverage = 0 + /obj/structure/platform/metalplatform icon_state = "metalplatform" @@ -102,7 +112,7 @@ desc = "A square metal surface resting on four legs." icon = 'icons/obj/structures/platforms.dmi' icon_state = "platform_deco" - flags_atom = ON_BORDER + atom_flags = ON_BORDER resistance_flags = RESIST_ALL mouse_opacity = MOUSE_OPACITY_TRANSPARENT diff --git a/code/game/objects/structures/prop.dm b/code/game/objects/structures/prop.dm index ec19cdda3760c..c9ab75560fc11 100644 --- a/code/game/objects/structures/prop.dm +++ b/code/game/objects/structures/prop.dm @@ -75,6 +75,7 @@ set_light(initial(light_range)) /obj/machinery/prop/computer/update_icon_state() + . = ..() if(machine_stat & (BROKEN|DISABLED)) icon_state = "[initial(icon_state)]_broken" else @@ -331,8 +332,7 @@ fallen_list += D.fallen_names qdel(D) return TRUE - else - . = ..() + return ..() /obj/structure/prop/mainship/ship_memorial/examine(mob/user) . = ..() @@ -1094,7 +1094,7 @@ ///BROKEN VEHICLE PROPS /obj/structure/prop/vehicle - layer = TANK_BARREL_LAYER + layer = ABOVE_MOB_PROP_LAYER /obj/structure/prop/vehicle/van name = "van" desc = "An old van, seems to be broken down." @@ -1242,7 +1242,7 @@ /obj/structure/prop/vehicle/tank/east/barrel icon_state = "ltb_cannon_0" - layer = TANK_BARREL_LAYER + layer = ABOVE_MOB_PROP_LAYER mouse_opacity = MOUSE_OPACITY_TRANSPARENT /obj/structure/prop/vehicle/tank/east/barrel/broken @@ -1326,10 +1326,10 @@ icon_state = "glauncher_0" /obj/structure/prop/vehicle/tank/east/decoration/cupolaone - icon_state = "m56cupola_1" + icon_state = "hsg102cupola_1" /obj/structure/prop/vehicle/tank/east/decoration/cupolazero - icon_state = "m56cupola_0" + icon_state = "hsg102cupola_0" /obj/structure/prop/vehicle/tank/east/decoration/towlauncherone icon_state = "towlauncher_1" @@ -1453,10 +1453,10 @@ icon_state = "glauncher_0" /obj/structure/prop/vehicle/tank/north/decoration/cupolaone - icon_state = "m56cupola_1" + icon_state = "hsg102cupola_1" /obj/structure/prop/vehicle/tank/north/decoration/cupolazero - icon_state = "m56cupola_0" + icon_state = "hsg102cupola_0" /obj/structure/prop/vehicle/tank/north/decoration/towlauncherone icon_state = "towlauncher_1" diff --git a/code/game/objects/structures/razorwire.dm b/code/game/objects/structures/razorwire.dm index 3a409db9717f1..a837bbc24e3cc 100644 --- a/code/game/objects/structures/razorwire.dm +++ b/code/game/objects/structures/razorwire.dm @@ -125,6 +125,8 @@ /obj/structure/razorwire/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/stack/sheet/metal)) var/obj/item/stack/sheet/metal/metal_sheets = I @@ -142,33 +144,28 @@ update_icon() return - if(!istype(I, /obj/item/grab)) - return - if(isxeno(user))//I am very tempted to remove this >:) +/obj/structure/razorwire/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + if(!isliving(grab.grabbed_thing)) return - - var/obj/item/grab/G = I - if(!isliving(G.grabbed_thing)) + if(user.grab_state < GRAB_AGGRESSIVE) + to_chat(user, span_warning("You need a better grip to do that!")) return - var/mob/living/M = G.grabbed_thing - if(user.a_intent == INTENT_HARM) - if(user.grab_state <= GRAB_AGGRESSIVE) - to_chat(user, span_warning("You need a better grip to do that!")) - return - + var/mob/living/grabbed_mob = grab.grabbed_thing + if(user.a_intent == INTENT_HARM && user.grab_state > GRAB_AGGRESSIVE) var/def_zone = ran_zone() - M.apply_damage(RAZORWIRE_BASE_DAMAGE, BRUTE, def_zone, MELEE, TRUE, updating_health = TRUE) - user.visible_message(span_danger("[user] spartas [M]'s into [src]!"), - span_danger("You sparta [M]'s against [src]!")) - log_combat(user, M, "spartaed", "", "against \the [src]") + grabbed_mob.apply_damage(RAZORWIRE_BASE_DAMAGE, BRUTE, def_zone, MELEE, TRUE, updating_health = TRUE) + user.visible_message(span_danger("[user] spartas [grabbed_mob]'s into [src]!"), + span_danger("You sparta [grabbed_mob]'s against [src]!")) + log_combat(user, grabbed_mob, "spartaed", "", "against \the [src]") playsound(src, 'sound/effects/barbed_wire_movement.ogg', 25, 1) + return TRUE - else if(user.grab_state >= GRAB_AGGRESSIVE) - M.forceMove(loc) - M.Paralyze(10 SECONDS) - user.visible_message(span_danger("[user] throws [M] on [src]."), - span_danger("You throw [M] on [src].")) + grabbed_mob.forceMove(loc) + grabbed_mob.Paralyze(2 SECONDS) + user.visible_message(span_danger("[user] throws [grabbed_mob] on [src]."), + span_danger("You throw [grabbed_mob] on [src].")) + return TRUE /obj/structure/razorwire/wirecutter_act(mob/living/user, obj/item/I) user.visible_message(span_notice("[user] starts disassembling [src]."), @@ -184,11 +181,11 @@ deconstruct(TRUE) return TRUE -/obj/structure/razorwire/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/structure/razorwire/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return FALSE - X.apply_damage(RAZORWIRE_BASE_DAMAGE, blocked = MELEE, updating_health = TRUE) //About a third as damaging as actually entering + xeno_attacker.apply_damage(RAZORWIRE_BASE_DAMAGE, blocked = MELEE, updating_health = TRUE) //About a third as damaging as actually entering update_icon() return ..() @@ -214,6 +211,7 @@ return ..() /obj/structure/razorwire/update_icon_state() + . = ..() var/health_percent = round(obj_integrity/max_integrity * 100) var/remaining = CEILING(health_percent, 25) icon_state = "[base_icon_state]_[remaining]" diff --git a/code/game/objects/structures/reagent_dispensers.dm b/code/game/objects/structures/reagent_dispensers.dm index 698bd0300e3b9..426cd7101abc9 100644 --- a/code/game/objects/structures/reagent_dispensers.dm +++ b/code/game/objects/structures/reagent_dispensers.dm @@ -143,6 +143,8 @@ /obj/structure/reagent_dispensers/fueltank/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!istype(I, /obj/item/assembly_holder)) return @@ -238,13 +240,13 @@ exploding = TRUE if(reagents.total_volume > 500) - flame_radius(5, loc, 46, 40, 31, 30, colour = "blue") + flame_radius(5, loc, 40, 46, 31, 30, colour = "blue") explosion(loc, light_impact_range = 5) else if(reagents.total_volume > 100) - flame_radius(4, loc, 46, 40, 31, 30, colour = "blue") + flame_radius(4, loc, 40, 46, 31, 30, colour = "blue") explosion(loc, light_impact_range = 4) else - flame_radius(3, loc, 46, 40, 31, 30, colour = "blue") + flame_radius(3, loc, 40, 46, 31, 30, colour = "blue") explosion(loc, light_impact_range = 3) qdel(src) diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index dc1a780521454..4069b3d0d1d80 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -96,6 +96,7 @@ FLOOR SAFES /obj/structure/safe/update_icon_state() + . = ..() if(open) icon_state = "[initial(icon_state)]-open" else @@ -177,6 +178,8 @@ FLOOR SAFES /obj/structure/safe/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!open) return diff --git a/code/game/objects/structures/sensor_tower.dm b/code/game/objects/structures/sensor_tower.dm index 351b017ff7723..84a233b893faf 100644 --- a/code/game/objects/structures/sensor_tower.dm +++ b/code/game/objects/structures/sensor_tower.dm @@ -36,6 +36,7 @@ update_icon() /obj/structure/sensor_tower/update_icon_state() + . = ..() icon_state = initial(icon_state) if(current_timer || activated) icon_state += "_tgmc" diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index b35fc93b94ac3..781e628df9776 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -28,6 +28,8 @@ /obj/structure/sign/attackby(obj/item/I, mob/user, params) //deconstruction . = ..() + if(.) + return if(isscrewdriver(I) && !istype(src, /obj/structure/sign/double)) to_chat(user, "You unfasten the sign with your [I].") @@ -47,6 +49,8 @@ /obj/item/sign/attackby(obj/item/I, mob/user, params) //construction . = ..() + if(.) + return if(isscrewdriver(I) && isturf(user.loc)) var/direction = tgui_input_list(user, "In which direction?", "Select direction.", list("North", "East", "South", "West")) diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 8e3809224d3df..f3f1a2eb1c2aa 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -38,6 +38,7 @@ icon_state = "bunkbed" /obj/structure/bed/update_icon_state() + . = ..() if(!base_bed_icon) return if(LAZYLEN(buckled_mobs) || buckled_bodybag) @@ -172,6 +173,8 @@ /obj/structure/bed/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(iswrench(I)) if(!buildstacktype) @@ -182,15 +185,18 @@ new buildstacktype(loc, buildstackamount) qdel(src) - else if(istype(I, /obj/item/grab) && !LAZYLEN(buckled_mobs) && !buckled_bodybag) - var/obj/item/grab/G = I - if(!ismob(G.grabbed_thing)) - return - - var/mob/M = G.grabbed_thing - to_chat(user, span_notice("You place [M] on [src].")) - M.forceMove(loc) - return TRUE +/obj/structure/bed/grab_interact(obj/item/grab/grab, mob/user, base_damage = 5, is_sharp = FALSE) + . = ..() + if(.) + return + if(LAZYLEN(buckled_mobs) || buckled_bodybag) + return + if(!ismob(grab.grabbed_thing)) + return + var/mob/grabbed_mob = grab.grabbed_thing + to_chat(user, span_notice("You place [grabbed_mob] on [src].")) + grabbed_mob.forceMove(loc) + return TRUE /obj/structure/bed/alien icon_state = "abed" @@ -240,6 +246,8 @@ /obj/item/roller/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/roller_holder) && rollertype == /obj/structure/bed/roller) var/obj/item/roller_holder/RH = I @@ -295,7 +303,7 @@ GLOBAL_LIST_EMPTY(activated_medevac_stretchers) /obj/structure/bed/medevac_stretcher name = "medevac stretcher" - desc = "A medevac stretcher with integrated beacon for rapid evacuation of an injured patient via dropship lift and an emergency bluespace teleporter for tele-evacuation to a linked beacon. Accepts patients and body bags." + desc = "A medevac stretcher with integrated beacon for rapid evacuation of an injured patient via dropship lift and an emergency bluespace teleporter for tele-evacuation to a linked beacon. Accepts patients and body bags. Right click to activate." icon = 'icons/obj/rollerbed.dmi' icon_state = "stretcher_down" buckling_y = 6 @@ -316,13 +324,13 @@ GLOBAL_LIST_EMPTY(activated_medevac_stretchers) . = ..() radio = new(src) -/obj/structure/bed/medevac_stretcher/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/structure/bed/medevac_stretcher/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return FALSE if(buckled_bodybag) unbuckle_bodybag() for(var/m in buckled_mobs) - user_unbuckle_mob(m, X, TRUE) + user_unbuckle_mob(m, xeno_attacker, TRUE) /obj/structure/bed/medevac_stretcher/attack_ghost(mob/dead/observer/user) . = ..() @@ -336,24 +344,14 @@ GLOBAL_LIST_EMPTY(activated_medevac_stretchers) linked_beacon.remove_stretcher(src) return ..() -/obj/structure/bed/medevac_stretcher/update_icon() - ..() - overlays.Cut() +/obj/structure/bed/medevac_stretcher/update_overlays() + . = ..() + if(stretcher_activated) - overlays += image("beacon_active_[density ? "up":"down"]") + . += image("beacon_active_[density ? "up":"down"]") if(LAZYLEN(buckled_mobs) || buckled_bodybag) - overlays += image("icon_state"="stretcher_box","layer"=LYING_MOB_LAYER + 0.1) - - -/obj/structure/bed/medevac_stretcher/verb/activate_medevac_displacer() - set name = "Activate Medevac Displacement Field" - set desc = "Teleport the occupant of the stretcher to a linked beacon." - set category = "Object" - set src in oview(1) - - activate_medevac_teleport(usr) - + . += image("icon_state"="stretcher_box","layer"=LYING_MOB_LAYER + 0.1) /obj/structure/bed/medevac_stretcher/attack_hand_alternate(mob/living/user) activate_medevac_teleport(user) @@ -508,7 +506,7 @@ GLOBAL_LIST_EMPTY(activated_medevac_stretchers) /obj/item/roller/medevac name = "medevac stretcher" - desc = "A collapsed medevac stretcher that can be carried around." + desc = "A collapsed medevac stretcher that can be carried around. Can be used to instantly transport a marine to a linked beacon. Don't forget the beacon!" icon_state = "stretcher_folded" var/last_teleport = null var/obj/item/medevac_beacon/linked_beacon = null @@ -575,6 +573,8 @@ GLOBAL_LIST_EMPTY(activated_medevac_stretchers) /obj/item/roller/medevac/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/medevac_beacon)) var/obj/item/medevac_beacon/B = I @@ -691,6 +691,8 @@ GLOBAL_LIST_EMPTY(activated_medevac_stretchers) /obj/item/medevac_beacon/attackby(obj/item/I, mob/user, params) //Corpsmen can lock their beacons. . = ..() + if(.) + return if(istype(I, /obj/item/card/id)) if(!allowed(user)) 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 271c32652297f..d93d55b0ed9f9 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -1,6 +1,16 @@ -#define DROPSHIP_CHAIR_UNFOLDED 1 -#define DROPSHIP_CHAIR_FOLDED 2 -#define DROPSHIP_CHAIR_BROKEN 3 +#define DROPSHIP_CHAIR_UNBUCKLED "" +#define DROPSHIP_CHAIR_FOLDED 0 +#define DROPSHIP_CHAIR_BUCKLED "_buckled" +#define DROPSHIP_CHAIR_BROKEN "_broken" + +#define LEADER_CHAIR 0 + +#define NO_CHAIR_COLOR "" +#define ALPHA_CHAIR "_alpha" +#define BRAVO_CHAIR "_bravo" +#define CHARLIE_CHAIR "_charlie" +#define DELTA_CHAIR "_delta" +#define FC_CHAIR "_fc" /obj/structure/bed/chair //YES, chairs are a type of bed, which are a type of stool. This works, believe me. -Pete name = "chair" @@ -82,6 +92,8 @@ /obj/structure/bed/chair/reinforced/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(iswrench(I)) to_chat(user, span_warning("You can only deconstruct this by welding it down!")) @@ -95,7 +107,7 @@ user.visible_message(span_notice("[user] fumbles around figuring out how to weld down \the [src]."), span_notice("You fumble around figuring out how to weld down \the [src].")) var/fumbling_time = 5 SECONDS * (SKILL_ENGINEER_METAL - user.skills.getRating(SKILL_ENGINEER)) - if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED, extra_checks = CALLBACK(WT, /obj/item/tool/weldingtool/proc/isOn))) + if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED, extra_checks = CALLBACK(WT, TYPE_PROC_REF(/obj/item/tool/weldingtool, isOn)))) return if(!WT.remove_fuel(0, user)) @@ -260,9 +272,34 @@ icon_state = "officechair_dark" anchored = FALSE +/obj/structure/bed/chair/dropship + name = "dropship chair" + desc = "Holds you in place during high altitude drops." + icon_state = "shuttle_chair" + /// Handles the chair buckle bars overlay + var/image/chairbar = null + buildstacktype = 0 + /// Handles the current state of the chair (buckled, unbuckled, folded, broke) + var/chair_state = DROPSHIP_CHAIR_UNBUCKLED + +/obj/structure/bed/chair/dropship/update_overlays() + . = ..() + if(chair_state == DROPSHIP_CHAIR_BUCKLED) + . += image('icons/obj/objects.dmi', icon_state = "shuttle_bars", layer = ABOVE_MOB_LAYER) + return + +/obj/structure/bed/chair/dropship/doublewide/post_buckle_mob(mob/buckling_mob) + chair_state = DROPSHIP_CHAIR_BUCKLED + update_icon() + return ..() + +/obj/structure/bed/chair/dropship/doublewide/post_unbuckle_mob(mob/buckled_mob) + chair_state = DROPSHIP_CHAIR_UNBUCKLED + update_icon() + return ..() + /obj/structure/bed/chair/dropship/pilot icon_state = "pilot_chair" - anchored = TRUE name = "pilot's chair" desc = "A specially designed chair for pilots to sit in." @@ -271,47 +308,24 @@ /obj/structure/bed/chair/dropship/passenger name = "passenger seat" - desc = "Holds you in place during high altitude drops." - icon_state = "shuttle_chair" - var/image/chairbar = null - var/chair_state = DROPSHIP_CHAIR_UNFOLDED - buildstacktype = 0 resistance_flags = RESIST_ALL var/is_animating = 0 /obj/structure/bed/chair/dropship/passenger/CanAllowThrough(atom/movable/mover, turf/target, height = 0, air_group = 0) - if(chair_state == DROPSHIP_CHAIR_UNFOLDED && istype(mover, /obj/vehicle/multitile) && !is_animating) + if(chair_state == DROPSHIP_CHAIR_UNBUCKLED && istype(mover, /obj/vehicle/sealed) && !is_animating) visible_message(span_danger("[mover] slams into [src] and breaks it!")) INVOKE_ASYNC(src, PROC_REF(fold_down), TRUE) return FALSE return ..() -/obj/structure/bed/chair/dropship/passenger/Initialize(mapload) - . = ..() - chairbar = image("icons/obj/objects.dmi", "shuttle_bars") - chairbar.layer = ABOVE_MOB_LAYER - - -/obj/structure/bed/chair/dropship/passenger/post_buckle_mob(mob/buckling_mob) - icon_state = "shuttle_chair_buckled" - overlays += chairbar - return ..() - - -/obj/structure/bed/chair/dropship/passenger/post_unbuckle_mob(mob/buckled_mob) - icon_state = "shuttle_chair" - overlays -= chairbar - return ..() - - /obj/structure/bed/chair/dropship/passenger/buckle_mob(mob/living/buckling_mob, force = FALSE, check_loc = TRUE, lying_buckle = FALSE, hands_needed = 0, target_hands_needed = 0, silent) - if(chair_state != DROPSHIP_CHAIR_UNFOLDED) + if(chair_state != DROPSHIP_CHAIR_UNBUCKLED) return FALSE return ..() /obj/structure/bed/chair/dropship/passenger/proc/fold_down(break_it = FALSE) - if(chair_state == DROPSHIP_CHAIR_UNFOLDED) + if(chair_state == DROPSHIP_CHAIR_UNBUCKLED) is_animating = 1 flick("shuttle_chair_new_folding", src) is_animating = 0 @@ -330,7 +344,7 @@ is_animating = 1 flick("shuttle_chair_new_unfolding", src) is_animating = 0 - chair_state = DROPSHIP_CHAIR_UNFOLDED + chair_state = DROPSHIP_CHAIR_UNBUCKLED sleep(0.5 SECONDS) icon_state = "shuttle_chair" @@ -338,20 +352,22 @@ return // no -/obj/structure/bed/chair/dropship/passenger/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/structure/bed/chair/dropship/passenger/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return FALSE if(chair_state != DROPSHIP_CHAIR_BROKEN) - X.visible_message(span_warning("[X] smashes \the [src], shearing the bolts!"), + xeno_attacker.visible_message(span_warning("[xeno_attacker] smashes \the [src], shearing the bolts!"), span_warning("We smash \the [src], shearing the bolts!")) fold_down(1) /obj/structure/bed/chair/dropship/passenger/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(iswrench(I)) switch(chair_state) - if(DROPSHIP_CHAIR_UNFOLDED) + if(DROPSHIP_CHAIR_UNBUCKLED) user.visible_message(span_warning("[user] begins loosening the bolts on \the [src]."), span_warning("You begin loosening the bolts on \the [src].")) playsound(loc, 'sound/items/ratchet.ogg', 25, 1) @@ -396,6 +412,138 @@ span_warning("You repair \the [src].")) chair_state = DROPSHIP_CHAIR_FOLDED +/obj/structure/bed/chair/dropship/doublewide + name = "doublewide seat" + icon_state = "doublewide_chair" //only facing south cause the rest are ugly + max_integrity = 130 + /// Handles the color of the chair + var/chair_color = NO_CHAIR_COLOR + /// If the chair can only be sat in by a leader or not + var/leader_chair = FALSE + /// pixel x shift to give to the buckled mob + var/buckling_x = 0 + +/obj/structure/bed/chair/dropship/doublewide/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) + if(X.status_flags & INCORPOREAL) + return FALSE + if(LAZYLEN(buckled_mobs)) + unbuckle_all_mobs(TRUE) + return ..() + +/obj/structure/bed/chair/dropship/doublewide/welder_act(mob/living/user, obj/item/I) + if(LAZYLEN(buckled_mobs)) + balloon_alert_to_viewers("You cannot repair this chair while someone is sitting in it") + return + welder_repair_act(user, I, 130, 1 SECONDS, 0, SKILL_ENGINEER_METAL, 1) + chair_state = DROPSHIP_CHAIR_UNBUCKLED + update_icon() + return + +/obj/structure/bed/chair/dropship/doublewide/update_icon_state() + . = ..() + var/percentage = (obj_integrity / max_integrity) * 100 + switch(percentage) + if(-INFINITY to 65) + chair_state = DROPSHIP_CHAIR_BROKEN + icon_state = "doublewide_chair[chair_color][chair_state]" + +/obj/structure/bed/chair/dropship/doublewide/attackby(obj/item/I, mob/user, params) + . = ..() + if(LAZYLEN(buckled_mobs) && chair_state == DROPSHIP_CHAIR_BROKEN) + unbuckle_mob(buckled_mobs[1]) + balloon_alert_to_viewers("This chair is too damaged to stay sitting in") + +/obj/structure/bed/chair/dropship/doublewide/buckle_mob(mob/living/buckling_mob, force = FALSE, check_loc = TRUE, lying_buckle = FALSE, hands_needed = 0, target_hands_needed = 0, silent) + if(chair_state == DROPSHIP_CHAIR_BROKEN) + balloon_alert_to_viewers("This chair is too damaged to sit in") + return FALSE + if(leader_chair && buckling_mob.skills.getRating(SKILL_LEADERSHIP) < SKILL_LEAD_TRAINED) + balloon_alert(buckling_mob, "You don't feel worthy enough to sit in this chair") + return FALSE + if(buckling_x) + src.pixel_x = buckling_x + return ..() + +/obj/structure/bed/chair/dropship/doublewide/post_buckle_mob(mob/buckling_mob) + buckling_mob.pixel_x = buckling_x + buckling_mob.old_x = buckling_x + doublewide_mob_density(buckling_mob, TRUE) + return ..() + +/obj/structure/bed/chair/dropship/doublewide/post_unbuckle_mob(mob/buckled_mob) + buckled_mob.pixel_x = initial(buckled_mob.pixel_x) + buckled_mob.old_x = initial(buckled_mob.pixel_x) + doublewide_mob_density(buckled_mob, FALSE) + return ..() + +/// Handles checking the changing density for the person buckling or unbuckling and the person next to the buckling/unbuckling person +/obj/structure/bed/chair/dropship/doublewide/proc/doublewide_mob_density(mob/interactionmob, buckling) + var/obj/structure/bed/chair/dropship/doublewide/other_doublewide = locate(/obj/structure/bed/chair/dropship/doublewide) in interactionmob.loc + var/mob/living/other_chair_buckled_mob + if(other_doublewide) //if there is another doublewide + if(LAZYLEN(other_doublewide.buckled_mobs) && (other_doublewide.buckled_mobs[1] != interactionmob)) + other_chair_buckled_mob = other_doublewide.buckled_mobs[1] + if(buckling) + other_chair_buckled_mob.density = TRUE + interactionmob.density = TRUE + return + //if theyre unbuckling with and there is another buckled mob + other_chair_buckled_mob.density = FALSE + interactionmob.density = TRUE + return + if(buckling) //if theyre buckling with no other chairs + interactionmob.density = FALSE + return + //if there is no other doublewide or theyre unbuckling + interactionmob.density = TRUE + +/obj/structure/bed/chair/dropship/doublewide/left + pixel_x = -8 + buckling_x = -8 + +/obj/structure/bed/chair/dropship/doublewide/right + pixel_x = 9 + buckling_x = 9 + +/obj/structure/bed/chair/dropship/doublewide/left/alpha + name = "Alpha Squad Leader's Chair" + desc = "A chair specially reserved for the Alpha Squad Leader." + icon_state = "doublewide_chair_alpha" + chair_color = ALPHA_CHAIR + leader_chair = TRUE + max_integrity = 200 + +/obj/structure/bed/chair/dropship/doublewide/right/bravo + name = "Bravo Squad Leader's Chair" + desc = "A chair specially reserved for the Bravo Squad Leader." + icon_state = "doublewide_chair_bravo" + chair_color = BRAVO_CHAIR + leader_chair = TRUE + max_integrity = 200 + +/obj/structure/bed/chair/dropship/doublewide/left/charlie + name = "Charlie Squad Leader's Chair" + desc = "A chair specially reserved for the Charlie Squad Leader." + icon_state = "doublewide_chair_charlie" + chair_color = CHARLIE_CHAIR + leader_chair = TRUE + max_integrity = 200 + +/obj/structure/bed/chair/dropship/doublewide/right/delta + name = "Delta Squad Leader's Chair" + desc = "A chair specially reserved for the Delta Squad Leader." + icon_state = "doublewide_chair_delta" + chair_color = DELTA_CHAIR + leader_chair = TRUE + max_integrity = 200 + +/obj/structure/bed/chair/dropship/doublewide/fieldcommander + name = "Field Commander's Chair" + desc = "A chair specially reserved for the Field Commander." + icon_state = "doublewide_chair_fc" + chair_color = FC_CHAIR + leader_chair = TRUE + max_integrity = 200 /obj/structure/bed/chair/ob_chair name = "seat" diff --git a/code/game/objects/structures/stool_bed_chair_nest/janicart.dm b/code/game/objects/structures/stool_bed_chair_nest/janicart.dm index 8e079d4feefba..c0d352904b6a1 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/janicart.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/janicart.dm @@ -30,6 +30,8 @@ /obj/structure/bed/chair/janicart/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tool/mop)) if(reagents.total_volume <= 1) diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm deleted file mode 100644 index a064bbee0065e..0000000000000 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ /dev/null @@ -1,139 +0,0 @@ - -//MAKE ME A OFFICE CHAIR SUBTYPE!! - -/obj/structure/bed/chair/wheelchair - name = "wheelchair" - desc = "You sit in this. Either by will or force." - icon_state = "wheelchair" - anchored = FALSE - buckle_flags = CAN_BUCKLE - drag_delay = 1 //pulling something on wheels is easy - var/bloodiness = 0 - var/move_delay = 6 - - -/obj/structure/bed/chair/wheelchair/relaymove(mob/user, direction) - if(world.time <= last_move_time + move_delay) - return - // Redundant check? - if(user.incapacitated() || user.lying_angle) - return - - if(propelled) //can't manually move it mid-propelling. - return - - if(ishuman(user)) - var/mob/living/carbon/human/driver = user - var/datum/limb/left_hand = driver.get_limb("l_hand") - var/datum/limb/right_hand = driver.get_limb("r_hand") - var/working_hands = 2 - move_delay = initial(move_delay) - if(!left_hand?.is_usable()) - move_delay += 4 //harder to move a wheelchair with a single hand - working_hands-- - else if(left_hand.is_broken()) - move_delay++ - if(!right_hand?.is_usable()) - move_delay += 4 - working_hands-- - else if(right_hand.is_broken()) - move_delay += 2 - if(!working_hands) - return // No hands to drive your chair? Tough luck! - if(driver.pulling?.drag_delay) //Dragging stuff can slow you down a bit. - var/pull_delay = driver.pulling.drag_delay - if(ismob(driver.pulling)) - var/mob/M = driver.pulling - if(M.buckled) //if the pulled mob is buckled to an object, we use that object's drag_delay. - pull_delay = M.buckled.drag_delay - move_delay += max(driver.pull_speed + pull_delay + 3 * driver.grab_state, 0) //harder grab makes you slower - - if(istype(driver.get_active_held_item(), /obj/item/weapon/gun)) //Wheelchair user has a gun out, so obviously can't move - return - - if(driver.next_move_slowdown) - move_delay += driver.next_move_slowdown - driver.next_move_slowdown = 0 - - step(src, direction) - - -/obj/structure/bed/chair/wheelchair/Moved() - . = ..() - if(bloodiness) - create_track() - cut_overlays() - if(LAZYLEN(buckled_mobs)) - handle_rotation_overlayed() - - -/obj/structure/bed/chair/wheelchair/post_buckle_mob(mob/living/user) - . = ..() - handle_rotation_overlayed() - -/obj/structure/bed/chair/wheelchair/post_unbuckle_mob() - . = ..() - cut_overlays() - -/obj/structure/bed/chair/wheelchair/setDir(newdir) - . = ..() - handle_rotation(newdir) - -/obj/structure/bed/chair/wheelchair/handle_rotation(direction) - if(LAZYLEN(buckled_mobs)) - handle_rotation_overlayed() - for(var/m in buckled_mobs) - var/mob/living/buckled_mob = m - buckled_mob.setDir(direction) - -/obj/structure/bed/chair/wheelchair/proc/handle_rotation_overlayed() - cut_overlays() - var/image/V = image(icon = icon, icon_state = "w_overlay", layer = FLY_LAYER, dir = src.dir) - add_overlay(V) - - -/obj/structure/bed/chair/wheelchair/Bump(atom/A) - . = ..() - if(!LAZYLEN(buckled_mobs)) - return - - if(propelled) - var/mob/living/occupant = buckled_mobs[1] - unbuckle_mob(occupant) - - if (propelled) - occupant.throw_at(A, 3, propelled) - - var/def_zone = ran_zone() - var/armor_modifier = occupant.modify_by_armor(1, MELEE, 0, def_zone) - occupant.throw_at(A, 3, propelled) - occupant.apply_effect(6 SECONDS * armor_modifier, STUN) - occupant.apply_effect(6 SECONDS * armor_modifier, WEAKEN) - occupant.apply_effect(6 SECONDS * armor_modifier, STUTTER) - occupant.apply_damage(10 * armor_modifier, BRUTE, def_zone) - UPDATEHEALTH(occupant) - playsound(src.loc, 'sound/weapons/punch1.ogg', 25, 1) - if(isliving(A)) - var/mob/living/victim = A - def_zone = ran_zone() - armor_modifier = victim.modify_by_armor(1, MELEE, 0, def_zone) - victim.apply_effect(6 SECONDS * armor_modifier, STUN) - victim.apply_effect(6 SECONDS * armor_modifier, WEAKEN) - victim.apply_effect(6 SECONDS * armor_modifier, STUTTER) - victim.apply_damage(10 * armor_modifier, BRUTE, def_zone) - UPDATEHEALTH(victim) - occupant.visible_message(span_danger("[occupant] crashed into \the [A]!")) - -/obj/structure/bed/chair/wheelchair/proc/create_track() - var/obj/effect/decal/cleanable/blood/tracks/B = new(loc) - var/newdir = get_dir(get_step(loc, dir), loc) - if(newdir == dir) - B.setDir(newdir) - else - newdir = newdir|dir - if(newdir == 3) - newdir = 1 - else if(newdir == 12) - newdir = 4 - B.setDir(newdir) - bloodiness-- diff --git a/code/game/objects/structures/stool_bed_chair_nest/xeno_nest.dm b/code/game/objects/structures/stool_bed_chair_nest/xeno_nest.dm index 40258c4cfdc14..c257b2bf33b80 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/xeno_nest.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/xeno_nest.dm @@ -19,22 +19,18 @@ var/resisting_time = 0 layer = RESIN_STRUCTURE_LAYER -/obj/structure/bed/nest/attackby(obj/item/I, mob/user, params) - . = ..() - - if(istype(I, /obj/item/grab)) - var/obj/item/grab/G = I - if(!ismob(G.grabbed_thing)) - return - var/mob/M = G.grabbed_thing - to_chat(user, span_notice("You place [M] on [src].")) - M.forceMove(loc) - +/obj/structure/bed/nest/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + if(!ismob(grab.grabbed_thing)) + return + var/mob/grabbed_mob = grab.grabbed_thing + to_chat(user, span_notice("You place [grabbed_mob] on [src].")) + grabbed_mob.forceMove(loc) + return TRUE //RUTGMC EDIT BEGIN - Moved to modular_RUtgmc\code\game\objects\structures\stool_bed_chair_nest\xeno_nest.dm /* -/obj/structure/bed/nest/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.a_intent != INTENT_HARM) - return attack_hand(X) +/obj/structure/bed/nest/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.a_intent != INTENT_HARM) + return attack_hand(xeno_attacker) return ..() */ //RUTGMC EDIT END diff --git a/code/game/objects/structures/supplypod.dm b/code/game/objects/structures/supplypod.dm index c6777312b2d93..50fa0741096f8 100644 --- a/code/game/objects/structures/supplypod.dm +++ b/code/game/objects/structures/supplypod.dm @@ -28,7 +28,7 @@ GLOBAL_LIST_INIT(pod_styles, list(\ closet_flags = CLOSET_ALLOW_OBJS|CLOSET_ALLOW_DENSE_OBJ soft_armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 100, BIO = 0, FIRE = 100, ACID = 80) anchored = TRUE - flags_atom = PREVENT_CONTENTS_EXPLOSION + atom_flags = PREVENT_CONTENTS_EXPLOSION var/adminNamed = FALSE var/bluespace = FALSE var/landingDelay = 30 @@ -75,16 +75,20 @@ GLOBAL_LIST_INIT(pod_styles, list(\ . = ..() setStyle(style, TRUE) +/obj/structure/closet/supplypod/update_icon_state() + . = ..() + icon_state = GLOB.pod_styles[style][POD_ICON_STATE] + +/obj/structure/closet/supplypod/update_overlays() + . = ..() -/obj/structure/closet/supplypod/update_icon() - cut_overlays() if(style == STYLE_SEETHROUGH || style == STYLE_INVISIBLE) return if(opened) - add_overlay("[icon_state]_open") + . += "[icon_state]_open" else - add_overlay("[icon_state]_door") + . += "[icon_state]_door" /obj/structure/closet/supplypod/proc/setStyle(chosenStyle, duringInit = FALSE) @@ -92,7 +96,6 @@ GLOBAL_LIST_INIT(pod_styles, list(\ setStyle(STYLE_CENTCOM) return style = chosenStyle - icon_state = GLOB.pod_styles[chosenStyle][POD_ICON_STATE] if(!adminNamed) name = GLOB.pod_styles[chosenStyle][POD_NAME] desc = GLOB.pod_styles[chosenStyle][POD_DESC] diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index b66ffbd4e6a5a..1350fa41b8fca 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -76,7 +76,8 @@ visible_message(span_danger("[O] plows straight through [src]!")) deconstruct(FALSE) -/obj/structure/table/update_icon() +/obj/structure/table/update_icon_state() + . = ..() if(flipped) var/ttype = 0 var/tabledirs = 0 @@ -132,34 +133,7 @@ /obj/structure/table/attackby(obj/item/I, mob/user, params) . = ..() - - if(istype(I, /obj/item/grab) && get_dist(src, user) <= 1) - if(isxeno(user)) - return - - var/obj/item/grab/G = I - if(!isliving(G.grabbed_thing)) - return - - var/mob/living/M = G.grabbed_thing - if(user.a_intent == INTENT_HARM) - if(user.grab_state <= GRAB_AGGRESSIVE) - to_chat(user, span_warning("You need a better grip to do that!")) - return - - if(prob(15)) - M.Paralyze(10 SECONDS) - M.apply_damage(8, BRUTE, "head", blocked = MELEE, updating_health = TRUE) - user.visible_message(span_danger("[user] slams [M]'s face against [src]!"), - span_danger("You slam [M]'s face against [src]!")) - log_combat(user, M, "slammed", "", "against \the [src]") - playsound(loc, 'sound/weapons/tablehit1.ogg', 25, 1) - - else if(user.grab_state >= GRAB_AGGRESSIVE) - M.forceMove(loc) - M.Paralyze(10 SECONDS) - user.visible_message(span_danger("[user] throws [M] on [src]."), - span_danger("You throw [M] on [src].")) + if(.) return if(user.a_intent != INTENT_HARM) @@ -173,6 +147,24 @@ I.pixel_y = clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) return TRUE +/obj/structure/table/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + . = ..() + if(.) + playsound(loc, 'sound/weapons/tablehit1.ogg', 25, 1) + return + if(user.a_intent == INTENT_HARM) + return + if(user.grab_state < GRAB_AGGRESSIVE) + return + if(!isliving(grab.grabbed_thing)) + return + + var/mob/living/grabbed_mob = grab.grabbed_thing + grabbed_mob.forceMove(loc) + grabbed_mob.Paralyze(2 SECONDS) + user.visible_message(span_danger("[user] throws [grabbed_mob] on [src]."), + span_danger("You throw [grabbed_mob] on [src].")) + return TRUE /obj/structure/table/proc/straight_table_check(direction) var/obj/structure/table/T @@ -231,7 +223,7 @@ if(T.flipped && T.dir == src.dir && !T.unflipping_check(new_dir)) return FALSE for(var/obj/structure/S in loc) - if((S.flags_atom & ON_BORDER) && S.density && S != src) //We would put back on a structure that wouldn't allow it + if((S.atom_flags & ON_BORDER) && S.density && S != src) //We would put back on a structure that wouldn't allow it return FALSE return TRUE @@ -277,7 +269,7 @@ layer = FLY_LAYER flipped = TRUE coverage = 60 - flags_atom |= ON_BORDER + atom_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) @@ -297,7 +289,7 @@ flipped = FALSE coverage = 10 climbable = initial(climbable) - flags_atom &= ~ON_BORDER + atom_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?.flipped && T.dir == src.dir) @@ -464,6 +456,10 @@ table_status = TABLE_STATUS_FIRM return TRUE +/obj/structure/table/reinforced/weak //used for the icon, functionally similar to a table. + name = "rickety reinforced table" + desc = "A square metal surface resting on four legs. It has seen better days to whence it was strong." + max_integrity = 40 /obj/structure/table/reinforced/prison desc = "A square metal surface resting on four legs. This one has side panels, making it useful as a desk, but impossible to flip." @@ -529,6 +525,8 @@ /obj/structure/rack/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(iswrench(I)) deconstruct(TRUE) diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 30052da2a34be..465e452440ef1 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -24,14 +24,18 @@ update_icon() -/obj/structure/dispenser/update_icon() - overlays.Cut() +/obj/structure/dispenser/update_overlays() + . = ..() switch(oxygentanks) - if(1 to 3) overlays += "oxygen-[oxygentanks]" - if(4 to INFINITY) overlays += "oxygen-4" + if(1 to 3) + . += "oxygen-[oxygentanks]" + if(4 to INFINITY) + . += "oxygen-4" switch(phorontanks) - if(1 to 4) overlays += "phoron-[phorontanks]" - if(5 to INFINITY) overlays += "phoron-5" + if(1 to 4) + . += "phoron-[phorontanks]" + if(5 to INFINITY) + . += "phoron-5" /obj/structure/dispenser/interact(mob/user) . = ..() @@ -49,6 +53,8 @@ /obj/structure/dispenser/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tank/oxygen) || istype(I, /obj/item/tank/air) || istype(I, /obj/item/tank/anesthetic)) if(oxygentanks >= 10) diff --git a/code/game/objects/structures/teleporter.dm b/code/game/objects/structures/teleporter.dm index 69dcbb0f2c2f3..efbe3c1964f46 100644 --- a/code/game/objects/structures/teleporter.dm +++ b/code/game/objects/structures/teleporter.dm @@ -141,6 +141,7 @@ update_icon() /obj/machinery/deployable/teleporter/update_icon_state() + . = ..() var/obj/item/teleporter_kit/kit = get_internal_item() if(powered() || kit?.cell?.charge > TELEPORTING_COST) icon_state = default_icon_state + "_on" @@ -154,10 +155,10 @@ icon_state = "teleporter" max_integrity = 200 - flags_item = IS_DEPLOYABLE|DEPLOYED_WRENCH_DISASSEMBLE + item_flags = IS_DEPLOYABLE|DEPLOYED_WRENCH_DISASSEMBLE w_class = WEIGHT_CLASS_BULKY - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK ///The linked teleporter var/obj/item/teleporter_kit/linked_teleporter ///The optional cell to power the teleporter if off the grid diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index e91eb1a09b477..e36351b2bf4a3 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -46,11 +46,14 @@ open = !open update_icon() -/obj/structure/toilet/update_icon() +/obj/structure/toilet/update_icon_state() + . = ..() icon_state = "toilet[open][cistern]" /obj/structure/toilet/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(iscrowbar(I)) to_chat(user, span_notice("You start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"].")) @@ -63,40 +66,6 @@ cistern = !cistern update_icon() - else if(istype(I, /obj/item/grab)) - if(isxeno(user)) - return - var/obj/item/grab/G = I - - if(!iscarbon(G.grabbed_thing)) - return - - var/mob/living/carbon/C = G.grabbed_thing - - if(user.grab_state <= GRAB_PASSIVE) - to_chat(user, span_notice("You need a tighter grip.")) - return - - if(!C.loc == get_turf(src)) - to_chat(user, span_notice("[C] needs to be on the toilet.")) - return - - if(open && !swirlie) - user.visible_message(span_danger("[user] starts to give [C] a swirlie!"), span_notice("You start to give [C] a swirlie!")) - swirlie = C - if(!do_after(user, 3 SECONDS, NONE, src, BUSY_ICON_HOSTILE)) - return - - user.visible_message(span_danger("[user] gives [C] a swirlie!"), span_notice("You give [C] a swirlie!"), "You hear a toilet flushing.") - log_combat(user, C, "given a swirlie") - if(!C.internal) - C.adjustOxyLoss(5) - swirlie = null - else - user.visible_message(span_danger("[user] slams [C] into the [src]!"), span_notice("You slam [C] into the [src]!")) - log_combat(user, C, "slammed", "", "into the \the [src]") - C.apply_damage(8, BRUTE, blocked = MELEE, updating_health = TRUE) - else if(cistern && !issilicon(user)) //STOP PUTTING YOUR MODULES IN THE TOILET. if(I.w_class > 3) to_chat(user, span_notice("\The [I] does not fit.")) @@ -111,10 +80,43 @@ w_items += I.w_class to_chat(user, "You carefully place \the [I] into the cistern.") +/obj/structure/toilet/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + . = ..() + if(.) + return + if(isxeno(user)) + return + if(!iscarbon(grab.grabbed_thing)) + return + if(!open || swirlie) + return + + var/mob/living/carbon/grabbed_mob = grab.grabbed_thing + + if(user.grab_state <= GRAB_PASSIVE) + to_chat(user, span_notice("You need a tighter grip.")) + return + + if(!grabbed_mob.loc == get_turf(src)) + to_chat(user, span_notice("[grabbed_mob] needs to be on the toilet.")) + return + + user.visible_message(span_danger("[user] starts to give [grabbed_mob] a swirlie!"), span_notice("You start to give [grabbed_mob] a swirlie!")) + swirlie = grabbed_mob + if(!do_after(user, 3 SECONDS, NONE, src, BUSY_ICON_HOSTILE)) + return + + user.visible_message(span_danger("[user] gives [grabbed_mob] a swirlie!"), span_notice("You give [grabbed_mob] a swirlie!"), "You hear a toilet flushing.") + log_combat(user, grabbed_mob, "given a swirlie") + if(!grabbed_mob.internal) + grabbed_mob.adjustOxyLoss(5) + swirlie = null + /obj/structure/toilet/alternate icon_state = "toilet200" -/obj/structure/toilet/alternate/update_icon() +/obj/structure/toilet/alternate/update_icon_state() + . = ..() icon_state = "toilet2[open][cistern]" /obj/structure/urinal @@ -125,30 +127,6 @@ density = FALSE anchored = TRUE -/obj/structure/urinal/attackby(obj/item/I, mob/user, params) - . = ..() - - if(istype(I, /obj/item/grab)) - if(isxeno(user)) - return - var/obj/item/grab/G = I - if(!isliving(G.grabbed_thing)) - return - - var/mob/living/GM = G.grabbed_thing - if(user.grab_state <= GRAB_PASSIVE) - to_chat(user, span_notice("You need a tighter grip.")) - return - - if(!GM.loc == get_turf(src)) - to_chat(user, span_notice("[GM] needs to be on the urinal.")) - return - - user.visible_message(span_danger("[user] slams [GM] into the [src]!"), span_notice("You slam [GM] into the [src]!")) - GM.apply_damage(8, blocked = MELEE) - UPDATEHEALTH(GM) - - /obj/machinery/shower name = "shower" desc = "The HS-451. Installed in the 2050s by the Nanotrasen Hygiene Division." @@ -189,7 +167,7 @@ if(.) return on = !on - update_icon() + update_mist() if(on) start_processing() if (user.loc == loc) @@ -202,6 +180,8 @@ /obj/machinery/shower/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(I.type == /obj/item/tool/analyzer) to_chat(user, span_notice("The water temperature seems to be [watertemp].")) @@ -221,8 +201,9 @@ watertemp = "normal" user.visible_message(span_notice("[user] adjusts the shower with \the [I]."), span_notice("You adjust the shower with \the [I].")) -/obj/machinery/shower/update_icon() //this is terribly unreadable, but basically it makes the shower mist up - overlays.Cut() //once it's been on for a while, in addition to handling the water overlay. +/obj/machinery/shower/proc/update_mist() +//this is terribly unreadable, but basically it makes the shower mist up once it's been on for a while + update_icon() if(mymist) qdel(mymist) mymist = null @@ -248,6 +229,11 @@ mymist = null ismist = FALSE +/obj/machinery/shower/update_overlays() + . = ..() + if(on) + . += image('icons/obj/watercloset.dmi', src, "water", MOB_LAYER + 1, dir) + /obj/machinery/shower/proc/on_cross(datum/source, atom/movable/O, oldloc, oldlocs) SIGNAL_HANDLER wash(O) @@ -365,6 +351,8 @@ /obj/structure/sink/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(busy) to_chat(user, span_warning("Someone's already washing here.")) @@ -395,7 +383,7 @@ L.Paralyze(20 SECONDS) L.visible_message(span_danger("[L] was stunned by [L.p_their()] wet [I]!")) - if(I.flags_item & ITEM_ABSTRACT) + if(I.item_flags & ITEM_ABSTRACT) return var/turf/location = user.loc diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 0e04738990e01..52364d9f9c166 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -18,7 +18,7 @@ density = FALSE dir = NORTH allow_pass_flags = PASS_GLASS|PASS_AIR - flags_atom = ON_BORDER + atom_flags = ON_BORDER var/obj/item/circuitboard/airlock/electronics = null @@ -47,10 +47,13 @@ update_icon() /obj/structure/windoor_assembly/update_icon_state() + . = ..() icon_state = "[facing]_[secure]windoor_assembly[state]" /obj/structure/windoor_assembly/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return switch(state) if("01") diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index d3b40eba36ca9..56c2ed4a5bccc 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -7,12 +7,14 @@ density = TRUE anchored = TRUE layer = WINDOW_LAYER - flags_atom = ON_BORDER|DIRLOCK + atom_flags = ON_BORDER|DIRLOCK allow_pass_flags = PASS_GLASS resistance_flags = XENO_DAMAGEABLE | DROPSHIP_IMMUNE coverage = 20 var/dismantle = FALSE //If we're dismantling the window properly no smashy smashy max_integrity = 15 + ///Optimization for dynamic explosion block values, for things whose explosion block is dependent on certain conditions. + var/real_explosion_block = 0 var/state = 2 var/reinf = FALSE var/basestate = "window" @@ -29,7 +31,7 @@ //I hate this as much as you do /obj/structure/window/full dir = 10 - flags_atom = DIRLOCK + atom_flags = DIRLOCK /obj/structure/window/Initialize(mapload, start_dir, constructed) ..() @@ -93,7 +95,7 @@ //Once a full window, it will always be a full window, so there's no point //having the same type for both. /obj/structure/window/proc/is_full_window() - if(!(flags_atom & ON_BORDER) || ISDIAGONALDIR(dir)) + if(!(atom_flags & ON_BORDER) || ISDIAGONALDIR(dir)) return TRUE return FALSE @@ -125,43 +127,41 @@ span_notice("You hear a knocking sound.")) windowknock_cooldown = world.time + 100 +/obj/structure/window/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + if(!isliving(grab.grabbed_thing)) + return + + var/mob/living/grabbed_mob = grab.grabbed_thing + var/state = user.grab_state + user.drop_held_item() + step_towards(grabbed_mob, src) + var/damage = (user.skills.getRating(SKILL_CQC) * CQC_SKILL_DAMAGE_MOD) + switch(state) + if(GRAB_PASSIVE) + damage += base_damage + grabbed_mob.visible_message(span_warning("[user] slams [grabbed_mob] against \the [src]!")) + log_combat(user, grabbed_mob, "slammed", "", "against \the [src]") + if(GRAB_AGGRESSIVE) + damage += base_damage * 1.5 + grabbed_mob.visible_message(span_danger("[user] bashes [grabbed_mob] against \the [src]!")) + log_combat(user, grabbed_mob, "bashed", "", "against \the [src]") + if(prob(50)) + grabbed_mob.Paralyze(2 SECONDS) + if(GRAB_NECK) + damage += base_damage * 2 + grabbed_mob.visible_message(span_danger("[user] crushes [grabbed_mob] against \the [src]!")) + log_combat(user, grabbed_mob, "crushed", "", "against \the [src]") + grabbed_mob.Paralyze(2 SECONDS) + grabbed_mob.apply_damage(damage, blocked = MELEE, updating_health = TRUE) + take_damage(damage * 2, BRUTE, MELEE) + return TRUE + /obj/structure/window/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return - if(istype(I, /obj/item/grab) && get_dist(src, user) < 2) - if(isxeno(user)) - return - var/obj/item/grab/G = I - if(!isliving(G.grabbed_thing)) - return - - var/mob/living/M = G.grabbed_thing - var/state = user.grab_state - user.drop_held_item() - switch(state) - if(GRAB_PASSIVE) - M.visible_message(span_warning("[user] slams [M] against \the [src]!")) - log_combat(user, M, "slammed", "", "against \the [src]") - M.apply_damage(7, blocked = MELEE) - UPDATEHEALTH(M) - take_damage(10, BRUTE, MELEE) - if(GRAB_AGGRESSIVE) - M.visible_message(span_danger("[user] bashes [M] against \the [src]!")) - log_combat(user, M, "bashed", "", "against \the [src]") - if(prob(50)) - M.Paralyze(2 SECONDS) - M.apply_damage(10, blocked = MELEE) - UPDATEHEALTH(M) - take_damage(25, BRUTE, MELEE) - if(GRAB_NECK) - M.visible_message(span_danger("[user] crushes [M] against \the [src]!")) - log_combat(user, M, "crushed", "", "against \the [src]") - M.Paralyze(10 SECONDS) - M.apply_damage(20, blocked = MELEE) - UPDATEHEALTH(M) - take_damage(50, BRUTE, MELEE) - - else if(I.flags_item & NOBLUDGEON) + if(I.item_flags & NOBLUDGEON) return else if(isscrewdriver(I) && deconstructable) @@ -195,7 +195,7 @@ if(reinf) new /obj/item/stack/sheet/glass/reinforced(loc, 2) else - new /obj/item/stack/sheet/glass(loc, 2) + new /obj/item/stack/sheet/glass/glass(loc, 2) else new shardtype(loc) if(is_full_window()) @@ -245,9 +245,8 @@ INVOKE_NEXT_TICK(W, TYPE_PROC_REF(/atom/movable, update_icon)) //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 +/obj/structure/window/update_icon_state() + . = ..() if(!src) return if(!is_full_window()) @@ -388,9 +387,9 @@ basestate = "window" max_integrity = 40 reinf = TRUE - flags_atom = NONE + atom_flags = NONE -/obj/structure/window/shuttle/update_icon() //icon_state has to be set manually +/obj/structure/window/shuttle/update_icon_state() return //Framed windows @@ -399,7 +398,7 @@ name = "theoretical window" layer = TABLE_LAYER static_frame = TRUE - flags_atom = NONE //This is not a border object; it takes up the entire tile. + atom_flags = NONE //This is not a border object; it takes up the entire tile. explosion_block = 2 smoothing_flags = SMOOTH_BITMASK smoothing_groups = list( @@ -421,8 +420,7 @@ /obj/structure/window/framed/update_icon() QUEUE_SMOOTH(src) - - + return ..() /obj/structure/window/framed/deconstruct(disassembled = TRUE, leave_frame = TRUE) if(window_frame && leave_frame) diff --git a/code/game/objects/structures/window_frame.dm b/code/game/objects/structures/window_frame.dm index cefe080862056..e6bbfc4dadb1c 100644 --- a/code/game/objects/structures/window_frame.dm +++ b/code/game/objects/structures/window_frame.dm @@ -49,6 +49,7 @@ /obj/structure/window_frame/update_icon() QUEUE_SMOOTH(src) + return ..() /obj/structure/window_frame/Destroy() density = FALSE @@ -61,6 +62,8 @@ /obj/structure/window_frame/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, sheet_type)) var/obj/item/stack/sheet/sheet = I @@ -80,35 +83,31 @@ new window_type(loc) //This only works on Theseus windows! qdel(src) - else if(istype(I, /obj/item/grab)) - var/obj/item/grab/G = I - if(isxeno(user)) - return - - if(!isliving(G.grabbed_thing)) - return - - var/mob/living/M = G.grabbed_thing - if(user.grab_state < GRAB_AGGRESSIVE) - to_chat(user, span_warning("You need a better grip to do that!")) - return - - if(get_dist(src, M) > 1) - to_chat(user, span_warning("[M] needs to be next to [src].")) - return - - if(user.do_actions) - return - - user.visible_message(span_notice("[user] starts pulling [M] onto [src]."), - span_notice("You start pulling [M] onto [src]!")) - if(!do_after(user, 2 SECONDS, NONE, M, BUSY_ICON_GENERIC)) - return - M.Paralyze(4 SECONDS) - user.visible_message(span_warning("[user] pulls [M] onto [src]."), - span_notice("You pull [M] onto [src].")) - M.forceMove(loc) - +/obj/structure/window_frame/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + . = ..() + if(.) + return + if(!isliving(grab.grabbed_thing)) + return + if(user.do_actions) + return + if(user.grab_state < GRAB_AGGRESSIVE) + to_chat(user, span_warning("You need a better grip to do that!")) + return + + var/mob/living/grabbed_mob = grab.grabbed_thing + if(get_dist(src, grabbed_mob) > 1) + to_chat(user, span_warning("[grabbed_mob] needs to be next to [src].")) + return + user.visible_message(span_notice("[user] starts pulling [grabbed_mob] onto [src]."), + span_notice("You start pulling [grabbed_mob] onto [src]!")) + if(!do_after(user, 2 SECONDS, NONE, grabbed_mob, BUSY_ICON_GENERIC)) + return + grabbed_mob.Paralyze(2 SECONDS) + user.visible_message(span_warning("[user] pulls [grabbed_mob] onto [src]."), + span_notice("You pull [grabbed_mob] onto [src].")) + grabbed_mob.forceMove(loc) + return TRUE /obj/structure/window_frame/mainship icon = 'icons/obj/smooth_objects/ship_window_frame.dmi' diff --git a/code/game/objects/structures/xeno.dm b/code/game/objects/structures/xeno.dm index 4e0c29769d355..51d69f853c012 100644 --- a/code/game/objects/structures/xeno.dm +++ b/code/game/objects/structures/xeno.dm @@ -27,6 +27,8 @@ /obj/alien/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(user.a_intent == INTENT_HARM) //Already handled at the parent level. return @@ -63,7 +65,7 @@ desc = "Looks like some kind of slimy growth." icon_state = "Resin1" max_integrity = 200 - resistance_flags = XENO_DAMAGEABLE + resistance_flags = XENO_DAMAGEABLE|UNACIDABLE /obj/alien/resin/attack_hand(mob/living/user) @@ -117,14 +119,14 @@ victim.next_move_slowdown += slow_amt /* RUTGMC DELETION -/obj/alien/resin/sticky/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/alien/resin/sticky/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return FALSE - if(X.a_intent == INTENT_HARM) //Clear it out on hit; no need to double tap. - if(CHECK_BITFIELD(SSticker.mode?.flags_round_type, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.active && refundable) - SSresinshaping.quickbuild_points_by_hive[X.hivenumber]++ - X.do_attack_animation(src, ATTACK_EFFECT_CLAW) //SFX + if(xeno_attacker.a_intent == INTENT_HARM) //Clear it out on hit; no need to double tap. + if(CHECK_BITFIELD(SSticker.mode?.round_type_flags, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.active && refundable) + SSresinshaping.quickbuild_points_by_hive[xeno_attacker.hivenumber]++ + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_CLAW) //SFX playsound(src, "alien_resin_break", 25) //SFX deconstruct(TRUE) return @@ -193,22 +195,22 @@ /* RUTGMC DELETION //clicking on resin doors attacks them, or opens them without harm intent -/obj/structure/mineral_door/resin/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - var/turf/cur_loc = X.loc +/obj/structure/mineral_door/resin/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + var/turf/cur_loc = xeno_attacker.loc if(!istype(cur_loc)) return FALSE //Some basic logic here - if(X.a_intent != INTENT_HARM) - try_toggle_state(X) + if(xeno_attacker.a_intent != INTENT_HARM) + try_toggle_state(xeno_attacker) return TRUE - if(CHECK_BITFIELD(SSticker.mode?.flags_round_type, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.active) - SSresinshaping.quickbuild_points_by_hive[X.hivenumber]++ + if(CHECK_BITFIELD(SSticker.mode?.round_type_flags, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.active) + SSresinshaping.quickbuild_points_by_hive[xeno_attacker.hivenumber]++ qdel(src) return TRUE - src.balloon_alert(X, "Destroying...") + src.balloon_alert(xeno_attacker, "Destroying...") playsound(src, "alien_resin_break", 25) - if(do_after(X, 1 SECONDS, IGNORE_HELD_ITEM, src, BUSY_ICON_HOSTILE)) - src.balloon_alert(X, "Destroyed") + if(do_after(xeno_attacker, 1 SECONDS, IGNORE_HELD_ITEM, src, BUSY_ICON_HOSTILE)) + src.balloon_alert(xeno_attacker, "Destroyed") qdel(src) */ @@ -283,27 +285,27 @@ /obj/item/resin_jelly name = "resin jelly" desc = "A foul, viscous resin jelly that doesnt seem to burn easily." - icon = 'icons/unused/Marine_Research.dmi' - icon_state = "biomass" + icon = 'icons/Xeno/xeno_materials.dmi' + icon_state = "resin_jelly" soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 200, ACID = 0) var/immune_time = 15 SECONDS ///Holder to ensure only one user per resin jelly. var/current_user -/obj/item/resin_jelly/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/item/resin_jelly/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return FALSE - if(X.xeno_caste.can_flags & CASTE_CAN_HOLD_JELLY) - return attack_hand(X) - if(X.do_actions || !isnull(current_user)) + if(xeno_attacker.xeno_caste.can_flags & CASTE_CAN_HOLD_JELLY) + return attack_hand(xeno_attacker) + if(xeno_attacker.do_actions || !isnull(current_user)) return - current_user = X - X.balloon_alert(X, "Applying...") - if(!do_after(X, RESIN_SELF_TIME, NONE, X, BUSY_ICON_MEDICAL)) + current_user = xeno_attacker + xeno_attacker.balloon_alert(xeno_attacker, "Applying...") + if(!do_after(xeno_attacker, RESIN_SELF_TIME, NONE, xeno_attacker, BUSY_ICON_MEDICAL)) current_user = null return - activate_jelly(X) + activate_jelly(xeno_attacker) /obj/item/resin_jelly/attack_self(mob/living/carbon/xenomorph/user) //Activates if the item itself is clicked in hand. diff --git a/code/game/sound.dm b/code/game/sound.dm index 3e1b91f67dec3..e1b7c6749b257 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -62,18 +62,27 @@ A good representation is: 'byond applies a volume reduction to the sound every X frequency = GET_RANDOM_FREQ // Same frequency for everybody // Looping through the player list has the added bonus of working for mobs inside containers var/sound/S = sound(get_sfx(soundin)) - for(var/i in GLOB.player_list) - var/mob/M = i - if(!M.client) + for(var/mob/M AS in GLOB.player_list|GLOB.aiEyes) + if(!M.client && !istype(M, /mob/camera/aiEye)) continue var/turf/T = get_turf(M) if(!T || T.z != turf_source.z || get_dist(M, turf_source) > sound_range) continue - M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, is_global, channel, S) + M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, is_global, channel, S, sound_reciever = M) + + for(var/obj/vehicle/sealed/armored/armor AS in GLOB.tank_list) + if(!armor.interior || armor.z != turf_source.z || get_dist(armor.loc, turf_source) > sound_range) + continue + for(var/mob/crew AS in armor.interior.occupants) + //turf source is null on purpose because it will not work properly since crew is on a different z + crew.playsound_local(null, soundin, vol*0.5, vary, frequency, falloff, is_global, channel, S, sound_reciever = crew) + //todo rename S to sound_to_use -/mob/proc/playsound_local(turf/turf_source, soundin, vol, vary, frequency, falloff, is_global, channel = 0, sound/S, distance_multiplier = 1) - if(!client) +/mob/proc/playsound_local(turf/turf_source, soundin, vol, vary, frequency, falloff, is_global, channel = 0, sound/S, distance_multiplier = 1, mob/sound_reciever) + if(!sound_reciever) + sound_reciever = src + if(!sound_reciever.client) return FALSE if(!S) @@ -108,10 +117,10 @@ A good representation is: 'byond applies a volume reduction to the sound every X if(!is_global) S.environment = SOUND_ENVIRONMENT_ROOM - SEND_SOUND(src, S) + SEND_SOUND(sound_reciever, S) -/mob/living/playsound_local(turf/turf_source, soundin, vol, vary, frequency, falloff, is_global, channel = 0, sound/S, distance_multiplier = 1) +/mob/living/playsound_local(turf/turf_source, soundin, vol, vary, frequency, falloff, is_global, channel = 0, sound/S, distance_multiplier = 1, mob/sound_reciever) if(ear_deaf > 0) return FALSE return ..() diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm index 46ac12cc0d072..0b380f666043b 100644 --- a/code/game/turfs/closed.dm +++ b/code/game/turfs/closed.dm @@ -51,12 +51,12 @@ minimap_color = MINIMAP_SOLID overlays += rock_side -/turf/closed/mineral/attack_alien(mob/living/carbon/xenomorph/xeno_user, isrightclick = FALSE) +/turf/closed/mineral/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) . = ..() - if(isxenobehemoth(xeno_user)) - xeno_user.do_attack_animation(src) + if(isxenobehemoth(xeno_attacker)) + xeno_attacker.do_attack_animation(src) playsound(src, 'sound/effects/behemoth/earth_pillar_eating.ogg', 10, TRUE) - xeno_user.visible_message(span_xenowarning("\The [xeno_user] eats away at the [src.name]!"), \ + xeno_attacker.visible_message(span_xenowarning("\The [xeno_attacker] eats away at the [src.name]!"), \ span_xenonotice(pick( "We eat away at the stone. It tastes good, as expected of our primary diet.", "Mmmmm... Delicious rock. A fitting meal for the hardiest of creatures.", @@ -111,9 +111,9 @@ icon_state = "darkfrostwall-0" walltype = "darkfrostwall" base_icon_state = "darkfrostwall" - resistance_flags = PLASMACUTTER_IMMUNE|UNACIDABLE /turf/closed/mineral/smooth/darkfrostwall/indestructible + name = "tough rock" resistance_flags = RESIST_ALL icon_state = "wall-invincible" @@ -162,6 +162,16 @@ resistance_flags = RESIST_ALL icon_state = "wall-invincible" +//basalt mineral wall +/turf/closed/mineral/smooth/basalt + icon = 'icons/turf/walls/basaltwall.dmi' + icon_state = "basaltwall-0" + base_icon_state = "basaltwall" + +/turf/closed/mineral/smooth/basalt/indestructible + resistance_flags = RESIST_ALL + icon_state = "wall-invincible" + //Ground map dense jungle /turf/closed/gm icon = 'icons/turf/walls/jungle.dmi' @@ -187,7 +197,7 @@ /turf/closed/gm/ex_act(severity) switch(severity) if(EXPLODE_DEVASTATE) - ChangeTurf(/turf/open/ground/grass) + ChangeTurf(/turf/open/ground/grass/weedable) /turf/closed/gm/dense name = "dense jungle wall" @@ -293,9 +303,7 @@ icon_state = "Intersection" /turf/closed/attackby(obj/item/I, mob/user, params) - . = ..() - - if(istype(I, /obj/item/tool/pickaxe/plasmacutter) && !user.do_actions) + if(isplasmacutter(I) && !user.do_actions) var/obj/item/tool/pickaxe/plasmacutter/P = I if(CHECK_BITFIELD(resistance_flags, PLASMACUTTER_IMMUNE)) to_chat(user, span_warning("[P] can't cut through this!")) @@ -309,6 +317,8 @@ //change targetted turf to a new one to simulate deconstruction ChangeTurf(open_turf_type) + return + return ..() //Ice Thin Wall /turf/closed/ice/thin @@ -507,8 +517,13 @@ opacity = FALSE allow_pass_flags = PASS_GLASS +/turf/closed/shuttle/dropship1/aislewindow + icon_state = "shuttle_aisle_window" + opacity = FALSE + /turf/closed/shuttle/dropship1/panel icon_state = "shuttle_interior_panel" + opacity = FALSE /turf/closed/shuttle/dropship1/engineone icon_state = "shuttle_interior_backengine" diff --git a/code/game/turfs/floor.dm b/code/game/turfs/floor.dm index e320c17d47d8b..f1046378d3c0d 100644 --- a/code/game/turfs/floor.dm +++ b/code/game/turfs/floor.dm @@ -68,6 +68,7 @@ return W /turf/open/floor/update_icon_state() + . = ..() if(broken) icon_state = broken_states() else if(burnt) @@ -116,7 +117,7 @@ return TRUE . = ..() if(.) - return . + return if(floor_tile && istype(object, /obj/item/stack/tile)) try_replace_tile(object, user, params) return TRUE diff --git a/code/game/turfs/floor_ground.dm b/code/game/turfs/floor_ground.dm index 72d592521911a..c9deeab594a35 100644 --- a/code/game/turfs/floor_ground.dm +++ b/code/game/turfs/floor_ground.dm @@ -187,6 +187,7 @@ /turf/open/floor/plating/ground/mars/random/cave name = "cave" icon_state = "mars_cave" + smoothing_groups = list(SMOOTH_GROUP_SAND) /turf/open/floor/plating/ground/mars/random/cave/darker color = "#948a7c" @@ -346,6 +347,20 @@ name = "asphalt" icon_state = "cement_threeside" +/turf/open/floor/plating/ground/desertdam/asphalt/autosmooth + name = "concrete" + icon = 'icons/turf/floors/asphalt-regular.dmi' + icon_state = "asphalt-icon" + smoothing_flags = SMOOTH_BITMASK + smoothing_groups = list(SMOOTH_GROUP_ASPHALT) + canSmoothWith = list( + SMOOTH_GROUP_ASPHALT, + ) + base_icon_state = "asphalt-regular" + +/turf/open/floor/plating/ground/desertdam/asphalt/autosmooth/alt + icon = 'icons/turf/floors/asphalt-sunbleached.dmi' + base_icon_state = "aasphalt-sunbleached" //CAVE /turf/open/floor/plating/ground/desertdam/cave @@ -412,3 +427,20 @@ mediumxenofootstep = FOOTSTEP_CONCRETE barefootstep = FOOTSTEP_CONCRETE shoefootstep = FOOTSTEP_CONCRETE + +///These are entirely for decoration purposes, do not make them functional, it will cause salt. +/turf/open/floor/chasm + name = "chasm" + desc = "Watch your step." + icon = 'icons/turf/floors/chasms.dmi' + icon_state = "chasms-0" + base_icon_state = "chasms" + smoothing_flags = SMOOTH_BITMASK + smoothing_groups = list(SMOOTH_GROUP_TURF_CHASM) + canSmoothWith = list(SMOOTH_GROUP_TURF_CHASM) + density = TRUE //keep people from stepping on it + +/turf/open/floor/chasm/junglechasm + icon = 'icons/turf/floors/junglechasm.dmi' + icon_state = "junglechasm-0" + base_icon_state = "junglechasm" diff --git a/code/game/turfs/floor_types.dm b/code/game/turfs/floor_types.dm index ee826f2156318..6561f58d72292 100644 --- a/code/game/turfs/floor_types.dm +++ b/code/game/turfs/floor_types.dm @@ -20,9 +20,18 @@ /turf/open/floor/mainship/plate/outline icon_state = "test_floor5" +/turf/open/floor/mainship/hexagon + icon_state = "hexagon" + /turf/open/floor/mainship/cargo icon_state = "cargo" +/turf/open/floor/mainship/yellow_cargo + icon_state = "yellow_cargo" + +/turf/open/floor/mainship/yellow_cargo/arrow + icon_state = "yellow_cargo_arrow" + /turf/open/floor/mainship/cargo/arrow icon_state = "cargo_arrow" @@ -444,6 +453,8 @@ if(iscrowbar(I)) // Prevent generation of infinite 'floor_tile' objs caused by the overridden make_plating() above never clearing the var return . = ..() + if(.) + return if(iswrench(I)) user.visible_message(span_notice("[user] starts removing [src]'s protective cover."), @@ -904,6 +915,46 @@ /turf/open/floor/carpet/side icon_state = "carpetside" +/turf/open/floor/carpet/blue + icon = 'icons/turf/floors/carpet_blue.dmi' + base_icon_state = "carpet_blue" + icon_state = "carpet_blue-0" + +/turf/open/floor/carpet/black + icon = 'icons/turf/floors/carpet_black.dmi' + base_icon_state = "carpet_black" + icon_state = "carpet_black-0" + +/turf/open/floor/carpet/green + icon = 'icons/turf/floors/carpet_green.dmi' + base_icon_state = "carpet_green" + icon_state = "carpet_green-0" + +/turf/open/floor/carpet/orange + icon = 'icons/turf/floors/carpet_orange.dmi' + base_icon_state = "carpet_orange" + icon_state = "carpet_orange-0" + +/turf/open/floor/carpet/purple + icon = 'icons/turf/floors/carpet_purple.dmi' + base_icon_state = "carpet_purple" + icon_state = "carpet_purple-0" + +/turf/open/floor/carpet/red + icon = 'icons/turf/floors/carpet_red.dmi' + base_icon_state = "carpet_red" + icon_state = "carpet_red-0" + +/turf/open/floor/carpet/cyan + icon = 'icons/turf/floors/carpet_cyan.dmi' + base_icon_state = "carpet_cyan" + icon_state = "carpet_cyan-0" + +/turf/open/floor/carpet/royalblack + icon = 'icons/turf/floors/carpet_royalblack.dmi' + base_icon_state = "carpet_royalblack" + icon_state = "carpet_royalblack-0" + // Start Prison tiles /turf/open/floor/prison diff --git a/code/game/turfs/iron_floor.dm b/code/game/turfs/iron_floor.dm index 82aa6c55c2b4b..ad3a0c9dccb7b 100644 --- a/code/game/turfs/iron_floor.dm +++ b/code/game/turfs/iron_floor.dm @@ -233,8 +233,12 @@ /turf/open/floor/glass name = "glass floor" desc = "Don't jump on it, or do, I'm not your mom." - icon = 'icons/turf/floors.dmi' + icon = 'icons/turf/floors/glass.dmi' icon_state = "glass-0" + base_icon_state = "glass" + smoothing_flags = SMOOTH_BITMASK + smoothing_groups = list(SMOOTH_GROUP_FLOOR_TRANSPARENT_GLASS) + canSmoothWith = list(SMOOTH_GROUP_FLOOR_TRANSPARENT_GLASS) /turf/open/floor/glass/reinforced name = "reinforced glass floor" @@ -242,7 +246,17 @@ icon = 'icons/turf/floors/reinf_glass.dmi' icon_state = "reinf_glass-0" base_icon_state = "reinf_glass" - smoothing_flags = SMOOTH_BITMASK - smoothing_groups = list(SMOOTH_GROUP_FLOOR_TRANSPARENT_GLASS) - canSmoothWith = list(SMOOTH_GROUP_FLOOR_TRANSPARENT_GLASS) +/turf/open/floor/glass/plasma + name = "plasma glass floor" + desc = "Studies by the Nanotrasen Materials Safety Division have not yet determined if this is safe to jump on, do so at your own risk." + icon = 'icons/turf/floors/plasma_glass.dmi' + icon_state = "plasma_glass-0" + base_icon_state = "plasma_glass" + +/turf/open/floor/glass/reinforced/plasma + name = "reinforced plasma glass floor" + desc = "Do jump on it, jump on it while in a mecha, it can take it." + icon = 'icons/turf/floors/reinf_plasma_glass.dmi' + icon_state = "reinf_plasma_glass-0" + base_icon_state = "reinf_plasma_glass" diff --git a/code/game/turfs/liquid_turfs.dm b/code/game/turfs/liquid_turfs.dm index 478141830307f..3b9826febceea 100644 --- a/code/game/turfs/liquid_turfs.dm +++ b/code/game/turfs/liquid_turfs.dm @@ -193,9 +193,6 @@ icon_state = "shallow_water_cave_waterway_edge" // LAVA - -#define LAVA_TILE_BURN_DAMAGE 20 - /turf/open/liquid/lava name = "lava" icon = 'icons/turf/lava.dmi' @@ -214,7 +211,7 @@ . = ..() var/turf/current_turf = get_turf(src) if(current_turf && density) - current_turf.flags_atom |= AI_BLOCKED + current_turf.atom_flags |= AI_BLOCKED /turf/open/liquid/lava/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) . = ..() @@ -232,40 +229,17 @@ if(!burn_stuff()) STOP_PROCESSING(SSobj, src) -/* RUTGMC DELETION, FIRE JUMPING +///Handles burning turf contents or an entering AM. Returns true to keep processing /turf/open/liquid/lava/proc/burn_stuff(AM) - . = FALSE - - var/thing_to_check = src - if (AM) - thing_to_check = list(AM) - for(var/thing in thing_to_check) - if(ismecha(thing)) - var/obj/vehicle/sealed/mecha/burned_mech = thing - burned_mech.take_damage(rand(40, 120), BURN, FIRE) + var/thing_to_check = AM ? list(AM) : src + for(var/atom/thing AS in thing_to_check) + if(thing.lava_act()) . = TRUE - else if(isobj(thing)) - var/obj/O = thing - O.fire_act(10000, 1000) - - else if (isliving(thing)) - var/mob/living/L = thing - - if(L.stat == DEAD) - continue - - if(!L.on_fire || L.getFireLoss() <= 200) - var/damage_amount = max(L.modify_by_armor(LAVA_TILE_BURN_DAMAGE, FIRE), LAVA_TILE_BURN_DAMAGE * 0.3) //snowflakey interaction to stop complete lava immunity - L.take_overall_damage(damage_amount, BURN, updating_health = TRUE, max_limbs = 3) - if(!CHECK_BITFIELD(L.pass_flags, PASS_FIRE))//Pass fire allow to cross lava without igniting - L.adjust_fire_stacks(20) - L.IgniteMob() - . = TRUE -*/ - /turf/open/liquid/lava/attackby(obj/item/C, mob/user, params) . = ..() + if(.) + return if(istype(C, /obj/item/stack/rods)) var/obj/item/stack/rods/R = C var/turf/open/lavaland/catwalk/H = locate(/turf/open/lavaland/catwalk, src) @@ -281,7 +255,7 @@ ChangeTurf(/turf/open/lavaland/catwalk/built) var/turf/current_turf = get_turf(src) if(current_turf && density) - current_turf.flags_atom &= ~AI_BLOCKED + current_turf.atom_flags &= ~AI_BLOCKED else to_chat(user, span_warning("You need four rods to build a heatproof catwalk.")) return diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index 99078c58105ba..528eef1675364 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -146,6 +146,84 @@ /turf/open/shuttle/dropship/fourteen icon_state = "floor6" +/turf/open/shuttle/dropship/fourteen + icon_state = "rasputin14" + +/turf/open/shuttle/dropship/fifteen + icon_state = "rasputin15" + +/turf/open/shuttle/dropship/sixteen + icon_state = "rasputin16" + +/turf/open/shuttle/dropship/seventeen + icon_state = "rasputin17" + +/turf/open/shuttle/dropship/eighteen + icon_state = "rasputin18" + +/turf/open/shuttle/dropship/nineteen + icon_state = "rasputin19" + +/turf/open/shuttle/dropship/twenty + icon_state = "rasputin20" + +/turf/open/shuttle/dropship/twentyone + icon_state = "rasputin21" + +/turf/open/shuttle/dropship/twentytwo + icon_state = "rasputin22" + +/turf/open/shuttle/dropship/twentythree + icon_state = "rasputin23" + +/turf/open/shuttle/dropship/twentyfour + icon_state = "rasputin24" + +/turf/open/shuttle/dropship/twentyfive + icon_state = "rasputin25" + +/turf/open/shuttle/dropship/twentysix + icon_state = "rasputin26" + +/turf/open/shuttle/dropship/twentyseven + icon_state = "rasputin27" + +/turf/open/shuttle/dropship/twentyeight + icon_state = "rasputin28" + +/turf/open/shuttle/dropship/twentynine + icon_state = "rasputin29" + +/turf/open/shuttle/dropship/thirty + icon_state = "rasputin30" + +/turf/open/shuttle/dropship/thirtyone + icon_state = "rasputin31" + +/turf/open/shuttle/dropship/thirtytwo + icon_state = "rasputin32" + +/turf/open/shuttle/dropship/thirtythree + icon_state = "rasputin33" + +/turf/open/shuttle/dropship/thirtyfour + icon_state = "rasputin34" + +/turf/open/shuttle/dropship/thirtyfive + icon_state = "rasputin35" + +/turf/open/shuttle/dropship/thirtysix + icon_state = "rasputin36" + +/turf/open/shuttle/dropship/thirtyseven + icon_state = "rasputin37" + +/turf/open/shuttle/dropship/thirtyeight + icon_state = "rasputin38" + +/turf/open/shuttle/dropship/thirtynine + icon_state = "rasputin39" + /turf/open/shuttle/dropship/grating icon = 'icons/turf/elevator.dmi' icon_state = "floor_grating" @@ -295,20 +373,20 @@ /turf/open/lavaland/catwalk/built var/deconstructing = FALSE -/turf/open/lavaland/catwalk/built/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/turf/open/lavaland/catwalk/built/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return - if(X.a_intent != INTENT_HARM) + if(xeno_attacker.a_intent != INTENT_HARM) return if(deconstructing) return deconstructing = TRUE - if(!do_after(X, 10 SECONDS, NONE, src, BUSY_ICON_BUILD)) + if(!do_after(xeno_attacker, 10 SECONDS, NONE, src, BUSY_ICON_BUILD)) deconstructing = FALSE return deconstructing = FALSE playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE) var/turf/current_turf = get_turf(src) if(current_turf) - current_turf.flags_atom |= AI_BLOCKED + current_turf.atom_flags |= AI_BLOCKED ChangeTurf(/turf/open/liquid/lava) diff --git a/code/game/turfs/open_ground.dm b/code/game/turfs/open_ground.dm index 679b0c6bf99d6..8854410f7e02a 100644 --- a/code/game/turfs/open_ground.dm +++ b/code/game/turfs/open_ground.dm @@ -8,9 +8,10 @@ var/icon_variants = 1 /turf/open/ground/update_icon_state() + . = ..() if(icon_variants < 2) - return initial(icon_state) - return "[initial(icon_state)]_[rand(1, icon_variants)]" + icon_state = initial(icon_state) + icon_state = "[initial(icon_state)]_[rand(1, icon_variants)]" /turf/open/ground/AfterChange() . = ..() diff --git a/code/game/turfs/plating.dm b/code/game/turfs/plating.dm index d985d51b26c5d..e9ed80d4f2311 100644 --- a/code/game/turfs/plating.dm +++ b/code/game/turfs/plating.dm @@ -100,6 +100,8 @@ /turf/open/floor/plating/plating_catwalk/attackby(obj/item/I, mob/user) . = ..() + if(.) + return if(iscrowbar(I)) if(covered) var/obj/item/stack/catwalk/R = new(user.loc) @@ -114,8 +116,6 @@ covered = TRUE update_turf_overlay() return - return ..() - /turf/open/floor/plating/plating_catwalk/prison icon = 'icons/turf/prison.dmi' diff --git a/code/game/turfs/snow.dm b/code/game/turfs/snow.dm index 7aa17da86e9fa..8e87c8aae64b8 100644 --- a/code/game/turfs/snow.dm +++ b/code/game/turfs/snow.dm @@ -6,7 +6,7 @@ /turf/open/floor/plating/ground/snow name = "snow layer" icon = 'icons/turf/snow2.dmi' - icon_state = "snow_0" + icon_state = "snow_0_1" hull_floor = TRUE shoefootstep = FOOTSTEP_SNOW barefootstep = FOOTSTEP_SNOW @@ -16,15 +16,17 @@ /turf/open/floor/plating/ground/snow/Initialize(mapload) . = ..() RegisterSignal(src, COMSIG_ATOM_ACIDSPRAY_ACT, PROC_REF(acidspray_act)) - update_icon(TRUE,TRUE) //Update icon and sides on start, but skip nearby check for turfs. + update_appearance() + update_sides() // Melting snow /turf/open/floor/plating/ground/snow/fire_act(exposed_temperature, exposed_volume) slayer = 0 - update_icon(TRUE, FALSE) + update_appearance() + update_sides() //Xenos digging up snow -/turf/open/floor/plating/ground/snow/attack_alien(mob/living/carbon/xenomorph/M, damage_amount = M.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) +/turf/open/floor/plating/ground/snow/attack_alien(mob/living/carbon/xenomorph/M, damage_amount = M.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = 0, isrightclick = FALSE) if(M.status_flags & INCORPOREAL) return @@ -46,11 +48,14 @@ M.visible_message(span_notice("\The [M] clears out \the [src]."), \ span_notice("We clear out \the [src]."), null, 5) slayer = 0 - update_icon(TRUE, FALSE) + update_appearance() + update_sides() //PLACING/REMOVING/BUILDING /turf/open/floor/plating/ground/snow/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return //Light Stick if(istype(I, /obj/item/lightstick)) var/obj/item/lightstick/L = I @@ -79,14 +84,13 @@ var/mob/living/carbon/xenomorph/xeno = arrived if(xeno.is_charging >= CHARGE_ON) // chargers = snow plows slayer = 0 - update_icon(TRUE, FALSE) + update_appearance() + update_sides() return ..() -//Update icon -/turf/open/floor/plating/ground/snow/update_icon(update_full, skip_sides) - icon_state = "snow_[slayer]" - setDir(pick(GLOB.alldirs)) +/turf/open/floor/plating/ground/snow/update_name(updates) + . = ..() switch(slayer) if(0) name = "dirt floor" @@ -97,48 +101,50 @@ if(3) name = "very deep [initial(name)]" - //Update the side overlays - if(update_full) - var/turf/open/T - if(!skip_sides) - for(var/dirn in GLOB.alldirs) - var/turf/open/floor/plating/ground/snow/D = get_step(src,dirn) - if(istype(D)) - //Update turfs that are near us, but only once - D.update_icon(TRUE, TRUE) - - overlays.Cut() - - for(var/dirn in GLOB.alldirs) - T = get_step(src, dirn) - if(istype(T)) - if(slayer > T.slayer && T.slayer < 1) - var/image/I = new('icons/turf/snow2.dmi', "snow_[(dirn & (dirn-1)) ? "outercorner" : pick("innercorner", "outercorner")]", dir = dirn) - switch(dirn) - if(NORTH) - I.pixel_y = 32 - if(SOUTH) - I.pixel_y = -32 - if(EAST) - I.pixel_x = 32 - if(WEST) - I.pixel_x = -32 - if(NORTHEAST) - I.pixel_x = 32 - I.pixel_y = 32 - if(SOUTHEAST) - I.pixel_x = 32 - I.pixel_y = -32 - if(NORTHWEST) - I.pixel_x = -32 - I.pixel_y = 32 - if(SOUTHWEST) - I.pixel_x = -32 - I.pixel_y = -32 - - I.layer = layer + 0.001 + slayer * 0.0001 - overlays += I +/turf/open/floor/plating/ground/snow/update_overlays() + . = ..() + for(var/dirn in GLOB.alldirs) + var/turf/open/T = get_step(src, dirn) + if(!isopenturf(T)) + continue + if(slayer > T.slayer && T.slayer < 1) + var/image/I = new('icons/turf/snow2.dmi', "snow_[(dirn & (dirn-1)) ? "outercorner" : pick("innercorner", "outercorner")]", dir = dirn) + switch(dirn) + if(NORTH) + I.pixel_y = 32 + if(SOUTH) + I.pixel_y = -32 + if(EAST) + I.pixel_x = 32 + if(WEST) + I.pixel_x = -32 + if(NORTHEAST) + I.pixel_x = 32 + I.pixel_y = 32 + if(SOUTHEAST) + I.pixel_x = 32 + I.pixel_y = -32 + if(NORTHWEST) + I.pixel_x = -32 + I.pixel_y = 32 + if(SOUTHWEST) + I.pixel_x = -32 + I.pixel_y = -32 + + I.layer = layer + 0.001 + slayer * 0.0001 + . += I + +/turf/open/floor/plating/ground/snow/update_icon_state() + . = ..() + icon_state = "snow_[slayer]_[rand(1,8)]" +///Fully update all the turfs around us +/turf/open/floor/plating/ground/snow/proc/update_sides() + for(var/dirn in GLOB.alldirs) + var/turf/open/floor/plating/ground/snow/D = get_step(src,dirn) + if(istype(D)) + //Update turfs that are near us, but only once + D.update_appearance(ALL) /* RUTGMC DELETION //Explosion act @@ -154,7 +160,8 @@ if(slayer && prob(20)) slayer = max(slayer - 1, 0) - update_icon(TRUE, FALSE) + update_appearance() + update_sides() return ..() */ @@ -171,7 +178,8 @@ if(25 to INFINITY) slayer = 0 - update_icon(TRUE, FALSE) + update_appearance() + update_sides() /turf/open/floor/plating/ground/snow/proc/acidspray_act() SIGNAL_HANDLER @@ -180,25 +188,26 @@ return slayer = max(0, slayer - 1) //Melt a layer - update_icon(TRUE, FALSE) + update_appearance() + update_sides() //SNOW LAYERS-----------------------------------// /turf/open/floor/plating/ground/snow/layer0 - icon_state = "snow_0" + icon_state = "snow_0_1" slayer = 0 minimap_color = MINIMAP_DIRT /turf/open/floor/plating/ground/snow/layer1 - icon_state = "snow_1" + icon_state = "snow_1_1" slayer = 1 /turf/open/floor/plating/ground/snow/layer2 - icon_state = "snow_2" + icon_state = "snow_2_1" slayer = 2 /turf/open/floor/plating/ground/snow/layer3 - icon_state = "snow_3" + icon_state = "snow_3_1" slayer = 3 diff --git a/code/game/turfs/space.dm b/code/game/turfs/space.dm index 7cb0bdea06775..dc4d6f1ea1681 100644 --- a/code/game/turfs/space.dm +++ b/code/game/turfs/space.dm @@ -33,9 +33,9 @@ */ /turf/open/space/Initialize(mapload, ...) SHOULD_CALL_PARENT(FALSE) //prevent laggies - if(flags_atom & INITIALIZED) + if(atom_flags & INITIALIZED) stack_trace("Warning: [src]([type]) initialized multiple times!") - ENABLE_BITFIELD(flags_atom, INITIALIZED) + ENABLE_BITFIELD(atom_flags, INITIALIZED) icon_state = SPACE_ICON_STATE(x, y, z) return INITIALIZE_HINT_NORMAL @@ -55,6 +55,8 @@ /turf/open/space/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/stack/rods)) var/obj/structure/lattice/L = locate(/obj/structure/lattice) in src diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index 3b9250e8e1462..2e46ef3ffacb2 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -89,9 +89,11 @@ transform = turn(matrix(), get_transit_angle(src)) /turf/open/space/transit/update_icon_state() + . = ..() icon_state = "speedspace_ns_[get_transit_state(src, available_icon_state_amounts)]" /turf/open/space/transit/atmos/update_icon_state() + . = ..() icon_state = "Cloud_[get_transit_state(src, available_icon_state_amounts)]" /proc/get_transit_state(turf/T, available_icon_state_amounts) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 05495684ea185..a0386837b5c79 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -59,9 +59,9 @@ /turf/Initialize(mapload) SHOULD_CALL_PARENT(FALSE) // anti laggies - if(flags_atom & INITIALIZED) + if(atom_flags & INITIALIZED) stack_trace("Warning: [src]([type]) initialized multiple times!") - ENABLE_BITFIELD(flags_atom, INITIALIZED) + ENABLE_BITFIELD(atom_flags, INITIALIZED) // by default, vis_contents is inherited from the turf that was here before vis_contents.Cut() @@ -130,7 +130,7 @@ B.vars[I] = null return QDEL_HINT_IWILLGC visibilityChanged() - DISABLE_BITFIELD(flags_atom, INITIALIZED) + DISABLE_BITFIELD(atom_flags, INITIALIZED) soft_armor = null hard_armor = null QDEL_NULL(current_acid) @@ -180,7 +180,7 @@ return TRUE //We've entered the tile and gotten entangled inside it. if(QDELETED(mover)) //Mover deleted from Cross/CanPass, do not proceed. return FALSE - else if(!firstbump || ((thing.layer > firstbump.layer || thing.flags_atom & ON_BORDER) && !(firstbump.flags_atom & ON_BORDER))) + else if(!firstbump || ((thing.layer > firstbump.layer || thing.atom_flags & ON_BORDER) && !(firstbump.atom_flags & ON_BORDER))) firstbump = thing if(QDELETED(mover)) //Mover deleted from Cross/CanPass/Bump, do not proceed. return FALSE @@ -219,7 +219,7 @@ /turf/proc/levelupdate() for(var/obj/O in src) - if(O.flags_atom & INITIALIZED) + if(O.atom_flags & INITIALIZED) SEND_SIGNAL(O, COMSIG_OBJ_HIDE, intact_tile) @@ -534,7 +534,7 @@ */ /turf/proc/check_disallow_alien_fortification(mob/living/builder, silent = FALSE) var/area/ourarea = loc - if(ourarea.flags_area & DISALLOW_WEEDING) + if(ourarea.area_flags & DISALLOW_WEEDING) if(!silent) to_chat(builder, span_warning("We cannot build in this area before the talls are out!")) return FALSE @@ -574,6 +574,9 @@ if(P.chair_state != DROPSHIP_CHAIR_BROKEN) has_obstacle = TRUE break + if(istype(O, /obj/structure/bed/chair/dropship/doublewide)) + has_obstacle = TRUE + break else if(istype(O, /obj/structure/bed/nest)) //We don't care about other beds/chairs/whatever the fuck. has_obstacle = TRUE break @@ -585,7 +588,7 @@ has_obstacle = TRUE break - if(O.density && !(O.flags_atom & ON_BORDER)) + if(O.density && !(O.atom_flags & ON_BORDER)) has_obstacle = TRUE break @@ -684,7 +687,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( var/turf/newT if(flags & CHANGETURF_SKIP) // We haven't been initialized - if(flags_atom & INITIALIZED) + if(atom_flags & INITIALIZED) stack_trace("CHANGETURF_SKIP was used in a PlaceOnTop call for a turf that's initialized. This is a mistake. [src]([type])") assemble_baseturfs() if(fake_turf_type) @@ -781,7 +784,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( // Removes all signs of lattice on the pos of the turf -Donkieyo /turf/proc/RemoveLattice() var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) - if(L && (L.flags_atom & INITIALIZED)) + if(L && (L.atom_flags & INITIALIZED)) qdel(L) // A proc in case it needs to be recreated or badmins want to change the baseturfs @@ -897,25 +900,25 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( switch(severity) if(EXPLODE_DEVASTATE) SSexplosions.highMovAtom[thing_in_turf] += list(src) - if(thing_in_turf.flags_atom & PREVENT_CONTENTS_EXPLOSION) + if(thing_in_turf.atom_flags & PREVENT_CONTENTS_EXPLOSION) continue for(var/a in thing_in_turf.contents) SSexplosions.highMovAtom[a] += list(src) if(EXPLODE_HEAVY) SSexplosions.medMovAtom[thing_in_turf] += list(src) - if(thing_in_turf.flags_atom & PREVENT_CONTENTS_EXPLOSION) + if(thing_in_turf.atom_flags & PREVENT_CONTENTS_EXPLOSION) continue for(var/a in thing_in_turf.contents) SSexplosions.medMovAtom[a] += list(src) if(EXPLODE_LIGHT) SSexplosions.lowMovAtom[thing_in_turf] += list(src) - if(thing_in_turf.flags_atom & PREVENT_CONTENTS_EXPLOSION) + if(thing_in_turf.atom_flags & PREVENT_CONTENTS_EXPLOSION) continue for(var/a in thing_in_turf.contents) SSexplosions.lowMovAtom[a] += list(src) if(EXPLODE_WEAK) SSexplosions.weakMovAtom[thing_in_turf] += list(src) - if(thing_in_turf.flags_atom & PREVENT_CONTENTS_EXPLOSION) + if(thing_in_turf.atom_flags & PREVENT_CONTENTS_EXPLOSION) continue for(var/a in thing_in_turf.contents) SSexplosions.weakMovAtom[a] += list(src) diff --git a/code/game/turfs/walls/r_wall.dm b/code/game/turfs/walls/r_wall.dm index 670207fe4a80a..1b5d130234e2a 100644 --- a/code/game/turfs/walls/r_wall.dm +++ b/code/game/turfs/walls/r_wall.dm @@ -13,6 +13,8 @@ walltype = "rwall" explosion_block = 4 + soft_armor = list(MELEE = 0, BULLET = 80, LASER = 80, ENERGY = 100, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0) + /turf/closed/wall/r_wall/get_acid_delay() return 10 SECONDS diff --git a/code/game/turfs/walls/resin.dm b/code/game/turfs/walls/resin.dm index 3f3d0e97fca59..b2e857ff65395 100644 --- a/code/game/turfs/walls/resin.dm +++ b/code/game/turfs/walls/resin.dm @@ -15,9 +15,13 @@ smoothing_flags = SMOOTH_BITMASK smoothing_groups = list(SMOOTH_GROUP_XENO_STRUCTURES) canSmoothWith = list(SMOOTH_GROUP_XENO_STRUCTURES) - soft_armor = list(MELEE = 0, BULLET = 70, LASER = 60, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0) + soft_armor = list(MELEE = 0, BULLET = 80, LASER = 75, ENERGY = 75, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0) + hard_armor = list(MELEE = 0, BULLET = 15, LASER = 10, ENERGY = 10, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0) resistance_flags = UNACIDABLE + //Used for quickbuild refunding. + var/is_normal_resin_wall = TRUE + /turf/closed/wall/resin/add_debris_element() AddElement(/datum/element/debris, null, -15, 8, 0.7) @@ -86,21 +90,22 @@ take_damage(rand(30, 50), BRUTE, BOMB) /* RUTGMC DELETION -/turf/closed/wall/resin/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) - return - if(CHECK_BITFIELD(SSticker.mode?.flags_round_type, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.active) - SSresinshaping.quickbuild_points_by_hive[X.hivenumber]++ - take_damage(max_integrity) // Ensure its destroyed +/turf/closed/wall/resin/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return - X.visible_message(span_xenonotice("\The [X] starts tearing down \the [src]!"), \ + if(CHECK_BITFIELD(SSticker.mode?.round_type_flags, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.active) + if(is_normal_resin_wall) + SSresinshaping.quickbuild_points_by_hive[xeno_attacker.hivenumber]++ + take_damage(max_integrity) // Ensure its destroyed + return + xeno_attacker.visible_message(span_xenonotice("\The [xeno_attacker] starts tearing down \the [src]!"), \ span_xenonotice("We start to tear down \the [src].")) - if(!do_after(X, 1 SECONDS, NONE, X, BUSY_ICON_GENERIC)) + if(!do_after(xeno_attacker, 1 SECONDS, NONE, xeno_attacker, BUSY_ICON_GENERIC)) return if(!istype(src)) // Prevent jumping to other turfs if do_after completes with the wall already gone return - X.do_attack_animation(src, ATTACK_EFFECT_CLAW) - X.visible_message(span_xenonotice("\The [X] tears down \the [src]!"), \ + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_CLAW) + xeno_attacker.visible_message(span_xenonotice("\The [xeno_attacker] tears down \the [src]!"), \ span_xenonotice("We tear down \the [src].")) playsound(src, "alien_resin_break", 25) take_damage(max_integrity) // Ensure its destroyed @@ -112,7 +117,7 @@ /turf/closed/wall/resin/attackby(obj/item/I, mob/living/user, params) - if(I.flags_item & NOBLUDGEON || !isliving(user)) + if(I.item_flags & NOBLUDGEON || !isliving(user)) return user.changeNext_move(I.attack_speed) @@ -122,8 +127,10 @@ var/multiplier = 1 if(I.damtype == BURN) //Burn damage deals extra vs resin structures (mostly welders). multiplier += 1 + else if(I.damtype == BRUTE) + multiplier += 0.75 - if(istype(I, /obj/item/tool/pickaxe/plasmacutter) && !user.do_actions) + if(isplasmacutter(I) && !user.do_actions) var/obj/item/tool/pickaxe/plasmacutter/P = I if(P.start_cut(user, name, src, PLASMACUTTER_BASE_COST * PLASMACUTTER_VLOW_MOD)) multiplier += PLASMACUTTER_RESIN_MULTIPLIER @@ -152,14 +159,14 @@ * Regenerating walls that start with lower health, but grow to a much higher hp over time */ /turf/closed/wall/resin/regenerating - max_integrity = 150 + max_integrity = 75 /// Total health possible for a wall after regenerating at max health var/max_upgradable_health = 300 /// How much the walls integrity heals per tick (5 seconds) var/heal_per_tick = 25 /// How much the walls max_integrity increases per tick (5 seconds) - var/max_upgrade_per_tick = 3 + var/max_upgrade_per_tick = 6 /// How long should the wall stop healing for when taking dmg var/cooldown_on_taking_dmg = 30 SECONDS ///Whether we have a timer already to stop from clogging up the timer ss @@ -202,4 +209,27 @@ /* Hivelord walls, they start off stronger */ /turf/closed/wall/resin/regenerating/thick - max_integrity = 250 + max_integrity = 125 + +/turf/closed/wall/resin/regenerating/special + name = "you shouldn't see this" + is_normal_resin_wall = FALSE + +/turf/closed/wall/resin/regenerating/special/bulletproof + name = "bulletproof resin wall" + desc = "Weird slime solidified into a wall. Looks shiny." + soft_armor = list(MELEE = 0, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0) //You aren't damaging this with bullets without alot of AP. + color = COLLOR_WALL_BULLETPROOF + +/turf/closed/wall/resin/regenerating/special/fireproof + name = "fireproof resin wall" + desc = "Weird slime solidified into a wall. Very red." + soft_armor = list(MELEE = 0, BULLET = 80, LASER = 75, ENERGY = 75, BOMB = 0, BIO = 0, FIRE = 200, ACID = 0) + color = COLOR_WALL_FIREPROOF + +/turf/closed/wall/resin/regenerating/special/hardy + name = "hardy resin wall" + desc = "Weird slime soldified into a wall. Looks very strong." + max_upgradable_health = 450 + max_upgrade_per_tick = 12 //Upgrades faster, but if damaged at all it will be put on cooldown still to help against walling in combat. + color = COLOR_WALL_HARDY diff --git a/code/game/turfs/walls/wall_types.dm b/code/game/turfs/walls/wall_types.dm index d33199e9f5a81..5805499cfd637 100644 --- a/code/game/turfs/walls/wall_types.dm +++ b/code/game/turfs/walls/wall_types.dm @@ -244,7 +244,7 @@ return /turf/closed/wall/indestructible/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/tool/pickaxe/plasmacutter)) //needed for user feedback, if not included the user will not receive a message when trying plasma cutter wall/indestructible turfs + if(isplasmacutter(I)) //needed for user feedback, if not included the user will not receive a message when trying plasma cutter wall/indestructible turfs var/obj/item/tool/pickaxe/plasmacutter/P = I to_chat(user, span_warning("[P] can't cut through this!")) return diff --git a/code/game/turfs/walls/walls.dm b/code/game/turfs/walls/walls.dm index da7d61af4f36c..73de916a871c2 100644 --- a/code/game/turfs/walls/walls.dm +++ b/code/game/turfs/walls/walls.dm @@ -16,13 +16,8 @@ var/wall_integrity var/max_integrity = 1000 //Wall will break down to girders if damage reaches this point - var/damage_overlay var/global/damage_overlays[8] - var/current_bulletholes = 0 - var/bullethole_increment = 1 - var/bullethole_state = 0 - var/image/bullethole_overlay base_icon_state = "metal" var/max_temperature = 1800 //K, walls will take damage if they're next to a fire hotter than this @@ -31,6 +26,18 @@ var/obj/effect/acid_hole/acided_hole //the acid hole inside the wall + ///The current number of bulletholes in this turf + var/current_bulletholes = 0 + ///A reference to the current bullethole overlay image, this is added and deleted as needed + var/image/bullethole_overlay + /** + * The variation set we're using + * There are 10 sets and it gets picked randomly the first time a wall is shot + * It corresponds to the first number in the icon_state (bhole_[**bullethole_variation**]_[current_bulletholes]) + * Gets reset to 0 if the wall reaches maximum health, so a new variation is picked when the wall gets shot again + */ + var/bullethole_variation = 0 + smoothing_flags = SMOOTH_BITMASK smoothing_groups = list( SMOOTH_GROUP_CLOSED_TURFS, @@ -59,6 +66,10 @@ visible_message(span_warning("\The [M] is sealed inside the wall as it is built")) qdel(M) +/turf/closed/wall/Destroy(force) + QDEL_NULL(acided_hole) + QDEL_NULL(bullethole_overlay) + return ..() /turf/closed/wall/ChangeTurf(newtype) if(acided_hole) @@ -101,11 +112,11 @@ ..() -/turf/closed/wall/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/turf/closed/wall/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return - if(acided_hole && (X.mob_size == MOB_SIZE_BIG || X.xeno_caste.caste_flags & CASTE_IS_STRONG)) //Strong and/or big xenos can tear open acided walls - acided_hole.expand_hole(X) + if(acided_hole && (xeno_attacker.mob_size == MOB_SIZE_BIG || xeno_attacker.xeno_caste.caste_flags & CASTE_IS_STRONG)) //Strong and/or big xenos can tear open acided walls + acided_hole.expand_hole(xeno_attacker) else return ..() @@ -150,81 +161,45 @@ if(7) . += span_info("The inner sheath is gone. A blowtorch should finish off this wall.") -#define BULLETHOLE_STATES 10 //How many variations of bullethole patterns there are -#define BULLETHOLE_MAX 8 * 3 //Maximum possible bullet holes. -//Formulas. These don't need to be defines, but helpful green. Should likely reuse these for a base 8 icon system. -#define cur_increment(v) round((v-1)/8)+1 -#define base_dir(v,i) v-(i-1)*8 -#define cur_dir(v) round(v+round(v)/3) +/turf/closed/wall/update_overlays() + . = ..() + if(wall_integrity == max_integrity) + current_bulletholes = 0 + bullethole_variation = 0 + QDEL_NULL(bullethole_overlay) + return -/turf/closed/wall/update_icon() if(!damage_overlays[1]) //list hasn't been populated - generate_overlays() - - if(wall_integrity == max_integrity) //If the thing was healed for damage; otherwise update_icon() won't run at all, unless it was strictly damaged. - overlays.Cut() - damage_overlay = initial(damage_overlay) - current_bulletholes = initial(current_bulletholes) - bullethole_increment = initial(current_bulletholes) - bullethole_state = initial(current_bulletholes) - qdel(bullethole_overlay) - bullethole_overlay = null - return + var/alpha_inc = 256 / length(damage_overlays) - var/overlay = round((max_integrity - wall_integrity) / max_integrity * length(damage_overlays)) + 1 - if(overlay > length(damage_overlays)) overlay = length(damage_overlays) + for(var/i = 1; i <= length(damage_overlays); 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 - if(!damage_overlay || overlay != damage_overlay) - overlays -= damage_overlays[damage_overlay] - damage_overlay = overlay - overlays += damage_overlays[damage_overlay] + var/overlay = round((max_integrity - wall_integrity) / max_integrity * length(damage_overlays)) + 1 + if(overlay > length(damage_overlays)) + overlay = length(damage_overlays) - if(current_bulletholes > BULLETHOLE_MAX) //Could probably get away with a unique layer, but let's keep it standardized. - overlays -= bullethole_overlay //We need this to be the top layer, no matter what, but only if the layer is at max bulletholes. - overlays += bullethole_overlay + . += damage_overlays[overlay] if(current_bulletholes && current_bulletholes <= BULLETHOLE_MAX) - overlays -= bullethole_overlay - if(!bullethole_overlay) - bullethole_state = rand(1, BULLETHOLE_STATES) - bullethole_overlay = image('icons/effects/bulletholes.dmi', src, "bhole_[bullethole_state]_[bullethole_increment]") - //for(var/mob/M in view(7)) to_chat(M, bullethole_overlay) - if(cur_increment(current_bulletholes) > bullethole_increment) bullethole_overlay.icon_state = "bhole_[bullethole_state]_[++bullethole_increment]" - - var/base_direction = base_dir(current_bulletholes,bullethole_increment) - var/current_direction = cur_dir(base_direction) - setDir(current_direction) - /*Hack. Image overlays behave as the parent object, so that means they are also attached to it and follow its directional. - Luckily, it doesn't matter what direction the walls are set to, they link together via icon_state it seems. - But I haven't thoroughly tested it.*/ - overlays += bullethole_overlay - //to_chat(world, span_debuginfo("Increment: [bullethole_increment], Direction: [current_direction]")) - -#undef BULLETHOLE_STATES -#undef BULLETHOLE_MAX -#undef cur_increment -#undef base_dir -#undef cur_dir - -/turf/closed/wall/proc/generate_overlays() - var/alpha_inc = 256 / length(damage_overlays) - - for(var/i = 1; i <= length(damage_overlays); 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 + if(!bullethole_variation) + bullethole_variation = rand(1, BULLETHOLE_STATES) + bullethole_overlay = image('icons/effects/bulletholes.dmi', src, "bhole_[bullethole_variation]_[current_bulletholes]") + . += bullethole_overlay ///Applies damage to the wall -/turf/closed/wall/proc/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", armour_penetration = 0) +/turf/closed/wall/proc/take_damage(damage_amount, damage_type = BRUTE, armor_type = null, armour_penetration = 0) if(resistance_flags & INDESTRUCTIBLE) //Hull is literally invincible return if(!damage_amount) return - if(damage_flag) - damage_amount = modify_by_armor(damage_amount, damage_flag, armour_penetration) + if(armor_type) + damage_amount = modify_by_armor(damage_amount, armor_type, armour_penetration) wall_integrity = max(0, wall_integrity - damage_amount) @@ -315,6 +290,8 @@ /turf/closed/wall/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!ishuman(user)) to_chat(user, span_warning("You don't have the dexterity to do this!")) @@ -353,7 +330,7 @@ else if(resistance_flags & INDESTRUCTIBLE) to_chat(user, "[span_warning("[src] is much too tough for you to do anything to it with [I]")].") - else if(istype(I, /obj/item/tool/pickaxe/plasmacutter) && !user.do_actions) + else if(isplasmacutter(I) && !user.do_actions) return else if(wall_integrity < max_integrity && iswelder(I)) @@ -522,3 +499,34 @@ /turf/closed/wall/dissolvability(acid_strength) return 0.5 + +/turf/closed/wall/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_WALL_SLAM_DAMAGE, is_sharp = FALSE) + if(!isliving(grab.grabbed_thing)) + return + + var/mob/living/grabbed_mob = grab.grabbed_thing + step_towards(grabbed_mob, src) + var/damage = (user.skills.getRating(SKILL_CQC) * CQC_SKILL_DAMAGE_MOD) + var/state = user.grab_state + switch(state) + if(GRAB_PASSIVE) + damage += base_damage + grabbed_mob.visible_message(span_warning("[user] slams [grabbed_mob] against [src]!")) + log_combat(user, grabbed_mob, "slammed", "", "against [src]") + if(GRAB_AGGRESSIVE) + damage += base_damage * 1.5 + grabbed_mob.visible_message(span_danger("[user] bashes [grabbed_mob] against [src]!")) + log_combat(user, grabbed_mob, "bashed", "", "against [src]") + if(prob(50)) + grabbed_mob.Paralyze(2 SECONDS) + user.drop_held_item() + if(GRAB_NECK) + damage += base_damage * 2 + grabbed_mob.visible_message(span_danger("[user] crushes [grabbed_mob] against [src]!")) + log_combat(user, grabbed_mob, "crushed", "", "against [src]") + grabbed_mob.Paralyze(2 SECONDS) + user.drop_held_item() + grabbed_mob.apply_damage(damage, blocked = MELEE, updating_health = TRUE) + take_damage(damage, BRUTE, MELEE) + playsound(src, 'sound/weapons/heavyhit.ogg', 40) + return TRUE diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index be8f8fb6b3253..9a5e144de5ab5 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -82,6 +82,8 @@ flag = R_DBRANKS if("LOG") flag = R_LOG + if("POLLS") + flag = R_POLLS if("EVERYTHING") flag = R_EVERYTHING if("@") diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 5d136bb5acf61..9ca6f86458135 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -196,6 +196,14 @@ log_admin("[key_name(usr)] revived [key_name(L)].") message_admins("[ADMIN_TPMONTY(usr)] revived [ADMIN_TPMONTY(L)].") +/client/proc/cmd_admin_check_contents(mob/living/M in GLOB.mob_list) + set category = "Debug" + set name = "Check Contents" + + var/list/L = M.GetAllContents() + for(var/t in L) + to_chat(usr, "[t] [ADMIN_VV(t)] [ADMIN_TAG(t)]", confidential = TRUE) + SSblackbox.record_feedback("tally", "admin_verb", 1, "Check Contents") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! /datum/admins/proc/toggle_sleep(mob/living/L in GLOB.mob_living_list) set category = null @@ -615,6 +623,17 @@ else if(C.mob.stat == DEAD && (C.prefs.toggles_chat & CHAT_DEAD)) to_chat(C, msg) +/client/proc/object_say(obj/O in world) + set category = "Admin" + set name = "OSay" + set desc = "Makes an object say something." + var/message = tgui_input_text(usr, "What do you want the message to be?", "Make Sound", encode = FALSE) + if(!message) + return + O.say(message, sanitize = FALSE) + log_admin("[key_name(usr)] made [O] at [AREACOORD(O)] say \"[message]\"") + message_admins(span_adminnotice("[key_name_admin(usr)] made [O] at [AREACOORD(O)]. say \"[message]\"")) + SSblackbox.record_feedback("tally", "admin_verb", 1, "Object Say") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! /datum/admins/proc/jump() set category = "Admin" @@ -1213,11 +1232,11 @@ if(!check_rights(R_ADMIN)) return - for(var/obj/vehicle/multitile/root/cm_armored/CA AS in GLOB.tank_list) - CA.remove_all_players() + for(var/obj/vehicle/sealed/armored/armor AS in GLOB.tank_list) + armor.dump_mobs(TRUE) - log_admin("[key_name(usr)] forcibly removed all players from [CA].") - message_admins("[ADMIN_TPMONTY(usr)] forcibly removed all players from [CA].") + log_admin("[key_name(usr)] forcibly removed all players from [armor].") + message_admins("[ADMIN_TPMONTY(usr)] forcibly removed all players from [armor].") /// Admin verb to delete a squad completely /datum/admins/proc/delete_squad() diff --git a/code/modules/admin/callproc.dm b/code/modules/admin/callproc.dm index d17d109c55395..f26b0ee09e72e 100644 --- a/code/modules/admin/callproc.dm +++ b/code/modules/admin/callproc.dm @@ -86,185 +86,102 @@ GLOBAL_PROTECT(AdminProcCallHandler) usr = lastusr handler.remove_caller(user) -GLOBAL_VAR(AdminProcCaller) -GLOBAL_PROTECT(AdminProcCaller) -GLOBAL_VAR_INIT(AdminProcCallCount, FALSE) -GLOBAL_PROTECT(AdminProcCallCount) -GLOBAL_VAR(LastAdminCalledTargetRef) -GLOBAL_PROTECT(LastAdminCalledTargetRef) -GLOBAL_VAR(LastAdminCalledTarget) -GLOBAL_PROTECT(LastAdminCalledTarget) -GLOBAL_VAR(LastAdminCalledProc) -GLOBAL_PROTECT(LastAdminCalledProc) -GLOBAL_LIST_EMPTY(AdminProcCallSpamPrevention) -GLOBAL_PROTECT(AdminProcCallSpamPrevention) - - -/datum/admins/proc/proccall_atom(datum/A as null|area|mob|obj|turf) - set category = null - set name = "Atom ProcCall" - set waitfor = FALSE - - if(!check_rights(R_DEBUG)) - return - - /// Holds a reference to the client incase something happens to them - var/client/starting_client = usr.client - - var/procname = input("Proc name, eg: attack_hand", "Proc:", null) as text|null - if(!procname) - return - - if(!hascall(A, procname)) - to_chat(starting_client, "Error: callproc_datum(): type [A.type] has no proc named [procname].") - return - - var/list/lst = starting_client.holder.get_callproc_args() - if(!lst) - return - - if(!A || !IsValidSrc(A)) - to_chat(starting_client, span_warning("Error: callproc_datum(): owner of proc no longer exists.")) - return - - log_admin("[key_name(usr)] called [A]'s [procname]() with [length(lst) ? "the arguments [list2params(lst)]" : "no arguments"].") - message_admins("[ADMIN_TPMONTY(usr)] called [A]'s [procname]() with [length(lst) ? "the arguments [list2params(lst)]" : "no arguments"].") - admin_ticket_log(A, "[key_name_admin(usr)] called [A]'s [procname]() with [length(lst) ? "the arguments [list2params(lst)]" : "no arguments"].") - - var/returnval = WrapAdminProcCall(A, procname, lst) // Pass the lst as an argument list to the proc - . = starting_client.holder.get_callproc_returnval(returnval, procname) - if(.) - to_chat(usr, .) - - -/datum/admins/proc/proccall_advanced() +/client/proc/callproc() set category = "Debug" set name = "Advanced ProcCall" set waitfor = FALSE + callproc_blocking() +/client/proc/callproc_blocking(list/get_retval) if(!check_rights(R_DEBUG)) return - var/datum/target = null - var/targetselected = 0 - var/returnval = null + var/datum/target + var/targetselected = FALSE + var/returnval - switch(alert("Proc owned by something?",, "Yes", "No")) + switch(tgui_alert(usr,"Proc owned by something?",,list("Yes","No"))) if("Yes") targetselected = TRUE - var/list/value = usr.client.vv_get_value(default_class = VV_ATOM_REFERENCE, classes = list(VV_ATOM_REFERENCE, VV_DATUM_REFERENCE, VV_MOB_REFERENCE, VV_CLIENT)) - if(!value["class"] || !value["value"]) + var/list/value = vv_get_value(default_class = VV_ATOM_REFERENCE, classes = list(VV_ATOM_REFERENCE, VV_DATUM_REFERENCE, VV_MOB_REFERENCE, VV_CLIENT, VV_MARKED_DATUM, VV_TEXT_LOCATE, VV_PROCCALL_RETVAL)) + if (!value["class"] || !value["value"]) return target = value["value"] + if(!istype(target)) + to_chat(usr, span_danger("Invalid target."), confidential = TRUE) + return if("No") target = null targetselected = FALSE - var/procname = input("Proc path, eg: /proc/attack_hand(mob/living/user)") - if(!procname) + var/procpath = input("Proc path, eg: /proc/fake_blood","Path:", null) as text|null + if(!procpath) return //strip away everything but the proc name - var/list/proclist = splittext(procname, "/") - if(!length(proclist)) + var/list/proclist = splittext(procpath, "/") + if (!length(proclist)) return - procname = proclist[length(proclist)] - - var/proctype = "proc" - if("verb" in proclist) - proctype = "verb" - + var/procname = proclist[proclist.len] + var/proctype = ("verb" in proclist) ? "verb" :"proc" - var/procpath - if(targetselected && !hascall(target, procname)) - to_chat(usr, - type = MESSAGE_TYPE_DEBUG, - html = "Error: callproc(): type [target.type] has no [proctype] named [procname].",) - return - else if(!targetselected) - procpath = text2path("/[proctype]/[procname]") - if(!procpath) - to_chat(usr, - type = MESSAGE_TYPE_DEBUG, - html = "Error: callproc(): proc [procname] does not exist. (Did you forget the /proc/ part?)") + if(targetselected) + if(!hascall(target, procname)) + to_chat(usr, span_warning("Error: callproc(): type [target.type] has no [proctype] named [procpath]."), confidential = TRUE) + return + else + procpath = "/[proctype]/[procname]" + if(!text2path(procpath)) + to_chat(usr, span_warning("Error: callproc(): [procpath] does not exist."), confidential = TRUE) return - var/list/lst = usr.client.holder.get_callproc_args() + var/list/lst = get_callproc_args() if(!lst) return if(targetselected) if(!target) - to_chat(usr, - type = MESSAGE_TYPE_DEBUG, - html = "Error: callproc(): owner of proc no longer exists.") + to_chat(usr, "Error: callproc(): owner of proc no longer exists.", confidential = TRUE) return - log_admin("[key_name(usr)] called [target]'s [procname]() with [length(lst) ? "the arguments [list2params(lst)]" : "no arguments"].") - message_admins("[ADMIN_TPMONTY(usr)] called [target]'s [procname]() with [length(lst) ? "the arguments [list2params(lst)]" : "no arguments"].") - admin_ticket_log(target, "[key_name(usr)] called [target]'s [procname]() with [length(lst) ? "the arguments [list2params(lst)]" : "no arguments"].") + var/msg = "[key_name(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]." + log_admin(msg) + message_admins(msg) //Proccall announce removed. + admin_ticket_log(target, msg) returnval = WrapAdminProcCall(target, procname, lst) // Pass the lst as an argument list to the proc else //this currently has no hascall protection. wasn't able to get it working. - log_admin("[key_name(usr)] called [procname]() with [length(lst) ? "the arguments [list2params(lst)]" : "no arguments"].") - message_admins("[ADMIN_TPMONTY(usr)] called [procname]() with [length(lst) ? "the arguments [list2params(lst)]" : "no arguments"].") - returnval = WrapAdminProcCall(GLOBAL_PROC, procpath, lst) // Pass the lst as an argument list to the proc - - . = usr.client.holder.get_callproc_returnval(returnval, procname) + log_admin("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") + message_admins("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") //Proccall announce removed. + returnval = WrapAdminProcCall(GLOBAL_PROC, procname, lst) // Pass the lst as an argument list to the proc + SSblackbox.record_feedback("tally", "admin_verb", 1, "Advanced ProcCall") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + if(get_retval) + get_retval += returnval + . = get_callproc_returnval(returnval, procname) if(.) - to_chat(usr, .) - - -/datum/admins/proc/get_callproc_returnval(returnval, procname) - . = "" - if(islist(returnval)) - var/list/returnedlist = returnval - . = "" - if(length(returnedlist)) - var/assoc_check = returnedlist[1] - if(istext(assoc_check) && (returnedlist[assoc_check] != null)) - . += "[procname] returned an associative list:" - for(var/key in returnedlist) - . += "\n[key] = [returnedlist[key]]" + to_chat(usr, ., confidential = TRUE) - else - . += "[procname] returned a list:" - for(var/elem in returnedlist) - . += "\n[elem]" - else - . = "[procname] returned an empty list" - . += "" - - else - . = "[procname] returned: [!isnull(returnval) ? returnval : "null"]" - - -/datum/admins/proc/get_callproc_args() - var/argnum = input("Number of arguments", "Number:", 0) as num|null - if(isnull(argnum)) - return - - . = list() - var/list/named_args = list() - while(argnum--) - var/named_arg = input("Leave blank for positional argument. Positional arguments will be considered as if they were added first.", "Named argument") as text|null - var/value = usr.client.vv_get_value(restricted_classes = list(VV_RESTORE_DEFAULT)) - if (!value["class"]) - return - if(named_arg) - named_args[named_arg] = value["value"] - else - . += value["value"] - if(LAZYLEN(named_args)) - . += named_args +GLOBAL_VAR(AdminProcCaller) +GLOBAL_PROTECT(AdminProcCaller) +GLOBAL_VAR_INIT(AdminProcCallCount, FALSE) +GLOBAL_PROTECT(AdminProcCallCount) +GLOBAL_VAR(LastAdminCalledTargetRef) +GLOBAL_PROTECT(LastAdminCalledTargetRef) +GLOBAL_VAR(LastAdminCalledTarget) +GLOBAL_PROTECT(LastAdminCalledTarget) +GLOBAL_VAR(LastAdminCalledProc) +GLOBAL_PROTECT(LastAdminCalledProc) +GLOBAL_LIST_EMPTY(AdminProcCallSpamPrevention) +GLOBAL_PROTECT(AdminProcCallSpamPrevention) +/// Wrapper for proccalls where the datum is flagged as vareditted /proc/WrapAdminProcCall(datum/target, procname, list/arguments) if(target && procname == "Del") - to_chat(usr, "Calling Del() is not allowed") + to_chat(usr, "Calling Del() is not allowed", confidential = TRUE) return if(target != GLOBAL_PROC && !target.CanProcCall(procname)) - to_chat(usr, "Proccall on [target.type]/proc/[procname] is disallowed!") + to_chat(usr, "Proccall on [target.type]/proc/[procname] is disallowed!", confidential = TRUE) return var/current_caller = GLOB.AdminProcCaller var/user_identifier = usr ? usr.client?.ckey : GLOB.AdminProcCaller @@ -276,7 +193,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) CRASH("WrapAdminProcCall with no ckey: [target] [procname] [english_list(arguments)]") if(!is_remote_handler && current_caller && current_caller != user_identifier) - to_chat(usr, span_adminnotice("Another set of admin called procs are still running. Try again later.")) + to_chat(usr, span_adminnotice("Another set of admin called procs are still running. Try again later."), confidential = TRUE) return GLOB.LastAdminCalledProc = procname @@ -293,15 +210,14 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) else . = world.WrapAdminProcCall(target, procname, arguments) - +//adv proc call this, ya nerds /world/proc/WrapAdminProcCall(datum/target, procname, list/arguments) if(target == GLOBAL_PROC) - return call(procname)(arglist(arguments)) + return call("/proc/[procname]")(arglist(arguments)) else if(target != world) return call(target, procname)(arglist(arguments)) else - log_admin_private("[key_name(usr)] attempted to call world/proc/[procname] with arguments: [english_list(arguments)]") - + log_admin("[key_name(usr)] attempted to call world/proc/[procname] with arguments: [english_list(arguments)]") /proc/IsAdminAdvancedProcCall() #ifdef TESTING @@ -309,3 +225,77 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) #else return (GLOB.AdminProcCaller && GLOB.AdminProcCaller == usr?.client?.ckey) || (GLOB.AdminProcCallHandler && usr == GLOB.AdminProcCallHandler) #endif + +/client/proc/callproc_datum(datum/A as null|area|mob|obj|turf) + set category = "Debug" + set name = "Atom ProcCall" + set waitfor = FALSE + + if(!check_rights(R_DEBUG)) + return + + var/procname = input("Proc name, eg: fake_blood","Proc:", null) as text|null + if(!procname) + return + if(!hascall(A,procname)) + to_chat(usr, "Error: callproc_datum(): type [A.type] has no proc named [procname].", confidential = TRUE) + return + var/list/lst = get_callproc_args() + if(!lst) + return + + if(!A || !is_valid_src(A)) + to_chat(usr, span_warning("Error: callproc_datum(): owner of proc no longer exists."), confidential = TRUE) + return + log_admin("[key_name(src)] called [A]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") + var/msg = "[key_name(src)] called [A]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]." + message_admins(msg) + admin_ticket_log(A, msg) + SSblackbox.record_feedback("tally", "admin_verb", 1, "Atom ProcCall") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + + var/returnval = WrapAdminProcCall(A, procname, lst) // Pass the lst as an argument list to the proc + . = get_callproc_returnval(returnval,procname) + if(.) + to_chat(usr, ., confidential = TRUE) + +/client/proc/get_callproc_args() + var/argnum = input("Number of arguments","Number:",0) as num|null + if(isnull(argnum)) + return + + . = list() + var/list/named_args = list() + while(argnum--) + var/named_arg = input("Leave blank for positional argument. Positional arguments will be considered as if they were added first.", "Named argument") as text|null + var/value = vv_get_value(restricted_classes = list(VV_RESTORE_DEFAULT)) + if (!value["class"]) + return + if(named_arg) + named_args[named_arg] = value["value"] + else + . += LIST_VALUE_WRAP_LISTS(value["value"]) + if(LAZYLEN(named_args)) + . += named_args + +/client/proc/get_callproc_returnval(returnval,procname) + . = "" + if(islist(returnval)) + var/list/returnedlist = returnval + . = "" + if(returnedlist.len) + var/assoc_check = returnedlist[1] + if(istext(assoc_check) && (returnedlist[assoc_check] != null)) + . += "[procname] returned an associative list:" + for(var/key in returnedlist) + . += "\n[key] = [returnedlist[key]]" + + else + . += "[procname] returned a list:" + for(var/elem in returnedlist) + . += "\n[elem]" + else + . = "[procname] returned an empty list" + . += "" + + else + . = "[procname] returned: [!isnull(returnval) ? html_encode(returnval) : "null"]" diff --git a/code/modules/admin/debug_verbs.dm b/code/modules/admin/debug_verbs.dm index 58a94264185ac..6112387515e61 100644 --- a/code/modules/admin/debug_verbs.dm +++ b/code/modules/admin/debug_verbs.dm @@ -158,7 +158,7 @@ else for(var/i in 1 to amount) var/atom/A = new chosen(T) - A.flags_atom |= ADMIN_SPAWNED + A.atom_flags |= ADMIN_SPAWNED log_admin("[key_name(usr)] spawned [amount] x [chosen] at [AREACOORD(usr)]") SSblackbox.record_feedback("tally", "admin_verb", 1, "Spawn Atom") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -247,7 +247,7 @@ return var/dat = "
" - for(var/i in L.get_contents()) + for(var/i in L.GetAllContents()) var/atom/A = i dat += "[A] [ADMIN_VV(A)]
" diff --git a/code/modules/admin/fun_verbs.dm b/code/modules/admin/fun_verbs.dm index 9ac5cfc7413a9..26d9ccf0a5d57 100644 --- a/code/modules/admin/fun_verbs.dm +++ b/code/modules/admin/fun_verbs.dm @@ -54,16 +54,19 @@ if(!check_rights(R_FUN)) return - var/customname = tgui_input_text(usr, "What do you want it to be called?.", "Queen Mother Report", "Queen Mother", encode = FALSE) + var/customname = tgui_input_text(usr, "What do you want the title of this report to be?", "Report Title", "Queen Mother Directive", encode = FALSE) var/input = tgui_input_text(usr, "This should be a message from the ruler of the Xenomorph race.", "Queen Mother Report", "", multiline = TRUE, encode = FALSE) if(!input || !customname) return - var/msg = "

[customname]


[span_warning("[input]")]

" for(var/i in (GLOB.xeno_mob_list + GLOB.observer_list)) var/mob/M = i - to_chat(M, msg) + to_chat(M, assemble_alert( + title = customname, + message = input, + color_override = "purple" + )) log_admin("[key_name(usr)] created a Queen Mother report: [input]") message_admins("[ADMIN_TPMONTY(usr)] created a Queen Mother report.") @@ -79,7 +82,7 @@ for(var/mob/living/carbon/xenomorph/xenotorouny in GLOB.xeno_mob_list) if(!isliving(xenotorouny)) return - xenotorouny.is_a_rouny = !xenotorouny.is_a_rouny + xenotorouny.xeno_flags ^= XENO_ROUNY /datum/admins/proc/hive_status() @@ -137,7 +140,9 @@ var/customname = tgui_input_text(usr, "Pick a title for the report.", "Title", "TGMC Update", encode = FALSE) + var/customsubtitle = tgui_input_text(usr, "Pick a subtitle for the report.", "Subtitle", "", encode = FALSE) var/input = tgui_input_text(usr, "Please enter anything you want. Anything. Serious.", "What?", "", multiline = TRUE, encode = FALSE) + var/override = tgui_input_list(usr, "Pick a color for the report.", "Color", faction_alert_colors - "default", default = "blue") if(!input || !customname) return @@ -147,9 +152,9 @@ switch(tgui_alert(usr, "Should this be announced to the general population?", "Announce", list("Yes", "No", "Cancel"))) if("Yes") - priority_announce(input, customname, sound = 'sound/AI/commandreport.ogg'); + priority_announce(input, customname, customsubtitle, sound = 'sound/AI/commandreport.ogg', color_override = override); if("No") - priority_announce("New update available at all communication consoles.", type = ANNOUNCEMENT_COMMAND, sound = 'sound/AI/commandreport.ogg') + priority_announce("New update available at all communication consoles.", "Classified Transmission Received", type = ANNOUNCEMENT_PRIORITY, sound = 'sound/AI/commandreport.ogg') else return @@ -284,8 +289,12 @@ GLOB.custom_info = new_info - to_chat(world, "

Custom Information

") - to_chat(world, span_alert("[GLOB.custom_info]")) + to_chat(world, assemble_alert( + title = "Custom Information", + subtitle = "The following custom information has been set for this round.", + message = GLOB.custom_info, + color_override = "red" + )) log_admin("[key_name(usr)] has changed the custom event text: [GLOB.custom_info]") message_admins("[ADMIN_TPMONTY(usr)] has changed the custom event text.") @@ -299,8 +308,12 @@ to_chat(src, span_notice("There currently is no custom information set.")) return - to_chat(src, "

Custom Information

") - to_chat(src, span_alert("[GLOB.custom_info]")) + to_chat(src, assemble_alert( + title = "Custom Information", + subtitle = "The following custom information has been set for this round.", + message = GLOB.custom_info, + color_override = "red" + )) /datum/admins/proc/sound_file(S as sound) @@ -653,7 +666,7 @@ /proc/delayed_detonate_bomb_napalm(turf/impact) impact.ceiling_debris_check(3) explosion(impact, 2, 3, 4, 0, 6) - flame_radius(5, impact, 60, 30) + flame_radius(5, impact, 30, 60) /datum/admins/proc/drop_dynex_bomb() @@ -742,10 +755,10 @@ if(!istype(H)) return - var/hcolor = "#[num2hex(H.r_hair)][num2hex(H.g_hair)][num2hex(H.b_hair)]" - var/fcolor = "#[num2hex(H.r_facial)][num2hex(H.g_facial)][num2hex(H.b_facial)]" - var/ecolor = "#[num2hex(H.r_eyes)][num2hex(H.g_eyes)][num2hex(H.b_eyes)]" - var/bcolor = "#[num2hex(H.r_skin)][num2hex(H.g_skin)][num2hex(H.b_skin)]" + var/hcolor = "#[num2hex(H.r_hair, 2)][num2hex(H.g_hair, 2)][num2hex(H.b_hair, 2)]" + var/fcolor = "#[num2hex(H.r_facial, 2)][num2hex(H.g_facial, 2)][num2hex(H.b_facial, 2)]" + var/ecolor = "#[num2hex(H.r_eyes, 2)][num2hex(H.g_eyes, 2)][num2hex(H.b_eyes, 2)]" + var/bcolor = "#[num2hex(H.r_skin, 2)][num2hex(H.g_skin, 2)][num2hex(H.b_skin, 2)]" var/dat = "
" @@ -1093,15 +1106,15 @@ if("Low gravity") to_chat(GLOB.mob_living_list, span_highdanger("You feel gravity pull gently at you.")) for(var/mob/living/living_mob AS in GLOB.mob_living_list) - living_mob.set_jump_component(duration = 1 SECONDS, cooldown = 1.5 SECONDS, cost = 2, height = 32, flags_pass = PASS_LOW_STRUCTURE|PASS_FIRE|PASS_DEFENSIVE_STRUCTURE) + living_mob.set_jump_component(duration = 1 SECONDS, cooldown = 1.5 SECONDS, cost = 2, height = 32, pass_flags = PASS_LOW_STRUCTURE|PASS_FIRE|PASS_DEFENSIVE_STRUCTURE|PASS_TANK) if("John Woo") to_chat(GLOB.mob_living_list, span_highdanger("You feel gravity grow weak, and the urge to fly.")) for(var/mob/living/living_mob AS in GLOB.mob_living_list) - living_mob.set_jump_component(duration = 1 SECONDS, cooldown = 1.5 SECONDS, cost = 2, height = 48, sound = "jump", flags = JUMP_SPIN, flags_pass = HOVERING|PASS_PROJECTILE) + living_mob.set_jump_component(duration = 1 SECONDS, cooldown = 1.5 SECONDS, cost = 2, height = 48, sound = "jump", flags = JUMP_SPIN, pass_flags = HOVERING|PASS_PROJECTILE|PASS_TANK) if("Exceeding orbital velocity") to_chat(GLOB.mob_living_list, span_highdanger("You feel gravity fade to nothing. Will you even come back down?")) for(var/mob/living/living_mob AS in GLOB.mob_living_list) - living_mob.set_jump_component(duration = 4 SECONDS, cooldown = 6 SECONDS, cost = 0, height = 128, sound = "jump", flags = JUMP_SPIN, flags_pass = HOVERING|PASS_PROJECTILE) + living_mob.set_jump_component(duration = 4 SECONDS, cooldown = 6 SECONDS, cost = 0, height = 128, sound = "jump", flags = JUMP_SPIN, pass_flags = HOVERING|PASS_PROJECTILE|PASS_TANK) else return diff --git a/code/modules/admin/holder.dm b/code/modules/admin/holder.dm index 1d9c8020673c7..9ee8dd76126af 100644 --- a/code/modules/admin/holder.dm +++ b/code/modules/admin/holder.dm @@ -22,7 +22,8 @@ var/ghost_interact = FALSE ///Whether this admin is invisiminning var/invisimined = FALSE - + /// A lazylist of tagged datums, for quick reference with the View Tags verb + var/list/tagged_datums /datum/admins/New(datum/admin_rank/R, ckey, protected) if(IsAdminAdvancedProcCall()) @@ -295,6 +296,10 @@ GLOBAL_PROTECT(admin_verbs_default) /datum/admins/proc/toggle_adminhelp_sound, /datum/admins/proc/toggle_prayers, /datum/admins/proc/check_fingerprints, + /datum/admins/proc/display_tags, + /client/proc/mark_datum_mapview, + /client/proc/tag_datum_mapview, + /client/proc/cmd_admin_check_contents, /*displays the contents of an instance*/ /client/proc/smite, /client/proc/show_traitor_panel, /client/proc/cmd_select_equipment, @@ -302,7 +307,8 @@ GLOBAL_PROTECT(admin_verbs_default) /client/proc/private_message_panel, /client/proc/private_message_context, /client/proc/msay, - /client/proc/dsay + /client/proc/dsay, + /client/proc/object_say, ) //GLOBAL_LIST_INIT(admin_verbs_admin, world.AVadmin()) // moved to modular //GLOBAL_PROTECT(admin_verbs_admin) @@ -347,8 +353,8 @@ GLOBAL_PROTECT(admin_verbs_asay) /world/proc/AVdebug() return list( - /datum/admins/proc/proccall_advanced, - /datum/admins/proc/proccall_atom, + /client/proc/callproc, + /client/proc/callproc_datum, /datum/admins/proc/delete_all, /datum/admins/proc/generate_powernets, /datum/admins/proc/debug_mob_lists, @@ -460,7 +466,6 @@ GLOBAL_PROTECT(admin_verbs_server) /world/proc/AVpermissions() return list( /client/proc/edit_admin_permissions, - /client/proc/poll_panel, ) GLOBAL_LIST_INIT(admin_verbs_permissions, world.AVpermissions()) GLOBAL_PROTECT(admin_verbs_permissions) @@ -503,6 +508,13 @@ GLOBAL_PROTECT(admin_verbs_spawn) GLOBAL_LIST_INIT(admin_verbs_log, world.AVlog()) GLOBAL_PROTECT(admin_verbs_log) +/world/proc/AVpolls() + return list( + /client/proc/poll_panel, + ) +GLOBAL_LIST_INIT(admin_verbs_polls, world.AVpolls()) +GLOBAL_PROTECT(admin_verbs_polls) + /client/proc/add_admin_verbs() if(holder) var/rights = holder.rank.rights @@ -537,6 +549,8 @@ GLOBAL_PROTECT(admin_verbs_log) add_verb(src, GLOB.admin_verbs_spawn) if(rights & R_LOG) add_verb(src, GLOB.admin_verbs_log) + if(rights & R_POLLS) + add_verb(src, GLOB.admin_verbs_polls) /client/proc/remove_admin_verbs() diff --git a/code/modules/admin/panels/permission_panel.dm b/code/modules/admin/panels/permission_panel.dm index ee85e8d7219ff..6a8976bb3e6b7 100644 --- a/code/modules/admin/panels/permission_panel.dm +++ b/code/modules/admin/panels/permission_panel.dm @@ -420,14 +420,14 @@ return qdel(query_change_rank_flags) var/log_message = "Permissions of [rank_name] changed from[rights2text(old_flags," ")][rights2text(old_exclude_flags," ", "-")][rights2text(old_can_edit_flags," ", "*")] to[rights2text(new_flags," ")][rights2text(new_exclude_flags," ", "-")][rights2text(new_can_edit_flags," ", "*")]" - var/datum/db_query/query_change_rank_flags_log = SSdbcore.NewQuery({" + var/datum/db_query/query_change_rank_log_flags = SSdbcore.NewQuery({" INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) VALUES (:time, :round_id, :adminckey, INET_ATON(:adminip), 'change rank flags', :rank_name, :log) "}, list("time" = SQLtime(), "round_id" = "[GLOB.round_id]", "adminckey" = usr.ckey, "adminip" = usr.client.address, "rank_name" = rank_name, "log" = log_message)) - if(!query_change_rank_flags_log.warn_execute()) - qdel(query_change_rank_flags_log) + if(!query_change_rank_log_flags.warn_execute()) + qdel(query_change_rank_log_flags) return - qdel(query_change_rank_flags_log) + qdel(query_change_rank_log_flags) for(var/datum/admin_rank/R in GLOB.admin_ranks) if(R.name != D.rank.name) continue diff --git a/code/modules/admin/panels/poll_panel.dm b/code/modules/admin/panels/poll_panel.dm index 065c72e2b6b0b..b6b8f104b895c 100644 --- a/code/modules/admin/panels/poll_panel.dm +++ b/code/modules/admin/panels/poll_panel.dm @@ -1,7 +1,7 @@ /client/proc/poll_panel() set name = "Server Poll Management" set category = "Admin" - if(!check_rights(R_DBRANKS)) + if(!check_rights(R_POLLS)) return holder.poll_list_panel() SSblackbox.record_feedback("tally", "admin_verb", 1, "Server Poll Management") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/server_verbs.dm b/code/modules/admin/server_verbs.dm index 39c2f35433c36..86d67a8a80c09 100644 --- a/code/modules/admin/server_verbs.dm +++ b/code/modules/admin/server_verbs.dm @@ -444,6 +444,9 @@ if(!check_rights(R_SERVER)) return + if(tgui_alert(usr, "Are you sure you want to reload admins?", "Reload admins", list("Yes", "No")) != "Yes") + return + load_admins() log_admin("[key_name(src)] manually reloaded admins.") diff --git a/code/modules/admin/smites/bloodless.dm b/code/modules/admin/smites/bloodless.dm index 4effa3e1f7ce0..22833664bbf27 100644 --- a/code/modules/admin/smites/bloodless.dm +++ b/code/modules/admin/smites/bloodless.dm @@ -15,13 +15,13 @@ to_chat(target, span_userdanger("You feel your skin growing pale as your blood drains away..."), confidential = TRUE) switch (bloodlossamount) - if ("A little") - target.blood_volume = BLOOD_VOLUME_NOT_IDEAL //80% blood - if ("A lot") - target.blood_volume = BLOOD_VOLUME_OKAY //60% blood - if ("So fucking much") - target.blood_volume = BLOOD_VOLUME_BAD //40% blood - if ("FUCK THIS DUDE") - target.blood_volume = BLOOD_VOLUME_SURVIVE //20% blood + if("A little") + target.set_blood_volume(BLOOD_VOLUME_NOT_IDEAL) //80% blood + if("A lot") + target.set_blood_volume(BLOOD_VOLUME_OKAY) //60% blood + if("So fucking much") + target.set_blood_volume(BLOOD_VOLUME_BAD) //40% blood + if("FUCK THIS DUDE") + target.set_blood_volume(BLOOD_VOLUME_SURVIVE) //20% blood #undef BLOOD_VOLUME_NOT_IDEAL diff --git a/code/modules/admin/tag.dm b/code/modules/admin/tag.dm new file mode 100644 index 0000000000000..6e6fa7747cbfb --- /dev/null +++ b/code/modules/admin/tag.dm @@ -0,0 +1,111 @@ +/** + * Inserts the target_datum into [/datum/admins/var/tagged_datums], for later reference. + * + * Arguments: + * * target_datum - The datum you want to create a tag for + */ +/datum/admins/proc/add_tagged_datum(datum/target_datum) + if(LAZYFIND(tagged_datums, target_datum)) + to_chat(owner, span_warning("[target_datum] is already tagged!")) + return + + LAZYADD(tagged_datums, target_datum) + RegisterSignal(target_datum, COMSIG_QDELETING, PROC_REF(handle_tagged_del), override = TRUE) + to_chat(owner, span_notice("[target_datum] has been tagged.")) + +/// Get ahead of the curve with deleting +/datum/admins/proc/handle_tagged_del(datum/source) + SIGNAL_HANDLER + + if(owner) + to_chat(owner, span_boldnotice("Tagged datum [source] ([source.type]) has been deleted.")) + remove_tagged_datum(source, silent = TRUE) + +/** + * Attempts to remove the specified datum from [/datum/admins/var/tagged_datums] if it exists + * + * Arguments: + * * target_datum - The datum you want to remove from the tagged_datums list + * * silent - If TRUE, won't print messages to the owner's chat + */ +/datum/admins/proc/remove_tagged_datum(datum/target_datum, silent=FALSE) + if(!istype(target_datum)) + return + + if(LAZYFIND(tagged_datums, target_datum)) + LAZYREMOVE(tagged_datums, target_datum) + if(!silent) + to_chat(owner, span_notice("[target_datum] has been untagged.")) + else if(!silent) + to_chat(owner, span_warning("[target_datum] was not already tagged.")) + +/// Quick define for readability +#define TAG_DEL(X) "(UNTAG)" +#define TAG_MARK(X) "(MARK)" +#define TAG_SIMPLE_HEALTH(X) "Health: [X.health]" +#define TAG_CARBON_HEALTH(X) "Health: [X.health] (\ + [X.getBruteLoss()] \ + [X.getFireLoss()] \ + [X.getToxLoss()] \ + [X.getOxyLoss()]\ + [X.getCloneLoss() ? " [X.getCloneLoss()]" : ""])" + +/// Display all of the tagged datums +/datum/admins/proc/display_tags() + set category = "Debug" + set name = "View Tags" + + var/datum/admins/holdersrc = src + if (!istype(holdersrc, /datum/admins)) + holdersrc = usr.client.holder + if (!istype(holdersrc, /datum/admins)) + to_chat(usr, "Error: you are not an admin!", confidential = TRUE) + return + holdersrc.index_tags() + +/datum/admins/proc/index_tags() + var/index = 0 + var/list/dat = list("
Tag Menu

") + + dat += "
Refresh
" + if(LAZYLEN(tagged_datums)) + for(var/datum/iter_datum as anything in tagged_datums) + index++ + var/specific_info + + if(isnull(iter_datum)) + dat += "\t[index]: Null reference - Check runtime logs!" + stack_trace("Null datum found in tagged datum menu! User: [usr]") + continue + else if(iscarbon(iter_datum)) + var/mob/living/carbon/resolved_carbon = iter_datum + specific_info = "[TAG_CARBON_HEALTH(resolved_carbon)] | [AREACOORD(resolved_carbon)] [ADMIN_PP(iter_datum)] [ADMIN_FLW(iter_datum)]" + else if(isliving(iter_datum)) + var/mob/living/resolved_living = iter_datum + specific_info = "[TAG_SIMPLE_HEALTH(resolved_living)] | [AREACOORD(resolved_living)] [ADMIN_PP(iter_datum)] [ADMIN_FLW(iter_datum)]" + else if(ismob(iter_datum)) + var/atom/resolved_atom = iter_datum // needed for ADMIN_JMP + specific_info = "[AREACOORD(resolved_atom)] [ADMIN_PP(iter_datum)] [ADMIN_FLW(iter_datum)]" + else if(ismovable(iter_datum)) + var/atom/resolved_atom = iter_datum // needed for ADMIN_JMP + specific_info = "[AREACOORD(resolved_atom)] [ADMIN_FLW(iter_datum)]" + else if(isatom(iter_datum)) + var/atom/resolved_atom = iter_datum // needed for ADMIN_JMP + specific_info = "[AREACOORD(resolved_atom)] [ADMIN_JMP(resolved_atom)]" + else if(istype(iter_datum, /datum/controller/subsystem)) + var/datum/controller/subsystem/resolved_subsystem = iter_datum + specific_info = "[resolved_subsystem.stat_entry()]" + // else, it's just a /datum + + dat += "\t[index]: [iter_datum] | [specific_info] | [ADMIN_VV(iter_datum)] | [TAG_DEL(iter_datum)] | [iter_datum == marked_datum ? "Marked" : TAG_MARK(iter_datum)] " + dat += "\t([iter_datum.type])" + else + dat += "No datums tagged :(" + + dat = dat.Join("
") + usr << browse(dat, "window=tag;size=800x480") + +#undef TAG_DEL +#undef TAG_MARK +#undef TAG_SIMPLE_HEALTH +#undef TAG_CARBON_HEALTH diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 86bcc003ee04a..a772a0068b98a 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1107,9 +1107,9 @@ Status: [status ? status : "Unknown"] | Damage: [health ? health : "None"] message_admins("[ADMIN_TPMONTY(usr)] canceled an evacuation.") if("toggle_evac") - SSevacuation.flags_scuttle ^= FLAGS_EVACUATION_DENY - log_admin("[key_name(src)] has [SSevacuation.flags_scuttle & FLAGS_EVACUATION_DENY ? "forbidden" : "allowed"] ship-wide evacuation.") - message_admins("[ADMIN_TPMONTY(usr)] has [SSevacuation.flags_scuttle & FLAGS_EVACUATION_DENY ? "forbidden" : "allowed"] ship-wide evacuation.") + SSevacuation.scuttle_flags ^= FLAGS_EVACUATION_DENY + log_admin("[key_name(src)] has [SSevacuation.scuttle_flags & FLAGS_EVACUATION_DENY ? "forbidden" : "allowed"] ship-wide evacuation.") + message_admins("[ADMIN_TPMONTY(usr)] has [SSevacuation.scuttle_flags & FLAGS_EVACUATION_DENY ? "forbidden" : "allowed"] ship-wide evacuation.") if("force_evac") if(!SSevacuation.begin_launch()) @@ -1147,9 +1147,9 @@ Status: [status ? status : "Unknown"] | Damage: [health ? health : "None"] message_admins("[ADMIN_TPMONTY(usr)] forced the self-destruct system, destroying the [SSmapping.configs[SHIP_MAP].map_name].") if("toggle_dest") - SSevacuation.flags_scuttle ^= FLAGS_SELF_DESTRUCT_DENY - log_admin("[key_name(src)] has [SSevacuation.flags_scuttle & FLAGS_SELF_DESTRUCT_DENY ? "forbidden" : "allowed"] the self-destruct system.") - message_admins("[ADMIN_TPMONTY(usr)] has [SSevacuation.flags_scuttle & FLAGS_SELF_DESTRUCT_DENY ? "forbidden" : "allowed"] the self-destruct system.") + SSevacuation.scuttle_flags ^= FLAGS_SELF_DESTRUCT_DENY + log_admin("[key_name(src)] has [SSevacuation.scuttle_flags & FLAGS_SELF_DESTRUCT_DENY ? "forbidden" : "allowed"] the self-destruct system.") + message_admins("[ADMIN_TPMONTY(usr)] has [SSevacuation.scuttle_flags & FLAGS_SELF_DESTRUCT_DENY ? "forbidden" : "allowed"] the self-destruct system.") //RU TGMC EDIT else if(href_list["admincancelpredsd"]) @@ -1802,7 +1802,7 @@ Status: [status ? status : "Unknown"] | Damage: [health ? health : "None"] var/dat - for(var/i in L.get_contents()) + for(var/i in L.GetAllContents()) var/atom/A = i dat += "[A] [ADMIN_VV(A)]
" @@ -1844,7 +1844,7 @@ Status: [status ? status : "Unknown"] | Damage: [health ? health : "None"] change = input("Select the hair color.", "Edit Appearance") as null|color if(!change || !istype(H)) return - previous = "#[num2hex(H.r_hair)][num2hex(H.g_hair)][num2hex(H.b_hair)]" + previous = "#[num2hex(H.r_hair, 2)][num2hex(H.g_hair, 2)][num2hex(H.b_hair, 2)]" H.r_hair = hex2num(copytext(change, 2, 4)) H.g_hair = hex2num(copytext(change, 4, 6)) H.b_hair = hex2num(copytext(change, 6, 8)) @@ -1858,7 +1858,7 @@ Status: [status ? status : "Unknown"] | Damage: [health ? health : "None"] change = input("Select the facial hair color.", "Edit Appearance") as null|color if(!change || !istype(H)) return - previous = "#[num2hex(H.r_facial)][num2hex(H.g_facial)][num2hex(H.b_facial)]" + previous = "#[num2hex(H.r_facial, 2)][num2hex(H.g_facial, 2)][num2hex(H.b_facial, 2)]" H.r_facial = hex2num(copytext(change, 2, 4)) H.g_facial = hex2num(copytext(change, 4, 6)) H.b_facial = hex2num(copytext(change, 6, 8)) @@ -1866,7 +1866,7 @@ Status: [status ? status : "Unknown"] | Damage: [health ? health : "None"] change = input("Select the eye color.", "Edit Appearance") as null|color if(!change || !istype(H)) return - previous = "#[num2hex(H.r_eyes)][num2hex(H.g_eyes)][num2hex(H.b_eyes)]" + previous = "#[num2hex(H.r_eyes, 2)][num2hex(H.g_eyes, 2)][num2hex(H.b_eyes, 2)]" H.r_eyes = hex2num(copytext(change, 2, 4)) H.g_eyes = hex2num(copytext(change, 4, 6)) H.b_eyes = hex2num(copytext(change, 6, 8)) @@ -1874,7 +1874,7 @@ Status: [status ? status : "Unknown"] | Damage: [health ? health : "None"] change = input("Select the body color.", "Edit Appearance") as null|color if(!change || !istype(H)) return - previous = "#[num2hex(H.r_skin)][num2hex(H.g_skin)][num2hex(H.b_skin)]" + previous = "#[num2hex(H.r_skin, 2)][num2hex(H.g_skin, 2)][num2hex(H.b_skin, 2)]" H.r_skin = hex2num(copytext(change, 2, 4)) H.g_skin = hex2num(copytext(change, 4, 6)) H.b_skin = hex2num(copytext(change, 6, 8)) @@ -2153,7 +2153,7 @@ Status: [status ? status : "Unknown"] | Damage: [health ? health : "None"] else if(href_list["clearpollvotes"]) var/datum/poll_question/poll = locate(href_list["clearpollvotes"]) in GLOB.polls - poll.cleaR_DBRANKS_votes() + poll.cleaR_POLLS_votes() poll_management_panel(poll) else if(href_list["addpolloption"]) @@ -2182,6 +2182,41 @@ Status: [status ? status : "Unknown"] | Damage: [health ? health : "None"] message_admins(logtext) log_admin(logtext) + else if(href_list["cancelsummon"]) + GLOB.active_summons.Cut() + var/logtext = "[key_name(usr)] has cancelled all psychic summons" + message_admins(logtext) + log_admin(logtext) + + else if(href_list["tag_datum"]) + if(!check_rights(R_ADMIN)) + return + var/datum/datum_to_tag = locate(href_list["tag_datum"]) + if(!datum_to_tag) + return + return add_tagged_datum(datum_to_tag) + + else if(href_list["del_tag"]) + if(!check_rights(R_ADMIN)) + return + var/datum/datum_to_remove = locate(href_list["del_tag"]) + if(!datum_to_remove) + return + return remove_tagged_datum(datum_to_remove) + + else if(href_list["show_tags"]) + if(!check_rights(R_ADMIN)) + return + return display_tags() + + else if(href_list["mark_datum"]) + if(!check_rights(R_ADMIN)) + return + var/datum/datum_to_mark = locate(href_list["mark_datum"]) + if(!datum_to_mark) + return + return usr.client?.mark_datum(datum_to_mark) + else if(href_list["adminunbanish"]) if(!check_rights(R_ADMIN)) return diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm index cd985279eda76..3e019efc78ce5 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm @@ -85,7 +85,10 @@ return min(arglist(args)) /proc/_new(type, arguments) - return new type (arglist(arguments)) + var/datum/result = new type(arglist(arguments)) + if(istype(result)) + result.datum_flags |= DF_VAR_EDITED + return result /proc/_num2text(N, SigFig = 6) return num2text(N, SigFig) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 90020d5b28499..2cb79cbabe33a 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -430,6 +430,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) AddInteraction("Reopened by [key_name_admin(usr)]") log_admin_private("Ticket (#[id]) reopened by [key_name(usr)].") + to_chat(initiator, span_adminhelp("Your ticket has been reopened.")) TicketPanel() //can only be done from here, so refresh it @@ -451,11 +452,13 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) msg = "an admin ticket" AddInteraction("Made admin ticket by: [key_name_admin(usr)].") message_admins("Ticket [TicketHref("#[id]")] has been made [msg] by [ref].") + to_chat(initiator, span_adminhelp("Your ticket has been tiered to an adminhelp.")) else if(tier == TICKET_ADMIN) tier = TICKET_MENTOR msg = "a mentor ticket" AddInteraction("Made mentor ticket by: [key_name_admin(usr)].") message_staff("Ticket [TicketHref("#[id]")] has been made [msg] by [ref].") + to_chat(initiator, span_adminhelp("Your ticket has been tiered to a mentorhelp.")) if(!irc) for(var/client/X in GLOB.admins) if(!is_mentor(X)) @@ -483,6 +486,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) else if(tier == TICKET_ADMIN) message_admins("Ticket [TicketHref("#[id]")] has been unmarked by [ADMIN_TPMONTY(usr)].") log_admin_private("Ticket (#[id]) has been unmarked by [key_name(usr)].") + to_chat(initiator, span_adminhelp("Your ticket has been unmarked.")) return else if(alert("This ticket has already been marked by [marked], do you want to replace them?", "Confirmation", "Yes", "No") != "Yes") return @@ -492,6 +496,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) message_admins("Ticket [TicketHref("#[id]")] has been re-marked by [ADMIN_TPMONTY(usr)].") marked = usr.client.key log_admin_private("Ticket (#[id]) has been re-marked by [key_name(usr)].") + to_chat(initiator, span_adminhelp("Your ticket has been marked by another admin.")) return marked = usr.client.key if(tier == TICKET_MENTOR) @@ -499,6 +504,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) else if(tier == TICKET_ADMIN) message_admins("Ticket [TicketHref("#[id]")] has been marked by [ADMIN_TPMONTY(usr)].") log_admin_private("Ticket (#[id]) has been marked by [key_name(usr)].") + to_chat(initiator, span_adminhelp("Your ticket has been marked by an admin.")) //private @@ -529,6 +535,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) AddInteraction("Closed by [key_name_admin(usr)].") if(!silent) log_admin_private("Ticket (#[id]) closed by [key_name(usr)].") + to_chat(initiator, span_adminhelp("Your ticket has been closed.")) if(tier == TICKET_MENTOR) message_staff("Ticket [TicketHref("#[id]")] closed by [ref].") else if(tier == TICKET_ADMIN) diff --git a/code/modules/admin/verbs/centcom_podlauncher.dm b/code/modules/admin/verbs/centcom_podlauncher.dm index 6af9f59582dff..55a780d31cf5b 100644 --- a/code/modules/admin/verbs/centcom_podlauncher.dm +++ b/code/modules/admin/verbs/centcom_podlauncher.dm @@ -498,7 +498,7 @@ numTurfs = 0 //Counts the number of turfs that can be launched (remember, supplypods either launch all at once or one turf-worth of items at a time) acceptableTurfs = list() for (var/turf/T in orderedArea) //Go through the orderedArea list - if (typecache_filter_list_reverse(T.contents, length(ignored_atoms)) != 0) //if there is something in this turf that isnt in the blacklist, we consider this turf "acceptable" and add it to the acceptableTurfs list + if (length(typecache_filter_list_reverse(T.contents, ignored_atoms)) != 0) //if there is something in this turf that isnt in the blacklist, we consider this turf "acceptable" and add it to the acceptableTurfs list acceptableTurfs.Add(T) //Because orderedArea was an ordered linear list, acceptableTurfs will be as well. numTurfs ++ diff --git a/code/modules/admin/verbs/datumvars.dm b/code/modules/admin/verbs/datumvars.dm index 7b0068eebfe15..74dfd40698dce 100644 --- a/code/modules/admin/verbs/datumvars.dm +++ b/code/modules/admin/verbs/datumvars.dm @@ -1,1212 +1,58 @@ -#define VV_MSG_MARKED "
Marked Object" -#define VV_MSG_EDITED "
Var Edited" -#define VV_MSG_DELETED "
Deleted" - - /datum/proc/CanProcCall(procname) return TRUE - /datum/proc/can_vv_get(var_name) return TRUE -/client/can_vv_get(var_name) - if(var_name != "address" && var_name != "computer_id" || check_rights(R_DEBUG)) - return TRUE - return FALSE - - -/datum/proc/vv_edit_var(var_name, var_value) //called whenever a var is edited +/// Called when a var is edited with the new value to change to +/datum/proc/vv_edit_var(var_name, var_value) if(var_name == NAMEOF(src, vars)) return FALSE vars[var_name] = var_value datum_flags |= DF_VAR_EDITED return TRUE - /datum/proc/vv_get_var(var_name) switch(var_name) - if("vars") + if (NAMEOF(src, vars)) return debug_variable(var_name, list(), 0, src) return debug_variable(var_name, vars[var_name], 0, src) +/datum/proc/can_vv_mark() + return TRUE -/proc/get_all_of_type(T, subtypes = TRUE) - var/list/typecache = list() - typecache[T] = 1 - if(subtypes) - typecache = typecacheof(typecache) - . = list() - if(ispath(T, /mob)) - for(var/mob/thing in GLOB.mob_list) - if(typecache[thing.type]) - . += thing - CHECK_TICK - - else if(ispath(T, /obj/machinery/door)) - for(var/obj/machinery/door/thing in GLOB.machines) - if(typecache[thing.type]) - . += thing - CHECK_TICK - - else if(ispath(T, /obj/machinery)) - for(var/obj/machinery/thing in GLOB.machines) - if(typecache[thing.type]) - . += thing - CHECK_TICK - - else if(ispath(T, /obj)) - for(var/obj/thing in world) - if(typecache[thing.type]) - . += thing - CHECK_TICK - - else if(ispath(T, /atom/movable)) - for(var/atom/movable/thing in world) - if(typecache[thing.type]) - . += thing - CHECK_TICK - - else if(ispath(T, /turf)) - for(var/turf/thing in world) - if(typecache[thing.type]) - . += thing - CHECK_TICK - - else if(ispath(T, /atom)) - for(var/atom/thing in world) - if(typecache[thing.type]) - . += thing - CHECK_TICK - - else if(ispath(T, /client)) - for(var/client/thing in GLOB.clients) - if(typecache[thing.type]) - . += thing - CHECK_TICK - - else if(ispath(T, /datum)) - for(var/datum/thing) - if(typecache[thing.type]) - . += thing - CHECK_TICK - - else - for(var/datum/thing in world) - if(typecache[thing.type]) - . += thing - CHECK_TICK - +/** + * Gets all the dropdown options in the vv menu. + * When overriding, make sure to call . = ..() first and appent to the result, that way parent items are always at the top and child items are further down. + * Add seperators by doing VV_DROPDOWN_OPTION("", "---") + */ +/datum/proc/vv_get_dropdown() + SHOULD_CALL_PARENT(TRUE) -/proc/make_types_fancy(list/types) - if(ispath(types)) - types = list(types) . = list() - for(var/type in types) - var/typename = "[type]" - var/static/list/TYPES_SHORTCUTS = list( - /obj/effect/decal/cleanable = "CLEANABLE", - /obj/item/radio/headset = "HEADSET", - /obj/item/reagent_containers/food/drinks = "DRINK", //longest paths comes first - /obj/item/reagent_containers/food = "FOOD", - /obj/item/reagent_containers = "REAGENT_CONTAINERS", - /obj/item/organ = "ORGAN", - /obj/item = "ITEM", - /obj/machinery = "MACHINERY", - /obj/effect = "EFFECT", - /obj = "O", - /datum = "D", - /turf/open = "OPEN", - /turf/closed = "CLOSED", - /turf = "T", - /mob/living/carbon/human = "HUMAN", - /mob/living/carbon = "CARBON", - /mob/living/simple_animal = "SIMPLE", - /mob/living = "LIVING", - /mob = "M" - ) - for (var/tn in TYPES_SHORTCUTS) - if(copytext(typename, 1, length("[tn]/") + 1) == "[tn]/" /*findtextEx(typename,"[tn]/",1,2)*/ ) - typename = TYPES_SHORTCUTS[tn] + copytext(typename, length("[tn]/")) - break - .[typename] = type - - -/proc/get_fancy_list_of_atom_types() - var/static/list/pre_generated_list - if(!pre_generated_list) //init - pre_generated_list = make_types_fancy(typesof(/atom)) - return pre_generated_list - - -/proc/get_fancy_list_of_datum_types() - var/static/list/pre_generated_list - if(!pre_generated_list) //init - pre_generated_list = make_types_fancy(sortList(typesof(/datum) - typesof(/atom))) - return pre_generated_list - - -/proc/filter_fancy_list(list/L, filter as text) - var/list/matches = new - for(var/key in L) - var/value = L[key] - if(findtext("[key]", filter) || findtext("[value]", filter)) - matches[key] = value - return matches - + VV_DROPDOWN_OPTION("", "---") + VV_DROPDOWN_OPTION(VV_HK_CALLPROC, "Call Proc") + VV_DROPDOWN_OPTION(VV_HK_MARK, "Mark Object") + VV_DROPDOWN_OPTION(VV_HK_TAG, "Tag Datum") + VV_DROPDOWN_OPTION(VV_HK_DELETE, "Delete") + VV_DROPDOWN_OPTION(VV_HK_EXPOSE, "Show VV To Player") + VV_DROPDOWN_OPTION(VV_HK_ADDCOMPONENT, "Add Component/Element") + VV_DROPDOWN_OPTION(VV_HK_REMOVECOMPONENT, "Remove Component/Element") + VV_DROPDOWN_OPTION(VV_HK_MASS_REMOVECOMPONENT, "Mass Remove Component/Element") + +/** + * This proc is only called if everything topic-wise is verified. The only verifications that should happen here is things like permission checks! + * href_list is a reference, modifying it in these procs WILL change the rest of the proc in topic.dm of admin/view_variables! + * This proc is for "high level" actions like admin heal/set species/etc/etc. The low level debugging things should go in admin/view_variables/topic_basic.dm incase this runtimes. + */ +/datum/proc/vv_do_topic(list/href_list) + if(!usr || !usr.client || !usr.client.holder || !check_rights(NONE)) + return FALSE //This is VV, not to be called by anything else. + if(SEND_SIGNAL(src, COMSIG_VV_TOPIC, usr, href_list) & COMPONENT_VV_HANDLED) + return FALSE + return TRUE -//please call . = ..() first and append to the result, that way parent items are always at the top and child items are further down -//add separaters by doing . += "---" -/datum/proc/vv_get_dropdown() +/datum/proc/vv_get_header() . = list() - . += "---" - .["Call Proc"] = "?_src_=vars;[HrefToken()];[VV_HK_CALLPROC]=[REF(src)]" - .["Mark Object"] = "?_src_=vars;[HrefToken()];[VV_HK_MARK]=[REF(src)]" - .["Delete"] = "?_src_=vars;[HrefToken()];[VV_HK_DELETE]=[REF(src)]" - .["Show VV To Player"] = "?_src_=vars;[HrefToken()];[VV_HK_EXPOSE]=[REF(src)]" - - -/client/proc/debug_variables(datum/D in world) - set category = "Debug" - set name = "View Variables" - - if(!check_rights(R_VAREDIT)) - return - - var/static/cookieoffset = rand(1, 9999) //to force cookies to reset after the round. - - if(!D) - return - - var/islist = islist(D) - if(!islist && !istype(D)) - return - - 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/atomsnowflake = list() - - if(istype(D, /atom)) - var/atom/A = D - if(ismob(A)) - atomsnowflake += "[D]" - else - atomsnowflake += "[D]" - atomsnowflake += "
<< [dir2text(A.dir) || A.dir] >>" - if(isliving(A)) - atomsnowflake += "
<< [dir2text(A.dir) || A.dir] >>" - var/mob/living/M = A - atomsnowflake += {" -
[M.ckey || "No ckey"] / [M.real_name || "No real name"] -
- BRUTE:[M.getBruteLoss()] - FIRE:[M.getFireLoss()] - TOXIN:[M.getToxLoss()] - OXY:[M.getOxyLoss()] - CLONE:[M.getCloneLoss()] - BRAIN:[M.getBrainLoss()] - STAMINA:[M.getStaminaLoss()] - - "} - else if("name" in D.vars) - atomsnowflake += "[D]" - else - atomsnowflake += "[formatted_type]" - formatted_type = null - - var/marked - if(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() - if(islist) - dropdownoptions = list( - "---", - "Add Item" = "?_src_=vars;[HrefToken()];listadd=[refid]", - "Remove Nulls" = "?_src_=vars;[HrefToken()];listnulls=[refid]", - "Remove Dupes" = "?_src_=vars;[HrefToken()];listdupes=[refid]", - "Set len" = "?_src_=vars;[HrefToken()];listlen=[refid]", - "Shuffle" = "?_src_=vars;[HrefToken()];listshuffle=[refid]", - "Show VV To Player" = "?_src_=vars;[HrefToken()];expose=[refid]" - ) - else - dropdownoptions = D.vv_get_dropdown() - var/list/dropdownoptions_html = list() - - for(var/name in dropdownoptions) - var/link = dropdownoptions[name] - if(link) - dropdownoptions_html += "" - else - dropdownoptions_html += "" - - var/list/names = list() - if(!islist) - for(var/V in D.vars) - names += V - sleep(0.1 SECONDS)//For some reason, without this sleep, VVing will cause client to disconnect on certain objects. - - var/list/variable_html = list() - if(islist) - var/list/L = D - for(var/i in 1 to length(L)) - var/key = L[i] - var/value - if(IS_NORMAL_LIST(L) && !isnum(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] -
- [atomsnowflake.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") - - -/client/proc/vv_update_display(datum/D, span, content) - src << output("[span]:[content]", "variables[REF(D)].browser:replace_span") - - -#define VV_HTML_ENCODE(thing) (sanitize ? html_encode(thing) : thing) - -/proc/debug_variable(name, value, level, datum/DA = null, sanitize = TRUE) - var/header - if(DA) - if(islist(DA)) - var/index = name - if(value) - name = DA[name] //name is really the index until this line - else - value = DA[name] - header = "
  • (E) (C) (-) " - else - header = "
  • (E) (C) (M) " - else - header = "
  • " - - var/item - if(isnull(value)) - item = "[VV_HTML_ENCODE(name)] = [span_value("null")]" - - else if(istext(value)) - item = "[VV_HTML_ENCODE(name)] = [span_value("\"[VV_HTML_ENCODE(value)]\"")]" - - else if(isicon(value)) - item = "[VV_HTML_ENCODE(name)] = /icon ([span_value("[value]")])" - - else if(isfile(value)) - item = "[VV_HTML_ENCODE(name)] = [span_value("'[value]'")]" - - else if(istype(value, /datum)) - var/datum/D = value - if("[D]" != "[D.type]") //if the thing as a name var, lets use it. - item = "[VV_HTML_ENCODE(name)] [REF(value)] = [D] [D.type]" - else - item = "[VV_HTML_ENCODE(name)] [REF(value)] = [D.type]" - - else if(islist(value)) - var/list/L = value - var/list/items = list() - - if(istype(DA, /datum/controller/global_vars) && !DA.vv_edit_var(name, L)) - item = "[VV_HTML_ENCODE(name)] = /list ([length(L)])" - else if(length(L) > 0 && !(name == "underlays" || name == "overlays" || length(L) > (IS_NORMAL_LIST(L) ? 50 : 150))) - for(var/i in 1 to length(L)) - var/key = L[i] - var/val - if(IS_NORMAL_LIST(L) && !isnum(key)) - val = L[key] - if(isnull(val)) // we still want to display non-null false values, such as 0 or "" - val = key - key = i - - items += debug_variable(key, val, level + 1, sanitize = sanitize) - - item = "[VV_HTML_ENCODE(name)] = /list ([length(L)])
      [items.Join()]
    " - else - item = "[VV_HTML_ENCODE(name)] = /list ([length(L)])" - - else if(name in GLOB.bitfields) - var/list/flags = list() - for(var/i in GLOB.bitfields[name]) - if(value & GLOB.bitfields[name][i]) - flags += i - item = "[VV_HTML_ENCODE(name)] = [VV_HTML_ENCODE(jointext(flags, ", "))]" - else - item = "[VV_HTML_ENCODE(name)] = [span_value("[VV_HTML_ENCODE(value)]")]" - - return "[header][item]
  • " - -#undef VV_HTML_ENCODE - - -/client/proc/view_var_Topic(href, href_list, hsrc) - if(usr.client != src || !src.holder || !holder.CheckAdminHref(href, href_list)) - return - - - if(href_list["vars"]) - debug_variables(locate(href_list["vars"])) - - - else if(href_list["datumrefresh"]) - var/datum/DAT = locate(href_list["datumrefresh"]) - if(!DAT) //can't be an istype() because /client etc aren't datums - return - src.debug_variables(DAT) - - - else if(href_list[VV_HK_MARK]) - if(!check_rights(R_DEBUG)) - return - - var/datum/D = locate(href_list[VV_HK_MARK]) - if(!istype(D)) - return - mark_datum(D) - - - else if(href_list["proc_call"]) - if(!check_rights(R_DEBUG)) - return - - var/T = locate(href_list["proc_call"]) - - if(T) - usr.client.holder.proccall_atom(T) - - - else if(href_list["delete"]) - if(!check_rights(R_VAREDIT)) - return - - var/datum/D = locate(href_list["delete"]) - if(!istype(D)) - to_chat(usr, span_warning("Unable to locate item.")) - usr.client.holder.delete_atom(D) - if(isturf(D)) // show the turf that took its place - debug_variables(D) - - else if(href_list["regenerateicons"]) - if(!check_rights(R_DEBUG)) - return - - var/mob/M = locate(href_list["regenerateicons"]) in GLOB.mob_list - if(!ismob(M)) - return - M.regenerate_icons() - - - else if(href_list["expose"]) - if(!check_rights(R_ADMIN, FALSE)) - return - - var/thing = locate(href_list["expose"]) - if(!thing) - return - - var/value = vv_get_value(VV_CLIENT) - if(value["class"] != VV_CLIENT) - return - - var/client/C = value["value"] - if(!C) - return - - var/prompt = alert("Do you want to grant [C] access to view this VV window? (they will not be able to edit or change anything nor open nested vv windows unless they themselves are an admin)", "Confirm", "Yes", "No") - if(prompt != "Yes" || !usr.client) - return - - to_chat(C, "[usr.client.holder.fakekey ? "an Administrator" : "[usr.client.key]"] has granted you access to view a View Variables window") - C.debug_variables(thing) - - log_admin("Admin [key_name(usr)] showed [key_name(C)] a VV window of: [thing].") - message_admins("[ADMIN_TPMONTY(usr)] showed [key_name_admin(C)] a VV window.") - - - if(href_list["rename"]) - if(!check_rights(R_VAREDIT)) - return - - var/mob/M = locate(href_list["rename"]) in GLOB.mob_list - if(!istype(M)) - return - - var/old_name = M.real_name - var/new_name = input(usr, "What would you like to name this mob?", "Input a name", M.real_name) as text - new_name = noscript(new_name) - if(!new_name || !M) - return - - M.fully_replace_character_name(M.real_name, new_name) - vv_update_display(M, "name", new_name) - vv_update_display(M, "real_name", M.real_name || "No real name") - - log_admin("[key_name(usr)] renamed [old_name] to [key_name(M)].") - message_admins("[ADMIN_TPMONTY(usr)] renamed [old_name] to [ADMIN_TPMONTY(M)].") - - - else if(href_list["varnameedit"] && href_list["datumedit"]) - if(!check_rights(R_VAREDIT)) - return - - var/datum/D = locate(href_list["datumedit"]) - if(!istype(D, /datum)) - return - - if(!modify_variables(D, href_list["varnameedit"], 1)) - return - - switch(href_list["varnameedit"]) - if("name") - vv_update_display(D, "name", "[D]") - if("dir") - if(isatom(D)) - var/dir = D.vars["dir"] - vv_update_display(D, "dir", dir2text(dir) || dir) - if("ckey") - if(isliving(D)) - vv_update_display(D, "ckey", D.vars["ckey"] || "No ckey") - if("real_name") - if(isliving(D)) - vv_update_display(D, "real_name", D.vars["real_name"] || "No real name") - - - else if(href_list["varnamechange"] && href_list["datumchange"]) - if(!check_rights(R_VAREDIT)) - return - - var/D = locate(href_list["datumchange"]) - if(!istype(D, /datum)) - return - - modify_variables(D, href_list["varnamechange"], 0) - - - else if(href_list["varnamemass"] && href_list["datummass"]) - if(!check_rights(R_VAREDIT)) - return - - var/datum/D = locate(href_list["datummass"]) - if(!istype(D)) - return - - mass_modify(D, href_list["varnamemass"]) - - - else if(href_list["listedit"] && href_list["index"]) - var/index = text2num(href_list["index"]) - if(!index) - return - - var/list/L = locate(href_list["listedit"]) - if(!istype(L)) - return - - mod_list(L, null, "list", "contents", index, autodetect_class = TRUE) - - - else if(href_list["listchange"] && href_list["index"]) - var/index = text2num(href_list["index"]) - if(!index) - return - - var/list/L = locate(href_list["listchange"]) - if(!istype(L)) - return - - mod_list(L, null, "list", "contents", index, autodetect_class = FALSE) - - - else if(href_list["listremove"] && href_list["index"]) - var/index = text2num(href_list["index"]) - if(!index) - return - - var/list/L = locate(href_list["listremove"]) - if(!istype(L)) - return - - var/variable = L[index] - var/prompt = alert("Do you want to remove item number [index] from list?", "Confirm", "Yes", "No") - if(prompt != "Yes") - return - - L.Cut(index, index + 1) - - log_world("### ListVarEdit by [src]: /list's contents: REMOVED=[html_encode("[variable]")]") - log_admin("[key_name(src)] modified list's contents: REMOVED=[variable]") - message_admins("[ADMIN_TPMONTY(usr)] modified list's contents: REMOVED=[variable]") - - - else if(href_list["listadd"]) - var/list/L = locate(href_list["listadd"]) - if(!istype(L)) - return - - mod_list_add(L, null, "list", "contents") - - - else if(href_list["listdupes"]) - var/list/L = locate(href_list["listdupes"]) - if(!istype(L)) - return - - uniqueList_inplace(L) - log_world("### ListVarEdit by [src]: /list contents: CLEAR DUPES") - log_admin("[key_name(src)] modified list's contents: CLEAR DUPES") - message_admins("[ADMIN_TPMONTY(usr)] modified list's contents: CLEAR DUPES") - - - else if(href_list["listnulls"]) - var/list/L = locate(href_list["listnulls"]) - if(!istype(L)) - return - - listclearnulls(L) - log_world("### ListVarEdit by [src]: /list contents: CLEAR NULLS") - log_admin("[key_name(src)] modified list's contents: CLEAR NULLS") - message_admins("[ADMIN_TPMONTY(usr)] modified list's contents: CLEAR NULLS") - - - else if(href_list["listlen"]) - var/list/L = locate(href_list["listlen"]) - if(!istype(L)) - return - var/value = vv_get_value(VV_NUM) - if(value["class"] != VV_NUM) - return - - L.len = value["value"] - log_world("### ListVarEdit by [src]: /list len: [length(L)]") - log_admin("[key_name(src)] modified list's len: [length(L)]") - message_admins("[ADMIN_TPMONTY(usr)] modified list's len: [length(L)]") - - - else if(href_list["listshuffle"]) - var/list/L = locate(href_list["listshuffle"]) - if(!istype(L)) - return - - shuffle_inplace(L) - log_world("### ListVarEdit by [src]: /list contents: SHUFFLE") - log_admin("[key_name(src)] modified list's contents: SHUFFLE") - message_admins("[ADMIN_TPMONTY(usr)] modified list's contents: SHUFFLE") - - - else if(href_list["delall"]) - if(!check_rights(R_DEBUG|R_SERVER)) - return - - var/obj/O = locate(href_list["delall"]) - if(!isobj(O)) - return - - var/action_type = alert("Strict type ([O.type]) or type and all subtypes?", "Type", "Strict type", "Type and subtypes", "Cancel") - if(action_type == "Cancel" || !action_type) - return - - if(alert("Are you really sure you want to delete all objects of type [O.type]?", "Warning", "Yes", "No") != "Yes") - return - - if(alert("Second confirmation required. Delete?", "Warning", "Yes", "No") != "Yes") - return - - var/O_type = O.type - var/i = 0 - var/strict - switch(action_type) - if("Strict type") - strict = TRUE - for(var/obj/Obj in world) - if(Obj.type == O_type) - i++ - qdel(Obj) - CHECK_TICK - if(!i) - to_chat(usr, "No objects of this type exist") - return - if("Type and subtypes") - for(var/obj/Obj in world) - if(istype(Obj,O_type)) - i++ - qdel(Obj) - CHECK_TICK - if(!i) - to_chat(usr, "No objects of this type exist") - return - - log_admin("[key_name(usr)] deleted all objects of type[strict ? "" : " and subtypes"] of [O_type] ([i] objects deleted).") - message_admins("[ADMIN_TPMONTY(usr)] deleted all objects of type[strict ? "" : " and subtypes"] of [O_type] ([i] objects deleted).") - - - else if(href_list["addreagent"]) - if(!check_rights(R_VAREDIT)) - return - - var/atom/A = locate(href_list["addreagent"]) - - if(!A.reagents) - var/amount = input(usr, "Specify the reagent size of [A]", "Set Reagent Size", 50) as num - if(amount) - A.create_reagents(amount) - - if(A.reagents) - var/chosen_id - var/list/reagent_options = sortList(GLOB.chemical_reagents_list) - switch(alert(usr, "Choose a method.", "Add Reagents", "Enter ID", "Choose ID")) - if("Enter ID") - var/valid_id - while(!valid_id) - chosen_id = stripped_input(usr, "Enter the ID of the reagent you want to add.") - if(!chosen_id) //Get me out of here! - break - for(var/ID in reagent_options) - if(ID == chosen_id) - valid_id = TRUE - if(!valid_id) - to_chat(usr, span_warning("A reagent with that ID doesn't exist!")) - if("Choose ID") - chosen_id = input(usr, "Choose a reagent to add.", "Add Reagent") as null|anything in reagent_options - if(chosen_id) - var/amount = input(usr, "Choose the amount to add.", "Add Reagent", A.reagents.maximum_volume) as num - if(amount) - A.reagents.add_reagent(chosen_id, amount) - log_admin("[key_name(usr)] has added [amount] units of [chosen_id] to [A].") - message_admins("[ADMIN_TPMONTY(usr)] has added [amount] units of [chosen_id] to [A].") - - else if(href_list["modify_greyscale"] && check_rights(R_DEBUG)) - var/datum/greyscale_modify_menu/menu = new(locate(href_list["modify_greyscale"]), usr) - menu.ui_interact(usr) - return - - else if(href_list["filteredit"] && check_rights(R_VAREDIT)) - var/client/C = usr.client - C?.open_filter_editor(locate(href_list["filteredit"])) - return - - if(href_list["modify_particles"] && check_rights(R_VAREDIT)) - var/client/C = usr.client - C?.open_particle_editor(locate(href_list["modify_particles"])) - - else if(href_list["rotatedatum"]) - if(!check_rights(R_DEBUG)) - return - - var/atom/A = locate(href_list["rotatedatum"]) - if(!istype(A)) - to_chat(usr, "This can only be done to instances of type /atom") - return - - switch(href_list["rotatedir"]) - if("right") - A.setDir(turn(A.dir, -45)) - if("left") - A.setDir(turn(A.dir, 45)) - - vv_update_display(A, "dir", dir2text(A.dir)) - - log_admin("[key_name(usr)] rotated [A].") - - - else if(href_list["modtransform"]) - if(!check_rights(R_DEBUG)) - return - - var/atom/A = locate(href_list["modtransform"]) - if(!istype(A)) - return - - var/result = input(usr, "Choose the transformation to apply", "Modify Transform") as null|anything in list("Scale","Translate","Rotate") - var/matrix/M = A.transform - switch(result) - if("Scale") - var/x = input(usr, "Choose x mod", "Modify Transform") as null|num - var/y = input(usr, "Choose y mod", "Modify Transform") as null|num - if(x == 0 || y == 0) - if(alert("You've entered 0 as one of the values, are you sure?", "Modify Transform", "Yes", "No") != "Yes") - return - if(!isnull(x) && !isnull(y)) - A.transform = M.Scale(x,y) - if("Translate") - var/x = input(usr, "Choose x mod", "Modify Transform") as null|num - var/y = input(usr, "Choose y mod", "Modify Transform") as null|num - if(x == 0 && y == 0) - return - if(!isnull(x) && !isnull(y)) - A.transform = M.Translate(x,y) - if("Rotate") - var/angle = input(usr, "Choose angle to rotate", "Modify Transform") as null|num - if(angle == 0) - if(alert("You've entered 0 as one of the values, are you sure?", "Warning", "Yes", "No") != "Yes") - return - if(!isnull(angle)) - A.transform = M.Turn(angle) - - log_admin("[key_name(usr)] has used [result] transformation on [A].") - message_admins("[ADMIN_TPMONTY(usr)] has used [result] transformation on [A].") - - - else if(href_list["adjustDamage"] && href_list["mobToDamage"]) - if(!check_rights(R_FUN)) - return - - var/mob/living/L = locate(href_list["mobToDamage"]) in GLOB.mob_list - if(!istype(L)) - return - - var/Text = href_list["adjustDamage"] - - var/amount = input("Deal how much damage to mob? (Negative values here heal)","Adjust [Text]loss",0) as num - - if(!L) - return - - var/newamt - switch(Text) - if(BRUTE) - L.adjustBruteLoss(amount) - newamt = L.getBruteLoss() - if(BURN) - L.adjustFireLoss(amount) - newamt = L.getFireLoss() - if(TOX) - L.adjustToxLoss(amount) - newamt = L.getToxLoss() - if(OXY) - L.adjustOxyLoss(amount) - newamt = L.getOxyLoss() - if("brain") - L.adjustBrainLoss(amount) - newamt = L.getBrainLoss() - if(CLONE) - L.adjustCloneLoss(amount) - newamt = L.getCloneLoss() - if(STAMINA) - L.adjustStaminaLoss(amount) - newamt = L.getStaminaLoss() - - if(amount == 0) - return - - vv_update_display(L, Text, "[newamt]") - admin_ticket_log(L, span_notice("[key_name(usr)] dealt [amount] amount of [Text] damage to [key_name(L)]")) - log_admin("[key_name(usr)] dealt [amount] amount of [Text] damage to [key_name(L)]") - message_admins("[ADMIN_TPMONTY(usr)] dealt [amount] amount of [Text] damage to [ADMIN_TPMONTY(L)]") - - - else if(href_list["addlanguage"]) - if(!check_rights(R_FUN)) - return - - var/mob/living/L = locate(href_list["addlanguage"]) - if(!istype(L)) - return - - var/new_language = input("Please choose a language to add.", "Language") as null|anything in GLOB.all_languages - if(!new_language) - return - - if(!istype(L)) - to_chat(usr, span_warning("Mob doesn't exist anymore.")) - return - - L.grant_language(new_language) - - log_admin("[key_name(usr)] has added [new_language] to [key_name(L)].") - message_admins("[ADMIN_TPMONTY(usr)] has added [new_language] to [ADMIN_TPMONTY(L)].") - - - else if(href_list["remlanguage"]) - if(!check_rights(R_FUN)) - return - - var/mob/living/L = locate(href_list["remlanguage"]) - if(!istype(L)) - return - - if(!length(L.language_holder.languages)) - to_chat(usr, span_warning("This mob knows no languages.")) - return - - var/rem_language = input("Please choose a language to remove.", "Language", null) as null|anything in L.language_holder.languages - - if(!rem_language) - return - - if(!L) - to_chat(usr, span_warning("Mob doesn't exist anymore.")) - return - - L.remove_language(rem_language) - - log_admin("[key_name(usr)] has removed [rem_language] from [key_name(L)].") - message_admins("[ADMIN_TPMONTY(usr)] has removed [rem_language] from [ADMIN_TPMONTY(L)].") - - - else if(href_list["getatom"]) - if(!check_rights(R_DEBUG)) - return - - var/atom/movable/A = locate(href_list["getatom"]) - if(!istype(A)) - return - - var/turf/T = get_turf(usr) - if(!istype(T)) - return - - A.forceMove(T) - - log_admin("[key_name(usr)] has sent atom [A] to themselves.") - message_admins("[ADMIN_TPMONTY(usr)] has sent atom [A] to themselves.") - - - else if(href_list["sendatom"]) - if(!check_rights(R_DEBUG)) - return - - var/atom/movable/A = locate(href_list["sendatom"]) - if(!istype(A)) - return - - var/atom/target - - switch(input("Where do you want to send it to?", "Send Mob") as null|anything in list("Area", "Mob", "Key", "Coords")) - if("Area") - var/area/AR = input("Pick an area.", "Pick an area") as null|anything in GLOB.sorted_areas - if(!AR || !A) - return - target = pick(get_area_turfs(AR)) - if("Mob") - var/mob/N = input("Pick a mob.", "Pick a mob") as null|anything in sortList(GLOB.mob_list) - if(!N || !A) - return - target = get_turf(N) - if("Key") - var/client/C = input("Pick a key.", "Pick a key") as null|anything in sortKey(GLOB.clients) - if(!C || !A) - return - target = get_turf(C.mob) - if("Coords") - var/X = input("Select coordinate X", "Coordinate X") as null|num - var/Y = input("Select coordinate Y", "Coordinate Y") as null|num - var/Z = input("Select coordinate Z", "Coordinate Z") as null|num - if(isnull(X) || isnull(Y) || isnull(Z) || !A) - return - target = locate(X, Y, Z) - - if(!target) - return - - A.forceMove(target) - - log_admin("[key_name(usr)] has sent atom [A] to [AREACOORD(target)].") - message_admins("[ADMIN_TPMONTY(usr)] has sent atom [A] to [ADMIN_VERBOSEJMP(target)].") - - else if(href_list["dropeverything"]) - if(!check_rights(R_DEBUG)) - return - - var/mob/living/carbon/human/H = locate(href_list["copyoutfit"]) - if(!istype(H)) - return - - if(alert(usr, "Make [H] drop everything?", "Warning", "Yes", "No") != "Yes") - return - - for(var/obj/item/W in H) - if(istype(W, /obj/item/alien_embryo)) - continue - H.dropItemToGround(W) - - log_admin("[key_name(usr)] made [key_name(H)] drop everything.") - message_admins("[ADMIN_TPMONTY(usr)] made [ADMIN_TPMONTY(H)] drop everything.") - - - else if(href_list["updateicon"]) - if(!check_rights(R_DEBUG)) - return - - var/atom/movable/AM = locate(href_list["updateicon"]) - if(!istype(AM)) - return - - AM.update_icon() - - log_admin("[key_name(usr)] updated the icon of [AM].") - - - else if(href_list["playerpanel"]) - if(!check_rights(R_BAN)) - return - - var/mob/M = locate(href_list["playerpanel"]) - if(!istype(M)) - to_chat(usr, span_warning("Target is no longer valid.")) - return - - usr.client.holder.show_player_panel(M) + if(("name" in vars) && !isatom(src)) + . += "[vars["name"]]
    " diff --git a/code/modules/admin/verbs/legacy.dm b/code/modules/admin/verbs/legacy.dm index b50d56ae28a55..37882d6b7a4b9 100644 --- a/code/modules/admin/verbs/legacy.dm +++ b/code/modules/admin/verbs/legacy.dm @@ -29,15 +29,15 @@ if(!infos) infos = list() //Overly complex timestamp creation - var/modifyer = "th" + var/modifier = "th" switch(time2text(world.timeofday, "DD")) if("01","21","31") - modifyer = "st" - if("02","22",) - modifyer = "nd" + modifier = "st" + if("02","22") + modifier = "nd" if("03","23") - modifyer = "rd" - var/day_string = "[time2text(world.timeofday, "DD")][modifyer]" + modifier = "rd" + var/day_string = "[time2text(world.timeofday, "DD")][modifier]" if(copytext(day_string, 1, 2) == "0") day_string = copytext(day_string,2) var/full_date = time2text(world.timeofday, "Day, Month DD of YYYY") diff --git a/code/modules/admin/verbs/poll_managment.dm b/code/modules/admin/verbs/poll_managment.dm index ceebb7f7e338c..9c930b2508e7c 100644 --- a/code/modules/admin/verbs/poll_managment.dm +++ b/code/modules/admin/verbs/poll_managment.dm @@ -242,7 +242,7 @@ * */ /datum/admins/proc/poll_parse_href(list/href_list, datum/poll_question/poll) - if(!check_rights(R_DBRANKS)) + if(!check_rights(R_POLLS)) return if(!SSdbcore.Connect()) to_chat(usr, span_danger("Failed to establish database connection.")) @@ -351,7 +351,7 @@ * */ /datum/poll_question/proc/delete_poll() - if(!check_rights(R_DBRANKS)) + if(!check_rights(R_POLLS)) return if(!SSdbcore.Connect()) to_chat(usr, span_danger("Failed to establish database connection.")) @@ -376,11 +376,11 @@ * Uses INSERT ON DUPLICATE KEY UPDATE to handle both inserting and updating at once. * The start and end datetimes and poll id for new polls is then retrieved for the poll datum. * Arguments: - * * clear_votes - When true will call cleaR_DBRANKS_votes() to delete all votes matching this poll id. + * * clear_votes - When true will call cleaR_POLLS_votes() to delete all votes matching this poll id. * */ /datum/poll_question/proc/save_poll_data(clear_votes) - if(!check_rights(R_DBRANKS)) + if(!check_rights(R_POLLS)) return if(!SSdbcore.Connect()) to_chat(usr, span_danger("Failed to establish database connection.")) @@ -427,7 +427,7 @@ future_poll = text2num(query_get_poll_id_start_endtime.item[3]) qdel(query_get_poll_id_start_endtime) if(clear_votes) - cleaR_DBRANKS_votes() + cleaR_POLLS_votes() edit_ready = TRUE var/msg = "has [new_poll ? "created a new" : "edited a"][admin_only ? " admin only" : ""] server poll. Question: [question]" if(admin_only) @@ -456,8 +456,8 @@ * Deletes all votes or text replies for this poll, depending on its type. * */ -/datum/poll_question/proc/cleaR_DBRANKS_votes() - if(!check_rights(R_DBRANKS)) +/datum/poll_question/proc/cleaR_POLLS_votes() + if(!check_rights(R_POLLS)) return if(!SSdbcore.Connect()) to_chat(usr, span_danger("Failed to establish database connection.")) @@ -465,14 +465,14 @@ var/table = "poll_vote" if(poll_type == POLLTYPE_TEXT) table = "poll_textreply" - var/datum/db_query/query_cleaR_DBRANKS_votes = SSdbcore.NewQuery( + var/datum/db_query/query_cleaR_POLLS_votes = SSdbcore.NewQuery( "UPDATE [format_table_name(table)] SET deleted = 1 WHERE pollid = :poll_id", list("poll_id" = poll_id) ) - if(!query_cleaR_DBRANKS_votes.warn_execute()) - qdel(query_cleaR_DBRANKS_votes) + if(!query_cleaR_POLLS_votes.warn_execute()) + qdel(query_cleaR_POLLS_votes) return - qdel(query_cleaR_DBRANKS_votes) + qdel(query_cleaR_POLLS_votes) poll_votes = 0 to_chat(usr, span_danger("Poll [poll_type == POLLTYPE_TEXT ? "responses" : "votes"] cleared.")) @@ -540,7 +540,7 @@ * */ /datum/admins/proc/poll_option_parse_href(list/href_list, datum/poll_question/poll, datum/poll_option/option) - if(!check_rights(R_DBRANKS)) + if(!check_rights(R_POLLS)) return if(!SSdbcore.Connect()) to_chat(usr, span_danger("Failed to establish database connection.")) @@ -638,7 +638,7 @@ * */ /datum/poll_option/proc/save_option() - if(!check_rights(R_DBRANKS)) + if(!check_rights(R_POLLS)) return if(!SSdbcore.Connect()) to_chat(usr, span_danger("Failed to establish database connection.")) @@ -672,7 +672,7 @@ * */ /datum/poll_option/proc/delete_option() - if(!check_rights(R_DBRANKS)) + if(!check_rights(R_POLLS)) return . = parent_poll if(option_id) diff --git a/code/modules/admin/verbs/varedit.dm b/code/modules/admin/verbs/varedit.dm deleted file mode 100644 index 4b01447eeac1f..0000000000000 --- a/code/modules/admin/verbs/varedit.dm +++ /dev/null @@ -1,814 +0,0 @@ -GLOBAL_LIST_INIT(VVwarning, list("vars", "datum_flags", "client", "key", "ckey", "type")) -GLOBAL_PROTECT(VVwarning) -GLOBAL_LIST_INIT(VVpixelmovement, list("step_x", "step_y", "bound_height", "bound_width", "bound_x", "bound_y", "step_size")) -GLOBAL_PROTECT(VVpixelmovement) - - -/client/proc/vv_get_class(var_name, var_value) - if(isnull(var_value)) - . = VV_NULL - - else if (isnum(var_value)) - if (var_name in GLOB.bitfields) - . = VV_BITFIELD - else - . = VV_NUM - - else if (istext(var_value)) - if (findtext(var_value, "\n")) - . = VV_MESSAGE - else - . = VV_TEXT - - else if (isicon(var_value)) - . = VV_ICON - - else if (ismob(var_value)) - . = VV_MOB_REFERENCE - - else if (isloc(var_value)) - . = VV_ATOM_REFERENCE - - else if (istype(var_value, /client)) - . = VV_CLIENT - - else if (istype(var_value, /datum)) - . = VV_DATUM_REFERENCE - - else if (ispath(var_value)) - if (ispath(var_value, /atom)) - . = VV_ATOM_TYPE - else if (ispath(var_value, /datum)) - . = VV_DATUM_TYPE - else - . = VV_TYPE - - else if (islist(var_value)) - . = VV_LIST - - else if (isfile(var_value)) - . = VV_FILE - else - . = VV_NULL - -/client/proc/vv_get_value(class, default_class, current_value, list/restricted_classes, list/extra_classes, list/classes, var_name) - . = list("class" = class, "value" = null) - if (!class) - if (!classes) - classes = list ( - VV_NUM, - VV_TEXT, - VV_MESSAGE, - VV_ICON, - VV_ATOM_REFERENCE, - VV_DATUM_REFERENCE, - VV_MOB_REFERENCE, - VV_CLIENT, - VV_ATOM_TYPE, - VV_DATUM_TYPE, - VV_TYPE, - VV_FILE, - VV_NEW_ATOM, - VV_NEW_DATUM, - VV_NEW_TYPE, - VV_NEW_LIST, - VV_NULL, - VV_RESTORE_DEFAULT - ) - - if(holder?.marked_datum && !(VV_MARKED_DATUM in restricted_classes)) - classes += "[VV_MARKED_DATUM] ([holder.marked_datum.type])" - if (restricted_classes) - classes -= restricted_classes - - if (extra_classes) - classes += extra_classes - - .["class"] = input(src, "What kind of data?", "Variable Type", default_class) as null|anything in classes - if (holder?.marked_datum && .["class"] == "[VV_MARKED_DATUM] ([holder.marked_datum.type])") - .["class"] = VV_MARKED_DATUM - - - switch(.["class"]) - if (VV_TEXT) - .["value"] = input("Enter new text:", "Text", current_value) as null|text - if (.["value"] == null) - .["class"] = null - return - if (VV_MESSAGE) - .["value"] = input("Enter new text:", "Text", current_value) as null|message - if (.["value"] == null) - .["class"] = null - return - - - if (VV_NUM) - .["value"] = input("Enter new number:", "Num", current_value) as null|num - if (.["value"] == null) - .["class"] = null - return - - if (VV_BITFIELD) - .["value"] = input_bitfield(usr, "Editing bitfield: [var_name]", var_name, current_value) - if (.["value"] == null) - .["class"] = null - return - - if (VV_ATOM_TYPE) - .["value"] = pick_closest_path(FALSE) - if (.["value"] == null) - .["class"] = null - return - - if (VV_DATUM_TYPE) - .["value"] = pick_closest_path(FALSE, get_fancy_list_of_datum_types()) - if (.["value"] == null) - .["class"] = null - return - - if (VV_TYPE) - var/type = current_value - var/error = "" - do - type = input("Enter type:[error]", "Type", type) as null|text - if (!type) - break - type = text2path(type) - error = "\nType not found, Please try again" - while(!type) - if (!type) - .["class"] = null - return - .["value"] = type - - - if (VV_ATOM_REFERENCE) - var/type = pick_closest_path(FALSE) - var/subtypes = vv_subtype_prompt(type) - if (subtypes == null) - .["class"] = null - return - var/list/things = vv_reference_list(type, subtypes) - var/value = input("Select reference:", "Reference", current_value) as null|anything in things - if (!value) - .["class"] = null - return - .["value"] = things[value] - - if (VV_DATUM_REFERENCE) - var/type = pick_closest_path(FALSE, get_fancy_list_of_datum_types()) - var/subtypes = vv_subtype_prompt(type) - if (subtypes == null) - .["class"] = null - return - var/list/things = vv_reference_list(type, subtypes) - var/value = input("Select reference:", "Reference", current_value) as null|anything in things - if (!value) - .["class"] = null - return - .["value"] = things[value] - - if (VV_MOB_REFERENCE) - var/type = pick_closest_path(FALSE, make_types_fancy(typesof(/mob))) - var/subtypes = vv_subtype_prompt(type) - if (subtypes == null) - .["class"] = null - return - var/list/things = vv_reference_list(type, subtypes) - var/value = input("Select reference:", "Reference", current_value) as null|anything in things - if (!value) - .["class"] = null - return - .["value"] = things[value] - - - - if (VV_CLIENT) - .["value"] = input("Select reference:", "Reference", current_value) as null|anything in GLOB.clients - if (.["value"] == null) - .["class"] = null - return - - - if (VV_FILE) - .["value"] = input("Pick file:", "File") as null|file - if (.["value"] == null) - .["class"] = null - return - - - if (VV_ICON) - .["value"] = input("Pick icon:", "Icon") as null|icon - if (.["value"] == null) - .["class"] = null - return - - - if (VV_MARKED_DATUM) - .["value"] = holder.marked_datum - if (.["value"] == null) - .["class"] = null - return - - - if (VV_NEW_ATOM) - var/type = pick_closest_path(FALSE) - if (!type) - .["class"] = null - return - .["type"] = type - var/atom/newguy = new type() - newguy.datum_flags |= DF_VAR_EDITED - .["value"] = newguy - - if (VV_NEW_DATUM) - var/type = pick_closest_path(FALSE, get_fancy_list_of_datum_types()) - if (!type) - .["class"] = null - return - .["type"] = type - var/datum/newguy = new type() - newguy.datum_flags |= DF_VAR_EDITED - .["value"] = newguy - - if (VV_NEW_TYPE) - var/type = current_value - var/error = "" - do - type = input("Enter type:[error]", "Type", type) as null|text - if (!type) - break - type = text2path(type) - error = "\nType not found, Please try again" - while(!type) - if (!type) - .["class"] = null - return - .["type"] = type - var/datum/newguy = new type() - if(istype(newguy)) - newguy.datum_flags |= DF_VAR_EDITED - .["value"] = newguy - - - if (VV_NEW_LIST) - .["value"] = list() - .["type"] = /list - -/client/proc/vv_parse_text(O, new_var) - if(O && findtext(new_var,"\[")) - var/process_vars = alert(usr,"\[] detected in string, process as variables?","Process Variables?","Yes","No") - if(process_vars == "Yes") - . = string2listofvars(new_var, O) - -//do they want you to include subtypes? -//FALSE = no subtypes, strict exact type pathing (or the type doesn't have subtypes) -//TRUE = Yes subtypes -//NULL = User cancelled at the prompt or invalid type given -/client/proc/vv_subtype_prompt(type) - if (!ispath(type)) - return null - var/list/subtypes = subtypesof(type) - if (!length(subtypes)) - return FALSE - - switch(alert("Strict object type detection?", "Type detection", "Strictly this type","This type and subtypes", "Cancel")) - if("Strictly this type") - return FALSE - if("This type and subtypes") - return TRUE - - -/client/proc/vv_reference_list(type, subtypes) - . = list() - var/list/types = list(type) - if (subtypes) - types = typesof(type) - - var/list/fancytypes = make_types_fancy(types) - - for(var/fancytype in fancytypes) //swap the assoication - types[fancytypes[fancytype]] = fancytype - - var/things = get_all_of_type(type, subtypes) - - var/i = 0 - for(var/thing in things) - var/datum/D = thing - i++ - //try one of 3 methods to shorten the type text: - // fancy type, - // fancy type with the base type removed from the begaining, - // the type with the base type removed from the begaining - var/fancytype = types[D.type] - if (findtext(fancytype, types[type])) - fancytype = copytext(fancytype, length(types[type]) + 1) - var/shorttype = copytext("[D.type]", length("[type]") + 1) - if (length_char(shorttype) > length_char(fancytype)) - shorttype = fancytype - if (!length(shorttype)) - shorttype = "/" - - .["[D]([shorttype])[REF(D)]#[i]"] = D - -/client/proc/mod_list_add_ass(atom/O) //hehe - - var/list/L = vv_get_value(restricted_classes = list(VV_RESTORE_DEFAULT)) - var/class = L["class"] - if (!class) - return - var/var_value = L["value"] - - if(class == VV_TEXT || class == VV_MESSAGE) - var/list/varsvars = vv_parse_text(O, var_value) - for(var/V in varsvars) - var_value = replacetext(var_value,"\[[V]]","[O.vars[V]]") - - return var_value - - -/client/proc/mod_list_add(list/L, atom/O, original_name, objectvar) - var/list/LL = vv_get_value(restricted_classes = list(VV_RESTORE_DEFAULT)) - var/class = LL["class"] - if (!class) - return - var/var_value = LL["value"] - - if(class == VV_TEXT || class == VV_MESSAGE) - var/list/varsvars = vv_parse_text(O, var_value) - for(var/V in varsvars) - var_value = replacetext(var_value,"\[[V]]","[O.vars[V]]") - - if (O) - L = L.Copy() - - L += var_value - - switch(alert("Would you like to associate a value with the list entry?",,"Yes","No")) - if("Yes") - L[var_value] = mod_list_add_ass(O) - - if(O && !O.vv_edit_var(objectvar, L)) - to_chat(src, "Your edit was rejected by the object.") - return - - log_world("### ListVarEdit by [src]: [(O ? O.type : "/list")] [objectvar]: ADDED=[var_value]") - log_admin("[key_name(src)] modified [original_name]'s [objectvar]: ADDED=[var_value]") - message_admins("[key_name_admin(src)] modified [original_name]'s [objectvar]: ADDED=[var_value]") - -/client/proc/mod_list(list/L, atom/O, original_name, objectvar, index, autodetect_class = FALSE) - if(!check_rights(R_VAREDIT)) - return - - if(!islist(L)) - to_chat(src, "Not a List.") - return - - if(length(L) > 1000) - var/confirm = alert(src, "The list you're trying to edit is very long, continuing may crash the server.", "Warning", "Continue", "Abort") - if(confirm != "Continue") - return - - - - var/list/names = list() - for (var/i in 1 to length(L)) - var/key = L[i] - var/value - if (IS_NORMAL_LIST(L) && !isnum(key)) - value = L[key] - if (value == null) - value = "null" - names["#[i] [key] = [value]"] = i - if (!index) - var/variable = input("Which var?","Var") as null|anything in names + "(ADD VAR)" + "(CLEAR NULLS)" + "(CLEAR DUPES)" + "(SHUFFLE)" - - if(variable == null) - return - - if(variable == "(ADD VAR)") - if(!O.vv_edit_var(objectvar, L)) - to_chat(src, "Your edit was rejected by the object.") - return - mod_list_add(L, O, original_name, objectvar) - return - - if(variable == "(CLEAR NULLS)") - if(!O.vv_edit_var(objectvar, L)) - to_chat(src, "Your edit was rejected by the object.") - return - L = L.Copy() - listclearnulls(L) - log_world("### ListVarEdit by [src]: [O.type] [objectvar]: CLEAR NULLS") - log_admin("[key_name(src)] modified [original_name]'s [objectvar]: CLEAR NULLS") - message_admins("[key_name_admin(src)] modified [original_name]'s list [objectvar]: CLEAR NULLS") - return - - if(variable == "(CLEAR DUPES)") - if(!O.vv_edit_var(objectvar, L)) - to_chat(src, "Your edit was rejected by the object.") - return - L = uniqueList(L) - log_world("### ListVarEdit by [src]: [O.type] [objectvar]: CLEAR DUPES") - log_admin("[key_name(src)] modified [original_name]'s [objectvar]: CLEAR DUPES") - message_admins("[key_name_admin(src)] modified [original_name]'s list [objectvar]: CLEAR DUPES") - return - - if(variable == "(SHUFFLE)") - if(!O.vv_edit_var(objectvar, L)) - to_chat(src, "Your edit was rejected by the object.") - return - L = shuffle(L) - log_world("### ListVarEdit by [src]: [O.type] [objectvar]: SHUFFLE") - log_admin("[key_name(src)] modified [original_name]'s [objectvar]: SHUFFLE") - message_admins("[key_name_admin(src)] modified [original_name]'s list [objectvar]: SHUFFLE") - return - - index = names[variable] - - - var/assoc_key - if (index == null) - return - var/assoc = FALSE - var/prompt = alert(src, "Do you want to edit the key or its assigned value?", "Associated List", "Key", "Assigned Value", "Cancel") - if (prompt == "Cancel") - return - if (prompt == "Assigned Value") - assoc = TRUE - assoc_key = L[index] - var/default - var/variable - if (assoc) - variable = L[assoc_key] - else - variable = L[index] - - default = vv_get_class(objectvar, variable) - - to_chat(src, "Variable appears to be [uppertext(default)].") - - to_chat(src, "Variable contains: [variable]") - - if(default == VV_NUM) - var/dir_text = "" - var/tdir = variable - if(tdir > 0 && tdir < 16) - if(tdir & 1) - dir_text += "NORTH" - if(tdir & 2) - dir_text += "SOUTH" - if(tdir & 4) - dir_text += "EAST" - if(tdir & 8) - dir_text += "WEST" - - if(dir_text) - to_chat(usr, "If a direction, direction is: [dir_text]") - - var/original_var = variable - - if (O) - L = L.Copy() - var/class - if(autodetect_class) - if (default == VV_TEXT) - default = VV_MESSAGE - class = default - var/list/LL = vv_get_value(default_class = default, current_value = original_var, restricted_classes = list(VV_RESTORE_DEFAULT), extra_classes = list(VV_LIST, "DELETE FROM LIST")) - class = LL["class"] - if (!class) - return - var/new_var = LL["value"] - - if(class == VV_MESSAGE) - class = VV_TEXT - - switch(class) //Spits a runtime error if you try to modify an entry in the contents list. Dunno how to fix it, yet. - if(VV_LIST) - mod_list(variable, O, original_name, objectvar) - - if("DELETE FROM LIST") - if(O && !O.vv_edit_var(objectvar, L)) - to_chat(src, "Your edit was rejected by the object.") - return - - L.Cut(index, index + 1) - - log_world("### ListVarEdit by [src]: [O.type] [objectvar]: REMOVED=[html_encode("[original_var]")]") - log_admin("[key_name(src)] modified [original_name]'s [objectvar]: REMOVED=[original_var]") - message_admins("[key_name_admin(src)] modified [original_name]'s [objectvar]: REMOVED=[original_var]") - return - - if(VV_TEXT) - var/list/varsvars = vv_parse_text(O, new_var) - for(var/V in varsvars) - new_var = replacetext(new_var,"\[[V]]","[O.vars[V]]") - - - if(assoc) - L[assoc_key] = new_var - else - L[index] = new_var - - if(O && !O.vv_edit_var(objectvar, L)) - to_chat(src, "Your edit was rejected by the object.") - return - - log_world("### ListVarEdit by [src]: [(O ? O.type : "/list")] [objectvar]: [original_var]=[new_var]") - log_admin("[key_name(src)] modified [original_name]'s [objectvar]: [original_var]=[new_var]") - message_admins("[key_name_admin(src)] modified [original_name]'s varlist [objectvar]: [original_var]=[new_var]") - -/proc/vv_varname_lockcheck(param_var_name) - if(param_var_name in GLOB.VVwarning) - if(alert(usr, "Editing this var may break things. Are you sure you want to continue?", "Warning", "Yes", "No") != "Yes") - return FALSE - if(param_var_name in GLOB.VVpixelmovement) - if(alert(usr, "Editing this var WILL break smooth tile movement for the rest of the round. THIS CAN'T BE UNDONE", "DANGER", "ABORT ", "Continue", " ABORT") != "Continue") - return FALSE - return TRUE - - -/client/proc/modify_variables(atom/O, param_var_name = null, autodetect_class = 0) - if(!check_rights(R_VAREDIT)) - return - - var/class - var/variable - var/var_value - - if(param_var_name) - if(!(param_var_name in O.vars)) - to_chat(src, "A variable with this name ([param_var_name]) doesn't exist in this datum ([O])") - return - variable = param_var_name - - else - var/list/names = list() - for (var/V in O.vars) - names += V - - names = sortList(names) - - variable = input("Which var?","Var") as null|anything in names - if(!variable) - return - - if(!O.can_vv_get(variable)) - return - - var_value = O.vars[variable] - if(!vv_varname_lockcheck(variable)) - return - - var/default = vv_get_class(variable, var_value) - - if(isnull(default)) - to_chat(src, "Unable to determine variable type.") - else - to_chat(src, "Variable appears to be [uppertext(default)].") - - to_chat(src, "Variable contains: [var_value]") - - if(default == VV_NUM) - var/dir_text = "" - if(var_value > 0 && var_value < 16) - if(var_value & 1) - dir_text += "NORTH" - if(var_value & 2) - dir_text += "SOUTH" - if(var_value & 4) - dir_text += "EAST" - if(var_value & 8) - dir_text += "WEST" - - if(dir_text) - to_chat(src, "If a direction, direction is: [dir_text]") - - if(autodetect_class && default != VV_NULL) - if(default == VV_TEXT) - default = VV_MESSAGE - class = default - - var/list/value = vv_get_value(class, default, var_value, extra_classes = list(VV_LIST), var_name = variable) - class = value["class"] - - if(!class) - return - var/var_new = value["value"] - - if(class == VV_MESSAGE) - class = VV_TEXT - - var/original_name = "[O]" - - switch(class) - if(VV_LIST) - if(!islist(var_value)) - mod_list(list(), O, original_name, variable) - - mod_list(var_value, O, original_name, variable) - return - - if(VV_RESTORE_DEFAULT) - var_new = initial(O.vars[variable]) - - if(VV_TEXT) - var/list/varsvars = vv_parse_text(O, var_new) - for(var/V in varsvars) - var_new = replacetext(var_new,"\[[V]]","[O.vars[V]]") - - - if(!O.vv_edit_var(variable, var_new)) - to_chat(src, "Your edit was rejected by the object.") - return - - vv_update_display(O, "varedited", VV_MSG_EDITED) - log_world("### VarEdit by [key_name(src)]: [O.type] [variable]=[var_value] => [var_new]") - log_admin("[key_name(src)] modified [original_name]'s [variable] from [html_encode("[var_value]")] to [html_encode("[var_new]")]") - message_admins("[ADMIN_TPMONTY(usr)] modified [original_name] [ADMIN_VV(O)] [variable] from [var_value] to [var_new]") - admin_ticket_log(O, "[key_name_admin(src)] modified [original_name]'s [variable] from [var_value] to [var_new]") - return TRUE - - -/client/proc/mass_modify(atom/A, var_name) - var/method = 0 //0 means strict type detection while 1 means this type and all subtypes (IE: /obj/item with this set to 1 will set it to ALL items) - - if(!check_rights(R_VAREDIT)) - return - - if(A?.type) - method = usr.client.vv_subtype_prompt(A.type) - - usr.client.massmodify_variables(A, var_name, method) - - -/client/proc/massmodify_variables(datum/O, var_name = "", method = 0) - if(!check_rights(R_VAREDIT)) - return - if(!istype(O)) - return - - var/variable = "" - if(!var_name) - var/list/names = list() - for (var/V in O.vars) - names += V - - names = sortList(names) - - variable = input("Which var?", "Var") as null|anything in names - else - variable = var_name - - if(!variable || !O.can_vv_get(variable)) - return - var/default - var/var_value = O.vars[variable] - - if(!vv_varname_lockcheck(variable)) - return - - default = vv_get_class(variable, var_value) - - if(isnull(default)) - to_chat(src, "Unable to determine variable type.") - else - to_chat(src, "Variable appears to be [uppertext(default)].") - - to_chat(src, "Variable contains: [var_value]") - - if(default == VV_NUM) - var/dir_text = "" - if(var_value > 0 && var_value < 16) - if(var_value & 1) - dir_text += "NORTH" - if(var_value & 2) - dir_text += "SOUTH" - if(var_value & 4) - dir_text += "EAST" - if(var_value & 8) - dir_text += "WEST" - - if(dir_text) - to_chat(src, "If a direction, direction is: [dir_text]") - - var/value = vv_get_value(default, default, var_value, var_name = variable) - var/new_value = value["value"] - var/class = value["class"] - - if(!class || !new_value == null && class != VV_NULL) - return - - if (class == VV_MESSAGE) - class = VV_TEXT - - if (value["type"]) - class = VV_NEW_TYPE - - var/original_name = "[O]" - - var/rejected = 0 - var/accepted = 0 - - switch(class) - if(VV_RESTORE_DEFAULT) - to_chat(src, "Finding items...") - var/list/items = get_all_of_type(O.type, method) - to_chat(src, "Changing [length(items)] items...") - for(var/thing in items) - if (!thing) - continue - var/datum/D = thing - if (D.vv_edit_var(variable, initial(D.vars[variable])) != FALSE) - accepted++ - else - rejected++ - CHECK_TICK - - if(VV_TEXT) - var/list/varsvars = vv_parse_text(O, new_value) - var/pre_processing = new_value - var/unique - if (length(varsvars)) - unique = alert(usr, "Process vars unique to each instance, or same for all?", "Variable Association", "Unique", "Same") - if(unique == "Unique") - unique = TRUE - else - unique = FALSE - for(var/V in varsvars) - new_value = replacetext(new_value,"\[[V]]","[O.vars[V]]") - - to_chat(src, "Finding items...") - var/list/items = get_all_of_type(O.type, method) - to_chat(src, "Changing [length(items)] items...") - for(var/thing in items) - if (!thing) - continue - var/datum/D = thing - if(unique) - new_value = pre_processing - for(var/V in varsvars) - new_value = replacetext(new_value,"\[[V]]","[D.vars[V]]") - - if (D.vv_edit_var(variable, new_value) != FALSE) - accepted++ - else - rejected++ - CHECK_TICK - - if (VV_NEW_TYPE) - var/many = alert(src, "Create only one [value["type"]] and assign each or a new one for each thing", "How Many", "One", "Many", "Cancel") - if (many == "Cancel") - return - if (many == "Many") - many = TRUE - else - many = FALSE - - var/type = value["type"] - to_chat(src, "Finding items...") - var/list/items = get_all_of_type(O.type, method) - to_chat(src, "Changing [length(items)] items...") - for(var/thing in items) - if (!thing) - continue - var/datum/D = thing - if(many && !new_value) - new_value = new type() - - if (D.vv_edit_var(variable, new_value) != FALSE) - accepted++ - else - rejected++ - new_value = null - CHECK_TICK - - else - to_chat(src, "Finding items...") - var/list/items = get_all_of_type(O.type, method) - to_chat(src, "Changing [length(items)] items...") - for(var/thing in items) - if (!thing) - continue - var/datum/D = thing - if (D.vv_edit_var(variable, new_value) != FALSE) - accepted++ - else - rejected++ - CHECK_TICK - - - var/count = rejected+accepted - if (!count) - to_chat(src, "No objects found") - return - if (!accepted) - to_chat(src, "Every object rejected your edit") - return - if (rejected) - to_chat(src, "[rejected] out of [count] objects rejected your edit") - - log_world("### MassVarEdit by [src]: [O.type] (A/R [accepted]/[rejected]) [variable]=[html_encode("[O.vars[variable]]")]([list2params(value)])") - log_admin("[key_name(src)] mass modified [original_name]'s [variable] to [O.vars[variable]] ([accepted] objects modified)") - message_admins("[key_name_admin(src)] mass modified [original_name]'s [variable] to [O.vars[variable]] ([accepted] objects modified)") diff --git a/code/modules/admin/view_variables/admin_delete.dm b/code/modules/admin/view_variables/admin_delete.dm new file mode 100644 index 0000000000000..4bbc5e00ea3b9 --- /dev/null +++ b/code/modules/admin/view_variables/admin_delete.dm @@ -0,0 +1,30 @@ +/client/proc/admin_delete(datum/D) + var/atom/A = D + var/coords = "" + var/jmp_coords = "" + if(isclient(D) && !check_rights(R_DBRANKS)) + log_admin_private("[key_name(usr)] has tried to delete a client [D]!") + message_admins("[ADMIN_TPMONTY(usr)] has tried to delete a client [D]!") + return + if(istype(A)) + var/turf/T = get_turf(A) + if(T) + var/atom/a_loc = A.loc + var/is_turf = isturf(a_loc) + coords = "[is_turf ? "at" : "from [a_loc] at"] [AREACOORD(T)]" + jmp_coords = "[is_turf ? "at" : "from [a_loc] at"] [ADMIN_VERBOSEJMP(T)]" + else + jmp_coords = coords = "in nullspace" + + if (tgui_alert(usr, "Are you sure you want to delete:\n[D]\n[coords]?", "Confirmation", list("Yes", "No")) == "Yes") + log_admin("[key_name(usr)] deleted [D] [coords]") + message_admins("[key_name_admin(usr)] deleted [D] [jmp_coords]") + SSblackbox.record_feedback("tally", "admin_verb", 1, "Delete") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + if(isturf(D)) + var/turf/T = D + T.ScrapeAway() + else + vv_update_display(D, "deleted", VV_MSG_DELETED) + qdel(D) + if(!QDELETED(D)) + vv_update_display(D, "deleted", "") diff --git a/code/modules/admin/view_variables/color_matrix_editor.dm b/code/modules/admin/view_variables/color_matrix_editor.dm new file mode 100644 index 0000000000000..8ea8ea0115dd3 --- /dev/null +++ b/code/modules/admin/view_variables/color_matrix_editor.dm @@ -0,0 +1,99 @@ +/datum/color_matrix_editor + var/client/owner + var/datum/weakref/target + var/atom/movable/screen/map_view/proxy_view + /// All the plane masters that need to be applied. + var/list/proxy_plane_masters + var/list/current_color + var/closed + +/datum/color_matrix_editor/New(user, atom/_target = null) + owner = CLIENT_FROM_VAR(user) + if(islist(_target?.color)) + current_color = _target.color + else if(istext(_target?.color)) + current_color = color_hex2color_matrix(_target.color) + else + current_color = color_matrix_identity() + + var/mutable_appearance/view = image('icons/misc/colortest.dmi', "colors") + if(_target) + target = WEAKREF(_target) + if(!(_target.appearance_flags & PLANE_MASTER)) + view = image(_target) + + // Map name has to start and end with an A-Z character, + // and definitely NOT with a square bracket or even a number. + var/map_name = "color_matrix_proxy_[REF(src)]" + + proxy_view = new + proxy_view.appearance = view + proxy_view.name = "screen" + proxy_view.assigned_map = map_name + proxy_view.screen_loc = "[map_name]:1,1" + + proxy_plane_masters = list() + for(var/plane in subtypesof(/atom/movable/screen/plane_master) - /atom/movable/screen/plane_master/blackness) + var/atom/movable/screen/plane_master/instance = new plane() + instance.assigned_map = map_name + if(instance.blend_mode_override) + instance.blend_mode = instance.blend_mode_override + instance.screen_loc = "[map_name]:CENTER" + proxy_plane_masters += instance + +/datum/color_matrix_editor/Destroy(force, ...) + QDEL_NULL(proxy_view) + return ..() + +/datum/color_matrix_editor/ui_state(mob/user) + return GLOB.admin_state + +/datum/color_matrix_editor/ui_static_data(mob/user) + var/list/data = list() + data["mapRef"] = proxy_view.assigned_map + + return data + +/datum/color_matrix_editor/ui_data(mob/user) + var/list/data = list() + data["currentColor"] = current_color + + return data + +/datum/color_matrix_editor/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ColorMatrixEditor") + ui.open() + +/datum/color_matrix_editor/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + switch(action) + if("transition_color") + current_color = params["color"] + animate(proxy_view, time = 4, color = current_color) + if("confirm") + on_confirm() + SStgui.close_uis(src) + +/datum/color_matrix_editor/ui_close(mob/user) + . = ..() + closed = TRUE + +/datum/color_matrix_editor/proc/on_confirm() + var/atom/target_atom = target?.resolve() + if(istype(target_atom)) + target_atom.vv_edit_var("color", current_color) + +/datum/color_matrix_editor/proc/wait() + while(!closed) + stoplag(1) + +/client/proc/open_color_matrix_editor(atom/in_atom) + var/datum/color_matrix_editor/editor = new /datum/color_matrix_editor(src, in_atom) + editor.ui_interact(mob) + editor.wait() + . = editor.current_color + qdel(editor) diff --git a/code/modules/admin/view_variables/debug_variables.dm b/code/modules/admin/view_variables/debug_variables.dm new file mode 100644 index 0000000000000..382aea56ef7c1 --- /dev/null +++ b/code/modules/admin/view_variables/debug_variables.dm @@ -0,0 +1,125 @@ +#define VV_HTML_ENCODE(thing) ( sanitize ? html_encode(thing) : thing ) +/// Get displayed variable in VV variable list +/proc/debug_variable(name, value, level, datum/owner, sanitize = TRUE, display_flags = NONE) //if D is a list, name will be index, and value will be assoc value. + if(owner) + if(islist(owner)) + var/index = name + if (value) + name = owner[name] //name is really the index until this line + else + value = owner[name] + . = "
  • ([VV_HREF_TARGET_1V(owner, VV_HK_LIST_EDIT, "E", index)]) ([VV_HREF_TARGET_1V(owner, VV_HK_LIST_CHANGE, "C", index)]) ([VV_HREF_TARGET_1V(owner, VV_HK_LIST_REMOVE, "-", index)]) " + else + . = "
  • ([VV_HREF_TARGET_1V(owner, VV_HK_BASIC_EDIT, "E", name)]) ([VV_HREF_TARGET_1V(owner, VV_HK_BASIC_CHANGE, "C", name)]) ([VV_HREF_TARGET_1V(owner, VV_HK_BASIC_MASSEDIT, "M", name)]) " + else + . = "
  • " + + var/name_part = VV_HTML_ENCODE(name) + if(level > 0 || islist(owner)) //handling keys in assoc lists + if(istype(name,/datum)) + name_part = "[VV_HTML_ENCODE(name)] [REF(name)]" + else if(islist(name)) + var/list/list_value = name + name_part = " /list ([length(list_value)]) [REF(name)]" + + . = "[.][name_part] = " + + var/item = _debug_variable_value(name, value, level, owner, sanitize, display_flags) + + return "[.][item]
  • " + +// This is split into a seperate proc mostly to make errors that happen not break things too much +/proc/_debug_variable_value(name, value, level, datum/owner, sanitize, display_flags) + . = "DISPLAY_ERROR: ([value] [REF(value)])" // Make sure this line can never runtime + + if(isnull(value)) + return "null" + + if(istext(value)) + return "\"[VV_HTML_ENCODE(value)]\"" + + if(isicon(value)) + #ifdef VARSICON + var/icon/icon_value = icon(value) + var/rnd = rand(1,10000) + var/rname = "tmp[REF(icon_value)][rnd].png" + usr << browse_rsc(icon_value, rname) + return "([value]) " + #else + return "/icon ([value])" + #endif + + if(isappearance(value)) + var/image/actually_an_appearance = value + return "/appearance ([actually_an_appearance.icon])" + + if(isfilter(value)) + var/datum/filter_value = value + return "/filter ([filter_value.type] [REF(filter_value)])" + + if(isfile(value)) + return "'[value]'" + + if(isdatum(value)) + var/datum/datum_value = value + return datum_value.debug_variable_value(name, level, owner, sanitize, display_flags) + + if(islist(value) || (name in GLOB.vv_special_lists)) // Some special lists arent detectable as a list through istype + var/list/list_value = value + var/list/items = list() + + // This is becuse some lists either dont count as lists or a locate on their ref will return null + var/link_vars = "vars=[REF(value)]" + if(name in GLOB.vv_special_lists) + link_vars = "vars=[REF(owner)];special_varname=[name]" + + if (!(display_flags & VV_ALWAYS_CONTRACT_LIST) && list_value.len > 0 && list_value.len <= (IS_NORMAL_LIST(list_value) ? VV_NORMAL_LIST_NO_EXPAND_THRESHOLD : VV_SPECIAL_LIST_NO_EXPAND_THRESHOLD)) + for (var/i in 1 to list_value.len) + var/key = list_value[i] + var/val + if (IS_NORMAL_LIST(list_value) && !isnum(key)) + val = list_value[key] + if (isnull(val)) // we still want to display non-null false values, such as 0 or "" + val = key + key = i + + items += debug_variable(key, val, level + 1, sanitize = sanitize) + + return "/list ([list_value.len])
      [items.Join()]
    " + else + return "/list ([list_value.len])" + + if(name in GLOB.bitfields) + var/list/flags = list() + for (var/i in GLOB.bitfields[name]) + if (value & GLOB.bitfields[name][i]) + flags += i + if(length(flags)) + return "[VV_HTML_ENCODE(jointext(flags, ", "))]" + else + return "NONE" + else + return "[VV_HTML_ENCODE(value)]" + +/datum/proc/debug_variable_value(name, level, datum/owner, sanitize, display_flags) + if("[src]" != "[type]") // If we have a name var, let's use it. + return "[src] [type] [REF(src)]" + else + return "[type] [REF(src)]" + +/datum/weakref/debug_variable_value(name, level, datum/owner, sanitize, display_flags) + . = ..() + return "[.] (Resolve)" + +/matrix/debug_variable_value(name, level, datum/owner, sanitize, display_flags) + return {" +
      + + + + + + +
    [a][d]0
    [b][e]0
    [c][f]1
     
    "} //TODO link to modify_transform wrapper for all matrices + +#undef VV_HTML_ENCODE diff --git a/code/modules/admin/view_variables/get_variables.dm b/code/modules/admin/view_variables/get_variables.dm new file mode 100644 index 0000000000000..c59391371dff0 --- /dev/null +++ b/code/modules/admin/view_variables/get_variables.dm @@ -0,0 +1,345 @@ +/client/proc/vv_get_class(var_name, var_value) + if(isnull(var_value)) + . = VV_NULL + + else if(isnum(var_value)) + if(var_name in GLOB.bitfields) + . = VV_BITFIELD + else + . = VV_NUM + + else if(istext(var_value)) + if(findtext(var_value, "\n")) + . = VV_MESSAGE + else if(findtext(var_value, GLOB.is_color)) + . = VV_COLOR + else + . = VV_TEXT + + else if(isicon(var_value)) + . = VV_ICON + + else if(ismob(var_value)) + . = VV_MOB_REFERENCE + + else if(isloc(var_value)) + . = VV_ATOM_REFERENCE + + else if(istype(var_value, /client)) + . = VV_CLIENT + + else if(isweakref(var_value)) + . = VV_WEAKREF + + else if(isdatum(var_value)) + . = VV_DATUM_REFERENCE + + else if(ispath(var_value)) + if(ispath(var_value, /atom)) + . = VV_ATOM_TYPE + else if(ispath(var_value, /datum)) + . = VV_DATUM_TYPE + else + . = VV_TYPE + + else if(islist(var_value)) + if(var_name in GLOB.color_vars) + . = VV_COLOR_MATRIX + else + . = VV_LIST + + else if(isfile(var_value)) + . = VV_FILE + else + . = VV_NULL + +/client/proc/vv_get_value(class, default_class, current_value, list/restricted_classes, list/extra_classes, list/classes, var_name) + . = list("class" = class, "value" = null) + if(!class) + if(!classes) + classes = list ( + VV_NUM, + VV_TEXT, + VV_MESSAGE, + VV_ICON, + VV_COLOR, + VV_COLOR_MATRIX, + VV_ATOM_REFERENCE, + VV_DATUM_REFERENCE, + VV_MOB_REFERENCE, + VV_CLIENT, + VV_ATOM_TYPE, + VV_DATUM_TYPE, + VV_TYPE, + VV_FILE, + VV_NEW_ATOM, + VV_NEW_DATUM, + VV_NEW_TYPE, + VV_NEW_LIST, + VV_NULL, + VV_INFINITY, + VV_RESTORE_DEFAULT, + VV_TEXT_LOCATE, + VV_PROCCALL_RETVAL, + VV_WEAKREF, + ) + + var/markstring + if(!(VV_MARKED_DATUM in restricted_classes)) + markstring = "[VV_MARKED_DATUM] (CURRENT: [(istype(holder) && istype(holder.marked_datum))? holder.marked_datum.type : "NULL"])" + classes += markstring + + var/list/tagstrings = new + if(!(VV_TAGGED_DATUM in restricted_classes) && holder && LAZYLEN(holder.tagged_datums)) + var/i = 0 + for(var/datum/iter_tagged_datum as anything in holder.tagged_datums) + i++ + var/new_tagstring = "[VV_TAGGED_DATUM] #[i]: [iter_tagged_datum.type])" + tagstrings[new_tagstring] = iter_tagged_datum + classes += new_tagstring + + if(restricted_classes) + classes -= restricted_classes + + if(extra_classes) + classes += extra_classes + + .["class"] = input(src, "What kind of data?", "Variable Type", default_class) as null|anything in classes + if(holder && holder.marked_datum && .["class"] == markstring) + .["class"] = VV_MARKED_DATUM + + if(holder && tagstrings[.["class"]]) + var/datum/chosen_datum = tagstrings[.["class"]] + .["value"] = chosen_datum + .["class"] = VV_TAGGED_DATUM + + + switch(.["class"]) + if(VV_TEXT) + .["value"] = input("Enter new text:", "Text", current_value) as null|text + if(.["value"] == null) + .["class"] = null + return + if(VV_MESSAGE) + .["value"] = input("Enter new text:", "Text", current_value) as null|message + if(.["value"] == null) + .["class"] = null + return + + + if(VV_NUM) + .["value"] = input("Enter new number:", "Num", current_value) as null|num + if(.["value"] == null) + .["class"] = null + return + + if(VV_BITFIELD) + .["value"] = input_bitfield(usr, "Editing bitfield: [var_name]", var_name, current_value) + if(.["value"] == null) + .["class"] = null + return + + if(VV_ATOM_TYPE) + .["value"] = pick_closest_path(FALSE) + if(.["value"] == null) + .["class"] = null + return + + if(VV_DATUM_TYPE) + .["value"] = pick_closest_path(FALSE, get_fancy_list_of_datum_types()) + if(.["value"] == null) + .["class"] = null + return + + if(VV_TYPE) + var/type = current_value + var/error = "" + do + type = input("Enter type:[error]", "Type", type) as null|text + if(!type) + break + type = text2path(type) + error = "\nType not found, Please try again" + while(!type) + if(!type) + .["class"] = null + return + .["value"] = type + + if(VV_ATOM_REFERENCE) + var/type = pick_closest_path(FALSE) + var/subtypes = vv_subtype_prompt(type) + if(subtypes == null) + .["class"] = null + return + var/list/things = vv_reference_list(type, subtypes) + var/value = input("Select reference:", "Reference", current_value) as null|anything in things + if(!value) + .["class"] = null + return + .["value"] = things[value] + + if(VV_DATUM_REFERENCE) + var/type = pick_closest_path(FALSE, get_fancy_list_of_datum_types()) + var/subtypes = vv_subtype_prompt(type) + if(subtypes == null) + .["class"] = null + return + var/list/things = vv_reference_list(type, subtypes) + var/value = input("Select reference:", "Reference", current_value) as null|anything in things + if(!value) + .["class"] = null + return + .["value"] = things[value] + + if(VV_MOB_REFERENCE) + var/type = pick_closest_path(FALSE, make_types_fancy(typesof(/mob))) + var/subtypes = vv_subtype_prompt(type) + if(subtypes == null) + .["class"] = null + return + var/list/things = vv_reference_list(type, subtypes) + var/value = input("Select reference:", "Reference", current_value) as null|anything in things + if(!value) + .["class"] = null + return + .["value"] = things[value] + + if(VV_WEAKREF) + var/type = pick_closest_path(FALSE, get_fancy_list_of_datum_types()) + var/subtypes = vv_subtype_prompt(type) + if(subtypes == null) + .["class"] = null + return + var/list/things = vv_reference_list(type, subtypes) + var/value = input("Select reference:", "Reference", current_value) as null|anything in things + if(!value) + .["class"] = null + return + .["value"] = WEAKREF(things[value]) + + if(VV_CLIENT) + .["value"] = input("Select reference:", "Reference", current_value) as null|anything in GLOB.clients + if(.["value"] == null) + .["class"] = null + return + + if(VV_FILE) + .["value"] = input("Pick file:", "File") as null|file + if(.["value"] == null) + .["class"] = null + return + + if(VV_ICON) + .["value"] = input("Pick icon:", "Icon") as null|icon + if(.["value"] == null) + .["class"] = null + return + + if(VV_MARKED_DATUM) + .["value"] = holder.marked_datum + if(.["value"] == null) + .["class"] = null + return + + if(VV_TAGGED_DATUM) + if(.["value"] == null) + .["class"] = null + return + + if(VV_PROCCALL_RETVAL) + var/list/get_retval = list() + callproc_blocking(get_retval) + .["value"] = get_retval[1] //should have been set in proccall! + if(.["value"] == null) + .["class"] = null + return + + if(VV_NEW_ATOM) + var/type = pick_closest_path(FALSE) + if(!type) + .["class"] = null + return + .["type"] = type + var/atom/newguy = new type() + newguy.datum_flags |= DF_VAR_EDITED + .["value"] = newguy + + if(VV_NEW_DATUM) + var/type = pick_closest_path(FALSE, get_fancy_list_of_datum_types()) + if(!type) + .["class"] = null + return + .["type"] = type + var/datum/newguy = new type() + newguy.datum_flags |= DF_VAR_EDITED + .["value"] = newguy + + if(VV_NEW_TYPE) + var/type = current_value + var/error = "" + do + type = input("Enter type:[error]", "Type", type) as null|text + if(!type) + break + type = text2path(type) + error = "\nType not found, Please try again" + while(!type) + if(!type) + .["class"] = null + return + .["type"] = type + var/datum/newguy = new type() + if(istype(newguy)) + newguy.datum_flags |= DF_VAR_EDITED + .["value"] = newguy + + if(VV_NEW_LIST) + .["type"] = /list + var/list/value = list() + + var/expectation = alert("Would you like to populate the list", "Populate List?", "Yes", "No") + if(!expectation || expectation == "No") + .["value"] = value + return . + + var/list/insert = null + while(TRUE) + insert = vv_get_value(restricted_classes = list(VV_RESTORE_DEFAULT)) + if(!insert["class"]) + break + value += LIST_VALUE_WRAP_LISTS(insert["value"]) + + + .["value"] = value + + if(VV_TEXT_LOCATE) + var/datum/D + do + var/ref = input("Enter reference:", "Reference") as null|text + if(!ref) + break + D = locate(ref) + if(!D) + tgui_alert(usr,"Invalid ref!") + continue + if(!D.can_vv_mark()) + tgui_alert(usr,"Datum can not be marked!") + continue + while(!D) + .["type"] = D.type + .["value"] = D + + if(VV_COLOR) + .["value"] = input("Enter new color:", "Color", current_value) as color|null + if(.["value"] == null) + .["class"] = null + return + + if(VV_COLOR_MATRIX) + .["value"] = open_color_matrix_editor() + if(.["value"] == color_matrix_identity()) //identity is equivalent to null + .["class"] = null + + if(VV_INFINITY) + .["value"] = INFINITY diff --git a/code/modules/admin/view_variables/mark_datum.dm b/code/modules/admin/view_variables/mark_datum.dm index dce40d83b1797..2841e34746293 100644 --- a/code/modules/admin/view_variables/mark_datum.dm +++ b/code/modules/admin/view_variables/mark_datum.dm @@ -10,6 +10,18 @@ if(!holder) return if(holder.marked_datum) + holder.UnregisterSignal(holder.marked_datum, COMSIG_QDELETING) vv_update_display(holder.marked_datum, "marked", "") holder.marked_datum = D + holder.RegisterSignal(holder.marked_datum, COMSIG_QDELETING, TYPE_PROC_REF(/datum/admins, handle_marked_del)) 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) + +/datum/admins/proc/handle_marked_del(datum/source) + SIGNAL_HANDLER + UnregisterSignal(marked_datum, COMSIG_QDELETING) + marked_datum = null diff --git a/code/modules/admin/view_variables/mass_edit_variables.dm b/code/modules/admin/view_variables/mass_edit_variables.dm new file mode 100644 index 0000000000000..efd32f333521a --- /dev/null +++ b/code/modules/admin/view_variables/mass_edit_variables.dm @@ -0,0 +1,274 @@ +/client/proc/cmd_mass_modify_object_variables(atom/A, var_name) + set category = "Debug" + set name = "Mass Edit Variables" + set desc = "(target) Edit all instances of a target item's variables" + + var/method = 0 //0 means strict type detection while 1 means this type and all subtypes (IE: /obj/item with this set to 1 will set it to ALL items) + + if(tgui_alert(usr, "Are you sure you'd like to mass-modify every instance of the [var_name] variable? This can break everything if you do not know what you are doing.", "Slow down, chief!", list("Yes", "No"), 60 SECONDS) != "Yes") + return + + if(!check_rights(R_VAREDIT)) + return + + if(A?.type) + method = vv_subtype_prompt(A.type) + + src.massmodify_variables(A, var_name, method) + SSblackbox.record_feedback("tally", "admin_verb", 1, "Mass Edit Variables") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + +/client/proc/massmodify_variables(datum/O, var_name = "", method = 0) + if(!check_rights(R_VAREDIT)) + return + if(!istype(O)) + return + + var/variable = "" + if(!var_name) + var/list/names = list() + for (var/V in O.vars) + names += V + + names = sort_list(names) + + variable = input("Which var?", "Var") as null|anything in names + else + variable = var_name + + if(!variable || !O.can_vv_get(variable)) + return + var/default + var/var_value = O.vars[variable] + + if(variable in GLOB.VVckey_edit) + to_chat(src, "It's forbidden to mass-modify ckeys. It'll crash everyone's client you dummy.", confidential = TRUE) + return + if(variable in GLOB.VVlocked) + if(!check_rights(R_DEBUG)) + return + if(variable in GLOB.VVicon_edit_lock) + if(!check_rights(R_FUN|R_DEBUG)) + return + if(variable in GLOB.VVpixelmovement) + if(!check_rights(R_DEBUG)) + return + var/prompt = tgui_alert(usr, "Editing this var may irreparably break tile gliding for the rest of the round. THIS CAN'T BE UNDONE", "DANGER", list("ABORT ", "Continue", " ABORT")) + if (prompt != "Continue") + return + + default = vv_get_class(variable, var_value) + + if(isnull(default)) + to_chat(src, "Unable to determine variable type.", confidential = TRUE) + else + to_chat(src, "Variable appears to be [uppertext(default)].", confidential = TRUE) + + to_chat(src, "Variable contains: [var_value]", confidential = TRUE) + + if(default == VV_NUM) + var/dir_text = "" + if(var_value > 0 && var_value < 16) + if(var_value & 1) + dir_text += "NORTH" + if(var_value & 2) + dir_text += "SOUTH" + if(var_value & 4) + dir_text += "EAST" + if(var_value & 8) + dir_text += "WEST" + + if(dir_text) + to_chat(src, "If a direction, direction is: [dir_text]", confidential = TRUE) + + var/value = vv_get_value(default_class = default) + var/new_value = value["value"] + var/class = value["class"] + + if(!class || !new_value == null && class != VV_NULL) + return + + if (class == VV_MESSAGE) + class = VV_TEXT + + if (value["type"]) + class = VV_NEW_TYPE + + var/original_name = "[O]" + + var/rejected = 0 + var/accepted = 0 + + switch(class) + if(VV_RESTORE_DEFAULT) + to_chat(src, "Finding items...", confidential = TRUE) + var/list/items = get_all_of_type(O.type, method) + to_chat(src, "Changing [items.len] items...", confidential = TRUE) + for(var/thing in items) + if (!thing) + continue + var/datum/D = thing + if (D.vv_edit_var(variable, initial(D.vars[variable])) != FALSE) + accepted++ + else + rejected++ + CHECK_TICK + + if(VV_TEXT) + var/list/varsvars = vv_parse_text(O, new_value) + var/pre_processing = new_value + var/unique + if (varsvars?.len) + unique = tgui_alert(usr, "Process vars unique to each instance, or same for all?", "Variable Association", list("Unique", "Same")) + if(unique == "Unique") + unique = TRUE + else + unique = FALSE + for(var/V in varsvars) + new_value = replacetext(new_value,"\[[V]]","[O.vars[V]]") + + to_chat(src, "Finding items...", confidential = TRUE) + var/list/items = get_all_of_type(O.type, method) + to_chat(src, "Changing [items.len] items...", confidential = TRUE) + for(var/thing in items) + if (!thing) + continue + var/datum/D = thing + if(unique) + new_value = pre_processing + for(var/V in varsvars) + new_value = replacetext(new_value,"\[[V]]","[D.vars[V]]") + + if (D.vv_edit_var(variable, new_value) != FALSE) + accepted++ + else + rejected++ + CHECK_TICK + + if (VV_NEW_TYPE) + var/many = tgui_alert(usr, "Create only one [value["type"]] and assign each or a new one for each thing", "How Many", list("One", "Many", "Cancel")) + if (many == "Cancel") + return + if (many == "Many") + many = TRUE + else + many = FALSE + + var/type = value["type"] + to_chat(src, "Finding items...", confidential = TRUE) + var/list/items = get_all_of_type(O.type, method) + to_chat(src, "Changing [items.len] items...", confidential = TRUE) + for(var/thing in items) + if (!thing) + continue + var/datum/D = thing + if(many && !new_value) + new_value = new type() + + if (D.vv_edit_var(variable, new_value) != FALSE) + accepted++ + else + rejected++ + new_value = null + CHECK_TICK + + else + to_chat(src, "Finding items...", confidential = TRUE) + var/list/items = get_all_of_type(O.type, method) + to_chat(src, "Changing [items.len] items...", confidential = TRUE) + for(var/thing in items) + if (!thing) + continue + var/datum/D = thing + if (D.vv_edit_var(variable, new_value) != FALSE) + accepted++ + else + rejected++ + CHECK_TICK + + + var/count = rejected+accepted + if (!count) + to_chat(src, "No objects found", confidential = TRUE) + return + if (!accepted) + to_chat(src, "Every object rejected your edit", confidential = TRUE) + return + if (rejected) + to_chat(src, "[rejected] out of [count] objects rejected your edit", confidential = TRUE) + + log_world("### MassVarEdit by [src]: [O.type] (A/R [accepted]/[rejected]) [variable]=[html_encode("[O.vars[variable]]")]([list2params(value)])") + log_admin("[key_name(src)] mass modified [original_name]'s [variable] to [O.vars[variable]] ([accepted] objects modified)") + message_admins("[key_name_admin(src)] mass modified [original_name]'s [variable] to [O.vars[variable]] ([accepted] objects modified)") + +//not using global lists as vv is a debug function and debug functions should rely on as less things as possible. +/proc/get_all_of_type(T, subtypes = TRUE) + var/list/typecache = list() + typecache[T] = 1 + if (subtypes) + typecache = typecacheof(typecache) + . = list() + if (ispath(T, /mob)) + for(var/mob/thing in world) + if (typecache[thing.type]) + . += thing + CHECK_TICK + + else if (ispath(T, /obj/machinery/door)) + for(var/obj/machinery/door/thing in world) + if (typecache[thing.type]) + . += thing + CHECK_TICK + + else if (ispath(T, /obj/machinery)) + for(var/obj/machinery/thing in world) + if (typecache[thing.type]) + . += thing + CHECK_TICK + + else if (ispath(T, /obj/item)) + for(var/obj/item/thing in world) + if (typecache[thing.type]) + . += thing + CHECK_TICK + + else if (ispath(T, /obj)) + for(var/obj/thing in world) + if (typecache[thing.type]) + . += thing + CHECK_TICK + + else if (ispath(T, /atom/movable)) + for(var/atom/movable/thing in world) + if (typecache[thing.type]) + . += thing + CHECK_TICK + + else if (ispath(T, /turf)) + for(var/turf/thing in world) + if (typecache[thing.type]) + . += thing + CHECK_TICK + + else if (ispath(T, /atom)) + for(var/atom/thing in world) + if (typecache[thing.type]) + . += thing + CHECK_TICK + + else if (ispath(T, /client)) + for(var/client/thing in GLOB.clients) + if (typecache[thing.type]) + . += thing + CHECK_TICK + + else if (ispath(T, /datum)) + for(var/datum/thing) + if (typecache[thing.type]) + . += thing + CHECK_TICK + + else + for(var/datum/thing in world) + if (typecache[thing.type]) + . += thing + CHECK_TICK diff --git a/code/modules/admin/view_variables/modify_variables.dm b/code/modules/admin/view_variables/modify_variables.dm new file mode 100644 index 0000000000000..67fbd0797bf76 --- /dev/null +++ b/code/modules/admin/view_variables/modify_variables.dm @@ -0,0 +1,398 @@ +GLOBAL_LIST_INIT(VVlocked, list("vars", "datum_flags", "client", "mob")) //Requires DEBUG +GLOBAL_PROTECT(VVlocked) +GLOBAL_LIST_INIT(VVicon_edit_lock, list("icon", "icon_state", "overlays", "underlays")) //Requires DEBUG or FUN +GLOBAL_PROTECT(VVicon_edit_lock) +GLOBAL_LIST_INIT(VVckey_edit, list("key", "ckey")) //Requires DEBUG or SPAWN +GLOBAL_PROTECT(VVckey_edit) +GLOBAL_LIST_INIT(VVpixelmovement, list("bound_x", "bound_y", "step_x", "step_y", "step_size", "bound_height", "bound_width", "bounds")) //No editing ever. +GLOBAL_PROTECT(VVpixelmovement) +GLOBAL_LIST_INIT(VVwarning, list("vars", "datum_flags", "client", "key", "ckey", "type")) +GLOBAL_PROTECT(VVwarning) + +/client/proc/vv_parse_text(O, new_var) + if(O && findtext(new_var,"\[")) + var/process_vars = tgui_alert(usr,"\[] detected in string, process as variables?","Process Variables?",list("Yes","No")) + if(process_vars == "Yes") + . = string2listofvars(new_var, O) + +//do they want you to include subtypes? +//FALSE = no subtypes, strict exact type pathing (or the type doesn't have subtypes) +//TRUE = Yes subtypes +//NULL = User cancelled at the prompt or invalid type given +/client/proc/vv_subtype_prompt(type) + if (!ispath(type)) + return + var/list/subtypes = subtypesof(type) + if (!subtypes || !subtypes.len) + return FALSE + if (subtypes?.len) + switch(tgui_alert(usr,"Strict object type detection?", "Type detection", list("Strictly this type","This type and subtypes", "Cancel"))) + if("Strictly this type") + return FALSE + if("This type and subtypes") + return TRUE + else + return + +/client/proc/vv_reference_list(type, subtypes) + . = list() + var/list/types = list(type) + if (subtypes) + types = typesof(type) + + var/list/fancytypes = make_types_fancy(types) + + for(var/fancytype in fancytypes) //swap the assoication + types[fancytypes[fancytype]] = fancytype + + var/things = get_all_of_type(type, subtypes) + + var/i = 0 + for(var/thing in things) + var/datum/D = thing + i++ + //try one of 3 methods to shorten the type text: + // fancy type, + // fancy type with the base type removed from the begaining, + // the type with the base type removed from the begaining + var/fancytype = types[D.type] + if (findtext(fancytype, types[type])) + fancytype = copytext(fancytype, length(types[type]) + 1) + var/shorttype = copytext("[D.type]", length("[type]") + 1) + if (length_char(shorttype) > length_char(fancytype)) + shorttype = fancytype + if (!length(shorttype)) + shorttype = "/" + + .["[D]([shorttype])[REF(D)]#[i]"] = D + +/client/proc/mod_list_add_ass(atom/O) //hehe + + var/list/L = vv_get_value(restricted_classes = list(VV_RESTORE_DEFAULT)) + var/class = L["class"] + if (!class) + return + var/var_value = L["value"] + + if(class == VV_TEXT || class == VV_MESSAGE) + var/list/varsvars = vv_parse_text(O, var_value) + for(var/V in varsvars) + var_value = replacetext(var_value,"\[[V]]","[O.vars[V]]") + + return var_value + + +/client/proc/mod_list_add(list/L, atom/O, original_name, objectvar) + var/list/LL = vv_get_value(restricted_classes = list(VV_RESTORE_DEFAULT)) + var/class = LL["class"] + if (!class) + return + var/var_value = LL["value"] + + if(class == VV_TEXT || class == VV_MESSAGE) + var/list/varsvars = vv_parse_text(O, var_value) + for(var/V in varsvars) + var_value = replacetext(var_value,"\[[V]]","[O.vars[V]]") + + if (O) + L = L.Copy() + + L += list(var_value) //var_value could be a list + + switch(tgui_alert(usr,"Would you like to associate a value with the list entry?",,list("Yes","No"))) + if("Yes") + L[var_value] = mod_list_add_ass(O) //hehe + if (O) + if (O.vv_edit_var(objectvar, L) == FALSE) + to_chat(src, "Your edit was rejected by the object.", confidential = TRUE) + return + log_world("### ListVarEdit by [src]: [(O ? O.type : "/list")] [objectvar]: ADDED=[var_value]") + log_admin("[key_name(src)] modified [original_name]'s [objectvar]: ADDED=[var_value]") + message_admins("[key_name_admin(src)] modified [original_name]'s [objectvar]: ADDED=[var_value]") + +/client/proc/mod_list(list/L, atom/O, original_name, objectvar, index, autodetect_class = FALSE) + if(!check_rights(R_VAREDIT)) + return + if(!istype(L, /list)) + to_chat(src, "Not a List.", confidential = TRUE) + return + + if(L.len > 1000) + var/confirm = tgui_alert(usr, "The list you're trying to edit is very long, continuing may crash the server.", "Warning", list("Continue", "Abort")) + if(confirm != "Continue") + return + + var/is_normal_list = IS_NORMAL_LIST(L) + var/list/names = list() + for (var/i in 1 to L.len) + var/key = L[i] + var/value + if (is_normal_list && !isnum(key)) + value = L[key] + if (value == null) + value = "null" + names["#[i] [key] = [value]"] = i + if (!index) + var/variable = input("Which var?","Var") as null|anything in names + "(ADD VAR)" + "(CLEAR NULLS)" + "(CLEAR DUPES)" + "(SHUFFLE)" + + if(variable == null) + return + + if(variable == "(ADD VAR)") + mod_list_add(L, O, original_name, objectvar) + return + + if(variable == "(CLEAR NULLS)") + L = L.Copy() + list_clear_nulls(L) + if (!O.vv_edit_var(objectvar, L)) + to_chat(src, "Your edit was rejected by the object.", confidential = TRUE) + return + log_world("### ListVarEdit by [src]: [O.type] [objectvar]: CLEAR NULLS") + log_admin("[key_name(src)] modified [original_name]'s [objectvar]: CLEAR NULLS") + message_admins("[key_name_admin(src)] modified [original_name]'s list [objectvar]: CLEAR NULLS") + return + + if(variable == "(CLEAR DUPES)") + L = unique_list(L) + if (!O.vv_edit_var(objectvar, L)) + to_chat(src, "Your edit was rejected by the object.", confidential = TRUE) + return + log_world("### ListVarEdit by [src]: [O.type] [objectvar]: CLEAR DUPES") + log_admin("[key_name(src)] modified [original_name]'s [objectvar]: CLEAR DUPES") + message_admins("[key_name_admin(src)] modified [original_name]'s list [objectvar]: CLEAR DUPES") + return + + if(variable == "(SHUFFLE)") + L = shuffle(L) + if (!O.vv_edit_var(objectvar, L)) + to_chat(src, "Your edit was rejected by the object.", confidential = TRUE) + return + log_world("### ListVarEdit by [src]: [O.type] [objectvar]: SHUFFLE") + log_admin("[key_name(src)] modified [original_name]'s [objectvar]: SHUFFLE") + message_admins("[key_name_admin(src)] modified [original_name]'s list [objectvar]: SHUFFLE") + return + + index = names[variable] + + + var/assoc_key + if (index == null) + return + var/assoc = 0 + var/prompt = tgui_alert(usr, "Do you want to edit the key or its assigned value?", "Associated List", list("Key", "Assigned Value", "Cancel")) + if (prompt == "Cancel") + return + if (prompt == "Assigned Value") + assoc = 1 + assoc_key = L[index] + var/default + var/variable + var/old_assoc_value //EXPERIMENTAL - Keep old associated value while modifying key, if any + if(is_normal_list) + if (assoc) + variable = L[assoc_key] + else + variable = L[index] + //EXPERIMENTAL - Keep old associated value while modifying key, if any + if(IS_VALID_ASSOC_KEY(variable)) + var/found = L[variable] + if(!isnull(found)) + old_assoc_value = found + // + + default = vv_get_class(objectvar, variable) + + to_chat(src, "Variable appears to be [uppertext(default)].", confidential = TRUE) + + to_chat(src, "Variable contains: [variable]", confidential = TRUE) + + if(default == VV_NUM) + var/dir_text = "" + var/tdir = variable + if(tdir > 0 && tdir < 16) + if(tdir & 1) + dir_text += "NORTH" + if(tdir & 2) + dir_text += "SOUTH" + if(tdir & 4) + dir_text += "EAST" + if(tdir & 8) + dir_text += "WEST" + + if(dir_text) + to_chat(usr, "If a direction, direction is: [dir_text]", confidential = TRUE) + + var/original_var = variable + + if (O) + L = L.Copy() + var/class + if(autodetect_class) + if (default == VV_TEXT) + default = VV_MESSAGE + class = default + var/list/LL = vv_get_value(default_class = default, current_value = original_var, restricted_classes = list(VV_RESTORE_DEFAULT), extra_classes = list(VV_LIST, "DELETE FROM LIST")) + class = LL["class"] + if (!class) + return + var/new_var = LL["value"] + + if(class == VV_MESSAGE) + class = VV_TEXT + + switch(class) //Spits a runtime error if you try to modify an entry in the contents list. Dunno how to fix it, yet. + if(VV_LIST) + mod_list(variable, O, original_name, objectvar) + + if("DELETE FROM LIST") + L.Cut(index, index+1) + if (O) + if (O.vv_edit_var(objectvar, L)) + to_chat(src, "Your edit was rejected by the object.", confidential = TRUE) + return + log_world("### ListVarEdit by [src]: [O.type] [objectvar]: REMOVED=[html_encode("[original_var]")]") + log_admin("[key_name(src)] modified [original_name]'s [objectvar]: REMOVED=[original_var]") + message_admins("[key_name_admin(src)] modified [original_name]'s [objectvar]: REMOVED=[original_var]") + return + + if(VV_TEXT) + var/list/varsvars = vv_parse_text(O, new_var) + for(var/V in varsvars) + new_var = replacetext(new_var,"\[[V]]","[O.vars[V]]") + + + if(is_normal_list) + if(assoc) + L[assoc_key] = new_var + else + L[index] = new_var + if(!isnull(old_assoc_value) && IS_VALID_ASSOC_KEY(new_var)) + L[new_var] = old_assoc_value + if (O) + if (O.vv_edit_var(objectvar, L) == FALSE) + to_chat(src, "Your edit was rejected by the object.", confidential = TRUE) + return + log_world("### ListVarEdit by [src]: [(O ? O.type : "/list")] [objectvar]: [original_var]=[new_var]") + log_admin("[key_name(src)] modified [original_name]'s [objectvar]: [original_var]=[new_var]") + message_admins("[key_name_admin(src)] modified [original_name]'s varlist [objectvar]: [original_var]=[new_var]") + +/proc/vv_varname_lockcheck(param_var_name) + if(param_var_name in GLOB.VVlocked) + if(!check_rights(R_DEBUG)) + return FALSE + if(param_var_name in GLOB.VVckey_edit) + if(!check_rights(R_SPAWN|R_DEBUG)) + return FALSE + if(param_var_name in GLOB.VVicon_edit_lock) + if(!check_rights(R_FUN|R_DEBUG)) + return FALSE + if(param_var_name in GLOB.VVpixelmovement) + if(alert(usr, "Editing this var WILL break smooth tile movement for the rest of the round. THIS CAN'T BE UNDONE", "DANGER", "ABORT ", "Continue", " ABORT") != "Continue") + return FALSE + if(param_var_name in GLOB.VVwarning) + if(alert(usr, "Editing this var may break things. Are you sure you want to continue?", "Warning", "Yes", "No") != "Yes") + return FALSE + return TRUE + +/client/proc/modify_variables(atom/O, param_var_name = null, autodetect_class = 0) + if(!check_rights(R_VAREDIT)) + return + + var/class + var/variable + var/var_value + + if(param_var_name) + if(!(param_var_name in O.vars)) + to_chat(src, "A variable with this name ([param_var_name]) doesn't exist in this datum ([O])", confidential = TRUE) + return + variable = param_var_name + + else + var/list/names = list() + for (var/V in O.vars) + names += V + + names = sort_list(names) + + variable = input("Which var?","Var") as null|anything in names + if(!variable) + return + + if(!O.can_vv_get(variable)) + return + + var_value = O.vars[variable] + if(!vv_varname_lockcheck(variable)) + return + + var/default = vv_get_class(variable, var_value) + + if(isnull(default)) + to_chat(src, "Unable to determine variable type.", confidential = TRUE) + else + to_chat(src, "Variable appears to be [uppertext(default)].", confidential = TRUE) + + to_chat(src, "Variable contains: [var_value]", confidential = TRUE) + + if(default == VV_NUM) + var/dir_text = "" + if(var_value > 0 && var_value < 16) + if(var_value & 1) + dir_text += "NORTH" + if(var_value & 2) + dir_text += "SOUTH" + if(var_value & 4) + dir_text += "EAST" + if(var_value & 8) + dir_text += "WEST" + + if(dir_text) + to_chat(src, "If a direction, direction is: [dir_text]", confidential = TRUE) + + if(autodetect_class && default != VV_NULL) + if (default == VV_TEXT) + default = VV_MESSAGE + class = default + + var/list/value = vv_get_value(class, default, var_value, extra_classes = list(VV_LIST), var_name = variable) + class = value["class"] + + if (!class) + return + var/var_new = value["value"] + + if(class == VV_MESSAGE) + class = VV_TEXT + + var/original_name = "[O]" + + switch(class) + if(VV_LIST) + if(!islist(var_value)) + mod_list(list(), O, original_name, variable) + + mod_list(var_value, O, original_name, variable) + return + + if(VV_RESTORE_DEFAULT) + var_new = initial(O.vars[variable]) + + if(VV_TEXT) + var/list/varsvars = vv_parse_text(O, var_new) + for(var/V in varsvars) + var_new = replacetext(var_new,"\[[V]]","[O.vars[V]]") + + + if (O.vv_edit_var(variable, var_new) == FALSE) + to_chat(src, "Your edit was rejected by the object.", confidential = TRUE) + return + vv_update_display(O, "varedited", VV_MSG_EDITED) + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_VAR_EDIT, args) + log_world("### VarEdit by [key_name(src)]: [O.type] [variable]=[var_value] => [var_new]") + log_admin("[key_name(src)] modified [original_name]'s [variable] from [html_encode("[var_value]")] to [html_encode("[var_new]")]") + var/msg = "[key_name_admin(src)] modified [original_name]'s [variable] from [var_value] to [var_new]" + message_admins(msg) + admin_ticket_log(O, msg) + return TRUE diff --git a/code/modules/admin/view_variables/nobody_wants_to_learn_matrix_math.dm b/code/modules/admin/view_variables/nobody_wants_to_learn_matrix_math.dm new file mode 100644 index 0000000000000..872bd27d62739 --- /dev/null +++ b/code/modules/admin/view_variables/nobody_wants_to_learn_matrix_math.dm @@ -0,0 +1,80 @@ + +/** + * ## nobody wants to learn matrix math! + * + * More than just a completely true statement, this datum is created as a tgui interface + * allowing you to modify each vector until you know what you're doing. + * Much like filteriffic, 'nobody wants to learn matrix math' is meant for developers like you and I + * to implement interesting matrix transformations without the hassle if needing to know... algebra? Damn, i'm stupid. + */ +/datum/nobody_wants_to_learn_matrix_math + var/atom/target + var/matrix/testing_matrix + +/datum/nobody_wants_to_learn_matrix_math/New(atom/target) + src.target = target + testing_matrix = matrix(target.transform) + +/datum/nobody_wants_to_learn_matrix_math/Destroy(force, ...) + QDEL_NULL(testing_matrix) + return ..() + +/datum/nobody_wants_to_learn_matrix_math/ui_state(mob/user) + return GLOB.admin_state + +/datum/nobody_wants_to_learn_matrix_math/ui_close(mob/user) + qdel(src) + +/datum/nobody_wants_to_learn_matrix_math/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "MatrixMathTester") + ui.open() + +/datum/nobody_wants_to_learn_matrix_math/ui_data() + var/list/data = list() + data["matrix_a"] = testing_matrix.a + data["matrix_b"] = testing_matrix.b + data["matrix_c"] = testing_matrix.c + data["matrix_d"] = testing_matrix.d + data["matrix_e"] = testing_matrix.e + data["matrix_f"] = testing_matrix.f + data["pixelated"] = target.appearance_flags & PIXEL_SCALE + return data + +/datum/nobody_wants_to_learn_matrix_math/ui_act(action, list/params) + . = ..() + if(.) + return + + switch(action) + if("change_var") + var/matrix_var_name = params["var_name"] + var/matrix_var_value = params["var_value"] + if(testing_matrix.vv_edit_var(matrix_var_name, matrix_var_value) == FALSE) + to_chat(src, "Your edit was rejected by the object. This is a bug with the matrix tester, not your fault, so report it on github.", confidential = TRUE) + return + set_transform() + if("scale") + testing_matrix.Scale(params["x"], params["y"]) + set_transform() + if("translate") + testing_matrix.Translate(params["x"], params["y"]) + set_transform() + if("shear") + testing_matrix.Shear(params["x"], params["y"]) + set_transform() + if("turn") + testing_matrix.Turn(params["angle"]) + set_transform() + if("toggle_pixel") + target.appearance_flags ^= PIXEL_SCALE + +/datum/nobody_wants_to_learn_matrix_math/proc/set_transform() + animate(target, transform = testing_matrix, time = 0.5 SECONDS) + testing_matrix = matrix(target.transform) + +/client/proc/open_matrix_tester(atom/in_atom) + if(holder) + var/datum/nobody_wants_to_learn_matrix_math/matrix_tester = new(in_atom) + matrix_tester.ui_interact(mob) diff --git a/code/modules/admin/view_variables/tag_datum.dm b/code/modules/admin/view_variables/tag_datum.dm new file mode 100644 index 0000000000000..3b611e3cdf934 --- /dev/null +++ b/code/modules/admin/view_variables/tag_datum.dm @@ -0,0 +1,18 @@ +/client/proc/tag_datum(datum/target_datum) + if(!holder || QDELETED(target_datum)) + return + holder.add_tagged_datum(target_datum) + +/client/proc/toggle_tag_datum(datum/target_datum) + if(!holder || !target_datum) + return + + if(LAZYFIND(holder.tagged_datums, target_datum)) + holder.remove_tagged_datum(target_datum) + else + holder.add_tagged_datum(target_datum) + +/client/proc/tag_datum_mapview(datum/target_datum as mob|obj|turf|area in view(view)) + set category = "Debug" + set name = "Tag Datum" + tag_datum(target_datum) diff --git a/code/modules/admin/view_variables/topic.dm b/code/modules/admin/view_variables/topic.dm new file mode 100644 index 0000000000000..02e27f4f73f8e --- /dev/null +++ b/code/modules/admin/view_variables/topic.dm @@ -0,0 +1,122 @@ +//DO NOT ADD MORE TO THIS FILE. +//Use vv_do_topic() for datums! +/client/proc/view_var_Topic(href, href_list, hsrc) + if( (usr.client != src) || !src.holder || !holder.CheckAdminHref(href, href_list)) + return + var/target = GET_VV_TARGET + vv_do_basic(target, href_list, href) + if(isdatum(target)) + var/datum/D = target + D.vv_do_topic(href_list) + else if(islist(target)) + vv_do_list(target, href_list) + if(href_list["vars"]) + var/datum/vars_target = locate(href_list["vars"]) + if(href_list["special_varname"]) // Some special vars can't be located even if you have their ref, you have to use this instead + vars_target = vars_target.vars[href_list["special_varname"]] + debug_variables(vars_target) + +//Stuff below aren't in dropdowns/etc. + + if(check_rights(R_VAREDIT)) + + //~CARN: for renaming mobs (updates their name, real_name, mind.name, their ID/PDA and datacore records). + + if(href_list["rename"]) + if(!check_rights(NONE)) + return + + var/mob/M = locate(href_list["rename"]) in GLOB.mob_list + if(!istype(M)) + to_chat(usr, "This can only be used on instances of type /mob", confidential = TRUE) + return + + var/new_name = stripped_input(usr,"What would you like to name this mob?","Input a name",M.real_name,MAX_NAME_LEN) + + // If the new name is something that would be restricted by IC chat filters, + // give the admin a warning but allow them to do it anyway if they want. + if(is_ic_filtered(new_name) || is_soft_ic_filtered(new_name) && tgui_alert(usr, "Your selected name contains words restricted by IC chat filters. Confirm this new name?", "IC Chat Filter Conflict", list("Confirm", "Cancel")) == "Cancel") + return + + if( !new_name || !M ) + return + + message_admins("Admin [key_name_admin(usr)] renamed [key_name_admin(M)] to [new_name].") + M.fully_replace_character_name(M.real_name,new_name) + vv_update_display(M, "name", new_name) + vv_update_display(M, "real_name", M.real_name || "No real name") + + else if(href_list["rotatedatum"]) + if(!check_rights(NONE)) + return + + var/atom/A = locate(href_list["rotatedatum"]) + if(!istype(A)) + to_chat(usr, "This can only be done to instances of type /atom", confidential = TRUE) + return + + switch(href_list["rotatedir"]) + if("right") + A.setDir(turn(A.dir, -45)) + if("left") + A.setDir(turn(A.dir, 45)) + vv_update_display(A, "dir", dir2text(A.dir)) + + + else if(href_list["adjustDamage"] && href_list["mobToDamage"]) + if(!check_rights(NONE)) + return + + var/mob/living/L = locate(href_list["mobToDamage"]) in GLOB.mob_list + if(!istype(L)) + return + + var/Text = href_list["adjustDamage"] + + var/amount = input("Deal how much damage to mob? (Negative values here heal)","Adjust [Text]loss",0) as num|null + + if(isnull(amount)) + return + + if(!L) + to_chat(usr, "Mob doesn't exist anymore", confidential = TRUE) + return + + var/newamt + switch(Text) + if("brute") + L.adjustBruteLoss(amount) + newamt = L.getBruteLoss() + if("fire") + L.adjustFireLoss(amount) + newamt = L.getFireLoss() + if("toxin") + L.adjustToxLoss(amount) + newamt = L.getToxLoss() + if("oxygen") + L.adjustOxyLoss(amount) + newamt = L.getOxyLoss() + if("clone") + L.adjustCloneLoss(amount) + newamt = L.getCloneLoss() + if("stamina") + L.adjustStaminaLoss(amount) + newamt = L.getStaminaLoss() + else + to_chat(usr, "You caused an error. DEBUG: Text:[Text] Mob:[L]", confidential = TRUE) + return + + if(amount != 0) + var/log_msg = "[key_name(usr)] dealt [amount] amount of [Text] damage to [key_name(L)]" + message_admins("[key_name(usr)] dealt [amount] amount of [Text] damage to [ADMIN_LOOKUPFLW(L)]") + log_admin(log_msg) + admin_ticket_log(L, "[log_msg]") + vv_update_display(L, Text, "[newamt]") + + + //Finally, refresh if something modified the list. + if(href_list["datumrefresh"]) + var/datum/DAT = locate(href_list["datumrefresh"]) + if(isdatum(DAT) || istype(DAT, /client) || islist(DAT)) + debug_variables(DAT) + diff --git a/code/modules/admin/view_variables/topic_basic.dm b/code/modules/admin/view_variables/topic_basic.dm new file mode 100644 index 0000000000000..fb48cde803a53 --- /dev/null +++ b/code/modules/admin/view_variables/topic_basic.dm @@ -0,0 +1,147 @@ +//Not using datum.vv_do_topic for very basic/low level debug things, incase the datum's vv_do_topic is runtiming/whatnot. +/client/proc/vv_do_basic(datum/target, href_list) + var/target_var = GET_VV_VAR_TARGET + if(check_rights(R_VAREDIT)) + if(target_var) + if(href_list[VV_HK_BASIC_EDIT]) + if(!modify_variables(target, target_var, 1)) + return + switch(target_var) + if("name") + vv_update_display(target, "name", "[target]") + if("dir") + var/atom/A = target + if(istype(A)) + vv_update_display(target, "dir", dir2text(A.dir) || A.dir) + if("ckey") + var/mob/living/L = target + if(istype(L)) + vv_update_display(target, "ckey", L.ckey || "No ckey") + if("real_name") + var/mob/living/L = target + if(istype(L)) + vv_update_display(target, "real_name", L.real_name || "No real name") + + if(href_list[VV_HK_BASIC_CHANGE]) + modify_variables(target, target_var, 0) + if(href_list[VV_HK_BASIC_MASSEDIT]) + cmd_mass_modify_object_variables(target, target_var) + if(check_rights(R_ADMIN, FALSE)) + if(href_list[VV_HK_EXPOSE]) + var/value = vv_get_value(VV_CLIENT) + if (value["class"] != VV_CLIENT) + return + var/client/C = value["value"] + if (!C) + return + if(!target) + to_chat(usr, span_warning("The object you tried to expose to [C] no longer exists (nulled or hard-deled)"), confidential = TRUE) + return + message_admins("[key_name_admin(usr)] Showed [key_name_admin(C)] a VV window") + log_admin("Admin [key_name(usr)] Showed [key_name(C)] a VV window of a [target]") + to_chat(C, "[holder.fakekey ? "an Administrator" : "[usr.client.key]"] has granted you access to view a View Variables window", confidential = TRUE) + C.debug_variables(target) + if(check_rights(R_DEBUG)) + if(href_list[VV_HK_DELETE]) + usr.client.admin_delete(target) + if (isturf(target)) // show the turf that took its place + usr.client.debug_variables(target) + return + + if(href_list[VV_HK_MARK]) + usr.client.mark_datum(target) + if(href_list[VV_HK_TAG]) + usr.client.tag_datum(target) + if(href_list[VV_HK_ADDCOMPONENT]) + if(!check_rights(NONE)) + return + var/list/names = list() + var/list/componentsubtypes = sort_list(subtypesof(/datum/component), GLOBAL_PROC_REF(cmp_typepaths_asc)) + names += "---Components---" + names += componentsubtypes + names += "---Elements---" + names += sort_list(subtypesof(/datum/element), GLOBAL_PROC_REF(cmp_typepaths_asc)) + + var/result = tgui_input_list(usr, "Choose a component/element to add", "Add Component", names) + if(isnull(result)) + return + if(!usr || result == "---Components---" || result == "---Elements---") + return + + if(QDELETED(src)) + to_chat(usr, "That thing doesn't exist anymore!", confidential = TRUE) + return + + var/add_source + if(ispath(result, /datum/component)) + var/datum/component/comp_path = result + if(initial(comp_path.dupe_mode) == COMPONENT_DUPE_SOURCES) + add_source = tgui_input_text(usr, "Enter a source for the component", "Add Component", "ADMIN-ABUSE") + if(isnull(add_source)) + return + + var/list/lst = get_callproc_args() + if(!lst) + return + + var/datumname = "error" + lst.Insert(1, result) + if(result in componentsubtypes) + datumname = "component" + target._AddComponent(lst, add_source) + else + datumname = "element" + target._AddElement(lst) + log_admin("[key_name(usr)] has added [result] [datumname] to [key_name(target)].") + message_admins(span_notice("[key_name_admin(usr)] has added [result] [datumname] to [key_name_admin(target)].")) + if(href_list[VV_HK_REMOVECOMPONENT] || href_list[VV_HK_MASS_REMOVECOMPONENT]) + if(!check_rights(NONE)) + return + var/mass_remove = href_list[VV_HK_MASS_REMOVECOMPONENT] + var/list/components = list() + for(var/datum/component/component in target.GetComponents(/datum/component)) + components += component.type + var/list/names = list() + names += "---Components---" + if(length(components)) + names += sort_list(components, GLOBAL_PROC_REF(cmp_typepaths_asc)) + names += "---Elements---" + // We have to list every element here because there is no way to know what element is on this object without doing some sort of hack. + names += sort_list(subtypesof(/datum/element), GLOBAL_PROC_REF(cmp_typepaths_asc)) + var/path = tgui_input_list(usr, "Choose a component/element to remove. All elements listed here may not be on the datum.", "Remove element", names) + if(isnull(path)) + return + if(!usr || path == "---Components---" || path == "---Elements---") + return + if(QDELETED(src)) + to_chat(usr, "That thing doesn't exist anymore!") + return + var/list/targets_to_remove_from = list(target) + if(mass_remove) + var/method = vv_subtype_prompt(target.type) + targets_to_remove_from = get_all_of_type(target.type, method) + + if(alert(usr, "Are you sure you want to mass-delete [path] on [target.type]?", "Mass Remove Confirmation", "Yes", "No") == "No") + return + + for(var/datum/target_to_remove_from as anything in targets_to_remove_from) + if(ispath(path, /datum/element)) + var/list/lst = get_callproc_args() + if(!lst) + lst = list() + lst.Insert(1, path) + target._RemoveElement(lst) + else + var/list/components_actual = target_to_remove_from.GetComponents(path) + for(var/to_delete in components_actual) + qdel(to_delete) + + message_admins(span_notice("[key_name_admin(usr)] has [mass_remove? "mass" : ""] removed [path] component from [mass_remove? target.type : key_name_admin(target)].")) + if(href_list[VV_HK_MODIFY_GREYSCALE]) + if(!check_rights(NONE)) + return + var/datum/greyscale_modify_menu/menu = new(target, usr, SSgreyscale.configurations) + menu.ui_interact(usr) + if(href_list[VV_HK_CALLPROC]) + usr.client.callproc_datum(target) + diff --git a/code/modules/admin/view_variables/topic_list.dm b/code/modules/admin/view_variables/topic_list.dm new file mode 100644 index 0000000000000..21b534d3d4ed2 --- /dev/null +++ b/code/modules/admin/view_variables/topic_list.dm @@ -0,0 +1,43 @@ +//LISTS - CAN NOT DO VV_DO_TOPIC BECAUSE LISTS AREN'T DATUMS :( +/client/proc/vv_do_list(list/target, href_list) + var/target_index = text2num(GET_VV_VAR_TARGET) + if(check_rights(R_VAREDIT)) + if(target_index) + if(href_list[VV_HK_LIST_EDIT]) + mod_list(target, null, "list", "contents", target_index, autodetect_class = TRUE) + if(href_list[VV_HK_LIST_CHANGE]) + mod_list(target, null, "list", "contents", target_index, autodetect_class = FALSE) + if(href_list[VV_HK_LIST_REMOVE]) + var/variable = target[target_index] + var/prompt = tgui_alert(usr,"Do you want to remove item number [target_index] from list?", "Confirm", list("Yes", "No")) + if (prompt != "Yes") + return + target.Cut(target_index, target_index+1) + log_world("### ListVarEdit by [src]: /list's contents: REMOVED=[html_encode("[variable]")]") + log_admin("[key_name(src)] modified list's contents: REMOVED=[variable]") + message_admins("[key_name_admin(src)] modified list's contents: REMOVED=[variable]") + if(href_list[VV_HK_LIST_ADD]) + mod_list_add(target, null, "list", "contents") + if(href_list[VV_HK_LIST_ERASE_DUPES]) + unique_list_in_place(target) + log_world("### ListVarEdit by [src]: /list contents: CLEAR DUPES") + log_admin("[key_name(src)] modified list's contents: CLEAR DUPES") + message_admins("[key_name_admin(src)] modified list's contents: CLEAR DUPES") + if(href_list[VV_HK_LIST_ERASE_NULLS]) + list_clear_nulls(target) + log_world("### ListVarEdit by [src]: /list contents: CLEAR NULLS") + log_admin("[key_name(src)] modified list's contents: CLEAR NULLS") + message_admins("[key_name_admin(src)] modified list's contents: CLEAR NULLS") + if(href_list[VV_HK_LIST_SET_LENGTH]) + var/value = vv_get_value(VV_NUM) + if (value["class"] != VV_NUM || value["value"] > max(50000, target.len)) //safety - would rather someone not put an extra 0 and erase the server's memory lmao. + return + target.len = value["value"] + log_world("### ListVarEdit by [src]: /list len: [target.len]") + log_admin("[key_name(src)] modified list's len: [target.len]") + message_admins("[key_name_admin(src)] modified list's len: [target.len]") + if(href_list[VV_HK_LIST_SHUFFLE]) + shuffle_inplace(target) + log_world("### ListVarEdit by [src]: /list contents: SHUFFLE") + log_admin("[key_name(src)] modified list's contents: SHUFFLE") + message_admins("[key_name_admin(src)] modified list's contents: SHUFFLE") diff --git a/code/modules/admin/view_variables/view_variables.dm b/code/modules/admin/view_variables/view_variables.dm new file mode 100644 index 0000000000000..9f0d86e04f656 --- /dev/null +++ b/code/modules/admin/view_variables/view_variables.dm @@ -0,0 +1,283 @@ +/client/proc/debug_variables(datum/thing 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) //This is usr because admins can call the proc on other clients, even if they're not admins, to show them VVs. + to_chat(usr, span_danger("You need to be an administrator to access this."), confidential = TRUE) + return + + if(!thing) + return + + var/datum/asset/asset_cache_datum = get_asset_datum(/datum/asset/simple/vv) + asset_cache_datum.send(usr) + + var/islist = islist(thing) || (!isdatum(thing) && hascall(thing, "Cut")) // Some special lists dont count as lists, but can be detected by if they have list procs + if(!islist && !isdatum(thing)) + return + + var/title = "" + var/refid = REF(thing) + var/icon/sprite + var/hash + + var/type = islist? /list : thing.type + var/no_icon = FALSE + + if(isatom(thing)) + sprite = getFlatIcon(thing) + if(!sprite) + no_icon = TRUE + + else if(isimage(thing)) + var/image/image_object = thing + sprite = icon(image_object.icon, image_object.icon_state) + + var/sprite_text + if(sprite) + hash = md5(sprite) + src << browse_rsc(sprite, "vv[hash].png") + sprite_text = no_icon ? "\[NO ICON\]" : "" + + title = "[thing] ([REF(thing)]) = [type]" + var/formatted_type = replacetext("[type]", "/", "/") + + var/list/header = islist ? list("/list") : thing.vv_get_header() + + var/ref_line = "@[copytext(refid, 2, -1)]" // get rid of the brackets, add a @ prefix for copy pasting in asay + + var/marked_line + if(holder && holder.marked_datum && holder.marked_datum == thing) + marked_line = VV_MSG_MARKED + var/tagged_line + if(holder && LAZYFIND(holder.tagged_datums, thing)) + var/tag_index = LAZYFIND(holder.tagged_datums, thing) + tagged_line = VV_MSG_TAGGED(tag_index) + var/varedited_line + if(!islist && (thing.datum_flags & DF_VAR_EDITED)) + varedited_line = VV_MSG_EDITED + var/deleted_line + if(!islist && thing.gc_destroyed) + deleted_line = VV_MSG_DELETED + + var/list/dropdownoptions + if (islist) + dropdownoptions = list( + "---", + "Add Item" = VV_HREF_TARGETREF_INTERNAL(refid, VV_HK_LIST_ADD), + "Remove Nulls" = VV_HREF_TARGETREF_INTERNAL(refid, VV_HK_LIST_ERASE_NULLS), + "Remove Dupes" = VV_HREF_TARGETREF_INTERNAL(refid, VV_HK_LIST_ERASE_DUPES), + "Set len" = VV_HREF_TARGETREF_INTERNAL(refid, VV_HK_LIST_SET_LENGTH), + "Shuffle" = VV_HREF_TARGETREF_INTERNAL(refid, VV_HK_LIST_SHUFFLE), + "Show VV To Player" = VV_HREF_TARGETREF_INTERNAL(refid, VV_HK_EXPOSE), + "---" + ) + for(var/i in 1 to length(dropdownoptions)) + var/name = dropdownoptions[i] + var/link = dropdownoptions[name] + dropdownoptions[i] = "" + else + dropdownoptions = thing.vv_get_dropdown() + + var/list/names = list() + if(!islist) + for(var/varname in thing.vars) + names += varname + + sleep(1 TICKS) + + var/list/variable_html = list() + if(islist) + var/list/list_value = thing + for(var/i in 1 to list_value.len) + var/key = list_value[i] + var/value + if(IS_NORMAL_LIST(list_value) && IS_VALID_ASSOC_KEY(key)) + value = list_value[key] + variable_html += debug_variable(i, value, 0, list_value) + else + names = sort_list(names) + for(var/varname in names) + if(thing.can_vv_get(varname)) + variable_html += thing.vv_get_var(varname) + + var/html = {" + + + + [title] + + + + +
    + + + + + +
    + + + + +
    + [sprite_text] +
    + [header.Join()] +
    +
    +
    + [formatted_type] +
    [ref_line] + [marked_line] + [tagged_line] + [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") + +/client/proc/vv_update_display(datum/thing, span, content) + src << output("[span]:[content]", "variables[REF(thing)].browser:replace_span") diff --git a/code/modules/ai/ai_behaviors/ai_behavior.dm b/code/modules/ai/ai_behaviors/ai_behavior.dm index 1a42bc5735984..3846ef5837f95 100644 --- a/code/modules/ai/ai_behaviors/ai_behavior.dm +++ b/code/modules/ai/ai_behaviors/ai_behavior.dm @@ -54,7 +54,7 @@ Registers signals, handles the pathfinding element addition/removal alongside ma //We always use the escorted atom as our reference point for looking for target. So if we don't have any escorted atom, we take ourselve as the reference START_PROCESSING(SSprocessing, src) if(is_offered_on_creation) - LAZYDISTINCTADD(GLOB.ssd_living_mobs, mob_parent) + LAZYOR(GLOB.ssd_living_mobs, mob_parent) /datum/ai_behavior/Destroy(force, ...) . = ..() @@ -353,7 +353,7 @@ These are parameter based so the ai behavior can choose to (un)register the sign if(!get_dir(mob_parent, atom_to_walk_to)) //We're right on top, move out of it step_dir = pick(CARDINAL_ALL_DIRS) var/turf/next_turf = get_step(mob_parent, step_dir) - if(!(next_turf.flags_atom & AI_BLOCKED) && !mob_parent.Move(get_step(mob_parent, step_dir), step_dir)) + if(!(next_turf.atom_flags & AI_BLOCKED) && !mob_parent.Move(get_step(mob_parent, step_dir), step_dir)) SEND_SIGNAL(mob_parent, COMSIG_OBSTRUCTED_MOVE, step_dir) else if(ISDIAGONALDIR(step_dir)) mob_parent.next_move_slowdown += (DIAG_MOVEMENT_ADDED_DELAY_MULTIPLIER - 1) * mob_parent.cached_multiplicative_slowdown //Not perfect but good enough @@ -361,7 +361,7 @@ These are parameter based so the ai behavior can choose to (un)register the sign if(prob(sidestep_prob)) step_dir = pick(LeftAndRightOfDir(get_dir(mob_parent, atom_to_walk_to))) var/turf/next_turf = get_step(mob_parent, step_dir) - if(!(next_turf.flags_atom & AI_BLOCKED) && !mob_parent.Move(get_step(mob_parent, step_dir), step_dir)) + if(!(next_turf.atom_flags & AI_BLOCKED) && !mob_parent.Move(get_step(mob_parent, step_dir), step_dir)) SEND_SIGNAL(mob_parent, COMSIG_OBSTRUCTED_MOVE, step_dir) else if(ISDIAGONALDIR(step_dir)) mob_parent.next_move_slowdown += (DIAG_MOVEMENT_ADDED_DELAY_MULTIPLIER - 1) * mob_parent.cached_multiplicative_slowdown @@ -371,10 +371,10 @@ These are parameter based so the ai behavior can choose to (un)register the sign else step_dir = get_dir(mob_parent, atom_to_walk_to) var/turf/next_turf = get_step(mob_parent, step_dir) - if(next_turf?.flags_atom & AI_BLOCKED || (!mob_parent.Move(next_turf, step_dir) && !(SEND_SIGNAL(mob_parent, COMSIG_OBSTRUCTED_MOVE, step_dir) & COMSIG_OBSTACLE_DEALT_WITH))) + if(next_turf?.atom_flags & AI_BLOCKED || (!mob_parent.Move(next_turf, step_dir) && !(SEND_SIGNAL(mob_parent, COMSIG_OBSTRUCTED_MOVE, step_dir) & COMSIG_OBSTACLE_DEALT_WITH))) step_dir = pick(LeftAndRightOfDir(step_dir)) next_turf = get_step(mob_parent, step_dir) - if(next_turf?.flags_atom & AI_BLOCKED) + if(next_turf?.atom_flags & AI_BLOCKED) return if(mob_parent.Move(get_step(mob_parent, step_dir), step_dir) && ISDIAGONALDIR(step_dir)) mob_parent.next_move_slowdown += (DIAG_MOVEMENT_ADDED_DELAY_MULTIPLIER - 1) * mob_parent.cached_multiplicative_slowdown diff --git a/code/modules/ai/ai_behaviors/xeno/puppet.dm b/code/modules/ai/ai_behaviors/xeno/puppet.dm index 63fd4f082af32..3605d6a97b9b6 100644 --- a/code/modules/ai/ai_behaviors/xeno/puppet.dm +++ b/code/modules/ai/ai_behaviors/xeno/puppet.dm @@ -25,6 +25,10 @@ RegisterSignal(master, COMSIG_PUPPET_CHANGE_ALL_ORDER, PROC_REF(change_order)) RegisterSignal(mob_parent, COMSIG_OBSTRUCTED_MOVE, PROC_REF(deal_with_obstacle)) RegisterSignal(mob_parent, COMSIG_PUPPET_CHANGE_ORDER, PROC_REF(change_order)) + RegisterSignal(escorted_atom, COMSIG_XENOMORPH_REST, PROC_REF(start_resting)) + RegisterSignal(escorted_atom, COMSIG_XENOMORPH_UNREST, PROC_REF(stop_resting)) + RegisterSignal(escorted_atom, COMSIG_ELEMENT_JUMP_STARTED, PROC_REF(do_jump)) + RegisterSignal(escorted_atom, COMSIG_LIVING_DO_RESIST, PROC_REF(parent_resist)) return ..() ///cleans up signals and unregisters obstructed move signal @@ -151,7 +155,7 @@ ///behavior to deal with obstacles /datum/ai_behavior/puppet/deal_with_obstacle(datum/source, direction) var/turf/obstacle_turf = get_step(mob_parent, direction) - if(obstacle_turf.flags_atom & AI_BLOCKED) + if(obstacle_turf.atom_flags & AI_BLOCKED) return for(var/thing in obstacle_turf.contents) if(istype(thing, /obj/structure/window_frame)) //if its a window, climb it after 2 seconds @@ -184,4 +188,28 @@ return if(feed.ai_should_use(target)) feed.use_ability(target) + +/// rest when puppeter does +/datum/ai_behavior/puppet/proc/start_resting(mob/source) + SIGNAL_HANDLER + var/mob/living/living = mob_parent + living?.set_resting(TRUE) + +/// stop resting when puppeter does +/datum/ai_behavior/puppet/proc/stop_resting(mob/source) + SIGNAL_HANDLER + var/mob/living/living = mob_parent + living?.set_resting(FALSE) + +/// resist when puppeter does +/datum/ai_behavior/puppet/proc/do_jump() + SIGNAL_HANDLER + var/datum/component/jump/puppet_jump = mob_parent.GetComponent(/datum/component/jump) + puppet_jump?.do_jump(mob_parent) + +/// resist when puppeter does +/datum/ai_behavior/puppet/proc/parent_resist() + SIGNAL_HANDLER + var/mob/living/carbon/xenomorph/puppet/puppet_parent = mob_parent + puppet_parent?.do_resist() RU TGMC EDIT*/ diff --git a/code/modules/ai/ai_behaviors/xeno/xeno.dm b/code/modules/ai/ai_behaviors/xeno/xeno.dm index aa686075bf0a5..650e4181d7e32 100644 --- a/code/modules/ai/ai_behaviors/xeno/xeno.dm +++ b/code/modules/ai/ai_behaviors/xeno/xeno.dm @@ -95,7 +95,7 @@ /datum/ai_behavior/xeno/deal_with_obstacle(datum/source, direction) var/turf/obstacle_turf = get_step(mob_parent, direction) - if(obstacle_turf.flags_atom & AI_BLOCKED) + if(obstacle_turf.atom_flags & AI_BLOCKED) return for(var/thing in obstacle_turf.contents) if(istype(thing, /obj/structure/window_frame)) diff --git a/code/modules/ai/ai_behaviors/xeno/xeno_illusion.dm b/code/modules/ai/ai_behaviors/xeno/xeno_illusion.dm index 535540062aa78..ed9f76377eff3 100644 --- a/code/modules/ai/ai_behaviors/xeno/xeno_illusion.dm +++ b/code/modules/ai/ai_behaviors/xeno/xeno_illusion.dm @@ -50,6 +50,7 @@ appearance = original_mob.appearance desc = original_mob.desc name = original_mob.name + render_target = null RegisterSignals(original_mob, list(COMSIG_QDELETING, COMSIG_MOB_DEATH), PROC_REF(destroy_illusion)) QDEL_IN(src, life_time) diff --git a/code/modules/ai/ai_node.dm b/code/modules/ai/ai_node.dm index c6b295bff8061..778bee2070f42 100644 --- a/code/modules/ai/ai_node.dm +++ b/code/modules/ai/ai_node.dm @@ -6,7 +6,7 @@ icon = 'icons/effects/landmarks_static.dmi' icon_state = "ai_node" //Pure white 'X' with word "AI" beneath anchored = TRUE //No pulling those nodes yo - flags_atom = SHUTTLE_IMMUNE + atom_flags = SHUTTLE_IMMUNE #ifdef TESTING invisibility = 0 #else @@ -58,7 +58,7 @@ /obj/effect/ai_node/Destroy() GLOB.all_nodes[unique_id + 1] = null - rustg_remove_node_astart("[unique_id]") + rustg_remove_node_astar("[unique_id]") //Remove our reference to self from nearby adjacent node's adjacent nodes for(var/direction AS in adjacent_nodes) var/obj/effect/ai_node/node = adjacent_nodes[direction] diff --git a/code/modules/animations/animation_library.dm b/code/modules/animations/animation_library.dm index ad35e283ead1a..351e6d3c1ca7a 100644 --- a/code/modules/animations/animation_library.dm +++ b/code/modules/animations/animation_library.dm @@ -129,7 +129,7 @@ Can look good elsewhere as well.*/ //Regular fadeout disappear, for most objects. /proc/animation_destruction_fade(atom/A, speed = 12) - A.flags_atom |= NOINTERACT + A.atom_flags |= NOINTERACT A.mouse_opacity = MOUSE_OPACITY_TRANSPARENT //We don't want them to click this while the animation is still playing. A.density = FALSE //So it doesn't block anything. var/i = 1 + (0.1 * rand(1,5)) @@ -139,7 +139,7 @@ Can look good elsewhere as well.*/ //Fadeout when something gets hit. Not completely done yet, as offset doesn't want to cooperate. /proc/animation_destruction_knock_fade(atom/A, speed = 7, x_n = rand(10,18), y_n = rand(10,18)) - A.flags_atom |= NOINTERACT + A.atom_flags |= NOINTERACT A.mouse_opacity = MOUSE_OPACITY_TRANSPARENT A.density = FALSE var/x_o = initial(A.pixel_x) diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 1a4a0986810f2..4c14295912edf 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -14,7 +14,7 @@ slot_l_hand_str = 'icons/mob/inhands/equipment/tools_left.dmi', slot_r_hand_str = 'icons/mob/inhands/equipment/tools_right.dmi', ) - flags_atom = CONDUCT + atom_flags = CONDUCT w_class = WEIGHT_CLASS_SMALL throwforce = 2 throw_speed = 3 @@ -95,6 +95,8 @@ /obj/item/assembly/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(isassembly(I)) var/obj/item/assembly/A = I if(!A.secured && !secured) diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 9a5dd95b76d59..9ad4e837db79e 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -3,7 +3,7 @@ icon = 'icons/obj/assemblies/new_assemblies.dmi' icon_state = "holder" item_state = "assembly" - flags_atom = CONDUCT + atom_flags = CONDUCT throwforce = 5 w_class = WEIGHT_CLASS_SMALL throw_speed = 2 @@ -45,24 +45,24 @@ A.holder_movement() -/obj/item/assembly_holder/update_icon() - cut_overlays() +/obj/item/assembly_holder/update_overlays() + . = ..() if(a_left) - add_overlay("[a_left.icon_state]_left") + . += "[a_left.icon_state]_left" for(var/O in a_left.attached_overlays) - add_overlay("[O]_l") + . += "[O]_l" if(a_right) if(a_right.is_position_sensitive) - add_overlay("[a_right.icon_state]_right") + . += "[a_right.icon_state]_right" for(var/O in a_right.attached_overlays) - add_overlay("[O]_r") + . += "[O]_r" else var/mutable_appearance/right = mutable_appearance(icon, "[a_right.icon_state]_left") right.transform = matrix(-1, 0, 0, 0, 1, 0) for(var/O in a_right.attached_overlays) right.add_overlay("[O]_l") - add_overlay(right) + . += right if(master) master.update_icon() diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 20e961ead7085..36f27fb98e6f8 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -57,16 +57,18 @@ update_icon() return secured -/obj/item/assembly/infra/update_icon() - cut_overlays() +/obj/item/assembly/infra/update_overlays() + . = ..() attached_overlays = list() if(on) - add_overlay("infrared_on") + . += "infrared_on" attached_overlays += "infrared_on" if(visible && secured) - add_overlay("infrared_visible") + . += "infrared_visible" attached_overlays += "infrared_visible" +/obj/item/assembly/infra/update_icon() + . = ..() if(holder) holder.update_icon() @@ -176,7 +178,7 @@ return if(offender && isitem(offender)) var/obj/item/I = offender - if(I.flags_item & ITEM_ABSTRACT) + if(I.item_flags & ITEM_ABSTRACT) return return refreshBeam() @@ -246,6 +248,6 @@ return if(isitem(AM)) var/obj/item/I = AM - if(I.flags_item & ITEM_ABSTRACT) + if(I.item_flags & ITEM_ABSTRACT) return master.trigger_beam(AM, get_turf(src)) diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index 7ece31d072a3b..ed0bf5c07fac5 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -31,6 +31,7 @@ /obj/item/assembly/mousetrap/update_icon_state() + . = ..() if(armed) icon_state = "mousetraparmed" else diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 297280a0ee6d9..384f331fe03d6 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -94,15 +94,19 @@ if(scanning && proximity_monitor.SetRange(sense)) sense() -/obj/item/assembly/prox_sensor/update_icon() - cut_overlays() +/obj/item/assembly/prox_sensor/update_overlays() + . = ..() + attached_overlays = list() if(timing) - add_overlay("prox_timing") + . += "prox_timing" attached_overlays += "prox_timing" if(scanning) - add_overlay("prox_scanning") + . += "prox_scanning" attached_overlays += "prox_scanning" + +/obj/item/assembly/prox_sensor/update_icon() + . = ..() if(holder) holder.update_icon() diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 2fb4342965066..210e70381f37c 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -28,6 +28,7 @@ return TRUE /obj/item/assembly/signaler/update_icon() + . = ..() if(holder) holder.update_icon() @@ -94,6 +95,8 @@ Code: /obj/item/assembly/signaler/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(issignaler(I)) var/obj/item/assembly/signaler/signaler2 = I if(secured && signaler2.secured) diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 2332a74675f16..e04770cc1098e 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -63,12 +63,15 @@ timer_end() time = saved_time -/obj/item/assembly/timer/update_icon() - cut_overlays() +/obj/item/assembly/timer/update_overlays() + . = ..() attached_overlays = list() if(timing) - add_overlay("timer_timing") + . += "timer_timing" attached_overlays += "timer_timing" + +/obj/item/assembly/timer/update_icon() + . = ..() if(holder) holder.update_icon() diff --git a/code/modules/asset_cache/asset_list.dm b/code/modules/asset_cache/asset_list.dm index 64a831e6532df..c658aece2ae83 100644 --- a/code/modules/asset_cache/asset_list.dm +++ b/code/modules/asset_cache/asset_list.dm @@ -1,4 +1,4 @@ -#define ASSET_CROSS_ROUND_CACHE_DIRECTORY "tmp/assets" +#define ASSET_CROSS_ROUND_CACHE_DIRECTORY "cache/assets" //These datums are used to populate the asset cache, the proc "register()" does this. //Place any asset datums you create in asset_list_items.dm @@ -385,7 +385,7 @@ GLOBAL_LIST_EMPTY(asset_datums) var/icon/sheet_copy = icon(sheet) size[SPRSZ_STRIPPED] = null sheet_copy.Insert(I, icon_state=sprite_name) - size[SPRSZ_ICON] = sheet_copy + size[SPRSZ_ICON] = sheet_copy sprites[sprite_name] = list(size_id, position) else sizes[size_id] = size = list(1, I, null) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 7008f53430690..e802ee75f4a51 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -147,6 +147,53 @@ /datum/asset/spritesheet/hivestatus/create_spritesheets() InsertAll("", 'icons/UI_Icons/hive_status_icons.dmi') +/datum/asset/spritesheet/campaign + name = "campaign_base" + ///The dmi file used for this spritesheet + var/icon_sheet + ///The list of icon names to use for this sprite sheet + var/list/icon_names + +/datum/asset/spritesheet/campaign/create_spritesheets() + for(var/icon_name in icon_names) + var/icon/iconNormal = icon(icon_sheet, icon_name, SOUTH) + Insert(icon_name, iconNormal) + + var/icon/iconBig = icon(icon_sheet, icon_name, SOUTH) + iconBig.Scale(iconBig.Width()*2, iconBig.Height()*2) + Insert("[icon_name]_big", iconBig) + +/datum/asset/spritesheet/campaign/missions + name = "campaign_missions" + icon_sheet = 'icons/UI_Icons/campaign/mission_icons.dmi' + +/datum/asset/spritesheet/campaign/missions/New() + icon_names = GLOB.campaign_mission_icons + return ..() +/datum/asset/spritesheet/campaign/assets + name = "campaign_assets" + icon_sheet = 'icons/UI_Icons/campaign/asset_icons.dmi' + +/datum/asset/spritesheet/campaign/assets/New() + icon_names = GLOB.campaign_asset_icons + return ..() + +/datum/asset/spritesheet/campaign/perks + name = "campaign_perks" + icon_sheet = 'icons/UI_Icons/campaign/perk_icons.dmi' + +/datum/asset/spritesheet/campaign/perks/New() + icon_names = GLOB.campaign_perk_icons + return ..() + +/datum/asset/spritesheet/campaign/loadout_items + name = "campaign_loadout_items" + icon_sheet = 'icons/UI_Icons/campaign/loadout_item_icons.dmi' + +/datum/asset/spritesheet/campaign/loadout_items/New() + icon_names = GLOB.campaign_loadout_item_icons + return ..() + /datum/asset/simple/particle_editor assets = list( "motion" = 'icons/ui_icons/particle_editor/motion.png', diff --git a/code/modules/asset_cache/assets/vv.dm b/code/modules/asset_cache/assets/vv.dm new file mode 100644 index 0000000000000..0dd974c7c7942 --- /dev/null +++ b/code/modules/asset_cache/assets/vv.dm @@ -0,0 +1,4 @@ +/datum/asset/simple/vv + assets = list( + "view_variables.css" = 'html/admin/view_variables.css' + ) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index f6751fec60b7f..74120ba5b2299 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -204,7 +204,7 @@ return can_unwrench /obj/machinery/atmospherics/deconstruct(disassembled = TRUE) - if(!(flags_atom & NODECONSTRUCT)) + if(!(atom_flags & NODECONSTRUCT)) if(can_unwrench) var/obj/item/pipe/stored = new construction_type(loc, null, dir, src) stored.setPipingLayer(piping_layer) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm index 18d9828973ce3..b4503752f57b6 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm @@ -24,7 +24,8 @@ mode = CIRCULATOR_COLD -/obj/machinery/atmospherics/components/binary/circulator/update_icon() +/obj/machinery/atmospherics/components/binary/circulator/update_icon_state() + . = ..() if(!is_operational()) icon_state = "circ-p-[flipped]" else diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index bccd5715e07fc..c85d263280429 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -14,8 +14,9 @@ pipe_state = "filter" -/obj/machinery/atmospherics/components/trinary/filter/update_icon() - cut_overlays() +/obj/machinery/atmospherics/components/trinary/filter/update_overlays() + . = ..() + for(var/direction in GLOB.cardinals) if(!(direction & initialize_directions)) continue @@ -27,7 +28,7 @@ else cap = getpipeimage(icon, "cap", direction, piping_layer = piping_layer) - add_overlay(cap) + . += cap return ..() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 4170667653ae5..a083b9af8f1b6 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -120,6 +120,7 @@ set_light(initial(light_range)) /obj/machinery/atmospherics/components/unary/cryo_cell/update_icon_state() + . = ..() if(!on) icon_state = "cell_off" else @@ -222,6 +223,8 @@ /obj/machinery/atmospherics/components/unary/cryo_cell/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/reagent_containers/glass)) @@ -255,9 +258,12 @@ var/obj/item/healthanalyzer/J = I J.attack(occupant, user) - if(!istype(I, /obj/item/grab)) +/obj/machinery/atmospherics/components/unary/cryo_cell/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + . = ..() + if(.) + return + if(isxeno(user)) return - if(machine_stat & (NOPOWER|BROKEN)) to_chat(user, span_notice("\ [src] is non-functional!")) return @@ -266,33 +272,31 @@ to_chat(user, span_notice("\ [src] is already occupied!")) return - var/obj/item/grab/G = I - var/mob/M + var/mob/grabbed_mob - if(ismob(G.grabbed_thing)) - M = G.grabbed_thing + if(ismob(grab.grabbed_thing)) + grabbed_mob = grab.grabbed_thing - else if(istype(G.grabbed_thing,/obj/structure/closet/bodybag/cryobag)) - var/obj/structure/closet/bodybag/cryobag/C = G.grabbed_thing - if(!C.bodybag_occupant) + else if(istype(grab.grabbed_thing,/obj/structure/closet/bodybag/cryobag)) + var/obj/structure/closet/bodybag/cryobag/cryobag = grab.grabbed_thing + if(!cryobag.bodybag_occupant) to_chat(user, span_warning("The stasis bag is empty!")) return - M = C.bodybag_occupant - C.open() - user.start_pulling(M) - - if(!M) - return + grabbed_mob = cryobag.bodybag_occupant + cryobag.open() + user.start_pulling(grabbed_mob) - if(!ishuman(M)) + if(!ishuman(grabbed_mob)) to_chat(user, span_notice("\ [src] is compatible with humanoid anatomies only!")) return - if(M.abiotic()) + if(grabbed_mob.abiotic()) to_chat(user, span_warning("Subject cannot have abiotic items on.")) return - put_mob(M, TRUE) + put_mob(grabbed_mob, TRUE) + + return TRUE /obj/machinery/atmospherics/components/unary/cryo_cell/proc/put_mob(mob/living/carbon/M as mob, put_in = null) if (machine_stat & (NOPOWER|BROKEN)) @@ -440,15 +444,15 @@ /obj/machinery/atmospherics/components/unary/cryo_cell/can_crawl_through() return // can't ventcrawl in or out of cryo. -/obj/machinery/atmospherics/components/unary/cryo_cell/attack_alien(mob/living/carbon/xenomorph/X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) +/obj/machinery/atmospherics/components/unary/cryo_cell/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) if(!occupant) - to_chat(X, span_xenowarning("There is nothing of interest in there.")) + to_chat(xeno_attacker, span_xenowarning("There is nothing of interest in there.")) return - if(X.status_flags & INCORPOREAL || X.do_actions) + if(xeno_attacker.status_flags & INCORPOREAL || xeno_attacker.do_actions) return - visible_message(span_warning("[X] begins to pry the [src]'s cover!"), 3) + visible_message(span_warning("[xeno_attacker] begins to pry the [src]'s cover!"), 3) playsound(src,'sound/effects/metal_creaking.ogg', 25, 1) - if(!do_after(X, 2 SECONDS)) + if(!do_after(xeno_attacker, 2 SECONDS)) return playsound(loc, 'sound/effects/metal_creaking.ogg', 25, 1) go_out() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm index 06bbddd1b29d2..934ff6b9541e6 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm @@ -23,7 +23,8 @@ piping_layer = 3 icon_state = "he_map-3" -/obj/machinery/atmospherics/components/unary/heat_exchanger/update_icon() +/obj/machinery/atmospherics/components/unary/heat_exchanger/update_icon_state() + . = ..() if(nodes[1]) icon_state = "he1" var/obj/machinery/atmospherics/node = nodes[1] diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index ac74382c21f2a..205851befdc80 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -35,7 +35,8 @@ B += M.rating heat_capacity = 5000 * ((B - 1) ** 2) -/obj/machinery/atmospherics/components/unary/thermomachine/update_icon() +/obj/machinery/atmospherics/components/unary/thermomachine/update_icon_state() + . = ..() if(CHECK_BITFIELD(machine_stat, PANEL_OPEN)) icon_state = icon_state_open else if(on && is_operational()) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index 14134610b39b0..8095b92d1dc63 100755 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -16,7 +16,7 @@ welded = FALSE level = 1 layer = ATMOS_DEVICE_LAYER - flags_atom = SHUTTLE_IMMUNE + atom_flags = SHUTTLE_IMMUNE var/pump_direction = RELEASING @@ -69,7 +69,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/weld_cut_act(mob/living/user, obj/item/W) - if(istype(W, /obj/item/tool/pickaxe/plasmacutter)) + if(isplasmacutter(W)) var/obj/item/tool/pickaxe/plasmacutter/P = W if(!welded) to_chat(user, span_warning("\The [P] can only cut open welds!")) @@ -91,7 +91,7 @@ span_notice("You start welding [src] with [WT].")) add_overlay(GLOB.welding_sparks) playsound(loc, 'sound/items/weldingtool_weld.ogg', 25) - if(do_after(user, 50, NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(WT, /obj/item/tool/weldingtool/proc/isOn))) + if(do_after(user, 50, NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(WT, TYPE_PROC_REF(/obj/item/tool/weldingtool, isOn)))) playsound(get_turf(src), 'sound/items/welder2.ogg', 25, 1) if(!welded) user.visible_message(span_notice("[user] welds [src] shut."), \ @@ -137,12 +137,12 @@ /obj/machinery/atmospherics/components/unary/vent_pump/can_crawl_through() return !welded -/obj/machinery/atmospherics/components/unary/vent_pump/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/machinery/atmospherics/components/unary/vent_pump/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return - if(!welded || !(do_after(X, 2 SECONDS, IGNORE_HELD_ITEM, src, BUSY_ICON_HOSTILE))) + if(!welded || !(do_after(xeno_attacker, 2 SECONDS, IGNORE_HELD_ITEM, src, BUSY_ICON_HOSTILE))) return - X.visible_message("[X] furiously claws at [src]!", "We manage to clear away the stuff blocking the vent", "You hear loud scraping noises.") + xeno_attacker.visible_message("[xeno_attacker] furiously claws at [src]!", "We manage to clear away the stuff blocking the vent", "You hear loud scraping noises.") welded = FALSE update_icon() pipe_vision_img = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index 5351b50b16063..f018add780dfc 100755 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -13,7 +13,7 @@ welded = FALSE level = 1 layer = ATMOS_DEVICE_LAYER - flags_atom = SHUTTLE_IMMUNE + atom_flags = SHUTTLE_IMMUNE var/scrubbing = SCRUBBING //0 = siphoning, 1 = scrubbing var/filter_types = list()///datum/gas/carbon_dioxide) @@ -66,7 +66,7 @@ update_icon_nopipes() /obj/machinery/atmospherics/components/unary/vent_scrubber/weld_cut_act(mob/living/user, obj/item/W) - if(istype(W, /obj/item/tool/pickaxe/plasmacutter)) + if(isplasmacutter(W)) var/obj/item/tool/pickaxe/plasmacutter/P = W if(!welded) @@ -129,12 +129,12 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/can_crawl_through() return !welded -/obj/machinery/atmospherics/components/unary/vent_scrubber/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/machinery/atmospherics/components/unary/vent_scrubber/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return - if(!welded || !(do_after(X, 2 SECONDS, IGNORE_HELD_ITEM, src, BUSY_ICON_HOSTILE))) + if(!welded || !(do_after(xeno_attacker, 2 SECONDS, IGNORE_HELD_ITEM, src, BUSY_ICON_HOSTILE))) return - X.visible_message("[X] furiously claws at [src]!", "We manage to clear away the stuff blocking the scrubber.", "You hear loud scraping noises.") + xeno_attacker.visible_message("[xeno_attacker] furiously claws at [src]!", "We manage to clear away the stuff blocking the scrubber.", "You hear loud scraping noises.") welded = FALSE update_icon() pipe_vision_img = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir) diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index 06a4017b047e7..68eca497a7bab 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -56,6 +56,8 @@ /obj/machinery/meter/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(iswrench(I)) return wrench_act(user, I) @@ -70,7 +72,7 @@ return TRUE /obj/machinery/meter/deconstruct(disassembled = TRUE) - if(!(flags_atom & NODECONSTRUCT)) + if(!(atom_flags & NODECONSTRUCT)) new /obj/item/pipe_meter(loc) return ..() diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm index f9f6c98026057..3a2dd4e2707d6 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm @@ -30,12 +30,12 @@ return ..(target, given_layer, FALSE) //we want a normal pipe instead return ..(target, given_layer, TRUE) -/obj/machinery/atmospherics/pipe/heat_exchanging/junction/update_icon() +/obj/machinery/atmospherics/pipe/heat_exchanging/junction/update_icon_state() + . = ..() icon_state = "pipe[nodes[1] ? "1" : "0"][nodes[2] ? "1" : "0"]-[piping_layer]" update_layer() update_alpha() - /obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer1 piping_layer = 1 icon_state = "pipe11-1" diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm index b1b011e25b2c9..b4ba2bbc436fa 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm @@ -26,16 +26,16 @@ initialize_directions = NORTH|SOUTH|EAST|WEST initialize_directions &= ~dir -/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/update_icon() - cut_overlays() +/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/update_overlays() + . = ..() PIPING_LAYER_DOUBLE_SHIFT(center, piping_layer) - add_overlay(center) + . += center //Add non-broken pieces for(var/i in 1 to device_type) if(nodes[i]) - add_overlay( getpipeimage(icon, "pipe-[piping_layer]", get_dir(src, nodes[i])) ) + . += getpipeimage(icon, "pipe-[piping_layer]", get_dir(src, nodes[i])) update_layer() update_alpha() diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold4w.dm index 432413ab63963..5e7fea7215b86 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold4w.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold4w.dm @@ -24,16 +24,16 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/SetInitDirections() initialize_directions = initial(initialize_directions) -/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/update_icon() - cut_overlays() +/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/update_overlays() + . = ..() PIPING_LAYER_DOUBLE_SHIFT(center, piping_layer) - add_overlay(center) + . += center //Add non-broken pieces for(var/i in 1 to device_type) if(nodes[i]) - add_overlay( getpipeimage(icon, "pipe-[piping_layer]", get_dir(src, nodes[i])) ) + . += getpipeimage(icon, "pipe-[piping_layer]", get_dir(src, nodes[i])) update_layer() update_alpha() diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm index e3ed1a6c37af0..2143ac78a8d52 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm @@ -24,7 +24,8 @@ if(EAST, WEST) initialize_directions = EAST|WEST -/obj/machinery/atmospherics/pipe/heat_exchanging/simple/update_icon() +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/update_icon_state() + . = ..() icon_state = "pipe[nodes[1] ? "1" : "0"][nodes[2] ? "1" : "0"]-[piping_layer]" update_layer() update_alpha() diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm index 9b0c5fa98ef40..24a44e0fb05d2 100644 --- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm +++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm @@ -40,8 +40,8 @@ /obj/machinery/atmospherics/pipe/layer_manifold/proc/get_all_connected_nodes() return front_nodes + back_nodes + nodes -/obj/machinery/atmospherics/pipe/layer_manifold/update_icon() //HEAVILY WIP FOR UPDATE ICONS!! - cut_overlays() +/obj/machinery/atmospherics/pipe/layer_manifold/update_icon() //this sucks and someone should do it properly + . = ..() layer = initial(layer) + (PIPING_LAYER_MAX * PIPING_LAYER_LCHANGE) //This is above everything else. for(var/node in front_nodes) @@ -49,8 +49,6 @@ for(var/node in back_nodes) add_attached_images(node) - update_alpha() - /obj/machinery/atmospherics/pipe/layer_manifold/proc/add_attached_images(obj/machinery/atmospherics/A) if(!A) return diff --git a/code/modules/atmospherics/machinery/pipes/manifold.dm b/code/modules/atmospherics/machinery/pipes/manifold.dm index 2f6e54d888128..a3ffa8c2c4c44 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold.dm @@ -26,17 +26,18 @@ initialize_directions = NORTH|SOUTH|EAST|WEST initialize_directions &= ~dir -/obj/machinery/atmospherics/pipe/manifold/update_icon() - cut_overlays() +/obj/machinery/atmospherics/pipe/manifold/update_overlays() + . = ..() + if(!center) center = mutable_appearance(icon, "manifold_center") PIPING_LAYER_DOUBLE_SHIFT(center, piping_layer) - add_overlay(center) + . += center //Add non-broken pieces for(var/i in 1 to device_type) if(nodes[i]) - add_overlay( getpipeimage(icon, "pipe-[piping_layer]", get_dir(src, nodes[i])) ) + . += getpipeimage(icon, "pipe-[piping_layer]", get_dir(src, nodes[i])) update_layer() update_alpha() diff --git a/code/modules/atmospherics/machinery/pipes/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/manifold4w.dm index 3f8539eccaeee..9c05f67318715 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold4w.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold4w.dm @@ -23,17 +23,17 @@ /obj/machinery/atmospherics/pipe/manifold4w/SetInitDirections() initialize_directions = initial(initialize_directions) -/obj/machinery/atmospherics/pipe/manifold4w/update_icon() - cut_overlays() +/obj/machinery/atmospherics/pipe/manifold4w/update_overlays() + . = ..() if(!center) center = mutable_appearance(icon, "manifold_center") PIPING_LAYER_DOUBLE_SHIFT(center, piping_layer) - add_overlay(center) + . += center //Add non-broken pieces for(var/i in 1 to device_type) if(nodes[i]) - add_overlay( getpipeimage(icon, "pipe-[piping_layer]", get_dir(src, nodes[i])) ) + . += getpipeimage(icon, "pipe-[piping_layer]", get_dir(src, nodes[i])) update_layer() update_alpha() diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index 55bc0f7229688..88d88458990d5 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -3,7 +3,7 @@ plane = FLOOR_PLANE use_power = NO_POWER_USE can_unwrench = FALSE - flags_atom = SHUTTLE_IMMUNE + atom_flags = SHUTTLE_IMMUNE var/datum/pipeline/parent = null buckle_lying = -1 @@ -42,6 +42,8 @@ /obj/machinery/atmospherics/pipe/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/pipe_meter)) var/obj/item/pipe_meter/meter = I user.dropItemToGround(meter) diff --git a/code/modules/atmospherics/machinery/pipes/simple.dm b/code/modules/atmospherics/machinery/pipes/simple.dm index 672f4295dbf58..70469ef0ff168 100644 --- a/code/modules/atmospherics/machinery/pipes/simple.dm +++ b/code/modules/atmospherics/machinery/pipes/simple.dm @@ -27,7 +27,8 @@ if(EAST, WEST) initialize_directions = EAST|WEST -/obj/machinery/atmospherics/pipe/simple/update_icon() +/obj/machinery/atmospherics/pipe/simple/update_icon_state() + . = ..() icon_state = "pipe[nodes[1] ? "1" : "0"][nodes[2] ? "1" : "0"]-[piping_layer]" if(pipe_vision_img) pipe_vision_img.icon_state = icon_state diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 0541dd2b5be0e..84cd177d1f9bf 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -50,6 +50,7 @@ icon_state = "black" /obj/machinery/portable_atmospherics/canister/update_icon_state() + . = ..() if(machine_stat & BROKEN) icon_state = "[icon_state]-1" @@ -91,7 +92,7 @@ /obj/machinery/portable_atmospherics/canister/deconstruct(disassembled = TRUE) - if(!(flags_atom & NODECONSTRUCT)) + if(!(atom_flags & NODECONSTRUCT)) if(!(machine_stat & BROKEN)) disconnect() machine_stat |= BROKEN diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index a66b6d9dfc820..9bc1091c77d01 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -23,6 +23,8 @@ /obj/machinery/portable_atmospherics/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!istype(I, /obj/item/tank)) return holding = I diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm index 0016cd925590d..65ab1b00a3915 100644 --- a/code/modules/atmospherics/machinery/portable/pump.dm +++ b/code/modules/atmospherics/machinery/portable/pump.dm @@ -6,14 +6,17 @@ /// If the pump is on, controls icon_state var/on = FALSE -/obj/machinery/portable_atmospherics/pump/update_icon() +/obj/machinery/portable_atmospherics/pump/update_icon_state() + . = ..() icon_state = "psiphon:[on]" - cut_overlays() +/obj/machinery/portable_atmospherics/pump/update_overlays() + . = ..() + if(holding) - add_overlay("siphon-open") + . += "siphon-open" if(connected_port) - add_overlay("siphon-connector") + . += "siphon-connector" /obj/machinery/portable_atmospherics/pump/emp_act(severity) . = ..() diff --git a/code/modules/buildmode/buildmode.dm b/code/modules/buildmode/buildmode.dm index 3701b3b7879b1..1e92fb8c0f515 100644 --- a/code/modules/buildmode/buildmode.dm +++ b/code/modules/buildmode/buildmode.dm @@ -153,7 +153,7 @@ /datum/buildmode/proc/change_dir(newdir) build_dir = newdir close_dirswitch() - dirbutton.update_icon() + dirbutton.update_dir() return TRUE diff --git a/code/modules/buildmode/buttons.dm b/code/modules/buildmode/buttons.dm index 884828f44d358..080ef8eec0a7a 100644 --- a/code/modules/buildmode/buttons.dm +++ b/code/modules/buildmode/buttons.dm @@ -38,7 +38,8 @@ return TRUE -/atom/movable/screen/buildmode/mode/update_icon() +/atom/movable/screen/buildmode/mode/update_icon_state() + . = ..() icon_state = bd.mode.get_button_iconstate() @@ -58,12 +59,11 @@ screen_loc = "NORTH,WEST+2" name = "Change Dir" - -/atom/movable/screen/buildmode/bdir/update_icon() +///Updates the direction of the buildmode +/atom/movable/screen/buildmode/bdir/proc/update_dir() dir = bd.build_dir - /atom/movable/screen/buildmode/bdir/Click() bd.toggle_dirswitch() update_icon() diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 53644d95ad4af..8f58e23b34cef 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -188,7 +188,7 @@ if(CONFIG_GET(flag/log_access)) for(var/I in GLOB.clients) if(!I) - stack_trace("null in GLOB.clients during client/New()") + listclearnulls(GLOB.clients) continue if(I == src) continue @@ -270,10 +270,12 @@ return if(GLOB.custom_info) - to_chat(src, "

    Custom Information

    ") - to_chat(src, "

    The following custom information has been set for this round:

    ") - to_chat(src, span_alert("[GLOB.custom_info]")) - to_chat(src, "
    ") + to_chat(src, assemble_alert( + title = "Custom Information", + subtitle = "The following custom information has been set for this round.", + message = GLOB.custom_info, + color_override = "red" + )) connection_time = world.time connection_realtime = world.realtime diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm index d8a346be36c8b..3aa83f85eb024 100644 --- a/code/modules/client/preferences_gear.dm +++ b/code/modules/client/preferences_gear.dm @@ -225,3 +225,21 @@ GLOBAL_LIST_INIT(gear_datums, populate_gear_list()) cost = 2 slot = SLOT_R_HAND +/datum/gear/rosary + display_name = "Rosary" + path = /obj/item/rosary + cost = 1 + slot = SLOT_R_HAND + +/datum/gear/card/ace/hearts + display_name = "Old Ace of Hearts card" + path = /obj/item/toy/card/ace/hearts + cost = 1 + slot = SLOT_R_HAND + +/datum/gear/card/ace/spades + display_name = "Old Ace of Spades card" + path = /obj/item/toy/card/ace/spades + cost = 1 + slot = SLOT_R_HAND + diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm index 782551b9a460f..048a2a86de9c3 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preferences_toggles.dm @@ -157,7 +157,7 @@ to_chat(src, span_notice("You will now hear ambient sounds.")) else to_chat(src, span_notice("You will no longer hear ambient sounds.")) - mob.stop_sound_channel(CHANNEL_AMBIENT) + mob.stop_sound_channel(CHANNEL_AMBIENCE) usr.client.update_ambience_pref() @@ -203,7 +203,7 @@ GLOBAL_LIST_INIT(ghost_forms, list("Default" = GHOST_DEFAULT_FORM, "Ghost Ian 1" return var/mob/dead/observer/O = mob - O.update_icon(GLOB.ghost_forms[new_form]) + O.pick_form(GLOB.ghost_forms[new_form]) GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE, GHOST_ORBIT_TRIANGLE, GHOST_ORBIT_SQUARE, GHOST_ORBIT_HEXAGON, GHOST_ORBIT_PENTAGON)) @@ -293,7 +293,7 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE usr.client.prefs.toggles_sound ^= SOUND_WEATHER prefs.save_preferences() - to_chat(usr, span_notice("You will [(usr.client.prefs.toggles_sound & SOUND_WEATHER) ? "no longer" : "now"] hear weather.")) + to_chat(usr, span_notice("You will [(usr.client.prefs.toggles_sound & SOUND_WEATHER) ? "now" : "no longer"] hear weather.")) /client/verb/toggle_gas_mask_sound() set category = "Preferences" diff --git a/code/modules/client/preferences_ui.dm b/code/modules/client/preferences_ui.dm index d6d79fc57ce14..e23464c70cd10 100644 --- a/code/modules/client/preferences_ui.dm +++ b/code/modules/client/preferences_ui.dm @@ -152,6 +152,7 @@ data["radialstackspref"] = !!(toggles_gameplay & RADIAL_STACKS) data["radiallasersgunpref"] = !!(toggles_gameplay & RADIAL_LASERGUNS) data["autointeractdeployablespref"] = !!(toggles_gameplay & AUTO_INTERACT_DEPLOYABLES) + data["directional_attacks"] = !!(toggles_gameplay & DIRECTIONAL_ATTACKS) data["scaling_method"] = scaling_method data["pixel_size"] = pixel_size data["parallax"] = parallax @@ -974,6 +975,9 @@ if("autointeractdeployablespref") toggles_gameplay ^= AUTO_INTERACT_DEPLOYABLES + if("directional_attacks") + toggles_gameplay ^= DIRECTIONAL_ATTACKS + if("pixel_size") switch(pixel_size) if(PIXEL_SCALING_AUTO) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index a22c884344fb2..5bbdf8d9be306 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -3,7 +3,7 @@ // Resets the armor on clothing since by default /objs get 100 bio armor soft_armor = list() - flags_inventory = NOQUICKEQUIP + inventory_flags = NOQUICKEQUIP ///Assoc list of available slots. Since this keeps track of all currently equiped attachments per object, this cannot be a string_list() var/list/attachments_by_slot = list() @@ -16,7 +16,7 @@ var/list/starting_attachments = list() /// Bitflags used to determine the state of the armor (light on, overlay used, or reinfornced), currently support flags are in [equipment.dm:100] - var/flags_armor_features = NONE + var/armor_features_flags = NONE /// used for headgear, masks, and glasses, to see how much they protect eyes from bright lights. var/eye_protection = 0 @@ -35,26 +35,26 @@ /obj/item/clothing/equipped(mob/user, slot) . = ..() - if(!(flags_equip_slot & slotdefine2slotbit(slot))) + if(!(equip_slot_flags & slotdefine2slotbit(slot))) return if(!ishuman(user)) return var/mob/living/carbon/human/human_user = user if(accuracy_mod) human_user.adjust_mob_accuracy(accuracy_mod) - if(flags_armor_features & ARMOR_FIRE_RESISTANT) + if(armor_features_flags & ARMOR_FIRE_RESISTANT) ADD_TRAIT(human_user, TRAIT_NON_FLAMMABLE, src) /obj/item/clothing/unequipped(mob/unequipper, slot) - if(!(flags_equip_slot & slotdefine2slotbit(slot))) + if(!(equip_slot_flags & slotdefine2slotbit(slot))) return ..() if(!ishuman(unequipper)) return ..() var/mob/living/carbon/human/human_unequipper = unequipper if(accuracy_mod) human_unequipper.adjust_mob_accuracy(-accuracy_mod) - if(flags_armor_features & ARMOR_FIRE_RESISTANT) + if(armor_features_flags & ARMOR_FIRE_RESISTANT) REMOVE_TRAIT(human_unequipper, TRAIT_NON_FLAMMABLE, src) return ..() @@ -121,7 +121,7 @@ ) w_class = WEIGHT_CLASS_TINY throwforce = 2 - flags_equip_slot = ITEM_SLOT_EARS + equip_slot_flags = ITEM_SLOT_EARS /obj/item/clothing/ears/update_clothing_icon() if (ismob(src.loc)) @@ -134,7 +134,7 @@ desc = "Protects your hearing from loud noises, and quiet ones as well." icon_state = "earmuffs" item_state = "earmuffs" - flags_equip_slot = ITEM_SLOT_EARS + equip_slot_flags = ITEM_SLOT_EARS /obj/item/clothing/ears/earmuffs/green icon_state = "earmuffs2" @@ -151,10 +151,10 @@ slot_r_hand_str = 'icons/mob/inhands/clothing/suits_right.dmi', ) name = "suit" - flags_armor_protection = CHEST|GROIN|ARMS|LEGS + armor_protection_flags = CHEST|GROIN|ARMS|LEGS allowed = list(/obj/item/tank/emergency_oxygen) soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0) - flags_equip_slot = ITEM_SLOT_OCLOTHING + equip_slot_flags = ITEM_SLOT_OCLOTHING siemens_coefficient = 0.9 w_class = WEIGHT_CLASS_NORMAL attachments_by_slot = list(ATTACHMENT_SLOT_BADGE) @@ -185,10 +185,9 @@ if(. != CHECKS_PASSED) return set_light_on(toggle_on) - flags_armor_features ^= ARMOR_LAMP_ON + armor_features_flags ^= ARMOR_LAMP_ON playsound(src, 'sound/items/flashlight.ogg', 15, TRUE) - update_icon(user) - update_action_button_icons() + update_icon() /obj/item/clothing/suit/update_clothing_icon() if(ismob(loc)) @@ -222,8 +221,8 @@ var/clipped = 0 var/transfer_prints = TRUE blood_sprite_state = "bloodyhands" - flags_armor_protection = HANDS - flags_equip_slot = ITEM_SLOT_GLOVES + armor_protection_flags = HANDS + equip_slot_flags = ITEM_SLOT_GLOVES attack_verb = list("challenged") @@ -239,9 +238,7 @@ cell.charge -= 1000 / severity if (cell.charge < 0) cell.charge = 0 - if(cell.reliability != 100 && prob(50/severity)) - cell.reliability -= 10 / severity - ..() + return ..() // Called just before an attack_hand(), in mob/UnarmedAttack() /obj/item/clothing/gloves/proc/Touch(atom/A, proximity) @@ -249,6 +246,8 @@ /obj/item/clothing/gloves/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(iswirecutter(I) || istype(I, /obj/item/tool/surgery/scalpel)) if(clipped) to_chat(user, span_notice("The [src] have already been clipped!")) @@ -274,8 +273,8 @@ slot_l_hand_str = 'icons/mob/inhands/clothing/masks_left.dmi', slot_r_hand_str = 'icons/mob/inhands/clothing/masks_right.dmi', ) - flags_equip_slot = ITEM_SLOT_MASK - flags_armor_protection = FACE|EYES + equip_slot_flags = ITEM_SLOT_MASK + armor_protection_flags = FACE|EYES blood_sprite_state = "maskblood" var/anti_hug = 0 var/toggleable = FALSE @@ -303,8 +302,8 @@ desc = "Comfortable-looking shoes." gender = PLURAL //Carn: for grammarically correct text-parsing siemens_coefficient = 0.9 - flags_armor_protection = FEET - flags_equip_slot = ITEM_SLOT_FEET + armor_protection_flags = FEET + equip_slot_flags = ITEM_SLOT_FEET permeability_coefficient = 0.50 slowdown = SHOES_SLOWDOWN blood_sprite_state = "shoeblood" diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 4f180cd016492..3354d41d8d9c3 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -10,9 +10,9 @@ var/prescription = FALSE var/toggleable = FALSE active = TRUE - flags_inventory = COVEREYES - flags_equip_slot = ITEM_SLOT_EYES - flags_armor_protection = EYES + inventory_flags = COVEREYES + equip_slot_flags = ITEM_SLOT_EYES + armor_protection_flags = EYES var/deactive_state = "degoggles" var/vision_flags = NONE var/darkness_view = 2 //Base human is 2 @@ -83,10 +83,12 @@ desc = "Yarr." icon_state = "eyepatch" item_state = "eyepatch" - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/glasses/eyepatch/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/clothing/glasses/hud/health)) var/obj/item/clothing/glasses/hud/medpatch/P = new @@ -101,14 +103,14 @@ qdel(src) user.put_in_hands(P) - update_icon(user) + update_icon() /obj/item/clothing/glasses/monocle name = "monocle" desc = "Such a dapper eyepiece!" icon_state = "monocle" - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/glasses/material name = "optical material scanner" @@ -128,6 +130,8 @@ /obj/item/clothing/glasses/regular/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/clothing/glasses/hud/health)) var/obj/item/clothing/glasses/hud/medglasses/P = new @@ -136,7 +140,7 @@ qdel(src) user.put_in_hands(P) - update_icon(user) + update_icon() /obj/item/clothing/glasses/regular/hipster name = "prescription glasses" @@ -149,14 +153,14 @@ name = "3D glasses" icon_state = "3d" item_state = "3d" - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/glasses/gglasses name = "green glasses" desc = "Forest green glasses, like the kind you'd wear when hatching a nasty scheme." icon_state = "gglasses" item_state = "gglasses" - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/glasses/mgoggles name = "marine ballistic goggles" @@ -164,7 +168,7 @@ icon_state = "mgoggles" item_state = "mgoggles" soft_armor = list(MELEE = 40, BULLET = 40, LASER = 0, ENERGY = 15, BOMB = 35, BIO = 10, FIRE = 30, ACID = 30) - flags_equip_slot = ITEM_SLOT_EYES|ITEM_SLOT_MASK + equip_slot_flags = ITEM_SLOT_EYES|ITEM_SLOT_MASK goggles = TRUE w_class = WEIGHT_CLASS_TINY @@ -176,6 +180,8 @@ /obj/item/clothing/glasses/mgoggles/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/clothing/glasses/hud/health)) if(prescription) @@ -204,7 +210,7 @@ qdel(src) user.put_in_hands(S) - update_icon(user) + update_icon() /obj/item/clothing/glasses/m42_goggles name = "\improper M42 scout sight" @@ -226,8 +232,8 @@ icon_state = "welding-g" item_state = "welding-g" actions_types = list(/datum/action/item_action/toggle) - flags_inventory = COVEREYES - flags_inv_hide = HIDEEYES + inventory_flags = COVEREYES + inv_hide_flags = HIDEEYES eye_protection = 2 activation_sound = null deactivation_sound = null @@ -256,9 +262,9 @@ ///Toggle the welding goggles on /obj/item/clothing/glasses/welding/proc/flip_up(mob/user) - DISABLE_BITFIELD(flags_inventory, COVEREYES) - DISABLE_BITFIELD(flags_inv_hide, HIDEEYES) - DISABLE_BITFIELD(flags_armor_protection, EYES) + DISABLE_BITFIELD(inventory_flags, COVEREYES) + DISABLE_BITFIELD(inv_hide_flags, HIDEEYES) + DISABLE_BITFIELD(armor_protection_flags, EYES) eye_protection = 0 update_icon() if(user) @@ -266,9 +272,9 @@ ///Toggle the welding goggles off /obj/item/clothing/glasses/welding/proc/flip_down(mob/user) - ENABLE_BITFIELD(flags_inventory, COVEREYES) - ENABLE_BITFIELD(flags_inv_hide, HIDEEYES) - ENABLE_BITFIELD(flags_armor_protection, EYES) + ENABLE_BITFIELD(inventory_flags, COVEREYES) + ENABLE_BITFIELD(inv_hide_flags, HIDEEYES) + ENABLE_BITFIELD(armor_protection_flags, EYES) eye_protection = initial(eye_protection) update_icon() if(user) @@ -336,6 +342,8 @@ /obj/item/clothing/glasses/sunglasses/fake/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/clothing/glasses/hud/health)) var/obj/item/clothing/glasses/hud/medsunglasses/P = new @@ -356,7 +364,7 @@ qdel(src) user.put_in_hands(P) - update_icon(user) + update_icon() /obj/item/clothing/glasses/sunglasses/fake/prescription name = "prescription sunglasses" @@ -371,22 +379,6 @@ name = "prescription sunglasses" prescription = TRUE -/obj/item/clothing/glasses/sunglasses/sa - name = "spatial agent's sunglasses" - desc = "Glasses worn by a spatial agent." - eye_protection = 2 - darkness_view = 8 - vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS - lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE - -/obj/item/clothing/glasses/sunglasses/sa/Initialize(mapload) - . = ..() - AddComponent(/datum/component/clothing_tint, TINT_NONE) - -/obj/item/clothing/glasses/sunglasses/sa/nodrop - desc = "Glasses worn by a spatial agent. cannot be dropped" - flags_item = DELONDROP - /obj/item/clothing/glasses/sunglasses/sechud name = "HUDSunglasses" desc = "Sunglasses with a HUD." diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index bfc452db57ac9..a6f32ebfa090c 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -1,8 +1,10 @@ /obj/item/clothing/glasses/hud name = "HUD" desc = "A heads-up display that provides important info in (almost) real time." - flags_atom = null //doesn't protect eyes because it's a monocle, duh + atom_flags = null //doesn't protect eyes because it's a monocle, duh + ///The hud type(s) to give this type of glasses var/hud_type + ///The user wearing the glasses var/mob/living/carbon/human/affected_user @@ -19,13 +21,13 @@ if(active) activate_hud(user) else if(affected_user) - deactivate_hud() + deactivate_hud(user) return ..() /obj/item/clothing/glasses/hud/dropped(mob/user) if(affected_user) - deactivate_hud() + deactivate_hud(user) return ..() @@ -47,14 +49,24 @@ ///Activates the hud(s) these glasses have /obj/item/clothing/glasses/hud/proc/activate_hud(mob/living/carbon/human/user) - var/datum/atom_hud/hud_datum = GLOB.huds[hud_type] - hud_datum.add_hud_to(user) affected_user = user - - -/obj/item/clothing/glasses/hud/proc/deactivate_hud() - var/datum/atom_hud/hud_datum = GLOB.huds[hud_type] - hud_datum.remove_hud_from(affected_user) + if(islist(hud_type)) + for(var/hud in hud_type) + var/datum/atom_hud/hud_datum = GLOB.huds[hud] + hud_datum.add_hud_to(affected_user) + else + var/datum/atom_hud/hud_datum = GLOB.huds[hud_type] + hud_datum.add_hud_to(affected_user) + +///Deactivates the hud(s) these glasses have +/obj/item/clothing/glasses/hud/proc/deactivate_hud(mob/user) + if(islist(hud_type)) + for(var/hud in hud_type) + var/datum/atom_hud/hud_datum = GLOB.huds[hud] + hud_datum.remove_hud_from(affected_user) + else + var/datum/atom_hud/hud_datum = GLOB.huds[hud_type] + hud_datum.remove_hud_from(affected_user) affected_user = null @@ -63,7 +75,7 @@ desc = "A heads-up display that scans the humans in view and provides accurate data about their health status. The projector can be attached to compatable eyewear." icon_state = "healthhud" deactive_state = "degoggles_med" - flags_armor_protection = NONE + armor_protection_flags = NONE toggleable = TRUE hud_type = DATA_HUD_MEDICAL_ADVANCED actions_types = list(/datum/action/item_action/toggle) @@ -93,7 +105,7 @@ "Hammerhead Combat Robot" = 'icons/mob/species/robot/glasses_alpharii.dmi', "Ratcher Combat Robot" = 'icons/mob/species/robot/glasses_deltad.dmi') soft_armor = list(MELEE = 40, BULLET = 40, LASER = 0, ENERGY = 15, BOMB = 35, BIO = 10, FIRE = 30, ACID = 30) - flags_equip_slot = ITEM_SLOT_EYES + equip_slot_flags = ITEM_SLOT_EYES goggles = TRUE /obj/item/clothing/glasses/hud/medgoggles/prescription @@ -166,7 +178,7 @@ icon_state = "securityhud" deactive_state = "degoggles_sec" toggleable = 1 - flags_armor_protection = NONE + armor_protection_flags = NONE hud_type = DATA_HUD_SECURITY_ADVANCED actions_types = list(/datum/action/item_action/toggle) var/global/list/jobs[0] @@ -192,7 +204,7 @@ "Chilvaris Combat Robot" = 'icons/mob/species/robot/glasses_charlit.dmi', "Hammerhead Combat Robot" = 'icons/mob/species/robot/glasses_alpharii.dmi', "Ratcher Combat Robot" = 'icons/mob/species/robot/glasses_deltad.dmi') - flags_armor_protection = NONE + armor_protection_flags = NONE toggleable = TRUE hud_type = DATA_HUD_XENO_STATUS actions_types = list(/datum/action/item_action/toggle) @@ -232,4 +244,4 @@ /obj/item/clothing/glasses/hud/sa/nodrop desc = "Glasses worn by a spatial agent. They delete themselves if you take them off!" - flags_item = DELONDROP + item_flags = DELONDROP diff --git a/code/modules/clothing/glasses/meson.dm b/code/modules/clothing/glasses/meson.dm index b6b73450b5ac7..3e7f07f8095d2 100644 --- a/code/modules/clothing/glasses/meson.dm +++ b/code/modules/clothing/glasses/meson.dm @@ -31,7 +31,7 @@ icon_state = "enggoggles" item_state = "enggoggles" deactive_state = "degoggles_enggoggles" - flags_equip_slot = ITEM_SLOT_EYES + equip_slot_flags = ITEM_SLOT_EYES goggles = TRUE /obj/item/clothing/glasses/meson/enggoggles/prescription diff --git a/code/modules/clothing/glasses/night.dm b/code/modules/clothing/glasses/night.dm index 5bd664a56f205..f33bcfabc2222 100644 --- a/code/modules/clothing/glasses/night.dm +++ b/code/modules/clothing/glasses/night.dm @@ -54,7 +54,7 @@ item_state = "alien_lens" darkness_view = 7 lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE - flags_item = DELONDROP + item_flags = DELONDROP /obj/item/clothing/glasses/night/sectoid/Initialize(mapload) . = ..() @@ -100,7 +100,7 @@ "Chilvaris Combat Robot" = 'icons/mob/species/robot/glasses_charlit.dmi', "Hammerhead Combat Robot" = 'icons/mob/species/robot/glasses_alpharii.dmi', "Ratcher Combat Robot" = 'icons/mob/species/robot/glasses_deltad.dmi') - flags_equip_slot = ITEM_SLOT_EYES + equip_slot_flags = ITEM_SLOT_EYES goggles = TRUE /obj/item/clothing/glasses/night/optgoggles/prescription diff --git a/code/modules/clothing/glasses/thermal.dm b/code/modules/clothing/glasses/thermal.dm index 5e22a6488ce3a..1dd808c8b8e98 100644 --- a/code/modules/clothing/glasses/thermal.dm +++ b/code/modules/clothing/glasses/thermal.dm @@ -36,9 +36,9 @@ name = "Thermoncle" desc = "A monocle thermal." icon_state = "thermoncle" - flags_atom = null //doesn't protect eyes because it's a monocle, duh + atom_flags = null //doesn't protect eyes because it's a monocle, duh toggleable = 0 - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/glasses/thermal/eyepatch name = "Optical Thermal Eyepatch" @@ -46,7 +46,7 @@ icon_state = "eyepatch" item_state = "eyepatch" toggleable = 0 - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/glasses/thermal/jensen name = "Optical Thermal Implants" diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 8314781bb0b51..0e2c5dbc7a51f 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -4,9 +4,9 @@ icon_state = "insulated" siemens_coefficient = 0 permeability_coefficient = 0.05 - flags_cold_protection = HANDS + cold_protection_flags = HANDS min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - flags_heat_protection = HANDS + heat_protection_flags = HANDS max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE /obj/item/clothing/gloves/yellow //Cheap Chinese Crap @@ -24,9 +24,9 @@ desc = "These gloves are fire-resistant." name = "black gloves" icon_state = "black" - flags_cold_protection = HANDS + cold_protection_flags = HANDS min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - flags_heat_protection = HANDS + heat_protection_flags = HANDS max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE @@ -80,7 +80,7 @@ desc = "A field of invisible energy, it protects the wearer but prevents any clothing from being worn." icon = 'icons/effects/effects.dmi' icon_state = "shield-blue" - flags_item = DELONDROP + item_flags = DELONDROP soft_armor = list(MELEE = 25, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 30, BIO = 20, FIRE = 20, ACID = 25) /obj/item/clothing/gloves/sectoid/Initialize(mapload) diff --git a/code/modules/clothing/gloves/marine_gloves.dm b/code/modules/clothing/gloves/marine_gloves.dm index c4401c6f97be8..8db71f2cad1b8 100644 --- a/code/modules/clothing/gloves/marine_gloves.dm +++ b/code/modules/clothing/gloves/marine_gloves.dm @@ -9,11 +9,11 @@ icon_state = "gloves_marine" siemens_coefficient = 0.6 permeability_coefficient = 0.05 - flags_cold_protection = HANDS - flags_heat_protection = HANDS + cold_protection_flags = HANDS + heat_protection_flags = HANDS min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE - flags_armor_protection = HANDS + armor_protection_flags = HANDS soft_armor = list(MELEE = 25, BULLET = 15, LASER = 10, ENERGY = 15, BOMB = 15, BIO = 5, FIRE = 15, ACID = 15) /obj/item/clothing/gloves/marine/black @@ -84,7 +84,7 @@ name = "\improper B18 defensive gauntlets" desc = "A pair of heavily armored gloves." icon_state = "armored" - flags_item = SYNTH_RESTRICTED + item_flags = SYNTH_RESTRICTED soft_armor = list(MELEE = 35, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 25, BIO = 15, FIRE = 15, ACID = 20) resistance_flags = UNACIDABLE @@ -93,13 +93,13 @@ desc = "Armored gloves used in special operations. They are also insulated against electrical shock." icon_state = "black" siemens_coefficient = 0 - flags_item = SYNTH_RESTRICTED + item_flags = SYNTH_RESTRICTED soft_armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 30, BIO = 20, FIRE = 20, ACID = 15) /obj/item/clothing/gloves/marine/veteran/pmc/commando name = "\improper PMC commando gloves" desc = "A pair of heavily armored, insulated, acid-resistant gloves." - icon_state = "armored" + icon_state = "death_squad" soft_armor = list(MELEE = 40, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 30, BIO = 20, FIRE = 20, ACID = 25) resistance_flags = UNACIDABLE diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 59850ced7de9c..c06991148f71a 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -2,9 +2,9 @@ desc = "Regal blue gloves, with a nice gold trim. Swanky." name = "captain's gloves" icon_state = "captain" - flags_cold_protection = HANDS + cold_protection_flags = HANDS min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - flags_heat_protection = HANDS + heat_protection_flags = HANDS max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE /obj/item/clothing/gloves/swat @@ -14,9 +14,9 @@ siemens_coefficient = 0.6 permeability_coefficient = 0.05 - flags_cold_protection = HANDS + cold_protection_flags = HANDS min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - flags_heat_protection = HANDS + heat_protection_flags = HANDS max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE /obj/item/clothing/gloves/combat //Combined effect of SWAT gloves and insulated gloves @@ -25,9 +25,9 @@ icon_state = "black" siemens_coefficient = 0 permeability_coefficient = 0.05 - flags_cold_protection = HANDS + cold_protection_flags = HANDS min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - flags_heat_protection = HANDS + heat_protection_flags = HANDS max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE /obj/item/clothing/gloves/ruggedgloves @@ -36,9 +36,9 @@ icon_state = "black" siemens_coefficient = 0 permeability_coefficient = 0.05 - flags_cold_protection = HANDS + cold_protection_flags = HANDS min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - flags_heat_protection = HANDS + heat_protection_flags = HANDS max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE soft_armor = list(MELEE = 10, BULLET = 10, LASER = 15, ENERGY = 10, BOMB = 10, BIO = 10, FIRE = 10, ACID = 10) diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index f6c6f00908b75..23cde0b164760 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -14,13 +14,13 @@ name = "collectable slime cap!" desc = "It just latches right in place!" icon_state = "slime" - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/head/collectable/xenom name = "collectable xenomorph helmet!" desc = "Hiss hiss hiss!" icon_state = "xenom" - flags_armor_protection = HEAD|FACE|EYES + armor_protection_flags = HEAD|FACE|EYES /obj/item/clothing/head/collectable/chef name = "collectable chef's hat" @@ -32,40 +32,40 @@ 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" - flags_armor_protection = NONE + armor_protection_flags = NONE /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" item_state = "that" - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/head/collectable/captain name = "collectable captain's hat" desc = "A Collectable Hat that'll make you look just like a real comdom!" icon_state = "captain" item_state = "caphat" - flags_armor_protection = NONE + armor_protection_flags = NONE /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" - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/head/collectable/beret name = "collectable beret" desc = "A Collectable red Beret. It smells faintly of Garlic." icon_state = "beret" - flags_armor_protection = NONE + armor_protection_flags = NONE /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" item_state = "welding" - flags_armor_protection = HEAD|FACE|EYES + armor_protection_flags = HEAD|FACE|EYES /obj/item/clothing/head/collectable/slime name = "collectable slime hat" @@ -84,14 +84,14 @@ desc = "You'd make a great Dread Syndie Roberts!" icon_state = "pirate" item_state = "pirate" - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/head/collectable/rabbitears name = "collectable rabbit ears" desc = "Not as lucky as the feet!" icon_state = "bunny" item_state = "bunny" - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/head/collectable/wizard name = "collectable wizard's hat" @@ -103,13 +103,13 @@ desc = "WARNING! Offers no real protection, or luminosity, but it is damn fancy!" icon_state = "hardhat0_yellow" item_state = "hardhat0_yellow" - flags_armor_protection = NONE + armor_protection_flags = NONE /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" - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/head/collectable/thunderdome name = "collectable Thunderdome helmet" diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 859d238dc30d4..872f25b1a20ba 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -6,7 +6,7 @@ soft_armor = list(MELEE = 30, BULLET = 5, LASER = 20, ENERGY = 10, BOMB = 20, BIO = 10, FIRE = 10, ACID = 10) actions_types = list(/datum/action/item_action/toggle) siemens_coefficient = 0.9 - flags_inventory = BLOCKSHARPOBJ + inventory_flags = BLOCKSHARPOBJ light_range = 4 light_power = 2 var/hardhat_color = "yellow" //Determines used sprites: hardhat[on]_[hardhat_color] @@ -37,14 +37,14 @@ update_action_button_icons() update_icon() -/obj/item/clothing/head/hardhat/attack_alien(mob/living/carbon/xenomorph/X, isrightclick = FALSE) - if(turn_light(X, FALSE) != CHECKS_PASSED) +/obj/item/clothing/head/hardhat/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(turn_light(xeno_attacker, FALSE) != CHECKS_PASSED) return playsound(loc, "alien_claw_metal", 25, 1) - X.do_attack_animation(src, ATTACK_EFFECT_CLAW) - to_chat(X, span_warning("We disable the metal thing's lights.") ) + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_CLAW) + to_chat(xeno_attacker, span_warning("We disable the metal thing's lights.") ) -/obj/item/clothing/head/hardhat/update_icon() +/obj/item/clothing/head/hardhat/update_icon_state() . = ..() icon_state = "hardhat[light_on]_[hardhat_color]" item_state = "hardhat[light_on]_[hardhat_color]" @@ -57,15 +57,15 @@ icon_state = "hardhat0_red" hardhat_color = "red" name = "firefighter helmet" - flags_inventory = NOPRESSUREDMAGE|BLOCKSHARPOBJ - flags_heat_protection = HEAD + inventory_flags = NOPRESSUREDMAGE|BLOCKSHARPOBJ + heat_protection_flags = HEAD max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE /obj/item/clothing/head/hardhat/white icon_state = "hardhat0_white" hardhat_color = "white" - flags_inventory = NOPRESSUREDMAGE|BLOCKSHARPOBJ - flags_heat_protection = HEAD + inventory_flags = NOPRESSUREDMAGE|BLOCKSHARPOBJ + heat_protection_flags = HEAD max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE /obj/item/clothing/head/hardhat/dblue diff --git a/code/modules/clothing/head/head.dm b/code/modules/clothing/head/head.dm index c503b4bbd0d4e..950a0078e4d20 100644 --- a/code/modules/clothing/head/head.dm +++ b/code/modules/clothing/head/head.dm @@ -5,8 +5,8 @@ slot_l_hand_str = 'icons/mob/inhands/clothing/hats_left.dmi', slot_r_hand_str = 'icons/mob/inhands/clothing/hats_right.dmi', ) - flags_armor_protection = HEAD - flags_equip_slot = ITEM_SLOT_HEAD + armor_protection_flags = HEAD + equip_slot_flags = ITEM_SLOT_HEAD w_class = WEIGHT_CLASS_SMALL blood_sprite_state = "helmetblood" attachments_by_slot = list(ATTACHMENT_SLOT_BADGE) @@ -39,10 +39,11 @@ icon = 'icons/obj/clothing/headwear/marine_hats.dmi' item_icons = list( slot_head_str = 'icons/mob/clothing/headwear/marine_hats.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi',) + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', + ) icon_state = "beanie_cargo" - flags_inv_hide = HIDETOPHAIR + inv_hide_flags = HIDETOPHAIR soft_armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 10, BIO = 5, FIRE = 5, ACID = 5) @@ -52,66 +53,67 @@ icon = 'icons/obj/clothing/headwear/marine_hats.dmi' item_icons = list( slot_head_str = 'icons/mob/clothing/headwear/marine_hats.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi',) + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', + ) icon_state = "beret" soft_armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 10, BIO = 5, FIRE = 5, ACID = 5) - flags_item_map_variant = NONE - flags_armor_features = ARMOR_NO_DECAP + item_map_variant_flags = NONE + armor_features_flags = ARMOR_NO_DECAP /obj/item/clothing/head/tgmcberet/tan name = "\improper Tan beret" icon_state = "berettan" - flags_item_map_variant = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT) + item_map_variant_flags = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT) /obj/item/clothing/head/tgmcberet/red name = "\improper Red badged beret" icon_state = "beretred" - flags_item_map_variant = NONE + item_map_variant_flags = NONE /obj/item/clothing/head/tgmcberet/red2 name = "\improper Red beret" icon_state = "beretred2" - flags_item_map_variant = NONE + item_map_variant_flags = NONE /obj/item/clothing/head/tgmcberet/bloodred name = "\improper Blood red beret" icon_state = "bloodred_beret" - flags_item_map_variant = NONE + item_map_variant_flags = NONE /obj/item/clothing/head/tgmcberet/blueberet name = "\improper Blue beret" icon_state = "blue_beret" - flags_item_map_variant = NONE + item_map_variant_flags = NONE /obj/item/clothing/head/tgmcberet/darkgreen name = "\improper Dark green beret" icon_state = "darkgreen_beret" - flags_item_map_variant = NONE + item_map_variant_flags = NONE /obj/item/clothing/head/tgmcberet/green name = "\improper Green beret" icon_state = "beretgreen" - flags_item_map_variant = NONE + item_map_variant_flags = NONE /obj/item/clothing/head/tgmcberet/snow name = "\improper White beret" icon_state = "beretsnow" - flags_item_map_variant = NONE + item_map_variant_flags = NONE /obj/item/clothing/head/tgmcberet/wo name = "\improper Command Master at Arms beret" desc = "A beret with the lieutenant insignia emblazoned on it. It shines with the glow of corrupt authority and a smudge of doughnut." icon_state = "beretwo" soft_armor = list(MELEE = 15, BULLET = 50, LASER = 50, ENERGY = 15, BOMB = 50, BIO = 5, FIRE = 50, ACID = 5) - flags_item_map_variant = NONE + item_map_variant_flags = NONE /obj/item/clothing/head/tgmcberet/fc name = "\improper Field Commander beret" desc = "A beret with the field commander insignia emblazoned on it. It commands loyalty and bravery in all who gaze upon it." icon_state = "beretfc" soft_armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 5, FIRE = 50, ACID = 50) - flags_item_map_variant = NONE + item_map_variant_flags = NONE /obj/item/clothing/head/tgmccap @@ -121,12 +123,13 @@ icon = 'icons/obj/clothing/headwear/marine_hats.dmi' item_icons = list( slot_head_str = 'icons/mob/clothing/headwear/marine_hats.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi',) + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', + ) soft_armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 10, BIO = 5, FIRE = 5, ACID = 5) var/flipped_cap = FALSE var/base_cap_icon - flags_item_map_variant = (ITEM_ICE_VARIANT) + item_map_variant_flags = (ITEM_ICE_VARIANT) /obj/item/clothing/head/tgmccap/verb/fliphat() @@ -163,7 +166,7 @@ name = "\improper TGMC requisition cap" desc = "It's a fancy hat for a not-so-fancy military supply clerk." icon_state = "cargocap" - flags_item_map_variant = null + item_map_variant_flags = null /obj/item/clothing/head/boonie @@ -179,9 +182,10 @@ icon_state = "ornamented_cap" icon = 'icons/obj/clothing/headwear/marine_hats.dmi' item_icons = list( - slot_head_str = 'icons/mob/clothing/headwear/marine_hats.dmi',) + slot_head_str = 'icons/mob/clothing/headwear/marine_hats.dmi' + ) soft_armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 10, BIO = 5, FIRE = 5, ACID = 5) - flags_armor_features = ARMOR_NO_DECAP + armor_features_flags = ARMOR_NO_DECAP /obj/item/clothing/head/slouch name = "\improper TGMC slouch hat" @@ -199,11 +203,12 @@ icon = 'icons/obj/clothing/headwear/marine_hats.dmi' item_icons = list( slot_head_str = 'icons/mob/clothing/headwear/marine_hats.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi',) + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', + ) icon_state = "headband" soft_armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 10, BIO = 5, FIRE = 5, ACID = 5) - flags_armor_features = ARMOR_NO_DECAP + armor_features_flags = ARMOR_NO_DECAP /obj/item/clothing/head/headband/red name = "\improper Red headband" @@ -227,8 +232,9 @@ icon = 'icons/obj/clothing/headwear/marine_hats.dmi' item_icons = list( slot_head_str = 'icons/mob/clothing/headwear/marine_hats.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi',) + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', + ) /obj/item/clothing/head/cmo name = "\improper Chief Medical hat" @@ -244,7 +250,7 @@ desc = "A beret with the TGMC insignia emblazoned on it. It radiates respect and authority." icon_state = "hosberet" soft_armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 10, BIO = 5, FIRE = 5, ACID = 5) - flags_inventory = BLOCKSHARPOBJ + inventory_flags = BLOCKSHARPOBJ /obj/item/clothing/head/beret/marine/captain name = "captain's beret" @@ -279,10 +285,10 @@ icon_state = "ushankadown" item_state = "ushankadown" soft_armor = list(MELEE = 35, BULLET = 35, LASER = 20, ENERGY = 10, BOMB = 10, BIO = 0, FIRE = 10, ACID = 10) - flags_cold_protection = HEAD + cold_protection_flags = HEAD min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE - flags_inventory = BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS|HIDETOPHAIR + inventory_flags = BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS|HIDETOPHAIR anti_hug = 1 /obj/item/clothing/head/ushanka/attack_self(mob/user as mob) @@ -303,12 +309,12 @@ icon_state = "bearpelt" siemens_coefficient = 2 anti_hug = 4 - flags_armor_protection = HEAD|CHEST|ARMS + armor_protection_flags = HEAD|CHEST|ARMS soft_armor = list(MELEE = 90, BULLET = 70, LASER = 45, ENERGY = 55, BOMB = 45, BIO = 10, FIRE = 55, ACID = 55) - flags_cold_protection = HEAD|CHEST|ARMS + cold_protection_flags = HEAD|CHEST|ARMS min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE - flags_inventory = BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS|HIDETOPHAIR + inventory_flags = BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS|HIDETOPHAIR /obj/item/clothing/head/uppcap @@ -318,17 +324,18 @@ icon_state = "upp_cap" item_icons = list( slot_head_str = 'icons/mob/clothing/headwear/ert_headwear.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi',) + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', + ) siemens_coefficient = 2 //anti_hug = 2 - flags_armor_protection = HEAD + armor_protection_flags = HEAD soft_armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 55, BOMB = 50, BIO = 50, FIRE = 55, ACID = 55) - flags_cold_protection = HEAD + cold_protection_flags = HEAD min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE - flags_inventory = BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS - flags_armor_features = ARMOR_NO_DECAP + inventory_flags = BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS + armor_features_flags = ARMOR_NO_DECAP /obj/item/clothing/head/uppcap/beret name = "\improper armored USL beret" @@ -340,17 +347,18 @@ icon = 'icons/obj/clothing/headwear/ert_headwear.dmi' item_icons = list( slot_head_str = 'icons/mob/clothing/headwear/ert_headwear.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi',) + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', + ) icon_state = "freelancer_helmet" siemens_coefficient = 2 - flags_armor_protection = HEAD + armor_protection_flags = HEAD soft_armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 55, BOMB = 50, BIO = 50, FIRE = 55, ACID = 55) - flags_cold_protection = HEAD + cold_protection_flags = HEAD min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE - flags_inventory = BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS - flags_armor_features = ARMOR_NO_DECAP + inventory_flags = BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS + armor_features_flags = ARMOR_NO_DECAP attachments_by_slot = list( ATTACHMENT_SLOT_STORAGE, ATTACHMENT_SLOT_HEAD_MODULE, @@ -380,49 +388,52 @@ icon = 'icons/obj/clothing/headwear/ert_headwear.dmi' item_icons = list( slot_head_str = 'icons/mob/clothing/headwear/ert_headwear.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi',) + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', + ) icon_state = "rebel_hood" siemens_coefficient = 2 - flags_armor_protection = HEAD|CHEST + armor_protection_flags = HEAD|CHEST soft_armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 50, FIRE = 50, ACID = 50) - flags_cold_protection = HEAD + cold_protection_flags = HEAD min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE - flags_inventory = BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS|HIDETOPHAIR - flags_armor_features = ARMOR_NO_DECAP + inventory_flags = BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS|HIDETOPHAIR + armor_features_flags = ARMOR_NO_DECAP /obj/item/clothing/head/admiral name = "\improper armored admiral cap" desc = "A sturdy admiral's cap. More protective than it seems. Please don't ditch this for a helmet like a punk." icon_state = "admiral_helmet" siemens_coefficient = 2 - flags_armor_protection = HEAD + armor_protection_flags = HEAD soft_armor = list(MELEE = 60, BULLET = 60, LASER = 45, ENERGY = 55, BOMB = 55, BIO = 10, FIRE = 55, ACID = 55) - flags_cold_protection = HEAD + cold_protection_flags = HEAD min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE - flags_inventory = BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS + inventory_flags = BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS /obj/item/clothing/head/commissar name = "\improper commissar cap" desc = "A cap worn by commissars of the Imperial Army. This one seems to radiate authority." item_icons = list( slot_head_str = 'icons/mob/clothing/headwear/ert_headwear.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi',) + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', + ) icon = 'icons/obj/clothing/headwear/ert_headwear.dmi' icon_state = "commissar_cap" soft_armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 15, BIO = 10, FIRE = 20, ACID = 20) - flags_armor_features = ARMOR_NO_DECAP + armor_features_flags = ARMOR_NO_DECAP /obj/item/clothing/head/strawhat name = "\improper straw hat" desc = "A hat lined with durathread on the outside, has the usual iconic look of a straw hat. A common hat across the bubble." item_icons = list( slot_head_str = 'icons/mob/clothing/headwear/ert_headwear.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi',) + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', + ) icon = 'icons/obj/clothing/headwear/ert_headwear.dmi' icon_state = "straw_hat" soft_armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 15, BIO = 10, FIRE = 20, ACID = 20) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 6dfdb9f2f144c..9bdd311fb7315 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -6,37 +6,37 @@ item_state = "helmet" accuracy_mod = 0 soft_armor = list(MELEE = 50, BULLET = 15, LASER = 50, ENERGY = 10, BOMB = 25, BIO = 0, FIRE = 10, ACID = 10) - flags_atom = CONDUCT - flags_inventory = COVEREYES|BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS|HIDEEYES - flags_cold_protection = HEAD - flags_heat_protection = HEAD + atom_flags = CONDUCT + inventory_flags = COVEREYES|BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS|HIDEEYES + cold_protection_flags = HEAD + heat_protection_flags = HEAD min_cold_protection_temperature = HELMET_MIN_COLD_PROTECTION_TEMPERATURE max_heat_protection_temperature = HELMET_MAX_HEAT_PROTECTION_TEMPERATURE siemens_coefficient = 0.7 w_class = WEIGHT_CLASS_NORMAL - flags_armor_features = ARMOR_NO_DECAP - flags_item = SYNTH_RESTRICTED + armor_features_flags = ARMOR_NO_DECAP + item_flags = SYNTH_RESTRICTED /obj/item/clothing/head/helmet/riot name = "riot helmet" desc = "It's a helmet specifically designed to protect against close range attacks. It covers your ears." icon_state = "riot" soft_armor = list(MELEE = 82, BULLET = 15, LASER = 5, ENERGY = 5, BOMB = 5, BIO = 2, FIRE = 5, ACID = 5) - flags_inventory = COVEREYES|BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS|HIDEEYES|HIDETOPHAIR - flags_item = SYNTH_RESTRICTED + inventory_flags = COVEREYES|BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS|HIDEEYES|HIDETOPHAIR + item_flags = SYNTH_RESTRICTED /obj/item/clothing/head/helmet/HoS name = "Head of Security Hat" desc = "The hat of the Head of Security. For showing the officers who's in charge." icon_state = "hoscap" soft_armor = list(MELEE = 80, BULLET = 60, LASER = 50, ENERGY = 10, BOMB = 25, BIO = 10, FIRE = 10, ACID = 10) - flags_inventory = COVEREYES - flags_inv_hide = HIDEEARS - flags_armor_protection = NONE + inventory_flags = COVEREYES + inv_hide_flags = HIDEEARS + armor_protection_flags = NONE siemens_coefficient = 0.8 - flags_item = SYNTH_RESTRICTED + item_flags = SYNTH_RESTRICTED /obj/item/clothing/head/helmet/HoS/dermal name = "Dermal Armour Patch" @@ -49,25 +49,25 @@ name = "warden's hat" desc = "It's a special helmet issued to the Warden of a securiy force. Protects the head from impacts." icon_state = "policehelm" - flags_inventory = NONE - flags_inv_hide = NONE - flags_armor_protection = NONE + inventory_flags = NONE + inv_hide_flags = NONE + armor_protection_flags = NONE /obj/item/clothing/head/helmet/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" - flags_inventory = NONE - flags_inv_hide = NONE - flags_armor_protection = NONE + inventory_flags = NONE + inv_hide_flags = NONE + armor_protection_flags = NONE /obj/item/clothing/head/helmet/formalcaptain name = "parade hat" desc = "No one in a commanding position should be without a perfect, white hat of ultimate authority." icon_state = "officercap" - flags_inventory = NONE - flags_inv_hide = NONE - flags_armor_protection = NONE + inventory_flags = NONE + inv_hide_flags = NONE + armor_protection_flags = NONE /obj/item/clothing/head/helmet/swat name = "\improper SWAT helmet" @@ -75,23 +75,23 @@ icon_state = "swat" item_state = "swat" soft_armor = list(MELEE = 80, BULLET = 60, LASER = 50, ENERGY = 25, BOMB = 50, BIO = 10, FIRE = 25, ACID = 25) - flags_inventory = COVEREYES|BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS|HIDEEYES - flags_cold_protection = HEAD + inventory_flags = COVEREYES|BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS|HIDEEYES + cold_protection_flags = HEAD min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.5 anti_hug = 1 - flags_item = SYNTH_RESTRICTED + item_flags = SYNTH_RESTRICTED /obj/item/clothing/head/helmet/thunderdome name = "\improper Thunderdome helmet" desc = "'Let the battle commence!'" icon_state = "thunderdome" - flags_inventory = COVEREYES|BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS|HIDEEYES + inventory_flags = COVEREYES|BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS|HIDEEYES item_state = "thunderdome" soft_armor = list(MELEE = 80, BULLET = 60, LASER = 50, ENERGY = 10, BOMB = 25, BIO = 10, FIRE = 10, ACID = 10) - flags_cold_protection = HEAD + cold_protection_flags = HEAD min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 1 @@ -100,8 +100,8 @@ desc = "Ave, Imperator, morituri te salutant." icon_state = "gladiator" item_state = "gladiator" - flags_inventory = BLOCKSHARPOBJ - flags_inv_hide = HIDEMASK|HIDEEARS|HIDEEYES|HIDEALLHAIR + inventory_flags = BLOCKSHARPOBJ + inv_hide_flags = HIDEMASK|HIDEEARS|HIDEEYES|HIDEALLHAIR siemens_coefficient = 1 /*===========================MARINES HELMETS================================= @@ -114,14 +114,15 @@ icon = 'icons/obj/clothing/headwear/marine_helmets.dmi' item_icons = list( slot_head_str = 'icons/mob/clothing/headwear/marine_helmets.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi',) + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', + ) icon_state = "helmet" soft_armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 50, FIRE = 50, ACID = 50) max_integrity = 5 var/list/helmet_overlays - flags_inventory = BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS + inventory_flags = BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS attachments_by_slot = list( ATTACHMENT_SLOT_STORAGE, ) @@ -130,7 +131,7 @@ ) starting_attachments = list(/obj/item/armor_module/storage/helmet) ///marine helmet behaviour flags - var/flags_marine_helmet = HELMET_GARB_OVERLAY|HELMET_STORE_GARB + var/marine_helmet_flags = HELMET_GARB_OVERLAY|HELMET_STORE_GARB /// items that fit in the helmet: strict type = iconstate to show var/static/list/allowed_helmet_items = list( /obj/item/tool/lighter/random = "helmet_lighter_", @@ -161,14 +162,23 @@ . = ..() helmet_overlays = list("damage","band","item") //To make things simple. -/obj/item/clothing/head/helmet/marine/update_icon() +/obj/item/clothing/head/helmet/marine/on_pocket_insertion() + . = ..() + update_helmet_overlays() + +/obj/item/clothing/head/helmet/marine/on_pocket_removal() + . = ..() + update_helmet_overlays() + +///Updates the helmet_overlays list, inserting and removing images from it as necesarry +/obj/item/clothing/head/helmet/marine/proc/update_helmet_overlays() if(!attachments_by_slot[ATTACHMENT_SLOT_STORAGE]) return if(!istype(attachments_by_slot[ATTACHMENT_SLOT_STORAGE], /obj/item/armor_module/storage)) return var/obj/item/armor_module/storage/armor_storage = attachments_by_slot[ATTACHMENT_SLOT_STORAGE] - if(length(armor_storage.storage.contents) && (flags_marine_helmet & HELMET_GARB_OVERLAY)) + if(length(armor_storage.storage.contents) && (marine_helmet_flags & HELMET_GARB_OVERLAY)) if(!helmet_overlays["band"]) var/image/I = image('icons/obj/clothing/headwear/marine_hats.dmi', src, "helmet_band") helmet_overlays["band"] = I @@ -200,32 +210,34 @@ var/mutable_appearance/M for(var/i in helmet_overlays) M = helmet_overlays[i] - if(M) - M = mutable_appearance('icons/mob/modular/modular_helmet_storage.dmi',M.icon_state) - standing.overlays += M + if(!M) + continue + + M = mutable_appearance('icons/mob/modular/modular_helmet_storage.dmi', M.icon_state) + standing.overlays += M /obj/item/clothing/head/helmet/marine/specialist name = "\improper B18 helmet" desc = "The B18 Helmet that goes along with the B18 Defensive Armor. It's heavy, reinforced, and protects more of the face." icon_state = "minigunner_helmet" soft_armor = list(MELEE = 75, BULLET = 80, LASER = 75, ENERGY = 65, BOMB = 70, BIO = 65, FIRE = 65, ACID = 65) - flags_inv_hide = HIDEALLHAIR|HIDEEARS - flags_item = SYNTH_RESTRICTED + inv_hide_flags = HIDEALLHAIR|HIDEEARS + item_flags = SYNTH_RESTRICTED resistance_flags = UNACIDABLE anti_hug = 6 - flags_item_map_variant = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_PRISON_VARIANT|ITEM_ICE_PROTECTION) + item_map_variant_flags = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_PRISON_VARIANT|ITEM_ICE_PROTECTION) /obj/item/clothing/head/helmet/marine/grenadier name = "\improper B17 helmet" desc = "A heavy duty helmet created to complement the B17 marine armor. Practically explosive proof. Unless you stand next to a nuke or something like that." icon_state = "grenadier_helmet" soft_armor = list(MELEE = 75, BULLET = 70, LASER = 60, ENERGY = 65, BOMB = 100, BIO = 60, FIRE = 65, ACID = 60) - flags_inv_hide = HIDEALLHAIR|HIDEEARS + inv_hide_flags = HIDEALLHAIR|HIDEEARS max_heat_protection_temperature = HEAVYARMOR_MAX_HEAT_PROTECTION_TEMPERATURE resistance_flags = UNACIDABLE - flags_item = SYNTH_RESTRICTED + item_flags = SYNTH_RESTRICTED anti_hug = 4 - flags_item_map_variant = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_PRISON_VARIANT|ITEM_ICE_PROTECTION) + item_map_variant_flags = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_PRISON_VARIANT|ITEM_ICE_PROTECTION) /obj/item/clothing/head/helmet/marine/pilot name = "\improper M30 tactical helmet" @@ -233,10 +245,10 @@ icon_state = "helmetp2" soft_armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 50, FIRE = 50, ACID = 50) min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE - flags_inventory = BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS|HIDETOPHAIR - flags_marine_helmet = NONE - flags_item_map_variant = null + inventory_flags = BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS|HIDETOPHAIR + marine_helmet_flags = NONE + item_map_variant_flags = null /obj/item/clothing/head/helmet/marine/pilot/green name = "\improper M30 tactical helmet" @@ -249,14 +261,26 @@ desc = "A lightweight helmet with a small port in the back. Offers lower response times for TGMC mech pilots by integrating them directly into their mech suit's systems, though it certainly doesn't make them smarter." min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE +/obj/item/clothing/head/helmet/marine/assault_crewman + name = "\improper M12B pattern tanker helmet" + icon_state = "assault_crewman_helmet" + desc = "A lightweight helmet. Offers the user protection from being hit in the hell by ejected shell casings, mostly." + min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE + +/obj/item/clothing/head/helmet/marine/transport_crewman + name = "\improper M12A pattern transport helmet" + icon_state = "transport_crewman_helmet" + desc = "A lightweight helmet with a small port in the back. Offers decent protection against reckless driving." + min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE + /obj/item/clothing/head/helmet/marine/riot name = "M8 riot helmet" desc = "It's a modified version of the widely used Riot Helmets for use against angry jarheads. Boasts high ballistic protection" icon_state = "marine_riot" soft_armor = list(MELEE = 65, BULLET = 110, LASER = 110, ENERGY = 5, BOMB = 50, BIO = 50, FIRE = 50, ACID = 30) - flags_inventory = COVEREYES|BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS|HIDEEYES|HIDETOPHAIR - flags_item = SYNTH_RESTRICTED + inventory_flags = COVEREYES|BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS|HIDEEYES|HIDETOPHAIR + item_flags = SYNTH_RESTRICTED /*=============================PMCS================================== =======================================================================*/ @@ -265,9 +289,10 @@ icon = 'icons/obj/clothing/headwear/ert_headwear.dmi' item_icons = list( slot_head_str = 'icons/mob/clothing/headwear/ert_headwear.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi',) - flags_item = SYNTH_RESTRICTED + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', + ) + item_flags = SYNTH_RESTRICTED /obj/item/clothing/head/helmet/marine/veteran/pmc name = "\improper PMC tactical helmet" @@ -275,9 +300,9 @@ icon_state = "pmc_helmet" soft_armor = list(MELEE = 65, BULLET = 65, LASER = 60, ENERGY = 55, BOMB = 60, BIO = 50, FIRE = 55, ACID = 55) min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE - flags_inventory = BLOCKSHARPOBJ - flags_inv_hide = NONE - flags_marine_helmet = NONE + inventory_flags = BLOCKSHARPOBJ + inv_hide_flags = NONE + marine_helmet_flags = NONE /obj/item/clothing/head/helmet/marine/veteran/pmc/leader name = "\improper PMC beret" @@ -289,28 +314,28 @@ name = "\improper PMC sniper helmet" desc = "A helmet worn by PMC Marksmen" icon_state = "pmc_sniper_hat" - flags_armor_protection = HEAD|FACE|EYES + armor_protection_flags = HEAD|FACE|EYES soft_armor = list(MELEE = 65, BULLET = 75, LASER = 55, ENERGY = 60, BOMB = 70, BIO = 50, FIRE = 60, ACID = 60) - flags_inventory = COVEREYES|COVERMOUTH|BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS|HIDEEYES|HIDEFACE|HIDEMASK|HIDEALLHAIR + inventory_flags = COVEREYES|COVERMOUTH|BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS|HIDEEYES|HIDEFACE|HIDEMASK|HIDEALLHAIR /obj/item/clothing/head/helmet/marine/veteran/pmc/gunner name = "\improper PMC gunner helmet" desc = "A modification of the standard helmet used by a lot of security firms, has a visor for added protection." icon_state = "pmc_heavyhelmet" - flags_armor_protection = HEAD|FACE|EYES + armor_protection_flags = HEAD|FACE|EYES soft_armor = list(MELEE = 75, BULLET = 85, LASER = 80, ENERGY = 65, BOMB = 80, BIO = 50, FIRE = 65, ACID = 65) - flags_inventory = COVEREYES|COVERMOUTH|BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS|HIDEEYES|HIDEFACE|HIDEMASK|HIDEALLHAIR + inventory_flags = COVEREYES|COVERMOUTH|BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS|HIDEEYES|HIDEFACE|HIDEMASK|HIDEALLHAIR /obj/item/clothing/head/helmet/marine/veteran/pmc/commando name = "\improper PMC commando helmet" desc = "A fully enclosed, armored helmet made for Nanotrasen elite commandos." icon_state = "commando_helmet" - flags_armor_protection = HEAD|FACE|EYES + armor_protection_flags = HEAD|FACE|EYES soft_armor = list(MELEE = 95, BULLET = 120, LASER = 200, ENERGY = 200, BOMB = 90, BIO = 100, FIRE = 90, ACID = 95) - flags_inventory = COVEREYES|COVERMOUTH|BLOCKSHARPOBJ|BLOCKGASEFFECT - flags_inv_hide = HIDEEARS|HIDEEYES|HIDEFACE|HIDEMASK|HIDEALLHAIR + inventory_flags = COVEREYES|COVERMOUTH|BLOCKSHARPOBJ|BLOCKGASEFFECT + inv_hide_flags = HIDEEARS|HIDEEYES|HIDEFACE|HIDEMASK|HIDEALLHAIR eye_protection = 2 anti_hug = 50 resistance_flags = UNACIDABLE @@ -327,10 +352,11 @@ icon_state = "guardhelm" item_icons = list( slot_head_str = 'icons/mob/clothing/headwear/ert_headwear.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi',) + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', + ) item_state = "guardhelm" - flags_item = SYNTH_RESTRICTED + item_flags = SYNTH_RESTRICTED soft_armor = list(MELEE = 85, BULLET = 75, LASER = 70, ENERGY = 70, BOMB = 60, BIO = 50, FIRE = 50, ACID = 50) /obj/item/clothing/head/helmet/marine/imperial/sergeant @@ -351,10 +377,11 @@ icon = 'icons/obj/clothing/headwear/ert_headwear.dmi' item_icons = list( slot_head_str = 'icons/mob/clothing/headwear/ert_headwear.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi',) + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', + ) icon_state = "upp_helmet1" - flags_item = SYNTH_RESTRICTED + item_flags = SYNTH_RESTRICTED soft_armor = list(MELEE = 70, BULLET = 55, LASER = 40, ENERGY = 35, BOMB = 35, BIO = 5, FIRE = 35, ACID = 35) min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE @@ -373,12 +400,13 @@ icon = 'icons/obj/clothing/headwear/marine_hats.dmi' item_icons = list( slot_head_str = 'icons/mob/clothing/headwear/marine_hats.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi',) + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', + ) icon_state = "spec" soft_armor = list(MELEE = 35, BULLET = 35, LASER = 35, ENERGY = 15, BOMB = 10, BIO = 0, FIRE = 15, ACID = 15) - flags_inventory = BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS + inventory_flags = BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS /*===========================HELGHAST - MERCENARY================================ =====================================================================*/ @@ -387,17 +415,17 @@ name = "\improper K12 ceramic helmet" desc = "A sturdy helmet worn by an unknown mercenary group." icon_state = "mercenary_heavy_helmet" - flags_armor_protection = HEAD|FACE|EYES + armor_protection_flags = HEAD|FACE|EYES soft_armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 60, BOMB = 70, BIO = 10, FIRE = 60, ACID = 60) - flags_inventory = COVEREYES|COVERMOUTH|BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS|HIDEEYES|HIDEFACE|HIDEMASK|HIDEALLHAIR - flags_marine_helmet = NONE + inventory_flags = COVEREYES|COVERMOUTH|BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS|HIDEEYES|HIDEFACE|HIDEMASK|HIDEALLHAIR + marine_helmet_flags = NONE /obj/item/clothing/head/helmet/marine/veteran/mercenary/miner name = "\improper Y8 miner helmet" desc = "A sturdy helmet worn by an unknown mercenary group." icon_state = "mercenary_miner_helmet" - flags_armor_protection = HEAD|FACE|EYES + armor_protection_flags = HEAD|FACE|EYES soft_armor = list(MELEE = 55, BULLET = 55, LASER = 45, ENERGY = 55, BOMB = 55, BIO = 10, FIRE = 55, ACID = 55) @@ -405,7 +433,7 @@ name = "\improper Z7 engineer helmet" desc = "A sturdy helmet worn by an unknown mercenary group." icon_state = "mercenary_engineer_helmet" - flags_armor_protection = HEAD|FACE|EYES + armor_protection_flags = HEAD|FACE|EYES soft_armor = list(MELEE = 55, BULLET = 60, LASER = 45, ENERGY = 55, BOMB = 60, BIO = 10, FIRE = 55, ACID = 55) @@ -417,14 +445,15 @@ icon_state = "som_helmet" item_icons = list( slot_head_str = 'icons/mob/clothing/headwear/ert_headwear.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi',) + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', + ) item_state = "som_helmet" soft_armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 50, FIRE = 50, ACID = 50) min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE - flags_inventory = BLOCKSHARPOBJ - flags_inv_hide = NONE - flags_marine_helmet = NONE + inventory_flags = BLOCKSHARPOBJ + inv_hide_flags = NONE + marine_helmet_flags = NONE /obj/item/clothing/head/helmet/marine/som/veteran @@ -447,7 +476,7 @@ desc = "A field of invisible energy, it protects the wearer but prevents any clothing from being worn." icon = 'icons/effects/effects.dmi' icon_state = "shield-blue" - flags_item = DELONDROP + item_flags = DELONDROP soft_armor = list(MELEE = 65, BULLET = 60, LASER = 30, ENERGY = 20, BOMB = 25, BIO = 40, FIRE = 20, ACID = 20) anti_hug = 5 @@ -462,8 +491,9 @@ icon_state = "icc" item_icons = list( slot_head_str = 'icons/mob/clothing/headwear/ert_headwear.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi',) + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', + ) item_state = "icc" soft_armor = list(MELEE = 50, BULLET = 60, LASER = 50, ENERGY = 60, BOMB = 70, BIO = 10, FIRE = 60, ACID = 50) @@ -473,3 +503,10 @@ icon_state = "icc_guard" item_state = "icc_guard" soft_armor = list(MELEE = 60, BULLET = 65, LASER = 40, ENERGY = 60, BOMB = 80, BIO = 10, FIRE = 55, ACID = 40) + +/obj/item/clothing/head/helmet/marine/icc/guard/heavy + name = "\improper Modelle/22 combat helmet" + desc = "A high-quality ICCGF helmet, mostly seen worn by the ICC's highest quality troops, better well known as 'Guardsmen'. Like most helmets of the ICC it is made to fit a utility and combat role with noticeably high resistance to explosions and bullets, this one is heavily reinforced." + icon_state = "icc_guard_heavy" + item_state = "icc_guard_heavy" + soft_armor = list(MELEE = 65, BULLET = 70, LASER = 40, ENERGY = 60, BOMB = 85, BIO = 10, FIRE = 55, ACID = 40) diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 54acc577bce85..dc7590ddd23d1 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -22,31 +22,31 @@ name = "captain's cap" desc = "You fear to wear it for the negligence it brings." icon_state = "capcap" - flags_inventory = NONE - flags_inv_hide = NONE - flags_armor_protection = NONE - flags_cold_protection = HEAD + inventory_flags = NONE + inv_hide_flags = NONE + armor_protection_flags = NONE + cold_protection_flags = HEAD min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.9 - flags_armor_protection = NONE + armor_protection_flags = NONE //Chaplain /obj/item/clothing/head/chaplain_hood name = "chaplain's hood" desc = "It's hood that covers the head. It keeps you warm during the space winters." icon_state = "chaplain_hood" - flags_inventory = COVEREYES - flags_inv_hide = HIDEEARS|HIDEALLHAIR + inventory_flags = COVEREYES + inv_hide_flags = HIDEEARS|HIDEALLHAIR siemens_coefficient = 0.9 - flags_armor_protection = HEAD|EYES + armor_protection_flags = HEAD|EYES //Chaplain /obj/item/clothing/head/nun_hood name = "nun hood" desc = "Maximum piety in this star system." icon_state = "nun_hood" - flags_inventory = COVEREYES - flags_inv_hide = HIDEEARS|HIDEALLHAIR + inventory_flags = COVEREYES + inv_hide_flags = HIDEEARS|HIDEALLHAIR siemens_coefficient = 0.9 //Mime @@ -56,7 +56,7 @@ icon_state = "beret" siemens_coefficient = 0.9 soft_armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 10, BIO = 5, FIRE = 5, ACID = 5) - flags_armor_features = ARMOR_NO_DECAP + armor_features_flags = ARMOR_NO_DECAP //Security /obj/item/clothing/head/beret/sec @@ -91,7 +91,7 @@ name = "surgical cap" desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs." icon_state = "surgcap_blue" - flags_inv_hide = HIDETOPHAIR + inv_hide_flags = HIDETOPHAIR /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." @@ -116,7 +116,7 @@ allowed = list(/obj/item/reagent_containers/food/snacks/candy_corn, /obj/item/tool/pen) soft_armor = list(MELEE = 50, BULLET = 5, LASER = 25, ENERGY = 10, BOMB = 0, BIO = 0, FIRE = 10, ACID = 10) siemens_coefficient = 0.9 - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/head/det_hat/black icon_state = "detective2" diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index e42e6667a54c4..c4cbb90011136 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -6,14 +6,14 @@ desc = "It's good to be emperor." item_state = "centhat" siemens_coefficient = 0.9 - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/head/hairflower name = "hair flower pin" icon_state = "hairflower" desc = "Smells nice." item_state = "hairflower" - flags_armor_protection = NONE + armor_protection_flags = NONE w_class = WEIGHT_CLASS_TINY /obj/item/clothing/head/powdered_wig @@ -28,13 +28,13 @@ icon_state = "tophat" item_state = "that" siemens_coefficient = 0.9 - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/head/redcoat name = "redcoat's hat" icon_state = "redcoat" desc = "'I guess it's a redhead.'" - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/head/plaguedoctorhat name = "plague doctor's hat" @@ -42,69 +42,69 @@ icon_state = "plaguedoctor" permeability_coefficient = 0.01 siemens_coefficient = 0.9 - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/head/hasturhood name = "hastur's hood" desc = "It's unspeakably stylish" icon_state = "hasturhood" - flags_inventory = COVEREYES - flags_inv_hide = HIDEEARS|HIDEALLHAIR - flags_armor_protection = HEAD|FACE|EYES + inventory_flags = COVEREYES + inv_hide_flags = HIDEEARS|HIDEALLHAIR + armor_protection_flags = 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 - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/head/syndicatefake name = "red space-helmet replica" icon_state = "syndicate" item_state = "syndicate" desc = "A plastic replica of a syndicate agent's space helmet, you'll look just like a real murderous syndicate agent in this! This is a toy, it is not made for use in space!" - flags_inventory = COVEREYES|COVERMOUTH - flags_inv_hide = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEALLHAIR + inventory_flags = COVEREYES|COVERMOUTH + inv_hide_flags = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEALLHAIR siemens_coefficient = 2 - flags_armor_protection = HEAD|FACE|EYES + armor_protection_flags = HEAD|FACE|EYES anti_hug = 1 /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_inventory = COVEREYES|COVERMOUTH - flags_inv_hide = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEALLHAIR + inventory_flags = COVEREYES|COVERMOUTH + inv_hide_flags = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEALLHAIR item_state="cueball" - flags_inventory = NONE - flags_armor_protection = HEAD|FACE|EYES + inventory_flags = NONE + armor_protection_flags = HEAD|FACE|EYES /obj/item/clothing/head/greenbandanna name = "green bandanna" desc = "It's a green bandanna with some fine nanotech lining." icon_state = "greenbandanna" item_state = "greenbandanna" - flags_inventory = NONE - flags_inv_hide = NONE - flags_armor_protection = NONE + inventory_flags = NONE + inv_hide_flags = NONE + armor_protection_flags = NONE /obj/item/clothing/head/cardborg name = "cardborg helmet" desc = "A helmet made out of a box." icon_state = "cardborg_h" item_state = "cardborg_h" - flags_inventory = COVERMOUTH|COVEREYES - flags_inv_hide = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEALLHAIR - flags_armor_protection = HEAD|FACE|EYES + inventory_flags = COVERMOUTH|COVEREYES + inv_hide_flags = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEALLHAIR + armor_protection_flags = HEAD|FACE|EYES /obj/item/clothing/head/justice name = "justice hat" desc = "fight for what's righteous!" icon_state = "justicered" item_state = "justicered" - flags_inventory = COVERMOUTH|COVEREYES - flags_inv_hide = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEALLHAIR + inventory_flags = COVERMOUTH|COVEREYES + inv_hide_flags = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEALLHAIR /obj/item/clothing/head/flatcap name = "flat cap" @@ -118,15 +118,15 @@ desc = "Yarr." icon_state = "pirate" item_state = "pirate" - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/head/hgpiratecap name = "pirate hat" desc = "Yarr." icon_state = "hgpiratecap" item_state = "hgpiratecap" - flags_armor_protection = NONE - flags_item = SYNTH_RESTRICTED + armor_protection_flags = NONE + item_flags = SYNTH_RESTRICTED soft_armor = list(MELEE = 50, BULLET = 80, LASER = 50, ENERGY = 10, BOMB = 50, BIO = 0, FIRE = 10, ACID = 10) /obj/item/clothing/head/bandanna/brown @@ -152,7 +152,7 @@ desc = "Gentleman, elite aboard!" icon_state = "bowler" item_state = "bowler" - flags_armor_protection = NONE + armor_protection_flags = NONE //stylish bs12 hats @@ -161,7 +161,7 @@ icon_state = "bowler_hat" item_state = "bowler_hat" desc = "For the gentleman of distinction." - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/head/beaverhat name = "beaver hat" @@ -200,8 +200,8 @@ desc = "Eeeee~heheheheheheh!" icon_state = "witch" item_state = "witch" - flags_inventory = NONE - flags_inv_hide = HIDEALLHAIR + inventory_flags = NONE + inv_hide_flags = HIDEALLHAIR siemens_coefficient = 2 /obj/item/clothing/head/chicken @@ -209,20 +209,20 @@ desc = "Bkaw!" icon_state = "chickenhead" item_state = "chickensuit" - flags_inventory = NONE - flags_inv_hide = HIDEALLHAIR + inventory_flags = NONE + inv_hide_flags = HIDEALLHAIR siemens_coefficient = 2 - flags_armor_protection = HEAD|FACE|EYES + armor_protection_flags = HEAD|FACE|EYES /obj/item/clothing/head/xenos name = "xenos helmet" icon_state = "xenos" item_state = "xenos_helm" desc = "A helmet made out of chitinous alien hide." - flags_inventory = COVERMOUTH|COVEREYES|BLOCKSHARPOBJ - flags_inv_hide = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEALLHAIR + inventory_flags = COVERMOUTH|COVEREYES|BLOCKSHARPOBJ + inv_hide_flags = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEALLHAIR siemens_coefficient = 2 - flags_armor_protection = HEAD|FACE|EYES + armor_protection_flags = HEAD|FACE|EYES anti_hug = 10 //Lel /obj/item/clothing/head/white_dress @@ -266,5 +266,5 @@ desc = "Praise the Omnissiah!" icon_state = "tp_hood" item_state = "tp_hood" - flags_inv_hide = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEALLHAIR - flags_armor_protection = HEAD|FACE|EYES + inv_hide_flags = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEALLHAIR + armor_protection_flags = HEAD|FACE|EYES diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 17dfb785f911c..1501d989906d1 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -17,10 +17,10 @@ item_state = "welding" var/up = FALSE soft_armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0) - flags_atom = CONDUCT - flags_inventory = COVEREYES|COVERMOUTH|BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS|HIDEEYES|HIDEFACE - flags_armor_protection = HEAD|FACE|EYES + atom_flags = CONDUCT + inventory_flags = COVEREYES|COVERMOUTH|BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS|HIDEEYES|HIDEFACE + armor_protection_flags = HEAD|FACE|EYES actions_types = list(/datum/action/item_action/toggle) siemens_coefficient = 0.9 w_class = WEIGHT_CLASS_NORMAL @@ -44,16 +44,16 @@ toggle_item_state(usr) /obj/item/clothing/head/welding/proc/flip_up() - DISABLE_BITFIELD(flags_inventory, COVEREYES|COVERMOUTH|BLOCKSHARPOBJ) - DISABLE_BITFIELD(flags_inv_hide, HIDEEARS|HIDEEYES|HIDEFACE) + DISABLE_BITFIELD(inventory_flags, COVEREYES|COVERMOUTH|BLOCKSHARPOBJ) + DISABLE_BITFIELD(inv_hide_flags, HIDEEARS|HIDEEYES|HIDEFACE) eye_protection = 0 hug_memory = anti_hug anti_hug = 0 icon_state = "[initial(icon_state)]up" /obj/item/clothing/head/welding/proc/flip_down() - ENABLE_BITFIELD(flags_inventory, COVEREYES|COVERMOUTH|BLOCKSHARPOBJ) - ENABLE_BITFIELD(flags_inv_hide, HIDEEARS|HIDEEYES|HIDEFACE) + ENABLE_BITFIELD(inventory_flags, COVEREYES|COVERMOUTH|BLOCKSHARPOBJ) + ENABLE_BITFIELD(inv_hide_flags, HIDEEARS|HIDEEYES|HIDEFACE) eye_protection = initial(eye_protection) anti_hug = hug_memory icon_state = initial(icon_state) @@ -88,11 +88,11 @@ name = "cake-hat" desc = "It's tasty looking!" icon_state = "cake0" - flags_inventory = COVEREYES + inventory_flags = COVEREYES var/onfire = 0 var/status = 0 var/processing = 0 //I dont think this is used anywhere. - flags_armor_protection = EYES + armor_protection_flags = EYES /obj/item/clothing/head/cakehat/process() if(!onfire) @@ -123,9 +123,9 @@ desc = "A jack o' lantern! Believed to ward off evil spirits." icon_state = "hardhat0_pumpkin"//Could stand to be renamed item_state = "hardhat0_pumpkin" - flags_inventory = COVEREYES|COVERMOUTH - flags_inv_hide = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEALLHAIR - flags_armor_protection = HEAD|EYES + inventory_flags = COVEREYES|COVERMOUTH + inv_hide_flags = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEALLHAIR + armor_protection_flags = HEAD|EYES w_class = WEIGHT_CLASS_NORMAL anti_hug = 1 diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 3280889ddc896..86d6b25fcc413 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -3,11 +3,11 @@ desc = "It's a baseball hat in a tasteless yellow color." icon_state = "cargosoft" item_state = "cargosoft" - flags_inventory = COVEREYES + inventory_flags = COVEREYES var/cap_color = "cargo" var/flipped = 0 siemens_coefficient = 0.9 - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/head/soft/dropped() icon_state = "[cap_color]soft" @@ -104,7 +104,7 @@ icon_state = "greysoft" cap_color = "grey" soft_armor = list(MELEE = 35, BULLET = 35, LASER = 35, ENERGY = 15, BOMB = 10, BIO = 0, FIRE = 15, ACID = 15) - flags_inventory = BLOCKSHARPOBJ + inventory_flags = BLOCKSHARPOBJ /obj/item/clothing/head/soft/marine/alpha name = "alpha squad sergeant cap" diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index 6782a60a09518..9c023f2ada7a6 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -3,8 +3,8 @@ name = "breath mask" icon_state = "breath" item_state = "breath" - flags_inventory = COVERMOUTH - flags_armor_protection = NONE + inventory_flags = COVERMOUTH + armor_protection_flags = NONE w_class = WEIGHT_CLASS_SMALL gas_transfer_coefficient = 0.10 permeability_coefficient = 0.50 @@ -20,14 +20,14 @@ if(!src.hanging) src.hanging = !src.hanging gas_transfer_coefficient = 1 //gas is now escaping to the turf and vice versa - flags_inventory &= ~(COVERMOUTH) + inventory_flags &= ~(COVERMOUTH) icon_state = "breathdown" to_chat(usr, "Your mask is now hanging on your neck.") else src.hanging = !src.hanging gas_transfer_coefficient = 0.10 - flags_inventory |= COVERMOUTH + inventory_flags |= COVERMOUTH icon_state = "breath" to_chat(usr, "You pull the mask up to cover your face.") update_clothing_icon() @@ -48,9 +48,9 @@ desc = "A close-fitting device that instantly heats or cools down air when you inhale so it doesn't damage your lungs." icon_state = "rebreather" item_state = "rebreather" - flags_armor_protection = NONE - flags_inventory = COVERMOUTH|COVEREYES|BLOCKGASEFFECT - flags_inv_hide = HIDELOWHAIR + armor_protection_flags = NONE + inventory_flags = COVERMOUTH|COVEREYES|BLOCKGASEFFECT + inv_hide_flags = HIDELOWHAIR gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 @@ -59,8 +59,8 @@ desc = "A close-fitting cap that covers the top, back, and sides of the head. Can also be adjusted to cover the lower part of the face so it keeps the user warm in harsh conditions." icon_state = "coif" item_state = "coif" - flags_inv_hide = HIDEALLHAIR|HIDEEARS - flags_cold_protection = HEAD + inv_hide_flags = HIDEALLHAIR|HIDEEARS + cold_protection_flags = HEAD min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE /obj/item/clothing/mask/rebreather/scarf/freelancer @@ -71,9 +71,9 @@ desc = "A colored, resilient, and insulating cloth to cover your face from the elements. This one is Desert Tan" icon_state = "bandanna" item_state = "bandanna" - flags_armor_protection = FACE - flags_inv_hide = HIDEFACE - flags_inventory = COVERMOUTH|BLOCKGASEFFECT + armor_protection_flags = FACE + inv_hide_flags = HIDEFACE + inventory_flags = COVERMOUTH|BLOCKGASEFFECT gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 @@ -87,9 +87,9 @@ active = !active icon_state = "[initial(icon_state)][!active ? "_down" : ""]" - flags_armor_protection ^= initial(flags_armor_protection) - flags_inv_hide ^= initial(flags_inv_hide) - flags_inventory ^= initial(flags_inventory) + armor_protection_flags ^= initial(armor_protection_flags) + inv_hide_flags ^= initial(inv_hide_flags) + inventory_flags ^= initial(inventory_flags) to_chat(usr, "You [active ? "pull [src] up to cover your face" : "pull [src] off your face"].") update_clothing_icon() diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 57f195bfadb14..07abd5d1da542 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -5,15 +5,14 @@ desc = "A face-covering mask that can be connected to an air supply. Filters harmful gases from the air." icon_state = "gas_alt" item_state = "gas_alt" - flags_inventory = COVERMOUTH | COVEREYES | BLOCKGASEFFECT - flags_inv_hide = HIDEEARS|HIDEFACE|HIDELOWHAIR - flags_cold_protection = HEAD + inventory_flags = COVERMOUTH | COVEREYES | BLOCKGASEFFECT + inv_hide_flags = HIDEEARS|HIDEFACE|HIDELOWHAIR + cold_protection_flags = HEAD min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE w_class = WEIGHT_CLASS_SMALL gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 siemens_coefficient = 0.9 - voice_filter = "lowpass=f=750,volume=2" var/gas_filter_strength = 1 //For gas mask filters var/list/filtered_gases = list(/datum/reagent/toxin/phoron, "sleeping_agent", "carbon_dioxide") ///Does this particular mask have breath noises @@ -40,12 +39,13 @@ /obj/item/clothing/mask/gas/tactical name = "Tactical gas mask" icon_state = "gas_alt_tactical" + voice_filter = "lowpass=f=750,volume=2" /obj/item/clothing/mask/gas/tactical/coif name = "Tactical coifed gas mask" desc = "A face-covering coifed mask that can be connected to an air supply. Filters harmful gases from the air." icon_state = "gascoif" - flags_inv_hide = HIDEEARS|HIDEFACE|HIDEALLHAIR + inv_hide_flags = HIDEEARS|HIDEFACE|HIDEALLHAIR /obj/item/clothing/mask/gas/pmc name = "\improper M8 pattern armored balaclava" @@ -53,10 +53,10 @@ icon_state = "pmc_mask" item_state = "helmet" anti_hug = 3 - flags_inventory = COVERMOUTH|BLOCKGASEFFECT - flags_inv_hide = HIDEEARS|HIDEFACE|HIDEALLHAIR + inventory_flags = COVERMOUTH|BLOCKGASEFFECT + inv_hide_flags = HIDEEARS|HIDEFACE|HIDEALLHAIR breathy = FALSE - voice_filter = null + voice_filter = "lowpass=f=750,volume=2" /obj/item/clothing/mask/gas/pmc/damaged name = "damaged M8 pattern armored balaclava" @@ -77,7 +77,6 @@ icon_state = "wolf_mask" anti_hug = 2 breathy = FALSE - voice_filter = null /obj/item/clothing/mask/gas/icc name = "\improper Modelle/60 gas mask" @@ -91,7 +90,7 @@ icon_state = "plaguedoctor" item_state = "gas_mask" soft_armor = list(MELEE = 0, BULLET = 0, LASER = 2, ENERGY = 2, BOMB = 0, BIO = 75, FIRE = 2, ACID = 2) - flags_armor_protection = HEAD|FACE + armor_protection_flags = HEAD|FACE /obj/item/clothing/mask/gas/swat name = "\improper SWAT mask" @@ -99,7 +98,20 @@ icon_state = "swat" anti_hug = 1 siemens_coefficient = 0.7 - flags_armor_protection = FACE|EYES + armor_protection_flags = FACE|EYES + voice_filter = "lowpass=f=750,volume=2" + +/obj/item/clothing/mask/gas/specops + name = "Special Operations gasmask" + desc = "A close-fitting tactical mask that can be connected to an air supply. Based off an old design of gas masks." + icon = 'icons/mob/clothing/mask.dmi' + item_icons = list( + slot_wear_suit_str = 'icons/mob/clothing/mask.dmi' + ) + icon_state = "specop" + item_state = "specop" + siemens_coefficient = 0.7 + voice_filter = "lowpass=f=750,volume=2" /obj/item/clothing/mask/gas/syndicate name = "syndicate mask" @@ -128,7 +140,6 @@ icon_state = "clown" item_state = "clown_hat" breathy = FALSE - voice_filter = null /obj/item/clothing/mask/gas/sexyclown name = "sexy-clown wig and mask" @@ -136,7 +147,6 @@ icon_state = "sexyclown" item_state = "sexyclown" breathy = FALSE - voice_filter = null /obj/item/clothing/mask/gas/mime name = "mime mask" @@ -144,16 +154,14 @@ icon_state = "mime" item_state = "mime" breathy = FALSE - voice_filter = null /obj/item/clothing/mask/gas/monkeymask name = "monkey mask" desc = "A mask used when acting as a monkey." icon_state = "monkeymask" item_state = "monkeymask" - flags_armor_protection = HEAD|FACE|EYES + armor_protection_flags = HEAD|FACE|EYES breathy = FALSE - voice_filter = null /obj/item/clothing/mask/gas/sexymime name = "sexy mime mask" @@ -161,7 +169,6 @@ icon_state = "sexymime" item_state = "sexymime" breathy = FALSE - voice_filter = null /obj/item/clothing/mask/gas/death_commando name = "Death Commando Mask" @@ -174,7 +181,6 @@ desc = "Beep boop" icon_state = "death" breathy = FALSE - voice_filter = null /obj/item/clothing/mask/gas/owl_mask name = "owl mask" diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 020be3d630b4e..696b7b4b1ad27 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -3,8 +3,8 @@ desc = "To stop that awful noise." icon_state = "muzzle" item_state = "muzzle" - flags_inventory = COVERMOUTH - flags_armor_protection = NONE + inventory_flags = COVERMOUTH + armor_protection_flags = NONE w_class = WEIGHT_CLASS_SMALL gas_transfer_coefficient = 0.90 @@ -14,8 +14,8 @@ icon_state = "sterile" item_state = "sterile" w_class = WEIGHT_CLASS_SMALL - flags_inventory = COVERMOUTH - flags_armor_protection = NONE + inventory_flags = COVERMOUTH + armor_protection_flags = NONE gas_transfer_coefficient = 0.90 permeability_coefficient = 0.01 soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 25, FIRE = 0, ACID = 0) @@ -24,15 +24,15 @@ name = "fake moustache" desc = "Warning: moustache is fake." icon_state = "fake-moustache" - flags_inv_hide = HIDEFACE - flags_armor_protection = NONE + inv_hide_flags = HIDEFACE + armor_protection_flags = NONE /obj/item/clothing/mask/snorkel name = "Snorkel" desc = "For the Swimming Savant." icon_state = "snorkel" - flags_inv_hide = HIDEFACE - flags_armor_protection = NONE + inv_hide_flags = HIDEFACE + armor_protection_flags = NONE //scarves (fit in in mask slot) @@ -41,7 +41,7 @@ desc = "A blue neck scarf." icon_state = "blueneckscarf" item_state = "blueneckscarf" - flags_inventory = COVERMOUTH + inventory_flags = COVERMOUTH w_class = WEIGHT_CLASS_SMALL gas_transfer_coefficient = 0.90 @@ -50,7 +50,7 @@ desc = "A red and white checkered neck scarf." icon_state = "redwhite_scarf" item_state = "redwhite_scarf" - flags_inventory = COVERMOUTH + inventory_flags = COVERMOUTH w_class = WEIGHT_CLASS_SMALL gas_transfer_coefficient = 0.90 @@ -59,7 +59,7 @@ desc = "A green neck scarf." icon_state = "green_scarf" item_state = "green_scarf" - flags_inventory = COVERMOUTH + inventory_flags = COVERMOUTH w_class = WEIGHT_CLASS_SMALL gas_transfer_coefficient = 0.90 @@ -68,7 +68,7 @@ desc = "A stealthy, dark scarf." icon_state = "ninja_scarf" item_state = "ninja_scarf" - flags_inventory = COVERMOUTH + inventory_flags = COVERMOUTH w_class = WEIGHT_CLASS_SMALL gas_transfer_coefficient = 0.90 siemens_coefficient = 0 @@ -78,20 +78,20 @@ desc = "A rubber pig mask." icon_state = "pig" item_state = "pig" - flags_inventory = COVERMOUTH|COVEREYES - flags_inv_hide = HIDEFACE|HIDEALLHAIR|HIDEEYES|HIDEEARS + inventory_flags = COVERMOUTH|COVEREYES + inv_hide_flags = HIDEFACE|HIDEALLHAIR|HIDEEYES|HIDEEARS w_class = WEIGHT_CLASS_SMALL siemens_coefficient = 0.9 - flags_armor_protection = HEAD|FACE|EYES + armor_protection_flags = 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" item_state = "horsehead" - flags_inventory = COVERMOUTH|COVEREYES - flags_inv_hide = HIDEFACE|HIDEALLHAIR|HIDEEYES|HIDEEARS - flags_armor_protection = HEAD|FACE|EYES + inventory_flags = COVERMOUTH|COVEREYES + inv_hide_flags = HIDEFACE|HIDEALLHAIR|HIDEEYES|HIDEEARS + armor_protection_flags = HEAD|FACE|EYES w_class = WEIGHT_CLASS_SMALL var/voicechange = 0 siemens_coefficient = 0.9 @@ -102,8 +102,8 @@ desc = "LOADSAMONEY" icon_state = "balaclava" item_state = "balaclava" - flags_inv_hide = HIDEFACE|HIDEALLHAIR - flags_armor_protection = FACE + inv_hide_flags = HIDEFACE|HIDEALLHAIR + armor_protection_flags = FACE w_class = WEIGHT_CLASS_SMALL /obj/item/clothing/mask/balaclava/tactical @@ -118,11 +118,11 @@ desc = "Worn by robust fighters, flying high to defeat their foes!" icon_state = "luchag" item_state = "luchag" - flags_inv_hide = HIDEFACE|HIDEALLHAIR - flags_cold_protection = HEAD + inv_hide_flags = HIDEFACE|HIDEALLHAIR + cold_protection_flags = HEAD min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE - flags_armor_protection = HEAD|FACE - flags_inventory = COVERMOUTH + armor_protection_flags = HEAD|FACE + inventory_flags = COVERMOUTH w_class = WEIGHT_CLASS_SMALL siemens_coefficient = 3 diff --git a/code/modules/clothing/modular_armor/attachments.dm b/code/modules/clothing/modular_armor/attachments.dm index 3a78e5c120428..35441d9cd371d 100644 --- a/code/modules/clothing/modular_armor/attachments.dm +++ b/code/modules/clothing/modular_armor/attachments.dm @@ -26,7 +26,7 @@ ///Pixel shift for the item overlay on the Y axis. var/pixel_shift_y = 0 ///Bitfield flags of various features. - var/flags_attach_features = ATTACH_REMOVABLE|ATTACH_APPLY_ON_MOB + var/attach_features_flags = ATTACH_REMOVABLE|ATTACH_APPLY_ON_MOB ///Time it takes to attach. var/attach_delay = 1.5 SECONDS ///Time it takes to detach. @@ -65,7 +65,7 @@ /obj/item/armor_module/Initialize(mapload) . = ..() - AddElement(/datum/element/attachment, slot, attach_icon, on_attach, on_detach, null, can_attach, pixel_shift_x, pixel_shift_y, flags_attach_features, attach_delay, detach_delay, mob_overlay_icon = mob_overlay_icon, mob_pixel_shift_x = mob_pixel_shift_x, mob_pixel_shift_y = mob_pixel_shift_y, attachment_layer = attachment_layer) + AddElement(/datum/element/attachment, slot, attach_icon, on_attach, on_detach, null, can_attach, pixel_shift_x, pixel_shift_y, attach_features_flags, attach_delay, detach_delay, mob_overlay_icon = mob_overlay_icon, mob_pixel_shift_x = mob_pixel_shift_x, mob_pixel_shift_y = mob_pixel_shift_y, attachment_layer = attachment_layer) AddComponent(/datum/component/attachment_handler, attachments_by_slot, attachments_allowed, starting_attachments = starting_attachments) update_icon() @@ -81,7 +81,7 @@ parent.hard_armor = parent.hard_armor.attachArmor(hard_armor) parent.soft_armor = parent.soft_armor.attachArmor(soft_armor) parent.slowdown += slowdown - if(CHECK_BITFIELD(flags_attach_features, ATTACH_ACTIVATION)) + if(CHECK_BITFIELD(attach_features_flags, ATTACH_ACTIVATION)) RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(handle_actions)) base_icon = icon_state if(length(variants_by_parent_type)) @@ -107,7 +107,7 @@ ///Adds or removes actions based on whether the parent is in the correct slot. /obj/item/armor_module/proc/handle_actions(datum/source, mob/user, slot) SIGNAL_HANDLER - if(prefered_slot && (slot != prefered_slot) || !CHECK_BITFIELD(flags_attach_features, ATTACH_ACTIVATION)) + if(prefered_slot && (slot != prefered_slot) || !CHECK_BITFIELD(attach_features_flags, ATTACH_ACTIVATION)) LAZYREMOVE(actions_types, /datum/action/item_action/toggle) var/datum/action/item_action/toggle/old_action = locate(/datum/action/item_action/toggle) in actions old_action?.remove_action(user) @@ -121,7 +121,6 @@ /obj/item/armor_module/ui_action_click(mob/user, datum/action/item_action/toggle/action) action.set_toggle(activate(user)) - action.update_button_icon() ///Called on ui_action_click. Used for activating the module. /obj/item/armor_module/proc/activate(mob/living/user) @@ -145,9 +144,9 @@ greyscale_config = null greyscale_colors = ARMOR_PALETTE_DRAB - flags_attach_features = ATTACH_REMOVABLE|ATTACH_SAME_ICON|ATTACH_APPLY_ON_MOB + attach_features_flags = ATTACH_REMOVABLE|ATTACH_SAME_ICON|ATTACH_APPLY_ON_MOB - flags_item_map_variant = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_PRISON_VARIANT + item_map_variant_flags = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_PRISON_VARIANT ///If TRUE, this armor piece can be recolored when its parent is right clicked by facepaint. var/secondary_color = FALSE diff --git a/code/modules/clothing/modular_armor/attachments/arm_plates.dm b/code/modules/clothing/modular_armor/attachments/arm_plates.dm index 80a98f32ae2bd..03ecc155768f0 100644 --- a/code/modules/clothing/modular_armor/attachments/arm_plates.dm +++ b/code/modules/clothing/modular_armor/attachments/arm_plates.dm @@ -54,28 +54,11 @@ desc = "Designed for use with the Jaeger Combat Exoskeleton. It provides high protection and encumbrance when attached and is fairly easy to attach and remove from armor. Click on the armor frame to attach it. All arm plates have the same armor and slowdown, meaning that only changing the chestplate makes significant armor difference. This armor appears to be marked as a Trooper armor piece." greyscale_config = /datum/greyscale_config/armor_mk1/trooper -/obj/item/armor_module/armor/arms/marine/kabuto - name = "\improper Style Pattern Kabuto arm plates" - desc = "Designed for use with the Jaeger Combat Exoskeleton. It provides high protection and encumbrance when attached and is fairly easy to attach and remove from armor. Click on the armor frame to attach it. All arm plates have the same armor and slowdown, meaning that only changing the chestplate makes significant armor difference. This armor appears to be marked as a Kabuto armor piece." - greyscale_config = /datum/greyscale_config/armor_mk1/kabuto - -/obj/item/armor_module/armor/arms/marine/hotaru - name = "\improper Style Pattern Hotaru arm plates" - desc = "Designed for use with the Jaeger Combat Exoskeleton. It provides high protection and encumbrance when attached and is fairly easy to attach and remove from armor. Click on the armor frame to attach it. All arm plates have the same armor and slowdown, meaning that only changing the chestplate makes significant armor difference. This armor appears to be marked as a Hotaru armor piece." - greyscale_config = /datum/greyscale_config/armor_mk1/hotaru - -/obj/item/armor_module/armor/arms/marine/dashe - name = "\improper Style Pattern Dashe arm plates" - desc = "Designed for use with the Jaeger Combat Exoskeleton. It provides high protection and encumbrance when attached and is fairly easy to attach and remove from armor. Click on the armor frame to attach it. All arm plates have the same armor and slowdown, meaning that only changing the chestplate makes significant armor difference. This armor appears to be marked as a Dashe armor piece." - greyscale_config = /datum/greyscale_config/armor_mk1/dashe - // Hardsuit Arm Plates /obj/item/armor_module/armor/arms/marine/hardsuit_arms name = "\improper FleckTex Base arm plates" desc = "Designed for use with the FleckTex WY-01 Exoskeleton. It provides high protection and encumbrance when attached and is fairly easy to attach and remove from armor. Click on the armor frame to attach it. All arm plates have the same armor and slowdown, meaning that only changing the chestplate makes significant armor difference. This armor appears to be marked as a Base armor piece." starting_attachments = list(/obj/item/armor_module/armor/secondary_color/arm) - attachments_allowed = list(/obj/item/armor_module/armor/secondary_color/arm) - attachments_by_slot = list(ATTACHMENT_SLOT_ARM_SECONDARY_COLOR) greyscale_config = /datum/greyscale_config/hardsuit_variant /obj/item/armor_module/armor/arms/marine/hardsuit_arms/syndicate_markfive diff --git a/code/modules/clothing/modular_armor/attachments/badges.dm b/code/modules/clothing/modular_armor/attachments/badges.dm index 47de6414d3b0b..68e0107d30b01 100644 --- a/code/modules/clothing/modular_armor/attachments/badges.dm +++ b/code/modules/clothing/modular_armor/attachments/badges.dm @@ -4,11 +4,11 @@ greyscale_config = /datum/greyscale_config/badge/shield icon_state = "in_hand" slot = ATTACHMENT_SLOT_BADGE - flags_attach_features = ATTACH_REMOVABLE|ATTACH_APPLY_ON_MOB|ATTACH_NO_HANDS|ATTACH_SAME_ICON + attach_features_flags = ATTACH_REMOVABLE|ATTACH_APPLY_ON_MOB|ATTACH_NO_HANDS|ATTACH_SAME_ICON colorable_allowed = COLOR_WHEEL_ALLOWED greyscale_colors = COLOR_RED secondary_color = TRUE - flags_item_map_variant = NONE + item_map_variant_flags = NONE ///List of selectable styles for where the badge is worn. var/list/style_list = list( @@ -89,10 +89,10 @@ icon_state = "beret_badge" greyscale_config = /datum/greyscale_config/style_hat/badge slot = ATTACHMENT_SLOT_CAPE_HIGHLIGHT - flags_attach_features = ATTACH_APPLY_ON_MOB|ATTACH_DIFFERENT_MOB_ICON_STATE + attach_features_flags = ATTACH_APPLY_ON_MOB|ATTACH_DIFFERENT_MOB_ICON_STATE secondary_color = TRUE greyscale_colors = COLOR_RED - flags_item_map_variant = NONE + item_map_variant_flags = NONE colorable_allowed = COLOR_WHEEL_ALLOWED /obj/item/armor_module/armor/stylehat_badge/classic @@ -108,10 +108,10 @@ icon_state = "skull" greyscale_config = /datum/greyscale_config/visors/glyphs slot = ATTACHMENT_SLOT_CAPE_HIGHLIGHT - flags_attach_features = ATTACH_APPLY_ON_MOB|ATTACH_SAME_ICON + attach_features_flags = ATTACH_APPLY_ON_MOB|ATTACH_SAME_ICON secondary_color = TRUE greyscale_colors = COLOR_WHITE - flags_item_map_variant = NONE + item_map_variant_flags = NONE colorable_allowed = COLOR_WHEEL_ALLOWED /obj/item/armor_module/armor/visor_glyph/old diff --git a/code/modules/clothing/modular_armor/attachments/cape.dm b/code/modules/clothing/modular_armor/attachments/cape.dm index 21ed11c30d46c..2179af483dbdd 100644 --- a/code/modules/clothing/modular_armor/attachments/cape.dm +++ b/code/modules/clothing/modular_armor/attachments/cape.dm @@ -9,7 +9,7 @@ attachment_layer = CAPE_LAYER prefered_slot = SLOT_W_UNIFORM greyscale_config = /datum/greyscale_config/cape - flags_attach_features = ATTACH_REMOVABLE|ATTACH_SAME_ICON|ATTACH_APPLY_ON_MOB|ATTACH_ACTIVATION + attach_features_flags = ATTACH_REMOVABLE|ATTACH_SAME_ICON|ATTACH_APPLY_ON_MOB|ATTACH_ACTIVATION|ATTACH_NO_HANDS attach_delay = 0 SECONDS detach_delay = 0 SECONDS secondary_color = TRUE @@ -126,27 +126,6 @@ "none", ), ), - "overlord" = list( - HOOD = FALSE, - HIGHLIGHT_VARIANTS = list( - "overlord", - "none", - ), - ), - "overlord (alt 1)" = list( - HOOD = FALSE, - HIGHLIGHT_VARIANTS = list( - "overlord (alt)", - "none", - ), - ), - "overlord (alt 2)" = list( - HOOD = FALSE, - HIGHLIGHT_VARIANTS = list( - "overlord (alt 2)", - "none", - ), - ), "shoal" = list( HOOD = FALSE, HIGHLIGHT_VARIANTS = list( @@ -168,13 +147,6 @@ "none", ), ), - "star" = list( - HOOD = FALSE, - HIGHLIGHT_VARIANTS = list( - "star", - "none", - ), - ), "rapier (right)" = list( HOOD = FALSE, HIGHLIGHT_VARIANTS = list( @@ -189,19 +161,13 @@ "none", ), ), - "jacket" = list( - HOOD = FALSE, - HIGHLIGHT_VARIANTS = list( - "jacket", - "none", - ), - ), ) ///True if the hood is up, false if not. var/hood = FALSE /obj/item/armor_module/armor/cape/update_icon_state() + . = ..() var/obj/item/armor_module/highlight = attachments_by_slot[ATTACHMENT_SLOT_CAPE_HIGHLIGHT] if(hood) icon_state = initial(icon_state) + "_[current_variant]_h" @@ -228,8 +194,8 @@ return if(parent) UnregisterSignal(parent, COMSIG_ITEM_EQUIPPED) - icon_state_variants[current_variant][HOOD] ? ENABLE_BITFIELD(flags_attach_features, ATTACH_ACTIVATION) : DISABLE_BITFIELD(flags_attach_features, ATTACH_ACTIVATION) - if(CHECK_BITFIELD(flags_attach_features, ATTACH_ACTIVATION) && parent) + icon_state_variants[current_variant][HOOD] ? ENABLE_BITFIELD(attach_features_flags, ATTACH_ACTIVATION) : DISABLE_BITFIELD(attach_features_flags, ATTACH_ACTIVATION) + if(CHECK_BITFIELD(attach_features_flags, ATTACH_ACTIVATION) && parent) RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(handle_actions)) var/obj/item/armor_module/highlight = attachments_by_slot[ATTACHMENT_SLOT_CAPE_HIGHLIGHT] if(!icon_state_variants[current_variant][HOOD]) @@ -260,7 +226,7 @@ desc = "A chromatic kama to improve on the design of the 7E badge, this kama is capable of two colors, for all your fashion needs. Hanged from the belt, it serves to flourish the lower extremities. \n Interact with facepaint to color. Attaches onto a uniform." slot = ATTACHMENT_SLOT_KAMA attachment_layer = KAMA_LAYER - flags_attach_features = ATTACH_REMOVABLE|ATTACH_SAME_ICON|ATTACH_APPLY_ON_MOB + attach_features_flags = ATTACH_REMOVABLE|ATTACH_SAME_ICON|ATTACH_APPLY_ON_MOB|ATTACH_NO_HANDS starting_attachments = list(/obj/item/armor_module/armor/cape_highlight/kama) greyscale_config = /datum/greyscale_config/cape icon_state_variants = list( @@ -291,12 +257,12 @@ desc = "A cape to improve on the design of the 7E badge, this cape is capable of six colors, for all your fashion needs. This variation of the cape functions more as a scarf. \n Interact with facepaint to color. Attaches onto a uniform. Activate it to toggle the hood." icon_state = "highlight" slot = ATTACHMENT_SLOT_CAPE_HIGHLIGHT - flags_attach_features = ATTACH_SAME_ICON|ATTACH_APPLY_ON_MOB + attach_features_flags = ATTACH_SAME_ICON|ATTACH_APPLY_ON_MOB|ATTACH_NO_HANDS colorable_allowed = PRESET_COLORS_ALLOWED|ICON_STATE_VARIANTS_ALLOWED|COLOR_WHEEL_ALLOWED greyscale_config = /datum/greyscale_config/cape_highlight secondary_color = TRUE greyscale_colors = VISOR_PALETTE_GOLD - flags_item_map_variant = NONE + item_map_variant_flags = NONE colorable_colors = VISOR_PALETTES_LIST current_variant = "none" icon_state_variants = list( @@ -306,6 +272,7 @@ ) /obj/item/armor_module/armor/cape_highlight/update_icon_state() + . = ..() if(!parent) return var/obj/item/armor_module/armor/cape/cape_parent = parent diff --git a/code/modules/clothing/modular_armor/attachments/chest_plates.dm b/code/modules/clothing/modular_armor/attachments/chest_plates.dm index ca25651b55a00..1fd46f4c484f7 100644 --- a/code/modules/clothing/modular_armor/attachments/chest_plates.dm +++ b/code/modules/clothing/modular_armor/attachments/chest_plates.dm @@ -59,21 +59,6 @@ desc = "Designed for use with the Jaeger Combat Exoskeleton. It provides high protection and encumbrance when attached and is fairly easy to attach and remove from armor. Click on the armor frame to attach it. This armor appears to be marked as a Ranger armor piece." greyscale_config = /datum/greyscale_config/armor_mk1/ranger -/obj/item/armor_module/armor/chest/marine/kabuto - name = "\improper Style Pattern Kabuto chestplates" - desc = "Designed for use with the Jaeger Combat Exoskeleton. It provides high protection and encumbrance when attached and is fairly easy to attach and remove from armor. Click on the armor frame to attach it. This armor appears to be marked as a Kabuto armor piece." - greyscale_config = /datum/greyscale_config/armor_mk1/kabuto - -/obj/item/armor_module/armor/chest/marine/hotaru - name = "\improper Style Pattern Hotaru chestplates" - desc = "Designed for use with the Jaeger Combat Exoskeleton. It provides high protection and encumbrance when attached and is fairly easy to attach and remove from armor. Click on the armor frame to attach it. This armor appears to be marked as a Hotaru armor piece." - greyscale_config = /datum/greyscale_config/armor_mk1/hotaru - -/obj/item/armor_module/armor/chest/marine/dashe - name = "\improper Style Pattern Dashe chestplates" - desc = "Designed for use with the Jaeger Combat Exoskeleton. It provides high protection and encumbrance when attached and is fairly easy to attach and remove from armor. Click on the armor frame to attach it. This armor appears to be marked as a Dashe armor piece." - greyscale_config = /datum/greyscale_config/armor_mk1/dashe - // Hardsuit Chest Plates /obj/item/armor_module/armor/chest/marine/hardsuit icon_state_variants = list( @@ -85,8 +70,6 @@ colorable_colors = ARMOR_PALETTES_LIST colorable_allowed = ICON_STATE_VARIANTS_ALLOWED|PRESET_COLORS_ALLOWED starting_attachments = list(/obj/item/armor_module/armor/secondary_color/chest/webbing) - attachments_allowed = list(/obj/item/armor_module/armor/secondary_color/chest/webbing) - attachments_by_slot = list(ATTACHMENT_SLOT_CHEST_SECONDARY_COLOR) /obj/item/armor_module/armor/chest/marine/hardsuit/syndicate_markfive name = "\improper FleckTex Mark V Breacher chestplates" diff --git a/code/modules/clothing/modular_armor/attachments/leg_plates.dm b/code/modules/clothing/modular_armor/attachments/leg_plates.dm index 55ea2e5cb4268..a4b968b53731b 100644 --- a/code/modules/clothing/modular_armor/attachments/leg_plates.dm +++ b/code/modules/clothing/modular_armor/attachments/leg_plates.dm @@ -54,21 +54,6 @@ desc = "Designed for use with the Jaeger Combat Exoskeleton. It provides high protection and encumbrance when attached and is fairly easy to attach and remove from armor. Click on the armor frame to attach it. All leg plates have the same armor and slowdown, meaning that only changing the chestplate makes significant armor difference. This armor appears to be marked as a Trooper armor piece." greyscale_config = /datum/greyscale_config/armor_mk1/trooper -/obj/item/armor_module/armor/legs/marine/kabuto - name = "\improper Style Pattern Kabuto leg plates" - desc = "Designed for use with the Jaeger Combat Exoskeleton. It provides high protection and encumbrance when attached and is fairly easy to attach and remove from armor. Click on the armor frame to attach it. All leg plates have the same armor and slowdown, meaning that only changing the chestplate makes significant armor difference. This armor appears to be marked as a Kabuto armor piece." - greyscale_config = /datum/greyscale_config/armor_mk1/kabuto - -/obj/item/armor_module/armor/legs/marine/hotaru - name = "\improper Style Pattern Hotaru leg plates" - desc = "Designed for use with the Jaeger Combat Exoskeleton. It provides high protection and encumbrance when attached and is fairly easy to attach and remove from armor. Click on the armor frame to attach it. All leg plates have the same armor and slowdown, meaning that only changing the chestplate makes significant armor difference. This armor appears to be marked as a Hotaru armor piece." - greyscale_config = /datum/greyscale_config/armor_mk1/hotaru - -/obj/item/armor_module/armor/legs/marine/dashe - name = "\improper Style Pattern Dashe leg plates" - desc = "Designed for use with the Jaeger Combat Exoskeleton. It provides high protection and encumbrance when attached and is fairly easy to attach and remove from armor. Click on the armor frame to attach it. This armor appears to be marked as a Dashe armor piece." - greyscale_config = /datum/greyscale_config/armor_mk1/dashe - // Hardsuit Leg Plates // Base Hardsuit Legs @@ -76,8 +61,6 @@ name = "\improper FleckTex Base leg plates" desc = "Designed for use with the FleckTex WY-01 Exoskeleton. It provides high protection and encumbrance when attached and is fairly easy to attach and remove from armor. Click on the armor frame to attach it. All arm plates have the same armor and slowdown, meaning that only changing the chestplate makes significant armor difference. This armor appears to be marked as a Base armor piece." starting_attachments = list(/obj/item/armor_module/armor/secondary_color/leg) - attachments_allowed = list(/obj/item/armor_module/armor/secondary_color/leg) - attachments_by_slot = list(ATTACHMENT_SLOT_KNEE_SECONDARY_COLOR) greyscale_config = /datum/greyscale_config/hardsuit_variant /obj/item/armor_module/armor/legs/marine/hardsuit_legs/syndicate_markfive diff --git a/code/modules/clothing/modular_armor/attachments/modules.dm b/code/modules/clothing/modular_armor/attachments/modules.dm index fbd769166a856..1b61df1a06603 100644 --- a/code/modules/clothing/modular_armor/attachments/modules.dm +++ b/code/modules/clothing/modular_armor/attachments/modules.dm @@ -18,6 +18,7 @@ icon_state = "pt_belt" item_state = "pt_belt_a" slot = ATTACHMENT_SLOT_BELT + attach_features_flags = ATTACH_NO_HANDS /** * Shoulder lamp strength module @@ -82,11 +83,11 @@ /obj/item/armor_module/module/fire_proof/on_attach(obj/item/attaching_to, mob/user) . = ..() parent.max_heat_protection_temperature += FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE - parent.flags_armor_features |= ARMOR_FIRE_RESISTANT + parent.armor_features_flags |= ARMOR_FIRE_RESISTANT /obj/item/armor_module/module/fire_proof/on_detach(obj/item/detaching_from, mob/user) parent.max_heat_protection_temperature -= FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE - parent.flags_armor_features &= ~ARMOR_FIRE_RESISTANT + parent.armor_features_flags &= ~ARMOR_FIRE_RESISTANT return ..() /obj/item/armor_module/module/fire_proof/som @@ -134,9 +135,7 @@ icon_state = "lorica_armor" item_state = "lorica_armor_a" attachment_layer = null - soft_armor = list(MELEE = 10, BULLET = 10, LASER = 15, ENERGY = 15, BOMB = 15, BIO = 5, FIRE = 10, ACID = 5) - slowdown = 0.2 - slot = ATTACHMENT_SLOT_MODULE + soft_armor = list(MELEE = 10, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 15, BIO = 5, FIRE = 10, ACID = 5) /obj/item/armor_module/module/tyr_head name = "Tyr Helmet System" @@ -270,6 +269,7 @@ parent.update_icon() /obj/item/armor_module/module/chemsystem/update_icon_state() + . = ..() if(chemsystem_is_active) icon_state = "mod_chemsystem_active" return @@ -330,12 +330,14 @@ return ..() ///Called to give extra info on parent examine. -/obj/item/armor_module/module/eshield/proc/parent_examine(datum/source, mob/examiner) +/obj/item/armor_module/module/eshield/proc/parent_examine(datum/source, mob/user, list/examine_list) SIGNAL_HANDLER - to_chat(examiner, span_notice("Recharge Rate: [recharge_rate/2] health per second\nCurrent Shield Health: [shield_health]\nMaximum Shield Health: [max_shield_health]\n")) + examine_list += span_notice("Recharge Rate: [recharge_rate/2] health per second") + examine_list += span_notice("Current Shield Health: [shield_health]") + examine_list += span_notice("Maximum Shield Health: [max_shield_health]") if(!recharge_timer) return - to_chat(examiner, span_warning("Charging is delayed! It will start recharging again in [timeleft(recharge_timer) / 10] seconds!")) + examine_list += span_warning("Charging is delayed! It will start recharging again in [timeleft(recharge_timer) / 10] seconds!") ///Handles starting the shield when the parent is equiped to the correct slot. /obj/item/armor_module/module/eshield/proc/handle_equip(datum/source, mob/equipper, slot) @@ -423,11 +425,25 @@ affected.remove_filter("eshield") affected.add_filter("eshield", 2, outline_filter(1, new_color)) +/obj/item/armor_module/module/eshield/overclocked + max_shield_health = 75 + damaged_shield_cooldown = 5 SECONDS + shield_color_low = COLOR_MAROON + shield_color_mid = LIGHT_COLOR_RED_ORANGE + shield_color_full = LIGHT_COLOR_ELECTRIC_CYAN + //original Martian design, donutsteel /obj/item/armor_module/module/eshield/som name = "Aegis Energy Dispersion Module" desc = "A sophisticated shielding unit, designed to disperse the energy of incoming impacts, rendering them harmless to the user. If it sustains too much it will deactivate, and leave the user vulnerable. It is unclear if this was a purely SOM designed module, or whether it was reverse engineered from the TGMC's 'Svalinn' shield system which was developed around the same time." +/obj/item/armor_module/module/eshield/som/overclocked + max_shield_health = 75 + damaged_shield_cooldown = 5 SECONDS + shield_color_low = COLOR_MAROON + shield_color_mid = LIGHT_COLOR_RED_ORANGE + shield_color_full = LIGHT_COLOR_ELECTRIC_CYAN + /obj/item/armor_module/module/style name = "\improper Armor Equalizer" desc = "Designed for mounting on conventional clothing, this grants it a level of reinforcement against attacks." @@ -475,7 +491,7 @@ icon_state = "welding_head" item_state = "welding_head_a" slot = ATTACHMENT_SLOT_HEAD_MODULE - flags_attach_features = ATTACH_REMOVABLE|ATTACH_ACTIVATION|ATTACH_APPLY_ON_MOB + attach_features_flags = ATTACH_REMOVABLE|ATTACH_ACTIVATION|ATTACH_APPLY_ON_MOB active = FALSE prefered_slot = SLOT_HEAD toggle_signal = COMSIG_KB_HELMETMODULE @@ -498,14 +514,14 @@ /obj/item/armor_module/module/welding/activate(mob/living/user) if(active) - DISABLE_BITFIELD(parent.flags_inventory, COVEREYES) - DISABLE_BITFIELD(parent.flags_inv_hide, HIDEEYES) - DISABLE_BITFIELD(parent.flags_armor_protection, EYES) + DISABLE_BITFIELD(parent.inventory_flags, COVEREYES) + DISABLE_BITFIELD(parent.inv_hide_flags, HIDEEYES) + DISABLE_BITFIELD(parent.armor_protection_flags, EYES) parent.eye_protection -= eye_protection_mod // reset to the users base eye else - ENABLE_BITFIELD(parent.flags_inventory, COVEREYES) - ENABLE_BITFIELD(parent.flags_inv_hide, HIDEEYES) - ENABLE_BITFIELD(parent.flags_armor_protection, EYES) + ENABLE_BITFIELD(parent.inventory_flags, COVEREYES) + ENABLE_BITFIELD(parent.inv_hide_flags, HIDEEYES) + ENABLE_BITFIELD(parent.armor_protection_flags, EYES) parent.eye_protection += eye_protection_mod active = !active @@ -522,7 +538,7 @@ icon = 'icons/mob/modular/modular_armor_modules.dmi' icon_state = "welding_head_som" item_state = "welding_head_som_a" - flags_attach_features = ATTACH_ACTIVATION|ATTACH_APPLY_ON_MOB + attach_features_flags = ATTACH_ACTIVATION|ATTACH_APPLY_ON_MOB /obj/item/armor_module/module/welding/superior name = "Superior Welding Helmet Module" @@ -531,7 +547,7 @@ icon_state = "welding_head" item_state = "welding_head_a" slot = ATTACHMENT_SLOT_HEAD_MODULE - flags_attach_features = ATTACH_REMOVABLE|ATTACH_ACTIVATION|ATTACH_APPLY_ON_MOB + attach_features_flags = ATTACH_REMOVABLE|ATTACH_ACTIVATION|ATTACH_APPLY_ON_MOB active = FALSE prefered_slot = SLOT_HEAD @@ -546,10 +562,10 @@ icon_state = "binocular_head" item_state = "binocular_head_a" active = FALSE - flags_item = DOES_NOT_NEED_HANDS + item_flags = DOES_NOT_NEED_HANDS zoom_tile_offset = 11 zoom_viewsize = 15 //RU TGMC EDIT - flags_attach_features = ATTACH_REMOVABLE|ATTACH_ACTIVATION|ATTACH_APPLY_ON_MOB + attach_features_flags = ATTACH_REMOVABLE|ATTACH_ACTIVATION|ATTACH_APPLY_ON_MOB slot = ATTACHMENT_SLOT_HEAD_MODULE prefered_slot = SLOT_HEAD toggle_signal = COMSIG_KB_HELMETMODULE @@ -593,57 +609,85 @@ icon_state = "artemis_head" item_state = "artemis_head_a" slot = ATTACHMENT_SLOT_HEAD_MODULE - flags_attach_features = ATTACH_REMOVABLE|ATTACH_APPLY_ON_MOB + attach_features_flags = ATTACH_REMOVABLE|ATTACH_APPLY_ON_MOB prefered_slot = SLOT_HEAD /obj/item/armor_module/module/artemis/on_attach(obj/item/attaching_to, mob/user) . = ..() parent.AddComponent(/datum/component/blur_protection) +#define COMMS_OFF 0 +#define COMMS_SETTING 1 +#define COMMS_SETUP 2 + /obj/item/armor_module/module/antenna name = "Antenna helmet module" - desc = "Designed for mounting on a modular Helmet. This module is able to provide a readout of the user's coordinates and connect to the shipside supply console." + desc = "Designed for mounting on a modular Helmet. This module is able to shield against the interference of caves, allowing for normal messaging in shallow caves, and only minor interference when deep." icon = 'icons/mob/modular/modular_armor_modules.dmi' icon_state = "antenna_head" item_state = "antenna_head_a" - flags_attach_features = ATTACH_REMOVABLE|ATTACH_ACTIVATION|ATTACH_APPLY_ON_MOB + attach_features_flags = ATTACH_REMOVABLE|ATTACH_ACTIVATION|ATTACH_APPLY_ON_MOB slot = ATTACHMENT_SLOT_HEAD_MODULE prefered_slot = SLOT_HEAD toggle_signal = COMSIG_KB_HELMETMODULE - /// Reference to the datum used by the supply drop console - var/datum/supply_beacon/beacon_datum - -/obj/item/armor_module/module/antenna/Destroy() - if(beacon_datum) - UnregisterSignal(beacon_datum, COMSIG_QDELETING) - QDEL_NULL(beacon_datum) + ///If the comms system is configured. + var/comms_setup = FALSE + ///ID of the startup timer + var/startup_timer_id + +/obj/item/armor_module/module/antenna/handle_actions(datum/source, mob/user, slot) + if(slot != prefered_slot) + UnregisterSignal(user, COMSIG_CAVE_INTERFERENCE_CHECK) + comms_setup = COMMS_OFF + if(startup_timer_id) + deltimer(startup_timer_id) + startup_timer_id = null + else + RegisterSignal(user, COMSIG_CAVE_INTERFERENCE_CHECK, PROC_REF(on_interference_check)) + start_sync(user) return ..() +///Handles interacting with caves checking for if anything is reducing (or increasing) interference. +/obj/item/armor_module/module/antenna/proc/on_interference_check(source, list/inplace_interference) + SIGNAL_HANDLER + if(comms_setup != COMMS_SETUP) + return + inplace_interference[1] = max(0, inplace_interference[1] - 1) + /obj/item/armor_module/module/antenna/activate(mob/living/user) - var/turf/location = get_turf(src) - if(beacon_datum) - UnregisterSignal(beacon_datum, COMSIG_QDELETING) - QDEL_NULL(beacon_datum) - user.show_message(span_warning("The [src] beeps and states, \"Your last position is no longer accessible by the supply console"), EMOTE_AUDIBLE, span_notice("The [src] vibrates but you can not hear it!")) + if(comms_setup == COMMS_SETTING) + to_chat(user, span_notice("Your Antenna module is still in the process of starting up!")) return - if(!is_ground_level(user.z)) - to_chat(user, span_warning("You have to be on the planet to use this or it won't transmit.")) - return FALSE - beacon_datum = new /datum/supply_beacon(user.name, user.loc, user.faction, 4 MINUTES) - RegisterSignal(beacon_datum, COMSIG_QDELETING, PROC_REF(clean_beacon_datum)) - user.show_message(span_notice("The [src] beeps and states, \"Your current coordinates were registered by the supply console. LONGITUDE [location.x]. LATITUDE [location.y]. Area ID: [get_area(src)]\""), EMOTE_AUDIBLE, span_notice("The [src] vibrates but you can not hear it!")) - -/// Signal handler to nullify beacon datum -/obj/item/armor_module/module/antenna/proc/clean_beacon_datum() - SIGNAL_HANDLER - beacon_datum = null + if(comms_setup == COMMS_SETUP) + var/turf/location = get_turf(user) + user.show_message(span_notice("The [src] beeps and states, \"Uplink data: LONGITUDE [location.x]. LATITUDE [location.y]. Area ID: [get_area(src)]\""), EMOTE_AUDIBLE, span_notice("The [src] vibrates but you can not hear it!")) + return + +///Begins the startup sequence. +/obj/item/armor_module/module/antenna/proc/start_sync(mob/living/user) + if(comms_setup != COMMS_OFF) //Guh? + return + to_chat(user, span_notice("Setting up Antenna communication relay. Please wait.")) + comms_setup = COMMS_SETTING + startup_timer_id = addtimer(CALLBACK(src, PROC_REF(finish_startup), user), ANTENNA_SYNCING_TIME, TIMER_STOPPABLE) + +///Finishes startup, rendering the module effective. +/obj/item/armor_module/module/antenna/proc/finish_startup(mob/living/user) + comms_setup = COMMS_SETUP + user.show_message(span_notice("[src] beeps twice and states: \"Antenna configuration complete. Relay system active.\""), EMOTE_AUDIBLE, span_notice("[src] vibrates twice.")) + startup_timer_id = null + + +#undef COMMS_OFF +#undef COMMS_SETTING +#undef COMMS_SETUP /obj/item/armor_module/module/night_vision name = "\improper BE-35 night vision kit" desc = "Installation kit for the BE-35 night vision system. Slightly impedes movement." icon = 'icons/mob/modular/modular_armor_modules.dmi' icon_state = "night_vision" - flags_attach_features = ATTACH_REMOVABLE|ATTACH_NO_HANDS + attach_features_flags = ATTACH_REMOVABLE|ATTACH_NO_HANDS slot = ATTACHMENT_SLOT_HEAD_MODULE prefered_slot = SLOT_HEAD slowdown = 0.1 diff --git a/code/modules/clothing/modular_armor/attachments/secondary_color.dm b/code/modules/clothing/modular_armor/attachments/secondary_color.dm index 9504129c43f6b..d35d4f411bd1d 100644 --- a/code/modules/clothing/modular_armor/attachments/secondary_color.dm +++ b/code/modules/clothing/modular_armor/attachments/secondary_color.dm @@ -1,9 +1,9 @@ //A module you can use to add yet another color layer to your modular armor sets. icon name format is [prefix]_[bodypart]_secondary_color_[variant] , exclude _variant if you do not use it /obj/item/armor_module/armor/secondary_color - flags_attach_features = ATTACH_SAME_ICON|ATTACH_APPLY_ON_MOB + attach_features_flags = ATTACH_SAME_ICON|ATTACH_APPLY_ON_MOB|ATTACH_BYPASS_ALLOWED_LIST|ATTACH_GREYSCALE_PARENT_COPY secondary_color = TRUE - flags_item_map_variant = NONE + item_map_variant_flags = NONE /obj/item/armor_module/armor/secondary_color/update_greyscale() if(!parent) @@ -12,14 +12,24 @@ /obj/item/armor_module/armor/secondary_color/on_attach(obj/item/attaching_to, mob/user) . = ..() + if(!attaching_to) + return + RegisterSignal(attaching_to, COMSIG_ITEM_VARIANT_CHANGE, PROC_REF(on_variant_change)) + if(greyscale_config) + return greyscale_config = attaching_to.greyscale_config name = "[attaching_to.name] secondary color" update_icon() update_greyscale() - RegisterSignal(attaching_to, COMSIG_ITEM_VARIANT_CHANGE, PROC_REF(on_variant_change)) -/obj/item/armor_module/armor/secondary_color/proc/on_variant_change(mob/user, variant) +/obj/item/armor_module/armor/secondary_color/on_detach(obj/item/detaching_from, mob/user) + . = ..() + if(!detaching_from) + return + UnregisterSignal(detaching_from, COMSIG_ITEM_VARIANT_CHANGE) + +/obj/item/armor_module/armor/secondary_color/proc/on_variant_change(obj/item/parent, mob/user, variant) SIGNAL_HANDLER if(variant in icon_state_variants) current_variant = variant @@ -27,7 +37,7 @@ update_greyscale() /obj/item/armor_module/armor/secondary_color/chest - name = "chest secondary_color" + name = "chest secondary color" icon_state = "chest_secondary_color" slot = ATTACHMENT_SLOT_CHEST_SECONDARY_COLOR @@ -40,16 +50,16 @@ ) /obj/item/armor_module/armor/secondary_color/leg - name = "leg secondary_color" + name = "leg secondary color" icon_state = "leg_secondary_color" slot = ATTACHMENT_SLOT_KNEE_SECONDARY_COLOR /obj/item/armor_module/armor/secondary_color/arm - name = "arm secondary_color" + name = "arm secondary color" icon_state = "arm_secondary_color" slot = ATTACHMENT_SLOT_ARM_SECONDARY_COLOR /obj/item/armor_module/armor/secondary_color/helm - name = "helm secondary_color" + name = "helm secondary color" icon_state = "helm_secondary_color" slot = ATTACHMENT_SLOT_HELM_SECONDARY_COLOR diff --git a/code/modules/clothing/modular_armor/attachments/storage.dm b/code/modules/clothing/modular_armor/attachments/storage.dm index 65003ad088982..f86f5dbc350e4 100644 --- a/code/modules/clothing/modular_armor/attachments/storage.dm +++ b/code/modules/clothing/modular_armor/attachments/storage.dm @@ -115,7 +115,7 @@ /obj/item/armor_module/storage/pocket icon_state = "" item_state = "" - flags_attach_features = ATTACH_APPLY_ON_MOB + attach_features_flags = ATTACH_APPLY_ON_MOB storage = /obj/item/storage/internal/pocket /obj/item/storage/internal/pocket @@ -131,6 +131,7 @@ /obj/item/ammo_magazine/sniper, /obj/item/ammo_magazine/handful, ) + cant_hold = list(/obj/item/cell/lasgun/volkite/powerpack) /obj/item/storage/internal/pocket/insertion_message(obj/item/item, mob/user) var/visidist = item.w_class >= WEIGHT_CLASS_NORMAL ? 3 : 1 @@ -183,7 +184,9 @@ /obj/item/ammo_magazine/revolver, /obj/item/ammo_magazine/sniper, /obj/item/ammo_magazine/handful, + /obj/item/cell/lasgun/plasma, ) + cant_hold = list(/obj/item/cell/lasgun/volkite/powerpack) /obj/item/armor_module/storage/general/som name = "General Purpose Storage module" @@ -269,7 +272,7 @@ /obj/item/tool/multitool, /obj/item/binoculars/tactical/range, /obj/item/explosive/plastique, - /obj/item/explosive/grenade/chem_grenade/razorburn_smol, + /obj/item/explosive/grenade/chem_grenade/razorburn_small, /obj/item/explosive/grenade/chem_grenade/razorburn_large, /obj/item/cell/apc, /obj/item/cell/high, @@ -388,7 +391,7 @@ desc = "A small set of straps to hold something in your boot." icon_state = "" storage = /obj/item/storage/internal/shoes/boot_knife - flags_attach_features = ATTACH_APPLY_ON_MOB + attach_features_flags = ATTACH_APPLY_ON_MOB /obj/item/storage/internal/shoes/boot_knife max_storage_space = 3 @@ -421,7 +424,7 @@ icon_state = "" storage = /obj/item/storage/internal/marinehelmet show_storage = TRUE - flags_attach_features = NONE + attach_features_flags = NONE /obj/item/storage/internal/marinehelmet max_storage_space = 3 diff --git a/code/modules/clothing/modular_armor/attachments/uniform.dm b/code/modules/clothing/modular_armor/attachments/uniform.dm index fa800cf2b8add..acbc24eb3a08b 100644 --- a/code/modules/clothing/modular_armor/attachments/uniform.dm +++ b/code/modules/clothing/modular_armor/attachments/uniform.dm @@ -3,7 +3,7 @@ /obj/item/armor_module/storage/uniform slot = ATTACHMENT_SLOT_UNIFORM w_class = WEIGHT_CLASS_BULKY - flags_attach_features = ATTACH_REMOVABLE|ATTACH_APPLY_ON_MOB|ATTACH_SEPERATE_MOB_OVERLAY|ATTACH_NO_HANDS + attach_features_flags = ATTACH_REMOVABLE|ATTACH_APPLY_ON_MOB|ATTACH_SEPERATE_MOB_OVERLAY|ATTACH_NO_HANDS icon = 'icons/obj/clothing/ties.dmi' attach_icon = 'icons/obj/clothing/ties_overlay.dmi' mob_overlay_icon = 'icons/mob/ties.dmi' diff --git a/code/modules/clothing/modular_armor/attachments/visors.dm b/code/modules/clothing/modular_armor/attachments/visors.dm index 303764d46124f..6e4c502be38a7 100644 --- a/code/modules/clothing/modular_armor/attachments/visors.dm +++ b/code/modules/clothing/modular_armor/attachments/visors.dm @@ -8,12 +8,12 @@ name = "standard visor" icon_state = "visor" slot = ATTACHMENT_SLOT_VISOR - flags_attach_features = ATTACH_SAME_ICON|ATTACH_APPLY_ON_MOB + attach_features_flags = ATTACH_SAME_ICON|ATTACH_APPLY_ON_MOB greyscale_config = /datum/greyscale_config/visors greyscale_colors = VISOR_PALETTE_GOLD colorable_colors = VISOR_PALETTES_LIST secondary_color = TRUE - flags_item_map_variant = NONE + item_map_variant_flags = NONE ///whether this helmet should be using its emissive overlay or not var/visor_emissive_on = TRUE @@ -92,21 +92,6 @@ icon_state = "trooper_visor" colorable_allowed = COLOR_WHEEL_ALLOWED|PRESET_COLORS_ALLOWED -/obj/item/armor_module/armor/visor/marine/kabuto - name = "\improper Style Pattern Kabuto visor" - desc = "The visor attachment of the Jaeger modular helmets. This one is designed for the Kabuto class of helmet." - icon_state = "kabuto_visor" - -/obj/item/armor_module/armor/visor/marine/hotaru - name = "\improper Style Pattern Hotaru visor" - desc = "The visor attachment of the Jaeger modular helmets. This one is designed for the Hotaru class of helmet." - icon_state = "hotaru_visor" - -/obj/item/armor_module/armor/visor/marine/dashe - name = "\improper Style Pattern Dashe visor" - desc = "The visor attachment of the Jaeger modular helmets. This one is designed for the Dashe class of helmet." - icon_state = "dashe_visor" - /obj/item/armor_module/armor/visor/marine/eva name = "\improper Jaeger Pattern EVA visor" desc = "The visor attachment of the Jaeger modular helmets. This one is designed for the EVA class of helmet." diff --git a/code/modules/clothing/modular_armor/combat_robot.dm b/code/modules/clothing/modular_armor/combat_robot.dm index fdba31604e71a..30925cfba730b 100644 --- a/code/modules/clothing/modular_armor/combat_robot.dm +++ b/code/modules/clothing/modular_armor/combat_robot.dm @@ -39,7 +39,7 @@ allowed_uniform_type = /obj/item/clothing/under/marine/robotic - flags_item_map_variant = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_DESERT_VARIANT + item_map_variant_flags = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_DESERT_VARIANT /obj/item/clothing/suit/modular/robot/mob_can_equip(mob/user, slot, warning = TRUE, override_nodrop = FALSE, bitslot = FALSE) . = ..() @@ -78,13 +78,13 @@ name = "XN-1 upper armor plating" desc = "Medium armor plating designed for self mounting on the upper half of TerraGov combat robotics. It has self-sealing bolts for mounting on robotic owners inside." item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', ) icon_state = "helmet" item_state = "helmet" species_exception = list(/datum/species/robot) - flags_item_map_variant = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_PRISON_VARIANT) + item_map_variant_flags = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_PRISON_VARIANT) soft_armor = list(MELEE = 50, BULLET = 70, LASER = 70, ENERGY = 60, BOMB = 55, BIO = 55, FIRE = 55, ACID = 60) colorable_colors = ARMOR_PALETTES_LIST @@ -111,7 +111,7 @@ //RUTGMC EDIT ADDITION END ) starting_attachments = list(/obj/item/armor_module/storage/helmet, /obj/item/armor_module/armor/visor/marine/robot) - flags_item_map_variant = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_DESERT_VARIANT + item_map_variant_flags = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_DESERT_VARIANT /obj/item/clothing/head/modular/robot/mob_can_equip(mob/user, slot, warning = TRUE, override_nodrop = FALSE, bitslot = FALSE) diff --git a/code/modules/clothing/modular_armor/jaeger.dm b/code/modules/clothing/modular_armor/jaeger.dm index b65584f73c26d..809c40359f85d 100644 --- a/code/modules/clothing/modular_armor/jaeger.dm +++ b/code/modules/clothing/modular_armor/jaeger.dm @@ -35,7 +35,7 @@ /obj/item/armor_module/armor/badge, ) - flags_item_map_variant = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_DESERT_VARIANT + item_map_variant_flags = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_DESERT_VARIANT greyscale_config = /datum/greyscale_config/armor_mk2/infantry colorable_allowed = PRESET_COLORS_ALLOWED @@ -60,11 +60,6 @@ desc = "A Ranger-pattern Jaeger combat exoskeleton made to work with modular attachments for the ability to function in many enviroments. This one seems to have a moderate amount of armor plating. Alt-Click to remove attached items. Use it to toggle the built-in flashlight." greyscale_config = /datum/greyscale_config/armor_mk2/ranger -/obj/item/clothing/suit/modular/jaeger/hotaru - name = "\improper Style Pattern Hotaru medium exoskeleton" - desc = "A Ranger-pattern Hotaru combat exoskeleton made to work with modular attachments for the ability to function in many enviroments. This one seems to have a moderate amount of armor plating. Alt-Click to remove attached items. Use it to toggle the built-in flashlight." - greyscale_config = /datum/greyscale_config/armor_mk2/hotaru - // Light /obj/item/clothing/suit/modular/jaeger/light @@ -107,8 +102,8 @@ name = "Jaeger Pattern Infantry Helmet" desc = "Usually paired with the Jaeger Combat Exoskeleton. Can mount utility functions on the helmet hard points. Has Infantry markings." item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', ) icon_state = "helmet" item_state = "helmet" @@ -148,13 +143,9 @@ /obj/item/armor_module/armor/visor/marine/ranger, /obj/item/armor_module/armor/visor/marine/traditional, /obj/item/armor_module/armor/visor/marine/trooper, - /obj/item/armor_module/armor/visor/marine/kabuto, - /obj/item/armor_module/armor/visor/marine/hotaru, - /obj/item/armor_module/armor/visor/marine/dashe, /obj/item/armor_module/armor/visor/marine/fourvisor, /obj/item/armor_module/armor/visor/marine/foureyevisor, /obj/item/armor_module/armor/visor/marine/markonevisor, - /obj/item/armor_module/armor/secondary_color/helm, //RUTGMC EDIT ADDITION BEGIN - MOTION_DETECTOR /obj/item/armor_module/module/motion_detector, //RUTGMC EDIT ADDITION END @@ -162,7 +153,7 @@ starting_attachments = list(/obj/item/armor_module/armor/visor/marine, /obj/item/armor_module/storage/helmet) - flags_item_map_variant = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_DESERT_VARIANT + item_map_variant_flags = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_DESERT_VARIANT /obj/item/clothing/head/modular/marine/eva name = "Jaeger Pattern EVA Helmet" @@ -229,24 +220,6 @@ starting_attachments = list(/obj/item/armor_module/armor/visor/marine/trooper, /obj/item/armor_module/storage/helmet) greyscale_config = /datum/greyscale_config/armor_mk2/trooper -/obj/item/clothing/head/modular/marine/kabuto - name = "Style Pattern Kabuto Helmet" - desc = "Usually paired with the Jaeger Combat Exoskeleton. Can mount utility functions on the helmet hard points. Has Kabuto markings" - starting_attachments = list(/obj/item/armor_module/armor/visor/marine/kabuto, /obj/item/armor_module/storage/helmet) - greyscale_config = /datum/greyscale_config/armor_mk1/kabuto - -/obj/item/clothing/head/modular/marine/hotaru - name = "Style Pattern Hotaru Helmet" - desc = "Usually paired with the Jaeger Combat Exoskeleton. Can mount utility functions on the helmet hard points. Has Hotaru markings" - starting_attachments = list(/obj/item/armor_module/armor/visor/marine/hotaru, /obj/item/armor_module/storage/helmet) - greyscale_config = /datum/greyscale_config/armor_mk1/hotaru - -/obj/item/clothing/head/modular/marine/dashe - name = "Style Pattern Dashe Helmet" - desc = "Usually paired with the Jaeger Combat Exoskeleton. Can mount utility functions on the helmet hard points. Has Dashe markings" - starting_attachments = list(/obj/item/armor_module/armor/visor/marine/dashe, /obj/item/armor_module/storage/helmet) - greyscale_config = /datum/greyscale_config/armor_mk1/dashe - // Hardsuit Helmets /obj/item/clothing/head/modular/marine/hardsuit_helm @@ -254,13 +227,6 @@ desc = "Usually paired with the FleckTex WY-01 modular exoskeleton. Can mount utility functions on the helmet hard points. Has Base markings" greyscale_config = /datum/greyscale_config/hardsuit_variant starting_attachments = list(/obj/item/armor_module/armor/visor/marine, /obj/item/armor_module/storage/helmet, /obj/item/armor_module/armor/secondary_color/helm) - attachments_by_slot = list( - ATTACHMENT_SLOT_VISOR, - ATTACHMENT_SLOT_STORAGE, - ATTACHMENT_SLOT_HEAD_MODULE, - ATTACHMENT_SLOT_BADGE, - ATTACHMENT_SLOT_HELM_SECONDARY_COLOR, - ) /obj/item/clothing/head/modular/marine/hardsuit_helm/markfive name = "FleckTex Mark V Breacher Helmet" diff --git a/code/modules/clothing/modular_armor/mark_one.dm b/code/modules/clothing/modular_armor/mark_one.dm index b3d1519922c8b..4b992a5f9455a 100644 --- a/code/modules/clothing/modular_armor/mark_one.dm +++ b/code/modules/clothing/modular_armor/mark_one.dm @@ -5,8 +5,8 @@ icon_state = "helmet" item_state = "helmet" item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', ) attachments_allowed = list( diff --git a/code/modules/clothing/modular_armor/modular.dm b/code/modules/clothing/modular_armor/modular.dm index 3249f84d45137..5547a63b6fa63 100644 --- a/code/modules/clothing/modular_armor/modular.dm +++ b/code/modules/clothing/modular_armor/modular.dm @@ -18,9 +18,9 @@ item_state_worn = TRUE item_icons = list(slot_wear_suit_str = 'icons/mob/modular/modular_armor.dmi') - flags_atom = CONDUCT - flags_armor_protection = CHEST|GROIN|ARMS|LEGS|FEET|HANDS - flags_item = SYNTH_RESTRICTED|IMPEDE_JETPACK + atom_flags = CONDUCT + armor_protection_flags = CHEST|GROIN|ARMS|LEGS|FEET|HANDS + item_flags = SYNTH_RESTRICTED|IMPEDE_JETPACK /// What is allowed to be equipped in suit storage allowed = list( /obj/item/weapon/gun, @@ -38,7 +38,7 @@ /obj/item/tool/shovel/etool, /obj/item/weapon/energy/sword, ) - flags_equip_slot = ITEM_SLOT_OCLOTHING + equip_slot_flags = ITEM_SLOT_OCLOTHING w_class = WEIGHT_CLASS_BULKY equip_delay_self = 2 SECONDS unequip_delay_self = 1 SECONDS @@ -96,17 +96,6 @@ /obj/item/armor_module/armor/legs/marine/ranger, /obj/item/armor_module/armor/arms/marine/ranger, - /obj/item/armor_module/armor/chest/marine/kabuto, - /obj/item/armor_module/armor/legs/marine/kabuto, - /obj/item/armor_module/armor/arms/marine/kabuto, - - /obj/item/armor_module/armor/chest/marine/hotaru, - /obj/item/armor_module/armor/legs/marine/hotaru, - /obj/item/armor_module/armor/arms/marine/hotaru, - - /obj/item/armor_module/armor/chest/marine/dashe, - /obj/item/armor_module/armor/arms/marine/dashe, - /obj/item/armor_module/armor/legs/marine/dashe, /obj/item/armor_module/module/better_shoulder_lamp, /obj/item/armor_module/module/valkyrie_autodoc, @@ -159,7 +148,6 @@ return FALSE return ..() - /obj/item/clothing/suit/modular/attack_self(mob/user) . = ..() if(.) @@ -172,8 +160,8 @@ var/mob/living/carbon/human/H = user if(H.wear_suit != src) return - turn_light(user, !light_on) - return TRUE + if(turn_light(user, !light_on) == CHECKS_PASSED) + return TRUE /obj/item/clothing/suit/modular/item_action_slot_check(mob/user, slot) if(!light_range) // No light no ability @@ -201,6 +189,24 @@ if(attachments_by_slot[ATTACHMENT_SLOT_STORAGE]) . += "
    It has a [attachments_by_slot[ATTACHMENT_SLOT_STORAGE]] installed." +/obj/item/clothing/suit/modular/examine(mob/user) + . = ..() + var/armor_info + var/obj/item/clothing/suit/modular/wear_modular_suit = src + if(wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_CHESTPLATE]) + armor_info += " - [wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_CHESTPLATE]].\n" + if(wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_SHOULDER]) + armor_info += " - [wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_SHOULDER]].\n" + if(wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_KNEE]) + armor_info += " - [wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_KNEE]].\n" + if(wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_STORAGE]) + armor_info += " - [wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_STORAGE]].\n" + if(wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_MODULE]) + armor_info += " - [wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_MODULE]].\n" + if(armor_info) + . += " It has the following attachments:" + . += armor_info + /obj/item/clothing/suit/modular/rownin name = "\improper Rownin Skeleton" desc = "A light armor, if you can even call it that, for marines that want to have agility in exchange for protection. Alt-Click to remove attached items. Use it to toggle the built-in flashlight." @@ -293,12 +299,12 @@ greyscale_config = /datum/greyscale_config/armor_mk1 greyscale_colors = ARMOR_PALETTE_DESERT - flags_armor_protection = HEAD - flags_armor_features = ARMOR_NO_DECAP - flags_inventory = BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS|HIDE_EXCESS_HAIR + armor_protection_flags = HEAD + armor_features_flags = ARMOR_NO_DECAP + inventory_flags = BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS|HIDE_EXCESS_HAIR allowed = null - flags_equip_slot = ITEM_SLOT_HEAD + equip_slot_flags = ITEM_SLOT_HEAD w_class = WEIGHT_CLASS_NORMAL soft_armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 15, BIO = 15, FIRE = 15, ACID = 15) @@ -369,12 +375,21 @@ . += "

    This is a piece of modular armor, It can equip different attachments.
    " . += "
    It currently has [attachments_by_slot[ATTACHMENT_SLOT_HEAD_MODULE] ? attachments_by_slot[ATTACHMENT_SLOT_HEAD_MODULE] : "nothing"] installed." +/obj/item/clothing/head/modular/examine(mob/user) + . = ..() + var/armor_info + var/obj/item/clothing/head/modular/wear_modular_suit = src + if(wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_HEAD_MODULE]) + armor_info += " - [wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_HEAD_MODULE]].\n" + if(armor_info) + . += " It has the following attachments:" + . += armor_info + /** Colorable masks */ /obj/item/clothing/mask/gas/modular name = "style mask" desc = "A cool sylish mask that through some arcane magic blocks gas attacks. How? Who knows. How did you even get this?" breathy = FALSE - voice_filter = null icon_state = "gas_alt" item_state = "gas_alt" item_icons = list(slot_wear_mask_str) diff --git a/code/modules/clothing/modular_armor/som.dm b/code/modules/clothing/modular_armor/som.dm index 180ef33deb370..0f22e8547de02 100644 --- a/code/modules/clothing/modular_armor/som.dm +++ b/code/modules/clothing/modular_armor/som.dm @@ -3,7 +3,7 @@ /obj/item/clothing/suit/modular/som name = "\improper SOM light battle armor" desc = "The M-21 battle armor is typically used by SOM light infantry, or other specialists that require more mobility at the cost of some protection. Provides good protection without minor impairment to the users mobility. Alt-Click to remove attached items. Use it to toggle the built-in flashlight." - soft_armor = list(MELEE = 45, BULLET = 70, LASER = 60, ENERGY = 60, BOMB = 50, BIO = 50, FIRE = 55, ACID = 50) + soft_armor = list(MELEE = 45, BULLET = 65, LASER = 60, ENERGY = 60, BOMB = 50, BIO = 50, FIRE = 55, ACID = 50) icon = 'icons/mob/modular/som_armor.dmi' item_icons = list( slot_wear_suit_str = 'icons/mob/modular/som_armor.dmi', @@ -22,6 +22,7 @@ /obj/item/armor_module/module/mimir_environment_protection/som, /obj/item/armor_module/module/hlin_explosive_armor, /obj/item/armor_module/module/eshield/som, + /obj/item/armor_module/module/eshield/som/overclocked, /obj/item/armor_module/storage/general, /obj/item/armor_module/storage/ammo_mag, /obj/item/armor_module/storage/engineering, @@ -60,10 +61,28 @@ /obj/item/armor_module/storage/medical/som, ) +/obj/item/clothing/suit/modular/som/shield_overclocked + starting_attachments = list( + /obj/item/armor_module/module/eshield/som/overclocked, + /obj/item/armor_module/storage/medical/som, + ) + +/obj/item/clothing/suit/modular/som/shield_overclocked/medic + starting_attachments = list( + /obj/item/armor_module/module/eshield/som/overclocked, + /obj/item/armor_module/storage/general/som, + ) + +/obj/item/clothing/suit/modular/som/shield_overclocked/engineer + starting_attachments = list( + /obj/item/armor_module/module/eshield/som/overclocked, + /obj/item/armor_module/storage/engineering, + ) + /obj/item/clothing/suit/modular/som/light name = "\improper SOM scout armor" desc = "The M-11 scout armor is a lightweight suit that that allows for minimal encumberance while still providing reasonable protection. Often seen on scouts or other specialist units that aren't normally getting shot at. Alt-Click to remove attached items. Use it to toggle the built-in flashlight." - soft_armor = list(MELEE = 35, BULLET = 60, LASER = 50, ENERGY = 50, BOMB = 45, BIO = 45, FIRE = 50, ACID = 40) + soft_armor = list(MELEE = 35, BULLET = 55, LASER = 50, ENERGY = 50, BOMB = 45, BIO = 45, FIRE = 50, ACID = 40) icon_state = "som_light" item_state = "som_light" slowdown = SLOWDOWN_ARMOR_LIGHT @@ -74,11 +93,41 @@ /obj/item/armor_module/storage/medical/som, ) +/obj/item/clothing/suit/modular/som/light/shield_overclocked + starting_attachments = list( + /obj/item/armor_module/module/eshield/som/overclocked, + /obj/item/armor_module/storage/medical/som, + ) + +/obj/item/clothing/suit/modular/som/light/shield_overclocked/medic + starting_attachments = list( + /obj/item/armor_module/module/eshield/som/overclocked, + /obj/item/armor_module/storage/general/som, + ) + +/obj/item/clothing/suit/modular/som/light/shield_overclocked/engineer + starting_attachments = list( + /obj/item/armor_module/module/eshield/som/overclocked, + /obj/item/armor_module/storage/engineering, + ) + +/obj/item/clothing/suit/modular/som/light/engineer + starting_attachments = list( + /obj/item/armor_module/module/better_shoulder_lamp, + /obj/item/armor_module/storage/engineering, + ) + +/obj/item/clothing/suit/modular/som/light/medic + starting_attachments = list( + /obj/item/armor_module/module/better_shoulder_lamp, + /obj/item/armor_module/storage/general/som, + ) + /obj/item/clothing/suit/modular/som/heavy name = "\improper SOM heavy battle armor" desc = "A standard suit of M-31 heavy duty combat armor worn by SOM shock troops. Provides excellent protection however it does reduce mobility somewhat. Alt-Click to remove attached items. Use it to toggle the built-in flashlight." - soft_armor = list(MELEE = 50, BULLET = 75, LASER = 65, ENERGY = 65, BOMB = 55, BIO = 55, FIRE = 60, ACID = 55) + soft_armor = list(MELEE = 50, BULLET = 70, LASER = 65, ENERGY = 65, BOMB = 55, BIO = 55, FIRE = 60, ACID = 55) icon_state = "som_heavy" item_state = "som_heavy" slowdown = SLOWDOWN_ARMOR_HEAVY @@ -107,10 +156,16 @@ /obj/item/armor_module/storage/medical/som, ) +/obj/item/clothing/suit/modular/som/heavy/shield_overclocked + starting_attachments = list( + /obj/item/armor_module/module/eshield/som/overclocked, + /obj/item/armor_module/storage/medical/som, + ) + /obj/item/clothing/suit/modular/som/heavy/leader name = "\improper SOM Gorgon pattern assault armor" desc = "A bulky suit of heavy combat armor, the M-35 'Gorgon' armor provides the user with superior protection without severely impacting mobility. Typically seen on SOM leaders or their most elite combat units due to the significant construction and maintenance requirements. You'll need serious firepower to punch through this. Alt-Click to remove attached items. Use it to toggle the built-in flashlight." - soft_armor = list(MELEE = 60, BULLET = 80, LASER = 70, ENERGY = 70, BOMB = 60, BIO = 55, FIRE = 65, ACID = 55) + soft_armor = list(MELEE = 60, BULLET = 75, LASER = 70, ENERGY = 70, BOMB = 60, BIO = 55, FIRE = 65, ACID = 55) icon_state = "som_leader" item_state = "som_leader" @@ -124,6 +179,7 @@ /obj/item/armor_module/module/mimir_environment_protection/som, /obj/item/armor_module/module/hlin_explosive_armor, /obj/item/armor_module/module/eshield/som, + /obj/item/armor_module/module/eshield/som/overclocked, /obj/item/armor_module/storage/general, /obj/item/armor_module/storage/ammo_mag, /obj/item/armor_module/storage/engineering, @@ -165,9 +221,9 @@ ) icon_state = "som_helmet" item_state = "som_helmet" - soft_armor = list(MELEE = 45, BULLET = 70, LASER = 60, ENERGY = 60, BOMB = 50, BIO = 50, FIRE = 55, ACID = 50) - flags_inv_hide = HIDEEARS|HIDEALLHAIR - flags_armor_protection = HEAD|FACE|EYES + soft_armor = list(MELEE = 45, BULLET = 65, LASER = 60, ENERGY = 60, BOMB = 50, BIO = 50, FIRE = 55, ACID = 50) + inv_hide_flags = HIDEEARS|HIDEALLHAIR + armor_protection_flags = HEAD|FACE|EYES attachments_allowed = list( /obj/item/armor_module/module/binoculars, /obj/item/armor_module/module/binoculars/artemis_mark_two, @@ -201,7 +257,7 @@ desc = "This specialised helmet is worn by SOM personel equipped to deal with dangerous chemical, radiological or otherwise hazard substances. Typical unleashed by the SOM themselves." icon_state = "som_helmet_bio" item_state = "som_helmet_bio" - soft_armor = list(MELEE = 45, BULLET = 70, LASER = 60, ENERGY = 60, BOMB = 50, BIO = 75, FIRE = 50, ACID = 70) + soft_armor = list(MELEE = 45, BULLET = 65, LASER = 60, ENERGY = 60, BOMB = 50, BIO = 75, FIRE = 50, ACID = 70) siemens_coefficient = 0.1 permeability_coefficient = 0 gas_transfer_coefficient = 0.1 @@ -215,7 +271,7 @@ desc = "A helmet paired with the 'Hades' armor module, designed for significantly improved protection from fire, without compromising normal durability." icon_state = "som_helmet_light" item_state = "som_helmet_light" - soft_armor = list(MELEE = 45, BULLET = 70, LASER = 60, ENERGY = 60, BOMB = 50, BIO = 50, FIRE = 90, ACID = 50) + soft_armor = list(MELEE = 45, BULLET = 65, LASER = 60, ENERGY = 60, BOMB = 50, BIO = 50, FIRE = 90, ACID = 50) attachments_allowed = list( /obj/item/armor_module/storage/helmet, /obj/item/armor_module/armor/badge, @@ -224,14 +280,14 @@ /obj/item/clothing/head/modular/som/veteran name = "\improper SOM veteran helmet" desc = "The standard combat helmet worn by SOM combat specialists. State of the art materials provides more protection for more valuable brains." - soft_armor = list(MELEE = 50, BULLET = 75, LASER = 65, ENERGY = 65, BOMB = 55, BIO = 55, FIRE = 60, ACID = 55) + soft_armor = list(MELEE = 50, BULLET = 70, LASER = 65, ENERGY = 65, BOMB = 55, BIO = 55, FIRE = 60, ACID = 55) /obj/item/clothing/head/modular/som/lorica name = "\improper Lorica Helmet System" desc = "A bulky helmet paired with the 'Lorica' armor module, designed for outstanding protection at the cost of significant weight and reduced flexibility. Substantial additional armor improves protection against all damage." icon_state = "som_helmet_lorica" item_state = "som_helmet_lorica" - soft_armor = list(MELEE = 60, BULLET = 85, LASER = 80, ENERGY = 80, BOMB = 65, BIO = 55, FIRE = 70, ACID = 60) + soft_armor = list(MELEE = 60, BULLET = 80, LASER = 80, ENERGY = 80, BOMB = 65, BIO = 55, FIRE = 70, ACID = 60) attachments_allowed = list( /obj/item/armor_module/storage/helmet, /obj/item/armor_module/armor/badge, @@ -242,7 +298,7 @@ desc = "Made for use with Gorgon pattern assault armor, providing superior protection. Typically seen on SOM leaders or their most elite combat units." icon_state = "som_helmet_leader" item_state = "som_helmet_leader" - soft_armor = list(MELEE = 60, BULLET = 80, LASER = 70, ENERGY = 70, BOMB = 60, BIO = 55, FIRE = 65, ACID = 55) + soft_armor = list(MELEE = 60, BULLET = 75, LASER = 70, ENERGY = 70, BOMB = 60, BIO = 55, FIRE = 65, ACID = 55) attachments_allowed = list( /obj/item/armor_module/module/binoculars, /obj/item/armor_module/module/binoculars/artemis_mark_two, diff --git a/code/modules/clothing/modular_armor/style_line.dm b/code/modules/clothing/modular_armor/style_line.dm index b420fad0a493e..d0e7ca96fa911 100644 --- a/code/modules/clothing/modular_armor/style_line.dm +++ b/code/modules/clothing/modular_armor/style_line.dm @@ -4,13 +4,13 @@ /obj/item/clothing/suit/modular/style name = "\improper Drip" desc = "They got that drip, doe." - flags_item_map_variant = NONE + item_map_variant_flags = NONE allowed_uniform_type = /obj/item/clothing/under icon = 'icons/obj/clothing/suits/marine_suits.dmi' item_icons = list( slot_wear_suit_str = 'icons/mob/clothing/suits/marine_suits.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', ) attachments_allowed = list( // Armor Modules @@ -81,7 +81,7 @@ /obj/item/clothing/head/modular/style name = "\improper Nice Hat" desc = "Nice hat bro. How did you find this?" - flags_item_map_variant = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_DESERT_VARIANT + item_map_variant_flags = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_DESERT_VARIANT attachments_allowed = list( /obj/item/armor_module/armor/badge, /obj/item/armor_module/storage/helmet, @@ -102,7 +102,7 @@ visorless_offset_y = 0 - flags_inv_hide = NONE + inv_hide_flags = NONE soft_armor = list(MELEE = 50, BULLET = 70, LASER = 70, ENERGY = 60, BOMB = 50, BIO = 50, FIRE = 50, ACID = 60) starting_attachments = list(/obj/item/armor_module/storage/helmet) @@ -116,6 +116,7 @@ icon_state = "beret_inhand" item_state = "beret" starting_attachments = list(/obj/item/armor_module/storage/helmet, /obj/item/armor_module/armor/stylehat_badge) + inv_hide_flags = HIDE_EXCESS_HAIR /obj/item/clothing/head/modular/style/classic_beret @@ -124,18 +125,21 @@ icon_state = "classic_beret_inhand" item_state = "classic_beret" starting_attachments = list(/obj/item/armor_module/storage/helmet, /obj/item/armor_module/armor/stylehat_badge/classic) + inv_hide_flags = HIDE_EXCESS_HAIR /obj/item/clothing/head/modular/style/boonie name = "TGMC boonie" desc = "A boonie hat used by the TGMC, purpose made for operations in enviroments with a lot of sun, or dense vegetation." icon_state = "boonie_inhand" item_state = "boonie" + inv_hide_flags = HIDE_EXCESS_HAIR /obj/item/clothing/head/modular/style/cap name = "TGMC cap" desc = "A common patrol cap used by the TGMC, stylish and comes in many colors. Mostly useful to keep the sun and officers away." icon_state = "cap_inhand" item_state = "cap" + inv_hide_flags = HIDE_EXCESS_HAIR /obj/item/clothing/head/modular/style/slouchhat @@ -143,6 +147,7 @@ desc = "A slouch hat, makes you feel down under, doesn't it? Has 'PROPERTY OF THE TGMC' markings under the hat." icon_state = "slouch_inhand" item_state = "slouch" + inv_hide_flags = HIDE_EXCESS_HAIR /obj/item/clothing/head/modular/style/ushanka name = "TGMC ushanka" @@ -150,6 +155,7 @@ icon_state = "ushanka_inhand" item_state = "ushanka" starting_attachments = list(/obj/item/armor_module/storage/helmet, /obj/item/armor_module/armor/stylehat_badge/ushanka) + inv_hide_flags = HIDE_EXCESS_HAIR /obj/item/clothing/head/modular/style/campaignhat @@ -157,6 +163,7 @@ desc = "A campaign hat, you can feel the menacing aura that this hat erodes just by looking at it." icon_state = "campaign_inhand" item_state = "campaign" + inv_hide_flags = HIDE_EXCESS_HAIR /obj/item/clothing/head/modular/style/beanie @@ -164,6 +171,7 @@ desc = "A beanie, just looking at it makes you feel like an 'Oussama', or in better terms- A modern phenomenon of people suddenly needing to bench once they put on a beanie." icon_state = "beanie_inhand" item_state = "beanie" + inv_hide_flags = HIDE_EXCESS_HAIR /obj/item/clothing/head/modular/style/headband name = "TGMC headband" @@ -177,6 +185,7 @@ desc = "A bandana that goes on your head. Has TGMC markings on the back tie, and it seems that the knot will never come undone somehow." icon_state = "headbandana_inhand" item_state = "headbandana" + inv_hide_flags = HIDE_EXCESS_HAIR // style masks /obj/item/clothing/mask/gas/modular/skimask @@ -184,8 +193,8 @@ desc = "A stylish skimask, can be recolored. Makes you feel like an operator just looking at it." icon_state = "ski_inhand" item_state = "ski" - flags_inv_hide = HIDEALLHAIR|HIDEEARS - flags_item_map_variant = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_DESERT_VARIANT + inv_hide_flags = HIDEALLHAIR|HIDEEARS + item_map_variant_flags = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_DESERT_VARIANT greyscale_config = /datum/greyscale_config/style_hat @@ -194,5 +203,5 @@ desc = "The CFCC is a prime and readied, yet stylish facemask ready to... cover your face." icon_state = "coof_inhand" item_state = "coof" - flags_item_map_variant = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_DESERT_VARIANT + item_map_variant_flags = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_DESERT_VARIANT greyscale_config = /datum/greyscale_config/style_hat diff --git a/code/modules/clothing/modular_armor/xenonauten.dm b/code/modules/clothing/modular_armor/xenonauten.dm index 7b9d5caee7108..7b3531efcbdce 100644 --- a/code/modules/clothing/modular_armor/xenonauten.dm +++ b/code/modules/clothing/modular_armor/xenonauten.dm @@ -22,6 +22,7 @@ /obj/item/armor_module/module/ballistic_armor, /obj/item/armor_module/module/chemsystem, /obj/item/armor_module/module/eshield, + /obj/item/armor_module/module/eshield/overclocked, /obj/item/armor_module/storage/general, /obj/item/armor_module/storage/ammo_mag, @@ -36,7 +37,7 @@ /obj/item/armor_module/armor/badge, ) - flags_item_map_variant = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_DESERT_VARIANT + item_map_variant_flags = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_DESERT_VARIANT greyscale_config = /datum/greyscale_config/xenonaut colorable_allowed = PRESET_COLORS_ALLOWED colorable_colors = ARMOR_PALETTES_LIST @@ -44,24 +45,66 @@ allowed_uniform_type = /obj/item/clothing/under +/obj/item/clothing/suit/modular/xenonauten/hodgrenades + starting_attachments = list( + /obj/item/armor_module/module/ballistic_armor, + /obj/item/armor_module/storage/grenade, + ) + /obj/item/clothing/suit/modular/xenonauten/engineer starting_attachments = list( /obj/item/armor_module/module/better_shoulder_lamp, /obj/item/armor_module/storage/engineering, ) +/obj/item/clothing/suit/modular/xenonauten/lightmedical + starting_attachments = list( + /obj/item/armor_module/module/better_shoulder_lamp, + /obj/item/armor_module/storage/medical, + ) + +/obj/item/clothing/suit/modular/xenonauten/lightgeneral + starting_attachments = list( + /obj/item/armor_module/module/better_shoulder_lamp, + /obj/item/armor_module/storage/general, + ) + /obj/item/clothing/suit/modular/xenonauten/mimir starting_attachments = list( /obj/item/armor_module/module/mimir_environment_protection/mark1, /obj/item/armor_module/storage/general, ) +/obj/item/clothing/suit/modular/xenonauten/mimirinjector + starting_attachments = list( + /obj/item/armor_module/module/mimir_environment_protection/mark1, + /obj/item/armor_module/storage/injector, + ) + /obj/item/clothing/suit/modular/xenonauten/shield starting_attachments = list( /obj/item/armor_module/module/eshield, /obj/item/armor_module/storage/medical, ) +/obj/item/clothing/suit/modular/xenonauten/shield_overclocked + starting_attachments = list( + /obj/item/armor_module/module/eshield/overclocked, + /obj/item/armor_module/storage/medical, + ) + +/obj/item/clothing/suit/modular/xenonauten/shield_overclocked/medic + starting_attachments = list( + /obj/item/armor_module/module/eshield/overclocked, + /obj/item/armor_module/storage/general, + ) + +/obj/item/clothing/suit/modular/xenonauten/shield_overclocked/engineer + starting_attachments = list( + /obj/item/armor_module/module/eshield/overclocked, + /obj/item/armor_module/storage/engineering, + ) + /obj/item/clothing/suit/modular/xenonauten/valk starting_attachments = list( /obj/item/armor_module/module/valkyrie_autodoc, @@ -81,6 +124,30 @@ /obj/item/armor_module/storage/medical, ) +/obj/item/clothing/suit/modular/xenonauten/light/shield_overclocked + starting_attachments = list( + /obj/item/armor_module/module/eshield/overclocked, + /obj/item/armor_module/storage/medical, + ) + +/obj/item/clothing/suit/modular/xenonauten/light/shield_overclocked/medic + starting_attachments = list( + /obj/item/armor_module/module/eshield/overclocked, + /obj/item/armor_module/storage/general, + ) + +/obj/item/clothing/suit/modular/xenonauten/light/shield_overclocked/engineer + starting_attachments = list( + /obj/item/armor_module/module/eshield/overclocked, + /obj/item/armor_module/storage/engineering, + ) + +/obj/item/clothing/suit/modular/xenonauten/light/lightmedical + starting_attachments = list( + /obj/item/armor_module/module/better_shoulder_lamp, + /obj/item/armor_module/storage/medical, + ) + /obj/item/clothing/suit/modular/xenonauten/heavy name = "\improper Xenonauten-H pattern armored vest" desc = "A XN-H vest, also known as Xenonauten, a set vest with modular attachments made to work in many enviroments. This one seems to be a heavy variant. Alt-Click to remove attached items. Use it to toggle the built-in flashlight." @@ -88,12 +155,24 @@ slowdown = SLOWDOWN_ARMOR_HEAVY greyscale_config = /datum/greyscale_config/xenonaut/heavy +/obj/item/clothing/suit/modular/xenonauten/heavy/mimirengi + starting_attachments = list( + /obj/item/armor_module/module/mimir_environment_protection/mark1, + /obj/item/armor_module/storage/engineering, + ) + /obj/item/clothing/suit/modular/xenonauten/heavy/leader starting_attachments = list( /obj/item/armor_module/module/valkyrie_autodoc, /obj/item/armor_module/storage/medical, ) +/obj/item/clothing/suit/modular/xenonauten/heavy/tyr_onegeneral + starting_attachments = list( + /obj/item/armor_module/module/tyr_extra_armor/mark1, + /obj/item/armor_module/storage/general, + ) + /obj/item/clothing/suit/modular/xenonauten/heavy/tyr_one starting_attachments = list( /obj/item/armor_module/module/tyr_extra_armor/mark1, @@ -106,6 +185,12 @@ /obj/item/armor_module/storage/medical, ) +/obj/item/clothing/suit/modular/xenonauten/heavy/grenadier //Literally grenades + starting_attachments = list( + /obj/item/armor_module/module/ballistic_armor, + /obj/item/armor_module/storage/grenade, + ) + /obj/item/clothing/suit/modular/xenonauten/heavy/surt starting_attachments = list( /obj/item/armor_module/module/fire_proof, @@ -118,10 +203,16 @@ /obj/item/armor_module/storage/medical, ) +/obj/item/clothing/suit/modular/xenonauten/heavy/shield_overclocked + starting_attachments = list( + /obj/item/armor_module/module/eshield/overclocked, + /obj/item/armor_module/storage/medical, + ) + /obj/item/clothing/suit/modular/xenonauten/pilot name = "\improper TerraGov standard flak jacket" desc = "A flak jacket used by dropship pilots to protect themselves while flying in the cockpit. Excels in protecting the wearer against high-velocity solid projectiles." - flags_item = NONE + item_flags = NONE soft_armor = list(MELEE = 40, BULLET = 50, LASER = 50, ENERGY = 25, BOMB = 30, BIO = 5, FIRE = 25, ACID = 30) slowdown = 0.25 @@ -130,6 +221,49 @@ attachments_allowed = list() + allowed = list( + /obj/item/weapon/gun, + /obj/item/tank/emergency_oxygen, + /obj/item/flashlight, + /obj/item/ammo_magazine, + /obj/item/storage/fancy/cigarettes, + /obj/item/tool/lighter, + /obj/item/weapon/baton, + /obj/item/restraints/handcuffs, + /obj/item/explosive/grenade, + /obj/item/binoculars, + /obj/item/weapon/combat_knife, + /obj/item/attachable/bayonetknife, + /obj/item/storage/belt/sparepouch, + /obj/item/storage/holster/blade, + /obj/item/storage/holster/belt, + /obj/item/weapon/energy/sword, + ) + +/obj/item/clothing/suit/storage/marine/ballistic + name = "\improper Crasher multi-threat ballistic armor" + desc = "A reused design of a old body armor system from the 21st century." + soft_armor = list(MELEE = 40, BULLET = 50, LASER = 50, ENERGY = 25, BOMB = 30, BIO = 5, FIRE = 25, ACID = 30) + slowdown = 0.25 + armor_protection_flags = CHEST|GROIN|ARMS|LEGS|FEET|HANDS + icon = 'icons/mob/clothing/suits/marine_armor.dmi' + icon_state = "ballistic_vest" + item_icons = list( + slot_wear_suit_str = 'icons/mob/clothing/suits/marine_armor.dmi' + ) + equip_delay_self = 2 SECONDS + unequip_delay_self = 0 SECONDS + armor_features_flags = NONE + + icon_state_variants = list( + "urban", + "jungle", + "desert", + "snow", + ) + colorable_allowed = ICON_STATE_VARIANTS_ALLOWED + current_variant = "urban" + allowed = list( /obj/item/weapon/gun, /obj/item/tank/emergency_oxygen, @@ -176,16 +310,28 @@ //RUTGMC EDIT ADDITION END ) starting_attachments = list(/obj/item/armor_module/storage/helmet) - flags_item_map_variant = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_DESERT_VARIANT + item_map_variant_flags = ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_DESERT_VARIANT greyscale_config = /datum/greyscale_config/xenonaut/helm greyscale_colors = ARMOR_PALETTE_DRAB visorless_offset_y = 0 +/obj/item/clothing/head/modular/m10x/hod + starting_attachments = list(/obj/item/armor_module/storage/helmet, /obj/item/armor_module/module/hod_head) + +/obj/item/clothing/head/modular/m10x/freyr + starting_attachments = list(/obj/item/armor_module/storage/helmet, /obj/item/armor_module/module/artemis) + +/obj/item/clothing/head/modular/m10x/antenna + starting_attachments = list(/obj/item/armor_module/storage/helmet, /obj/item/armor_module/module/antenna) + /obj/item/clothing/head/modular/m10x/welding starting_attachments = list(/obj/item/armor_module/storage/helmet, /obj/item/armor_module/module/welding) +/obj/item/clothing/head/modular/m10x/superiorwelding + starting_attachments = list(/obj/item/armor_module/storage/helmet, /obj/item/armor_module/module/welding/superior) + /obj/item/clothing/head/modular/m10x/mimir starting_attachments = list(/obj/item/armor_module/storage/helmet, /obj/item/armor_module/module/mimir_environment_protection/mimir_helmet/mark1) diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm index 584a50987f776..f93b6c8002e76 100644 --- a/code/modules/clothing/shoes/colour.dm +++ b/code/modules/clothing/shoes/colour.dm @@ -3,9 +3,9 @@ icon_state = "black" desc = "A pair of black shoes." - flags_cold_protection = FEET + cold_protection_flags = FEET min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE - flags_heat_protection = FEET + heat_protection_flags = FEET max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE /obj/item/clothing/shoes/brown @@ -81,7 +81,7 @@ remove_cuffs(user) /obj/item/clothing/shoes/orange/attackby(obj/item/I, mob/user, params) - . = ..() - if(istype(I, /obj/item/restraints/handcuffs)) attach_cuffs(I, user) + return + return ..() diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index de8bac8ae89e8..f59661fb62c49 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -7,13 +7,13 @@ /obj/item/clothing/shoes/magboots/attack_self(mob/user) if(magpulse) - flags_inventory &= ~NOSLIPPING + inventory_flags &= ~NOSLIPPING slowdown = SHOES_SLOWDOWN magpulse = 0 icon_state = "magboots0" to_chat(user, "You disable the mag-pulse traction system.") else - flags_inventory |= NOSLIPPING + inventory_flags |= NOSLIPPING slowdown = 2 magpulse = 1 icon_state = "magboots1" @@ -26,6 +26,6 @@ /obj/item/clothing/shoes/magboots/examine(mob/user) . = ..() var/state = "disabled" - if(flags_inventory&NOSLIPPING) + if(inventory_flags&NOSLIPPING) state = "enabled" . += "Its mag-pulse traction system appears to be [state]." diff --git a/code/modules/clothing/shoes/marine_shoes.dm b/code/modules/clothing/shoes/marine_shoes.dm index d9a18311802ed..aa3a304f868c6 100644 --- a/code/modules/clothing/shoes/marine_shoes.dm +++ b/code/modules/clothing/shoes/marine_shoes.dm @@ -3,10 +3,10 @@ desc = "Standard issue combat boots for combat scenarios or combat situations. All combat, all the time." icon_state = "marine" item_state = "marine" - flags_armor_protection = FEET - flags_cold_protection = FEET - flags_heat_protection = FEET - flags_inventory = NOQUICKEQUIP|NOSLIPPING + armor_protection_flags = FEET + cold_protection_flags = FEET + heat_protection_flags = FEET + inventory_flags = NOQUICKEQUIP|NOSLIPPING min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE siemens_coefficient = 0.7 @@ -26,6 +26,7 @@ update_icon() /obj/item/clothing/shoes/marine/update_icon_state() + . = ..() icon_state = initial(icon_state) if(!attachments_by_slot[ATTACHMENT_SLOT_STORAGE]) return @@ -58,7 +59,7 @@ desc = "Only a small amount of monkeys, kittens, and orphans were killed in making this." icon_state = "laceups" soft_armor = list(MELEE = 35, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 30, BIO = 20, FIRE = 20, ACID = 25) - flags_inventory = NOSLIPPING + inventory_flags = NOSLIPPING siemens_coefficient = 0.6 /obj/item/clothing/shoes/marinechief/captain @@ -81,13 +82,13 @@ desc = "The height of fashion, but these look to be woven with protective fiber." icon_state = "jackboots" item_state = "jackboots" - flags_armor_protection = FEET + armor_protection_flags = FEET soft_armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 30, BIO = 20, FIRE = 20, ACID = 15) min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE - flags_cold_protection = FEET - flags_heat_protection = FEET - flags_inventory = NOSLIPPING + cold_protection_flags = FEET + heat_protection_flags = FEET + inventory_flags = NOSLIPPING siemens_coefficient = 0.6 /obj/item/clothing/shoes/marine/deathsquad @@ -96,12 +97,12 @@ icon_state = "commando_boots" item_state = "commando_boots" permeability_coefficient = 0.01 - flags_armor_protection = FEET + armor_protection_flags = FEET soft_armor = list(MELEE = 40, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 30, BIO = 20, FIRE = 20, ACID = 25) min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE - flags_cold_protection = FEET - flags_heat_protection = FEET + cold_protection_flags = FEET + heat_protection_flags = FEET siemens_coefficient = 0.2 resistance_flags = UNACIDABLE starting_attachments = list(/obj/item/armor_module/storage/boot/full) @@ -129,9 +130,9 @@ desc = "A field of invisible energy, it protects the wearer but prevents any clothing from being worn." icon = 'icons/effects/effects.dmi' icon_state = "shield-blue" - flags_item = DELONDROP + item_flags = DELONDROP soft_armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 30, BIO = 20, FIRE = 20, ACID = 25) - flags_inventory = NOSLIPPING + inventory_flags = NOSLIPPING /obj/item/clothing/shoes/sectoid/Initialize(mapload) . = ..() diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 50cfa8a563d46..b30b842ba7863 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -8,7 +8,7 @@ icon_state = "brown" item_state = "brown" permeability_coefficient = 0.05 - flags_inventory = NOSLIPPING + inventory_flags = NOSLIPPING var/list/clothing_choices = list() siemens_coefficient = 0.8 @@ -21,8 +21,8 @@ desc = "When you want to turn up the heat." icon_state = "swat" soft_armor = list(MELEE = 80, BULLET = 60, LASER = 50, ENERGY = 25, BOMB = 50, BIO = 10, FIRE = 25, ACID = 25) - flags_inventory = NOSLIPPING - flags_item = SYNTH_RESTRICTED + inventory_flags = NOSLIPPING + item_flags = SYNTH_RESTRICTED siemens_coefficient = 0.6 /obj/item/clothing/shoes/ruggedboot @@ -30,22 +30,22 @@ desc = "A pair of boots used by workers in dangerous environments." icon_state = "swat" soft_armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 25, BOMB = 20, BIO = 20, FIRE = 20, ACID = 20) - flags_inventory = NOSLIPPING - flags_item = SYNTH_RESTRICTED + inventory_flags = NOSLIPPING + item_flags = SYNTH_RESTRICTED siemens_coefficient = 0.6 /obj/item/clothing/shoes/combat //Basically SWAT shoes combined with galoshes. name = "combat boots" desc = "When you REALLY want to turn up the heat" icon_state = "swat" - flags_item = SYNTH_RESTRICTED + item_flags = SYNTH_RESTRICTED soft_armor = list(MELEE = 80, BULLET = 60, LASER = 50, ENERGY = 25, BOMB = 50, BIO = 10, FIRE = 25, ACID = 25) - flags_inventory = NOSLIPPING + inventory_flags = NOSLIPPING siemens_coefficient = 0.6 - flags_cold_protection = FEET + cold_protection_flags = FEET min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE - flags_heat_protection = FEET + heat_protection_flags = FEET max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE /obj/item/clothing/shoes/space_ninja @@ -53,33 +53,33 @@ desc = "A pair of running shoes. Excellent for running and even better for smashing skulls." icon_state = "s-ninja" permeability_coefficient = 0.01 - flags_inventory = NOSLIPPING + inventory_flags = NOSLIPPING soft_armor = list(MELEE = 60, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, FIRE = 15, ACID = 15) siemens_coefficient = 0.2 - flags_cold_protection = FEET + cold_protection_flags = FEET min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE - flags_heat_protection = FEET + heat_protection_flags = FEET max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE /obj/item/clothing/shoes/sandal desc = "A pair of rather plain, wooden sandals." name = "sandals" icon_state = "wizard" - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/shoes/sandal/marisa desc = "A pair of magic, black shoes." name = "magic shoes" icon_state = "black" - flags_armor_protection = FEET + armor_protection_flags = FEET /obj/item/clothing/shoes/galoshes desc = "Rubber boots" name = "galoshes" icon_state = "galoshes" permeability_coefficient = 0.05 - flags_inventory = NOSLIPPING + inventory_flags = NOSLIPPING slowdown = SHOES_SLOWDOWN+1 /obj/item/clothing/shoes/clown_shoes @@ -109,9 +109,9 @@ item_state = "cult" siemens_coefficient = 0.7 - flags_cold_protection = FEET + cold_protection_flags = FEET min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE - flags_heat_protection = FEET + heat_protection_flags = FEET max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE /obj/item/clothing/shoes/cyborg @@ -142,7 +142,7 @@ desc = "Help you swim good." name = "swimming fins" icon_state = "flippers" - flags_inventory = NOSLIPPING + inventory_flags = NOSLIPPING slowdown = SHOES_SLOWDOWN+1 @@ -151,8 +151,8 @@ desc = "When you feet are as cold as your heart" icon_state = "swat" siemens_coefficient = 0.6 - flags_cold_protection = FEET - flags_heat_protection = FEET + cold_protection_flags = FEET + heat_protection_flags = FEET min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE @@ -161,6 +161,6 @@ desc = "Praise the machine spirit!" icon_state = "tp_boots" item_state = "tp_boots" - flags_inventory = NOSLIPPING + inventory_flags = NOSLIPPING diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm index 5152ebdfde39b..9181e55479d2c 100644 --- a/code/modules/clothing/spacesuits/rig.dm +++ b/code/modules/clothing/spacesuits/rig.dm @@ -8,7 +8,7 @@ var/brightness_on = 4 //luminosity when on var/on = FALSE actions_types = list(/datum/action/item_action/toggle) - flags_heat_protection = HEAD + heat_protection_flags = HEAD max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE /obj/item/clothing/head/helmet/space/rig/attack_self(mob/user) @@ -37,7 +37,7 @@ slowdown = 1 soft_armor = list(MELEE = 40, BULLET = 5, LASER = 20, ENERGY = 5, BOMB = 35, BIO = 100, FIRE = 5, ACID = 5) allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit) - flags_heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + heat_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE //Engineering rig diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm index 491b26213d4d3..504d8a60d5a4b 100644 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ b/code/modules/clothing/spacesuits/spacesuits.dm @@ -9,10 +9,10 @@ desc = "A special helmet designed for work in a hazardous, low-pressure environment." permeability_coefficient = 0.01 soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, FIRE = 0, ACID = 0) - flags_inventory = COVEREYES|COVERMOUTH|NOPRESSUREDMAGE|BLOCKSHARPOBJ - flags_inv_hide = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEALLHAIR - flags_armor_protection = HEAD|FACE|EYES - flags_cold_protection = HEAD + inventory_flags = COVEREYES|COVERMOUTH|NOPRESSUREDMAGE|BLOCKSHARPOBJ + inv_hide_flags = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEALLHAIR + armor_protection_flags = HEAD|FACE|EYES + cold_protection_flags = HEAD min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.9 eye_protection = 2 @@ -26,12 +26,12 @@ w_class = WEIGHT_CLASS_BULKY gas_transfer_coefficient = 0.01 permeability_coefficient = 0.02 - flags_armor_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + armor_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS allowed = list(/obj/item/flashlight,/obj/item/tank/emergency_oxygen,/obj/item/suit_cooling_unit) slowdown = 3 soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, FIRE = 0, ACID = 0) - flags_inventory = BLOCKSHARPOBJ|NOPRESSUREDMAGE - flags_inv_hide = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - flags_cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + inventory_flags = BLOCKSHARPOBJ|NOPRESSUREDMAGE + inv_hide_flags = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + cold_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.9 diff --git a/code/modules/clothing/spacesuits/standard_space_suits.dm b/code/modules/clothing/spacesuits/standard_space_suits.dm index 0680ae66ec9a2..4723d9b559be8 100644 --- a/code/modules/clothing/spacesuits/standard_space_suits.dm +++ b/code/modules/clothing/spacesuits/standard_space_suits.dm @@ -26,13 +26,13 @@ w_class = WEIGHT_CLASS_BULKY gas_transfer_coefficient = 0.01 permeability_coefficient = 0.02 - flags_armor_protection = CHEST|GROIN|LEGS|FEET|ARMS + armor_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS allowed = list(/obj/item/tank/emergency_oxygen, /obj/item/flashlight,/obj/item/weapon/gun, /obj/item/ammo_magazine, /obj/item/weapon/baton,/obj/item/restraints/handcuffs) slowdown = 1.5 soft_armor = list(MELEE = 40, BULLET = 50, LASER = 50, ENERGY = 25, BOMB = 50, BIO = 100, FIRE = 25, ACID = 25) - flags_inventory = NOPRESSUREDMAGE - flags_inv_hide = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - flags_cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + inventory_flags = NOPRESSUREDMAGE + inv_hide_flags = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + cold_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.7 @@ -41,9 +41,9 @@ name = "Santa's hat" desc = "Ho ho ho. Merrry X-mas!" icon_state = "santahat" - flags_inventory = NOPRESSUREDMAGE|BLOCKSHARPOBJ - flags_inv_hide = HIDEEYES - flags_armor_protection = HEAD + inventory_flags = NOPRESSUREDMAGE|BLOCKSHARPOBJ + inv_hide_flags = HIDEEYES + armor_protection_flags = HEAD /obj/item/clothing/suit/space/santa name = "Santa's suit" diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index d90038f4cae4a..27631ca64b2b9 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -1,9 +1,9 @@ /obj/item/clothing/suit/armor - flags_inventory = BLOCKSHARPOBJ - flags_armor_protection = CHEST|GROIN - flags_cold_protection = CHEST|GROIN - flags_heat_protection = CHEST|GROIN + inventory_flags = BLOCKSHARPOBJ + armor_protection_flags = CHEST|GROIN + cold_protection_flags = CHEST|GROIN + heat_protection_flags = CHEST|GROIN min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECTION_TEMPERATURE max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE siemens_coefficient = 0.6 @@ -35,7 +35,7 @@ item_state = "armor" blood_overlay_type = "armor" permeability_coefficient = 0.8 - flags_armor_protection = CHEST + armor_protection_flags = CHEST soft_armor = list(MELEE = 20, BULLET = 30, LASER = 25, ENERGY = 10, BOMB = 15, BIO = 0, FIRE = 10, ACID = 10) allowed = list ( /obj/item/flashlight, @@ -50,7 +50,7 @@ desc = "An armoured jacket with gold regalia" icon_state = "admiral_jacket" item_state = "admiral_jacket" - flags_armor_protection = CHEST|GROIN|ARMS + armor_protection_flags = CHEST|GROIN|ARMS w_class = WEIGHT_CLASS_NORMAL /obj/item/clothing/suit/armor/vest/security @@ -65,7 +65,7 @@ desc = "An armoured jacket with silver rank pips and livery." icon_state = "warden_jacket" item_state = "warden_jacket" - flags_armor_protection = CHEST|GROIN|ARMS + armor_protection_flags = CHEST|GROIN|ARMS /obj/item/clothing/suit/armor/bulletproof name = "bulletproof vest" @@ -73,8 +73,8 @@ icon_state = "bulletproof" item_state = "bulletproof" blood_overlay_type = "armor" - flags_armor_protection = CHEST - soft_armor = list(MELEE = 30, BULLET = 55, LASER = 0, ENERGY = 0, BOMB = 30, BIO = 0, FIRE = 0, ACID = 15) + armor_protection_flags = CHEST + soft_armor = list(MELEE = 30, BULLET = 75, LASER = 15, ENERGY = 15, BOMB = 30, BIO = 0, FIRE = 0, ACID = 15) hard_armor = list(MELEE = 0, BULLET = 20, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 5) siemens_coefficient = 0.7 permeability_coefficient = 0.9 @@ -93,12 +93,12 @@ desc = "A suit of armor with heavy padding to protect against melee attacks. Looks like it might impair movement." icon_state = "riot" item_state = "swat" - flags_armor_protection = CHEST|GROIN|LEGS|ARMS + armor_protection_flags = CHEST|GROIN|LEGS|ARMS slowdown = 1.2 soft_armor = list(MELEE = 65, BULLET = 10, LASER = 10, ENERGY = 10, BOMB = 0, BIO = 0, FIRE = 10, ACID = 10) - flags_inventory = BLOCKSHARPOBJ - flags_inv_hide = HIDEJUMPSUIT - flags_item = SYNTH_RESTRICTED + inventory_flags = BLOCKSHARPOBJ + inv_hide_flags = HIDEJUMPSUIT + item_flags = SYNTH_RESTRICTED siemens_coefficient = 0.5 permeability_coefficient = 0.7 equip_delay_self = 20 @@ -111,14 +111,14 @@ item_state = "swat" gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 - flags_armor_protection = CHEST|GROIN|LEGS|FEET|ARMS + armor_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/baton,/obj/item/restraints/handcuffs,/obj/item/tank/emergency_oxygen) slowdown = 1 soft_armor = list(MELEE = 50, BULLET = 60, LASER = 50, ENERGY = 25, BOMB = 50, BIO = 100, FIRE = 25, ACID = 25) - flags_inventory = BLOCKSHARPOBJ|NOPRESSUREDMAGE - flags_item = SYNTH_RESTRICTED - flags_inv_hide = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - flags_cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + inventory_flags = BLOCKSHARPOBJ|NOPRESSUREDMAGE + item_flags = SYNTH_RESTRICTED + inv_hide_flags = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + cold_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.6 @@ -129,9 +129,9 @@ icon_state = "detective" item_state = "det_suit" blood_overlay_type = "coat" - flags_inventory = NONE - flags_inv_hide = NONE - flags_armor_protection = CHEST|ARMS + inventory_flags = NONE + inv_hide_flags = NONE + armor_protection_flags = CHEST|ARMS /obj/item/clothing/suit/armor/det_suit @@ -140,8 +140,8 @@ icon_state = "detective-armor" item_state = "detective-armor" blood_overlay_type = "armor" - flags_armor_protection = CHEST|GROIN - flags_item = SYNTH_RESTRICTED + armor_protection_flags = CHEST|GROIN + item_flags = SYNTH_RESTRICTED soft_armor = list(MELEE = 50, BULLET = 15, LASER = 50, ENERGY = 10, BOMB = 25, BIO = 0, FIRE = 10, ACID = 10) /obj/item/clothing/suit/armor/rugged @@ -150,8 +150,8 @@ icon_state = "swatarmor" item_state = "swatarmor" var/obj/item/weapon/gun/holstered = null - flags_armor_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - flags_item = SYNTH_RESTRICTED + armor_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + item_flags = SYNTH_RESTRICTED slowdown = 0 soft_armor = list(MELEE = 50, BULLET = 40, LASER = 40, ENERGY = 40, BOMB = 50, BIO = 40, FIRE = 50, ACID = 50) siemens_coefficient = 0.7 @@ -162,8 +162,8 @@ desc = "A field of invisible energy, it protects the wearer but prevents any clothing from being worn." icon = 'icons/effects/effects.dmi' icon_state = "shield-blue" - flags_item = DELONDROP - flags_armor_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + item_flags = DELONDROP + armor_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS soft_armor = list(MELEE = 55, BULLET = 55, LASER = 35, ENERGY = 20, BOMB = 40, BIO = 40, FIRE = 40, ACID = 40) allowed = list()//how would you put a gun onto a field of energy? @@ -173,7 +173,7 @@ /obj/item/clothing/suit/armor/sectoid/shield name = "powerful psionic field" - flags_armor_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + armor_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS soft_armor = list(MELEE = 55, BULLET = 55, LASER = 35, ENERGY = 20, BOMB = 40, BIO = 40, FIRE = 40, ACID = 40) /obj/item/clothing/suit/armor/sectoid/shield/Initialize(mapload) @@ -190,11 +190,11 @@ icon_state = "centcom" item_state = "centcom" w_class = WEIGHT_CLASS_BULKY//bulky item - flags_armor_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + armor_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS allowed = list(/obj/item/weapon/gun,/obj/item/weapon/baton,/obj/item/restraints/handcuffs,/obj/item/tank/emergency_oxygen) - flags_inventory = NONE - flags_inv_hide = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - flags_cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + inventory_flags = NONE + inv_hide_flags = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + cold_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0 @@ -205,14 +205,14 @@ item_state = "swat_suit" w_class = WEIGHT_CLASS_BULKY//bulky item gas_transfer_coefficient = 0.90 - flags_armor_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + armor_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS slowdown = 3 - flags_inv_hide = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + inv_hide_flags = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT siemens_coefficient = 0 /obj/item/clothing/suit/armor/tdome - flags_armor_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - flags_inv_hide = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + armor_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + inv_hide_flags = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT /obj/item/clothing/suit/armor/tdome/red name = "Thunderdome suit (red)" @@ -233,11 +233,11 @@ desc = "A greatcoat enhanced with a special alloy for some protection and style." icon_state = "hos" item_state = "hos" - flags_armor_protection = CHEST|GROIN|ARMS|LEGS - flags_item = SYNTH_RESTRICTED + armor_protection_flags = CHEST|GROIN|ARMS|LEGS + item_flags = SYNTH_RESTRICTED soft_armor = list(MELEE = 65, BULLET = 30, LASER = 50, ENERGY = 10, BOMB = 25, BIO = 0, FIRE = 10, ACID = 10) - flags_inventory = NONE - flags_inv_hide = HIDEJUMPSUIT + inventory_flags = NONE + inv_hide_flags = HIDEJUMPSUIT siemens_coefficient = 0.6 /obj/item/clothing/suit/armor/hos/jensen @@ -245,7 +245,7 @@ desc = "A trenchcoat augmented with a special alloy for some protection and style." icon_state = "jensencoat" item_state = "jensencoat" - flags_inv_hide = NONE + inv_hide_flags = NONE siemens_coefficient = 0.6 - flags_armor_protection = CHEST|ARMS + armor_protection_flags = CHEST|ARMS diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index 8f1e72456e806..e631d9be42085 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -5,9 +5,9 @@ desc = "A hood that protects the head and face from biological comtaminants." permeability_coefficient = 0.01 soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, FIRE = 0, ACID = 0) - flags_inventory = COVEREYES|COVERMOUTH - flags_inv_hide = HIDEFACE|HIDEMASK|HIDEEARS|HIDEALLHAIR - flags_armor_protection = HEAD|FACE|EYES + inventory_flags = COVEREYES|COVERMOUTH + inv_hide_flags = HIDEFACE|HIDEMASK|HIDEEARS|HIDEALLHAIR + armor_protection_flags = HEAD|FACE|EYES siemens_coefficient = 0.9 /obj/item/clothing/suit/bio_suit @@ -18,11 +18,11 @@ w_class = WEIGHT_CLASS_BULKY//bulky item gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 - flags_armor_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + armor_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS slowdown = 1 allowed = list(/obj/item/tank/emergency_oxygen,/obj/item/tool/pen,/obj/item/flashlight/pen) soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, FIRE = 0, ACID = 0) - flags_inv_hide = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + inv_hide_flags = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT siemens_coefficient = 0.9 //Virology biosuit, green stripe @@ -31,8 +31,8 @@ /obj/item/clothing/suit/bio_suit/virology icon_state = "bio_virology" - flags_armor_protection = CHEST|GROIN|LEGS|ARMS - flags_inv_hide = HIDEGLOVES|HIDEJUMPSUIT + armor_protection_flags = CHEST|GROIN|LEGS|ARMS + inv_hide_flags = HIDEGLOVES|HIDEJUMPSUIT //Security biosuit, grey with red stripe across the chest /obj/item/clothing/head/bio_hood/security @@ -40,8 +40,8 @@ /obj/item/clothing/suit/bio_suit/security icon_state = "bio_security" - flags_armor_protection = CHEST|GROIN|LEGS|ARMS - flags_inv_hide = HIDEGLOVES|HIDEJUMPSUIT + armor_protection_flags = CHEST|GROIN|LEGS|ARMS + inv_hide_flags = HIDEGLOVES|HIDEJUMPSUIT //Janitor's biosuit, grey with purple arms /obj/item/clothing/head/bio_hood/janitor @@ -49,8 +49,8 @@ /obj/item/clothing/suit/bio_suit/janitor icon_state = "bio_janitor" - flags_armor_protection = CHEST|GROIN|LEGS|ARMS - flags_inv_hide = HIDEGLOVES|HIDEJUMPSUIT + armor_protection_flags = CHEST|GROIN|LEGS|ARMS + inv_hide_flags = HIDEGLOVES|HIDEJUMPSUIT //Scientist's biosuit, white with a pink-ish hue @@ -59,14 +59,14 @@ /obj/item/clothing/suit/bio_suit/scientist icon_state = "bio_scientist" - flags_armor_protection = CHEST|GROIN|LEGS|ARMS - flags_inv_hide = HIDEGLOVES|HIDEJUMPSUIT + armor_protection_flags = CHEST|GROIN|LEGS|ARMS + inv_hide_flags = HIDEGLOVES|HIDEJUMPSUIT //CMO's biosuit, blue stripe /obj/item/clothing/suit/bio_suit/cmo icon_state = "bio_cmo" - flags_armor_protection = CHEST|GROIN|LEGS|ARMS - flags_inv_hide = HIDEGLOVES|HIDEJUMPSUIT + armor_protection_flags = CHEST|GROIN|LEGS|ARMS + inv_hide_flags = HIDEGLOVES|HIDEJUMPSUIT /obj/item/clothing/head/bio_hood/cmo icon_state = "bio_cmo" @@ -78,4 +78,4 @@ 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 = "bio_suit" - flags_inv_hide = HIDEGLOVES|HIDEJUMPSUIT + inv_hide_flags = HIDEGLOVES|HIDEJUMPSUIT diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index d82c86293bb8a..5f320b47c166d 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -3,13 +3,13 @@ */ //Botonist -/obj/item/clothing/suit/apron +/obj/item/clothing/suit/storage/apron name = "apron" desc = "A basic blue apron." icon_state = "apron" item_state = "apron" blood_overlay_type = "armor" - flags_armor_protection = NONE + armor_protection_flags = NONE allowed = list ( /obj/item/reagent_containers/spray/plantbgone, /obj/item/tool/analyzer/plant_analyzer, @@ -29,7 +29,7 @@ desc = "A plastic covering to prevent the passage of bodily fluids during surgery." icon_state = "surgical" item_state = "surgical" - flags_armor_protection = CHEST + armor_protection_flags = CHEST allowed = list( /obj/item/tank/emergency_oxygen, /obj/item/healthanalyzer, @@ -57,16 +57,16 @@ desc = "Worn by a Captain to show their class." icon_state = "captunic" item_state = "bio_suit" - flags_armor_protection = CHEST|ARMS - flags_inv_hide = HIDEJUMPSUIT + armor_protection_flags = CHEST|ARMS + inv_hide_flags = HIDEJUMPSUIT /obj/item/clothing/suit/captunic/capjacket name = "captain's uniform jacket" desc = "A less formal jacket for everyday captain use." icon_state = "capjacket" item_state = "bio_suit" - flags_armor_protection = CHEST|GROIN|LEGS|ARMS - flags_inv_hide = HIDEJUMPSUIT + armor_protection_flags = CHEST|GROIN|LEGS|ARMS + inv_hide_flags = HIDEJUMPSUIT //Chaplain /obj/item/clothing/suit/chaplain_hoodie @@ -74,40 +74,40 @@ desc = "This suit says to you 'hush'!" icon_state = "chaplain_hoodie" item_state = "chaplain_hoodie" - flags_armor_protection = CHEST|ARMS + armor_protection_flags = CHEST|ARMS /obj/item/clothing/suit/nun name = "nun robe" desc = "Maximum piety in this star system." icon_state = "nun" item_state = "nun" - flags_armor_protection = CHEST|GROIN|LEGS|ARMS - flags_inv_hide = HIDESHOES|HIDEJUMPSUIT + armor_protection_flags = CHEST|GROIN|LEGS|ARMS + inv_hide_flags = HIDESHOES|HIDEJUMPSUIT //Chef -/obj/item/clothing/suit/chef +/obj/item/clothing/suit/storage/chef name = "Chef's apron" desc = "An apron used by a high class chef." icon_state = "chef" item_state = "chef" gas_transfer_coefficient = 0.90 permeability_coefficient = 0.50 - flags_armor_protection = CHEST|GROIN|ARMS + armor_protection_flags = CHEST|GROIN|ARMS allowed = list (/obj/item/tool/kitchen/knife, /obj/item/tool/kitchen/knife/butcher) -/obj/item/clothing/suit/chef/classic +/obj/item/clothing/suit/storage/chef/classic name = "A classic chef's apron." desc = "A basic, dull, white chef's apron." icon_state = "apronchef" item_state = "apronchef" blood_overlay_type = "armor" - flags_armor_protection = NONE + armor_protection_flags = NONE //Security /obj/item/clothing/suit/security desc = "You shouldn't see this" - flags_armor_protection = CHEST|GROIN|ARMS + armor_protection_flags = CHEST|GROIN|ARMS /obj/item/clothing/suit/security/formal name = "formal jacket" @@ -125,12 +125,12 @@ /obj/item/clothing/suit/security/formal/officer/tan icon_state = "wardentanjacket" -/obj/item/clothing/suit/security/formal/senior_officer +/obj/item/clothing/suit/storage/security/formal/senior_officer name = "senior officer's jacket" desc = "This piece of clothing was specifically designed for asserting superior authority." icon_state = "hosbluejacket" -/obj/item/clothing/suit/security/formal/senior_officer/tan +/obj/item/clothing/suit/storage/security/formal/senior_officer/tan icon_state = "hostanjacket" //Detective @@ -140,7 +140,7 @@ icon_state = "detective" item_state = "det_suit" blood_overlay_type = "coat" - flags_armor_protection = CHEST|ARMS + armor_protection_flags = CHEST|ARMS allowed = list( /obj/item/tank/emergency_oxygen, /obj/item/flashlight, @@ -167,7 +167,7 @@ name = "jacket" desc = "A forensics technician jacket." item_state = "det_suit" - flags_armor_protection = CHEST|ARMS + armor_protection_flags = CHEST|ARMS allowed = list( /obj/item/tank/emergency_oxygen, /obj/item/flashlight, @@ -214,7 +214,7 @@ /obj/item/clothing/mask/gas, /obj/item/tool/taperoll/engineering, ) - flags_armor_protection = CHEST + armor_protection_flags = CHEST /obj/item/clothing/suit/storage/hazardvest/lime name = "lime reflective safety vest" @@ -233,7 +233,7 @@ icon_state = "suitjacket_blue_open" item_state = "suitjacket_blue_open" blood_overlay_type = "coat" - flags_armor_protection = CHEST|ARMS + armor_protection_flags = CHEST|ARMS /obj/item/clothing/suit/storage/lawyer/purpjacket name = "Purple Suit Jacket" @@ -241,7 +241,7 @@ icon_state = "suitjacket_purp" item_state = "suitjacket_purp" blood_overlay_type = "coat" - flags_armor_protection = CHEST|ARMS + armor_protection_flags = CHEST|ARMS //Internal Affairs /obj/item/clothing/suit/storage/internalaffairs @@ -250,7 +250,7 @@ icon_state = "ia_jacket_open" item_state = "ia_jacket" blood_overlay_type = "coat" - flags_armor_protection = CHEST|ARMS + armor_protection_flags = CHEST|ARMS /obj/item/clothing/suit/storage/internalaffairs/verb/toggle() set name = "Toggle Coat Buttons" @@ -289,7 +289,7 @@ /obj/item/radio, /obj/item/tank/emergency_oxygen, ) - flags_armor_protection = CHEST|ARMS + armor_protection_flags = CHEST|ARMS /obj/item/clothing/suit/storage/fr_jacket/verb/toggle() set name = "Toggle Jacket Buttons" @@ -315,14 +315,14 @@ icon = 'icons/obj/clothing/belts.dmi' icon_state = "suspenders" blood_overlay_type = "armor" //it's the less thing that I can put here - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/suit/storage/snow_suit name = "snow suit" desc = "A standard snow suit. It can protect the wearer from extreme cold." icon_state = "snowsuit_alpha" - flags_armor_protection = CHEST|GROIN|ARMS - flags_cold_protection = CHEST|GROIN|ARMS|LEGS + armor_protection_flags = CHEST|GROIN|ARMS + cold_protection_flags = CHEST|GROIN|ARMS|LEGS soft_armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0) min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE blood_overlay_type = "armor" diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index c90d2fee6a8c9..4497024be51ed 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -3,7 +3,7 @@ desc = "A suit that protects against minor chemical spills." icon_state = "labcoat" blood_overlay_type = "coat" - flags_armor_protection = CHEST|ARMS + armor_protection_flags = CHEST|ARMS permeability_coefficient = 0.6 soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 50, FIRE = 0, ACID = 0) allowed = list( @@ -63,33 +63,37 @@ name = "chief medical officer's labcoat" desc = "Bluer than the standard model." icon_state = "labcoat_cmo" - /obj/item/clothing/suit/storage/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 = "labgreen" -/obj/item/clothing/suit/storage/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" +/obj/item/clothing/suit/storage/labcoat/paramedic + name = "paramedic's labcoat" + desc = "A suit that holds small medical items for responding and tending to emergencies." + icon_state = "labcoat_paramedic" /obj/item/clothing/suit/storage/labcoat/chemist - name = "Chemist labcoat" + name = "chemist labcoat" desc = "A suit that protects against minor chemical spills. Has an orange stripe on the shoulder." icon_state = "labcoat_chem" /obj/item/clothing/suit/storage/labcoat/virologist - name = "Virologist labcoat" + 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_viro" +/obj/item/clothing/suit/storage/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" + /obj/item/clothing/suit/storage/labcoat/science - name = "Scientist labcoat" + name = "scientist labcoat" desc = "A suit that protects against minor chemical spills. Has a purple stripe on the shoulder." icon_state = "labcoat_sci" /obj/item/clothing/suit/storage/labcoat/researcher - name = "Researcher's labcoat" + name = "researcher's labcoat" desc = "A high quality labcoat, seemingly worn by scholars and researchers alike. It has a distinct rough feel to it, and goads you towards adventure." icon_state = "labcoat_researcher" diff --git a/code/modules/clothing/suits/marine_armor.dm b/code/modules/clothing/suits/marine_armor.dm index 1e672f8b7cd95..51febd51386ba 100644 --- a/code/modules/clothing/suits/marine_armor.dm +++ b/code/modules/clothing/suits/marine_armor.dm @@ -9,13 +9,13 @@ item_state = "armor" item_icons = list( slot_wear_suit_str = 'icons/mob/clothing/suits/marine_armor.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', ) - flags_atom = CONDUCT - flags_armor_protection = CHEST|GROIN|ARMS|LEGS|HANDS|FEET - flags_cold_protection = CHEST|GROIN|ARMS|LEGS|HANDS|FEET - flags_heat_protection = CHEST|GROIN|ARMS|LEGS|HANDS|FEET + atom_flags = CONDUCT + armor_protection_flags = CHEST|GROIN|ARMS|LEGS|HANDS|FEET + cold_protection_flags = CHEST|GROIN|ARMS|LEGS|HANDS|FEET + heat_protection_flags = CHEST|GROIN|ARMS|LEGS|HANDS|FEET min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECTION_TEMPERATURE max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE blood_overlay_type = "armor" @@ -38,32 +38,31 @@ /obj/item/tool/pickaxe/plasmacutter, ) var/locate_cooldown = 0 //Cooldown for SL locator - var/list/armor_overlays + var/list/armor_overlays = list() actions_types = list(/datum/action/item_action/toggle/suit_toggle) - flags_armor_features = ARMOR_LAMP_OVERLAY - flags_item = SYNTH_RESTRICTED|IMPEDE_JETPACK + armor_features_flags = ARMOR_LAMP_OVERLAY + item_flags = SYNTH_RESTRICTED|IMPEDE_JETPACK w_class = WEIGHT_CLASS_HUGE equip_delay_self = 2 SECONDS unequip_delay_self = 2 SECONDS - flags_item_map_variant = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_PRISON_VARIANT) + item_map_variant_flags = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_PRISON_VARIANT) /obj/item/clothing/suit/storage/marine/Initialize(mapload) . = ..() - armor_overlays = list("lamp") //Just one for now, can add more later. update_icon() -/obj/item/clothing/suit/storage/marine/update_icon(mob/user) - var/image/I - I = armor_overlays["lamp"] - overlays -= I - qdel(I) - if(flags_armor_features & ARMOR_LAMP_OVERLAY) - I = image(icon, src, flags_armor_features & ARMOR_LAMP_ON? "lamp-on" : "lamp-off") +/obj/item/clothing/suit/storage/marine/turn_light(mob/user, toggle_on) + . = ..() + user?.update_inv_wear_suit() + +/obj/item/clothing/suit/storage/marine/update_overlays() + . = ..() + if(armor_features_flags & ARMOR_LAMP_OVERLAY) + var/image/I = image(icon, src, armor_features_flags & ARMOR_LAMP_ON? "lamp-on" : "lamp-off") armor_overlays["lamp"] = I - overlays += I + . += I else armor_overlays["lamp"] = null - user?.update_inv_wear_suit() /obj/item/clothing/suit/storage/marine/apply_custom(mutable_appearance/standing, inhands, icon_used, state_used) if(inhands) @@ -87,8 +86,8 @@ var/mob/living/carbon/human/H = user if(H.wear_suit != src) return - turn_light(user, !light_on) - return TRUE + if(turn_light(user, !light_on) == CHECKS_PASSED) + return TRUE /obj/item/clothing/suit/storage/marine/item_action_slot_check(mob/user, slot) if(!ishuman(user)) @@ -104,7 +103,25 @@ item_state = "mech_pilot_suit" slowdown = SLOWDOWN_ARMOR_LIGHT soft_armor = list(MELEE = 45, BULLET = 55, LASER = 55, ENERGY = 20, BOMB = 45, BIO = 30, FIRE = 25, ACID = 35) - flags_item_map_variant = NONE + item_map_variant_flags = NONE + +/obj/item/clothing/suit/storage/marine/assault_crewman + name = "\improper PAS-73 pattern tanker armor" + desc = "A somewhat sparsely armored but robust armored vest. Used by tankers, mostly to absorb bumps in the road as they drive over enemies." + icon_state = "assault_crewman_suit" + item_state = "assault_crewman_suit" + slowdown = SLOWDOWN_ARMOR_LIGHT + soft_armor = list(MELEE = 45, BULLET = 55, LASER = 55, ENERGY = 20, BOMB = 45, BIO = 30, FIRE = 25, ACID = 35) + item_map_variant_flags = NONE + +/obj/item/clothing/suit/storage/marine/transport_crewman + name = "\improper PAS-74 pattern transport armor" + desc = "A somewhat sparsely armored but robust armored vest. Used by transport crewmen so that they can pretend that they may survice when their vehicle is overrun." + icon_state = "transport_crewman_suit" + item_state = "transport_crewman_suit" + slowdown = SLOWDOWN_ARMOR_LIGHT + soft_armor = list(MELEE = 45, BULLET = 55, LASER = 55, ENERGY = 20, BOMB = 45, BIO = 30, FIRE = 25, ACID = 35) + item_map_variant_flags = NONE /obj/item/clothing/suit/storage/marine/riot name = "\improper M5 riot control armor" @@ -124,7 +141,7 @@ /obj/item/storage/belt/knifepouch, /obj/item/weapon/twohanded, ) - flags_item_map_variant = NONE + item_map_variant_flags = NONE //===========================SPECIALIST================================ @@ -137,23 +154,23 @@ slowdown = SLOWDOWN_ARMOR_MEDIUM supporting_limbs = CHEST | GROIN | ARM_LEFT | ARM_RIGHT | HAND_LEFT | HAND_RIGHT | LEG_LEFT | LEG_RIGHT | FOOT_LEFT | FOOT_RIGHT | HEAD //B18 effectively stabilizes these. resistance_flags = UNACIDABLE - obj_flags = AUTOBALANCE_CHECK + item_flags = AUTOBALANCE_CHECK /obj/item/clothing/suit/storage/marine/specialist/Initialize(mapload, ...) . = ..() AddComponent(/datum/component/suit_autodoc) AddComponent(/datum/component/stun_mitigation, slot_override = SLOT_WEAR_SUIT, shield_cover = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 50, FIRE = 50, ACID = 50)) AddElement(/datum/element/limb_support, supporting_limbs) - if(obj_flags & AUTOBALANCE_CHECK) + if(item_flags & AUTOBALANCE_CHECK) SSmonitor.stats.b18_in_use += src /obj/item/clothing/suit/storage/marine/specialist/Destroy() - if(obj_flags & AUTOBALANCE_CHECK) + if(item_flags & AUTOBALANCE_CHECK) SSmonitor.stats.b18_in_use -= src return ..() /obj/item/clothing/suit/storage/marine/specialist/valhalla - obj_flags = NONE + item_flags = NONE /obj/item/clothing/suit/storage/marine/B17 name = "\improper B17 defensive armor" @@ -162,20 +179,20 @@ soft_armor = list(MELEE = 75, BULLET = 75, LASER = 50, ENERGY = 55, BOMB = 100, BIO = 55, FIRE = 75, ACID = 65) max_heat_protection_temperature = HEAVYARMOR_MAX_HEAT_PROTECTION_TEMPERATURE slowdown = SLOWDOWN_ARMOR_MEDIUM - obj_flags = AUTOBALANCE_CHECK + item_flags = AUTOBALANCE_CHECK /obj/item/clothing/suit/storage/marine/B17/Initialize(mapload, ...) . = ..() - if(obj_flags & AUTOBALANCE_CHECK) + if(item_flags & AUTOBALANCE_CHECK) SSmonitor.stats.b17_in_use += src /obj/item/clothing/suit/storage/marine/B17/Destroy() - if(obj_flags & AUTOBALANCE_CHECK) + if(item_flags & AUTOBALANCE_CHECK) SSmonitor.stats.b17_in_use -= src return ..() /obj/item/clothing/suit/storage/marine/B17/valhalla - obj_flags = NONE + item_flags = NONE //////////////////////////////// @@ -184,7 +201,7 @@ desc = "A somewhat outdated but robust armored vest, still in use despite the rise of exoskeleton armor due to ease of use and manufacturing. It offers more protection against the exotic dangers that technicians face." icon_state = "tanker" soft_armor = list(MELEE = 40, BULLET = 55, LASER = 60, ENERGY = 45, BOMB = 60, BIO = 45, FIRE = 45, ACID = 65) - flags_item_map_variant = NONE + item_map_variant_flags = NONE /obj/item/clothing/suit/storage/marine/officer name = "\improper PAS-N3 pattern officer armor" @@ -192,7 +209,7 @@ icon_state = "officer" soft_armor = list(MELEE = 40, BULLET = 60, LASER = 60, ENERGY = 45, BOMB = 45, BIO = 45, FIRE = 45, ACID = 50) slowdown = 0.5 - flags_item_map_variant = NONE + item_map_variant_flags = NONE allowed = list( /obj/item/weapon/gun, /obj/item/tank/emergency_oxygen, @@ -223,16 +240,16 @@ icon = 'icons/obj/clothing/suits/ert_suits.dmi' item_icons = list( slot_wear_suit_str = 'icons/mob/clothing/suits/ert_suits.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', ) - flags_armor_features = ARMOR_LAMP_OVERLAY + armor_features_flags = ARMOR_LAMP_OVERLAY /obj/item/clothing/suit/storage/marine/veteran/pmc name = "\improper M4 pattern PMC armor" desc = "A common armor vest that is designed for high-profile security operators and corporate mercenaries in mind." icon_state = "pmc_armor" - soft_armor = list(MELEE = 55, BULLET = 70, LASER = 60, ENERGY = 38, BOMB = 50, BIO = 15, FIRE = 38, ACID = 45) + soft_armor = list(MELEE = 55, BULLET = 70, LASER = 60, ENERGY = 55, BOMB = 50, BIO = 15, FIRE = 38, ACID = 45) slowdown = SLOWDOWN_ARMOR_LIGHT allowed = list( /obj/item/weapon/gun, @@ -248,7 +265,7 @@ /obj/item/weapon/claymore/mercsword/machete, /obj/item/weapon/combat_knife, ) - flags_item_map_variant = NONE + item_map_variant_flags = NONE /obj/item/clothing/suit/storage/marine/veteran/pmc/leader name = "\improper M4 pattern PMC leader armor" @@ -261,8 +278,8 @@ name = "\improper M4 pattern PMC sniper armor" icon_state = "pmc_sniper" soft_armor = list(MELEE = 55, BULLET = 65, LASER = 55, ENERGY = 60, BOMB = 75, BIO = 10, FIRE = 60, ACID = 60) - flags_inventory = BLOCKSHARPOBJ - flags_inv_hide = HIDELOWHAIR + inventory_flags = BLOCKSHARPOBJ + inv_hide_flags = HIDELOWHAIR /obj/item/clothing/suit/storage/marine/veteran/pmc/gunner name = "\improper PMC gunner armor" @@ -270,7 +287,7 @@ icon_state = "pmc_heavyarmor" slowdown = SLOWDOWN_ARMOR_HEAVY soft_armor = list(MELEE = 65, BULLET = 80, LASER = 70, ENERGY = 70, BOMB = 80, BIO = 30, FIRE = 65, ACID = 65) - flags_item_map_variant = NONE + item_map_variant_flags = NONE /*===========================Death Commando============================*/ /obj/item/clothing/suit/storage/marine/veteran/pmc/commando @@ -297,12 +314,12 @@ icon = 'icons/obj/clothing/suits/ert_suits.dmi' item_icons = list( slot_wear_suit_str = 'icons/mob/clothing/suits/ert_suits.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', ) icon_state = "guardarmor" soft_armor = list(MELEE = 75, BULLET = 65, LASER = 60, ENERGY = 60, BOMB = 50, BIO = 0, FIRE = 60, ACID = 60) - flags_item_map_variant = NONE + item_map_variant_flags = NONE /obj/item/clothing/suit/storage/marine/imperial/sergeant // SL armour, better than flak, covers more @@ -338,6 +355,17 @@ icon_state = "commissar_coat" item_state = "commissar_coat" soft_armor = list(MELEE = 75, BULLET = 60, LASER = 55, ENERGY = 40, BOMB = 45, BIO = 15, FIRE = 40, ACID = 40) + allowed = list( + /obj/item/weapon/gun, + /obj/item/instrument, + /obj/item/storage/belt/sparepouch, + /obj/item/storage/holster/blade, + /obj/item/weapon/claymore, + /obj/item/storage/holster/belt, + /obj/item/storage/belt/knifepouch, + /obj/item/weapon/twohanded, + /obj/item/tool/pickaxe/plasmacutter, + ) /*===========================U.S.L================================*/ @@ -345,13 +373,13 @@ icon = 'icons/obj/clothing/suits/ert_suits.dmi' item_icons = list( slot_wear_suit_str = 'icons/mob/clothing/suits/ert_suits.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', ) - flags_atom = CONDUCT - flags_armor_protection = CHEST|GROIN|ARMS|LEGS|FEET|HANDS - flags_cold_protection = CHEST|GROIN|ARMS|LEGS|FEET|HANDS - flags_heat_protection =CHEST|GROIN|ARMS|LEGS|FEET|HANDS + atom_flags = CONDUCT + armor_protection_flags = CHEST|GROIN|ARMS|LEGS|FEET|HANDS + cold_protection_flags = CHEST|GROIN|ARMS|LEGS|FEET|HANDS + heat_protection_flags =CHEST|GROIN|ARMS|LEGS|FEET|HANDS min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECTION_TEMPERATURE max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE blood_overlay_type = "armor" @@ -371,8 +399,8 @@ /obj/item/storage/holster/blade, /obj/item/weapon/twohanded, ) - flags_armor_features = ARMOR_LAMP_OVERLAY - flags_item = SYNTH_RESTRICTED + armor_features_flags = ARMOR_LAMP_OVERLAY + item_flags = SYNTH_RESTRICTED var/locate_cooldown = 0 //Cooldown for SL locator var/armor_overlays["lamp"] actions_types = list(/datum/action/item_action/toggle) @@ -382,18 +410,14 @@ armor_overlays = list("lamp") update_icon() -/obj/item/clothing/suit/storage/faction/update_icon(mob/user) - var/image/I - I = armor_overlays["lamp"] - overlays -= I - qdel(I) - if(flags_armor_features & ARMOR_LAMP_OVERLAY) - I = image(icon, src, flags_armor_features & ARMOR_LAMP_ON? "lamp-on" : "lamp-off") +/obj/item/clothing/suit/storage/faction/update_overlays() + . = ..() + if(armor_features_flags & ARMOR_LAMP_OVERLAY) + var/image/I = image(icon, src, armor_features_flags & ARMOR_LAMP_ON? "lamp-on" : "lamp-off") armor_overlays["lamp"] = I - overlays += I - else armor_overlays["lamp"] = null - if(user) user.update_inv_wear_suit() - + . += I + else + armor_overlays["lamp"] = null /obj/item/clothing/suit/storage/faction/attack_self(mob/user) if(!isturf(user.loc)) @@ -407,8 +431,8 @@ var/mob/living/carbon/human/H = user if(H.wear_suit != src) return - turn_light(user, !light_on) - return 1 + if(turn_light(user, !light_on) == CHECKS_PASSED) + return TRUE /obj/item/clothing/suit/storage/faction/item_action_slot_check(mob/user, slot) if(!ishuman(user)) return FALSE @@ -420,7 +444,7 @@ desc = "Standard body armor of the USL pirates, the UM5 (United Medium MK5) is a medium body armor, roughly on par with the venerable M3 pattern body armor in service with the TGMC." icon_state = "upp_armor" slowdown = SLOWDOWN_ARMOR_MEDIUM - flags_armor_protection = CHEST|GROIN|ARMS|LEGS|FEET|HANDS + armor_protection_flags = CHEST|GROIN|ARMS|LEGS|FEET|HANDS soft_armor = list(MELEE = 55, BULLET = 60, LASER = 60, ENERGY = 60, BOMB = 55, BIO = 10, FIRE = 60, ACID = 60) /// Modified version of the armor for HvH combat. Stats are based on medium armor, with tyr mark 2. @@ -467,9 +491,9 @@ desc = "A armored protective chestplate scrapped together from various plates. It keeps up remarkably well, as the craftsmanship is solid, and the design mirrors such armors in the UPP and the TGMC." icon_state = "freelancer_armor" slowdown = SLOWDOWN_ARMOR_LIGHT - flags_armor_protection = CHEST|GROIN|ARMS|LEGS|FEET|HANDS - flags_cold_protection = CHEST|GROIN|ARMS|LEGS|FEET|HANDS - flags_heat_protection =CHEST|GROIN|ARMS|LEGS|FEET|HANDS + armor_protection_flags = CHEST|GROIN|ARMS|LEGS|FEET|HANDS + cold_protection_flags = CHEST|GROIN|ARMS|LEGS|FEET|HANDS + heat_protection_flags =CHEST|GROIN|ARMS|LEGS|FEET|HANDS soft_armor = list(MELEE = 50, BULLET = 60, LASER = 50, ENERGY = 60, BOMB = 40, BIO = 10, FIRE = 60, ACID = 50) attachments_by_slot = list( ATTACHMENT_SLOT_STORAGE, @@ -540,10 +564,10 @@ desc = "The hauberk of a colonist militia member, created from boiled leather and some modern armored plates. While primitive compared to most modern suits of armor, it gives the wearer almost perfect mobility, which suits the needs of the local colonists. " icon_state = "rebel_armor" slowdown = SLOWDOWN_ARMOR_VERY_LIGHT - flags_armor_protection = CHEST|GROIN|ARMS|LEGS|FEET|HANDS - flags_cold_protection = CHEST|GROIN|ARMS|LEGS|FEET|HANDS - flags_heat_protection =CHEST|GROIN|ARMS|LEGS|FEET|HANDS - flags_item = SYNTH_RESTRICTED + armor_protection_flags = CHEST|GROIN|ARMS|LEGS|FEET|HANDS + cold_protection_flags = CHEST|GROIN|ARMS|LEGS|FEET|HANDS + heat_protection_flags =CHEST|GROIN|ARMS|LEGS|FEET|HANDS + item_flags = SYNTH_RESTRICTED soft_armor = list(MELEE = 40, BULLET = 40, LASER = 40, ENERGY = 30, BOMB = 60, BIO = 30, FIRE = 30, ACID = 30) allowed = list( /obj/item/weapon/twohanded, @@ -580,9 +604,9 @@ desc = "A green jacket worn by TGMC personnel. The back has the flag of the TerraGov on it." icon_state = "RO_jacket" blood_overlay_type = "coat" - flags_armor_protection = CHEST|GROIN|ARMS|LEGS|FEET|HANDS - flags_cold_protection = CHEST|GROIN|ARMS|LEGS|FEET|HANDS - flags_heat_protection =CHEST|GROIN|ARMS|LEGS|FEET|HANDS + armor_protection_flags = CHEST|GROIN|ARMS|LEGS|FEET|HANDS + cold_protection_flags = CHEST|GROIN|ARMS|LEGS|FEET|HANDS + heat_protection_flags =CHEST|GROIN|ARMS|LEGS|FEET|HANDS /*===========================HELGHAST - MERCENARY================================*/ @@ -655,15 +679,15 @@ icon = 'icons/obj/clothing/suits/ert_suits.dmi' item_icons = list( slot_wear_suit_str = 'icons/mob/clothing/suits/ert_suits.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', ) icon_state = "som_armor" item_state = "som_armor" slowdown = SLOWDOWN_ARMOR_LIGHT - flags_armor_protection = CHEST|GROIN|ARMS|LEGS|HANDS|FEET + armor_protection_flags = CHEST|GROIN|ARMS|LEGS|HANDS|FEET soft_armor = list(MELEE = 50, BULLET = 55, LASER = 55, ENERGY = 55, BOMB = 55, BIO = 55, FIRE = 55, ACID = 55) - flags_item_map_variant = NONE + item_map_variant_flags = NONE /obj/item/clothing/suit/storage/marine/som/veteran name = "\improper S12 combat Hauberk" @@ -671,7 +695,7 @@ icon_state = "som_armor_veteran" item_state = "som_armor_veteran" slowdown = SLOWDOWN_ARMOR_HEAVY - flags_armor_protection = CHEST|GROIN|ARMS|LEGS|HANDS|FEET + armor_protection_flags = CHEST|GROIN|ARMS|LEGS|HANDS|FEET soft_armor = list(MELEE = 65, BULLET = 70, LASER = 70, ENERGY = 55, BOMB = 55, BIO = 55, FIRE = 55, ACID = 60) /obj/item/clothing/suit/storage/marine/som/leader @@ -680,7 +704,7 @@ icon_state = "som_armor_leader" item_state = "som_armor_leader" slowdown = SLOWDOWN_ARMOR_MEDIUM - flags_armor_protection = CHEST|GROIN|ARMS|LEGS|HANDS|FEET + armor_protection_flags = CHEST|GROIN|ARMS|LEGS|HANDS|FEET soft_armor = list(MELEE = 55, BULLET = 50, LASER = 40, ENERGY = 55, BOMB = 55, BIO = 55, FIRE = 55, ACID = 60) /obj/item/clothing/suit/storage/marine/icc @@ -689,19 +713,57 @@ icon = 'icons/obj/clothing/suits/ert_suits.dmi' item_icons = list( slot_wear_suit_str = 'icons/mob/clothing/suits/ert_suits.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', ) icon_state = "icc" slowdown = SLOWDOWN_ARMOR_MEDIUM - flags_armor_protection = CHEST|GROIN|ARMS|LEGS|FEET|HANDS - flags_cold_protection = CHEST|GROIN|ARMS|LEGS|FEET|HANDS - flags_heat_protection =CHEST|GROIN|ARMS|LEGS|FEET|HANDS + armor_protection_flags = CHEST|GROIN|ARMS|LEGS|FEET|HANDS + cold_protection_flags = CHEST|GROIN|ARMS|LEGS|FEET|HANDS + heat_protection_flags =CHEST|GROIN|ARMS|LEGS|FEET|HANDS soft_armor = list(MELEE = 50, BULLET = 60, LASER = 50, ENERGY = 60, BOMB = 70, BIO = 10, FIRE = 60, ACID = 50) - flags_item_map_variant = NONE + item_map_variant_flags = NONE /obj/item/clothing/suit/storage/marine/icc/guard name = "\improper Modelle/19 combat armor" desc = "A piece of ICCGF body armor, worn by specialized infantry. Most Infantry actions in the ICC forces are done by adhoc personnel due to constant shortages of manpower, however most real Infantry divisions are of high quality, and are better known as 'Guardsmen'. Protects well from most sources, and will entirely protect from explosions." icon_state = "icc_guard" soft_armor = list(MELEE = 60, BULLET = 65, LASER = 40, ENERGY = 60, BOMB = 85, BIO = 10, FIRE = 55, ACID = 40) + +/obj/item/clothing/suit/storage/marine/icc/guard/heavy + name = "\improper Modelle/22 'Cuirassier' combat armor" + desc = "A piece of ICCGF body armor, worn by specialized infantry. Most Infantry actions in the ICC forces are done by adhoc personnel due to constant shortages of manpower, however most real Infantry divisions are of high quality, and are better known as 'Guardsmen'. Protects well from most sources, and will entirely protect from explosions." + icon_state = "icc_guard_heavy" + soft_armor = list(MELEE = 70, BULLET = 75, LASER = 40, ENERGY = 60, BOMB = 90, BIO = 10, FIRE = 55, ACID = 40) + +//===========================SPEC OPS================================ + +/obj/item/clothing/suit/storage/marine/specops + name = "Ballistic vest" + desc = "Civilian type armor, made to combat both melee and projectiles." + icon = 'icons/mob/clothing/suits/ert_suits.dmi' + item_icons = list( + slot_wear_suit_str = 'icons/mob/clothing/suits/ert_suits.dmi', + ) + icon_state = "specops_vest" + soft_armor = list(MELEE = 30, BULLET = 50, LASER = 20, ENERGY = 25, BOMB = 30, BIO = 5, FIRE = 25, ACID = 30) + slowdown = SLOWDOWN_ARMOR_LIGHT + armor_protection_flags = CHEST|GROIN + armor_features_flags = NONE + +/obj/item/clothing/suit/storage/marine/specops/support + name = "Ballistic vest" + desc = "Civilian type armor, made to combat both melee and projectiles." + icon_state = "specops_vest_support" + +/obj/item/clothing/suit/storage/marine/specops/medic + name = "Ballistic vest" + desc = "Civilian type armor, made to combat both melee and projectiles." + icon_state = "specops_vest_medic" + +/obj/item/clothing/suit/storage/marine/specops/leader + name = "Ballistic vest" + desc = "Civilian type armor, made to combat both melee and projectiles. Comes with tactical elbow pads." + icon_state = "specops_vest_leader" + soft_armor = list(MELEE = 50, BULLET = 50, LASER = 40, ENERGY = 35, BOMB = 30, BIO = 5, FIRE = 25, ACID = 30) + slowdown = SLOWDOWN_ARMOR_MEDIUM diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 6605025912769..f181cb246c69d 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -14,7 +14,7 @@ icon_state = "bluetag" item_state = "bluetag" blood_overlay_type = "armor" - flags_armor_protection = CHEST + armor_protection_flags = CHEST allowed = list (/obj/item/weapon/gun) siemens_coefficient = 3 @@ -24,7 +24,7 @@ icon_state = "redtag" item_state = "redtag" blood_overlay_type = "armor" - flags_armor_protection = CHEST + armor_protection_flags = CHEST allowed = list (/obj/item/weapon/gun) siemens_coefficient = 3 @@ -36,7 +36,7 @@ desc = "Yarr." icon_state = "pirate" item_state = "pirate" - flags_armor_protection = CHEST|ARMS + armor_protection_flags = CHEST|ARMS /obj/item/clothing/suit/hgpirate @@ -44,9 +44,9 @@ desc = "Yarr." icon_state = "hgpirate" item_state = "hgpirate" - flags_inv_hide = HIDEJUMPSUIT - flags_armor_protection = CHEST|GROIN|ARMS|LEGS - flags_item = SYNTH_RESTRICTED + inv_hide_flags = HIDEJUMPSUIT + armor_protection_flags = CHEST|GROIN|ARMS|LEGS + item_flags = SYNTH_RESTRICTED soft_armor = list(MELEE = 60, BULLET = 90, LASER = 60, ENERGY = 20, BOMB = 25, BIO = 10, FIRE = 20, ACID = 20) @@ -55,8 +55,8 @@ desc = "Suit for a cyborg costume." icon_state = "death" item_state = "death" - flags_atom = CONDUCT - flags_inv_hide = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + atom_flags = CONDUCT + inv_hide_flags = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT /obj/item/clothing/suit/johnny_coat name = "johnny~~ coat" @@ -69,17 +69,17 @@ desc = "This pretty much looks ridiculous." icon_state = "justice" item_state = "justice" - flags_inv_hide = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - flags_armor_protection = CHEST|GROIN|ARMS|HANDS|LEGS|FEET + inv_hide_flags = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + armor_protection_flags = CHEST|GROIN|ARMS|HANDS|LEGS|FEET /obj/item/clothing/suit/judgerobe name = "judge's robe" desc = "This robe commands authority." icon_state = "judge" item_state = "judge" - flags_armor_protection = CHEST|GROIN|LEGS|ARMS + armor_protection_flags = CHEST|GROIN|LEGS|ARMS allowed = list(/obj/item/storage/fancy/cigarettes,/obj/item/spacecash) - flags_inv_hide = HIDEJUMPSUIT + inv_hide_flags = HIDEJUMPSUIT /obj/item/clothing/suit/wcoat name = "waistcoat" @@ -87,15 +87,15 @@ icon_state = "vest" item_state = "wcoat" blood_overlay_type = "armor" - flags_armor_protection = CHEST|GROIN + armor_protection_flags = CHEST|GROIN -/obj/item/clothing/suit/apron/overalls +/obj/item/clothing/suit/storage/apron/overalls name = "coveralls" desc = "A set of denim overalls." icon_state = "overalls" item_state = "overalls" - flags_armor_protection = CHEST|GROIN|LEGS + armor_protection_flags = CHEST|GROIN|LEGS /obj/item/clothing/suit/syndicatefake @@ -105,16 +105,16 @@ desc = "A plastic replica of the syndicate space suit, you'll look just like a real murderous syndicate agent in this! This is a toy, it is not made for use in space!" w_class = WEIGHT_CLASS_NORMAL allowed = list(/obj/item/flashlight,/obj/item/tank/emergency_oxygen,/obj/item/toy) - flags_inv_hide = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - flags_armor_protection = CHEST|GROIN|ARMS|HANDS|LEGS|FEET + inv_hide_flags = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + armor_protection_flags = CHEST|GROIN|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 = "hastur" - flags_armor_protection = CHEST|GROIN|LEGS|FEET|ARMS - flags_inv_hide = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + armor_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS + inv_hide_flags = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT /obj/item/clothing/suit/imperium_monk @@ -122,8 +122,8 @@ desc = "Have YOU killed a xenos today?" icon_state = "imperium_monk" item_state = "imperium_monk" - flags_armor_protection = HEAD|CHEST|GROIN|LEGS|FEET|ARMS - flags_inv_hide = HIDESHOES|HIDEJUMPSUIT + armor_protection_flags = HEAD|CHEST|GROIN|LEGS|FEET|ARMS + inv_hide_flags = HIDESHOES|HIDEJUMPSUIT /obj/item/clothing/suit/chickensuit @@ -131,8 +131,8 @@ desc = "A suit made long ago by the ancient empire KFC." icon_state = "chickensuit" item_state = "chickensuit" - flags_armor_protection = CHEST|ARMS|GROIN|LEGS|FEET - flags_inv_hide = HIDESHOES|HIDEJUMPSUIT + armor_protection_flags = CHEST|ARMS|GROIN|LEGS|FEET + inv_hide_flags = HIDESHOES|HIDEJUMPSUIT siemens_coefficient = 2 @@ -141,8 +141,8 @@ desc = "A suit that looks like a primate" icon_state = "monkeysuit" item_state = "monkeysuit" - flags_armor_protection = CHEST|ARMS|GROIN|LEGS|FEET|HANDS - flags_inv_hide = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + armor_protection_flags = CHEST|ARMS|GROIN|LEGS|FEET|HANDS + inv_hide_flags = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT siemens_coefficient = 2 @@ -151,8 +151,8 @@ desc = "This is a nice holiday my son." icon_state = "holidaypriest" item_state = "holidaypriest" - flags_armor_protection = CHEST|GROIN|LEGS|ARMS - flags_inv_hide = HIDEJUMPSUIT + armor_protection_flags = CHEST|GROIN|LEGS|ARMS + inv_hide_flags = HIDEJUMPSUIT /obj/item/clothing/suit/cardborg @@ -160,8 +160,8 @@ desc = "An ordinary cardboard box with holes cut in the sides." icon_state = "cardborg" item_state = "cardborg" - flags_armor_protection = CHEST|GROIN - flags_inv_hide = HIDEJUMPSUIT + armor_protection_flags = CHEST|GROIN + inv_hide_flags = HIDEJUMPSUIT /obj/item/clothing/suit/white_dress_jacket @@ -183,8 +183,8 @@ desc = "A suit that completely restrains the wearer." icon_state = "straight_jacket" item_state = "straight_jacket" - flags_armor_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - flags_inv_hide = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + armor_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + inv_hide_flags = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT /obj/item/clothing/suit/straight_jacket/equipped(mob/living/carbon/user, slot) @@ -209,7 +209,7 @@ 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 = "ianshirt" - flags_armor_protection = CHEST|ARMS + armor_protection_flags = CHEST|ARMS //Blue suit jacket toggle /obj/item/clothing/suit/suit/verb/toggle() @@ -241,14 +241,14 @@ desc = "Slightly old-fashioned sleepwear." icon_state = "blue_pyjamas" item_state = "blue_pyjamas" - flags_armor_protection = CHEST|GROIN|ARMS|LEGS + armor_protection_flags = CHEST|GROIN|ARMS|LEGS /obj/item/clothing/under/redpyjamas name = "red pyjamas" desc = "Slightly old-fashioned sleepwear." icon_state = "red_pyjamas" item_state = "red_pyjamas" - flags_armor_protection = CHEST|GROIN|ARMS|LEGS + armor_protection_flags = CHEST|GROIN|ARMS|LEGS //coats @@ -275,13 +275,13 @@ desc = "A suit made out of chitinous alien hide." icon_state = "xenos" item_state = "xenos_helm" - flags_armor_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - flags_inv_hide = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + armor_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + inv_hide_flags = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT siemens_coefficient = 2 //swimsuit /obj/item/clothing/under/swimsuit/ siemens_coefficient = 1 - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/under/swimsuit/black name = "black swimsuit" @@ -328,12 +328,12 @@ desc = "Your classic, non-racist poncho. This one is red." icon_state = "redponcho" -/obj/item/clothing/suit/bomber +/obj/item/clothing/suit/storage/bomber name = "bomber jacket" desc = "A well-worn WW2 leather bomber jacket." icon_state = "bomber" - flags_armor_protection = CHEST|ARMS - flags_cold_protection = CHEST|ARMS + armor_protection_flags = CHEST|ARMS + cold_protection_flags = CHEST|ARMS min_cold_protection_temperature = T0C siemens_coefficient = 0.7 allowed = list ( @@ -350,17 +350,17 @@ icon = 'icons/obj/clothing/suits/ert_suits.dmi' item_icons = list( slot_wear_suit_str = 'icons/mob/clothing/suits/marine_armor.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', ) icon_state = "rebel_armor" item_state = "rebel_armor" - flags_armor_protection = CHEST|GROIN|LEGS + armor_protection_flags = CHEST|GROIN|LEGS /obj/item/clothing/suit/techpriest name = "Techpriest Robes" desc = "Praise the omnissiah!" icon_state = "tp_bodyrobes" item_state = "tp_bodyrobes" - flags_armor_protection = CHEST|GROIN|LEGS|ARMS + armor_protection_flags = CHEST|GROIN|LEGS|ARMS diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index bd218054515a3..bdbdb87ceb7e6 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -18,15 +18,15 @@ w_class = WEIGHT_CLASS_BULKY//bulky item gas_transfer_coefficient = 0.90 permeability_coefficient = 0.50 - flags_item = IMPEDE_JETPACK - flags_armor_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + item_flags = IMPEDE_JETPACK + armor_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS allowed = list(/obj/item/flashlight,/obj/item/tank/emergency_oxygen,/obj/item/tool/extinguisher) slowdown = 1 - flags_inventory = NOPRESSUREDMAGE - flags_inv_hide = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - flags_heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + inventory_flags = NOPRESSUREDMAGE + inv_hide_flags = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + heat_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE - flags_cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + cold_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS /obj/item/clothing/suit/fire/heavy name = "firesuit" @@ -45,9 +45,9 @@ desc = "Use in case of bomb." icon_state = "bombsuit" soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 100, BIO = 0, FIRE = 0, ACID = 0) - flags_inventory = COVEREYES|COVERMOUTH - flags_inv_hide = HIDEFACE|HIDEMASK|HIDEEARS|HIDEALLHAIR - flags_armor_protection = HEAD|FACE|EYES + inventory_flags = COVEREYES|COVERMOUTH + inv_hide_flags = HIDEFACE|HIDEMASK|HIDEEARS|HIDEALLHAIR + armor_protection_flags = HEAD|FACE|EYES siemens_coefficient = 0 @@ -61,21 +61,21 @@ permeability_coefficient = 0.01 slowdown = 2 soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 100, BIO = 0, FIRE = 0, ACID = 0) - flags_inv_hide = HIDEJUMPSUIT - flags_heat_protection = CHEST|GROIN + inv_hide_flags = HIDEJUMPSUIT + heat_protection_flags = CHEST|GROIN max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE siemens_coefficient = 0 /obj/item/clothing/head/bomb_hood/security icon_state = "bombsuitsec" item_state = "bombsuitsec" - flags_armor_protection = HEAD + armor_protection_flags = HEAD /obj/item/clothing/suit/bomb_suit/security icon_state = "bombsuitsec" item_state = "bombsuitsec" allowed = list(/obj/item/weapon/gun,/obj/item/weapon/baton,/obj/item/restraints/handcuffs) - flags_armor_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + armor_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS /* * Radiation protection @@ -84,9 +84,9 @@ name = "Radiation Hood" icon_state = "rad" desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation" - flags_inventory = COVEREYES|COVERMOUTH - flags_inv_hide = HIDEFACE|HIDEMASK|HIDEEARS|HIDEALLHAIR - flags_armor_protection = HEAD|FACE|EYES + inventory_flags = COVEREYES|COVERMOUTH + inv_hide_flags = HIDEFACE|HIDEMASK|HIDEEARS|HIDEALLHAIR + armor_protection_flags = HEAD|FACE|EYES soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 60, FIRE = 0, ACID = 0) @@ -98,8 +98,8 @@ w_class = WEIGHT_CLASS_BULKY//bulky item gas_transfer_coefficient = 0.90 permeability_coefficient = 0.50 - flags_armor_protection = CHEST|GROIN|LEGS|ARMS|HANDS|FEET + armor_protection_flags = CHEST|GROIN|LEGS|ARMS|HANDS|FEET allowed = list(/obj/item/flashlight,/obj/item/tank/emergency_oxygen,/obj/item/clothing/head/radiation,/obj/item/clothing/mask/gas) slowdown = 1.5 soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 60, FIRE = 0, ACID = 0) - flags_inv_hide = HIDEJUMPSUIT + inv_hide_flags = HIDEJUMPSUIT diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index b5c3122d3b9da..272d2a8d72d23 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -4,7 +4,7 @@ icon_state = "wizard" //Not given any special protective value since the magic robes are full-body protection --NEO siemens_coefficient = 0.8 - flags_armor_protection = NONE + armor_protection_flags = NONE /obj/item/clothing/head/wizard/red name = "red wizard hat" @@ -16,7 +16,7 @@ name = "wizard hat" desc = "It has WIZZARD written across it in sequins. Comes with a cool beard." icon_state = "wizard-fake" - flags_armor_protection = HEAD|FACE + armor_protection_flags = HEAD|FACE /obj/item/clothing/head/wizard/marisa name = "Witch Hat" @@ -30,7 +30,7 @@ icon_state = "magus" item_state = "magus" siemens_coefficient = 0.8 - flags_armor_protection = HEAD|FACE|EYES + armor_protection_flags = HEAD|FACE|EYES /obj/item/clothing/head/wizard/amp name = "psychic amplifier" @@ -53,7 +53,7 @@ permeability_coefficient = 0.01 soft_armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, BIO = 20, FIRE = 20, ACID = 20) allowed = list() - flags_inv_hide = HIDEJUMPSUIT + inv_hide_flags = HIDEJUMPSUIT siemens_coefficient = 0.8 /obj/item/clothing/suit/wizrobe/red @@ -74,14 +74,14 @@ desc = "A set of armoured robes that seem to radiate a dark power" icon_state = "magusblue" item_state = "magusblue" - flags_armor_protection = CHEST|GROIN|ARMS|HANDS|LEGS|FEET + armor_protection_flags = CHEST|GROIN|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" item_state = "magusred" - flags_armor_protection = CHEST|GROIN|ARMS|HANDS|LEGS|FEET + armor_protection_flags = CHEST|GROIN|ARMS|HANDS|LEGS|FEET /obj/item/clothing/suit/wizrobe/psypurple name = "purple robes" @@ -89,13 +89,13 @@ icon_state = "psyamp" item_state = "psyamp" -/obj/item/clothing/suit/wizrobe/gentlecoat +/obj/item/clothing/suit/storage/wizrobe/gentlecoat name = "Gentlemans Coat" desc = "A heavy threaded twead gray jacket. For a different sort of Gentleman." icon_state = "gentlecoat" item_state = "gentlecoat" - flags_armor_protection = CHEST|GROIN|ARMS - flags_inv_hide = NONE + armor_protection_flags = CHEST|GROIN|ARMS + inv_hide_flags = NONE /obj/item/clothing/suit/wizrobe/fake name = "wizard robe" @@ -117,7 +117,7 @@ desc = "Magic is all about the spell power, ZE!" icon_state = "marisa" item_state = "marisarobe" - flags_armor_protection = CHEST|GROIN|ARMS|LEGS + armor_protection_flags = CHEST|GROIN|ARMS|LEGS soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0) siemens_coefficient = 1 diff --git a/code/modules/clothing/under/gimmick.dm b/code/modules/clothing/under/gimmick.dm index 5260f7e1b712b..8bb9ed5bb9620 100644 --- a/code/modules/clothing/under/gimmick.dm +++ b/code/modules/clothing/under/gimmick.dm @@ -28,16 +28,16 @@ name = "combat pants" desc = "The only thing a man needs when he's up agains the world." icon_state = "rambo_suit" - flags_armor_protection = LEGS|GROIN - flags_cold_protection = LEGS|GROIN - flags_heat_protection = LEGS|GROIN + armor_protection_flags = LEGS|GROIN + cold_protection_flags = LEGS|GROIN + heat_protection_flags = LEGS|GROIN /obj/item/clothing/suit/gimmick/rambo name = "pendant" desc = "It's a precious stone and something of a talisman of protection." - flags_armor_protection = CHEST - flags_cold_protection = CHEST - flags_heat_protection = CHEST + armor_protection_flags = CHEST + cold_protection_flags = CHEST + heat_protection_flags = CHEST icon_state = "rambo_pendant" //MCCLANE @@ -45,26 +45,26 @@ name = "holiday attire" desc = "The perfect outfit for a Christmas holiday with family. Shoes not included." icon_state = "mcclane_suit" - flags_armor_protection = CHEST|GROIN|LEGS - flags_cold_protection = CHEST|GROIN|LEGS - flags_heat_protection = CHEST|GROIN|LEGS + armor_protection_flags = CHEST|GROIN|LEGS + cold_protection_flags = CHEST|GROIN|LEGS + heat_protection_flags = CHEST|GROIN|LEGS //DUTCH /obj/item/clothing/under/gimmick/dutch name = "combat fatigues" desc = "Just another pair of military fatigues for a grueling tour in a jungle." icon_state = "dutch_suit" - flags_armor_protection = LEGS|GROIN - flags_cold_protection = LEGS|GROIN - flags_heat_protection = LEGS|GROIN + armor_protection_flags = LEGS|GROIN + cold_protection_flags = LEGS|GROIN + heat_protection_flags = LEGS|GROIN /obj/item/clothing/suit/armor/gimmick/dutch name = "armored jacket" desc = "It's hot in the jungle. Sometimes it's hot and heavy, and sometimes it's hell on earth." icon_state = "dutch_armor" - flags_armor_protection = CHEST - flags_cold_protection = CHEST - flags_heat_protection = CHEST + armor_protection_flags = CHEST + cold_protection_flags = CHEST + heat_protection_flags = CHEST soft_armor = list(MELEE = 45, BULLET = 45, LASER = 35, ENERGY = 25, BOMB = 25, BIO = 0, FIRE = 25, ACID = 25) allowed = list( /obj/item/weapon/gun, @@ -85,20 +85,20 @@ name = "metal body" desc = "It may be metallic, but it contains the heart and soul of Alex J. Murphy." icon_state = "robocop_suit" - flags_atom = CONDUCT + atom_flags = CONDUCT /obj/item/clothing/shoes/gimmick/robocop name = "polished metal boots" desc = "The perfect size to stomp on the scum of Detroit." icon_state = "robocop_shoes" soft_armor = list(MELEE = 87, BULLET = 87, LASER = 87, ENERGY = 87, BOMB = 87, BIO = 50, FIRE = 87, ACID = 87) - flags_inventory = CONDUCT|NOSLIPPING + inventory_flags = CONDUCT|NOSLIPPING /obj/item/clothing/gloves/gimmick/robocop name = "metal hands" desc = "The cold, unfeeling hands of the law." icon_state = "black" - flags_atom = CONDUCT + atom_flags = CONDUCT soft_armor = list(MELEE = 87, BULLET = 87, LASER = 87, ENERGY = 87, BOMB = 87, BIO = 50, FIRE = 87, ACID = 87) /obj/item/clothing/head/helmet/gimmick/robocop @@ -107,8 +107,8 @@ icon_state = "robocop_helmet" item_state = "robocop_helmet" soft_armor = list(MELEE = 87, BULLET = 87, LASER = 87, ENERGY = 87, BOMB = 87, BIO = 50, FIRE = 87, ACID = 87) - flags_inventory = COVEREYES|BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS|HIDEEYES|HIDETOPHAIR + inventory_flags = COVEREYES|BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS|HIDEEYES|HIDETOPHAIR anti_hug = 100 /obj/item/clothing/suit/armor/gimmick/robocop @@ -117,11 +117,11 @@ icon_state = "robocop_armor" item_state = "robocop_armor" slowdown = 1 - flags_atom = CONDUCT - flags_inventory = BLOCKSHARPOBJ - flags_armor_protection = CHEST|GROIN|ARMS|LEGS - flags_cold_protection = CHEST|GROIN|ARMS|LEGS - flags_heat_protection = CHEST|GROIN|ARMS|LEGS + atom_flags = CONDUCT + inventory_flags = BLOCKSHARPOBJ + armor_protection_flags = CHEST|GROIN|ARMS|LEGS + cold_protection_flags = CHEST|GROIN|ARMS|LEGS + heat_protection_flags = CHEST|GROIN|ARMS|LEGS allowed = list(/obj/item/weapon/gun/pistol/auto9) soft_armor = list(MELEE = 87, BULLET = 87, LASER = 87, ENERGY = 87, BOMB = 87, BIO = 50, FIRE = 87, ACID = 87) @@ -135,7 +135,7 @@ name = "black boots" desc = "Perfectly functional, this pair of boots has stomped on many planets and starships." icon_state = "skywalker_shoes" - flags_inventory = NOSLIPPING + inventory_flags = NOSLIPPING /obj/item/clothing/gloves/gimmick/skywalker name = "black glove" diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index cbe1456fd64b4..b7c832e4bb8a8 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -24,7 +24,7 @@ desc = "Shooooorts! They're comfy and easy to wear!" icon_state = "cargotech" item_state = "lb_suit" - flags_armor_protection = CHEST|GROIN|ARMS + armor_protection_flags = CHEST|GROIN|ARMS /obj/item/clothing/under/rank/chaplain desc = "It's a black jumpsuit, often worn by religious folk." diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm index 77f515a31dc99..0ab72e9d89afb 100644 --- a/code/modules/clothing/under/jobs/medsci.dm +++ b/code/modules/clothing/under/jobs/medsci.dm @@ -16,7 +16,7 @@ name = "research director dress uniform" desc = "Feminine fashion for the style concious RD. Its fabric provides minor protection from biological contaminants." icon_state = "dress_rd" - flags_armor_protection = CHEST|GROIN|ARMS + armor_protection_flags = CHEST|GROIN|ARMS /obj/item/clothing/under/rank/scientist desc = "It's made of a special fiber that provides minor protection against small explosions. It has markings that denote the wearer as a scientist." @@ -61,14 +61,14 @@ name = "nurse's suit" icon_state = "nursesuit" permeability_coefficient = 0.50 - flags_armor_protection = CHEST|GROIN + armor_protection_flags = CHEST|GROIN /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" permeability_coefficient = 0.50 - flags_armor_protection = CHEST|GROIN + armor_protection_flags = CHEST|GROIN adjustment_variants = list() /obj/item/clothing/under/rank/orderly diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 31afc17a16e5d..9d527dd68dd3d 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -38,7 +38,7 @@ name = "dispatcher's uniform" desc = "A dress shirt and khakis with a security patch sewn on." icon_state = "dispatch" - flags_armor_protection = CHEST|GROIN|LEGS + armor_protection_flags = CHEST|GROIN|LEGS siemens_coefficient = 0.9 adjustment_variants = list() diff --git a/code/modules/clothing/under/marine_uniform.dm b/code/modules/clothing/under/marine_uniform.dm index 5d12a98926b8a..d78f579e658b7 100644 --- a/code/modules/clothing/under/marine_uniform.dm +++ b/code/modules/clothing/under/marine_uniform.dm @@ -9,8 +9,8 @@ icon_state = "marine_jumpsuit" item_icons = list( slot_w_uniform_str = 'icons/mob/clothing/uniforms/marine_uniforms.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', ) has_sensor = 2 adjustment_variants = list( @@ -19,6 +19,12 @@ "No Top" = "_r", ) +/obj/item/clothing/under/marine/holster + starting_attachments = list(/obj/item/armor_module/storage/uniform/holster) + +/obj/item/clothing/under/marine/corpman_vest + starting_attachments = list(/obj/item/armor_module/storage/uniform/white_vest) + /obj/item/clothing/under/marine/hyperscale name = "\improper 8E Chameleon TGMC uniform" desc = "A standard-issue, kevlar-weaved, hazmat-tested, EMF-augmented marine uniform BUT colorable with a facepaint! You suspect it's not as robust-proof as advertised." @@ -32,6 +38,9 @@ /obj/item/clothing/under/marine/black_vest starting_attachments = list(/obj/item/armor_module/storage/uniform/black_vest) +/obj/item/clothing/under/marine/brown_vest + starting_attachments = list(/obj/item/armor_module/storage/uniform/brown_vest) + //Squad colored turtlenecks /obj/item/clothing/under/marine/squad/neck name = "\improper TGMC Delta turtleneck" @@ -98,7 +107,7 @@ icon_state = "marine_undersuit" adjustment_variants = list() has_sensor = 2 - flags_item_map_variant = null + item_map_variant_flags = null /obj/item/clothing/under/marine/mp name = "military police uniform" @@ -115,6 +124,9 @@ "Down" = "_d", ) +/obj/item/clothing/under/marine/orion_fatigue/black_vest + starting_attachments = list(/obj/item/armor_module/storage/uniform/black_vest) + /obj/item/clothing/under/marine/red_fatigue name = "\improper Big Red fatigues" desc = "Originated from Big Red. Designed for dry, low humid, and Mars-eqse environments, they're meant for recon, stealth, and evac operations. They come with a built in cassette player hearable only to the user to help pass time, during any possible long waits. They make you feel like one with the desert, forged by the beating Sun. Rumors had it that it can recycle your sweat and urine for drinkable water!" @@ -124,6 +136,9 @@ "Down" = "_d", ) +/obj/item/clothing/under/marine/red_fatigue/black_vest + starting_attachments = list(/obj/item/armor_module/storage/uniform/black_vest) + /obj/item/clothing/under/marine/lv_fatigue name = "\improper LV-624 fatigues" desc = "Originated from LV-624. Designed for wet, high humid, and jungle environments, they're meant for recon, stealth, and evac operations. They come with a built in cassette player hearable only to the user to help pass time, during any possible long waits. Somewhere, someone is playing 'Fortunate Sons' in the background, and you can smell napalm and Agent Orange in the air..." @@ -133,12 +148,19 @@ "Down" = "_d", ) +/obj/item/clothing/under/marine/lv_fatigue/black_vest + starting_attachments = list(/obj/item/armor_module/storage/uniform/black_vest) + /obj/item/clothing/under/marine/striped name = "\improper Striped fatigues" desc = "A simple set of camo pants and a striped shirt." icon_state = "marine_striped" item_state = "marine_striped" adjustment_variants = list() + +/obj/item/clothing/under/marine/striped/black_vest + starting_attachments = list(/obj/item/armor_module/storage/uniform/black_vest) + /obj/item/clothing/under/marine/black_suit name = "\improper marine black suit" desc = "A easy fitting black suit, somehow exactly your size." @@ -174,7 +196,7 @@ name = "marine officer uniform" desc = "A standard-issue, kevlar-weaved, hazmat-tested, EMF-augmented uniform worn by logistics officers of the TGMC. Do the corps proud." icon_state = "BO_jumpsuit" - flags_item_map_variant = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT) + item_map_variant_flags = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT) /obj/item/clothing/under/marine/officer/ro_suit name = "requisition officer suit" @@ -186,8 +208,8 @@ name = "pilot officer flightsuit" desc = "A standard-issue, kevlar-weaved, hazmat-tested, EMF-augmented, survival-friendly pilot flightsuit. Fly the marines onwards to glory." icon_state = "pilot_flightsuit" - flags_cold_protection = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE - flags_item_map_variant = null + cold_protection_flags = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE + item_map_variant_flags = null adjustment_variants = list( "Half" = "_h", ) @@ -197,17 +219,27 @@ desc = "A standard-issue, kevlar-weaved, hazmat-tested, EMF-augmented uniform worn by mech pilots. Not as impressive as a titanium robot but good enough." icon_state = "marine_mech_pilot" +/obj/item/clothing/under/marine/officer/assault_crewman + name = "assault crewman uniform" + desc = "A standard-issue, carbon fibre uniform optimised for operating heavy equipment. Feels like a hand-me-down from last decade." + icon_state = "marine_assault_crewman" + +/obj/item/clothing/under/marine/officer/transport_crewman + name = "transport crewman uniform" + desc = "A standard issue comfortable uniform designed for sitting all day." + icon_state = "marine_transport_crewman" + /obj/item/clothing/under/marine/officer/bridge name = "staff officer uniform" desc = "A standard-issue, kevlar-weaved, hazmat-tested, EMF-augmented staff officer uniform. Do the navy proud." icon_state = "BO_jumpsuit" - flags_item_map_variant = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT) + item_map_variant_flags = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT) /obj/item/clothing/under/marine/officer/exec name = "field commander uniform" desc = "A special-issue, kevlar-weaved, hazmat-tested, EMF-augmented worn by a field-grade officer of the TGMC. You suspect it's not as robust-proof as advertised." icon_state = "XO_jumpsuit" - flags_item_map_variant = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT) + item_map_variant_flags = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT) /obj/item/clothing/under/marine/officer/exec/webbing starting_attachments = list(/obj/item/armor_module/storage/uniform/black_vest) @@ -216,7 +248,7 @@ name = "captain uniform" desc = "A special-issue, well-ironed, kevlar-weaved, hazmat-tested, EMF-augmented uniform worth of a TerraGov Naval Captain. Even looking at it the wrong way could result in being court-martialed." icon_state = "CO_jumpsuit" - flags_item_map_variant = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT) + item_map_variant_flags = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT) /obj/item/clothing/under/marine/officer/admiral name = "admiral uniform" @@ -272,8 +304,8 @@ icon_state = "guardjumpsuit" item_icons = list( slot_w_uniform_str = 'icons/mob/clothing/uniforms/ert_uniforms.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', ) item_state = "guardjumpsuit" soft_armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 10, BOMB = 10, BIO = 10, FIRE = 10, ACID = 10) @@ -290,8 +322,8 @@ icon = 'icons/obj/clothing/uniforms/ert_uniforms.dmi' item_icons = list( slot_w_uniform_str = 'icons/mob/clothing/uniforms/ert_uniforms.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', ) adjustment_variants = list() @@ -433,7 +465,7 @@ adjustment_variants = list() /obj/item/clothing/under/som - name = "\improper SOM officer uniform" + name = "\improper SOM uniform" desc = "The standard uniform of SOM military personnel. Its design shows a clear lineage from mining uniforms used in the old mining colonies." icon = 'icons/obj/clothing/uniforms/ert_uniforms.dmi' icon_state = "som_uniform" @@ -478,7 +510,7 @@ /obj/item/clothing/under/som/officer name = "\improper SOM officer uniform" - desc = "The distinct black uniform of a SOM officer. Usually worn by junior officers" + desc = "The distinct black uniform of a SOM officer. Usually worn by junior officers." icon_state = "som_officer_uniform" item_state = "som_officer_uniform" adjustment_variants = list() @@ -488,7 +520,7 @@ /obj/item/clothing/under/som/officer/senior name = "\improper SOM officer uniform" - desc = "The distinct jacketed black uniform of a SOM officer. Usually worn by senior officers" + desc = "The distinct jacketed black uniform of a SOM officer. Usually worn by senior officers." icon_state = "som_senior_officer_uniform" item_state = "som_senior_officer_uniform" @@ -499,8 +531,8 @@ icon_state = "icc" item_icons = list( slot_w_uniform_str = 'icons/mob/clothing/uniforms/ert_uniforms.dmi', - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', + slot_l_hand_str = 'icons/mob/inhands/items/items_left.dmi', + slot_r_hand_str = 'icons/mob/inhands/items/items_right.dmi', ) item_state = "icc" has_sensor = FALSE @@ -513,7 +545,7 @@ desc = "A field of invisible energy, it protects the wearer but prevents any clothing from being worn." icon = 'icons/effects/effects.dmi' icon_state = "shield-blue" - flags_item = DELONDROP + item_flags = DELONDROP /obj/item/clothing/under/sectoid/Initialize(mapload) . = ..() @@ -535,3 +567,16 @@ /obj/item/clothing/under/marine/robotic/webbing starting_attachments = list(/obj/item/armor_module/storage/uniform/black_vest) + +/obj/item/clothing/under/marine/specops + name = "Tactical turtleneck" + desc = "A TGMC turtleneck issued to special operation units" + icon = 'icons/mob/clothing/uniforms/ert_uniforms.dmi' + icon_state = "specops_uniform" + item_icons = list( + slot_w_uniform_str = 'icons/mob/clothing/uniforms/ert_uniforms.dmi', + ) + starting_attachments = list(/obj/item/armor_module/storage/uniform/holster) + item_state = "specops_uniform" + min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE + has_sensor = 0 diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 88a815e14a1ed..4d3b4564a0f1a 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -43,7 +43,7 @@ desc = "It makes you look HONKable!" icon_state = "sexyclown" item_state = "sexyclown" - flags_armor_protection = CHEST|GROIN + armor_protection_flags = CHEST|GROIN /obj/item/clothing/under/rank/vice name = "vice officer's jumpsuit" @@ -87,8 +87,8 @@ w_class = WEIGHT_CLASS_BULKY//bulky item gas_transfer_coefficient = 0.01 permeability_coefficient = 0.02 - flags_armor_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - flags_cold_protection = CHEST|GROIN|LEGS|ARMS //Needs gloves and shoes with cold protection to be fully protected. + armor_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + cold_protection_flags = CHEST|GROIN|LEGS|ARMS //Needs gloves and shoes with cold protection to be fully protected. min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE /obj/item/clothing/under/acj @@ -98,9 +98,9 @@ desc = "it's a cybernetically enhanced jumpsuit used for administrative duties." gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 - flags_armor_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + armor_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS soft_armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, FIRE = 100, ACID = 100) - flags_cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + cold_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0 @@ -128,7 +128,7 @@ name = "dark undersuit" desc = "A thick, layered grey undersuit lined with power cables. Feels a little like wearing an electrical storm." icon_state = "psysuit" - flags_armor_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + armor_protection_flags = CHEST|GROIN|LEGS|FEET|ARMS|HANDS /obj/item/clothing/under/gentlesuit name = "Gentlemans Suit" @@ -174,7 +174,7 @@ name = "pirate outfit" desc = "Yarr." icon_state = "pirate" - flags_armor_protection = CHEST|GROIN|LEGS + armor_protection_flags = CHEST|GROIN|LEGS /obj/item/clothing/under/soviet name = "soviet uniform" @@ -190,23 +190,23 @@ name = "kilt" desc = "Includes shoes and plaid" icon_state = "kilt" - flags_armor_protection = CHEST|GROIN|FEET + armor_protection_flags = CHEST|GROIN|FEET /obj/item/clothing/under/sexymime name = "sexy mime outfit" desc = "The only time when you DON'T enjoy looking at someone's rack." icon_state = "sexymime" - flags_armor_protection = CHEST|GROIN + armor_protection_flags = CHEST|GROIN /obj/item/clothing/under/gladiator name = "gladiator uniform" desc = "Are you not entertained? Is that not why you are here?" icon_state = "gladiator" - flags_armor_protection = GROIN + armor_protection_flags = GROIN //dress /obj/item/clothing/under/dress/ - flags_armor_protection = CHEST|GROIN + armor_protection_flags = CHEST|GROIN /obj/item/clothing/under/dress/dress_fire name = "flame dress" @@ -243,19 +243,19 @@ name = "captain's dress uniform" desc = "Feminine fashion for the style concious captain." icon_state = "dress_cap" - flags_armor_protection = CHEST|GROIN|ARMS + armor_protection_flags = CHEST|GROIN|ARMS /obj/item/clothing/under/dress/dress_hop name = "head of personnel dress uniform" desc = "Feminine fashion for the style concious HoP." icon_state = "dress_hop" - flags_armor_protection = CHEST|GROIN|ARMS + armor_protection_flags = CHEST|GROIN|ARMS /obj/item/clothing/under/dress/dress_hr name = "human resources director uniform" desc = "Superior class for the nosy H.R. Director." icon_state = "huresource" - flags_armor_protection = CHEST|GROIN|ARMS + armor_protection_flags = CHEST|GROIN|ARMS /obj/item/clothing/under/dress/plaid_blue name = "blue plaid skirt" @@ -274,44 +274,44 @@ //wedding stuff /obj/item/clothing/under/wedding/ - flags_armor_protection = CHEST|GROIN|LEGS + armor_protection_flags = CHEST|GROIN|LEGS /obj/item/clothing/under/wedding/bride_orange name = "orange wedding dress" desc = "A big and puffy orange dress." icon_state = "bride_orange" - flags_inv_hide = HIDESHOES + inv_hide_flags = HIDESHOES /obj/item/clothing/under/wedding/bride_purple name = "purple wedding dress" desc = "A big and puffy purple dress." icon_state = "bride_purple" - flags_inv_hide = HIDESHOES + inv_hide_flags = HIDESHOES /obj/item/clothing/under/wedding/bride_blue name = "blue wedding dress" desc = "A big and puffy blue dress." icon_state = "bride_blue" - flags_inv_hide = HIDESHOES + inv_hide_flags = HIDESHOES /obj/item/clothing/under/wedding/bride_red name = "red wedding dress" desc = "A big and puffy red dress." icon_state = "bride_red" - flags_inv_hide = HIDESHOES + inv_hide_flags = HIDESHOES /obj/item/clothing/under/wedding/bride_white name = "silky wedding dress" desc = "A white wedding gown made from the finest silk." icon_state = "bride_white" - flags_inv_hide = HIDESHOES - flags_armor_protection = CHEST|GROIN + inv_hide_flags = HIDESHOES + armor_protection_flags = CHEST|GROIN /obj/item/clothing/under/sundress name = "sundress" desc = "Makes you want to frolic in a field of daisies." icon_state = "sundress" - flags_armor_protection = CHEST|GROIN + armor_protection_flags = CHEST|GROIN /obj/item/clothing/under/captainformal name = "captain's formal uniform" @@ -373,9 +373,9 @@ icon_state = "pilot_spec" item_state = "pilot_spec" resistance_flags = UNACIDABLE - flags_armor_protection = CHEST|GROIN|LEGS|ARMS + armor_protection_flags = CHEST|GROIN|LEGS|ARMS soft_armor = list(MELEE = 70, BULLET = 70, LASER = 70, ENERGY = 70, BOMB = 70, BIO = 70, FIRE = 70, ACID = 70) - flags_cold_protection = CHEST|GROIN|LEGS|ARMS + cold_protection_flags = CHEST|GROIN|LEGS|ARMS min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0 slowdown= -1 @@ -387,5 +387,5 @@ desc = "Praise the omnissiah!" icon_state = "tp_bodyrobes" item_state = "tp_bodyrobes" - flags_armor_protection = CHEST|GROIN|LEGS|ARMS + armor_protection_flags = CHEST|GROIN|LEGS|ARMS diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm index 0617b56f7c416..3161764d35e7c 100644 --- a/code/modules/clothing/under/shorts.dm +++ b/code/modules/clothing/under/shorts.dm @@ -2,7 +2,7 @@ name = "athletic shorts" desc = "95% Polyester, 5% Spandex!" gender = PLURAL - flags_armor_protection = GROIN + armor_protection_flags = GROIN /obj/item/clothing/under/shorts/red name = "red athletic shorts" diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index b3a2d9118c007..5ed053b460ccd 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -3,12 +3,12 @@ desc = "A neosilk clip-on tie." icon = 'icons/obj/clothing/ties.dmi' icon_state = "bluetie" - flags_equip_slot = NONE + equip_slot_flags = NONE w_class = WEIGHT_CLASS_SMALL /obj/item/clothing/tie/Initialize(mapload) . = ..() - AddElement(/datum/element/attachment, ATTACHMENT_SLOT_UNIFORM_TIE, 'icons/obj/clothing/ties_overlay.dmi', flags_attach_features = (ATTACH_REMOVABLE|ATTACH_APPLY_ON_MOB), mob_overlay_icon = 'icons/mob/ties.dmi') + AddElement(/datum/element/attachment, ATTACHMENT_SLOT_UNIFORM_TIE, 'icons/obj/clothing/ties_overlay.dmi', attach_features_flags = (ATTACH_REMOVABLE|ATTACH_APPLY_ON_MOB), mob_overlay_icon = 'icons/mob/ties.dmi') /obj/item/clothing/tie/blue name = "blue tie" @@ -161,13 +161,13 @@ name = "holobadge" desc = "This glowing blue badge marks the holder as THE LAW." icon_state = "holobadge" - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT var/stored_name = null /obj/item/clothing/tie/holobadge/cord icon_state = "holobadge-cord" - flags_equip_slot = ITEM_SLOT_MASK + equip_slot_flags = ITEM_SLOT_MASK /obj/item/clothing/tie/holobadge/attack_self(mob/user as mob) if(!stored_name) @@ -178,6 +178,8 @@ /obj/item/clothing/tie/holobadge/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/card/id)) var/obj/item/card/id/id_card = I diff --git a/code/modules/clothing/under/under.dm b/code/modules/clothing/under/under.dm index 36c8c3fc47d31..e81a0f541e092 100644 --- a/code/modules/clothing/under/under.dm +++ b/code/modules/clothing/under/under.dm @@ -6,11 +6,11 @@ slot_r_hand_str = 'icons/mob/inhands/clothing/uniforms_right.dmi', ) name = "under" - flags_armor_protection = CHEST|GROIN|LEGS|ARMS - flags_cold_protection = CHEST|GROIN|LEGS|ARMS - flags_heat_protection = CHEST|GROIN|LEGS|ARMS + armor_protection_flags = CHEST|GROIN|LEGS|ARMS + cold_protection_flags = CHEST|GROIN|LEGS|ARMS + heat_protection_flags = CHEST|GROIN|LEGS|ARMS permeability_coefficient = 0.90 - flags_equip_slot = ITEM_SLOT_ICLOTHING + equip_slot_flags = ITEM_SLOT_ICLOTHING soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0) w_class = WEIGHT_CLASS_BULKY blood_sprite_state = "uniformblood" @@ -144,6 +144,23 @@ . += "Its vital tracker appears to be enabled." if(3) . += "Its vital tracker and tracking beacon appear to be enabled." + var/armor_info + var/obj/item/clothing/under/wear_modular_suit = src + if(wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_UNIFORM]) + armor_info += " - [wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_UNIFORM]].\n" + if(wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_BADGE]) + armor_info += " - [wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_BADGE]].\n" + if(wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_UNIFORM_TIE]) + armor_info += " - [wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_UNIFORM_TIE]].\n" + if(wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_CAPE]) + armor_info += " - [wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_CAPE]].\n" + if(wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_CAPE_HIGHLIGHT]) + armor_info += " - [wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_CAPE_HIGHLIGHT]].\n" + if(wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_KAMA]) + armor_info += " - [wear_modular_suit.attachments_by_slot[ATTACHMENT_SLOT_KAMA]].\n" + if(armor_info) + . += " It has the following attachments:" + . += armor_info //we only want to quick equip from actual 'holster' type webbings /obj/item/clothing/under/do_quick_equip(mob/user) diff --git a/code/modules/codex/entries/ammunition_codex.dm b/code/modules/codex/entries/ammunition_codex.dm index 5fcea85747341..bb5af652336fa 100644 --- a/code/modules/codex/entries/ammunition_codex.dm +++ b/code/modules/codex/entries/ammunition_codex.dm @@ -20,16 +20,16 @@ if(ammo.damage_type) entry.mechanics_text += "Damage type: [ammo.damage_type]
    " - if(ammo.flags_ammo_behavior & AMMO_INCENDIARY) + if(ammo.ammo_behavior_flags & AMMO_INCENDIARY) entry.mechanics_text += "Secondary effect: set target on fire.
    " - if(ammo.flags_ammo_behavior & AMMO_EXPLOSIVE) - entry.mechanics_text += "Secondary effect: explosion.
    " + if(ammo.ammo_behavior_flags & AMMO_TARGET_TURF) + entry.mechanics_text += "Secondary effect: Hits the turf clicked on.
    " - if(ammo.flags_ammo_behavior & AMMO_SPECIAL_PROCESS) + if(ammo.ammo_behavior_flags & AMMO_SPECIAL_PROCESS) entry.mechanics_text += "Secondary effect: hits nearby targets in-flight.
    " - if(ammo.flags_ammo_behavior & AMMO_LEAVE_TURF) + if(ammo.ammo_behavior_flags & AMMO_LEAVE_TURF) entry.mechanics_text += "Secondary effect: affects tiles travelled through.
    " if(ammo.penetration) diff --git a/code/modules/codex/entries/clothing_codex.dm b/code/modules/codex/entries/clothing_codex.dm index 1ac214c36f997..aff9924b86990 100644 --- a/code/modules/codex/entries/clothing_codex.dm +++ b/code/modules/codex/entries/clothing_codex.dm @@ -74,10 +74,10 @@ GLOBAL_LIST_INIT(string_equip_flags, list("suit slot" = ITEM_SLOT_OCLOTHING, if(accuracy_mod) armor_strings += "
    This will alter your shooting accuracy by up to [accuracy_mod]% when worn." - if(flags_inventory & NOPRESSUREDMAGE) + if(inventory_flags & NOPRESSUREDMAGE) armor_strings += "Wearing this will protect you from the vacuum of space." - if(flags_inventory & BLOCKSHARPOBJ) + if(inventory_flags & BLOCKSHARPOBJ) armor_strings += "The material is exceptionally thick." if(max_heat_protection_temperature >= FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE) @@ -91,10 +91,10 @@ GLOBAL_LIST_INIT(string_equip_flags, list("suit slot" = ITEM_SLOT_OCLOTHING, var/list/covers = list() var/list/slots = list() for(var/name in GLOB.string_part_flags) - if(flags_armor_protection & GLOB.string_part_flags[name]) + if(armor_protection_flags & GLOB.string_part_flags[name]) covers += name for(var/name in GLOB.string_equip_flags) - if(flags_equip_slot & GLOB.string_equip_flags[name]) + if(equip_slot_flags & GLOB.string_equip_flags[name]) slots += name if(length(covers)) diff --git a/code/modules/codex/entries/guns_codex.dm b/code/modules/codex/entries/guns_codex.dm index 48e352e6f530d..f66367a631154 100644 --- a/code/modules/codex/entries/guns_codex.dm +++ b/code/modules/codex/entries/guns_codex.dm @@ -14,7 +14,25 @@ . = ..() var/list/traits = list() - if(flags_gun_features & GUN_WIELDED_FIRING_ONLY) + var/skill_name + switch(gun_skill_category) + if(SKILL_RIFLES) + skill_name = "rifle skill" + if(SKILL_SMGS) + skill_name = "SMG skill" + if(SKILL_HEAVY_WEAPONS) + skill_name = "heavy weapon skill" + if(SKILL_SMARTGUN) + skill_name = "smartgun skill" + if(SKILL_SHOTGUNS) + skill_name = "shotgun skill" + if(SKILL_PISTOLS) + skill_name = "pistol skill" + + if(skill_name) + traits += "This weapons is effected by the user's [skill_name] rating.
    " + + if(gun_features_flags & GUN_WIELDED_FIRING_ONLY) traits += "This can only be fired with a two-handed grip." else traits += "It's best fired with a two-handed grip." @@ -146,6 +164,16 @@ traditional chargers and their capability to switch their lens, allowing more flexibility, something that a ballistic weapon \ aren't capable of." +/datum/codex_entry/plasma_weapons + display_name = "plasma weapons" + mechanics_text = "This weapon is a plasma weapon; it fires bursts of superheated gas that have been ionized and electrically charged. You can \ + unload it by holding it and clicking it with an empty hand, and reload it by clicking it with a power cell or a plasma cartridge, depending on the model of \ + the weapon. \ +
    " + lore_text = "Plasma weapons are rare and powerful due to the high cost and difficulty of producing and controlling plasma \ + pulses. They have a devastating effect on most targets, as the plasma can melt, burn, or vaporize them. Using a plasma weapon in a confined space is very risky, \ + as the plasma can damage the surroundings or harm friendly units with its intense heat and radiation." + /datum/codex_entry/ballistic_weapons display_name = "ballistic weapons" mechanics_text = "This weapon is a ballistic weapon; it fires solid shots using a magazine or loaded rounds of ammunition. You can \ @@ -185,16 +213,16 @@ /datum/codex_entry/sniper_rifle associated_paths = list(/obj/item/weapon/gun/rifle/sniper/antimaterial) lore_text = "A rather strange gun in the TGMC's arsenal. The M42A \"Express\" originally was born out of it's younger brother the M42. Made by the same \ - company who eventually went on to design the M56 smartgun system. Which the M42As specialized scope eventually adopted a modified IFF system similar to it's cousin the smartgun.

    \ + company who eventually went on to design the HSG-102 smartgun system. Which the M42As specialized scope eventually adopted a modified IFF system similar to it's cousin the smartgun.

    \ It was at first marketed to PMCs and civilians as an expensive accurate long range rifle but it failed due to the lack of need for such a thing for PMCs and the wide variety of options \ - already available for civilians in a more affordable package. The company after the failure went onto design the M56 smartgun and succeeded there however. Which kept them afloat after the failure of the M42.

    \ + already available for civilians in a more affordable package. The company after the failure went onto design the HS-102 smartgun and succeeded there however. Which kept them afloat after the failure of the M42.

    \ Later however an announcement by the Marine Corps who decided to replace the aging supply of the current adopted Sniper Rifle after complaints that the frames were starting to wear out due to long-term use and thus trials would be announced to replace them.

    \ Eventually, the board of directors decided to give that reviving the M42 design was a worthwhile possibility. And thus the design was decided to be modernized and equipped with an IFF-capable scope, after that it was named as the M42A and submitted to go the trials.

    \ Though high unit cost didn't allow it to be more widely adopted it was eventually decided that it would meet limited adoption for Marksmen and be designated the SR-26." /datum/codex_entry/battle_rifle associated_paths = list(/obj/item/weapon/gun/rifle/tx8) - lore_text = "The M45A was born from a commission order from the TGMC to the company which made the M42A and M56 smartgun systems.

    \ + lore_text = "The M45A was born from a commission order from the TGMC to the company which made the M42A and HS-102 smartgun systems.

    \ The reason for this commission order resulted from complaints from light infantry and scout units about the poor accuracy of the new SR-26 \ carbine at longer ranges and the large size of the SG-29 making close combat uncomfortable eventually reached the higher ups, who kept getting \ the same complaints over and over. So they eventually reached out to a trusted company to do it.

    \ diff --git a/code/modules/codex/entries/magazine_codex.dm b/code/modules/codex/entries/magazine_codex.dm index 0d44f7803f7a6..bd7aac50a3f20 100644 --- a/code/modules/codex/entries/magazine_codex.dm +++ b/code/modules/codex/entries/magazine_codex.dm @@ -26,7 +26,7 @@ if(wield_delay_mod) traits += "Wield delay modifier: [wield_delay_mod] seconds
    " - if(flags_magazine & MAGAZINE_WORN) + if(magazine_flags & MAGAZINE_WORN) traits += "This magazine is worn instead of inserted into a gun.
    " traits += "Basic statistics for ammunition in this magazine are as follows:
    " @@ -56,16 +56,16 @@ if(default_ammo.max_range) traits += "Maximum range: [default_ammo.max_range]
    " - if(default_ammo.flags_ammo_behavior & AMMO_INCENDIARY) + if(default_ammo.ammo_behavior_flags & AMMO_INCENDIARY) traits += "Secondary effect: Set target on fire
    " - if(default_ammo.flags_ammo_behavior & AMMO_EXPLOSIVE) - traits += "Secondary effect: Explosive
    " + if(default_ammo.ammo_behavior_flags & AMMO_TARGET_TURF) + traits += "Secondary effect: Targets turfs
    " - if(default_ammo.flags_ammo_behavior & AMMO_SPECIAL_PROCESS) + if(default_ammo.ammo_behavior_flags & AMMO_SPECIAL_PROCESS) traits += "Secondary effect: Hits nearby targets in-flight
    " - if(default_ammo.flags_ammo_behavior & AMMO_LEAVE_TURF) + if(default_ammo.ammo_behavior_flags & AMMO_LEAVE_TURF) traits += "Secondary effect: Affects tiles travelled through
    " if(default_ammo.accuracy) diff --git a/code/modules/codex/entries/misc_codex.dm b/code/modules/codex/entries/misc_codex.dm index baf907f71f102..36a6c41bb01ed 100644 --- a/code/modules/codex/entries/misc_codex.dm +++ b/code/modules/codex/entries/misc_codex.dm @@ -20,7 +20,7 @@ var/list/slots = list() for(var/name in GLOB.string_equip_flags) - if(flags_equip_slot & GLOB.string_equip_flags[name]) + if(equip_slot_flags & GLOB.string_equip_flags[name]) slots += name if(length(slots)) diff --git a/code/modules/codex/entries/mobs_codex.dm b/code/modules/codex/entries/mobs_codex.dm index f2ad6de3157f2..32e35ba65ee7a 100644 --- a/code/modules/codex/entries/mobs_codex.dm +++ b/code/modules/codex/entries/mobs_codex.dm @@ -40,7 +40,7 @@ if(xeno_caste.caste_flags & CASTE_EVOLUTION_ALLOWED) xeno_strings += "
    This can evolve to:" - for(var/type in xeno_caste.evolves_to) + for(var/type in get_evolution_options()) xeno_strings += "[GLOB.xeno_caste_datums[type][XENO_UPGRADE_BASETYPE].caste_name]" if(length(actions)) diff --git a/code/modules/codex/entries/stacks_codex.dm b/code/modules/codex/entries/stacks_codex.dm index 55d271c6437fc..d9532c90b3551 100644 --- a/code/modules/codex/entries/stacks_codex.dm +++ b/code/modules/codex/entries/stacks_codex.dm @@ -5,7 +5,7 @@ Clicking on a floor without any tiles will reinforce the floor. You can make reinforced glass by combining rods and normal glass sheets." /datum/codex_entry/glass - associated_paths = list(/obj/item/stack/sheet/glass) + associated_paths = list(/obj/item/stack/sheet/glass/glass) mechanics_text = "Use in your hand to build a window. Can be upgraded to reinforced glass by adding metal rods, which are made from metal sheets." /datum/codex_entry/glass_reinf diff --git a/code/modules/codex/entries/weapons_codex.dm b/code/modules/codex/entries/weapons_codex.dm index 6f84521cc4c5d..55d51ee3e131b 100644 --- a/code/modules/codex/entries/weapons_codex.dm +++ b/code/modules/codex/entries/weapons_codex.dm @@ -28,10 +28,10 @@ if(slot == ATTACHMENT_SLOT_UNDER) attach_strings += "This attaches to the underbarrel slot on most weapons.
    " - if(flags_attach_features & ATTACH_REMOVABLE) + if(attach_features_flags & ATTACH_REMOVABLE) attach_strings += "This can be field stripped off the weapon if needed." - if(flags_attach_features & ATTACH_ACTIVATION) + if(attach_features_flags & ATTACH_ACTIVATION) attach_strings += "This needs to be activated to be used." attach_strings += "
    Always on modifications:
    " diff --git a/code/modules/condor/cas_chair.dm b/code/modules/condor/cas_chair.dm index c33aadcc24e11..0e56de61fe3e7 100644 --- a/code/modules/condor/cas_chair.dm +++ b/code/modules/condor/cas_chair.dm @@ -144,15 +144,15 @@ occupant.forceMove(get_step(loc, WEST)) occupant = null -/obj/structure/caspart/caschair/attack_alien(mob/living/carbon/xenomorph/X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) +/obj/structure/caspart/caschair/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) if(!occupant) - to_chat(X, span_xenowarning("There is nothing of interest in there.")) + to_chat(xeno_attacker, span_xenowarning("There is nothing of interest in there.")) return - if(X.status_flags & INCORPOREAL || X.do_actions) + if(xeno_attacker.status_flags & INCORPOREAL || xeno_attacker.do_actions) return - visible_message(span_warning("[X] begins to pry the [src]'s cover!"), 3) + visible_message(span_warning("[xeno_attacker] begins to pry the [src]'s cover!"), 3) playsound(src,'sound/effects/metal_creaking.ogg', 25, 1) - if(!do_after(X, 2 SECONDS)) + if(!do_after(xeno_attacker, 2 SECONDS)) return playsound(loc, 'sound/effects/metal_creaking.ogg', 25, 1) eject_user(TRUE) @@ -204,12 +204,12 @@ switch(action) if("launch") if(!cas_usable) - to_chat(usr, "Combat has not yet initiated, CAS unavailable.") + to_chat(usr, span_warning("Combat has not yet initiated, CAS unavailable.")) return if(owner.state == PLANE_STATE_FLYING || owner.mode != SHUTTLE_IDLE) return - if(owner.fuel_left <= LOW_FUEL_THRESHOLD) - to_chat(usr, "Unable to launch, low fuel.") + if(owner.fuel_left <= LOW_FUEL_TAKEOFF_THRESHOLD) + to_chat(usr, span_warning("Unable to launch, low fuel.")) return SSshuttle.moveShuttleToDock(owner.id, SSshuttle.generate_transit_dock(owner), TRUE) owner.currently_returning = FALSE diff --git a/code/modules/condor/cas_shuttle.dm b/code/modules/condor/cas_shuttle.dm index a8a799d61b2d9..a0e49ed127bd6 100644 --- a/code/modules/condor/cas_shuttle.dm +++ b/code/modules/condor/cas_shuttle.dm @@ -57,8 +57,11 @@ /obj/docking_port/mobile/marine_dropship/casplane/process() #ifndef TESTING fuel_left-- + if((fuel_max*LOW_FUEL_WARNING_THRESHOLD) == fuel_left) + chair.occupant?.playsound_local(loc, 'sound/voice/plane_vws/low_fuel.ogg', 70, FALSE) if((fuel_left <= LOW_FUEL_LANDING_THRESHOLD) && (state == PLANE_STATE_FLYING)) to_chat(chair.occupant, span_warning("Out of fuel, landing.")) + chair.occupant?.playsound_local(loc, 'sound/voice/plane_vws/no_fuel.ogg', 70, FALSE) SSshuttle.moveShuttle(id, SHUTTLE_CAS_DOCK, TRUE) currently_returning = TRUE end_cas_mission(chair.occupant) @@ -194,6 +197,7 @@ #endif to_chat(user, span_warning("Targets detected, routing to area of operations.")) + user.playsound_local(chair, 'sound/voice/plane_vws/flightcomputer_hot.ogg', 70, FALSE) give_eye_control(user) eyeobj.setLoc(get_turf(starting_point)) @@ -261,7 +265,7 @@ if(A.ceiling >= CEILING_UNDERGROUND) to_chat(source, span_warning("That target is too deep underground!")) return - if(A.flags_area & OB_CAS_IMMUNE) + if(A.area_flags & OB_CAS_IMMUNE) to_chat(source, span_warning("Our payload won't reach this target!")) return if(active_weapon.ammo_equipped?.ammo_count <= 0) diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm index 172c26ebfc24a..0eedb5d5ebafc 100644 --- a/code/modules/detectivework/footprints_and_rag.dm +++ b/code/modules/detectivework/footprints_and_rag.dm @@ -17,7 +17,7 @@ amount_per_transfer_from_this = 5 possible_transfer_amounts = list(5) volume = 5 - flags_item = NOBLUDGEON + item_flags = NOBLUDGEON /obj/item/reagent_containers/glass/rag/attack_self(mob/user as mob) return diff --git a/code/modules/detectivework/forensics.dm b/code/modules/detectivework/forensics.dm index a2a05eeeb6915..82ae7324e20b9 100644 --- a/code/modules/detectivework/forensics.dm +++ b/code/modules/detectivework/forensics.dm @@ -24,14 +24,14 @@ fibertext = "Material from \a [M.wear_suit]." if(prob(10*item_multiplier) && !(fibertext in suit_fibers)) suit_fibers += fibertext - suit_coverage = M.wear_suit.flags_armor_protection + suit_coverage = M.wear_suit.armor_protection_flags - if(M.w_uniform && (M.w_uniform.flags_armor_protection & ~suit_coverage)) + if(M.w_uniform && (M.w_uniform.armor_protection_flags & ~suit_coverage)) fibertext = "Fibers from \a [M.w_uniform]." if(prob(15*item_multiplier) && !(fibertext in suit_fibers)) suit_fibers += fibertext - if(M.gloves && (M.gloves.flags_armor_protection & ~suit_coverage)) + if(M.gloves && (M.gloves.armor_protection_flags & ~suit_coverage)) fibertext = "Material from a pair of [M.gloves.name]." if(prob(20*item_multiplier) && !(fibertext in suit_fibers)) suit_fibers += "Material from a pair of [M.gloves.name]." diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index f8ded08499344..09b3a47fcdb48 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -10,9 +10,9 @@ slot_r_hand_str = 'icons/mob/inhands/equipment/engineering_right.dmi', ) item_state = "electronic" - flags_atom = CONDUCT - flags_item = NOBLUDGEON - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + item_flags = NOBLUDGEON + equip_slot_flags = ITEM_SLOT_BELT /obj/item/detective_scanner/attack(mob/living/carbon/human/M as mob, mob/user as mob) to_chat(user, span_warning("This device is non-functional.")) diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm index 5ebc598dc5a7f..06d7c058e2eb7 100644 --- a/code/modules/economy/ATM.dm +++ b/code/modules/economy/ATM.dm @@ -65,6 +65,8 @@ log transactions /obj/machinery/atm/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/card)) var/obj/item/card/id/idcard = I diff --git a/code/modules/economy/EFTPOS.dm b/code/modules/economy/EFTPOS.dm index 1da5cd8857d4f..0706983d80db9 100644 --- a/code/modules/economy/EFTPOS.dm +++ b/code/modules/economy/EFTPOS.dm @@ -117,6 +117,8 @@ /obj/item/eftpos/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/card)) var/obj/item/card/C = I diff --git a/code/modules/economy/cash.dm b/code/modules/economy/cash.dm index 186f6404acbc8..50af2fd224207 100644 --- a/code/modules/economy/cash.dm +++ b/code/modules/economy/cash.dm @@ -18,6 +18,8 @@ /obj/item/spacecash/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/spacecash) && !istype(I, /obj/item/spacecash/ewallet)) var/obj/item/spacecash/bundle/bundle @@ -45,8 +47,12 @@ desc = "They are worth 0 dollars." worth = 0 -/obj/item/spacecash/bundle/update_icon() - overlays.Cut() +/obj/item/spacecash/bundle/update_desc(updates) + . = ..() + desc = "They are worth [worth] dollars." + +/obj/item/spacecash/bundle/update_overlays() + . = ..() var/sum = worth var/num = 0 for(var/i in list(1000,500,200,100,50,20,10,1)) @@ -58,15 +64,14 @@ M.Translate(rand(-6, 6), rand(-4, 8)) M.Turn(pick(-45, -27.5, 0, 0, 0, 0, 0, 0, 0, 27.5, 45)) banknote.transform = M - overlays += banknote + . += banknote if(num == 0) // Less than one thaler, let's just make it look like 1 for ease var/image/banknote = image('icons/obj/stack_objects.dmi', "spacecash1") var/matrix/M = matrix() M.Translate(rand(-6, 6), rand(-4, 8)) M.Turn(pick(-45, -27.5, 0, 0, 0, 0, 0, 0, 0, 27.5, 45)) banknote.transform = M - overlays += banknote - desc = "They are worth [worth] dollars." + . += banknote /obj/item/spacecash/bundle/attack_self(mob/user) var/oldloc = loc @@ -76,7 +81,7 @@ if(gc_destroyed || loc != oldloc) return src.worth -= amount - src.update_icon() + src.update_appearance() if(!worth) usr.temporarilyRemoveItemFromInventory(src) if(amount in list(1000,500,200,100,50,20,1)) @@ -86,7 +91,7 @@ else var/obj/item/spacecash/bundle/bundle = new (usr.loc) bundle.worth = amount - bundle.update_icon() + bundle.update_appearance() user.put_in_hands(bundle) if(!worth) qdel(src) @@ -143,7 +148,7 @@ return var/obj/item/spacecash/bundle/bundle = new (spawnloc) bundle.worth = sum - bundle.update_icon() + bundle.update_appearance() if (ishuman(human_user) && !human_user.get_active_held_item()) human_user.put_in_hands(bundle) diff --git a/code/modules/events/intel_computer.dm b/code/modules/events/intel_computer.dm index a8a58cd29135d..8a2a0a34f0c60 100644 --- a/code/modules/events/intel_computer.dm +++ b/code/modules/events/intel_computer.dm @@ -20,6 +20,6 @@ /datum/round_event/intel_computer/proc/activate(obj/machinery/computer/intel_computer/I) I.active = TRUE - SSminimaps.add_marker(I, MINIMAP_FLAG_ALL, image('modular_RUtgmc/icons/UI_icons/map_blips.dmi', null, "intel", ABOVE_FLOAT_LAYER)) - priority_announce("Our data sifting algorithm has detected valuable classified information on a access point in [get_area(I)]. Should this data be recovered by ground forces, a reward will be given in the form of increased assets.", title = "TGMC Intel Division") + SSminimaps.add_marker(I, MINIMAP_FLAG_ALL, image('modular_RUtgmc/icons/UI_icons/map_blips.dmi', null, "intel", ABOVE_FLOAT_LAYER)) //RUTGMC EDIT + minor_announce("Our data sifting algorithm has detected valuable classified information on a access point in [get_area(I)]. Should this data be recovered by ground forces, a reward will be given in the form of increased assets.", title = "TGMC Intel Division") xeno_message("We sense a looming threat from [get_area(I)]. We must keep the hosts away from there.") diff --git a/code/modules/factory/howtopaper.dm b/code/modules/factory/howtopaper.dm index 36e56666bb0a8..fcd1ff0f0128a 100644 --- a/code/modules/factory/howtopaper.dm +++ b/code/modules/factory/howtopaper.dm @@ -10,15 +10,15 @@ Machines will always output in the direction they are facing and input from the opposite direction.

    RECIPES:
    - WP GRENADE:
    - UNBOXER -> CUTTER -> HEATER -> FORMER
    -
    - M15 GRENADE:
    - UNBOXER -> CUTTER -> FORMER
    + ALL GRENADES:
    + UNBOXER -> CUTTER -> HEATER -> FORMER -> COMPRESSOR

    PIZZA:
    UNBOXER -> CUTTER -> HEATER

    + ALL C4 PLASTIQUES AND DETPACKS:
    + UNBOXER -> CUTTER -> FLATTER
    +
    ALL SADAR AMMO TYPES:
    UNBOXER -> CUTTER -> HEATER -> FLATTER -> ATOMIC RECONSTRUCTOR

    @@ -34,14 +34,14 @@ MATEBA SPEEDLOADER:
    UNBOXER -> CUTTER -> FLATTER

    - RAILGUN MAGAZINE:
    + ALL RAILGUN AMMO:
    UNBOXER -> CUTTER -> FLATTER -> ATOMIC RECONSTRUCTOR

    MINIGUN POWERPACK:
    UNBOXER -> CUTTER -> ATMOIC RECONSTRUCTOR -> FORMER

    - RAZORFOAM GRENADES:
    - UNBOXER -> CUTTER -> FORMER -> HEATER
    + SR-127 FLAK AMMO:
    + UNBOXER -> CUTTER -> ATOMIC RECONSTRUCTOR

    ALL AMR AMMO:
    UNBOXER -> CUTTER -> ATOMIC RECONSTRUCTOR
    @@ -49,25 +49,37 @@ ALL HOWITZER SHELL TYPES:
    UNBOXER -> CUTTER -> DRILLER -> COMPRESSOR -> GALVANIZER

    - SWAT MASKS:
    - UNBOXER -> COMPRESSOR -> GALVANIZER -> CUTTER
    -
    - MEDICAL EQUIPMENT:
    - UNBOXER -> FLATTER -> COMPRESSOR -> DRILLER -> GALVANIZER
    -
    - ALL MODULES:
    - UNBOXER -> CUTTER -> FLATTER -> DRILLER -> HEATER -> COMPRESSOR -> GALVANIZER
    -
    ALL MORTAR AMMO:
    UNBOXER -> CUTTER -> HEATER -> DRILLER -> ATOMIC RECONSTRUCTOR -> GALVANIZER

    MLRS ROCKETS:
    UNBOXER -> CUTTER -> HEATER -> DRILLER -> COMPRESSOR -> GALVANIZER

    + ALL AGLS AMMO:
    + UNBOXER -> CUTTER -> HEATER -> CONSTRUCTOR -> FLATTER -> GALVANIZER
    +
    + ALL TAT AMMO:
    + UNBOXER -> CUTTER -> HEATER -> FLATTER -> COMPRESSOR -> GALVANIZER
    +
    + ALL FK-88 AMMO:
    + UNBOXER -> HEATER -> COMPRESSOR -> DRILLER -> GALVANIZER -> FORMER
    +
    + ALL ATR-22 AMMO:
    + UNBOXER -> HEATER -> COMPRESSOR -> GALVANIZER -> FORMER
    +
    THERMOBARIC WP ROCKETS:
    UNBOXER -> CUTTER -> HEATER -> FLATTER -> ATOMIC RECONSTRUCTOR -> GALVANIZER

    - DROP PODS:
    + SWAT MASKS:
    + UNBOXER -> COMPRESSOR -> GALVANIZER -> CUTTER
    +
    + MEDICAL EQUIPMENT:
    + UNBOXER -> FLATTER -> COMPRESSOR -> DRILLER -> GALVANIZER
    +
    + ALL MODULES:
    + UNBOXER -> CUTTER -> FLATTER -> DRILLER -> HEATER -> COMPRESSOR -> GALVANIZER
    +
    + MISCELLANEOUS EQUIPMENT (DROP PODS, FLOODLIGHTS, CAMERAS):
    UNBOXER -> CUTTER -> HEATER -> ATOMIC RECONSTRUCTOR-> FORMER

    "} diff --git a/code/modules/factory/machines.dm b/code/modules/factory/machines.dm index 346ba5d1c2308..7a18e8bf0da86 100644 --- a/code/modules/factory/machines.dm +++ b/code/modules/factory/machines.dm @@ -6,7 +6,7 @@ density = TRUE anchored = FALSE // start off unanchored so its easier to move resistance_flags = XENO_DAMAGEABLE - flags_atom = PREVENT_CONTENTS_EXPLOSION + atom_flags = PREVENT_CONTENTS_EXPLOSION ///process type we will use to determine what step of the production process this machine will do var/process_type = FACTORY_MACHINE_HEATER ///Time in ticks that this machine takes to process one item diff --git a/code/modules/factory/parts.dm b/code/modules/factory/parts.dm index 38ce1b08a701e..c57da30dcbe3e 100644 --- a/code/modules/factory/parts.dm +++ b/code/modules/factory/parts.dm @@ -39,35 +39,111 @@ next_machine = recipe[stage][STEP_NEXT_MACHINE] icon_state = recipe[stage][STEP_ICON_STATE] -GLOBAL_LIST_INIT(phosnade_recipe, list( +GLOBAL_LIST_INIT(grenade, list( list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"), list(STEP_NEXT_MACHINE = FACTORY_MACHINE_HEATER, STEP_ICON_STATE = "cutplate"), - list(STEP_NEXT_MACHINE = FACTORY_MACHINE_FORMER, STEP_ICON_STATE = "hotplate"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_FORMER, STEP_ICON_STATE = "roundplate"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_COMPRESSOR, STEP_ICON_STATE = "hotplate"), )) +/obj/item/factory_part/bignade + name = "\improper M15 grenade assembly" + desc = "An incomplete M15 grenade." + result = /obj/item/explosive/grenade/m15 + +/obj/item/factory_part/bignade/Initialize(mapload) + . = ..() + recipe = GLOB.grenade + +/obj/item/factory_part/incennade + name = "incendiary grenade assembly" + desc = "An incomplete incendiary grenade casing." + result = /obj/item/explosive/grenade/incendiary + +/obj/item/factory_part/incennade/Initialize(mapload) + . = ..() + recipe = GLOB.grenade + +/obj/item/factory_part/stickynade + name = "adhesive grenade assembly." + desc = "An incomplete adhesive grenade casing." + result = /obj/item/explosive/grenade/sticky + +/obj/item/factory_part/stickynade/Initialize(mapload) + . = ..() + recipe = GLOB.grenade + /obj/item/factory_part/phosnade name = "phosphorus grenade assembly" - desc = "A incomplete phosphorus grenade assembly" + desc = "An incomplete phosphorus grenade casing." result = /obj/item/explosive/grenade/phosphorus /obj/item/factory_part/phosnade/Initialize(mapload) . = ..() - recipe = GLOB.phosnade_recipe + recipe = GLOB.grenade +/obj/item/factory_part/cloaknade + name = "cloaking grenade assembly" + desc = "An incomplete cloaking grenade casing." + result = /obj/item/explosive/grenade/smokebomb/cloak -GLOBAL_LIST_INIT(bignade_recipe, list( - list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"), - list(STEP_NEXT_MACHINE = FACTORY_MACHINE_FORMER, STEP_ICON_STATE = "roundplate"), - )) +/obj/item/factory_part/cloaknade/Initialize(mapload) + . = ..() + recipe = GLOB.grenade -/obj/item/factory_part/bignade - name = "\improper M15 grenade assembly" - desc = "An incomplete M15 grenade." - result = /obj/item/explosive/grenade/m15 +/obj/item/factory_part/tfootnade + name = "tanglefoot grenade assembly" + desc ="An incomplete tanglefoot grenade casing." + result = /obj/item/explosive/grenade/smokebomb/drain -/obj/item/factory_part/bignade/Initialize(mapload) +/obj/item/factory_part/tfootnade/Initialize(mapload) + . = ..() + recipe = GLOB.grenade + +/obj/item/factory_part/trailblazer + name = "trailblazer grenade assembly" + desc = "An incomplete trailblazer grenade casing." + result = /obj/item/explosive/grenade/sticky/trailblazer + +/obj/item/factory_part/trailblazer/Initialize(mapload) . = ..() - recipe = GLOB.bignade_recipe + recipe = GLOB.grenade + +/obj/item/factory_part/lasenade + name = "laser grenade assembly" + desc = "An incomplete laser grenade casing." + result = /obj/item/explosive/grenade/bullet/laser + +/obj/item/factory_part/lasenade/Initialize(mapload) + . = ..() + recipe = GLOB.grenade + +/obj/item/factory_part/hefanade + name = "HEFA fragmentation grenade assembly" + desc = "An incomplete HEFA fragmentation grenade casing." + result = /obj/item/explosive/grenade/bullet/hefa + +/obj/item/factory_part/hefanade/Initialize(mapload) + . = ..() + recipe = GLOB.grenade + +/obj/item/factory_part/antigas + name = "anti-gas smoke grenade assembly" + desc = "An incomplete anti-gas smoke grenade casing." + result = /obj/item/explosive/grenade/smokebomb/antigas + +/obj/item/factory_part/antigas/Initialize(mapload) + . = ..() + recipe = GLOB.grenade + +/obj/item/factory_part/razornade + name = "razorfoam grenade assembly" + desc = "An unfinished Razorfoam grenade casing." + result = /obj/item/explosive/grenade/chem_grenade/razorburn_small + +/obj/item/factory_part/razornade/Initialize(mapload) + . = ..() + recipe = GLOB.grenade GLOBAL_LIST_INIT(pizza_recipe, list( list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "dough"), @@ -83,6 +159,38 @@ GLOBAL_LIST_INIT(pizza_recipe, list( . = ..() recipe = GLOB.pizza_recipe +GLOBAL_LIST_INIT(plastique_recipe, list( + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "cutplate"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_FLATTER, STEP_ICON_STATE = "hotplate"), +)) + +/obj/item/factory_part/plastique + name = "\improper C4 explosive assembly" + desc = "An unfinshed C4 plastique explosive assembly." + result = /obj/item/explosive/plastique + +/obj/item/factory_part/plastique/Initialize(mapload) + . = ..() + recipe = GLOB.plastique_recipe + +/obj/item/factory_part/plastique_incendiary + name = "\improper EX-62 Genghis incendiary assembly" + desc = "An unfinshed EX-62 Genghis incendiary charge assembly." + result = /obj/item/explosive/plastique/genghis_charge + +/obj/item/factory_part/plastique_incendiary/Initialize(mapload) + . = ..() + recipe = GLOB.plastique_recipe + +/obj/item/factory_part/detpack + name = "\improper Detpack assembly" + desc = "An unfinished Detpack charge assembly" + result = /obj/item/detpack + +/obj/item/factory_part/detpack/Initialize(mapload) + . = ..() + recipe = GLOB.plastique_recipe + GLOBAL_LIST_INIT(sadar_ammo_recipe, list( list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"), list(STEP_NEXT_MACHINE = FACTORY_MACHINE_HEATER, STEP_ICON_STATE = "cutplate"), @@ -277,6 +385,24 @@ GLOBAL_LIST_INIT(IFF_ammo, list( . = ..() recipe = GLOB.IFF_ammo +/obj/item/factory_part/sniper_flak_magazine + name = "\improper FLAK sniper bullet box" + desc = "A box with unfinished flak sniper rounds inside." + result = /obj/item/ammo_magazine/rifle/chamberedrifle/flak + +/obj/item/factory_part/sniper_flak_magazine/Initialize(mapload) + . = ..() + recipe = GLOB.IFF_ammo + +/obj/item/factory_part/sniper_flak_magazine + name = "\improper FLAK sniper bullet box" + desc = "A box with unfinished flak sniper rounds inside." + result = /obj/item/ammo_magazine/rifle/chamberedrifle/flak + +/obj/item/factory_part/sniper_flak_magazine/Initialize(mapload) + . = ..() + recipe = GLOB.IFF_ammo + GLOBAL_LIST_INIT(mateba_speedloader, list( list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"), list(STEP_NEXT_MACHINE = FACTORY_MACHINE_FLATTER, STEP_ICON_STATE = "bulletbox"), @@ -306,6 +432,24 @@ GLOBAL_LIST_INIT(railgun_magazine, list( . = ..() recipe = GLOB.railgun_magazine +/obj/item/factory_part/railgun_hvap_magazine + name = "railgun round" + desc = "An unfinished magnetically propelled steel rod." + result = /obj/item/ammo_magazine/railgun/hvap + +/obj/item/factory_part/railgun_hvap_magazine/Initialize(mapload) + . = ..() + recipe = GLOB.railgun_magazine + +/obj/item/factory_part/railgun_smart_magazine + name = "railgun round" + desc = "An unfinished magnetically propelled steel rod." + result = /obj/item/ammo_magazine/railgun/smart + +/obj/item/factory_part/railgun_smart_magazine/Initialize(mapload) + . = ..() + recipe = GLOB.railgun_magazine + GLOBAL_LIST_INIT(minigun_powerpack, list( list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"), list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CONSTRUCTOR, STEP_ICON_STATE = "cutplate"), @@ -320,62 +464,6 @@ GLOBAL_LIST_INIT(minigun_powerpack, list( . = ..() recipe = GLOB.minigun_powerpack -GLOBAL_LIST_INIT(razornade, list( - list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"), - list(STEP_NEXT_MACHINE = FACTORY_MACHINE_FORMER, STEP_ICON_STATE = "roundplate"), - list(STEP_NEXT_MACHINE = FACTORY_MACHINE_HEATER, STEP_ICON_STATE = "cutplate"), - )) -/obj/item/factory_part/razornade - name = "razorfoam grenade" - desc = "An unfinished Razorfoam grenade casing." - result = /obj/item/explosive/grenade/chem_grenade/razorburn_smol - -/obj/item/factory_part/razornade/Initialize(mapload) - . = ..() - recipe = GLOB.razornade - -GLOBAL_LIST_INIT(howitzer_shell, list( - list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"), - list(STEP_NEXT_MACHINE = FACTORY_MACHINE_DRILLER, STEP_ICON_STATE = "cutplate"), - list(STEP_NEXT_MACHINE = FACTORY_MACHINE_COMPRESSOR, STEP_ICON_STATE = "barrelplate"), - list(STEP_NEXT_MACHINE = FACTORY_MACHINE_GALVANIZER, STEP_ICON_STATE = "rockettube"), - )) -/obj/item/factory_part/howitzer_shell_he - name = "howitzer shell" - desc = "An unfinished high explosive howitzer shell." - result = /obj/item/mortal_shell/howitzer/he - -/obj/item/factory_part/howitzer_shell_he/Initialize(mapload) - . = ..() - recipe = GLOB.howitzer_shell - -/obj/item/factory_part/howitzer_shell_incen - name = "howitzer shell" - desc = "An unfinished incendiary howitzer shell." - result = /obj/item/mortal_shell/howitzer/incendiary - -/obj/item/factory_part/howitzer_shell_incen/Initialize(mapload) - . = ..() - recipe = GLOB.howitzer_shell - -/obj/item/factory_part/howitzer_shell_wp - name = "howitzer shell" - desc = "An unfinished white phosphorus Howitzer shell." - result = /obj/item/mortal_shell/howitzer/white_phos - -/obj/item/factory_part/howitzer_shell_wp/Initialize(mapload) - . = ..() - recipe = GLOB.howitzer_shell - -/obj/item/factory_part/howitzer_shell_tfoot - name = "howitzer shell" - desc = "An unfinished high explosive howitzer shell." - result = /obj/item/mortal_shell/howitzer/plasmaloss - -/obj/item/factory_part/howitzer_shell_tfoot/Initialize(mapload) - . = ..() - recipe = GLOB.howitzer_shell - GLOBAL_LIST_INIT(swat_mask, list( list(STEP_NEXT_MACHINE = FACTORY_MACHINE_COMPRESSOR, STEP_ICON_STATE = "cutplate"), list(STEP_NEXT_MACHINE = FACTORY_MACHINE_GALVANIZER, STEP_ICON_STATE = "steelingot"), @@ -391,38 +479,6 @@ GLOBAL_LIST_INIT(swat_mask, list( . = ..() recipe = GLOB.swat_mask -GLOBAL_LIST_INIT(meds, list( - list(STEP_NEXT_MACHINE = FACTORY_MACHINE_FLATTER, STEP_ICON_STATE = "uncutplate"), - list(STEP_NEXT_MACHINE = FACTORY_MACHINE_COMPRESSOR, STEP_ICON_STATE = "req_bag3"), - list(STEP_NEXT_MACHINE = FACTORY_MACHINE_DRILLER, STEP_ICON_STATE = "req_bag1"), - list(STEP_NEXT_MACHINE = FACTORY_MACHINE_GALVANIZER, STEP_ICON_STATE = "req_bag2"), - )) - -/obj/item/factory_part/med_advpack - name = "advanced first-aid kit" - desc = "An unfinished advanced first-aid ." - result = list( - /obj/item/stack/medical/heal_pack/advanced/bruise_pack, - /obj/item/stack/medical/heal_pack/advanced/bruise_pack, - /obj/item/stack/medical/heal_pack/advanced/bruise_pack, - /obj/item/stack/medical/heal_pack/advanced/bruise_pack, - /obj/item/stack/medical/heal_pack/advanced/bruise_pack, - /obj/item/stack/medical/heal_pack/advanced/burn_pack, - /obj/item/stack/medical/heal_pack/advanced/burn_pack, - /obj/item/stack/medical/heal_pack/advanced/burn_pack, - /obj/item/stack/medical/heal_pack/advanced/burn_pack, - /obj/item/stack/medical/heal_pack/advanced/burn_pack, - /obj/item/stack/medical/splint, - /obj/item/stack/medical/splint, - /obj/item/stack/medical/splint, - /obj/item/stack/medical/splint, - /obj/item/stack/medical/splint, - ) - -/obj/item/factory_part/med_advpack/Initialize(mapload) - . = ..() - recipe = GLOB.meds - GLOBAL_LIST_INIT(module, list( list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "cutplate"), list(STEP_NEXT_MACHINE = FACTORY_MACHINE_FLATTER, STEP_ICON_STATE = "roundplate"), @@ -483,6 +539,8 @@ GLOBAL_LIST_INIT(module, list( . = ..() recipe = GLOB.module +// Mortar + GLOBAL_LIST_INIT(mortar_shell, list( list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"), list(STEP_NEXT_MACHINE = FACTORY_MACHINE_HEATER, STEP_ICON_STATE = "cutplate"), @@ -536,7 +594,55 @@ GLOBAL_LIST_INIT(mortar_shell, list( . = ..() recipe = GLOB.mortar_shell +// +// Howitzer +// + +GLOBAL_LIST_INIT(howitzer_shell, list( + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_DRILLER, STEP_ICON_STATE = "cutplate"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_COMPRESSOR, STEP_ICON_STATE = "barrelplate"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_GALVANIZER, STEP_ICON_STATE = "rockettube"), + )) +/obj/item/factory_part/howitzer_shell_he + name = "howitzer shell" + desc = "An unfinished high explosive howitzer shell." + result = /obj/item/mortal_shell/howitzer/he + +/obj/item/factory_part/howitzer_shell_he/Initialize(mapload) + . = ..() + recipe = GLOB.howitzer_shell + +/obj/item/factory_part/howitzer_shell_incen + name = "howitzer shell" + desc = "An unfinished incendiary howitzer shell." + result = /obj/item/mortal_shell/howitzer/incendiary +/obj/item/factory_part/howitzer_shell_incen/Initialize(mapload) + . = ..() + recipe = GLOB.howitzer_shell + +/obj/item/factory_part/howitzer_shell_wp + name = "howitzer shell" + desc = "An unfinished white phosphorus Howitzer shell." + result = /obj/item/mortal_shell/howitzer/white_phos + +/obj/item/factory_part/howitzer_shell_wp/Initialize(mapload) + . = ..() + recipe = GLOB.howitzer_shell + +/obj/item/factory_part/howitzer_shell_tfoot + name = "howitzer shell" + desc = "An unfinished high explosive howitzer shell." + result = /obj/item/mortal_shell/howitzer/plasmaloss + +/obj/item/factory_part/howitzer_shell_tfoot/Initialize(mapload) + . = ..() + recipe = GLOB.howitzer_shell + +// +// MLRS +// GLOBAL_LIST_INIT(mlrs_rocket, list( list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"), @@ -555,6 +661,23 @@ GLOBAL_LIST_INIT(mlrs_rocket, list( . = ..() recipe = GLOB.mlrs_rocket +/obj/item/factory_part/mlrs_rocket/gas + name = "\improper MLRS mustard gas rocket" + desc = "An unfinished mustard gas rocket." + result = /obj/item/storage/box/mlrs_rockets/gas + +/obj/item/factory_part/mlrs_rocket/cloak + name = "\improper MLRS cloak rocket" + desc = "An unfinished cloak gas rocket." + result = /obj/item/storage/box/mlrs_rockets/cloak + +/obj/item/factory_part/mlrs_rocket/incendiary + name = "\improper MLRS Incendiary rocket" + desc = "An unfinished incendiary rocket." + result = /obj/item/storage/box/mlrs_rockets/incendiary + +// Thermobaric + GLOBAL_LIST_INIT(thermobaric_wp_recipe, list( list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"), list(STEP_NEXT_MACHINE = FACTORY_MACHINE_HEATER, STEP_ICON_STATE = "cutplate"), @@ -572,7 +695,7 @@ GLOBAL_LIST_INIT(thermobaric_wp_recipe, list( . = ..() recipe = GLOB.thermobaric_wp_recipe -GLOBAL_LIST_INIT(drop_pod_recipe, list( +GLOBAL_LIST_INIT(equipment_recipe, list( list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"), list(STEP_NEXT_MACHINE = FACTORY_MACHINE_HEATER, STEP_ICON_STATE = "cutplate"), list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CONSTRUCTOR, STEP_ICON_STATE = "hotplate"), @@ -581,10 +704,193 @@ GLOBAL_LIST_INIT(drop_pod_recipe, list( /obj/item/factory_part/drop_pod name = "TGMC Zeus orbital drop pod assembly" - desc = "An incomplete Zeus orbital drop pod assembly" + desc = "An incomplete Zeus orbital drop pod assembly." result = /obj/structure/droppod /obj/item/factory_part/drop_pod/Initialize(mapload) . = ..() - recipe = GLOB.drop_pod_recipe + recipe = GLOB.equipment_recipe + +/obj/item/factory_part/deployable_floodlight + name = "\improper deployable floodlight assembly" + desc = "An incomplete deployable floodlight assembly." + result = /obj/item/deployable_floodlight + +/obj/item/factory_part/deployable_floodlight/Initialize(mapload) + . = ..() + recipe = GLOB.equipment_recipe + +/obj/item/factory_part/deployable_camera + name = "\improper deployable security camera assembly" + desc = "An incomplete deployable security camera assembly." + result = /obj/item/deployable_camera + +/obj/item/factory_part/deployable_camera/Initialize(mapload) + . = ..() + recipe = GLOB.equipment_recipe + +GLOBAL_LIST_INIT(agls_recipe, list( + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_HEATER, STEP_ICON_STATE = "cutplate"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CONSTRUCTOR, STEP_ICON_STATE = "hotplate"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_FLATTER, STEP_ICON_STATE = "rockettube"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_GALVANIZER, STEP_ICON_STATE = "hotplate"), + )) + +/obj/item/factory_part/agls_he + name = "\improper AGLS HE magazine assembly" + desc = "An incomplete AGLS HE magazine assembly." + result = /obj/item/ammo_magazine/standard_agls + +/obj/item/factory_part/obj/item/factory_part/agls_he/Initialize(mapload) + . = ..() + recipe = GLOB.agls_recipe + +/obj/item/factory_part/agls_frag + name = "\improper AGLS Frag magazine assembly" + desc = "An incomplete AGLS Frag magazine assembly." + result = /obj/item/ammo_magazine/standard_agls/fragmentation + +/obj/item/factory_part/agls_frag/Initialize(mapload) + . = ..() + recipe = GLOB.agls_recipe + +/obj/item/factory_part/agls_incendiary + name = "\improper AGLS HE magazine assembly" + desc = "An incomplete AGLS HE magazine assembly." + result = /obj/item/ammo_magazine/standard_agls/incendiary + +/obj/item/factory_part/agls_incendiary/Initialize(mapload) + . = ..() + recipe = GLOB.agls_recipe + +/obj/item/factory_part/agls_flare + name = "\improper AGLS HE magazine assembly" + desc = "An incomplete AGLS HE magazine assembly." + result = /obj/item/ammo_magazine/standard_agls/flare + +/obj/item/factory_part/agls_flare/Initialize(mapload) + . = ..() + recipe = GLOB.agls_recipe + +/obj/item/factory_part/agls_cloak + name = "\improper AGLS HE magazine assembly" + desc = "An incomplete AGLS HE magazine assembly." + result = /obj/item/ammo_magazine/standard_agls/cloak + +/obj/item/factory_part/agls_cloak/Initialize(mapload) + . = ..() + recipe = GLOB.agls_recipe + +/obj/item/factory_part/agls_tanglefoot + name = "\improper AGLS HE magazine assembly" + desc = "An incomplete AGLS HE magazine assembly." + result = /obj/item/ammo_magazine/standard_agls/tanglefoot + +/obj/item/factory_part/agls_tanglefoot/Initialize(mapload) + . = ..() + recipe = GLOB.agls_recipe + +GLOBAL_LIST_INIT(atgun_recipe, list( + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_HEATER, STEP_ICON_STATE = "cutplate"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_FLATTER, STEP_ICON_STATE = "hotplate"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_COMPRESSOR, STEP_ICON_STATE = "rockettube"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_GALVANIZER, STEP_ICON_STATE = "rockettube"), + )) + +/obj/item/factory_part/atgun_aphe + name = "\improper AT-36 APHE shell assembly" + desc = "An incomplete AT-36 APHE shell assembly." + result = /obj/item/ammo_magazine/standard_atgun + +/obj/item/factory_part/atgun_aphe/Initialize(mapload) + . = ..() + recipe = GLOB.atgun_recipe + +/obj/item/factory_part/atgun_apcr + name = "\improper AT-36 APCR shell assembly" + desc = "An incomplete AT-36 APCR shell assembly." + result = /obj/item/ammo_magazine/standard_atgun/apcr +/obj/item/factory_part/atgun_apcr/Initialize(mapload) + . = ..() + recipe = GLOB.atgun_recipe + +/obj/item/factory_part/atgun_he + name = "\improper AT-36 HE shell assembly" + desc = "An incomplete AT-36 HE shell assembly." + result = /obj/item/ammo_magazine/standard_atgun/he + +/obj/item/factory_part/atgun_he/Initialize(mapload) + . = ..() + recipe = GLOB.atgun_recipe + +/obj/item/factory_part/atgun_beehive + name = "\improper AT-36 Beehive shell assembly" + desc = "An incomplete AT-36 Beehive shell assembly." + result = /obj/item/ammo_magazine/standard_atgun/beehive + +/obj/item/factory_part/atgun_beehive/Initialize(mapload) + . = ..() + recipe = GLOB.atgun_recipe + +/obj/item/factory_part/atgun_incend + name = "\improper AT-36 Napalm shell assembly" + desc = "An incomplete AT-36 Napalm shell assembly." + result = /obj/item/ammo_magazine/standard_atgun/incend + +/obj/item/factory_part/atgun_incend/Initialize(mapload) + . = ..() + recipe = GLOB.atgun_recipe + +GLOBAL_LIST_INIT(heavy_isg_recipe, list( + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_HEATER, STEP_ICON_STATE = "uncutplate"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_COMPRESSOR, STEP_ICON_STATE = "cutplate"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_DRILLER, STEP_ICON_STATE = "hotplate"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_GALVANIZER, STEP_ICON_STATE = "rockettube"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_FORMER, STEP_ICON_STATE = "rockettube"), + )) + +/obj/item/factory_part/heavy_isg_he + name = "\improper FK-88 HE shell assembly" + desc = "An incomplete FK-88 HE shell assembly." + result = /obj/item/ammo_magazine/heavy_isg/he + +/obj/item/factory_part/heavy_isg_he/Initialize(mapload) + . = ..() + recipe = GLOB.heavy_isg_recipe + +/obj/item/factory_part/heavy_isg_sabot + name = "\improper FK-88 HE shell assembly" + desc = "An incomplete FK-88 APFDS shell assembly." + result = /obj/item/ammo_magazine/heavy_isg/sabot + +/obj/item/factory_part/heavy_isg_sabot/Initialize(mapload) + . = ..() + recipe = GLOB.heavy_isg_recipe + +GLOBAL_LIST_INIT(ac_recipe, list( + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_HEATER, STEP_ICON_STATE = "uncutplate"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_COMPRESSOR, STEP_ICON_STATE = "cutplate"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_GALVANIZER, STEP_ICON_STATE = "rockettube"), + list(STEP_NEXT_MACHINE = FACTORY_MACHINE_FORMER, STEP_ICON_STATE = "rockettube"), + )) + +/obj/item/factory_part/ac_hv + name = "\improper ATR-22 high velocity magazine assembly" + desc = "An incomplete ATR-22 high velocity magazine assembly." + result = /obj/item/ammo_magazine/auto_cannon + +/obj/item/factory_part/ac_hv/Initialize(mapload) + . = ..() + recipe = GLOB.ac_recipe + +/obj/item/factory_part/ac_flak + name = "\improper ATR-22 flak magazine assembly" + desc = "An incomplete ATR-22 flak magazine assembly." + result = /obj/item/ammo_magazine/auto_cannon/flak + +/obj/item/factory_part/ac_flak/Initialize(mapload) + . = ..() + recipe = GLOB.ac_recipe diff --git a/code/modules/factory/unboxer.dm b/code/modules/factory/unboxer.dm index 154ec3d995a05..1228d6e986c43 100644 --- a/code/modules/factory/unboxer.dm +++ b/code/modules/factory/unboxer.dm @@ -54,6 +54,7 @@ balloon_alert(user, "Facing [dir2text(dir)]") /obj/machinery/unboxer/update_icon_state() + . = ..() if(datum_flags & DF_ISPROCESSING) icon_state = "unboxer" return @@ -105,22 +106,95 @@ qdel(refill) new /obj/item/stack/sheet/metal(user.loc)//simulates leftover trash +/obj/item/factory_refill/bignade_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/bignade + refill_amount = 50 + +/obj/item/factory_refill/incennade_refill + name = "box of incendiary grenade plates" + desc = "A box with round metal plates inside that could be used to construct Incendiary genades. Used to refill Unboxers." + refill_type = /obj/item/factory_part/incennade + refill_amount = 50 + +/obj/item/factory_refill/stickynade_refill + name = "box of adhesive genade plates" + desc = "A box with round metal plates inside that could be used to construct Adhesive grenades. Used to refill Unboxers." + refill_type = /obj/item/factory_part/stickynade + refill_amount = 50 + /obj/item/factory_refill/phosnade_refill name = "box of rounded metal plates" desc = "A box with round metal plates inside. Used to refill Unboxers." refill_type = /obj/item/factory_part/phosnade - refill_amount = 25 + refill_amount = 50 + +/obj/item/factory_refill/cloaknade_refill + name = "box of cloaking grenade plates" + desc = "A box with round metal plates inside that could be used to construct Cloaking grenades. Used to refill Unboxers." + refill_type = /obj/item/factory_part/cloaknade + refill_amount = 50 + +/obj/item/factory_refill/tfootnade_refill + name = "box of tangle grenade plates" + desc = "A box with round metal plates inside that could be used to construct Tanglefoot grenades. Used to refill Unboxers." + refill_type = /obj/item/factory_part/tfootnade + refill_amount = 50 + +/obj/item/factory_refill/trailblazer_refill + name = "box of trailblazer grenade plates" + desc = "A box with round metal plates inside that could be used to construct Trailblazer genades. Used to refill Unboxers." + refill_type = /obj/item/factory_part/trailblazer + refill_amount = 50 + +/obj/item/factory_refill/lasenade_refill + name = "box of laser grenade plates and cells." + desc = "A box with plates and cells inside that could be used to construct Laser grenades. Used to refill Unboxers." + refill_type = /obj/item/factory_part/lasenade + refill_amount = 50 + +/obj/item/factory_refill/hefanade_refill + name = "box of hefa nade plates and shells." + desc = "A box with plates and shells inside that could be used to construct HEFA grenades. Used to refill Unboxers." + refill_type = /obj/item/factory_part/hefanade + refill_amount = 50 + +/obj/item/factory_refill/antigas_refill + name = "box of Anti-Gas plates." + desc = "A box with plates inside that could be used to construct M40-AG grenades. Used to refill Unboxers." + refill_type = /obj/item/factory_part/antigas + refill_amount = 50 -/obj/item/factory_refill/bignade_refill +/obj/item/factory_refill/razornade_refill name = "box of rounded metal plates" desc = "A box with round metal plates inside. Used to refill Unboxers." - refill_type = /obj/item/factory_part/bignade + refill_type = /obj/item/factory_part/razornade + refill_amount = 50 /obj/item/factory_refill/pizza_refill name = "box of rounded metal plates" desc = "A box with round metal plates inside. Used to refill Unboxers." refill_type = /obj/item/factory_part/pizza +/obj/item/factory_refill/plastique_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/plastique + refill_amount = 10 + +/obj/item/factory_refill/plastique_incendiary_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/plastique_incendiary + refill_amount = 5 + +/obj/item/factory_refill/detpack_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/detpack + refill_amount = 10 + /obj/item/factory_refill/sadar_wp_refill name = "box of rounded metal plates" desc = "A box with round metal plates inside. Used to refill Unboxers." @@ -226,17 +300,29 @@ refill_type = /obj/item/factory_part/railgun_magazine refill_amount = 20 +/obj/item/factory_refill/railgun_hvap_magazine_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/railgun_hvap_magazine + refill_amount = 20 + +/obj/item/factory_refill/railgun_smart_magazine_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/railgun_smart_magazine + refill_amount = 20 + /obj/item/factory_refill/minigun_powerpack_refill name = "box of rounded metal plates" desc = "A box with round metal plates inside. Used to refill Unboxers." refill_type = /obj/item/factory_part/minigun_powerpack refill_amount = 10 -/obj/item/factory_refill/razornade_refill +/obj/item/factory_refill/sniper_flak_magazine_refill name = "box of rounded metal plates" desc = "A box with round metal plates inside. Used to refill Unboxers." - refill_type = /obj/item/factory_part/razornade - refill_amount = 30 + refill_type = /obj/item/factory_part/sniper_flak_magazine + refill_amount = 20 /obj/item/factory_refill/amr_magazine_refill name = "box of rounded metal plates" @@ -286,12 +372,6 @@ refill_type = /obj/item/factory_part/swat_mask refill_amount = 20 -/obj/item/factory_refill/med_advpack_refill - name = "box of rounded metal plates" - desc = "A box of round metal plates inside. Used to refill Unboxers." - refill_type = /obj/item/factory_part/med_advpack - refill_amount = 10 - /obj/item/factory_refill/module_valk_refill name = "box of rounded metal plates" desc = "A box of round metal plates inside. Used to refill Unboxers." @@ -354,9 +434,117 @@ /obj/item/factory_refill/mlrs_rocket_refill name = "box of rounded metal plates" - desc = "A box with round metal plates inside. Used to refill Unboxers." + desc = "A box with round metal plates inside. Used to refill Unboxers. These will become High Explosive rockets for an MLRS, once finished." refill_type = /obj/item/factory_part/mlrs_rocket refill_amount = 6 + +/obj/item/factory_refill/mlrs_rocket_refill_gas + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers. These will become deadly Gas rockets for an MLRS, once finished." + refill_type = /obj/item/factory_part/mlrs_rocket/gas + refill_amount = 6 + +/obj/item/factory_refill/mlrs_rocket_refill_cloak + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers. These will become Cloaking Smoke rockets for an MLRS, once finished." + refill_type = /obj/item/factory_part/mlrs_rocket/cloak + refill_amount = 6 + +/obj/item/factory_refill/mlrs_rocket_refill_incendiary + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers. These will become Incendiary rockets for an MLRS, once finished." + refill_type = /obj/item/factory_part/mlrs_rocket/incendiary + refill_amount = 6 + +/obj/item/factory_refill/agls_he_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/agls_he + refill_amount = 10 + +/obj/item/factory_refill/agls_frag_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/agls_frag + refill_amount = 10 + +/obj/item/factory_refill/agls_incendiary_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/agls_incendiary + refill_amount = 10 + +/obj/item/factory_refill/agls_flare_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/agls_he + refill_amount = 10 + +/obj/item/factory_refill/agls_cloak_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/agls_cloak + refill_amount = 10 + +/obj/item/factory_refill/agls_tanglefoot_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/agls_tanglefoot + refill_amount = 10 + +/obj/item/factory_refill/atgun_aphe_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/atgun_aphe + refill_amount = 30 + +/obj/item/factory_refill/atgun_apcr_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/atgun_apcr + refill_amount = 30 + +/obj/item/factory_refill/atgun_he_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/atgun_he + refill_amount = 30 + +/obj/item/factory_refill/atgun_beehive_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/atgun_beehive + refill_amount = 30 + +/obj/item/factory_refill/atgun_incend_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/atgun_incend + refill_amount = 30 + +/obj/item/factory_refill/heavy_isg_he_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/heavy_isg_he + refill_amount = 5 + +/obj/item/factory_refill/heavy_isg_sabot_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/heavy_isg_sabot + refill_amount = 5 + +/obj/item/factory_refill/ac_hv_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/ac_hv + refill_amount = 10 + +/obj/item/factory_refill/ac_flak_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/ac_flak + refill_amount = 10 /obj/item/factory_refill/thermobaric_wp_refill name = "box of rounded metal plates" @@ -369,3 +557,27 @@ desc = "A box with round metal plates inside. Used to refill Unboxers." refill_type = /obj/item/factory_part/drop_pod refill_amount = 6 + +/obj/item/factory_refill/deployable_floodlight_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/deployable_floodlight + refill_amount = 10 + +/obj/item/factory_refill/deployable_camera_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/deployable_camera + refill_amount = 30 + +/obj/item/factory_refill/deployable_floodlight_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/deployable_floodlight + refill_amount = 10 + +/obj/item/factory_refill/deployable_camera_refill + name = "box of rounded metal plates" + desc = "A box with round metal plates inside. Used to refill Unboxers." + refill_type = /obj/item/factory_part/deployable_camera + refill_amount = 30 diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index f5b046043353f..4f9a8438e90a5 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -114,16 +114,6 @@ GLOBAL_LIST_INIT(hallucination_list, list( if(target.client) target.client.images |= current_image -/obj/effect/hallucination/simple/update_icon(new_state,new_icon,new_px=0,new_py=0) - icon_state = new_state - if(new_icon) - icon = new_icon - else - icon = initial(icon) - px = new_px - py = new_py - Show() - /obj/effect/hallucination/simple/Moved(atom/OldLoc, Dir) Show() diff --git a/code/modules/food_and_drinks/kitchen_machinery/griddle.dm b/code/modules/food_and_drinks/kitchen_machinery/griddle.dm index eb42c4380fdb3..f40a51729fa0d 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/griddle.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/griddle.dm @@ -31,7 +31,7 @@ /obj/machinery/griddle/crowbar_act(mob/living/user, obj/item/I) . = ..() - if(flags_atom & NODECONSTRUCT) + if(atom_flags & NODECONSTRUCT) return if(default_deconstruction_crowbar(I, ignore_panel = TRUE)) return diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill.dm b/code/modules/food_and_drinks/kitchen_machinery/grill.dm index e56bf20bf98e6..351f4244a5368 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/grill.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/grill.dm @@ -46,39 +46,21 @@ update_icon() return + if(isgrabitem(I) && grab_interact(I, user)) + user.changeNext_move(GRAB_SLAM_DELAY) + return TRUE + if(grill_fuel <= 0) to_chat(user, span_warning("No fuel!")) return ..() - if(isgrabitem(I)) - var/obj/item/grab/grab_item = I - if(!isliving(grab_item.grabbed_thing)) - return - var/mob/living/living_victim = grab_item.grabbed_thing - if(user.grab_state < GRAB_AGGRESSIVE) - to_chat(user, span_warning("You need a better grip to do that!")) - return - if(user.do_actions) - return - - user.visible_message(span_danger("[user] starts to press [living_victim] onto the [src]!")) - - if(!do_after(user, 0.5 SECONDS, NONE, living_victim, BUSY_ICON_DANGER) || QDELETED(src)) - return - - user.visible_message(span_danger("[user] slams [living_victim] onto the [src]!")) - living_victim.apply_damage(40, BURN, BODY_ZONE_HEAD, FIRE, updating_health = TRUE) - playsound(src, "sound/machines/grill/frying.ogg", 100, null, 9) - living_victim.emote("scream") - return - if(I.resistance_flags & INDESTRUCTIBLE) to_chat(user, span_warning("You don't feel it would be wise to grill [I]...")) return ..() //else if(IS_EDIBLE(I)) else if(istype(I, /obj/item/reagent_containers/food)) - if(HAS_TRAIT(I, TRAIT_NODROP) || (I.flags_item & (ITEM_ABSTRACT|DELONDROP))) + if(HAS_TRAIT(I, TRAIT_NODROP) || (I.item_flags & (ITEM_ABSTRACT|DELONDROP))) return ..() else if(HAS_TRAIT(I, TRAIT_FOOD_GRILLED)) to_chat(user, span_notice("[I] has already been grilled!")) @@ -98,6 +80,35 @@ return ..() +/obj/machinery/grill/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_OBJ_SLAM_DAMAGE, is_sharp = FALSE) + if(grill_fuel <= 0) + return ..() + + if(!isliving(grab.grabbed_thing)) + return + + var/mob/living/grabbed_mob = grab.grabbed_thing + if(user.a_intent != INTENT_HARM) + return + + if(user.grab_state <= GRAB_AGGRESSIVE) + to_chat(user, span_warning("You need a better grip to do that!")) + return + + if(user.do_actions) + return + + user.visible_message(span_danger("[user] starts to press [grabbed_mob] onto the [src]!")) + + if(!do_after(user, 0.5 SECONDS, NONE, grabbed_mob, BUSY_ICON_DANGER) || QDELETED(src)) + return + + user.visible_message(span_danger("[user] slams [grabbed_mob] onto the [src]!")) + grabbed_mob.apply_damage(40, BURN, BODY_ZONE_HEAD, FIRE, updating_health = TRUE) + playsound(src, "sound/machines/grill/frying.ogg", 100, null, 9) + grabbed_mob.emote("scream") + return TRUE + /obj/machinery/grill/process(delta_time) ..() update_icon() @@ -141,7 +152,7 @@ /obj/machinery/grill/deconstruct(disassembled = TRUE) finish_grill() - if(!(flags_atom & NODECONSTRUCT)) + if(!(atom_flags & NODECONSTRUCT)) new /obj/item/stack/sheet/metal(loc, 5) new /obj/item/stack/rods(loc, 5) ..() diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index 6dfb26a90d20d..5cebedbc7f907 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -40,7 +40,7 @@ icon = 'icons/obj/items/harvest.dmi' icon_state = "logs" force = 5 - flags_atom = NONE + atom_flags = NONE throwforce = 5 w_class = WEIGHT_CLASS_NORMAL throw_speed = 3 @@ -50,6 +50,8 @@ /obj/item/grown/log/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(I.sharp != IS_SHARP_ITEM_BIG) return @@ -68,7 +70,7 @@ icon_state = "sunflower" damtype = BURN force = 0 - flags_atom = NONE + atom_flags = NONE throwforce = 1 w_class = WEIGHT_CLASS_TINY throw_speed = 1 @@ -86,7 +88,7 @@ icon_state = "nettle" damtype = BURN force = 15 - flags_atom = NONE + atom_flags = NONE throwforce = 1 w_class = WEIGHT_CLASS_SMALL throw_speed = 1 @@ -173,6 +175,8 @@ /obj/item/corncob/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(I.sharp == IS_SHARP_ITEM_ACCURATE) to_chat(user, span_notice("You use [I] to fashion a pipe out of the corn cob!")) diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index 8f50c4d7dd787..b6f736c300f1d 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -366,19 +366,22 @@ //Refreshes the icon and sets the luminosity /obj/machinery/hydroponics/update_icon() + update_bioluminescence() + return ..() - overlays.Cut() +/obj/machinery/hydroponics/update_overlays() + . = ..() // Updates the plant overlay. if(!isnull(seed)) if(draw_warnings && health <= (seed.endurance / 2)) - overlays += "over_lowhealth3" + . += "over_lowhealth3" if(dead) - overlays += "[seed.plant_icon]-dead" + . += "[seed.plant_icon]-dead" else if(harvest) - overlays += "[seed.plant_icon]-harvest" + . += "[seed.plant_icon]-harvest" else if(age < seed.maturation) var/t_growthstate @@ -387,26 +390,27 @@ else t_growthstate = round(seed.maturation / seed.growth_stages) - overlays += "[seed.plant_icon]-grow[t_growthstate]" + . += "[seed.plant_icon]-grow[t_growthstate]" lastproduce = age else - overlays += "[seed.plant_icon]-grow[seed.growth_stages]" + . += "[seed.plant_icon]-grow[seed.growth_stages]" //Draw the cover. if(closed_system) - overlays += "hydrocover" + . += "hydrocover" //Updated the various alert icons. if(draw_warnings) if(waterlevel <= 10) - overlays += "over_lowwater3" + . += "over_lowwater3" if(nutrilevel <= 2) - overlays += "over_lownutri3" + . += "over_lownutri3" if(weedlevel >= 5 || pestlevel >= 5 || toxins >= 40) - overlays += "over_alert3" + . += "over_alert3" if(harvest) - overlays += "over_harvest3" + . += "over_harvest3" +/obj/machinery/hydroponics/proc/update_bioluminescence() // Update bioluminescence. if(seed) if(seed.biolum) @@ -418,7 +422,6 @@ set_light(0) - // If a weed growth is sufficient, this proc is called. /obj/machinery/hydroponics/proc/weed_invasion() @@ -494,6 +497,8 @@ /obj/machinery/hydroponics/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(I.is_open_container()) return @@ -660,6 +665,8 @@ /obj/machinery/hydroponics/soil/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/tool/shovel)) to_chat(user, "You clear up [src]!") diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index d7414880596dd..4ab1301d3e156 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -21,10 +21,10 @@ GLOBAL_LIST_EMPTY(gene_tag_masks) // Gene obfuscation for delicious trial and while(length(gene_tags)) var/gene_tag = pick(gene_tags) - var/gene_mask = "[num2hex(rand(0,255))]" + var/gene_mask = "[num2hex(rand(0,255), 2)]" while(gene_mask in used_masks) - gene_mask = "[num2hex(rand(0,255))]" + gene_mask = "[num2hex(rand(0,255), 2)]" used_masks += gene_mask gene_tags -= gene_tag diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index 5e7dd016e4aa4..abe1e1400fd15 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -75,6 +75,8 @@ /obj/machinery/botany/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/seeds)) if(seed) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index b376eb7c549bd..b56a3d077f1bb 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -3,7 +3,7 @@ name = "packet of seeds" icon = 'icons/obj/items/seeds.dmi' icon_state = "seed" - flags_atom = NONE + atom_flags = NONE w_class = WEIGHT_CLASS_TINY var/seed_type @@ -20,12 +20,17 @@ seed = GLOB.seed_types[seed_type] update_appearance() -//Updates strings and icon appropriately based on seed datum. -/obj/item/seeds/proc/update_appearance() +/obj/item/seeds/update_appearance() + . = ..() icon_state = seed.packet_icon + +/obj/item/seeds/update_name(updates) + . = ..() name = "packet of [seed.seed_name] [seed.seed_noun]" - desc = "It has a picture of [seed.display_name] on the front." +/obj/item/seeds/update_desc(updates) + . = ..() + desc = "It has a picture of [seed.display_name] on the front." /obj/item/seeds/poppyseed name = "poppy seed" diff --git a/code/modules/hydroponics/vines.dm b/code/modules/hydroponics/vines.dm index 9c0ca80b6ccf9..ebc6f9b6d531c 100644 --- a/code/modules/hydroponics/vines.dm +++ b/code/modules/hydroponics/vines.dm @@ -31,7 +31,8 @@ /obj/effect/plantsegment/attackby(obj/item/I, mob/user, params) . = ..() - + if(.) + return if(iswelder(I)) var/obj/item/tool/weldingtool/WT = I if(!WT.remove_fuel(0, user)) diff --git a/code/modules/instruments/items.dm b/code/modules/instruments/items.dm index 5b3ba0b888023..6eb2aff8518d4 100644 --- a/code/modules/instruments/items.dm +++ b/code/modules/instruments/items.dm @@ -151,7 +151,7 @@ icon_state = "harmonica" item_state = "harmonica" allowed_instrument_ids = list("crharmony", "harmonica") - flags_equip_slot = ITEM_SLOT_MASK + equip_slot_flags = ITEM_SLOT_MASK force = 5 w_class = WEIGHT_CLASS_SMALL actions_types = list(/datum/action/item_action/instrument) diff --git a/code/modules/keybindings/bindings_atom.dm b/code/modules/keybindings/bindings_atom.dm index aac9cf5835025..c0ad4d84b96cb 100644 --- a/code/modules/keybindings/bindings_atom.dm +++ b/code/modules/keybindings/bindings_atom.dm @@ -1,18 +1,18 @@ // You might be wondering why this isn't client level. If focus is null, we don't want you to move. // Only way to do that is to tie the behavior into the focus's keyLoop(). /atom/movable/keyLoop(client/user) - if(user.keys_held["Ctrl"]) + if(user?.keys_held["Ctrl"]) return var/movement_dir = NONE for(var/_key in user.keys_held) movement_dir = movement_dir | user.movement_keys[_key] - if(user.next_move_dir_add) + if(user?.next_move_dir_add) movement_dir |= user.next_move_dir_add - if(user.next_move_dir_sub) + if(user?.next_move_dir_sub) movement_dir &= ~user.next_move_dir_sub // Sanity checks in case you hold left and right and up to make sure you only go up if((movement_dir & NORTH) && (movement_dir & SOUTH)) movement_dir &= ~(NORTH|SOUTH) if((movement_dir & EAST) && (movement_dir & WEST)) movement_dir &= ~(EAST|WEST) - user.Move(get_step(src, movement_dir), movement_dir) + user?.Move(get_step(src, movement_dir), movement_dir) diff --git a/code/modules/language/sectoid.dm b/code/modules/language/sectoid.dm index 06c6cdc484310..455d953a76f21 100644 --- a/code/modules/language/sectoid.dm +++ b/code/modules/language/sectoid.dm @@ -9,5 +9,11 @@ key = "p" sentence_chance = 0 default_priority = 80 - syllables = list("wreh", "breh", "ayy", "gji", "pks", "jok",) + syllables = list("wreh", + "breh", + "ayy", + "gji", + "pks", + "jok", + ) icon_state = "aphasia" diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index 71107ca43df13..801b3e4da0a33 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -85,7 +85,7 @@ return directional_opacity = NONE for(var/atom/movable/opacity_source AS in opacity_sources) - if(opacity_source.flags_atom & ON_BORDER) + if(opacity_source.atom_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 diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm old mode 100644 new mode 100755 index ff602912d3036..8ba9dd799f0ac --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -101,25 +101,6 @@ /obj/effect/mapping_helpers/airlock layer = DOOR_HELPER_LAYER -/obj/effect/mapping_helpers/airlock/cyclelink_helper - name = "airlock cyclelink helper" - icon_state = "airlock_cyclelink_helper" - -/obj/effect/mapping_helpers/airlock/cyclelink_helper/Initialize(mapload) - . = ..() - if(!mapload) - log_world("### MAP WARNING, [src] spawned outside of mapload!") - return - //var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in loc - //if(airlock) - // if(airlock.cyclelinkeddir) - // log_world("### MAP WARNING, [src] at [AREACOORD(src)] tried to set [airlock] cyclelinkeddir, but it's already set!") - // else - // airlock.cyclelinkeddir = dir - //else - //log_world("### MAP WARNING, [src] failed to find an airlock at [AREACOORD(src)]") - - /obj/effect/mapping_helpers/airlock/locked name = "airlock lock helper" icon_state = "airlock_locked_helper" @@ -131,13 +112,12 @@ return var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in loc if(!airlock) - stack_trace("### MAP WARNING, [src] failed to find an airlock at [AREACOORD(src)]") - return + CRASH("### MAP WARNING, [src] failed to find an airlock at [AREACOORD(src)]") if(airlock.locked) stack_trace("### MAP WARNING, [src] at [AREACOORD(src)] tried to bolt [airlock] but it's already locked!") airlock.locked = TRUE var/turf/current_turf = get_turf(airlock) - current_turf.flags_atom |= AI_BLOCKED + current_turf.atom_flags |= AI_BLOCKED /obj/effect/mapping_helpers/airlock/abandoned name = "airlock abandoned helper" @@ -150,13 +130,12 @@ return var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in loc if(!airlock) - stack_trace("### MAP WARNING, [src] failed to find an airlock at [AREACOORD(src)]") - return + CRASH("### MAP WARNING, [src] failed to find an airlock at [AREACOORD(src)]") if(airlock.abandoned) stack_trace("### MAP WARNING, [src] at [AREACOORD(src)] tried to make [airlock] abandoned but it's already abandoned!") airlock.abandoned = TRUE var/turf/current_turf = get_turf(airlock) - current_turf.flags_atom |= AI_BLOCKED + current_turf.atom_flags |= AI_BLOCKED /obj/effect/mapping_helpers/airlock/welded name = "airlock welded helper" @@ -169,13 +148,12 @@ return var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in loc if(!airlock) - stack_trace("### MAP WARNING, [src] failed to find an airlock at [AREACOORD(src)]") - return + CRASH("### MAP WARNING, [src] failed to find an airlock at [AREACOORD(src)]") if(airlock.welded) stack_trace("### MAP WARNING, [src] at [AREACOORD(src)] tried to bolt [airlock] but it's already welded!") airlock.welded = TRUE var/turf/current_turf = get_turf(airlock) - current_turf.flags_atom |= AI_BLOCKED + current_turf.atom_flags |= AI_BLOCKED /obj/effect/mapping_helpers/broken_apc name = "broken apc helper" @@ -192,12 +170,26 @@ return var/obj/machinery/power/apc/apc = locate(/obj/machinery/power/apc) in loc if(!apc) - stack_trace("### MAP WARNING, [src] failed to find an apc at [AREACOORD(src)]") - return + CRASH("### MAP WARNING, [src] failed to find an apc at [AREACOORD(src)]") if(apc.machine_stat && (BROKEN)) //there's a small chance of APCs being broken on round start, just return if it's already happened return apc.do_break() +/obj/effect/mapping_helpers/apc_unlocked + name = "apc unlocked interface helper" + icon_state = "apc_unlocked_interface_helper" + +/obj/effect/mapping_helpers/apc_unlocked/Initialize(mapload) + . = ..() + var/obj/machinery/power/apc/apc = locate(/obj/machinery/power/apc) in loc + if(!apc) + CRASH("### MAP WARNING, [src] failed to find an apc at [AREACOORD(src)]") + if(!apc.coverlocked || !apc.locked) + var/area/apc_area = get_area(apc) + log_mapping("[src] at [AREACOORD(src)] [(apc_area.type)] tried to unlock the [apc] but it's already unlocked!") + apc.coverlocked = FALSE + apc.locked = FALSE + /obj/effect/mapping_helpers/broken_apc/lowchance breakchance = 25 @@ -208,6 +200,20 @@ name = "airlock autoname helper" icon_state = "airlock_autoname_helper" +/obj/effect/mapping_helpers/airlock/hackProof + name = "airlock block ai control helper" + icon_state = "hackproof" + +/obj/effect/mapping_helpers/airlock/hackProof/Initialize(mapload) + . = ..() + var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in loc + if(!airlock) + CRASH("### MAP WARNING, [src] failed to find an airlock at [AREACOORD(src)]") + if(airlock.aiControlDisabled) + log_mapping("[src] at [AREACOORD(src)] tried to make [airlock] hackproof but it's already hackproof!") + else + airlock.hackProof = TRUE + /obj/effect/mapping_helpers/airlock_autoname/Initialize(mapload) . = ..() if(!mapload) @@ -215,8 +221,7 @@ return var/obj/machinery/door/door = locate(/obj/machinery/door) in loc if(!door) - stack_trace("### MAP WARNING, [src] failed to find a nameable door at [AREACOORD(src)]") - return + CRASH("### MAP WARNING, [src] failed to find a nameable door at [AREACOORD(src)]") door.name = get_area_name(door) /obj/effect/mapping_helpers/airlock/unres @@ -238,7 +243,7 @@ /obj/effect/mapping_helpers/area_flag_injector/Initialize(mapload) . = ..() var/area/area = get_area(src) - area.flags_area |= flag_type + area.area_flags |= flag_type /obj/effect/mapping_helpers/area_flag_injector/marine_base flag_type = MARINE_BASE @@ -340,6 +345,165 @@ qdel(src) +/obj/effect/mapping_helpers/light + name = "generic placeholder for light map helpers, do not place in game" + layer = DOOR_HELPER_LAYER + +/obj/effect/mapping_helpers/light/broken + name = "light broken map helper" + icon_state = "light_flicker_broken" + +/obj/effect/mapping_helpers/light/broken/Initialize(mapload) + . = ..() + var/obj/machinery/light/light = locate(/obj/machinery/light) in loc + if(!light) + CRASH("### MAP WARNING, [src] failed to find an light at [AREACOORD(src)]") + if(light.status == LIGHT_BROKEN || light.status == LIGHT_EMPTY) + log_mapping("[src] at [AREACOORD(src)] tried to make [light] broken, but it couldn't be done!") + else + light.broken() + +/obj/effect/mapping_helpers/light/turnedoff + name = "light area turnoff helper" + icon_state = "light_flicker_area_off" + +/obj/effect/mapping_helpers/light/turnedoff/Initialize(mapload) + . = ..() + var/area/area = get_area(src) + + area.lightswitch = area.lightswitch ? FALSE : TRUE + area.update_icon() + +/obj/effect/mapping_helpers/light/flickering + name = "light flickering helper" + icon_state = "light_flicker" + +/obj/effect/mapping_helpers/light/flickering/Initialize(mapload) + . = ..() + var/obj/machinery/light/light = locate(/obj/machinery/light) in loc + if(!light) + CRASH("### MAP WARNING, [src] failed to find an light at [AREACOORD(src)]") + if(light.flickering || light.status != LIGHT_OK) + log_mapping("[src] at [AREACOORD(src)] tried to make [light] flicker, but it couldn't be done!") + else + light.lightambient = new(null, FALSE) + light.flicker(TRUE) + +///enable random flickering on lights, to make this effect happen the light has be flickering in the first place +/obj/effect/mapping_helpers/light/flickering/enable_random_flickering + name = "light enable random flicker timing helper" + icon_state = "light_flicker_random" + +/obj/effect/mapping_helpers/light/flickering/enable_random_flickering/Initialize(mapload) + . = ..() + var/obj/machinery/light/light = locate(/obj/machinery/light) in loc + if(!light) + CRASH("### MAP WARNING, [src] failed to find an light at [AREACOORD(src)]") + if(light.random_flicker || light.status != LIGHT_OK) + log_mapping("[src] at [AREACOORD(src)] tried to make [light] randomly flicker, but it couldn't be done!") + else + light.random_flicker = TRUE + +/obj/effect/mapping_helpers/light/flickering/flicker_random_settings + name = "light random flicker settings helper" + icon_state = "light_flicker_random_settings" + var/flicker_time_upper_max = 10 SECONDS + var/flicker_time_lower_min = 0.2 SECONDS + +/obj/effect/mapping_helpers/light/flickering/flicker_random_settings/Initialize(mapload) + . = ..() + var/obj/machinery/light/light = locate(/obj/machinery/light) in loc + if(!light) + CRASH("### MAP WARNING, [src] failed to find an light at [AREACOORD(src)]") + if(flicker_time_lower_min > flicker_time_upper_max) + CRASH("Invalid random flicker setting for light at [AREACOORD(src)]") + light.flicker_time_upper_max = flicker_time_upper_max + light.flicker_time_lower_min = flicker_time_lower_min + +/obj/effect/mapping_helpers/light/flickering/flicker_random_settings/lowset + flicker_time_upper_max = 3 SECONDS + flicker_time_lower_min = 0.4 SECONDS + +/obj/effect/mapping_helpers/light/flickering/flicker_random_settings/highset + flicker_time_upper_max = 6 SECONDS + flicker_time_lower_min = 3 SECONDS + +/obj/effect/mapping_helpers/light/power + name = "light power helper" + icon_state = "light_flicker_power" + var/lighting_power = 1 + +/obj/effect/mapping_helpers/light/power/Initialize(mapload) + . = ..() + var/obj/machinery/light/light = locate(/obj/machinery/light) in loc + if(!light) + CRASH("### MAP WARNING, [src] failed to find an light at [AREACOORD(src)]") + light.bulb_power = lighting_power + light.update() + +/obj/effect/mapping_helpers/light/power/dim + lighting_power = 0.5 + +/obj/effect/mapping_helpers/light/power/bright + lighting_power = 2.0 + +/obj/effect/mapping_helpers/light/color + name = "light color mapping helper" + icon_state = "light_flicker_color" + var/lighting_color = LIGHT_COLOR_WHITE + +/obj/effect/mapping_helpers/light/color/Initialize(mapload) + . = ..() + var/obj/machinery/light/light = locate(/obj/machinery/light) in loc + if(!light) + CRASH("### MAP WARNING, [src] failed to find an light at [AREACOORD(src)]") + light.light_color = lighting_color + light.update() + +/obj/effect/mapping_helpers/light/color/red + light_color = LIGHT_COLOR_RED + +/obj/effect/mapping_helpers/light/color/blue + light_color = LIGHT_COLOR_ORANGE + +/obj/effect/mapping_helpers/light/bulb_colour + name = "light bulb color helper" + icon_state = "light_flicker_color_bulb" + var/bulb_colour = LIGHT_COLOR_WHITE + +/obj/effect/mapping_helpers/light/bulb_colour/Initialize(mapload) + . = ..() + var/obj/machinery/light/light = locate(/obj/machinery/light) in loc + if(!light) + CRASH("### MAP WARNING, [src] failed to find an light at [AREACOORD(src)]") + light.bulb_colour = bulb_colour + light.update() + +/obj/effect/mapping_helpers/light/bulb_colour/red + bulb_colour = LIGHT_COLOR_RED + +/obj/effect/mapping_helpers/light/bulb_colour/blue + bulb_colour = LIGHT_COLOR_BLUE + +/obj/effect/mapping_helpers/light/brightness + name = "light brightness mapping helper" + icon_state = "light_flicker_brightness" + var/brightness_intensity = 4 + +/obj/effect/mapping_helpers/light/brightness/Initialize(mapload) + . = ..() + var/obj/machinery/light/light = locate(/obj/machinery/light) in loc + if(!light) + CRASH("### MAP WARNING, [src] failed to find an light at [AREACOORD(src)]") + light.brightness = brightness_intensity + light.update() + +/obj/effect/mapping_helpers/light/brightness/dim + brightness_intensity = 3 + +/obj/effect/mapping_helpers/light/brightness/bright + brightness_intensity = 6 + /// spawn the pipe /obj/effect/mapping_helpers/simple_pipes/proc/spawn_pipe(direction, type) var/obj/machinery/atmospherics/pipe/pipe = new type(get_turf(src), TRUE, text2dir(direction)) @@ -348,12 +512,120 @@ pipe.update_layer() pipe.paint(pipe_color) -// var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in loc -// if(airlock) -// airlock.unres_sides ^= dir -// else -// log_world("### MAP WARNING, [src] failed to find an airlock at [AREACOORD(src)]") +/obj/effect/mapping_helpers/airlock/unres + name = "airlock unrestricted side helper" + icon_state = "airlock_unres_helper" + +/obj/effect/mapping_helpers/airlock/unres/Initialize(mapload) + . = ..() + var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in loc + if(!airlock) + CRASH("### MAP WARNING, [src] failed to find an airlock at [AREACOORD(src)]") + airlock.unres_sides ^= dir +/obj/effect/mapping_helpers/airlock/cyclelink_helper + name = "airlock cyclelink helper" + icon_state = "airlock_cyclelink_helper" + +/obj/effect/mapping_helpers/airlock/cyclelink_helper/Initialize(mapload) + . = ..() + var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in loc + if(!airlock) + log_world("### MAP WARNING, [src] failed to find an airlock at [AREACOORD(src)]") + if(airlock.cyclelinkeddir) + log_world("### MAP WARNING, [src] at [AREACOORD(src)] tried to set [airlock] cyclelinkeddir, but it's already set!") + else + airlock.cyclelinkeddir = dir + +/obj/effect/mapping_helpers/barricade + name = "base barricade helper" + +/obj/effect/mapping_helpers/barricade/wired + name = "wired barricade helper" + icon_state = "barricade_wired" + +/obj/effect/mapping_helpers/barricade/wired/Initialize(mapload) + . = ..() + if(!mapload) + log_world("### MAP WARNING, [src] spawned outside of mapload!") + return + var/obj/structure/barricade/foundbarricade = locate(/obj/structure/barricade) in loc + if(!foundbarricade) + CRASH("### MAP WARNING, [src] failed to find a barricade at [AREACOORD(src)]") + if(foundbarricade.is_wired || !foundbarricade.can_wire) + stack_trace("### MAP WARNING, [src] at [AREACOORD(src)] tried to make [foundbarricade] wired but it's already wired!") + foundbarricade.wire() + +/obj/effect/mapping_helpers/barricade/bomb + name = "bomb armor barricade helper" + icon_state = "barricade_bomb" + +/obj/effect/mapping_helpers/barricade/bomb/Initialize(mapload) + . = ..() + if(!mapload) + log_world("### MAP WARNING, [src] spawned outside of mapload!") + return + var/obj/structure/barricade/metal/foundbarricade = locate(/obj/structure/barricade/metal) in loc + if(!foundbarricade) + CRASH("### MAP WARNING, [src] failed to find a barricade at [AREACOORD(src)]") + if(foundbarricade.barricade_upgrade_type) + stack_trace("### MAP WARNING, [src] at [AREACOORD(src)] tried to upgrade [foundbarricade] but it already has armor!") + foundbarricade.soft_armor = soft_armor.modifyRating(bomb = 50) + foundbarricade.barricade_upgrade_type = CADE_TYPE_BOMB + foundbarricade.update_icon() + +/obj/effect/mapping_helpers/barricade/acid + name = "acid armor barricade helper" + icon_state = "barricade_acid" + +/obj/effect/mapping_helpers/barricade/acid/Initialize(mapload) + . = ..() + if(!mapload) + log_world("### MAP WARNING, [src] spawned outside of mapload!") + return + var/obj/structure/barricade/metal/foundbarricade = locate(/obj/structure/barricade/metal) in loc + if(!foundbarricade) + CRASH("### MAP WARNING, [src] failed to find a barricade at [AREACOORD(src)]") + if(foundbarricade.barricade_upgrade_type) + stack_trace("### MAP WARNING, [src] at [AREACOORD(src)] tried to upgrade [foundbarricade] but it already has armor!") + foundbarricade.barricade_upgrade_type = CADE_TYPE_ACID + foundbarricade.soft_armor = soft_armor.modifyRating(acid = 20) + foundbarricade.resistance_flags |= UNACIDABLE + foundbarricade.update_icon() + +/obj/effect/mapping_helpers/barricade/melee + name = "melee armor barricade helper" + icon_state = "barricade_melee" + +/obj/effect/mapping_helpers/barricade/melee/Initialize(mapload) + . = ..() + if(!mapload) + log_world("### MAP WARNING, [src] spawned outside of mapload!") + return + var/obj/structure/barricade/metal/foundbarricade = locate(/obj/structure/barricade/metal) in loc + if(!foundbarricade) + CRASH("### MAP WARNING, [src] failed to find a barricade at [AREACOORD(src)]") + if(foundbarricade.barricade_upgrade_type) + stack_trace("### MAP WARNING, [src] at [AREACOORD(src)] tried to upgrade [foundbarricade] but it already has armor!") + foundbarricade.barricade_upgrade_type = CADE_TYPE_MELEE + foundbarricade.soft_armor = soft_armor.modifyRating(melee = 30, bullet = 30, laser = 30, energy = 30) + foundbarricade.update_icon() + +/obj/effect/mapping_helpers/barricade/closed + name = "closed plasteel barricade helper" + icon_state = "barricade_closed" + +/obj/effect/mapping_helpers/barricade/closed/Initialize(mapload) + . = ..() + if(!mapload) + log_world("### MAP WARNING, [src] spawned outside of mapload!") + return + var/obj/structure/barricade/plasteel/foundbarricade = locate(/obj/structure/barricade/plasteel) in loc + if(!foundbarricade) + CRASH("### MAP WARNING, [src] failed to find a plasteel barricade at [AREACOORD(src)]") + if(!foundbarricade.closed) + stack_trace("### MAP WARNING, [src] at [AREACOORD(src)] tried to open [foundbarricade] but it's already open!") + foundbarricade.toggle_open() //needs to do its thing before spawn_rivers() is called /* diff --git a/code/modules/mapping/modular_mapping.dm b/code/modules/mapping/modular_mapping.dm index 643ff278a2409..cfad8de30cd14 100644 --- a/code/modules/mapping/modular_mapping.dm +++ b/code/modules/mapping/modular_mapping.dm @@ -471,13 +471,6 @@ template_width = 28 template_height = 23 -/datum/map_template/modular/bigred/officefour - name = "Big red office" - mappath = "_maps/modularmaps/big_red/bigredofficevar4.dmm" - modular_id = "broffice" - template_width = 28 - template_height = 23 - /datum/map_template/modular/bigred/atmosone name = "Big red atmos" mappath = "_maps/modularmaps/big_red/bigredatmosvar1.dmm" @@ -1208,3 +1201,122 @@ modular_id = "EORG" template_width = 46 template_height = 46 + +/datum/map_template/modular/jungle_outpost/westtowerone + name = "Western Dome" + mappath = "_maps/modularmaps/jungle_outpost/joutpostwtower1.dmm" + modular_id = "jowesttower" + template_width = 12 + template_height = 14 + +/datum/map_template/modular/jungle_outpost/westtowertwo + name = "Western Bar Dome" + mappath = "_maps/modularmaps/jungle_outpost/joutpostwtower2.dmm" + modular_id = "jowesttower" + template_width = 12 + template_height = 14 + +/datum/map_template/modular/jungle_outpost/westtowerthree + name = "Western Bungalow" + mappath = "_maps/modularmaps/jungle_outpost/joutpostwtower3.dmm" + modular_id = "jowesttower" + template_width = 12 + template_height = 14 + +/datum/map_template/modular/jungle_outpost/westtowerfour + name = "Western Pond" + mappath = "_maps/modularmaps/jungle_outpost/joutpostwtower4.dmm" + modular_id = "jowesttower" + template_width = 12 + template_height = 14 + +/datum/map_template/modular/jungle_outpost/southcratesone + name = "South Crates" + mappath = "_maps/modularmaps/jungle_outpost/joutpostscrates1.dmm" + modular_id = "josouthcrates" + template_width = 12 + template_height = 14 + +/datum/map_template/modular/jungle_outpost/southcratestwo + name = "South Office" + mappath = "_maps/modularmaps/jungle_outpost/joutpostscrates2.dmm" + modular_id = "josouthcrates" + template_width = 12 + template_height = 14 + +/datum/map_template/modular/jungle_outpost/southcratesthree + name = "South Crates " + mappath = "_maps/modularmaps/jungle_outpost/joutpostscrates3.dmm" + modular_id = "josouthcrates" + template_width = 12 + template_height = 14 + +/datum/map_template/modular/jungle_outpost/southcratesfour + name = "South Garage" + mappath = "_maps/modularmaps/jungle_outpost/joutpostscrates4.dmm" + modular_id = "josouthcrates" + template_width = 12 + template_height = 14 + +/datum/map_template/modular/jungle_outpost/hydroponicsone + name = "Hydroponics" + mappath = "_maps/modularmaps/jungle_outpost/joutposthydro1.dmm" + modular_id = "johydroponics" + template_width = 19 + template_height = 18 + +/datum/map_template/modular/jungle_outpost/hydroponicstwo + name = "Hydroponics" + mappath = "_maps/modularmaps/jungle_outpost/joutposthydro2.dmm" + modular_id = "johydroponics" + template_width = 19 + template_height = 18 + +/datum/map_template/modular/jungle_outpost/hydroponicsthree + name = "Hydroponics Shack" + mappath = "_maps/modularmaps/jungle_outpost/joutposthydro3.dmm" + modular_id = "johydroponics" + template_width = 19 + template_height = 18 + +/datum/map_template/modular/jungle_outpost/medicalone + name = "Medical" + mappath = "_maps/modularmaps/jungle_outpost/joutpostmedbay1.dmm" + modular_id = "jomedbay" + template_width = 16 + template_height = 24 + +/datum/map_template/modular/jungle_outpost/medicaltwo + name = "Medical" + mappath = "_maps/modularmaps/jungle_outpost/joutpostmedbay2.dmm" + modular_id = "jomedbay" + template_width = 16 + template_height = 24 + +/datum/map_template/modular/jungle_outpost/medicalthree + name = "Outdoor Medical" + mappath = "_maps/modularmaps/jungle_outpost/joutpostmedbay3.dmm" + modular_id = "jomedbay" + template_width = 16 + template_height = 24 + +/datum/map_template/modular/jungle_outpost/engineeringone + name = "Engineering" + mappath = "_maps/modularmaps/jungle_outpost/joutpostengi1.dmm" + modular_id = "joengineering" + template_width = 21 + template_height = 21 + +/datum/map_template/modular/jungle_outpost/engineeringtwo + name = "Engineering" + mappath = "_maps/modularmaps/jungle_outpost/joutpostengi2.dmm" + modular_id = "joengineering" + template_width = 21 + template_height = 21 + +/datum/map_template/modular/jungle_outpost/engineeringthree + name = "Outdoor Engineering" + mappath = "_maps/modularmaps/jungle_outpost/joutpostengi3.dmm" + modular_id = "joengineering" + template_width = 21 + template_height = 21 diff --git a/code/modules/mapping/space_management/space_reservation.dm b/code/modules/mapping/space_management/space_reservation.dm index 860fd9e3bc647..adb3039e11799 100644 --- a/code/modules/mapping/space_management/space_reservation.dm +++ b/code/modules/mapping/space_management/space_reservation.dm @@ -34,12 +34,12 @@ for(var/i in avail) CHECK_TICK BL = i - if(!(BL.flags_atom & UNUSED_RESERVATION_TURF_1)) + if(!(BL.atom_flags & UNUSED_RESERVATION_TURF_1)) continue if(BL.x + width > world.maxx || BL.y + height > world.maxy) continue TR = locate(BL.x + width - 1, BL.y + height - 1, BL.z) - if(!(TR.flags_atom & UNUSED_RESERVATION_TURF_1)) + if(!(TR.atom_flags & UNUSED_RESERVATION_TURF_1)) continue final = block(BL, TR) if(!final) @@ -47,7 +47,7 @@ passing = TRUE for(var/I in final) var/turf/checking = I - if(!(checking.flags_atom & UNUSED_RESERVATION_TURF_1)) + if(!(checking.atom_flags & UNUSED_RESERVATION_TURF_1)) passing = FALSE break if(!passing) @@ -60,7 +60,7 @@ for(var/i in final) var/turf/T = i reserved_turfs |= T - T.flags_atom &= ~UNUSED_RESERVATION_TURF_1 + T.atom_flags &= ~UNUSED_RESERVATION_TURF_1 SSmapping.unused_turfs["[T.z]"] -= T SSmapping.used_turfs[T] = src T.ChangeTurf(turf_type, turf_type) diff --git a/code/modules/mining/money_bag.dm b/code/modules/mining/money_bag.dm index 83f626b04f38f..0f8b479392d0f 100644 --- a/code/modules/mining/money_bag.dm +++ b/code/modules/mining/money_bag.dm @@ -54,6 +54,8 @@ /obj/item/moneybag/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/coin)) var/obj/item/coin/C = I diff --git a/code/modules/mining/remote_fob/remote_fob_actions_misc.dm b/code/modules/mining/remote_fob/remote_fob_actions_misc.dm index 7fcc74937805a..b7b10e17cd8ad 100644 --- a/code/modules/mining/remote_fob/remote_fob_actions_misc.dm +++ b/code/modules/mining/remote_fob/remote_fob_actions_misc.dm @@ -54,7 +54,7 @@ for(var/obj/thing in buildplace) if(!thing.density) //not dense, move on continue - if(!(thing.flags_atom & ON_BORDER)) //dense and non-directional, end + if(!(thing.atom_flags & ON_BORDER)) //dense and non-directional, end fobdrone.balloon_alert(owner, "No space here for a barricade") return if(thing.dir != fobdrone.dir) @@ -96,7 +96,7 @@ for(var/obj/thing in buildplace) if(!thing.density) //not dense, move on continue - if(!(thing.flags_atom & ON_BORDER)) //dense and non-directional, end + if(!(thing.atom_flags & ON_BORDER)) //dense and non-directional, end fobdrone.balloon_alert(owner, "No space here for a barricade") return if(thing.dir != fobdrone.dir) @@ -139,14 +139,14 @@ for(var/obj/thing in buildplace) if(!thing.density) //not dense, move on continue - if(!(thing.flags_atom & ON_BORDER)) //dense and non-directional, end + if(!(thing.atom_flags & ON_BORDER)) //dense and non-directional, end fobdrone.balloon_alert(owner, "No space here for a barricade") return if(thing.dir != fobdrone.dir) continue fobdrone.balloon_alert(owner, "No space here for a barricade") return - if(!do_after(fobdrone, 1.5 SECONDS, FALSE, buildplace, BUSY_ICON_BUILD)) + if(!do_after(fobdrone, 1.5 SECONDS, IGNORE_HELD_ITEM, buildplace, BUSY_ICON_BUILD)) return console.plasteel_remaining -= 4 cade = new /obj/structure/barricade/metal/plasteel(buildplace) @@ -184,14 +184,14 @@ for(var/obj/thing in buildplace) if(!thing.density) //not dense, move on continue - if(!(thing.flags_atom & ON_BORDER)) //dense and non-directional, end + if(!(thing.atom_flags & ON_BORDER)) //dense and non-directional, end fobdrone.balloon_alert(owner, "No space here for a barricade") return if(thing.dir != fobdrone.dir) continue fobdrone.balloon_alert(owner, "No space here for a barricade") return - if(!do_after(fobdrone, 1.5 SECONDS, FALSE, buildplace, BUSY_ICON_BUILD)) + if(!do_after(fobdrone, 1.5 SECONDS, IGNORE_HELD_ITEM, buildplace, BUSY_ICON_BUILD)) return //console.plasteel_remaining -= 5 //ORIGINAL console.plasteel_remaining -= 6 //RUTGMC EDIT diff --git a/code/modules/mob/dead/observer/login.dm b/code/modules/mob/dead/observer/login.dm index 4c1a14f54b7a4..dd7b0dc9b7e4c 100644 --- a/code/modules/mob/dead/observer/login.dm +++ b/code/modules/mob/dead/observer/login.dm @@ -32,23 +32,36 @@ ghost_others = client.prefs.ghost_others - update_icon(client.prefs.ghost_form) + pick_form(client.prefs.ghost_form) updateghostimages() for(var/path in subtypesof(/datum/action/observer_action)) if(!actions_by_path[path]) - var/datum/action/observer_action/A = new path() + var/datum/action/observer_action/A = new path(src) A.give_action(src) + if(!SSticker.mode) + RegisterSignal(SSdcs, COMSIG_GLOB_GAMEMODE_LOADED, PROC_REF(load_ghost_gamemode_actions)) + else + load_ghost_gamemode_actions() client.AddComponent(/datum/component/larva_queue) if(!actions_by_path[/datum/action/minimap/observer]) - var/datum/action/minimap/observer/mini = new + var/datum/action/minimap/observer/mini = new(src) mini.give_action(src) if(length(GLOB.offered_mob_list)) to_chat(src, span_boldnotice("There's mobs available for taking! Ghost > Take Offered Mob")) //RUTGMC EDIT - if(SSticker.mode && SSticker.mode.flags_round_type & MODE_PREDATOR) + if(SSticker.mode && SSticker.mode.round_type_flags & MODE_PREDATOR) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), src, "This is a PREDATOR ROUND! If you are whitelisted, you may Join the Hunt!"), 2 SECONDS) //RUTGMC EDIT + +///Loads any gamemode specific ghost actions +/mob/dead/observer/proc/load_ghost_gamemode_actions() + SIGNAL_HANDLER + UnregisterSignal(SSdcs, COMSIG_GLOB_GAMEMODE_LOADED) + for(var/path in SSticker.mode.ghost_verbs()) + if(!actions_by_path[path]) + var/datum/action/action = new path(src) + action.give_action(src) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 0b934215a5a56..31f554c2ebbfb 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -96,7 +96,8 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) name = random_unique_name(gender) real_name = name - animate(src, pixel_y = 2, time = 10, loop = -1) + animate(src, pixel_y = 2, time = 10, loop = -1, flags = ANIMATION_RELATIVE) + animate(pixel_y = -2, time = 10, loop = -1, flags = ANIMATION_RELATIVE) grant_all_languages() @@ -123,7 +124,8 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) SSmobs.dead_players_by_zlevel[old_z] -= src SSmobs.dead_players_by_zlevel[new_z] += src -/mob/dead/observer/update_icon(new_form) +///Changes our sprite +/mob/dead/observer/proc/pick_form(new_form) if(client) //We update our preferences in case they changed right before update_icon was called. ghost_others = client.prefs.ghost_others @@ -134,7 +136,6 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) else ghostimage_default.icon_state = new_form - /mob/dead/observer/Topic(href, href_list) . = ..() if(.) @@ -684,7 +685,8 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) /mob/dead/observer/stop_orbit(datum/component/orbiter/orbits) . = ..() pixel_y = 0 - animate(src, pixel_y = 2, time = 10, loop = -1) + animate(src, pixel_y = 2, time = 10, loop = -1, flags = ANIMATION_RELATIVE) + animate(pixel_y = -2, time = 10, loop = -1, flags = ANIMATION_RELATIVE) /mob/dead/observer/verb/toggle_zoom() @@ -899,7 +901,8 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) ADD_TRAIT(new_xeno, TRAIT_VALHALLA_XENO, VALHALLA_TRAIT) var/datum/job/xallhala_job = SSjob.GetJobType(/datum/job/fallen/xenomorph) new_xeno.apply_assigned_role_to_spawn(xallhala_job) - SSpoints.xeno_points_by_hive[XENO_HIVE_FALLEN] = 10000 + SSpoints.xeno_strategic_points_by_hive[XENO_HIVE_FALLEN] = 10000 + SSpoints.xeno_tactical_points_by_hive[XENO_HIVE_FALLEN] = 10000 mind.transfer_to(new_xeno, TRUE) xallhala_job.after_spawn(new_xeno) return diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index ead168be837a6..a09352e1e5f16 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -54,7 +54,7 @@ key = "me" key_third_person = "custom" message = null - flags_emote = NO_KEYBIND //This shouldn't have a keybind + emote_flags = NO_KEYBIND //This shouldn't have a keybind /datum/emote/custom/run_emote(mob/user, params, type_override, intentional = FALSE, prefix) @@ -65,7 +65,7 @@ /datum/emote/spin key = "spin" key_third_person = "spins" - flags_emote = EMOTE_RESTRAINT_CHECK + emote_flags = EMOTE_RESTRAINT_CHECK mob_type_allowed_typecache = list(/mob/living, /mob/dead/observer) mob_type_ignore_stat_typecache = list(/mob/dead/observer) diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 726fb57b4e9e3..962c8663eb90c 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -55,12 +55,12 @@ if(!l_hand) W.forceMove(src) l_hand = W - W.equipped(src,SLOT_L_HAND) W.layer = ABOVE_HUD_LAYER W.plane = ABOVE_HUD_PLANE update_inv_l_hand() W.pixel_x = initial(W.pixel_x) W.pixel_y = initial(W.pixel_y) + W.equipped(src,SLOT_L_HAND) return TRUE return FALSE @@ -83,12 +83,12 @@ if(!r_hand) W.forceMove(src) r_hand = W - W.equipped(src,SLOT_R_HAND) W.layer = ABOVE_HUD_LAYER W.plane = ABOVE_HUD_PLANE update_inv_r_hand() W.pixel_x = initial(W.pixel_x) W.pixel_y = initial(W.pixel_y) + W.equipped(src,SLOT_R_HAND) return TRUE return FALSE @@ -173,7 +173,9 @@ return FALSE //nonliving mobs don't have hands /mob/living/put_in_hand_check(obj/item/I, hand_index) - if((I.flags_item & ITEM_ABSTRACT)) + if((I.item_flags & ITEM_ABSTRACT) || !istype(I)) + return FALSE + if(incapacitated() || lying_angle || (status_flags & INCORPOREAL)) return FALSE return TRUE @@ -328,7 +330,7 @@ /mob/living/proc/get_equipped_items(include_pockets = FALSE, include_accessories = FALSE) var/list/items = list() for(var/obj/item/item_contents in contents) - if(item_contents.flags_item & IN_INVENTORY) + if(item_contents.item_flags & IN_INVENTORY) items += item_contents items -= get_active_held_item() items -= get_inactive_held_item() @@ -369,7 +371,7 @@ var/hidden_slots = NONE for(var/obj/item/I in get_equipped_items()) - hidden_slots |= I.flags_inv_hide + hidden_slots |= I.inv_hide_flags if(hidden_slots & HIDEMASK) obscured |= ITEM_SLOT_MASK diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 7c70846878885..7666c669814f3 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -11,98 +11,69 @@ if(species.species_flags & NO_BLOOD) return - if(stat != DEAD && bodytemperature >= 170) //Dead or cryosleep people do not pump the blood. - if(blood_volume > BLOOD_VOLUME_MAXIMUM) //Warning: contents under pressure. - var/spare_blood = blood_volume - ((BLOOD_VOLUME_MAXIMUM + BLOOD_VOLUME_NORMAL) / 2) //Knock you to the midpoint between max and normal to not spam. - //RUTGMC EDIT CHANGE BEGIN - BLOOD_FIX - //if(drip(spare_blood)) RUTGMC EDIT - ORIGINAL - if(spare_blood) - //RUTGMC EDIT CHANGE END - var/bleed_range = 0 - switch(spare_blood) - if(0 to 30) //20 is the functional minimum due to midpoint calc - to_chat(src, span_notice("Some spare blood leaks out of your nose.")) - if(30 to 100) - to_chat(src, span_notice("Spare blood gushes out of your ears and mouth. Must've had too much.")) - bleed_range = 1 - if(100 to INFINITY) - visible_message(span_notice("Several jets of blood open up across [src]'s body and paint the surroundings red. How'd [p_they()] do that?"), \ - span_notice("Several jets of blood open up across your body and paint your surroundings red. You feel like you aren't under as much pressure any more.")) - bleed_range = 3 - if(bleed_range) - for(var/turf/canvas in RANGE_TURFS(bleed_range, src)) - add_splatter_floor(canvas) - for(var/mob/canvas in viewers(bleed_range, src)) - canvas.add_blood(species.blood_color) //Splash zone - playsound(loc, 'sound/effects/splat.ogg', 25, TRUE, 7) - - //RUTGMC EDIT ADDITION BEGIN - BLOOD_FIX - blood_volume -= spare_blood - //RUTGMC EDIT ADDITION END - + if(stat == DEAD || bodytemperature <= 170) //Dead or cryosleep people do not pump the blood. + return //Effects of bloodloss - switch(blood_volume) - - if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) - if(prob(1)) - var/word = pick("dizzy","woozy","faint") - to_chat(src, span_warning("You feel [word]")) - if(oxyloss < 20) - adjustOxyLoss(3) - if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) - if(eye_blurry < 50) - adjust_blurriness(5) - if(oxyloss < 40) - adjustOxyLoss(6) - else - adjustOxyLoss(3) - if(prob(10) && stat == UNCONSCIOUS) - adjustToxLoss(1) - if(prob(15)) - Unconscious(rand(2 SECONDS,6 SECONDS)) - var/word = pick("dizzy","woozy","faint") - to_chat(src, span_warning("You feel extremely [word]")) - if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) - adjustOxyLoss(5) - adjustToxLoss(2) - if(prob(15)) - var/word = pick("dizzy","woozy","faint") - to_chat(src, span_warning("You feel extremely [word]")) - if(0 to BLOOD_VOLUME_SURVIVE) - death() - - - // Blood regens using food, more food = more blood. - switch(blood_volume) - if(BLOOD_VOLUME_SAFE to BLOOD_VOLUME_NORMAL) //Passively regens blood very slowly from 90% to 100% without a tradeoff. - blood_volume += 0.1 - if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_SAFE) //Regens blood from 60% ish to 90% using nutrition. - switch(nutrition) - if(NUTRITION_OVERFED to INFINITY) - adjust_nutrition(-10) - blood_volume += 1 // regenerate blood quickly. - if(NUTRITION_HUNGRY to NUTRITION_OVERFED) - adjust_nutrition(-5) - blood_volume += 0.5 // regenerate blood slowly. - if(0 to NUTRITION_HUNGRY) - adjust_nutrition(-1) - blood_volume += 0.1 // Regenerate blood VERY slowly. - - //Bleeding out - var/blood_max = 0 - for(var/l in limbs) - var/datum/limb/temp = l - if(!(temp.limb_status & LIMB_BLEEDING) || temp.limb_status & LIMB_ROBOT) - continue - blood_max += temp.brute_dam / 60 - if (temp.surgery_open_stage) - blood_max += 0.6 //Yer stomach is cut open - - if(blood_max) - drip(blood_max) - - - + switch(blood_volume) + if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) + if(prob(1)) + var/word = pick("dizzy","woozy","faint") + to_chat(src, span_warning("You feel [word].")) + if(oxyloss < 20) + adjustOxyLoss(3) + if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) + if(eye_blurry < 50) + adjust_blurriness(5) + if(oxyloss < 40) + adjustOxyLoss(6) + else + adjustOxyLoss(3) + if(prob(10) && stat == UNCONSCIOUS) + adjustToxLoss(1) + if(prob(15)) + Unconscious(rand(2 SECONDS,6 SECONDS)) + var/word = pick("dizzy","woozy","faint") + to_chat(src, span_warning("You feel extremely [word]!")) + if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) + adjustOxyLoss(5) + adjustToxLoss(2) + if(prob(15)) + var/word = pick("dizzy","woozy","faint") + to_chat(src, span_warning("You feel extremely [word]!")) + if(0 to BLOOD_VOLUME_SURVIVE) + death() + + + // Blood regens using food, more food = more blood. + switch(blood_volume) + if(BLOOD_VOLUME_SAFE to BLOOD_VOLUME_NORMAL) //Passively regens blood very slowly from 90% to 100% without a tradeoff. + adjust_blood_volume(0.1) + if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_SAFE) //Regens blood from 60% ish to 90% using nutrition. + switch(nutrition) + if(NUTRITION_OVERFED to INFINITY) + adjust_nutrition(-10) + adjust_blood_volume(1)// regenerate blood quickly. + + if(NUTRITION_HUNGRY to NUTRITION_OVERFED) + adjust_nutrition(-5) + adjust_blood_volume(0.5) // regenerate blood slowly. + + if(0 to NUTRITION_HUNGRY) + adjust_nutrition(-1) + adjust_blood_volume(0.1) // Regenerate blood VERY slowly. + + //Bleeding out + var/blood_max = 0 + for(var/l in limbs) + var/datum/limb/temp = l + if(!(temp.limb_status & LIMB_BLEEDING) || temp.limb_status & LIMB_ROBOT) + continue + blood_max += temp.brute_dam / 60 + if(temp.surgery_open_stage) + blood_max += 0.6 //Yer stomach is cut open + + if(blood_max) + drip(blood_max) //Makes a blood drop, leaking amt units of blood from the mob /mob/living/carbon/proc/drip(amt) @@ -116,7 +87,7 @@ //RUTGMC EDIT if(blood_volume) - blood_volume = max(blood_volume - amt, 0) + adjust_blood_volume(-amt) if(isturf(src.loc)) //Blood loss still happens in locker, floor stays clean if(amt >= 10) add_splatter_floor(loc) @@ -134,10 +105,10 @@ /mob/living/proc/restore_blood() - blood_volume = initial(blood_volume) + set_blood_volume(initial(blood_volume)) /mob/living/carbon/human/restore_blood() - blood_volume = BLOOD_VOLUME_NORMAL + set_blood_volume(BLOOD_VOLUME_NORMAL) @@ -145,40 +116,6 @@ /**************************************************** BLOOD TRANSFERS ****************************************************/ -/* -//Gets blood from mob to a container or other mob, preserving all data in it. -/mob/living/proc/transfer_blood_to(atom/movable/AM, amount, forced) - if(!blood_volume || !AM.reagents) - return 0 - if(blood_volume < BLOOD_VOLUME_BAD && !forced) - return 0 - - if(blood_volume < amount) - amount = blood_volume - - var/blood_id = get_blood_id() - if(!blood_id) - return 0 - - blood_volume -= amount - - var/list/blood_data = get_blood_data() - - if(iscarbon(AM)) - var/mob/living/carbon/C = AM - if(blood_id == C.get_blood_id())//both mobs have the same blood substance - if(blood_id == "blood") //normal blood - if(!(blood_data["blood_type"] in get_safe_blood(C.dna.b_type))) - C.reagents.add_reagent(/datum/reagent/toxin, amount * 0.5) - return 1 - - C.blood_volume = min(C.blood_volume + round(amount, 0.1), BLOOD_VOLUME_MAXIMUM) - return 1 - - AM.reagents.add_reagent(blood_id, amount, blood_data, bodytemperature) - return 1 -*/ - //Transfers blood from container to mob /mob/living/carbon/proc/inject_blood(obj/item/reagent_containers/container, amount) @@ -197,7 +134,7 @@ if(b_id == "blood" && R.data && !(R.data["blood_type"] in get_safe_blood(blood_type))) reagents.add_reagent(/datum/reagent/toxin, amount * 0.5) else - blood_volume += round(amount, 0.1) + adjust_blood_volume(round(amount, 0.1)) else reagents.add_reagent(R.type, amount, R.data) reagents.update_total() @@ -225,7 +162,7 @@ O.reagents.add_reagent(/datum/reagent/blood, amount, data) - blood_volume = max(0, blood_volume - amount) // Removes blood if human + adjust_blood_volume(-amount) return 1 diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 3a48746ea92cc..ee03d90895678 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -3,7 +3,7 @@ max_integrity = 400 //They need to live awhile longer than other organs. desc = "A piece of juicy meat found in a person's head." icon_state = "brain2" - flags_atom = NONE + atom_flags = NONE force = 1 w_class = WEIGHT_CLASS_SMALL throwforce = 1 diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index cf3a0970e0a47..1b9cecd9aacc5 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -16,7 +16,7 @@ to_chat(src,"[span_deadsay("

    [species.special_death_message]

    ")]
    ") return ..() -/mob/living/carbon/Moved(oldLoc, dir) +/mob/living/carbon/Moved(atom/old_loc, movement_dir, forced = FALSE, list/old_locs) . = ..() if(nutrition && stat != DEAD) adjust_nutrition(-HUNGER_FACTOR * 0.1 * ((m_intent == MOVE_INTENT_RUN) ? 2 : 1)) @@ -157,11 +157,11 @@ . = ..() throw_mode_off() if(is_ventcrawling) //NOPE - return + return FALSE if(stat || !target) - return + return FALSE if(target.type == /atom/movable/screen) - return + return FALSE var/atom/movable/thrown_thing var/obj/item/I = get_active_held_item() @@ -198,9 +198,11 @@ thrown_thing.throw_at(target, thrown_thing.throw_range + throw_modifiers["range_modifier"], max(1, thrown_thing.throw_speed + throw_modifiers["speed_modifier"]), src, spin_throw, !throw_modifiers["targetted_throw"], throw_modifiers["targetted_throw"]) + return TRUE + ///Called by the carbon throw_item() proc. Returns null if the item negates the throw, or a reference to the thing to suffer the throw else. /obj/item/proc/on_thrown(mob/living/carbon/user, atom/target) - if((flags_item & ITEM_ABSTRACT) || HAS_TRAIT(src, TRAIT_NODROP)) + if((item_flags & ITEM_ABSTRACT) || HAS_TRAIT(src, TRAIT_NODROP)) return user.dropItemToGround(src, TRUE) return src @@ -266,12 +268,33 @@ if(!lying_angle) break - /mob/living/carbon/vv_get_dropdown() . = ..() - . += "---" - . -= "Update Icon" - .["Regenerate Icons"] = "?_src_=vars;[HrefToken()];regenerateicons=[REF(src)]" + VV_DROPDOWN_OPTION("", "---------") + VV_DROPDOWN_OPTION(VV_HK_REGENERATE_ICON, "Regenerate Icons") + +/mob/living/carbon/vv_do_topic(list/href_list) + . = ..() + + if(!.) + return + + if(href_list[VV_HK_REGENERATE_ICON]) + if(!check_rights(NONE)) + return + regenerate_icons() + +/mob/living/carbon/vv_edit_var(var_name, var_value) + switch(var_name) + if(NAMEOF(src, nutrition)) + set_nutrition(var_value) + . = TRUE + + if(!isnull(.)) + datum_flags |= DF_VAR_EDITED + return + + return ..() /mob/living/carbon/update_tracking(mob/living/carbon/C) var/atom/movable/screen/LL_dir = hud_used.SL_locator @@ -317,14 +340,14 @@ sight = initial(sight) lighting_alpha = initial(lighting_alpha) - see_in_dark = species.darksight + see_in_dark = initial(see_in_dark) see_invisible = initial(see_invisible) if(species) if(species.lighting_alpha) - lighting_alpha = initial(species.lighting_alpha) + lighting_alpha = species.lighting_alpha if(species.see_in_dark) - see_in_dark = initial(species.see_in_dark) + see_in_dark = species.see_in_dark if(client.eye != src) var/atom/A = client.eye diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index afb36e4cdf30d..1c339628b02e2 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -48,6 +48,8 @@ var/list/datum/action/ability/mob_abilities = list() ///Currently selected ability var/datum/action/ability/activable/selected_ability + ///carbon overlay layers + var/list/overlays_standing[TOTAL_LAYERS] /mob/living/carbon/proc/transfer_identity(mob/living/carbon/destination) if(!istype(destination)) diff --git a/code/modules/mob/living/carbon/carbon_helpers.dm b/code/modules/mob/living/carbon/carbon_helpers.dm index b3f86cb7506aa..c6e229fda6958 100644 --- a/code/modules/mob/living/carbon/carbon_helpers.dm +++ b/code/modules/mob/living/carbon/carbon_helpers.dm @@ -33,7 +33,7 @@ else return get_limb(BODY_ZONE_PRECISE_R_HAND) -/mob/Living/carbon/put_in_hand_check(obj/item/I, hand_index) +/mob/living/carbon/put_in_hand_check(obj/item/I, hand_index) if(!index_to_hand(hand_index)) return FALSE return ..() diff --git a/code/modules/mob/living/carbon/carbon_stripping.dm b/code/modules/mob/living/carbon/carbon_stripping.dm index 35e87f5fa33ae..3e42ce3ad9be2 100644 --- a/code/modules/mob/living/carbon/carbon_stripping.dm +++ b/code/modules/mob/living/carbon/carbon_stripping.dm @@ -48,7 +48,7 @@ var/mob/mob_source = source if(!mob_source.can_put_in_hand(equipping, hand_index)) - to_chat(src, "\The [equipping] doesn't fit in that place!") + to_chat(user, "[mob_source] can't hold [equipping] right now!") return FALSE return TRUE @@ -105,6 +105,9 @@ hand_index = 1 /datum/strippable_item/hand/left/get_alternate_action(atom/source, mob/user) + var/obj/item/source_item = get_item(source) + if(!HAS_TRAIT(source_item, TRAIT_STRAPPABLE)) + return null return get_strippable_alternate_action_strap(get_item(source), source) /datum/strippable_item/hand/left/alternate_action(atom/source, mob/user) @@ -115,6 +118,9 @@ hand_index = 2 /datum/strippable_item/hand/right/get_alternate_action(atom/source, mob/user) + var/obj/item/source_item = get_item(source) + if(!HAS_TRAIT(source_item, TRAIT_STRAPPABLE)) + return null return get_strippable_alternate_action_strap(get_item(source), source) /datum/strippable_item/hand/right/alternate_action(atom/source, mob/user) @@ -131,6 +137,10 @@ /datum/strippable_item/proc/strippable_alternate_action_strap(obj/item/item, atom/source, mob/user) if(!HAS_TRAIT(item, TRAIT_STRAPPABLE)) return + + if(length(user.do_actions)) + user.balloon_alert(user, "Busy!") + return var/strapped = HAS_TRAIT_FROM(item, TRAIT_NODROP, STRAPPABLE_ITEM_TRAIT) user.balloon_alert_to_viewers("[strapped ? "Loosening" : "Tightening"] strap...") diff --git a/code/modules/mob/living/carbon/give.dm b/code/modules/mob/living/carbon/give.dm index 684c348a26212..e1bafabdb799c 100644 --- a/code/modules/mob/living/carbon/give.dm +++ b/code/modules/mob/living/carbon/give.dm @@ -31,7 +31,7 @@ item = l_hand else if(!hand) item = r_hand - if(!istype(item) || HAS_TRAIT(src, TRAIT_NODROP) || (item.flags_item & DELONDROP)) + if(!istype(item) || HAS_TRAIT(src, TRAIT_NODROP) || (item.item_flags & DELONDROP)) return if(to_give_to.r_hand && to_give_to.l_hand) to_chat(src, span_warning("[to_give_to]'s hands are full.")) diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm new file mode 100644 index 0000000000000..198f192868152 --- /dev/null +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -0,0 +1,576 @@ +/** + * # The base species datum + * + * This datum handles different species in the game, such as synthetics, mothmen, combat robots, skeletons, etc. + * It is used in [mob/living/carbon/human] to determine many things about them, including damage resistance, appearance, special behaviors, and more. +*/ +/datum/species + ///Species name + var/name + ///what kind of species it is considered (See: Species defines) + var/species_type = SPECIES_HUMAN + ///Special effects that are inherent to our species + var/species_flags = NONE + + //----Icon stuff here + ///Normal icon file + var/icobase = 'icons/mob/human_races/r_human.dmi' + ///icon state for calculating brute damage icons + var/brute_damage_icon_state = "human_brute" + ///icon state for calculating brute damage icons + var/burn_damage_icon_state = "human_burn" + ///damage mask icon we want to use when drawing wounds + var/damage_mask_icon = 'icons/mob/dam_mask.dmi' + ///icon for eyes + var/eyes = "eyes_s" + ///Color of the blood specific to our species + var/blood_color = "#A10808" + ///Color of the gibs that spawn from our species [/mob/living/carbon/human/spawn_gibs] + var/flesh_color = "#FFC896" + ///Used when setting species + var/base_color + ///If the species only has one hair color + var/hair_color + ///Used in icon caching + var/race_key = 0 + ///Used in icon caching + var/icon/icon_template + + //----Grouped these because they get set on New() + ///hud that our mob uses, gets given the type stored in hud_type on New() + var/datum/hud_data/hud + ///type that our hud gets set to on New() + var/hud_type + ///For empty hand harm-intent attack + var/datum/unarmed_attack/unarmed + ///type that our unarmed gets set to on New() + var/unarmed_type = /datum/unarmed_attack + ///For empty hand harm-intent attack if the first fails + var/datum/unarmed_attack/secondary_unarmed + ///type that our secondary_unarmed gets set to on New() + var/secondary_unarmed_type = /datum/unarmed_attack/bite + + //----Health/Stamina + Modifiers + ///new maxHealth [/mob/living/carbon/human/var/maxHealth] of the human mob once species is applied + var/total_health = 100 + ///Brute damage modifier + var/brute_mod = null + ///Burn damage modifier + var/burn_mod = null + ///new max_stamina [/mob/living/var/max_stamina] of the human mob once species is applied + var/max_stamina = 50 + + //----Somewhat "gameplay" relevant + ///how much the knocked_down effect is reduced per Life call + var/knock_down_reduction = 1 + ///how much the stunned effect is reduced per Life call + var/stun_reduction = 1 + ///how much the stunned effect is reduced per Life call + var/knock_out_reduction = 1 + ///How much slowdown is innate to our species + var/slowdown = 0 + ///Inventory slots the race can't equip stuff to. Golems cannot wear jumpsuits, for example + var/list/no_equip = list() + + //----Related to dying in some way + ///species-specific gibbing animation + var/gibbed_anim = "gibbed-h" + ///species-specific dusting animation + var/dusted_anim = "dust-h" + ///used to determine what item is left behind in /spawn_dust_remains() + var/remains_type = /obj/effect/decal/cleanable/ash + ///Sound that gets played on death() + var/death_sound + ///Message that gets sent on death() + var/death_message = "seizes up and falls limp, their eyes dead and lifeless..." + ///Special death message that gets overwritten if possible + var/special_death_message = "You have perished." + + //----Temperature/Pressure + ///Cold damage level 1 below this point + var/cold_level_1 = BODYTEMP_COLD_DAMAGE_LIMIT_ONE + ///Cold damage level 2 below this point + var/cold_level_2 = BODYTEMP_COLD_DAMAGE_LIMIT_TWO + ///Cold damage level 3 below this point + var/cold_level_3 = BODYTEMP_COLD_DAMAGE_LIMIT_THREE + ///Heat damage level 1 above this point + var/heat_level_1 = BODYTEMP_HEAT_DAMAGE_LIMIT_ONE + ///Heat damage level 2 above this point + var/heat_level_2 = BODYTEMP_HEAT_DAMAGE_LIMIT_TWO + ///Heat damage level 2 above this point + var/heat_level_3 = BODYTEMP_HEAT_DAMAGE_LIMIT_THREE + ///non-IS_SYNTHETIC species will try to stabilize at this temperature. (also affects temperature processing) + var/body_temperature = BODYTEMP_NORMAL + ///Dangerously high pressure + var/hazard_high_pressure = HAZARD_HIGH_PRESSURE + ///High pressure warning + var/warning_high_pressure = WARNING_HIGH_PRESSURE + ///Low pressure warning + var/warning_low_pressure = WARNING_LOW_PRESSURE + ///Dangerously low pressure + var/hazard_low_pressure = HAZARD_LOW_PRESSURE + + ///used in mob/living/proc/taste + var/taste_sensitivity = TASTE_NORMAL + ///type that gets set as our language_holder on proc/set_species + var/default_language_holder = /datum/language_holder + + ///Sets mob/var/see_in_dark on [/mob/living/carbon/human/update_sight] + var/see_in_dark = 2 + ///Sets our mobs lighting_alpha on [/mob/living/carbon/human/update_sight] + var/lighting_alpha + + ///Used for metabolizing reagents + var/reagent_tag + + ///List of sounds for certain emotes [/datum/emote/living/carbon/human/scream/get_sound] + var/list/screams = list() + ///List of sounds for certain emotes [/datum/emote/living/carbon/human/pain/get_sound] + var/list/paincries = list() + ///List of sounds for certain emotes [/datum/emote/living/carbon/human/gored/get_sound] + var/list/goredcries = list() + ///List of sounds for certain emotes [/datum/emote/living/carbon/human/gasp/get_sound] + var/list/gasps = list() + ///List of sounds for certain emotes [/datum/emote/living/carbon/human/cough/get_sound] + var/list/coughs = list() + ///List of sounds for certain emotes [/datum/emote/living/carbon/human/burstscream/get_sound] + var/list/burstscreams = list() + ///List of sounds for certain emotes [/datum/emote/living/carbon/human/warcry/get_sound] + var/list/warcries = list() + + ///Generic traits tied to having the species + var/list/inherent_traits = list() + ///inherent Species-specific verbs + var/list/inherent_verbs + ///inherent species-specific actions + var/list/inherent_actions + ///Associated list of our organs + var/list/has_organ = list( + "heart" = /datum/internal_organ/heart, + "lungs" = /datum/internal_organ/lungs, + "liver" = /datum/internal_organ/liver, + "kidneys" = /datum/internal_organ/kidneys, + "brain" = /datum/internal_organ/brain, + "appendix" = /datum/internal_organ/appendix, + "eyes" = /datum/internal_organ/eyes + ) + + ///List of names for random generation based on a given pool + var/datum/namepool/namepool = /datum/namepool + ///Whether it is possible to select this species and join as it + var/joinable_roundstart = FALSE + ///If this species counts as a human + var/count_human = FALSE + +/datum/species/New() + if(hud_type) + hud = new hud_type() + else + hud = new() + + if(unarmed_type) + unarmed = new unarmed_type() + if(secondary_unarmed_type) + secondary_unarmed = new secondary_unarmed_type() + if(species_flags & GREYSCALE_BLOOD) + brute_damage_icon_state = "grayscale" + +///Handles creation of mob organs and limbs +/datum/species/proc/create_organs(mob/living/carbon/human/organless_human) + organless_human.limbs = list() + organless_human.internal_organs = list() + organless_human.internal_organs_by_name = list() + + //This is a basic humanoid limb setup + var/datum/limb/chest/new_chest = new(null, organless_human) + organless_human.limbs += new_chest + var/datum/limb/groin/new_groin = new(new_chest, organless_human) + organless_human.limbs += new_groin + organless_human.limbs += new/datum/limb/head(new_chest, organless_human) + var/datum/limb/l_arm/new_l_arm = new(new_chest, organless_human) + organless_human.limbs += new_l_arm + var/datum/limb/r_arm/new_r_arm = new(new_chest, organless_human) + organless_human.limbs += new_r_arm + var/datum/limb/l_leg/new_l_leg = new(new_groin, organless_human) + organless_human.limbs += new_l_leg + var/datum/limb/r_leg/new_r_leg = new(new_groin, organless_human) + organless_human.limbs += new_r_leg + organless_human.limbs += new/datum/limb/hand/l_hand(new_l_arm, organless_human) + organless_human.limbs += new/datum/limb/hand/r_hand(new_r_arm, organless_human) + organless_human.limbs += new/datum/limb/foot/l_foot(new_l_leg, organless_human) + organless_human.limbs += new/datum/limb/foot/r_foot(new_r_leg, organless_human) + + for(var/organ in has_organ) + var/organ_type = has_organ[organ] + organless_human.internal_organs_by_name[organ] = new organ_type(organless_human) + + if(species_flags & ROBOTIC_LIMBS) + for(var/datum/limb/robotic_limb AS in organless_human.limbs) + if(robotic_limb.limb_status & LIMB_DESTROYED) + continue + robotic_limb.add_limb_flags(LIMB_ROBOT) + for(var/datum/internal_organ/my_cold_heart in organless_human.internal_organs) + my_cold_heart.mechanize() + +///Called by [/mob/living/carbon/proc/help_shake_act], the act of hugging someone +/datum/species/proc/hug(mob/living/carbon/human/H, mob/living/target) + if(H.zone_selected == "head") + H.visible_message(span_notice("[H] pats [target] on the head."), \ + span_notice("You pat [target] on the head."), null, 4) + else if(H.zone_selected == "l_hand" && CONFIG_GET(flag/fun_allowed)) + H.visible_message(span_notice("[H] holds [target] 's left hand."), \ + span_notice("You hold [target]'s left hand."), null, 4) + else if (H.zone_selected == "r_hand" && CONFIG_GET(flag/fun_allowed)) + H.visible_message(span_notice("[H] holds [target] 's right hand."), \ + span_notice("You hold [target]'s right hand."), null, 4) + else + H.visible_message(span_notice("[H] hugs [target] to make [target.p_them()] feel better!"), \ + span_notice("You hug [target] to make [target.p_them()] feel better!"), null, 4) + +///Generates a random name from namepool +/datum/species/proc/random_name(gender) + return GLOB.namepool[namepool].get_random_name(gender) + +///Returns the name if there is one in prefs +/datum/species/proc/prefs_name(datum/preferences/prefs) + return prefs.real_name + +///Called when we turn into a species, called by [/mob/living/carbon/human/proc/set_species()] +///drops things we shouldn't be allowed to equip, adds relevant traits, and adjusts the max health of our mob +/datum/species/proc/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) + SHOULD_CALL_PARENT(TRUE) + for(var/slot_id in no_equip) + var/obj/item/thing = H.get_item_by_slot(slot_id) + if(thing && !is_type_in_list(src,thing.species_exception)) + H.dropItemToGround(thing) + for(var/newtrait in inherent_traits) + ADD_TRAIT(H, newtrait, SPECIES_TRAIT) + H.maxHealth += total_health - (old_species ? old_species.total_health : initial(H.maxHealth)) + +///special things to change after we're no longer that species +/datum/species/proc/post_species_loss(mob/living/carbon/human/H) + SHOULD_CALL_PARENT(TRUE) + for(var/oldtrait in inherent_traits) + REMOVE_TRAIT(H, oldtrait, SPECIES_TRAIT) + +///Removes all species-specific verbs and actions +/datum/species/proc/remove_inherent_abilities(mob/living/carbon/human/H) + if(inherent_verbs) + remove_verb(H, inherent_verbs) + if(inherent_actions) + for(var/action_path in inherent_actions) + var/datum/action/old_species_action = H.actions_by_path[action_path] + qdel(old_species_action) + return + +///Adds all species-specific verbs and actions +/datum/species/proc/add_inherent_abilities(mob/living/carbon/human/H) + if(inherent_verbs) + add_verb(H, inherent_verbs) + if(inherent_actions) + for(var/action_path in inherent_actions) + var/datum/action/new_species_action = new action_path(H) + new_species_action.give_action(H) + return + +///Handles anything not already covered by basic species assignment +/datum/species/proc/handle_post_spawn(mob/living/carbon/human/H) + add_inherent_abilities(H) + +///Handles any species-specific death events +/datum/species/proc/handle_death(mob/living/carbon/human/H) + return + +//TODO KILL ME +///Snowflake proc for monkeys so they can call attackpaw +/datum/species/proc/spec_unarmedattack(mob/living/carbon/human/user, atom/target) + return FALSE + +///Called on Life(), used for special behavior when the carbon human with this species is alive +/datum/species/proc/handle_unique_behavior(mob/living/carbon/human/H) + return + +///Used to update alien icons for aliens +/datum/species/proc/handle_login_special(mob/living/carbon/human/H) + return + +///As above +/datum/species/proc/handle_logout_special(mob/living/carbon/human/H) + return + +///Builds the HUD using species-specific icons and usable slots +/datum/species/proc/build_hud(mob/living/carbon/human/H) + return + +///Grabs the window recieved when you click-drag someone onto you +/datum/species/proc/get_inventory_dialogue(mob/living/carbon/human/H) + return + +///Used by xenos understanding larvae and dionaea understanding nymphs +/datum/species/proc/can_understand(mob/other) + return + +///Called on Life(), special behaviour if we are on fire +/datum/species/proc/handle_fire(mob/living/carbon/human/H) + return + +///Basically just used to update moth wings +/datum/species/proc/update_body(mob/living/carbon/human/H) + return + +///Basically just used to update moth wings +/datum/species/proc/update_inv_head(mob/living/carbon/human/H) + return + +///Basically just used to update moth wings +/datum/species/proc/update_inv_w_uniform(mob/living/carbon/human/H) + return + +///Basically just used to update moth wings //Man moths are giga shitcoded +/datum/species/proc/update_inv_wear_suit(mob/living/carbon/human/H) + return + +///Called by [/mob/living/carbon/human/reagent_check] +///Returns TRUE if we can't metabolize chems, or can't be poisoned by a toxin +/datum/species/proc/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) + if(CHECK_BITFIELD(species_flags, NO_CHEM_METABOLIZATION)) //explicit + H.reagents.del_reagent(chem.type) //for the time being + return TRUE + if(CHECK_BITFIELD(species_flags, NO_POISON) && istype(chem, /datum/reagent/toxin)) + H.reagents.remove_reagent(chem.type, chem.custom_metabolism * H.metabolism_efficiency) + return TRUE + if(CHECK_BITFIELD(species_flags, NO_OVERDOSE)) //no stacking + if(chem.overdose_threshold && chem.volume > chem.overdose_threshold) + H.reagents.remove_reagent(chem.type, chem.volume - chem.overdose_threshold) + return FALSE + +///Called when using the shredding behavior +/datum/species/proc/can_shred(mob/living/carbon/human/H) + if(H.a_intent != INTENT_HARM) + return FALSE + + if(unarmed.is_usable(H)) + if(unarmed.shredding) + return TRUE + else if(secondary_unarmed.is_usable(H)) + if(secondary_unarmed.shredding) + return TRUE + return FALSE + +//Species unarmed attacks +/datum/unarmed_attack + ///Empty hand hurt intent verb + var/attack_verb = list("attack") + ///Extra empty hand attack damage + var/damage = 0 + ///Sound that plays when you land a punch + var/attack_sound = "punch" + ///Sound that plays when you miss a punch + var/miss_sound = 'sound/weapons/punchmiss.ogg' + ///Calls the old attack_alien() behavior on objects/mobs when on harm intent + var/shredding = 0 + ///whether our unarmed attack cuts + var/sharp = 0 + // whether our unarmed attack is more likely to dismember + var/edge = 0 + +/datum/unarmed_attack/proc/is_usable(mob/living/carbon/human/user) + if(user.restrained()) + return FALSE + + // Check if they have a functioning hand + var/datum/limb/E = user.get_limb("l_hand") + if(E?.is_usable()) + return TRUE + + E = user.get_limb("r_hand") + if(E?.is_usable()) + return TRUE + return FALSE + +/datum/unarmed_attack/bite + attack_verb = list("bite") // 'x has biteed y', needs work + attack_sound = 'sound/weapons/bite.ogg' + shredding = 0 + damage = 5 + sharp = 1 + edge = 1 + +/datum/unarmed_attack/bite/is_usable(mob/living/carbon/human/user) + if (user.wear_mask && istype(user.wear_mask, /obj/item/clothing/mask/muzzle)) + return FALSE + return TRUE + +/datum/unarmed_attack/punch + attack_verb = list("punch") + damage = 3 + +/datum/unarmed_attack/punch/strong + attack_verb = list("punch","bust","jab") + damage = 10 + +/datum/unarmed_attack/claws + attack_verb = list("scratch", "claw") + attack_sound = 'sound/weapons/slice.ogg' + miss_sound = 'sound/weapons/slashmiss.ogg' + damage = 5 + sharp = 1 + edge = 1 + +/datum/unarmed_attack/claws/strong + attack_verb = list("slash") + damage = 10 + shredding = 1 + +/datum/unarmed_attack/bite/strong + attack_verb = list("maul") + damage = 15 + shredding = 1 + +/datum/hud_data + ///If set, overrides ui_style + var/icon + ///Set to draw intent box + var/has_a_intent = TRUE + ///Set to draw move intent box + var/has_m_intent = TRUE + ///Set to draw environment warnings + var/has_warnings = TRUE + ///Draw the pressure indicator + var/has_pressure = TRUE + ///Draw the nutrition indicator + var/has_nutrition = TRUE + ///Draw the bodytemp indicator + var/has_bodytemp = TRUE + ///Set to draw shand + var/has_hands = TRUE + ///Set to draw drop button + var/has_drop = TRUE + ///Set to draw throw button + var/has_throw = TRUE + ///Set to draw resist button + var/has_resist = TRUE + ///Checked by mob_can_equip() + var/list/equip_slots = list() + + /** + * Contains information on the position and tag for all inventory slots + * to be drawn for the mob. This is fairly delicate, try to avoid messing with it + * unless you know exactly what it does + */ + var/list/gear = list( + "i_clothing" = list("loc" = ui_iclothing, "slot" = SLOT_W_UNIFORM, "state" = "uniform", "toggle" = TRUE), + "o_clothing" = list("loc" = ui_oclothing, "slot" = SLOT_WEAR_SUIT, "state" = "suit", "toggle" = TRUE), + "mask" = list("loc" = ui_mask, "slot" = SLOT_WEAR_MASK, "state" = "mask", "toggle" = TRUE), + "gloves" = list("loc" = ui_gloves, "slot" = SLOT_GLOVES, "state" = "gloves", "toggle" = TRUE), + "eyes" = list("loc" = ui_glasses, "slot" = SLOT_GLASSES, "state" = "glasses","toggle" = TRUE), + "wear_ear" = list("loc" = ui_wear_ear, "slot" = SLOT_EARS, "state" = "ears", "toggle" = TRUE), + "head" = list("loc" = ui_head, "slot" = SLOT_HEAD, "state" = "head", "toggle" = TRUE), + "shoes" = list("loc" = ui_shoes, "slot" = SLOT_SHOES, "state" = "shoes", "toggle" = TRUE), + "suit storage" = list("loc" = ui_sstore1, "slot" = SLOT_S_STORE, "state" = "suit_storage"), + "back" = list("loc" = ui_back, "slot" = SLOT_BACK, "state" = "back"), + "id" = list("loc" = ui_id, "slot" = SLOT_WEAR_ID, "state" = "id"), + "storage1" = list("loc" = ui_storage1, "slot" = SLOT_L_STORE, "state" = "pocket"), + "storage2" = list("loc" = ui_storage2, "slot" = SLOT_R_STORE, "state" = "pocket"), + "belt" = list("loc" = ui_belt, "slot" = SLOT_BELT, "state" = "belt") + ) + +/datum/hud_data/New() + . = ..() + for(var/slot in gear) + equip_slots |= gear[slot]["slot"] + + if(has_hands) + equip_slots |= SLOT_L_HAND + equip_slots |= SLOT_R_HAND + equip_slots |= SLOT_HANDCUFFED + if(SLOT_HEAD in equip_slots) + equip_slots |= SLOT_IN_HEAD + if(SLOT_BACK in equip_slots) + equip_slots |= SLOT_IN_BACKPACK + equip_slots |= SLOT_IN_B_HOLSTER + if(SLOT_BELT in equip_slots) + equip_slots |= SLOT_IN_HOLSTER + equip_slots |= SLOT_IN_BELT + if(SLOT_WEAR_SUIT in equip_slots) + equip_slots |= SLOT_IN_S_HOLSTER + equip_slots |= SLOT_IN_SUIT + if(SLOT_SHOES in equip_slots) + equip_slots |= SLOT_IN_BOOT + if(SLOT_W_UNIFORM in equip_slots) + equip_slots |= SLOT_IN_STORAGE + equip_slots |= SLOT_IN_L_POUCH + equip_slots |= SLOT_IN_R_POUCH + equip_slots |= SLOT_ACCESSORY + equip_slots |= SLOT_IN_ACCESSORY + +/datum/hud_data/robotic + has_nutrition = FALSE + +///damage override at the species level, called by /mob/living/proc/apply_damage +/datum/species/proc/apply_damage(damage = 0, damagetype = BRUTE, def_zone, blocked = 0, sharp = FALSE, edge = FALSE, updating_health = FALSE, penetration, mob/living/carbon/human/victim, mob/attacker) + var/datum/limb/organ = null + if(isorgan(def_zone)) //Got sent a limb datum, convert to a zone define + organ = def_zone + def_zone = organ.name + + if(!def_zone) + def_zone = ran_zone(def_zone) + if(!organ) + organ = victim.get_limb(check_zone(def_zone)) + if(!organ) + return FALSE + + if(isnum(blocked)) + damage -= clamp(damage * (blocked - penetration) * 0.01, 0, damage) + else + damage = victim.modify_by_armor(damage, blocked, penetration, def_zone) + + if(victim.protection_aura) + damage = round(damage * ((20 - victim.protection_aura) / 20), 0.1) + + if(!damage) + return 0 + + switch(damagetype) + if(BRUTE) + victim.damageoverlaytemp = 20 + if(brute_mod) + damage *= brute_mod + var/old_status = organ.limb_status + if(organ.take_damage_limb(damage, 0, sharp, edge)) + victim.UpdateDamageIcon() + record_internal_injury(victim, attacker, old_status, organ.limb_status) + if(BURN) + victim.damageoverlaytemp = 20 + if(burn_mod) + damage *= burn_mod + if(organ.take_damage_limb(0, damage, sharp, edge)) + victim.UpdateDamageIcon() + return + switch(damage) + if(-INFINITY to 0) + return FALSE + if(25 to 50) + if(prob(20)) + victim.emote("pain") + if(50 to INFINITY) + if(prob(60)) + victim.emote("pain") + if(TOX) + victim.adjustToxLoss(damage) + if(OXY) + victim.adjustOxyLoss(damage) + if(CLONE) + victim.adjustCloneLoss(damage) + if(STAMINA) + if(species_flags & NO_STAMINA) + return + victim.adjustStaminaLoss(damage) + + // Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life() + SEND_SIGNAL(victim, COMSIG_HUMAN_DAMAGE_TAKEN, damage) + + if(updating_health) + victim.updatehealth() + return damage diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm index 999b52ae61a12..8fe1a78442d98 100644 --- a/code/modules/mob/living/carbon/human/dummy.dm +++ b/code/modules/mob/living/carbon/human/dummy.dm @@ -8,9 +8,9 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) /mob/living/carbon/human/dummy/Initialize(mapload) SHOULD_CALL_PARENT(FALSE)// just dummies, shouldnt register - if(flags_atom & INITIALIZED) + if(atom_flags & INITIALIZED) stack_trace("Warning: [src]([type]) initialized multiple times!") - flags_atom |= INITIALIZED + atom_flags |= INITIALIZED set_species() return INITIALIZE_HINT_NORMAL // This stops dummies being setup and registered in the human_mob_list diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 3309d8ac920c8..298e6abe9531a 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -31,7 +31,7 @@ key_third_person = "bows" message = "bows." message_param = "bows to %t." - flags_emote = EMOTE_RESTRAINT_CHECK + emote_flags = EMOTE_RESTRAINT_CHECK /datum/emote/living/carbon/human/chuckle @@ -45,14 +45,14 @@ key = "cross" key_third_person = "crosses" message = "crosses their arms." - flags_emote = EMOTE_RESTRAINT_CHECK + emote_flags = EMOTE_RESTRAINT_CHECK /datum/emote/living/carbon/human/clap key = "clap" key_third_person = "claps" message = "claps." - flags_emote = EMOTE_RESTRAINT_CHECK|EMOTE_VARY|EMOTE_MUZZLE_IGNORE + emote_flags = EMOTE_RESTRAINT_CHECK|EMOTE_VARY|EMOTE_MUZZLE_IGNORE emote_type = EMOTE_AUDIBLE sound = 'sound/misc/clap.ogg' @@ -312,14 +312,6 @@ key_third_person = "grimaces" message = "grimaces." - -/datum/emote/living/carbon/human/jump - key = "jump" - key_third_person = "jumps" - message = "jumps!" - flags_emote = EMOTE_RESTRAINT_CHECK - - /datum/emote/living/carbon/human/grumble key = "grumble" key_third_person = "grumbles" @@ -338,7 +330,7 @@ key = "signal" key_third_person = "signals" message_param = "raises %t fingers." - flags_emote = EMOTE_RESTRAINT_CHECK + emote_flags = EMOTE_RESTRAINT_CHECK /datum/emote/living/carbon/human/signal/select_param(mob/user, params) @@ -407,7 +399,7 @@ key_third_person = "snaps" message = "snaps their fingers" emote_type = EMOTE_AUDIBLE - flags_emote = EMOTE_RESTRAINT_CHECK|EMOTE_MUZZLE_IGNORE|EMOTE_ARMS_CHECK + emote_flags = EMOTE_RESTRAINT_CHECK|EMOTE_MUZZLE_IGNORE|EMOTE_ARMS_CHECK sound = 'sound/misc/fingersnap.ogg' /datum/emote/living/carbon/human/hug @@ -415,7 +407,7 @@ key_third_person = "hugs" message = "hugs themself" message_param = "hugs %t." - flags_emote = EMOTE_RESTRAINT_CHECK + emote_flags = EMOTE_RESTRAINT_CHECK emote_type = EMOTE_AUDIBLE @@ -430,7 +422,7 @@ key = "handshake" message = "shakes their own hands." message_param = "shakes hands with %t." - flags_emote = EMOTE_RESTRAINT_CHECK + emote_flags = EMOTE_RESTRAINT_CHECK emote_type = EMOTE_AUDIBLE @@ -439,7 +431,7 @@ key_third_person = "salutes" message = "salutes." message_param = "salutes to %t." - flags_emote = EMOTE_RESTRAINT_CHECK + emote_flags = EMOTE_RESTRAINT_CHECK sound = 'sound/misc/salute.ogg' @@ -447,7 +439,7 @@ key = "golfclap" key_third_person = "golfclaps" message = "claps, clearly unimpressed." - flags_emote = EMOTE_RESTRAINT_CHECK + emote_flags = EMOTE_RESTRAINT_CHECK sound = 'sound/misc/golfclap.ogg' @@ -533,7 +525,7 @@ key = "gored" message = "gags out in pain!" emote_type = EMOTE_AUDIBLE - flags_emote = EMOTE_FORCED_AUDIO + emote_flags = EMOTE_FORCED_AUDIO /datum/emote/living/carbon/human/gored/get_sound(mob/living/carbon/human/user) @@ -557,7 +549,7 @@ key = "burstscream" message = "screams in agony!" emote_type = EMOTE_AUDIBLE - flags_emote = EMOTE_FORCED_AUDIO + emote_flags = EMOTE_FORCED_AUDIO stat_allowed = UNCONSCIOUS diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index dca2c21dd0e33..a871de0758cdc 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -11,19 +11,19 @@ //exosuits and helmets obscure our view and stuff. if(wear_suit) - skipgloves = wear_suit.flags_inv_hide & HIDEGLOVES - skipsuitstorage = wear_suit.flags_inv_hide & HIDESUITSTORAGE - skipjumpsuit = wear_suit.flags_inv_hide & HIDEJUMPSUIT - skipshoes = wear_suit.flags_inv_hide & HIDESHOES + skipgloves = wear_suit.inv_hide_flags & HIDEGLOVES + skipsuitstorage = wear_suit.inv_hide_flags & HIDESUITSTORAGE + skipjumpsuit = wear_suit.inv_hide_flags & HIDEJUMPSUIT + skipshoes = wear_suit.inv_hide_flags & HIDESHOES if(head) - skipmask = head.flags_inv_hide & HIDEMASK - skipeyes = head.flags_inv_hide & HIDEEYES - skipears = head.flags_inv_hide & HIDEEARS - skipface = head.flags_inv_hide & HIDEFACE + skipmask = head.inv_hide_flags & HIDEMASK + skipeyes = head.inv_hide_flags & HIDEEYES + skipears = head.inv_hide_flags & HIDEEARS + skipface = head.inv_hide_flags & HIDEFACE if(wear_mask) - skipface |= wear_mask.flags_inv_hide & HIDEFACE + skipface |= wear_mask.inv_hide_flags & HIDEFACE var/t_He = p_they(TRUE) //capitalised for use at the start of each line. var/t_he = p_they() @@ -42,14 +42,14 @@ //uniform if(w_uniform && !skipjumpsuit) if(w_uniform.blood_overlay) - msg += "[span_warning("[t_He] [t_is] wearing [icon2html(w_uniform, user)] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != "#030303") ? "blood" : "oil"]-stained [w_uniform.name]!")]\n" + msg += "[span_alert("[t_He] [t_is] wearing [icon2html(w_uniform, user)] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != "#030303") ? "blood" : "oil"]-stained [w_uniform.name]!")]\n" else msg += "[t_He] [t_is] wearing [icon2html(w_uniform, user)] \a [w_uniform].\n" //head if(head) if(head.blood_overlay) - msg += "[span_warning("[t_He] [t_is] wearing [icon2html(head, user)] [head.gender==PLURAL?"some":"a"] [(head.blood_color != "#030303") ? "blood" : "oil"]-stained [head.name] on [t_his] head!")]\n" + msg += "[span_alert("[t_He] [t_is] wearing [icon2html(head, user)] [head.gender==PLURAL?"some":"a"] [(head.blood_color != "#030303") ? "blood" : "oil"]-stained [head.name] on [t_his] head!")]\n" else msg += "[t_He] [t_is] wearing [icon2html(head, user)] \a [head] on [t_his] head.\n" if(istype(head, /obj/item/clothing/head/modular)) @@ -64,7 +64,7 @@ //suit/armour if(wear_suit) if(wear_suit.blood_overlay) - msg += "[span_warning("[t_He] [t_is] wearing [icon2html(wear_suit, user)] [wear_suit.gender==PLURAL?"some":"a"] [(wear_suit.blood_color != "#030303") ? "blood" : "oil"]-stained [wear_suit.name]!")]\n" + msg += "[span_alert("[t_He] [t_is] wearing [icon2html(wear_suit, user)] [wear_suit.gender==PLURAL?"some":"a"] [(wear_suit.blood_color != "#030303") ? "blood" : "oil"]-stained [wear_suit.name]!")]\n" else msg += "[t_He] [t_is] wearing [icon2html(wear_suit, user)] \a [wear_suit].\n" if(istype(wear_suit, /obj/item/clothing/suit/modular)) @@ -87,62 +87,62 @@ //suit/armour storage if(s_store && !skipsuitstorage) if(s_store.blood_overlay) - msg += "[span_warning("[t_He] [t_is] carrying [icon2html(s_store, user)] [s_store.gender==PLURAL?"some":"a"] [(s_store.blood_color != "#030303") ? "blood" : "oil"]-stained [s_store.name] on [t_his] [wear_suit.name]!")]\n" + msg += "[span_alert("[t_He] [t_is] carrying [icon2html(s_store, user)] [s_store.gender==PLURAL?"some":"a"] [(s_store.blood_color != "#030303") ? "blood" : "oil"]-stained [s_store.name] on [t_his] [wear_suit.name]!")]\n" else msg += "[t_He] [t_is] carrying [icon2html(s_store, user)] \a [s_store] on [t_his] [wear_suit.name].\n" //back if(back) if(back.blood_overlay) - msg += "[span_warning("[t_He] [t_has] [icon2html(back, user)] [back.gender==PLURAL?"some":"a"] [(back.blood_color != "#030303") ? "blood" : "oil"]-stained [back] on [t_his] back.")]\n" + msg += "[span_alert("[t_He] [t_has] [icon2html(back, user)] [back.gender==PLURAL?"some":"a"] [(back.blood_color != "#030303") ? "blood" : "oil"]-stained [back] on [t_his] back.")]\n" else msg += "[t_He] [t_has] [icon2html(back, user)] \a [back] on [t_his] back.\n" //left hand if(l_hand) if(l_hand.blood_overlay) - msg += "[span_warning("[t_He] [t_is] holding [icon2html(l_hand, user)] [l_hand.gender==PLURAL?"some":"a"] [(l_hand.blood_color != "#030303") ? "blood" : "oil"]-stained [l_hand.name] in [t_his] left hand!")]\n" + msg += "[span_alert("[t_He] [t_is] holding [icon2html(l_hand, user)] [l_hand.gender==PLURAL?"some":"a"] [(l_hand.blood_color != "#030303") ? "blood" : "oil"]-stained [l_hand.name] in [t_his] left hand!")]\n" else msg += "[t_He] [t_is] holding [icon2html(l_hand, user)] \a [l_hand] in [t_his] left hand.\n" //right hand if(r_hand) if(r_hand.blood_overlay) - msg += "[span_warning("[t_He] [t_is] holding [icon2html(r_hand, user)] [r_hand.gender==PLURAL?"some":"a"] [(r_hand.blood_color != "#030303") ? "blood" : "oil"]-stained [r_hand.name] in [t_his] right hand!")]\n" + msg += "[span_alert("[t_He] [t_is] holding [icon2html(r_hand, user)] [r_hand.gender==PLURAL?"some":"a"] [(r_hand.blood_color != "#030303") ? "blood" : "oil"]-stained [r_hand.name] in [t_his] right hand!")]\n" else msg += "[t_He] [t_is] holding [icon2html(r_hand, user)] \a [r_hand] in [t_his] right hand.\n" //gloves if(gloves && !skipgloves) if(gloves.blood_overlay) - msg += "[span_warning("[t_He] [t_has] [icon2html(gloves, user)] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != "#030303") ? "blood" : "oil"]-stained [gloves.name] on [t_his] hands!")]\n" + msg += "[span_alert("[t_He] [t_has] [icon2html(gloves, user)] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != "#030303") ? "blood" : "oil"]-stained [gloves.name] on [t_his] hands!")]\n" else msg += "[t_He] [t_has] [icon2html(gloves, user)] \a [gloves] on [t_his] hands.\n" else if(blood_color) - msg += "[span_warning("[t_He] [t_has] [(blood_color != "#030303") ? "blood" : "oil"]-stained hands!")]\n" + msg += "[span_alert("[t_He] [t_has] [(blood_color != "#030303") ? "blood" : "oil"]-stained hands!")]\n" //handcuffed? if(handcuffed) if(istype(handcuffed, /obj/item/restraints/handcuffs/cable)) - msg += "[span_warning("[t_He] [t_is] [icon2html(handcuffed, user)] restrained with cable!")]\n" + msg += "[span_alert("[t_He] [t_is] [icon2html(handcuffed, user)] restrained with cable!")]\n" else - msg += "[span_warning("[t_He] [t_is] [icon2html(handcuffed, user)] handcuffed!")]\n" + msg += "[span_alert("[t_He] [t_is] [icon2html(handcuffed, user)] handcuffed!")]\n" //belt if(belt) if(belt.blood_overlay) - msg += "[span_warning("[t_He] [t_has] [icon2html(belt, user)] [belt.gender==PLURAL?"some":"a"] [(belt.blood_color != "#030303") ? "blood" : "oil"]-stained [belt.name] about [t_his] waist!")]\n" + msg += "[span_alert("[t_He] [t_has] [icon2html(belt, user)] [belt.gender==PLURAL?"some":"a"] [(belt.blood_color != "#030303") ? "blood" : "oil"]-stained [belt.name] about [t_his] waist!")]\n" else msg += "[t_He] [t_has] [icon2html(belt, user)] \a [belt] about [t_his] waist.\n" //shoes if(shoes && !skipshoes) if(shoes.blood_overlay) - msg += "[span_warning("[t_He] [t_is] wearing [icon2html(shoes, user)] [shoes.gender==PLURAL?"some":"a"] [(shoes.blood_color != "#030303") ? "blood" : "oil"]-stained [shoes.name] on [t_his] feet!")]\n" + msg += "[span_alert("[t_He] [t_is] wearing [icon2html(shoes, user)] [shoes.gender==PLURAL?"some":"a"] [(shoes.blood_color != "#030303") ? "blood" : "oil"]-stained [shoes.name] on [t_his] feet!")]\n" else msg += "[t_He] [t_is] wearing [icon2html(shoes, user)] \a [shoes] on [t_his] feet.\n" else if(feet_blood_color) - msg += "[span_warning("[t_He] [t_has] [(feet_blood_color != "#030303") ? "blood" : "oil"]-stained feet!")]\n" + msg += "[span_alert("[t_He] [t_has] [(feet_blood_color != "#030303") ? "blood" : "oil"]-stained feet!")]\n" //mask if(wear_mask && !skipmask) @@ -152,14 +152,14 @@ else msg += "[span_warning("[t_He] [t_has] [icon2html(wear_mask, user)] \a [wear_mask] on [t_his] face!")]\n" else if(wear_mask.blood_overlay) - msg += "[span_warning("[t_He] [t_has] [icon2html(wear_mask, user)] [wear_mask.gender==PLURAL?"some":"a"] [(wear_mask.blood_color != "#030303") ? "blood" : "oil"]-stained [wear_mask.name] on [t_his] face!")]\n" + msg += "[span_alert("[t_He] [t_has] [icon2html(wear_mask, user)] [wear_mask.gender==PLURAL?"some":"a"] [(wear_mask.blood_color != "#030303") ? "blood" : "oil"]-stained [wear_mask.name] on [t_his] face!")]\n" else msg += "[t_He] [t_has] [icon2html(wear_mask, user)] \a [wear_mask] on [t_his] face.\n" //eyes if(glasses && !skipeyes) if(glasses.blood_overlay) - msg += "[span_warning("[t_He] [t_has] [icon2html(glasses, user)] [glasses.gender==PLURAL?"some":"a"] [(glasses.blood_color != "#030303") ? "blood" : "oil"]-stained [glasses] covering [t_his] eyes!")]\n" + msg += "[span_alert("[t_He] [t_has] [icon2html(glasses, user)] [glasses.gender==PLURAL?"some":"a"] [(glasses.blood_color != "#030303") ? "blood" : "oil"]-stained [glasses] covering [t_his] eyes!")]\n" else msg += "[t_He] [t_has] [icon2html(glasses, user)] \a [glasses] covering [t_his] eyes.\n" @@ -174,7 +174,7 @@ //jitters if(stat != DEAD) if(jitteriness >= 300) - msg += "[span_warning("[t_He] [t_is] convulsing violently!")]\n" + msg += "[span_boldwarning("[t_He] [t_is] convulsing violently!")]\n" else if(jitteriness >= 200) msg += "[span_warning("[t_He] [t_is] extremely jittery.")]\n" else if(jitteriness >= 100) @@ -189,25 +189,27 @@ if(o.limb_status & LIMB_STABILIZED) msg += "[span_warning("[t_He] [t_has] a suit brace stabilizing [t_his] [o.display_name]!")]\n" if(o.limb_status & LIMB_NECROTIZED) - msg += "[span_warning("An infection has rotted [t_his] [o.display_name] into uselessness!")]\n" + msg += "[span_deadsay("An infection has rotted [t_his] [o.display_name] into uselessness!")]\n" if(holo_card_color) msg += "[t_He] [t_has] a [holo_card_color] holo card on [t_his] chest.\n" if(suiciding) - msg += "[span_warning("[t_He] appear[p_s()] to have commited suicide... there is no hope of recovery.")]\n" + msg += "[span_deadsay("[t_He] appear[p_s()] to have commited suicide... there is no hope of recovery.")]\n" if(stat) - msg += "[span_warning("[t_He] [t_is]n't responding to anything around [t_him] and seem[p_s()] to be asleep.")]\n" - if(stat == DEAD || health < get_crit_threshold()) - msg += "[span_warning("[t_He] [p_do()]n't appear to be breathing.")]\n" + if(stat == UNCONSCIOUS) + msg += "[span_info("[t_He] [t_is]n't responding to anything around [t_him] and seem[p_s()] to be asleep.")]\n" + if(stat == DEAD) + msg += "[span_deadsay("[t_He] [t_is] limp and unresponsive; there are no signs of life")]" if(HAS_TRAIT(src, TRAIT_UNDEFIBBABLE)) - msg += "[span_deadsay("[t_He] [t_has] gone cold.")]\n" + msg += "[span_deadsay(" and [t_he] won't be coming back...")]\n" + else + msg += "[span_deadsay("...")]\n" if(ishuman(user) && !user.stat && Adjacent(user)) user.visible_message("[user] checks [src]'s pulse.", "You check [src]'s pulse.", null, 4) addtimer(CALLBACK(src, PROC_REF(take_pulse), user), 15) - - msg += "" + msg += "" if(nutrition < NUTRITION_STARVING) msg += "[t_He] [t_is] severely malnourished.\n" @@ -221,58 +223,84 @@ if((!species.has_organ["brain"] || has_brain()) && stat != DEAD) if(!key) - if(species.is_sentient) - msg += "[span_deadsay("[t_He] [t_is] fast asleep. It doesn't look like they are waking up anytime soon.")]\n" + msg += "[span_deadsay("[t_He] [t_is] fast asleep. It doesn't look like [t_he] [t_is] waking up anytime soon.")]\n" else if(!client) if(isxeno(user)) msg += "[span_xenowarning("[t_He] [p_do()]n't seem responsive.")]\n" else - msg += "[t_He] [t_has] suddenly fallen asleep.\n" + msg += "[span_deadsay("[t_He] [t_is] completely unresponsive to anything and has fallen asleep, as if affected by Space Sleep Disorder. [t_He] may snap out of it soon.")]\n" + + var/total_brute = getBruteLoss() + var/total_burn = getFireLoss() + var/total_clone = getCloneLoss() + if(total_brute) + if (total_brute < 25) + msg += "[span_warning("[t_He] [t_has] minor bruising.")]\n" + else if (total_brute < 50) + msg += "[span_warning("[t_He] [t_has] moderate bruising.")]\n" + else + msg += "[span_warning("[t_He] [t_has] severe bruising.")]\n" + + if(total_burn) + if (total_burn < 25) + msg += "[span_warning("[t_He] [t_has] minor burns.")]\n" + else if (total_burn < 50) + msg += "[span_warning("[t_He] [t_has] moderate burns.")]\n" + else + msg += "[span_warning("[t_He] [t_has] severe burns.")]\n" + + if(total_clone) + if(total_clone < 25) + msg += "[t_He] [t_is] slightly disfigured, with light signs of cellular damage.\n" + else if (total_clone < 50) + msg += "[span_deadsay("[t_He] [t_is] significantly disfigured, with growing clouds of cellular damage.")]\n" + else + msg += "[span_deadsay("[t_He] [t_is] absolutely fucked up, with streaks of sickening, deformed flesh on [t_his] skin.")]\n" if(fire_stacks > 0) msg += "[t_He] [t_is] covered in something flammable.\n" if(fire_stacks < 0) msg += "[t_He] look[p_s()] a little soaked.\n" if(on_fire) - msg += "[span_warning("[t_He] [t_is] on fire!")]\n" + msg += "[span_boldwarning("[t_He] [t_is] on fire!")]\n" var/list/wound_flavor_text = list() //List mapping each limb's display_name to its wound description var/list/is_destroyed = list() var/list/is_bleeding = list() - for(var/datum/limb/temp AS in limbs) - if(temp.limb_status & LIMB_DESTROYED) - is_destroyed["[temp.display_name]"] = 1 - wound_flavor_text["[temp.display_name]"] = "[span_warning("[t_He] [t_is] missing [t_his] [temp.display_name].")]\n" + for(var/datum/limb/temp_limb AS in limbs) + if(temp_limb.limb_status & LIMB_DESTROYED) + is_destroyed["[temp_limb.display_name]"] = 1 + wound_flavor_text["[temp_limb.display_name]"] = "[span_boldwarning("[t_He] [t_is] missing [t_his] [temp_limb.display_name].")]\n" continue - if(temp.limb_status & LIMB_ROBOT) - if(!(temp.brute_dam + temp.burn_dam)) + if(temp_limb.limb_status & LIMB_ROBOT) + if(!(temp_limb.brute_dam + temp_limb.burn_dam)) if(!(species.species_flags & IS_SYNTHETIC)) - wound_flavor_text["[temp.display_name]"] = "[span_warning("[t_He] [t_has] a robot [temp.display_name]!")]\n" + wound_flavor_text["[temp_limb.display_name]"] = "[span_tinynotice("[t_He] [t_has] a robot [temp_limb.display_name].")]\n" continue else - wound_flavor_text["[temp.display_name]"] = "[t_He] [t_has] a robot [temp.display_name]. It has" - if(temp.brute_dam) - switch(temp.brute_dam) + wound_flavor_text["[temp_limb.display_name]"] = "[t_He] [t_has] a robot [temp_limb.display_name]. It has" + if(temp_limb.brute_dam) + switch(temp_limb.brute_dam) if(0 to 20) - wound_flavor_text["[temp.display_name]"] += " some dents" + wound_flavor_text["[temp_limb.display_name]"] += " some dents" if(21 to INFINITY) - wound_flavor_text["[temp.display_name]"] += pick(" a lot of dents"," severe denting") - if(temp.brute_dam && temp.burn_dam) - wound_flavor_text["[temp.display_name]"] += " and" - if(temp.burn_dam) - switch(temp.burn_dam) + wound_flavor_text["[temp_limb.display_name]"] += pick(" a lot of dents"," severe denting") + if(temp_limb.brute_dam && temp_limb.burn_dam) + wound_flavor_text["[temp_limb.display_name]"] += " and" + if(temp_limb.burn_dam) + switch(temp_limb.burn_dam) if(0 to 20) - wound_flavor_text["[temp.display_name]"] += " some burns" + wound_flavor_text["[temp_limb.display_name]"] += " some burns" if(21 to INFINITY) - wound_flavor_text["[temp.display_name]"] += pick(" a lot of burns"," severe melting") - if(wound_flavor_text["[temp.display_name]"]) - wound_flavor_text["[temp.display_name]"] += "!\n" + wound_flavor_text["[temp_limb.display_name]"] += pick(" a lot of burns"," severe melting") + if(wound_flavor_text["[temp_limb.display_name]"]) + wound_flavor_text["[temp_limb.display_name]"] += "!\n" else - if(temp.limb_status & LIMB_BLEEDING) - is_bleeding["[temp.display_name]"] = 1 + if(temp_limb.limb_status & LIMB_BLEEDING) + is_bleeding["[temp_limb.display_name]"] = 1 var/healthy = TRUE var/brute_desc = "" - switch(temp.brute_dam) + switch(temp_limb.brute_dam) if(0.01 to 5) brute_desc = "minor scrapes" if(5 to 20) @@ -283,10 +311,10 @@ brute_desc = "gaping wounds" if(brute_desc) healthy = FALSE - brute_desc = (temp.limb_wound_status & LIMB_WOUND_BANDAGED ? "bandaged " : "") + brute_desc + brute_desc = (temp_limb.limb_wound_status & LIMB_WOUND_BANDAGED ? "bandaged " : "") + brute_desc var/burn_desc = "" - switch(temp.burn_dam) + switch(temp_limb.burn_dam) if(0.01 to 5) brute_desc = "minor burns" if(5 to 20) @@ -297,10 +325,10 @@ brute_desc = "charring" if(burn_desc) healthy = FALSE - burn_desc = (temp.limb_wound_status & LIMB_WOUND_SALVED ? "salved " : "") + burn_desc + burn_desc = (temp_limb.limb_wound_status & LIMB_WOUND_SALVED ? "salved " : "") + burn_desc var/germ_desc = "" - switch(temp.germ_level) + switch(temp_limb.germ_level) if(INFECTION_LEVEL_ONE to INFECTION_LEVEL_TWO - 1) germ_desc = "mildly infected " if(INFECTION_LEVEL_TWO to INFINITY) @@ -310,16 +338,16 @@ var/overall_desc = "" if(healthy) - overall_desc = span_notice("[t_He] [t_has] a healthy [temp.display_name].") + overall_desc = span_tinynotice("[t_He] [t_has] a healthy [temp_limb.display_name].") else - overall_desc = "[t_He] [t_has] a [germ_desc][temp.display_name]" + overall_desc = "[t_He] [t_has] a [germ_desc][temp_limb.display_name]" if(brute_desc || burn_desc) overall_desc += " with [brute_desc]" if(brute_desc && burn_desc) overall_desc += " and " overall_desc += burn_desc overall_desc = span_warning(overall_desc + ".") - wound_flavor_text["[temp.display_name]"] = overall_desc + "\n" + wound_flavor_text["[temp_limb.display_name]"] = overall_desc + "\n" //Handles the text strings being added to the actual description. //If they have something that covers the limb, and it is not missing, put flavortext. If it is covered but bleeding, add other flavortext. @@ -381,68 +409,68 @@ display_foot_right = 1 if (display_head) - msg += "[span_warning("[t_He] [t_has] blood dripping from [t_his] face!")]\n" + msg += "[span_warning("[t_He] [t_has] blood dripping from [t_his] face!")]\n" if (display_chest && display_groin && display_arm_left && display_arm_right && display_hand_left && display_hand_right && display_leg_left && display_leg_right && display_foot_left && display_foot_right) - msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] clothes from [t_his] entire body!")]\n" + msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] clothes from [t_his] entire body!")]\n" else if (display_chest && display_arm_left && display_arm_right && display_hand_left && display_hand_right) - msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] clothes from [t_his] upper body!")]\n" + msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] clothes from [t_his] upper body!")]\n" else if (display_chest) - msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] shirt!")]\n" + msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] shirt!")]\n" if (display_arm_left && display_arm_right && display_hand_left && display_hand_left) - msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] gloves and sleeves!")]\n" + msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] gloves and sleeves!")]\n" else if (display_arm_left && display_arm_right) - msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] sleeves!")]\n" + msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] sleeves!")]\n" else if (display_arm_left) - msg += "[span_warning("[t_He] [t_has] soaking through [t_his] left sleeve!")]\n" + msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] left sleeve!")]\n" if (display_arm_right) - msg += "[span_warning("[t_He] [t_has] soaking through [t_his] right sleeve!")]\n" + msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] right sleeve!")]\n" if (display_hand_left && display_hand_right) - msg += "[span_warning("[t_He] [t_has] blood running out from under [t_his] gloves!")]\n" + msg += "[span_warning("[t_He] [t_has] blood running out from under [t_his] gloves!")]\n" else if (display_hand_left) - msg += "[span_warning("[t_He] [t_has] blood running out from under [t_his] left glove!")]\n" + msg += "[span_warning("[t_He] [t_has] blood running out from under [t_his] left glove!")]\n" if (display_hand_right) - msg += "[span_warning("[t_He] [t_has] blood running out from under [t_his] right glove!")]\n" + msg += "[span_warning("[t_He] [t_has] blood running out from under [t_his] right glove!")]\n" if (display_groin && display_leg_left && display_leg_right && display_foot_left && display_foot_right) msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] clothes from [t_his] lower body!")]\n" else if (display_groin) - msg += "[span_warning("[t_He] [t_has] blood dripping from [t_his] groin!")]\n" + msg += "[span_warning("[t_He] [t_has] blood dripping from [t_his] groin!")]\n" if (display_leg_left && display_leg_right && display_foot_left && display_foot_right) - msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] pant legs and boots!")]\n" + msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] pant legs and boots!")]\n" else if (display_leg_left && display_leg_right) - msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] pant legs!")]\n" + msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] pant legs!")]\n" else if (display_leg_left) - msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] left pant leg!")]\n" + msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] left pant leg!")]\n" if (display_leg_right) - msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] right pant leg!")]\n" + msg += "[span_warning("[t_He] [t_has] blood soaking through [t_his] right pant leg!")]\n" if (display_foot_left && display_foot_right) - msg += "[span_warning("[t_He] [t_has] blood pooling around[t_his] boots!")]\n" + msg += "[span_warning("[t_He] [t_has] blood pooling around[t_his] boots!")]\n" else if (display_foot_left) - msg += "[span_warning("[t_He] [t_has] blood pooling around [t_his] left boot!")]\n" + msg += "[span_warning("[t_He] [t_has] blood pooling around [t_his] left boot!")]\n" if (display_foot_right) - msg += "[span_warning("[t_He] [t_has] blood pooling around [t_his] right boot!")]\n" + msg += "[span_warning("[t_He] [t_has] blood pooling around [t_his] right boot!")]\n" if(chestburst == 2) if(isxeno(user)) msg += "[span_xenowarning("A larva escaped from [t_him]!")]\n" else - msg += "[span_warning("[t_He] [t_has] a giant hole in [t_his] chest!")]\n" + msg += "[span_boldwarning("[t_He] [t_has] a giant hole in [t_his] chest!")]\n" for(var/i in embedded_objects) var/obj/item/embedded = i if(!(embedded.embedding.embedded_flags & EMBEDDED_CAN_BE_YANKED_OUT)) continue - msg += "[span_warning("[t_He] [t_has] \a [embedded] sticking out of [t_his] flesh!")]\n" + msg += "[span_boldwarning("[t_He] [t_has] \a [embedded] sticking out of [t_his] flesh!")]\n" if(hasHUD(user,"security")) var/perpname = "wot" @@ -493,7 +521,7 @@ if(isxeno(user)) msg += "[t_He] [t_is] hollow. Useless.\n" else - msg += "[span_warning("[t_He] [t_is] hollowed out!")]\n" + msg += "[span_deadsay("[t_He] [t_is] hollowed out!")]\n" RU TGMC EDIT PUPPETEER REMOVAL */ if(isxeno(user)) if(species.species_flags & IS_SYNTHETIC) @@ -542,7 +570,7 @@ RU TGMC EDIT PUPPETEER REMOVAL */ return var/pulse_taken = get_pulse(GETPULSE_HAND) if(pulse_taken == PULSE_NONE) - to_chat(user, span_deadsay("[p_they(TRUE)] [p_have()] no pulse[client ? "" : " and [p_their()] soul has departed, although they may be revivable"]...")) + to_chat(user, span_deadsay("[p_they(TRUE)] [p_have()] no pulse...")) else to_chat(user, span_deadsay("[p_their(TRUE)] pulse is [pulse_taken].")) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 373716f5f3adc..eaac7b6a28568 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1,7 +1,5 @@ /mob/living/carbon/human/Initialize(mapload) - add_verb(src, /mob/living/proc/lay_down) - b_type = pick(7;"O-", 38;"O+", 6;"A-", 34;"A+", 2;"B-", 9;"B+", 1;"AB-", 3;"AB+") - blood_type = b_type + blood_type = pick(7;"O-", 38;"O+", 6;"A-", 34;"A+", 2;"B-", 9;"B+", 1;"AB-", 3;"AB+") if(!species) set_species() @@ -12,25 +10,9 @@ GLOB.alive_human_list += src LAZYADD(GLOB.humans_by_zlevel["[z]"], src) - var/datum/action/skill/toggle_orders/toggle_orders_action = new - toggle_orders_action.give_action(src) - var/datum/action/skill/issue_order/move/issue_order_move = new - issue_order_move.give_action(src) - var/datum/action/skill/issue_order/hold/issue_order_hold = new - issue_order_hold.give_action(src) - var/datum/action/skill/issue_order/focus/issue_order_focus = new - issue_order_focus.give_action(src) - var/datum/action/innate/order/attack_order/personal/send_attack_order = new - send_attack_order.give_action(src) - var/datum/action/innate/order/defend_order/personal/send_defend_order = new - send_defend_order.give_action(src) - var/datum/action/innate/order/retreat_order/personal/send_retreat_order = new - send_retreat_order.give_action(src) - var/datum/action/innate/order/rally_order/personal/send_rally_order = new - send_rally_order.give_action(src) - var/datum/action/innate/message_squad/screen_orders = new - screen_orders.give_action(src) - + for(var/action in GLOB.human_init_actions) + var/datum/action/human_action = new action(src) + human_action.give_action(src) //makes order hud visible var/datum/atom_hud/H = GLOB.huds[DATA_HUD_ORDER] @@ -50,12 +32,28 @@ LAZYREMOVE(GLOB.humans_by_zlevel["[old_z]"], src) LAZYADD(GLOB.humans_by_zlevel["[new_z]"], src) +/mob/living/carbon/human/vv_edit_var(var_name, var_value) + return ..() + /mob/living/carbon/human/vv_get_dropdown() . = ..() - . += "---" - .["Drop Everything"] = "?_src_=vars;[HrefToken()];dropeverything=[REF(src)]" - .["Copy Outfit"] = "?_src_=vars;[HrefToken()];copyoutfit=[REF(src)]" + VV_DROPDOWN_OPTION("", "---------") + VV_DROPDOWN_OPTION(VV_HK_SET_SPECIES, "Set Species") + +/mob/living/carbon/human/vv_do_topic(list/href_list) + . = ..() + + if(!.) + return + if(href_list[VV_HK_SET_SPECIES]) + if(!check_rights(R_SPAWN)) + return + var/result = input(usr, "Please choose a new species","Species") as null|anything in GLOB.all_species + if(result) + var/newtype = GLOB.all_species[result] + admin_ticket_log("[key_name_admin(usr)] has modified the bodyparts of [src] to [result]") + set_species(newtype) /mob/living/carbon/human/prepare_huds() ..() @@ -229,9 +227,9 @@ //repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a seperate proc as it'll be useful elsewhere /mob/living/carbon/human/get_visible_name() - if( wear_mask && (wear_mask.flags_inv_hide & HIDEFACE) ) //Wearing a mask which hides our face, use id-name if possible + if( wear_mask && (wear_mask.inv_hide_flags & HIDEFACE) ) //Wearing a mask which hides our face, use id-name if possible return get_id_name("Unknown") - if( head && (head.flags_inv_hide & HIDEFACE) ) + if( head && (head.inv_hide_flags & HIDEFACE) ) return get_id_name("Unknown") //Likewise for hats var/face_name = get_face_name() var/id_name = get_id_name("") @@ -604,7 +602,6 @@ else if(newcolor != holo_card_color) holo_card_color = newcolor to_chat(usr, span_notice("You add a [newcolor] holo card on [src].")) - update_targeted() if(href_list["scanreport"]) if(!hasHUD(usr,"medical")) @@ -694,10 +691,10 @@ /mob/living/carbon/human/abiotic(full_body = 0) - if(full_body && ((src.l_hand && !( src.l_hand.flags_item & ITEM_ABSTRACT)) || (src.r_hand && !( src.r_hand.flags_item & ITEM_ABSTRACT)) || (src.back || src.wear_mask || src.head || src.shoes || src.w_uniform || src.wear_suit || src.glasses || src.wear_ear || src.gloves))) + if(full_body && ((src.l_hand && !( src.l_hand.item_flags & ITEM_ABSTRACT)) || (src.r_hand && !( src.r_hand.item_flags & ITEM_ABSTRACT)) || (src.back || src.wear_mask || src.head || src.shoes || src.w_uniform || src.wear_suit || src.glasses || src.wear_ear || src.gloves))) return 1 - if( (src.l_hand && !(src.l_hand.flags_item & ITEM_ABSTRACT)) || (src.r_hand && !(src.r_hand.flags_item & ITEM_ABSTRACT)) ) + if( (src.l_hand && !(src.l_hand.item_flags & ITEM_ABSTRACT)) || (src.r_hand && !(src.r_hand.item_flags & ITEM_ABSTRACT)) ) return 1 return 0 @@ -813,7 +810,7 @@ species.create_organs(src) - dextrous = species.has_fine_manipulation + dextrous = TRUE if(species.default_language_holder) language_holder = new species.default_language_holder(src) @@ -855,7 +852,7 @@ return species.handle_chemicals(R,src) // if it returns 0, it will run the usual on_mob_life for that reagent. otherwise, it will stop after running handle_chemicals for the species. /mob/living/carbon/human/slip(slip_source_name, stun_level, weaken_level, run_only, override_noslip, slide_steps) - if((shoes?.flags_inventory & NOSLIPPING) && !override_noslip) //If our shoes are noslip just return immediately unless we don't care about the noslip + if((shoes?.inventory_flags & NOSLIPPING) && !override_noslip) //If our shoes are noslip just return immediately unless we don't care about the noslip return FALSE return ..() @@ -1124,3 +1121,8 @@ if(buckled) return return ..() + +/mob/living/carbon/human/get_up() + if(!do_after(src, 2 SECONDS, IGNORE_LOC_CHANGE|IGNORE_HELD_ITEM, src)) + return + return ..() diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index b9f48bc818e99..5c5f0d2556e66 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -6,120 +6,124 @@ if(!ishuman(user)) return - var/mob/living/carbon/human/H = user + var/mob/living/carbon/human/human_user = user - if(user != src && !check_shields(COMBAT_TOUCH_ATTACK, H.melee_damage, "melee")) + if(user != src && !check_shields(COMBAT_TOUCH_ATTACK, human_user.melee_damage, "melee")) visible_message(span_danger("[user] attempted to touch [src]!"), null, null, 5) return FALSE - H.changeNext_move(7) - switch(H.a_intent) + human_user.changeNext_move(7) + switch(human_user.a_intent) if(INTENT_HELP) - if(on_fire && H != src) + if(on_fire && human_user != src) fire_stacks = max(fire_stacks - 1, 0) playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 25, 1, 7) - H.visible_message(span_danger("[H] tries to put out the fire on [src]!"), \ + human_user.visible_message(span_danger("[human_user] tries to put out the fire on [src]!"), \ span_warning("You try to put out the fire on [src]!"), null, 5) if(fire_stacks <= 0) - H.visible_message(span_danger("[H] has successfully extinguished the fire on [src]!"), \ + human_user.visible_message(span_danger("[human_user] has successfully extinguished the fire on [src]!"), \ span_notice("You extinguished the fire on [src]."), null, 5) ExtinguishMob() return TRUE - if(istype(wear_mask, /obj/item/clothing/mask/facehugger) && H != src) - H.stripPanelUnequip(wear_mask, src, SLOT_WEAR_MASK) + if(istype(wear_mask, /obj/item/clothing/mask/facehugger) && human_user != src) + human_user.stripPanelUnequip(wear_mask, src, SLOT_WEAR_MASK) return TRUE if(health >= get_crit_threshold()) - help_shake_act(H) + help_shake_act(human_user) return TRUE if(HAS_TRAIT(src, TRAIT_UNDEFIBBABLE)) - to_chat(H, span_boldnotice("Can't help this one. Body has gone cold.")) + to_chat(human_user, span_boldnotice("Can't help this one. Body has gone cold.")) return FALSE if(species?.species_flags & ROBOTIC_LIMBS) - to_chat(H, span_boldnotice("You can't help this one, [p_they()] [p_have()] no lungs!")) + to_chat(human_user, span_boldnotice("You can't help this one, [p_they()] [p_have()] no lungs!")) return FALSE - if((head && (head.flags_inventory & COVERMOUTH)) || (wear_mask && (wear_mask.flags_inventory & COVERMOUTH))) - to_chat(H, span_boldnotice("Remove [p_their()] mask!")) + if((head && (head.inventory_flags & COVERMOUTH)) || (wear_mask && (wear_mask.inventory_flags & COVERMOUTH))) + to_chat(human_user, span_boldnotice("Remove [p_their()] mask!")) return FALSE - if((H.head && (H.head.flags_inventory & COVERMOUTH)) || (H.wear_mask && (H.wear_mask.flags_inventory & COVERMOUTH))) - to_chat(H, span_boldnotice("Remove your mask!")) + if((human_user.head && (human_user.head.inventory_flags & COVERMOUTH)) || (human_user.wear_mask && (human_user.wear_mask.inventory_flags & COVERMOUTH))) + to_chat(human_user, span_boldnotice("Remove your mask!")) return FALSE //CPR - if(H.do_actions) + if(human_user.do_actions) return TRUE - H.visible_message(span_danger("[H] is trying perform CPR on [src]!"), null, null, 4) + human_user.visible_message(span_danger("[human_user] is trying perform CPR on [src]!"), null, null, 4) - if(!do_after(H, HUMAN_STRIP_DELAY, NONE, src, BUSY_ICON_FRIENDLY, BUSY_ICON_MEDICAL)) + if(!do_after(human_user, HUMAN_STRIP_DELAY, NONE, src, BUSY_ICON_FRIENDLY, BUSY_ICON_MEDICAL)) return TRUE if(health > get_death_threshold() && health < get_crit_threshold()) var/suff = min(getOxyLoss(), 5) //Pre-merge level, less healing, more prevention of dieing. adjustOxyLoss(-suff) updatehealth() - visible_message(span_warning(" [H] performs CPR on [src]!"), + visible_message(span_warning(" [human_user] performs CPR on [src]!"), span_boldnotice("You feel a breath of fresh air enter your lungs. It feels good."), vision_distance = 3) - to_chat(H, span_warning("Repeat at least every 7 seconds.")) + to_chat(human_user, span_warning("Repeat at least every 7 seconds.")) else if(!HAS_TRAIT(src, TRAIT_UNDEFIBBABLE) && !TIMER_COOLDOWN_CHECK(src, COOLDOWN_CPR)) TIMER_COOLDOWN_START(src, COOLDOWN_CPR, 7 SECONDS) dead_ticks -= 5 - visible_message(span_warning(" [H] performs CPR on [src]!"), vision_distance = 3) - to_chat(H, span_warning("The patient gains a little more time. Repeat every 7 seconds.")) + visible_message(span_warning(" [human_user] performs CPR on [src]!"), vision_distance = 3) + to_chat(human_user, span_warning("The patient gains a little more time. Repeat every 7 seconds.")) else - to_chat(H, span_warning("You fail to aid [src].")) + to_chat(human_user, span_warning("You fail to aid [src].")) return TRUE if(INTENT_GRAB) - if(H == src || anchored) + if(human_user == src || anchored) return FALSE - H.start_pulling(src) + human_user.start_pulling(src) return TRUE if(INTENT_HARM) // See if they can attack, and which attacks to use. - if(H == src && !H.do_self_harm) + if(human_user == src && !human_user.do_self_harm) return FALSE - var/datum/unarmed_attack/attack = H.species.unarmed - if(!attack.is_usable(H)) - attack = H.species.secondary_unarmed - if(!attack.is_usable(H)) + var/datum/unarmed_attack/attack = human_user.species.unarmed + if(!attack.is_usable(human_user)) + attack = human_user.species.secondary_unarmed + if(!attack.is_usable(human_user)) return FALSE - if(!H.melee_damage) - H.do_attack_animation(src) + var/attack_verb = pick(attack.attack_verb) + //if you're lying/buckled, the miss chance is ignored anyway + var/target_zone = get_zone_with_miss_chance(human_user.zone_selected, src, 10 - (human_user.skills.getRating(SKILL_CQC) - skills.getRating(SKILL_CQC)) * 5) + + if(!human_user.melee_damage || !target_zone) + human_user.do_attack_animation(src) playsound(loc, attack.miss_sound, 25, TRUE) - visible_message(span_danger("[H] tried to [pick(attack.attack_verb)] [src]!"), null, null, 5) - log_combat(H, src, "[pick(attack.attack_verb)]ed", "(missed)") - if(!H.mind?.bypass_ff && !mind?.bypass_ff && H.faction == faction) + visible_message(span_danger("[human_user] tried to [attack_verb] [src]!"), null, null, 5) + log_combat(human_user, src, "[attack_verb]ed", "(missed)") + if(!human_user.mind?.bypass_ff && !mind?.bypass_ff && human_user.faction == faction) var/turf/T = get_turf(src) - log_ffattack("[key_name(H)] missed a punch against [key_name(src)] in [AREACOORD(T)].") - msg_admin_ff("[ADMIN_TPMONTY(H)] missed a punch against [ADMIN_TPMONTY(src)] in [ADMIN_VERBOSEJMP(T)].") + log_ffattack("[key_name(human_user)] missed a [attack_verb] against [key_name(src)] in [AREACOORD(T)].") + msg_admin_ff("[ADMIN_TPMONTY(human_user)] missed a [attack_verb] against [ADMIN_TPMONTY(src)] in [ADMIN_VERBOSEJMP(T)].") return FALSE - H.do_attack_animation(src, ATTACK_EFFECT_YELLOWPUNCH) - var/max_dmg = H.melee_damage + H.skills.getRating(SKILL_CQC) - var/damage = rand(1, max_dmg) - - var/target_zone = ran_zone(H.zone_selected) + human_user.do_attack_animation(src, ATTACK_EFFECT_YELLOWPUNCH) + var/max_dmg = max(human_user.melee_damage + (human_user.skills.getRating(SKILL_CQC) * CQC_SKILL_DAMAGE_MOD), 3) + var/damage = max_dmg + if(!lying_angle) + damage = rand(1, max_dmg) playsound(loc, attack.attack_sound, 25, TRUE) - visible_message(span_danger("[H] [pick(attack.attack_verb)]ed [src]!"), null, null, 5) + visible_message(span_danger("[human_user] [attack_verb]ed [src]!"), null, null, 5) var/list/hit_report = list() /* RU TGMC EDIT //FUCK MELEE STUNS - if(damage >= 5 && prob(50)) - visible_message(span_danger("[H] has weakened [src]!"), null, null, 5) - apply_effect(modify_by_armor(6 SECONDS, MELEE, def_zone = target_zone), WEAKEN) + if(damage >= 4 && prob(25)) + visible_message(span_danger("[human_user] has weakened [src]!"), null, null, 5) + apply_effect(3 SECONDS, WEAKEN) hit_report += "(KO)" RU TGMC EDIT */ damage += attack.damage @@ -127,21 +131,19 @@ RU TGMC EDIT */ hit_report += "(RAW DMG: [damage])" - log_combat(H, src, "[pick(attack.attack_verb)]ed", "[hit_report.Join(" ")]") - if(!H.mind?.bypass_ff && !mind?.bypass_ff && H.faction == faction) + log_combat(human_user, src, "[attack_verb]ed", "[hit_report.Join(" ")]") + if(!human_user.mind?.bypass_ff && !mind?.bypass_ff && human_user.faction == faction) var/turf/T = get_turf(src) - H.ff_check(damage, src) - log_ffattack("[key_name(H)] punched [key_name(src)] in [AREACOORD(T)] [hit_report.Join(" ")].") - msg_admin_ff("[ADMIN_TPMONTY(H)] punched [ADMIN_TPMONTY(src)] in [ADMIN_VERBOSEJMP(T)] [hit_report.Join(" ")].") + human_user.ff_check(damage, src) + log_ffattack("[key_name(human_user)] punched [key_name(src)] in [AREACOORD(T)] [hit_report.Join(" ")].") + msg_admin_ff("[ADMIN_TPMONTY(human_user)] punched [ADMIN_TPMONTY(src)] in [ADMIN_VERBOSEJMP(T)] [hit_report.Join(" ")].") if(INTENT_DISARM) - H.do_attack_animation(src, ATTACK_EFFECT_DISARM) - - var/target_zone = ran_zone(H.zone_selected) + human_user.do_attack_animation(src, ATTACK_EFFECT_DISARM) //Accidental gun discharge - if(user.skills.getRating(SKILL_CQC) < SKILL_CQC_MP) + if(human_user.skills.getRating(SKILL_CQC) < SKILL_CQC_MP) if (istype(r_hand,/obj/item/weapon/gun) || istype(l_hand,/obj/item/weapon/gun)) var/obj/item/weapon/gun/W = null var/chance = 0 @@ -156,39 +158,38 @@ RU TGMC EDIT */ if(prob(chance)) visible_message("[src]'s [W] goes off during struggle!", null, null, 5) - log_combat(H, src, "disarmed", "making their [W] go off") + log_combat(human_user, src, "disarmed", "making their [W] go off") var/list/turfs = list() for(var/turf/T in view()) turfs += T var/turf/target = pick(turfs) return W.afterattack(target,src) - var/randn = rand(1, 100) + skills.getRating(SKILL_CQC) * CQC_SKILL_DISARM_MOD - H.skills.getRating(SKILL_CQC) * CQC_SKILL_DISARM_MOD + var/randn = rand(1, 100) + skills.getRating(SKILL_CQC) * CQC_SKILL_DISARM_MOD - human_user.skills.getRating(SKILL_CQC) * CQC_SKILL_DISARM_MOD if (randn <= 25) - apply_effect(modify_by_armor(6 SECONDS, MELEE, def_zone = target_zone), WEAKEN) + apply_effect(3 SECONDS, WEAKEN) playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1, 7) - visible_message(span_danger("[H] has pushed [src]!"), null, null, 5) - log_combat(user, src, "pushed") + visible_message(span_danger("[human_user] has pushed [src]!"), null, null, 5) + log_combat(human_user, src, "pushed") return if(randn <= 60) //BubbleWrap: Disarming breaks a pull if(pulling) - visible_message(span_danger("[H] has broken [src]'s grip on [pulling]!"), null, null, 5) + visible_message(span_danger("[human_user] has broken [src]'s grip on [pulling]!"), null, null, 5) stop_pulling() else drop_held_item() - visible_message(span_danger("[H] has disarmed [src]!"), null, null, 5) + visible_message(span_danger("[human_user] has disarmed [src]!"), null, null, 5) playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1, 7) log_combat(user, src, "disarmed") return playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, 7) - visible_message(span_danger("[H] attempted to disarm [src]!"), null, null, 5) - log_combat(user, src, "missed a disarm") - return + visible_message(span_danger("[human_user] attempted to disarm [src]!"), null, null, 5) + log_combat(human_user, src, "missed a disarm") /mob/living/carbon/human/proc/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params) return @@ -198,7 +199,6 @@ RU TGMC EDIT */ if(src == M) if(holo_card_color) //if we have a triage holocard printed on us, we remove it. holo_card_color = null - update_targeted() visible_message(span_notice("[src] removes the holo card on [p_them()]self."), span_notice("You remove the holo card on yourself."), null, 3) return @@ -280,7 +280,7 @@ RU TGMC EDIT */ else if(burn_treated && burndamage > 0) treat += "(Salved)" var/msg = "My [org.display_name] is [status]. [treat]" - final_msg += status=="OK" ? span_notice(msg) : span_warning (msg) + final_msg += status=="OK" ? span_notice(msg) : span_alert (msg) switch(staminaloss) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 63ff8480470a6..c0b406e882aa8 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -16,7 +16,7 @@ Contains most of the procs that are called when a mob is attacked by something var/list/clothing_items = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes) // What all are we checking? for(var/obj/item/clothing/C in clothing_items) - if(istype(C) && (C.flags_armor_protection & def_zone.body_part)) // Is that body part being targeted covered? + if(istype(C) && (C.armor_protection_flags & def_zone.body_part)) // Is that body part being targeted covered? siemens_coefficient *= C.siemens_coefficient return siemens_coefficient @@ -24,7 +24,7 @@ Contains most of the procs that are called when a mob is attacked by something /mob/living/carbon/human/proc/add_limb_armor(obj/item/armor_item) for(var/i in limbs) var/datum/limb/limb_to_check = i - if(!(limb_to_check.body_part & armor_item.flags_armor_protection)) + if(!(limb_to_check.body_part & armor_item.armor_protection_flags)) continue limb_to_check.add_limb_soft_armor(armor_item.soft_armor) limb_to_check.add_limb_hard_armor(armor_item.hard_armor) @@ -37,7 +37,7 @@ Contains most of the procs that are called when a mob is attacked by something /mob/living/carbon/human/proc/remove_limb_armor(obj/item/armor_item) for(var/i in limbs) var/datum/limb/limb_to_check = i - if(!(limb_to_check.body_part & armor_item.flags_armor_protection)) + if(!(limb_to_check.body_part & armor_item.armor_protection_flags)) continue limb_to_check.remove_limb_soft_armor(armor_item.soft_armor) limb_to_check.remove_limb_hard_armor(armor_item.hard_armor) @@ -54,7 +54,7 @@ Contains most of the procs that are called when a mob is attacked by something if(!bp) continue if(bp && istype(bp ,/obj/item/clothing)) var/obj/item/clothing/C = bp - if(C.flags_armor_protection & HEAD) + if(C.armor_protection_flags & HEAD) return 1 return 0 @@ -72,13 +72,13 @@ Contains most of the procs that are called when a mob is attacked by something ..() /mob/living/carbon/human/has_smoke_protection() - if(istype(wear_mask) && wear_mask.flags_inventory & BLOCKGASEFFECT) + if(istype(wear_mask) && wear_mask.inventory_flags & BLOCKGASEFFECT) return TRUE - if(istype(glasses) && glasses.flags_inventory & BLOCKGASEFFECT) + if(istype(glasses) && glasses.inventory_flags & BLOCKGASEFFECT) return TRUE if(head && istype(head, /obj/item/clothing)) var/obj/item/clothing/CH = head - if(CH.flags_inventory & BLOCKGASEFFECT) + if(CH.inventory_flags & BLOCKGASEFFECT) return TRUE return ..() @@ -106,6 +106,19 @@ Contains most of the procs that are called when a mob is attacked by something else target_zone = def_zone ? check_zone(def_zone) : get_zone_with_miss_chance(user.zone_selected, src) + var/attack_verb = LAZYLEN(I.attack_verb) ? pick(I.attack_verb) : "attacked" + + if(!target_zone) + user.do_attack_animation(src) + playsound(loc, 'sound/weapons/punchmiss.ogg', 25, TRUE) + visible_message(span_danger("[user] tried to hit [src] with [I]!"), null, null, 5) + log_combat(user, src, "[attack_verb]", "(missed)") + if(!user.mind?.bypass_ff && !mind?.bypass_ff && user.faction == faction) + var/turf/T = get_turf(src) + log_ffattack("[key_name(user)] missed a attack against [key_name(src)] with [I] in [AREACOORD(T)].") + msg_admin_ff("[ADMIN_TPMONTY(user)] missed an against [ADMIN_TPMONTY(src)] with [I] in [ADMIN_VERBOSEJMP(T)].") + return FALSE + var/datum/limb/affecting = get_limb(target_zone) if(affecting.limb_status & LIMB_DESTROYED) to_chat(user, "What [affecting.display_name]?") @@ -127,7 +140,6 @@ Contains most of the procs that are called when a mob is attacked by something var/applied_damage = modify_by_armor(damage, MELEE, I.penetration, target_zone) var/percentage_penetration = applied_damage / damage * 100 - var/attack_verb = LAZYLEN(I.attack_verb) ? pick(I.attack_verb) : "attacked" var/armor_verb switch(percentage_penetration) if(-INFINITY to 0) @@ -212,14 +224,7 @@ Contains most of the procs that are called when a mob is attacked by something //Melee weapon embedded object code. if(affecting.limb_status & LIMB_DESTROYED) hit_report += "(delimbed [affecting.display_name])" -//RUTGMC edit - item embed disable -/* - else if(I.damtype == BRUTE && !(HAS_TRAIT(I, TRAIT_NODROP) || (I.flags_item & DELONDROP))) - if (percentage_penetration && weapon_sharp && prob(I.embedding.embed_chance)) - user.dropItemToGround(I, TRUE) - I.embed_into(src, affecting) - hit_report += "(embedded in [affecting.display_name])" -*/ + record_melee_damage(user, applied_damage, affecting.limb_status & LIMB_DESTROYED) log_combat(user, src, "attacked", I, "(INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(I.damtype)]) [hit_report.Join(" ")]") if(damage && !user.mind?.bypass_ff && !mind?.bypass_ff && user.faction == faction) @@ -309,11 +314,6 @@ Contains most of the procs that are called when a mob is attacked by something hit_report += "(RAW DMG: [throw_damage])" - if(thrown_item.item_fire_stacks) - fire_stacks += thrown_item.item_fire_stacks - IgniteMob() - hit_report += "(set ablaze)" - //thrown weapon embedded object code. if(affecting.limb_status & LIMB_DESTROYED) hit_report += "(delimbed [affecting.display_name])" diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 6a4b044f198c9..ae842807b2a48 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -37,8 +37,8 @@ var/g_eyes = 0 var/b_eyes = 0 - var/ethnicity = "Western" // Ethnicity - var/species_type = "" + ///The character's ethnicity + var/ethnicity = "Western" //Skin colour var/r_skin = 0 @@ -48,44 +48,64 @@ //Species specific var/moth_wings = "Plain" - var/lip_style //no lipstick by default- arguably misleading, as it could be used for general makeup + ///The style of the makeup the mob currently has applied. Used to determine the right icon state for on the mob. + var/makeup_style = "" - var/age = 30 //Player's age (pure fluff) - var/b_type = "A+" //Player's bloodtype + ///Character's age (pure fluff) + var/age = 30 - var/underwear = 1 //Which underwear the player wants - var/undershirt = 0 //Which undershirt the player wants. + ///Which underwear the player wants + var/underwear = 1 + ///Which undershirt the player wants. + var/undershirt = 0 - // General information + //The character's citizenship. Fluff. var/citizenship = "" + ///The character's religion. Fluff. var/religion = "" - //Equipment slots - var/obj/item/wear_suit = null - var/obj/item/clothing/under/w_uniform = null - var/obj/item/clothing/shoes/shoes = null - var/obj/item/belt = null - var/obj/item/clothing/gloves/gloves = null - var/obj/item/clothing/glasses/glasses = null - var/obj/item/head = null - var/obj/item/wear_ear = null - var/obj/item/card/id/wear_id = null - var/obj/item/r_store = null - var/obj/item/l_store = null - var/obj/item/s_store = null - - var/icon/stand_icon = null - - var/special_voice = "" // For changing our voice. Used by a symptom. - - var/last_dam = -1 //Used for determining if we need to process all limbs or just some or even none. - - var/mob/remoteview_target - + //Equipment slots. These are all references to items. + + ///The item currently being worn in the suit slot (usually armor) + var/obj/item/wear_suit + ///The item currently inside the suit storage slot (not inside the armor itself) + var/obj/item/s_store + ///The jumpsuit/uniform that's currently being worn. + var/obj/item/clothing/under/w_uniform + ///The shoes currently being worn. + var/obj/item/clothing/shoes/shoes + ///The belt being worn. + var/obj/item/belt + ///The gloves being worn. + var/obj/item/clothing/gloves/gloves + ///The glasses being worn. + var/obj/item/clothing/glasses/glasses + ///The item currently on the character's head. + var/obj/item/head + ///The headset/ear item being worn. + var/obj/item/wear_ear + ///The ID being worn. + var/obj/item/card/id/wear_id + ///The item currently in the right pocket + var/obj/item/r_store + ///The item currently in the left pocket + var/obj/item/l_store + + ///The current standing icon + var/icon/stand_icon + + ///Used for determining if we need to process all limbs or just some or even none. + var/last_dam = -1 + + ///This human's flavor text. Shows up when they're examined. var/flavor_text = "" + ///This human's custom medical record. Fluff. var/med_record = "" + ///This human's custom security record. Fluff. var/sec_record = "" + ///This human's custom employment record. Fluff. var/gen_record = "" + ///This human's custom exploit record. Fluff. var/exploit_record = "" @@ -94,10 +114,13 @@ ///How long the human is dead, in life ticks, which is 2 seconds var/dead_ticks = 0 - var/holo_card_color = "" //which color type of holocard is printed on us + ///Which color type of holocard is printed on us + var/holo_card_color = "" + ///A list of our limb datums var/list/limbs = list() - var/list/internal_organs_by_name = list() // so internal organs have less ickiness too + ///A list of internal organs by name ["organ name"] = /datum/internal_organ + var/list/internal_organs_by_name = list() ///How much dirt the mob's accumulated. Harmless by itself, but can trigger issues with open wounds or surgery. var/germ_level = 0 @@ -106,25 +129,18 @@ ///Whether we can use another command order yet. Either null or a timer ID. var/command_aura_cooldown + ///Strength of the move order aura affecting us var/mobility_aura = 0 + ///Strength of the hold order aura affecting us var/protection_aura = 0 + ///Strength of the focus order aura affecting us var/marksman_aura = 0 - var/datum/squad/assigned_squad //the squad assigned to - - var/cloaking = FALSE - - var/image/SL_directional = null - + ///The squad this human is assigned to + var/datum/squad/assigned_squad + ///Used to help determine the severity icon state for our damage hud overlays var/damageoverlaytemp = 0 - - var/specset //Simple way to track which set has the player taken - - var/static/list/can_ride_typecache = typecacheof(list(/mob/living/carbon/human, /mob/living/simple_animal/parrot)) - - ///Amount of deciseconds gained from the braindeath timer, usually by CPR. - var/revive_grace_time = 0 - + ///The cooldown for being pushed by xenos on harm intent COOLDOWN_DECLARE(xeno_push_delay) /// This is the cooldown on suffering additional effects for when shock gets high diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index b74dc0c3cc617..def861f386480 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -173,10 +173,10 @@ if(!penetrate_thick) switch(target_zone) if("head") - if(head?.flags_inventory & BLOCKSHARPOBJ) + if(head?.inventory_flags & BLOCKSHARPOBJ) . = FALSE else - if(wear_suit?.flags_inventory & BLOCKSHARPOBJ) + if(wear_suit?.inventory_flags & BLOCKSHARPOBJ) . = FALSE if(!. && error_msg && user) // Might need re-wording. @@ -219,19 +219,19 @@ /mob/living/carbon/human/get_permeability_protection() var/list/prot = list("hands"=0, "chest"=0, "groin"=0, "legs"=0, "feet"=0, "arms"=0, "head"=0) for(var/obj/item/I in get_equipped_items()) - if(I.flags_armor_protection & HANDS) + if(I.armor_protection_flags & HANDS) prot["hands"] = max(1 - I.permeability_coefficient, prot["hands"]) - if(I.flags_armor_protection & CHEST) + if(I.armor_protection_flags & CHEST) prot["chest"] = max(1 - I.permeability_coefficient, prot["chest"]) - if(I.flags_armor_protection & GROIN) + if(I.armor_protection_flags & GROIN) prot["groin"] = max(1 - I.permeability_coefficient, prot["groin"]) - if(I.flags_armor_protection & LEGS) + if(I.armor_protection_flags & LEGS) prot["legs"] = max(1 - I.permeability_coefficient, prot["legs"]) - if(I.flags_armor_protection & FEET) + if(I.armor_protection_flags & FEET) prot["feet"] = max(1 - I.permeability_coefficient, prot["feet"]) - if(I.flags_armor_protection & ARMS) + if(I.armor_protection_flags & ARMS) prot["arms"] = max(1 - I.permeability_coefficient, prot["arms"]) - if(I.flags_armor_protection & HEAD) + if(I.armor_protection_flags & HEAD) prot["head"] = max(1 - I.permeability_coefficient, prot["head"]) var/protection = (prot["head"] + prot["arms"] + prot["feet"] + prot["legs"] + prot["groin"] + prot["chest"] + prot["hands"])/7 return protection @@ -243,3 +243,9 @@ . = ..() if(species.name) . += species.name + +///wrapper for a signal to handle opening the squad selector ui just before drop +/mob/living/carbon/human/proc/suggest_squad_assign() + SIGNAL_HANDLER + UnregisterSignal(SSdcs, COMSIG_GLOB_DEPLOY_TIMELOCK_ENDED) + GLOB.squad_selector.interact(src) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 98dbc24280609..dce5172d6f026 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -8,40 +8,6 @@ var/obj/item/clothing/shoes/S = shoes S.step_action() - -/mob/living/carbon/human/proc/Process_Cloaking_Router(mob/living/carbon/human/user) - if(!user.cloaking) - return - if(istype(back, /obj/item/storage/backpack/marine/satchel/scout_cloak/scout) ) - Process_Cloaking_Scout(user) - else if(istype(back, /obj/item/storage/backpack/marine/satchel/scout_cloak/sniper) ) - Process_Cloaking_Sniper(user) - -/mob/living/carbon/human/proc/Process_Cloaking_Scout(mob/living/carbon/human/user) - var/obj/item/storage/backpack/marine/satchel/scout_cloak/scout/S = back - if(!S.camo_active) - return - if(S.camo_last_shimmer > world.time - SCOUT_CLOAK_STEALTH_DELAY) //Shimmer after taking aggressive actions - alpha = SCOUT_CLOAK_RUN_ALPHA //50% invisible - S.camo_adjust_energy(src, SCOUT_CLOAK_RUN_DRAIN) - else if(S.camo_last_stealth > world.time - SCOUT_CLOAK_STEALTH_DELAY) //We have an initial reprieve at max invisibility allowing us to reposition, albeit at a high drain rate - alpha = SCOUT_CLOAK_STILL_ALPHA //95% invisible - S.camo_adjust_energy(src, SCOUT_CLOAK_RUN_DRAIN) - //Walking stealth - else if(m_intent == MOVE_INTENT_WALK) - alpha = SCOUT_CLOAK_WALK_ALPHA //80% invisible - S.camo_adjust_energy(src, SCOUT_CLOAK_WALK_DRAIN) - //Running and post-attack stealth - else - alpha = SCOUT_CLOAK_RUN_ALPHA //50% invisible - S.camo_adjust_energy(src, SCOUT_CLOAK_RUN_DRAIN) - -/mob/living/carbon/human/proc/Process_Cloaking_Sniper(mob/living/carbon/human/user) - var/obj/item/storage/backpack/marine/satchel/scout_cloak/sniper/S = back - if(!S.camo_active) - return - alpha = initial(alpha) //Sniper variant has *no* mobility stealth, but no drain on movement either - /mob/living/carbon/human/Process_Spacemove() if(restrained()) return FALSE @@ -56,7 +22,7 @@ prob_slip = 0 // Changing this to zero to make it line up with the comment, and also, make more sense. //Do we have magboots or such on if so no slip - if(istype(shoes, /obj/item/clothing/shoes/magboots) && (shoes.flags_inventory & NOSLIPPING)) + if(istype(shoes, /obj/item/clothing/shoes/magboots) && (shoes.inventory_flags & NOSLIPPING)) prob_slip = 0 //Check hands and mod slip @@ -69,8 +35,7 @@ return(prob_slip) -/mob/living/carbon/human/Moved(atom/oldloc, direction) - Process_Cloaking_Router(src) +/mob/living/carbon/human/Moved(atom/old_loc, movement_dir, forced = FALSE, list/old_locs) // Moving around increases germ_level faster if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8)) germ_level++ diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index e6116db991e47..e6b4d5d404d5c 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -138,15 +138,15 @@ if(ITEM_UNEQUIP_UNEQUIPPED) return if(I == wear_suit) + wear_suit = null if(s_store) dropItemToGround(s_store) - wear_suit = null I.unequipped(src, SLOT_WEAR_SUIT) - if(I.flags_inv_hide & HIDESHOES) + if(I.inv_hide_flags & HIDESHOES) update_inv_shoes() - if(I.flags_inv_hide & (HIDEALLHAIR|HIDETOPHAIR|HIDELOWHAIR) ) + if(I.inv_hide_flags & (HIDEALLHAIR|HIDETOPHAIR|HIDELOWHAIR) ) update_hair() - if(I.flags_inv_hide & HIDEJUMPSUIT) + if(I.inv_hide_flags & HIDEJUMPSUIT) update_inv_w_uniform() update_inv_wear_suit() . = ITEM_UNEQUIP_UNEQUIPPED @@ -166,19 +166,19 @@ . = ITEM_UNEQUIP_UNEQUIPPED else if(I == head) var/updatename = 0 - if(head.flags_inv_hide & HIDEFACE) + if(head.inv_hide_flags & HIDEFACE) updatename = 1 head = null I.unequipped(src, SLOT_HEAD) if(updatename) name = get_visible_name() - if(I.flags_inv_hide & (HIDEALLHAIR|HIDETOPHAIR|HIDELOWHAIR|HIDE_EXCESS_HAIR)) + if(I.inv_hide_flags & (HIDEALLHAIR|HIDETOPHAIR|HIDELOWHAIR|HIDE_EXCESS_HAIR)) update_hair() //rebuild hair - if(I.flags_inv_hide & HIDEEARS) + if(I.inv_hide_flags & HIDEEARS) update_inv_ears() - if(I.flags_inv_hide & HIDEMASK) + if(I.inv_hide_flags & HIDEMASK) update_inv_wear_mask() - if(I.flags_inv_hide & HIDEEYES) + if(I.inv_hide_flags & HIDEEYES) update_inv_glasses() update_inv_head() . = ITEM_UNEQUIP_UNEQUIPPED @@ -236,11 +236,11 @@ /mob/living/carbon/human/wear_mask_update(obj/item/I, equipping) name = get_visible_name() // doing this without a check, still cheaper than doing it every Life() tick -spookydonut - if(I.flags_inv_hide & (HIDEALLHAIR|HIDETOPHAIR|HIDELOWHAIR)) + if(I.inv_hide_flags & (HIDEALLHAIR|HIDETOPHAIR|HIDELOWHAIR)) update_hair() //rebuild hair - if(I.flags_inv_hide & HIDEEARS) + if(I.inv_hide_flags & HIDEEARS) update_inv_ears() - if(I.flags_inv_hide & HIDEEYES) + if(I.inv_hide_flags & HIDEEYES) update_inv_glasses() return ..() @@ -326,15 +326,15 @@ update_inv_gloves() if(SLOT_HEAD) head = W - if(head.flags_inv_hide & HIDEFACE) + if(head.inv_hide_flags & HIDEFACE) name = get_visible_name() - if(head.flags_inv_hide & (HIDEALLHAIR|HIDETOPHAIR|HIDELOWHAIR|HIDE_EXCESS_HAIR)) + if(head.inv_hide_flags & (HIDEALLHAIR|HIDETOPHAIR|HIDELOWHAIR|HIDE_EXCESS_HAIR)) update_hair() //rebuild hair - if(head.flags_inv_hide & HIDEEARS) + if(head.inv_hide_flags & HIDEEARS) update_inv_ears() - if(head.flags_inv_hide & HIDEMASK) + if(head.inv_hide_flags & HIDEMASK) update_inv_wear_mask() - if(head.flags_inv_hide & HIDEEYES) + if(head.inv_hide_flags & HIDEEYES) update_inv_glasses() W.equipped(src, slot) update_inv_head() @@ -344,11 +344,11 @@ update_inv_shoes() if(SLOT_WEAR_SUIT) wear_suit = W - if(wear_suit.flags_inv_hide & HIDESHOES) + if(wear_suit.inv_hide_flags & HIDESHOES) update_inv_shoes() - if(wear_suit.flags_inv_hide & HIDEJUMPSUIT) + if(wear_suit.inv_hide_flags & HIDEJUMPSUIT) update_inv_w_uniform() - if( wear_suit.flags_inv_hide & (HIDEALLHAIR|HIDETOPHAIR|HIDELOWHAIR) ) + if( wear_suit.inv_hide_flags & (HIDEALLHAIR|HIDETOPHAIR|HIDELOWHAIR) ) update_hair() W.equipped(src, slot) update_inv_wear_suit() @@ -505,6 +505,10 @@ return s_store if(ITEM_SLOT_HANDCUFF) return handcuffed + if(ITEM_SLOT_L_HAND) + return l_hand + if(ITEM_SLOT_R_HAND) + return r_hand /mob/living/carbon/human/get_equipped_slot(obj/equipped_item) if(..()) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index d8c90a1d10992..aec21dbf65931 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -33,9 +33,10 @@ else //Dead dead_ticks ++ - var/mob/dead/observer/related_ghost = get_ghost() + var/mob/dead/observer/related_ghost = get_ghost(TRUE) + var/datum/limb/headcheck = get_limb("head") // boolean, determines if the body's ghost can reenter the body - var/ghost_left = !client && !related_ghost?.can_reenter_corpse + var/ghost_left = !mind && (!(!headcheck || (headcheck.limb_status & LIMB_DESTROYED)) || (!(species.species_flags & DETACHABLE_HEAD))) && !related_ghost?.can_reenter_corpse if(dead_ticks > TIME_BEFORE_DNR || ghost_left) set_undefibbable(ghost_left) else @@ -65,8 +66,8 @@ qdel(parasite) DISABLE_BITFIELD(status_flags, XENO_HOST) - if((SSticker.mode?.flags_round_type & MODE_TWO_HUMAN_FACTIONS) && job?.job_cost) - job.add_job_positions(1) + if((SSticker.mode?.round_type_flags & MODE_TWO_HUMAN_FACTIONS) && job?.job_cost) + job.free_job_positions(1) if(hud_list) med_hud_set_status() @@ -74,10 +75,13 @@ if(species.species_flags & NO_BREATHE) return - if(losebreath <= 10) - adjust_Losebreath(-1) //Since this happens before checking to take/heal oxyloss, a losebreath of 1 or less won't do anything. - else + if(pulledby?.grab_state >= GRAB_KILL) + Losebreath(1) + adjustOxyLoss(4) + else if(losebreath > 10) set_Losebreath(10) //Any single hit is functionally capped - to keep someone suffocating, you need continued losebreath applications. + else if(losebreath > 0) + adjust_Losebreath(-1) //Since this happens before checking to take/heal oxyloss, a losebreath of 1 or less won't do anything. if(health < get_crit_threshold() || losebreath) if(HAS_TRAIT(src, TRAIT_IGNORE_SUFFOCATION)) //Prevent losing health from asphyxiation, but natural recovery can still happen. diff --git a/code/modules/mob/living/carbon/human/life/handle_environment.dm b/code/modules/mob/living/carbon/human/life/handle_environment.dm index 18e84cc271094..f5bb141eb4b38 100644 --- a/code/modules/mob/living/carbon/human/life/handle_environment.dm +++ b/code/modules/mob/living/carbon/human/life/handle_environment.dm @@ -18,12 +18,12 @@ //Body temperature adjusts depending on surrounding atmosphere based on your thermal protection var/temp_adj = 0 if(loc_temp < bodytemperature) //Place is colder than we are - var/thermal_protection = get_flags_cold_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. + var/thermal_protection = get_cold_protection_flags(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. if(thermal_protection < 1) temp_adj = (1 - thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_COLD_DIVISOR) //This will be negative else if (loc_temp > bodytemperature) //Place is hotter than we are - var/thermal_protection = get_flags_heat_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. + var/thermal_protection = get_heat_protection_flags(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. if(thermal_protection < 1) temp_adj = (1 - thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR) diff --git a/code/modules/mob/living/carbon/human/life/handle_fire.dm b/code/modules/mob/living/carbon/human/life/handle_fire.dm index 4eeaa7bf5d865..e5c1d7c0b73c9 100644 --- a/code/modules/mob/living/carbon/human/life/handle_fire.dm +++ b/code/modules/mob/living/carbon/human/life/handle_fire.dm @@ -4,7 +4,7 @@ . = ..() if(.) return - var/thermal_protection = get_flags_heat_protection(30000) //If you don't have fire suit level protection, you get a temperature increase and burns + var/thermal_protection = get_heat_protection_flags(30000) //If you don't have fire suit level protection, you get a temperature increase and burns if((1 - thermal_protection) > 0.0001) adjust_bodytemperature(BODYTEMP_HEATING_MAX) apply_damage(10, BURN, blocked = FIRE) diff --git a/code/modules/mob/living/carbon/human/life/handle_organs.dm b/code/modules/mob/living/carbon/human/life/handle_organs.dm index e76851d836857..e69ebcb3e3f95 100644 --- a/code/modules/mob/living/carbon/human/life/handle_organs.dm +++ b/code/modules/mob/living/carbon/human/life/handle_organs.dm @@ -48,7 +48,7 @@ E.germ_level++ //Hard to stay upright - if(leg_tally > 0 && prob(2.5 * leg_tally)) + if(leg_tally > 0 && prob(2.5 * leg_tally) && !is_buckled()) if(!(species.species_flags & NO_PAIN)) emote("pain") visible_message(span_warning("[src] collapses to the ground!"), \ diff --git a/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm b/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm index 6fe5999cf8231..9a6ddd6fa1f6e 100644 --- a/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm +++ b/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm @@ -12,19 +12,6 @@ clear_fullscreen("brute") clear_fullscreen("oxy") clear_fullscreen("crit") - - if(!hud_used) - return - if(hud_used.nutrition_icon) - hud_used.nutrition_icon.icon_state = "nutrition1" - if(hud_used.toxin_icon) - hud_used.toxin_icon.icon_state = "tox0" - if(hud_used.oxygen_icon) - hud_used.oxygen_icon.icon_state = "oxy0" - if(hud_used.fire_icon) - hud_used.fire_icon.icon_state = "fire0" - if(hud_used.bodytemp_icon) - hud_used.bodytemp_icon.icon_state = "temp0" return if(stat == UNCONSCIOUS && health <= get_crit_threshold()) @@ -102,86 +89,17 @@ if(!hud_used) return - if(hud_used.nutrition_icon) - switch(nutrition) - if(NUTRITION_OVERFED to INFINITY) - hud_used.nutrition_icon.icon_state = "nutrition0" - if(NUTRITION_HUNGRY to NUTRITION_OVERFED) //Not-hungry. - hud_used.nutrition_icon.icon_state = "nutrition1" //Empty icon. - if(NUTRITION_STARVING to NUTRITION_HUNGRY) - hud_used.nutrition_icon.icon_state = "nutrition3" - else - hud_used.nutrition_icon.icon_state = "nutrition4" - - if(hud_used.pressure_icon) - hud_used.pressure_icon.icon_state = "pressure[pressure_alert]" - - if(hud_used.toxin_icon) - if(hal_screwyhud == 4) - hud_used.toxin_icon.icon_state = "tox1" - else - hud_used.toxin_icon.icon_state = "tox0" - if(hud_used.oxygen_icon) - if(hal_screwyhud == 3 || oxygen_alert) - hud_used.oxygen_icon.icon_state = "oxy1" - else - hud_used.oxygen_icon.icon_state = "oxy0" - if(hud_used.fire_icon) - if(fire_alert) - hud_used.fire_icon.icon_state = "fire[fire_alert]" //fire_alert is either 0 if no alert, 1 for cold and 2 for heat. - else - hud_used.fire_icon.icon_state = "fire0" - - if(hud_used.bodytemp_icon) - if(!species) - switch(bodytemperature) //310.055 optimal body temp - if(370 to INFINITY) - hud_used.bodytemp_icon.icon_state = "temp4" - if(350 to 370) - hud_used.bodytemp_icon.icon_state = "temp3" - if(335 to 350) - hud_used.bodytemp_icon.icon_state = "temp2" - if(320 to 335) - hud_used.bodytemp_icon.icon_state = "temp1" - if(300 to 320) - hud_used.bodytemp_icon.icon_state = "temp0" - if(295 to 300) - hud_used.bodytemp_icon.icon_state = "temp-1" - if(280 to 295) - hud_used.bodytemp_icon.icon_state = "temp-2" - if(260 to 280) - hud_used.bodytemp_icon.icon_state = "temp-3" - else - hud_used.bodytemp_icon.icon_state = "temp-4" - else - var/temp_step - if(bodytemperature >= species.body_temperature) - temp_step = (species.heat_level_1 - species.body_temperature) / 4 - - if(bodytemperature >= species.heat_level_1) - hud_used.bodytemp_icon.icon_state = "temp4" - else if(bodytemperature >= species.body_temperature + temp_step * 3) - hud_used.bodytemp_icon.icon_state = "temp3" - else if(bodytemperature >= species.body_temperature + temp_step * 2) - hud_used.bodytemp_icon.icon_state = "temp2" - else if(bodytemperature >= species.body_temperature + temp_step * 1) - hud_used.bodytemp_icon.icon_state = "temp1" - else - hud_used.bodytemp_icon.icon_state = "temp0" - - else if(bodytemperature < species.body_temperature) - temp_step = (species.body_temperature - species.cold_level_1)/4 - - if(bodytemperature <= species.cold_level_1) - hud_used.bodytemp_icon.icon_state = "temp-4" - else if(bodytemperature <= species.body_temperature - temp_step * 3) - hud_used.bodytemp_icon.icon_state = "temp-3" - else if(bodytemperature <= species.body_temperature - temp_step * 2) - hud_used.bodytemp_icon.icon_state = "temp-2" - else if(bodytemperature <= species.body_temperature - temp_step * 1) - hud_used.bodytemp_icon.icon_state = "temp-1" - else - hud_used.bodytemp_icon.icon_state = "temp0" + hud_used?.nutrition_icon?.update_icon() + + hud_used?.pressure_icon?.update_icon() + + hud_used?.toxin_icon?.update_icon() + + hud_used?.oxygen_icon?.update_icon() + + hud_used?.fire_icon?.update_icon() + + hud_used?.bodytemp_icon?.update_icon() /mob/living/carbon/human/handle_healths_hud_updates() diff --git a/code/modules/mob/living/carbon/human/life/life_helpers.dm b/code/modules/mob/living/carbon/human/life/life_helpers.dm index e67bd115cb2f0..e339c5c7d0a4c 100644 --- a/code/modules/mob/living/carbon/human/life/life_helpers.dm +++ b/code/modules/mob/living/carbon/human/life/life_helpers.dm @@ -13,7 +13,7 @@ var/pressure_adjustment_coefficient = 1 // Assume no protection at first. - if(wear_suit && (wear_suit.flags_inventory & NOPRESSUREDMAGE) && head && (head.flags_inventory & NOPRESSUREDMAGE)) //Complete set of pressure-proof suit worn, assume fully sealed. + if(wear_suit && (wear_suit.inventory_flags & NOPRESSUREDMAGE) && head && (head.inventory_flags & NOPRESSUREDMAGE)) //Complete set of pressure-proof suit worn, assume fully sealed. pressure_adjustment_coefficient = 0 pressure_adjustment_coefficient = min(1, max(pressure_adjustment_coefficient, 0)) //So it isn't less than 0 or larger than 1. @@ -70,35 +70,35 @@ //This proc returns a number made up of the flags for body parts which you are protected on. (such as HEAD, CHEST, GROIN, etc. See setup.dm for the full list) -/mob/living/carbon/human/proc/get_flags_heat_protection_flags(temperature) //Temperature is the temperature you're being exposed to. +/mob/living/carbon/human/proc/get_heat_protection_flags_flags(temperature) //Temperature is the temperature you're being exposed to. var/thermal_protection_flags = NONE //Handle normal clothing if(head) if(head.max_heat_protection_temperature && head.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= head.flags_heat_protection + thermal_protection_flags |= head.heat_protection_flags if(wear_suit) if(wear_suit.max_heat_protection_temperature && wear_suit.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= wear_suit.flags_heat_protection + thermal_protection_flags |= wear_suit.heat_protection_flags if(w_uniform) if(w_uniform.max_heat_protection_temperature && w_uniform.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= w_uniform.flags_heat_protection + thermal_protection_flags |= w_uniform.heat_protection_flags if(shoes) if(shoes.max_heat_protection_temperature && shoes.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= shoes.flags_heat_protection + thermal_protection_flags |= shoes.heat_protection_flags if(gloves) if(gloves.max_heat_protection_temperature && gloves.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= gloves.flags_heat_protection + thermal_protection_flags |= gloves.heat_protection_flags if(wear_mask) if(wear_mask.max_heat_protection_temperature && wear_mask.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= wear_mask.flags_heat_protection + thermal_protection_flags |= wear_mask.heat_protection_flags return thermal_protection_flags -/mob/living/carbon/human/proc/get_flags_heat_protection(temperature) //Temperature is the temperature you're being exposed to. - var/thermal_protection_flags = get_flags_heat_protection_flags(temperature) +/mob/living/carbon/human/proc/get_heat_protection_flags(temperature) //Temperature is the temperature you're being exposed to. + var/thermal_protection_flags = get_heat_protection_flags_flags(temperature) var/thermal_protection = 0 if(thermal_protection_flags) if(thermal_protection_flags & HEAD) @@ -128,42 +128,42 @@ -//See proc/get_flags_heat_protection_flags(temperature) for the description of this proc. -/mob/living/carbon/human/proc/get_flags_cold_protection_flags(temperature, deficit = 0) +//See proc/get_heat_protection_flags_flags(temperature) for the description of this proc. +/mob/living/carbon/human/proc/get_cold_protection_flags_flags(temperature, deficit = 0) var/thermal_protection_flags = NONE //Handle normal clothing if(head) if(head.min_cold_protection_temperature && head.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= head.flags_cold_protection + thermal_protection_flags |= head.cold_protection_flags if(wear_suit) if(wear_suit.min_cold_protection_temperature && wear_suit.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= wear_suit.flags_cold_protection + thermal_protection_flags |= wear_suit.cold_protection_flags if(w_uniform) if(w_uniform.min_cold_protection_temperature && w_uniform.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= w_uniform.flags_cold_protection + thermal_protection_flags |= w_uniform.cold_protection_flags if(shoes) if(shoes.min_cold_protection_temperature && shoes.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= shoes.flags_cold_protection + thermal_protection_flags |= shoes.cold_protection_flags if(gloves) if(gloves.min_cold_protection_temperature && gloves.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= gloves.flags_cold_protection + thermal_protection_flags |= gloves.cold_protection_flags if(wear_mask) if(wear_mask.min_cold_protection_temperature && wear_mask.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= wear_mask.flags_cold_protection + thermal_protection_flags |= wear_mask.cold_protection_flags return thermal_protection_flags -/mob/living/carbon/human/proc/get_flags_cold_protection(temperature) +/mob/living/carbon/human/proc/get_cold_protection_flags(temperature) temperature = max(temperature, 2.7) //There is an occasional bug where the temperature is miscalculated in ares with a small amount of gas on them, so this is necessary to ensure that that bug does not affect this calculation. Space's temperature is 2.7K and most suits that are intended to protect against any cold, protect down to 2.0K. - var/thermal_protection_flags = get_flags_cold_protection_flags(temperature) + var/thermal_protection_flags = get_cold_protection_flags_flags(temperature) var/thermal_protection = 0 if(thermal_protection_flags) diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index f655e631a0c75..37e4e13961bbb 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -8,24 +8,8 @@ /mob/living/carbon/human/GetVoice() - if(GetSpecialVoice()) - return GetSpecialVoice() return real_name - -/mob/living/carbon/human/proc/SetSpecialVoice(new_voice) - if(new_voice) - special_voice = new_voice - - -/mob/living/carbon/human/proc/UnsetSpecialVoice() - special_voice = "" - - -/mob/living/carbon/human/proc/GetSpecialVoice() - return special_voice - - /mob/living/carbon/human/binarycheck() if(wear_ear) var/obj/item/radio/headset/H = wear_ear diff --git a/code/modules/mob/living/carbon/human/species_types/combat_robots.dm b/code/modules/mob/living/carbon/human/species_types/combat_robots.dm new file mode 100644 index 0000000000000..5cbeae0d31083 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species_types/combat_robots.dm @@ -0,0 +1,121 @@ +/datum/species/robot + name = "Combat Robot" + species_type = SPECIES_COMBAT_ROBOT + icobase = 'icons/mob/human_races/r_robot.dmi' + damage_mask_icon = 'icons/mob/dam_mask_robot.dmi' + brute_damage_icon_state = "robot_brute" + burn_damage_icon_state = "robot_burn" + eyes = "blank_eyes" + hud_type = /datum/hud_data/robotic + default_language_holder = /datum/language_holder/robot + namepool = /datum/namepool/robotic + + unarmed_type = /datum/unarmed_attack/punch/strong + total_health = 100 + slowdown = SHOES_SLOWDOWN //because they don't wear boots + + cold_level_1 = -1 + cold_level_2 = -1 + cold_level_3 = -1 + + heat_level_1 = 500 + heat_level_2 = 1000 + heat_level_3 = 2000 + + body_temperature = 350 + + inherent_traits = list(TRAIT_NON_FLAMMABLE, TRAIT_IMMEDIATE_DEFIB) + species_flags = NO_BREATHE|NO_BLOOD|NO_POISON|NO_PAIN|NO_CHEM_METABOLIZATION|NO_STAMINA|DETACHABLE_HEAD|HAS_NO_HAIR|ROBOTIC_LIMBS|IS_INSULATED + + no_equip = list( + SLOT_W_UNIFORM, + SLOT_HEAD, + SLOT_WEAR_MASK, + SLOT_WEAR_SUIT, + SLOT_SHOES, + SLOT_GLOVES, + SLOT_GLASSES, + ) + blood_color = "#2d2055" //an oil-like color - a little note, robots cannot shed blood in any way, due to their flags + hair_color = "#00000000" + has_organ = list() + + + screams = list(MALE = "robot_scream", FEMALE = "robot_scream", PLURAL = "robot_scream", NEUTER = "robot_scream") + paincries = list(MALE = "robot_pain", FEMALE = "robot_pain", PLURAL = "robot_pain", NEUTER = "robot_pain") + goredcries = list(MALE = "robot_scream", FEMALE = "robot_scream", PLURAL = "robot_scream", NEUTER = "robot_scream") + warcries = list(MALE = "robot_warcry", FEMALE = "robot_warcry", PLURAL = "robot_warcry", NEUTER = "robot_warcry") + death_message = "shudders violently whilst spitting out error text before collapsing, their visual sensor darkening..." + special_death_message = "You have been shut down.
    But it is not the end of you yet... if you still have your body, wait until somebody can resurrect you..." + joinable_roundstart = TRUE + + inherent_actions = list(/datum/action/repair_self) + +/datum/species/robot/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) + . = ..() + H.speech_span = SPAN_ROBOT + H.voice_filter = "afftfilt=real='hypot(re,im)*sin(0)':imag='hypot(re,im)*cos(0)':win_size=512:overlap=1,rubberband=pitch=0.8" + H.health_threshold_crit = -100 + +/datum/species/robot/post_species_loss(mob/living/carbon/human/H) + . = ..() + H.speech_span = initial(H.speech_span) + H.voice_filter = initial(H.voice_filter) + H.health_threshold_crit = -50 + +/datum/species/robot/handle_unique_behavior(mob/living/carbon/human/H) + if(H.health <= 0 && H.health > -50) + H.clear_fullscreen("robotlow") + H.overlay_fullscreen("robothalf", /atom/movable/screen/fullscreen/machine/robothalf) + else if(H.health <= -50) + H.clear_fullscreen("robothalf") + H.overlay_fullscreen("robotlow", /atom/movable/screen/fullscreen/machine/robotlow) + else + H.clear_fullscreen("robothalf") + H.clear_fullscreen("robotlow") + if(H.health > -25) //Staggerslowed if below crit threshold + return + H.Stagger(2 SECONDS) + H.adjust_slowdown(1) + +///Lets a robot repair itself over time at the cost of being stunned and blind +/datum/action/repair_self + name = "Activate autorepair" + action_icon_state = "suit_configure" + keybinding_signals = list( + KEYBINDING_NORMAL = COMSIG_KB_ROBOT_AUTOREPAIR, + ) + +/datum/action/repair_self/can_use_action() + . = ..() + if(!.) + return + return !owner.incapacitated() + +/datum/action/repair_self/action_activate() + . = ..() + if(!. || !ishuman(owner)) + return + var/mob/living/carbon/human/howner = owner + howner.apply_status_effect(STATUS_EFFECT_REPAIR_MODE, 10 SECONDS) + howner.balloon_alert_to_viewers("Repairing") + +/datum/species/robot/alpharii + name = "Hammerhead Combat Robot" + icobase = 'icons/mob/human_races/r_robot_alpharii.dmi' + joinable_roundstart = FALSE + +/datum/species/robot/charlit + name = "Chilvaris Combat Robot" + icobase = 'icons/mob/human_races/r_robot_charlit.dmi' + joinable_roundstart = FALSE + +/datum/species/robot/deltad + name = "Ratcher Combat Robot" + icobase = 'icons/mob/human_races/r_robot_deltad.dmi' + joinable_roundstart = FALSE + +/datum/species/robot/bravada + name = "Sterling Combat Robot" + icobase = 'icons/mob/human_races/r_robot_bravada.dmi' + joinable_roundstart = FALSE diff --git a/code/modules/mob/living/carbon/human/species_types/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm new file mode 100644 index 0000000000000..730774a6a18ed --- /dev/null +++ b/code/modules/mob/living/carbon/human/species_types/humans.dm @@ -0,0 +1,22 @@ +/datum/species/human + name = "Human" + unarmed_type = /datum/unarmed_attack/punch + species_flags = HAS_SKIN_TONE|HAS_LIPS|HAS_UNDERWEAR + count_human = TRUE + + screams = list(MALE = "male_scream", FEMALE = "female_scream") + paincries = list(MALE = "male_pain", FEMALE = "female_pain") + goredcries = list(MALE = "male_gored", FEMALE = "female_gored") + gasps = list(MALE = "male_gasp", FEMALE = "female_gasp") + coughs = list(MALE = "male_cough", FEMALE = "female_cough") + burstscreams = list(MALE = "male_preburst", FEMALE = "female_preburst") + warcries = list(MALE = "male_warcry", FEMALE = "female_warcry") + special_death_message = "You have perished.
    But it is not the end of you yet... if you still have your body with your head still attached, wait until somebody can resurrect you..." + joinable_roundstart = TRUE + +/datum/species/human/prefs_name(datum/preferences/prefs) + . = ..() + if(CONFIG_GET(flag/humans_need_surnames)) + var/firstspace = findtext(., " ") + if(!firstspace || firstspace == length(.)) + . += " " + pick(SSstrings.get_list_from_file("names/last_name")) diff --git a/code/modules/mob/living/carbon/human/species_types/monkeys.dm b/code/modules/mob/living/carbon/human/species_types/monkeys.dm new file mode 100644 index 0000000000000..8895dfba2dfeb --- /dev/null +++ b/code/modules/mob/living/carbon/human/species_types/monkeys.dm @@ -0,0 +1,63 @@ +/datum/species/monkey + name = "Monkey" + icobase = 'icons/mob/human_races/r_monkey.dmi' + species_flags = HAS_NO_HAIR|NO_STAMINA|DETACHABLE_HEAD + inherent_traits = list(TRAIT_CAN_VENTCRAWL) + reagent_tag = IS_MONKEY + eyes = "blank_eyes" + unarmed_type = /datum/unarmed_attack/bite/strong + secondary_unarmed_type = /datum/unarmed_attack/punch/strong + joinable_roundstart = FALSE + death_message = "lets out a faint chimper as it collapses and stops moving..." + dusted_anim = "dust-m" + gibbed_anim = "gibbed-m" + +/datum/species/monkey/handle_unique_behavior(mob/living/carbon/human/H) + if(!H.client && H.stat == CONSCIOUS) + if(prob(33) && H.canmove && !H.buckled && isturf(H.loc) && !H.pulledby) //won't move if being pulled + step(H, pick(GLOB.cardinals)) + + if(prob(1)) + H.emote(pick("scratch","jump","roll","tail")) + +/datum/species/monkey/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) + . = ..() + H.allow_pass_flags |= PASS_LOW_STRUCTURE + +/datum/species/monkey/spec_unarmedattack(mob/living/carbon/human/user, atom/target) + if(!iscarbon(target)) + return FALSE + var/mob/living/carbon/victim = target + if(prob(25)) + victim.visible_message(span_danger("[user]'s bite misses [victim]!"), + span_danger("You avoid [user]'s bite!"), span_hear("You hear jaws snapping shut!")) + to_chat(user, span_danger("Your bite misses [victim]!")) + return TRUE + victim.apply_damage(rand(10, 20), BRUTE, "chest", updating_health = TRUE) + victim.visible_message(span_danger("[name] bites [victim]!"), + span_userdanger("[name] bites you!"), span_hear("You hear a chomp!")) + to_chat(user, span_danger("You bite [victim]!")) + target.attack_hand(user) + return TRUE + +/datum/species/monkey/random_name(gender,unique,lastname) + return "[lowertext(name)] ([rand(1,999)])" + +/datum/species/monkey/farwa + name = "Farwa" + icobase = 'icons/mob/human_races/r_farwa.dmi' + +/datum/species/monkey/naera + name = "Naera" + icobase = 'icons/mob/human_races/r_naera.dmi' + +/datum/species/monkey/stok + name = "Stok" + icobase = 'icons/mob/human_races/r_stok.dmi' + +/datum/species/monkey/yiren + name = "Yiren" + icobase = 'icons/mob/human_races/r_yiren.dmi' + cold_level_1 = ICE_COLONY_TEMPERATURE - 20 + cold_level_2 = ICE_COLONY_TEMPERATURE - 40 + cold_level_3 = ICE_COLONY_TEMPERATURE - 80 diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm new file mode 100644 index 0000000000000..528e2dac53cbc --- /dev/null +++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm @@ -0,0 +1,53 @@ +/datum/species/moth + name = "Moth" + icobase = 'icons/mob/human_races/r_moth.dmi' + default_language_holder = /datum/language_holder/moth + eyes = "blank_eyes" + count_human = TRUE + species_flags = HAS_LIPS|HAS_NO_HAIR + screams = list("neuter" = 'sound/voice/moth_scream.ogg') + paincries = list("neuter" = 'sound/voice/human_male_pain_3.ogg') + goredcries = list("neuter" = 'sound/voice/moth_scream.ogg') + burstscreams = list("neuter" = 'sound/voice/moth_scream.ogg') + warcries = list("neuter" = 'sound/voice/moth_scream.ogg') + + flesh_color = "#E5CD99" + + reagent_tag = IS_MOTH + + namepool = /datum/namepool/moth + +/datum/species/moth/handle_fire(mob/living/carbon/human/H) + if(H.moth_wings != "Burnt Off" && H.bodytemperature >= 400 && H.fire_stacks > 0) + to_chat(H, span_danger("Your precious wings burn to a crisp!")) + H.moth_wings = "Burnt Off" + H.update_body() + +/datum/species/moth/proc/update_moth_wings(mob/living/carbon/human/H) + H.remove_overlay(MOTH_WINGS_LAYER) + H.remove_underlay(MOTH_WINGS_BEHIND_LAYER) + + var/datum/sprite_accessory/moth_wings/wings = GLOB.moth_wings_list[H.moth_wings] + + if(wings) + H.overlays_standing[MOTH_WINGS_LAYER] = image(wings.icon, icon_state = "m_moth_wings_[wings.icon_state]_FRONT") + H.underlays_standing[MOTH_WINGS_BEHIND_LAYER] = image(wings.icon, icon_state = "m_moth_wings_[wings.icon_state]_BEHIND") + H.apply_overlay(MOTH_WINGS_LAYER) + H.apply_underlay(MOTH_WINGS_BEHIND_LAYER) + +/datum/species/moth/update_body(mob/living/carbon/human/H) + update_moth_wings(H) + +/datum/species/moth/update_inv_head(mob/living/carbon/human/H) + update_moth_wings(H) + +/datum/species/moth/update_inv_w_uniform(mob/living/carbon/human/H) + update_moth_wings(H) + +/datum/species/moth/update_inv_wear_suit(mob/living/carbon/human/H) + update_moth_wings(H) + +/datum/species/moth/post_species_loss(mob/living/carbon/human/H) + . = ..() + H.remove_overlay(MOTH_WINGS_LAYER) + H.remove_underlay(MOTH_WINGS_BEHIND_LAYER) diff --git a/code/modules/mob/living/carbon/human/species_types/sectoids.dm b/code/modules/mob/living/carbon/human/species_types/sectoids.dm new file mode 100644 index 0000000000000..926693eb8924d --- /dev/null +++ b/code/modules/mob/living/carbon/human/species_types/sectoids.dm @@ -0,0 +1,20 @@ +/datum/species/sectoid + name = "Sectoid" + icobase = 'icons/mob/human_races/r_sectoid.dmi' + default_language_holder = /datum/language_holder/sectoid + eyes = "blank_eyes" + count_human = TRUE + total_health = 80 + + species_flags = HAS_NO_HAIR|NO_BREATHE|NO_POISON|NO_PAIN|USES_ALIEN_WEAPONS|NO_DAMAGE_OVERLAY + + paincries = list("neuter" = 'sound/voice/sectoid_death.ogg') + death_sound = 'sound/voice/sectoid_death.ogg' + + blood_color = "#00FF00" + flesh_color = "#C0C0C0" + + reagent_tag = IS_SECTOID + + namepool = /datum/namepool/sectoid + special_death_message = "You have perished." diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm new file mode 100644 index 0000000000000..d9473f4c7dc3d --- /dev/null +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -0,0 +1,16 @@ +/datum/species/skeleton + name = "Skeleton" + icobase = 'icons/mob/human_races/r_skeleton.dmi' + unarmed_type = /datum/unarmed_attack/punch + count_human = TRUE + + species_flags = NO_BREATHE|NO_SCAN|NO_BLOOD|NO_POISON|NO_CHEM_METABOLIZATION|DETACHABLE_HEAD // Where we're going, we don't NEED underwear + + screams = list("neuter" = 'sound/voice/skeleton_scream.ogg') // RATTLE ME BONES + paincries = list("neuter" = 'sound/voice/skeleton_scream.ogg') + goredcries = list("neuter" = 'sound/voice/skeleton_scream.ogg') + burstscreams = list("neuter" = 'sound/voice/moth_scream.ogg') + death_message = "collapses in a pile of bones, with a final rattle..." + death_sound = list("neuter" = 'sound/voice/skeleton_scream.ogg') + warcries = list("neuter" = 'sound/voice/skeleton_warcry.ogg') // AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + namepool = /datum/namepool/skeleton diff --git a/code/modules/mob/living/carbon/human/species_types/synthetics.dm b/code/modules/mob/living/carbon/human/species_types/synthetics.dm new file mode 100644 index 0000000000000..159c996e4eb84 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species_types/synthetics.dm @@ -0,0 +1,143 @@ +/datum/species/synthetic + name = "Synthetic" + hud_type = /datum/hud_data/robotic + default_language_holder = /datum/language_holder/synthetic + unarmed_type = /datum/unarmed_attack/punch + + total_health = 125 //more health than regular humans + + brute_mod = 0.7 + burn_mod = 0.8 // A slight amount of burn resistance. Changed from 0.7 due to their critical condition phase + + cold_level_1 = -1 + cold_level_2 = -1 + cold_level_3 = -1 + + heat_level_1 = 500 + heat_level_2 = 1000 + heat_level_3 = 2000 + + body_temperature = 350 + + species_flags = NO_BREATHE|NO_SCAN|NO_BLOOD|NO_POISON|NO_PAIN|IS_SYNTHETIC|NO_CHEM_METABOLIZATION|NO_STAMINA|DETACHABLE_HEAD|HAS_LIPS|HAS_UNDERWEAR|HAS_SKIN_COLOR|ROBOTIC_LIMBS|GREYSCALE_BLOOD + + blood_color = "#EEEEEE" + + has_organ = list() + + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + see_in_dark = 8 + + screams = list(MALE = "male_scream", FEMALE = "female_scream") + paincries = list(MALE = "male_pain", FEMALE = "female_pain") + goredcries = list(MALE = "male_gored", FEMALE = "female_gored") + warcries = list(MALE = "male_warcry", FEMALE = "female_warcry") + special_death_message = "You have been shut down.
    But it is not the end of you yet... if you still have your body, wait until somebody can resurrect you..." + +/datum/species/synthetic/handle_unique_behavior(mob/living/carbon/human/H) + if(H.health <= -30 && H.stat != DEAD) // Instead of having a critical condition, they overheat and slowly die. + H.apply_effect(4 SECONDS, STUTTER) // Added flavor + H.adjustFireLoss(rand(5, 16)) // Melting!!! + if(prob(12)) + H.visible_message(span_boldwarning("[H] shudders violently and shoots out sparks!"), span_warning("Critical damage sustained. Internal temperature regulation systems offline. Shutdown imminent. Estimated integrity: [round(H.health)]%.")) + do_sparks(4, TRUE, H) + +/datum/species/synthetic/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) + . = ..() + var/datum/atom_hud/AH = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED_SYNTH] + AH.add_hud_to(H) + H.health_threshold_crit = -100 // You overheat below -30 health + + +/datum/species/synthetic/post_species_loss(mob/living/carbon/human/H) + . = ..() + var/datum/atom_hud/AH = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED_SYNTH] + AH.remove_hud_from(H) + H.health_threshold_crit = -50 + +/mob/living/carbon/human/species/synthetic/binarycheck(mob/H) + return TRUE + +/datum/species/synthetic/prefs_name(datum/preferences/prefs) + . = prefs.synthetic_name + if(!. || . == "Undefined") //In case they don't have a name set + switch(prefs.gender) + if(MALE) + . = "David" + if(FEMALE) + . = "Anna" + else + . = "Jeri" + to_chat(prefs.parent, span_warning("You forgot to set your synthetic name in your preferences. Please do so next time.")) + +/datum/species/early_synthetic // Worse at medical, better at engineering. Tougher in general than later synthetics + name = "Early Synthetic" + icobase = 'icons/mob/human_races/r_synthetic.dmi' + hud_type = /datum/hud_data/robotic + default_language_holder = /datum/language_holder/synthetic + unarmed_type = /datum/unarmed_attack/punch + slowdown = 1.15 //Slower than Late Synths + total_health = 200 //Tough boys, very tough boys + brute_mod = 0.6 + burn_mod = 0.6 + + cold_level_1 = -1 + cold_level_2 = -1 + cold_level_3 = -1 + + heat_level_1 = 500 + heat_level_2 = 1000 + heat_level_3 = 2000 + + body_temperature = 350 + + species_flags = NO_BREATHE|NO_SCAN|NO_BLOOD|NO_POISON|NO_PAIN|IS_SYNTHETIC|NO_CHEM_METABOLIZATION|NO_STAMINA|DETACHABLE_HEAD|HAS_UNDERWEAR|ROBOTIC_LIMBS|GREYSCALE_BLOOD + + blood_color = "#EEEEEE" + hair_color = "#000000" + has_organ = list() + + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + see_in_dark = 8 + + screams = list(MALE = "male_scream", FEMALE = "female_scream") + paincries = list(MALE = "male_pain", FEMALE = "female_pain") + goredcries = list(MALE = "male_gored", FEMALE = "female_gored") + warcries = list(MALE = "male_warcry", FEMALE = "female_warcry") + special_death_message = "You have been shut down.
    But it is not the end of you yet... if you still have your body, wait until somebody can resurrect you..." + +/datum/species/early_synthetic/handle_unique_behavior(mob/living/carbon/human/H) + if(H.health <= -30 && H.stat != DEAD) // Instead of having a critical condition, they overheat and slowly die. + H.apply_effect(4 SECONDS, STUTTER) // Added flavor + H.adjustFireLoss(rand(7, 19)) // Melting even more!!! + if(prob(12)) + H.visible_message(span_boldwarning("[H] shudders violently and shoots out sparks!"), span_warning("Critical damage sustained. Internal temperature regulation systems offline. Shutdown imminent. Estimated integrity: [round(H.health)]%.")) + do_sparks(4, TRUE, H) + +/datum/species/early_synthetic/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) + . = ..() + var/datum/atom_hud/AH = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED_SYNTH] + AH.add_hud_to(H) + H.health_threshold_crit = -100 // You overheat below -30 health + + +/datum/species/early_synthetic/post_species_loss(mob/living/carbon/human/H) + . = ..() + var/datum/atom_hud/AH = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED_SYNTH] + AH.remove_hud_from(H) + H.health_threshold_crit = -50 + +/mob/living/carbon/human/species/early_synthetic/binarycheck(mob/H) + return TRUE + +/datum/species/early_synthetic/prefs_name(datum/preferences/prefs) + . = prefs.synthetic_name + if(!. || . == "Undefined") //In case they don't have a name set + switch(prefs.gender) + if(MALE) + . = "David" + if(FEMALE) + . = "Anna" + else + . = "Jeri" + to_chat(prefs.parent, span_warning("You forgot to set your synthetic name in your preferences. Please do so next time.")) diff --git a/code/modules/mob/living/carbon/human/species_types/vatborns.dm b/code/modules/mob/living/carbon/human/species_types/vatborns.dm new file mode 100644 index 0000000000000..3997b3e1caf6e --- /dev/null +++ b/code/modules/mob/living/carbon/human/species_types/vatborns.dm @@ -0,0 +1,49 @@ +/datum/species/human/vatborn + name = "Vatborn" + icobase = 'icons/mob/human_races/r_vatborn.dmi' + namepool = /datum/namepool/vatborn + +/datum/species/human/vatborn/prefs_name(datum/preferences/prefs) + return prefs.real_name + +/datum/species/human/vatgrown + name = "Vat-Grown Human" + icobase = 'icons/mob/human_races/r_vatgrown.dmi' + brute_mod = 1.05 + burn_mod = 1.05 + slowdown = 0.05 + joinable_roundstart = FALSE + +/datum/species/human/vatgrown/random_name(gender) + return "CS-[gender == FEMALE ? "F": "M"]-[rand(111,999)]" + +/datum/species/human/vatgrown/prefs_name(datum/preferences/prefs) + return prefs.real_name + +/datum/species/human/vatgrown/handle_post_spawn(mob/living/carbon/human/H) + . = ..() + H.h_style = "Bald" + H.set_skills(getSkillsType(/datum/skills/vatgrown)) + +/datum/species/human/vatgrown/early + name = "Early Vat-Grown Human" + brute_mod = 1.3 + burn_mod = 1.3 + slowdown = 0.3 + + var/timerid + +/datum/species/human/vatgrown/early/handle_post_spawn(mob/living/carbon/human/H) + . = ..() + H.set_skills(getSkillsType(/datum/skills/vatgrown/early)) + timerid = addtimer(CALLBACK(src, PROC_REF(handle_age), H), 15 MINUTES, TIMER_STOPPABLE) + +/datum/species/human/vatgrown/early/post_species_loss(mob/living/carbon/human/H) + . = ..() + // Ensure we don't update the species again + if(timerid) + deltimer(timerid) + timerid = null + +/datum/species/human/vatgrown/early/proc/handle_age(mob/living/carbon/human/H) + H.set_species("Vat-Grown Human") diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm new file mode 100644 index 0000000000000..11076f6335e97 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -0,0 +1,142 @@ +/datum/species/zombie + name = "Zombie" + icobase = 'icons/mob/human_races/r_husk.dmi' + total_health = 125 + species_flags = NO_BREATHE|NO_SCAN|NO_BLOOD|NO_POISON|NO_PAIN|NO_CHEM_METABOLIZATION|NO_STAMINA|HAS_UNDERWEAR|HEALTH_HUD_ALWAYS_DEAD|PARALYSE_RESISTANT + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + see_in_dark = 8 + blood_color = "#110a0a" + hair_color = "#000000" + slowdown = 0.5 + default_language_holder = /datum/language_holder/zombie + has_organ = list( + "heart" = /datum/internal_organ/heart, + "lungs" = /datum/internal_organ/lungs, + "liver" = /datum/internal_organ/liver, + "kidneys" = /datum/internal_organ/kidneys, + "brain" = /datum/internal_organ/brain/zombie, + "appendix" = /datum/internal_organ/appendix, + "eyes" = /datum/internal_organ/eyes + ) + ///Sounds made randomly by the zombie + var/list/sounds = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg') + ///Time before resurrecting if dead + var/revive_time = 1 MINUTES + ///How much burn and burn damage can you heal every Life tick (half a sec) + var/heal_rate = 10 + var/faction = FACTION_ZOMBIE + var/claw_type = /obj/item/weapon/zombie_claw + +/datum/species/zombie/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) + . = ..() + H.set_undefibbable() + H.faction = faction + H.language_holder = new default_language_holder() + H.setOxyLoss(0) + H.setToxLoss(0) + H.setCloneLoss(0) + H.dropItemToGround(H.r_hand, TRUE) + H.dropItemToGround(H.l_hand, TRUE) + if(istype(H.wear_id, /obj/item/card/id)) + var/obj/item/card/id/id = H.wear_id + id.access = list() // A bit gamey, but let's say ids have a security against zombies + id.iff_signal = NONE + H.equip_to_slot_or_del(new claw_type, SLOT_R_HAND) + H.equip_to_slot_or_del(new claw_type, SLOT_L_HAND) + var/datum/atom_hud/health_hud = GLOB.huds[DATA_HUD_MEDICAL_OBSERVER] + health_hud.add_hud_to(H) + H.job = new /datum/job/zombie //Prevent from skewing the respawn timer if you take a zombie, it's a ghost role after all + for(var/datum/action/action AS in H.actions) + action.remove_action(H) + var/datum/action/rally_zombie/rally_zombie = new + rally_zombie.give_action(H) + var/datum/action/set_agressivity/set_zombie_behaviour = new + set_zombie_behaviour.give_action(H) + +/datum/species/zombie/post_species_loss(mob/living/carbon/human/H) + . = ..() + var/datum/atom_hud/health_hud = GLOB.huds[DATA_HUD_MEDICAL_OBSERVER] + health_hud.remove_hud_from(H) + qdel(H.r_hand) + qdel(H.l_hand) + for(var/datum/action/action AS in H.actions) + action.remove_action(H) + +/datum/species/zombie/handle_unique_behavior(mob/living/carbon/human/H) + if(prob(10)) + playsound(get_turf(H), pick(sounds), 50) + for(var/datum/limb/limb AS in H.limbs) //Regrow some limbs + if(limb.limb_status & LIMB_DESTROYED && !(limb.parent?.limb_status & LIMB_DESTROYED) && prob(10)) + limb.remove_limb_flags(LIMB_DESTROYED) + if(istype(limb, /datum/limb/hand/l_hand)) + H.equip_to_slot_or_del(new /obj/item/weapon/zombie_claw, SLOT_L_HAND) + else if (istype(limb, /datum/limb/hand/r_hand)) + H.equip_to_slot_or_del(new /obj/item/weapon/zombie_claw, SLOT_R_HAND) + H.update_body() + else if(limb.limb_status & LIMB_BROKEN && prob(20)) + limb.remove_limb_flags(LIMB_BROKEN | LIMB_SPLINTED | LIMB_STABILIZED) + + if(H.health != total_health) + H.heal_limbs(heal_rate) + + for(var/organ_slot in has_organ) + var/datum/internal_organ/internal_organ = H.internal_organs_by_name[organ_slot] + internal_organ?.heal_organ_damage(1) + H.updatehealth() + +/datum/species/zombie/handle_death(mob/living/carbon/human/H) + SSmobs.stop_processing(H) + if(!H.on_fire && H.has_working_organs()) + addtimer(CALLBACK(H, TYPE_PROC_REF(/mob/living/carbon/human, revive_to_crit), TRUE, FALSE), revive_time) + +/datum/species/zombie/create_organs(mob/living/carbon/human/organless_human) + . = ..() + for(var/datum/limb/limb AS in organless_human.limbs) + if(!istype(limb, /datum/limb/head)) + continue + limb.vital = FALSE + return + +/datum/species/zombie/fast + name = "Fast zombie" + slowdown = 0 + +/datum/species/zombie/fast/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) + . = ..() + H.transform = matrix().Scale(0.8, 0.8) + +/datum/species/zombie/fast/post_species_loss(mob/living/carbon/human/H) + . = ..() + H.transform = matrix().Scale(1/(0.8), 1/(0.8)) + +/datum/species/zombie/tank + name = "Tank zombie" + slowdown = 1 + heal_rate = 20 + total_health = 250 + +/datum/species/zombie/tank/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) + . = ..() + H.transform = matrix().Scale(1.2, 1.2) + +/datum/species/zombie/tank/post_species_loss(mob/living/carbon/human/H) + . = ..() + H.transform = matrix().Scale(1/(1.2), 1/(1.2)) + +/datum/species/zombie/strong + name = "Strong zombie" //These are zombies created from marines, they are stronger, but of course rarer + slowdown = -0.5 + heal_rate = 20 + total_health = 200 + +/datum/species/zombie/strong/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) + . = ..() + H.color = COLOR_MAROON + +/datum/species/zombie/psi_zombie + name = "Psi zombie" //reanimated by psionic ability + slowdown = -0.5 + heal_rate = 20 + total_health = 200 + faction = FACTION_SECTOIDS + claw_type = /obj/item/weapon/zombie_claw/no_zombium diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 32546524cb0fa..71607841b6dc0 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -52,7 +52,6 @@ There are several things that need to be remembered: update_body() //Handles updating your mob's icon to reflect their gender/race/complexion etc update_hair() //Handles updating your hair overlay (used to be update_face, but mouth and ...eyes were merged into update_body) - update_targeted() // Updates the target overlay when someone points a gun at you > If you need to update all overlays you can use regenerate_icons(). it works exactly like update_clothing used to. @@ -63,7 +62,6 @@ There are several things that need to be remembered: /mob/living/carbon/human - var/list/overlays_standing[TOTAL_LAYERS] var/list/underlays_standing[TOTAL_UNDERLAYS] var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed @@ -285,8 +283,8 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) stand_icon.Blend(eyes, ICON_OVERLAY) //Mouth (lipstick!) - if(lip_style && (species?.species_flags & HAS_LIPS)) //skeletons are allowed to wear lipstick no matter what you think, agouri. - stand_icon.Blend(new/icon('icons/mob/human_face.dmi', "camo_[lip_style]_s"), ICON_OVERLAY) + if(makeup_style && (species?.species_flags & HAS_LIPS)) //skeletons are allowed to wear lipstick no matter what you think, agouri. + stand_icon.Blend(new/icon('icons/mob/human_face.dmi', "camo_[makeup_style]_s"), ICON_OVERLAY) if(species.species_flags & HAS_UNDERWEAR) @@ -310,13 +308,13 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) return //masks and helmets can obscure our hair. - if((head?.flags_inv_hide & HIDEALLHAIR) || (wear_mask?.flags_inv_hide & HIDEALLHAIR)) + if((head?.inv_hide_flags & HIDEALLHAIR) || (wear_mask?.inv_hide_flags & HIDEALLHAIR)) return //base icons var/icon/face_standing = new /icon('icons/mob/human_face.dmi',"bald_s") - if(f_style && !(wear_suit?.flags_inv_hide & HIDELOWHAIR) && !(wear_mask?.flags_inv_hide & HIDELOWHAIR)) + if(f_style && !(wear_suit?.inv_hide_flags & HIDELOWHAIR) && !(wear_mask?.inv_hide_flags & HIDELOWHAIR)) var/datum/sprite_accessory/facial_hair_style = GLOB.facial_hair_styles_list[f_style] if(facial_hair_style?.species_allowed && (species.name 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") @@ -328,7 +326,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) face_standing.Blend(facial_s, ICON_OVERLAY) - if(h_style && !(head?.flags_inv_hide & HIDETOPHAIR)) + if(h_style && !(head?.inv_hide_flags & HIDETOPHAIR)) var/datum/sprite_accessory/hair_style = GLOB.hair_styles_list[h_style] if(hair_style && (species.name in hair_style.species_allowed)) var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") @@ -347,7 +345,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) var/mutable_appearance/hair_final = mutable_appearance(face_standing, layer =-HAIR_LAYER) - if(head?.flags_inv_hide & HIDE_EXCESS_HAIR) + if(head?.inv_hide_flags & HIDE_EXCESS_HAIR) var/image/mask = image('icons/mob/human_face.dmi', null, "Jeager_Mask") mask.render_target = "*[REF(src)]" hair_final.overlays += mask @@ -356,20 +354,6 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) overlays_standing[HAIR_LAYER] = hair_final apply_overlay(HAIR_LAYER) -//Call when target overlay should be added/removed -/mob/living/carbon/human/update_targeted() - remove_overlay(TARGETED_LAYER) - var/image/I - if(holo_card_color) - if(I) - I.overlays += image("icon" = 'icons/effects/Targeted.dmi', "icon_state" = "holo_card_[holo_card_color]") - else - I = image("icon" = 'icons/effects/Targeted.dmi', "icon_state" = "holo_card_[holo_card_color]", "layer" =-TARGETED_LAYER) - if(I) - overlays_standing[TARGETED_LAYER] = I - apply_overlay(TARGETED_LAYER) - - /* --------------------------------------- */ //For legacy support. /mob/living/carbon/human/regenerate_icons() @@ -408,7 +392,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) w_uniform.screen_loc = ui_iclothing client.screen += w_uniform - if(wear_suit?.flags_inv_hide & HIDEJUMPSUIT) + if(wear_suit?.inv_hide_flags & HIDEJUMPSUIT) return overlays_standing[UNIFORM_LAYER] = w_uniform.make_worn_icon(species_type = species.name, slot_name = slot_w_uniform_str, default_icon = 'icons/mob/clothing/uniforms/uniform_0.dmi', default_layer = UNIFORM_LAYER) @@ -484,7 +468,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) if(client && hud_used?.hud_shown && hud_used.inventory_shown) wear_ear.screen_loc = ui_wear_ear client.screen += wear_ear - if((head?.flags_inv_hide & HIDEEARS) || (wear_mask?.flags_inv_hide & HIDEEARS)) + if((head?.inv_hide_flags & HIDEEARS) || (wear_mask?.inv_hide_flags & HIDEEARS)) return overlays_standing[EARS_LAYER] = wear_ear.make_worn_icon(species_type = species.name, slot_name = slot_ear_str, default_icon = 'icons/mob/clothing/ears.dmi', default_layer = EARS_LAYER) @@ -496,7 +480,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) if(client && hud_used?.hud_shown && hud_used.inventory_shown) shoes.screen_loc = ui_shoes client.screen += shoes - if(wear_suit?.flags_inv_hide & HIDESHOES) + if(wear_suit?.inv_hide_flags & HIDESHOES) return if(shoes) @@ -580,7 +564,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) if(!wear_mask) return - if(head?.flags_inv_hide & HIDEMASK) + if(head?.inv_hide_flags & HIDEMASK) return if(client && hud_used?.hud_shown && hud_used.inventory_shown) @@ -621,7 +605,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) client.screen += r_hand r_hand.screen_loc = ui_rhand - overlays_standing[R_HAND_LAYER] = r_hand.make_worn_icon(species_type = species.name, inhands = TRUE, slot_name = slot_r_hand_str, default_icon = 'icons/mob/items_righthand_1.dmi', default_layer = R_HAND_LAYER) + overlays_standing[R_HAND_LAYER] = r_hand.make_worn_icon(species_type = species.name, inhands = TRUE, slot_name = slot_r_hand_str, default_icon = 'icons/mob/inhands/items/items_right.dmi', default_layer = R_HAND_LAYER) apply_overlay(R_HAND_LAYER) @@ -635,7 +619,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) client.screen += l_hand l_hand.screen_loc = ui_lhand - overlays_standing[L_HAND_LAYER] = l_hand.make_worn_icon(species_type = species.name, inhands = TRUE, slot_name = slot_l_hand_str, default_icon = 'icons/mob/items_lefthand_1.dmi', default_layer = L_HAND_LAYER) + overlays_standing[L_HAND_LAYER] = l_hand.make_worn_icon(species_type = species.name, inhands = TRUE, slot_name = slot_l_hand_str, default_icon = 'icons/mob/inhands/items/items_left.dmi', default_layer = L_HAND_LAYER) apply_overlay(L_HAND_LAYER) @@ -668,8 +652,8 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) eyes_l.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) face_lying.Blend(eyes_l, ICON_OVERLAY) - if(lip_style) - face_lying.Blend(new/icon('icons/mob/human_face.dmi', "lips_[lip_style]_l"), ICON_OVERLAY) + if(makeup_style) + face_lying.Blend(new/icon('icons/mob/human_face.dmi', "lips_[makeup_style]_l"), ICON_OVERLAY) var/image/face_lying_image = new /image(icon = face_lying) return face_lying_image diff --git a/code/modules/mob/living/carbon/human/zombie.dm b/code/modules/mob/living/carbon/human/zombie.dm index 871bbe5304e2f..4e57a29f16802 100644 --- a/code/modules/mob/living/carbon/human/zombie.dm +++ b/code/modules/mob/living/carbon/human/zombie.dm @@ -1,100 +1,28 @@ -/datum/species/zombie - name = "Zombie" - name_plural = "Zombies" - icobase = 'icons/mob/human_races/r_husk.dmi' - total_health = 125 - species_flags = NO_BREATHE|NO_SCAN|NO_BLOOD|NO_POISON|NO_PAIN|NO_CHEM_METABOLIZATION|NO_STAMINA|HAS_UNDERWEAR|HEALTH_HUD_ALWAYS_DEAD|PARALYSE_RESISTANT - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - see_in_dark = 8 - blood_color = "#110a0a" - hair_color = "#000000" - slowdown = 0.5 - default_language_holder = /datum/language_holder/zombie - has_organ = list( - "heart" = /datum/internal_organ/heart, - "lungs" = /datum/internal_organ/lungs, - "liver" = /datum/internal_organ/liver, - "kidneys" = /datum/internal_organ/kidneys, - "brain" = /datum/internal_organ/brain/zombie, - "appendix" = /datum/internal_organ/appendix, - "eyes" = /datum/internal_organ/eyes - ) - ///Sounds made randomly by the zombie - var/list/sounds = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg') - ///Time before resurrecting if dead - var/revive_time = 1 MINUTES - ///How much burn and burn damage can you heal every Life tick (half a sec) - var/heal_rate = 10 - -/datum/species/zombie/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) - . = ..() - H.set_undefibbable() - H.faction = FACTION_ZOMBIE - H.language_holder = new default_language_holder() - H.setOxyLoss(0) - H.setToxLoss(0) - H.setCloneLoss(0) - H.dropItemToGround(H.r_hand, TRUE) - H.dropItemToGround(H.l_hand, TRUE) - if(istype(H.wear_id, /obj/item/card/id)) - var/obj/item/card/id/id = H.wear_id - id.access = list() // A bit gamey, but let's say ids have a security against zombies - id.iff_signal = NONE - H.equip_to_slot_or_del(new /obj/item/weapon/zombie_claw, SLOT_R_HAND) - H.equip_to_slot_or_del(new /obj/item/weapon/zombie_claw, SLOT_L_HAND) - var/datum/atom_hud/health_hud = GLOB.huds[DATA_HUD_MEDICAL_OBSERVER] - health_hud.add_hud_to(H) - H.job = new /datum/job/zombie //Prevent from skewing the respawn timer if you take a zombie, it's a ghost role after all - for(var/datum/action/action AS in H.actions) - action.remove_action(H) - var/datum/action/rally_zombie/rally_zombie = new - rally_zombie.give_action(H) - var/datum/action/set_agressivity/set_zombie_behaviour = new - set_zombie_behaviour.give_action(H) - -/datum/species/zombie/post_species_loss(mob/living/carbon/human/H) - . = ..() - var/datum/atom_hud/health_hud = GLOB.huds[DATA_HUD_MEDICAL_OBSERVER] - health_hud.remove_hud_from(H) - qdel(H.r_hand) - qdel(H.l_hand) - for(var/datum/action/action AS in H.actions) - action.remove_action(H) - -/datum/species/zombie/handle_unique_behavior(mob/living/carbon/human/H) - if(prob(10)) - playsound(get_turf(H), pick(sounds), 50) - for(var/datum/limb/limb AS in H.limbs) //Regrow some limbs - if(limb.limb_status & LIMB_DESTROYED && !(limb.parent?.limb_status & LIMB_DESTROYED) && prob(10)) - limb.remove_limb_flags(LIMB_DESTROYED) - if(istype(limb, /datum/limb/hand/l_hand)) - H.equip_to_slot_or_del(new /obj/item/weapon/zombie_claw, SLOT_L_HAND) - else if (istype(limb, /datum/limb/hand/r_hand)) - H.equip_to_slot_or_del(new /obj/item/weapon/zombie_claw, SLOT_R_HAND) - H.update_body() - else if(limb.limb_status & LIMB_BROKEN && prob(20)) - limb.remove_limb_flags(LIMB_BROKEN | LIMB_SPLINTED | LIMB_STABILIZED) +/datum/action/rally_zombie + name = "Rally Zombies" + action_icon_state = "rally_minions" - if(H.health != total_health) - H.heal_limbs(heal_rate) +/datum/action/rally_zombie/action_activate() + owner.emote("roar") + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_AI_MINION_RALLY, owner) + var/datum/action/set_agressivity/set_agressivity = owner.actions_by_path[/datum/action/set_agressivity] + if(set_agressivity) + SEND_SIGNAL(owner, COMSIG_ESCORTING_ATOM_BEHAVIOUR_CHANGED, set_agressivity.zombies_agressive) //New escorting ais should have the same behaviour as old one - for(var/organ_slot in has_organ) - var/datum/internal_organ/internal_organ = H.internal_organs_by_name[organ_slot] - internal_organ?.heal_organ_damage(1) - H.updatehealth() +/datum/action/set_agressivity + name = "Set other zombie behavior" + action_icon_state = "minion_agressive" + ///If zombies should be agressive + var/zombies_agressive = TRUE -/datum/species/zombie/handle_death(mob/living/carbon/human/H) - SSmobs.stop_processing(H) - if(!H.on_fire && H.has_working_organs()) - addtimer(CALLBACK(H, TYPE_PROC_REF(/mob/living/carbon/human, revive_to_crit), TRUE, FALSE), revive_time) +/datum/action/set_agressivity/action_activate() + zombies_agressive = !zombies_agressive + SEND_SIGNAL(owner, COMSIG_ESCORTING_ATOM_BEHAVIOUR_CHANGED, zombies_agressive) + update_button_icon() -/datum/species/zombie/create_organs(mob/living/carbon/human/organless_human) - . = ..() - for(var/datum/limb/limb AS in organless_human.limbs) - if(!istype(limb, /datum/limb/head)) - continue - limb.vital = FALSE - return +/datum/action/set_agressivity/update_button_icon() + action_icon_state = zombies_agressive ? "minion_agressive" : "minion_passive" + return ..() /obj/item/weapon/zombie_claw name = "claws" @@ -104,7 +32,7 @@ sharp = IS_SHARP_ITEM_BIG edge = TRUE attack_verb = list("clawed", "slashed", "torn", "ripped", "diced", "cut", "bit") - flags_item = CAN_BUMP_ATTACK|DELONDROP + item_flags = CAN_BUMP_ATTACK|DELONDROP attack_speed = 8 //Same as unarmed delay pry_capable = IS_PRY_CAPABLE_FORCE ///How much zombium are transferred per hit. Set to zero to remove transmission @@ -145,64 +73,5 @@ if(door.density) //Make sure it's still closed door.open(TRUE) -/datum/species/zombie/fast - name = "Fast zombie" - slowdown = 0 - -/datum/species/zombie/fast/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) - . = ..() - H.transform = matrix().Scale(0.8, 0.8) - -/datum/species/zombie/fast/post_species_loss(mob/living/carbon/human/H) - . = ..() - H.transform = matrix().Scale(1/(0.8), 1/(0.8)) - -/datum/species/zombie/tank - name = "Tank zombie" - slowdown = 1 - heal_rate = 20 - total_health = 250 - -/datum/species/zombie/tank/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) - . = ..() - H.transform = matrix().Scale(1.2, 1.2) - -/datum/species/zombie/tank/post_species_loss(mob/living/carbon/human/H) - . = ..() - H.transform = matrix().Scale(1/(1.2), 1/(1.2)) - -/datum/species/zombie/strong - name = "Strong zombie" //These are zombies created from marines, they are stronger, but of course rarer - slowdown = -0.5 - heal_rate = 20 - total_health = 200 - -/datum/species/zombie/strong/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) - . = ..() - H.color = COLOR_MAROON - -/datum/action/rally_zombie - name = "Rally Zombies" - action_icon_state = "rally_minions" - -/datum/action/rally_zombie/action_activate() - owner.emote("roar") - SEND_GLOBAL_SIGNAL(COMSIG_GLOB_AI_MINION_RALLY, owner) - var/datum/action/set_agressivity/set_agressivity = owner.actions_by_path[/datum/action/set_agressivity] - if(set_agressivity) - SEND_SIGNAL(owner, COMSIG_ESCORTING_ATOM_BEHAVIOUR_CHANGED, set_agressivity.zombies_agressive) //New escorting ais should have the same behaviour as old one - -/datum/action/set_agressivity - name = "Set other zombie behavior" - action_icon_state = "minion_agressive" - ///If zombies should be agressive - var/zombies_agressive = TRUE - -/datum/action/set_agressivity/action_activate() - zombies_agressive = !zombies_agressive - SEND_SIGNAL(owner, COMSIG_ESCORTING_ATOM_BEHAVIOUR_CHANGED, zombies_agressive) - update_button_icon() - -/datum/action/set_agressivity/update_button_icon() - action_icon_state = zombies_agressive ? "minion_agressive" : "minion_passive" - return ..() +/obj/item/weapon/zombie_claw/no_zombium + zombium_per_hit = 0 diff --git a/code/modules/mob/living/carbon/shock.dm b/code/modules/mob/living/carbon/shock.dm index 86d24b3aec93f..dd4d6f19d8ed4 100644 --- a/code/modules/mob/living/carbon/shock.dm +++ b/code/modules/mob/living/carbon/shock.dm @@ -70,6 +70,7 @@ traumatic_shock -= 10 if(analgesic) traumatic_shock = 0 + return traumatic_shock //Broken or ripped off organs and limbs will add quite a bit of pain @@ -94,6 +95,10 @@ traumatic_shock -= 20 + M.protection_aura * 20 //-40 pain for SLs, -80 for Commanders traumatic_shock += reagent_pain_modifier + if(HAS_TRAIT(src, TRAIT_MEDIUM_PAIN_RESIST)) + traumatic_shock += PAIN_REDUCTION_HEAVY + else if(HAS_TRAIT(src, TRAIT_LIGHT_PAIN_RESIST)) + traumatic_shock += PAIN_REDUCTION_MEDIUM return traumatic_shock diff --git a/code/modules/mob/living/carbon/xenomorph/abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities.dm index faed0a4052d5e..78adc784bfc11 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities.dm @@ -15,7 +15,7 @@ var/mob/living/carbon/xenomorph/X = owner if(!istype(X)) return - X.lay_down() + X.toggle_resting() return succeed_activate() // *************************************** @@ -158,7 +158,7 @@ /datum/action/ability/activable/xeno/plant_weeds/ranged/can_use_ability(atom/A, silent = FALSE, override_flags) var/area/area = get_area(A) - if(area.flags_area & MARINE_BASE) + if(area.area_flags & MARINE_BASE) if(!silent) to_chat(owner, span_xenowarning("You cannot weed here!")) return FALSE @@ -223,7 +223,7 @@ /// Extra handling for adding the action for draggin functionality (for instant building) /datum/action/ability/activable/xeno/secrete_resin/give_action(mob/living/L) . = ..() - if(!CHECK_BITFIELD(SSticker.mode?.flags_round_type, MODE_ALLOW_XENO_QUICKBUILD) || !SSresinshaping.active) + if(!CHECK_BITFIELD(SSticker.mode?.round_type_flags, MODE_ALLOW_XENO_QUICKBUILD) || !SSresinshaping.active) return var/mutable_appearance/build_maptext = mutable_appearance(icon = null,icon_state = null, layer = ACTION_LAYER_MAPTEXT) @@ -240,7 +240,7 @@ /// Extra handling to remove the stuff needed for dragging /datum/action/ability/activable/xeno/secrete_resin/remove_action(mob/living/carbon/xenomorph/X) - if(!CHECK_BITFIELD(SSticker.mode?.flags_round_type, MODE_ALLOW_XENO_QUICKBUILD)) + if(!CHECK_BITFIELD(SSticker.mode?.round_type_flags, MODE_ALLOW_XENO_QUICKBUILD)) return ..() UnregisterSignal(owner, list(COMSIG_MOB_MOUSEDRAG, COMSIG_MOB_MOUSEUP, COMSIG_MOB_MOUSEDOWN)) UnregisterSignal(SSdcs, list(COMSIG_GLOB_OPEN_SHUTTERS_EARLY, COMSIG_GLOB_OPEN_TIMED_SHUTTERS_LATE,COMSIG_GLOB_OPEN_TIMED_SHUTTERS_XENO_HIVEMIND,COMSIG_GLOB_TADPOLE_LAUNCHED,COMSIG_GLOB_DROPPOD_LANDED)) @@ -252,7 +252,7 @@ var/mob/living/carbon/xenomorph/X = owner var/atom/A = X.selected_resin action_icon_state = initial(A.name) - if(SSmonitor.gamestate == SHUTTERS_CLOSED && CHECK_BITFIELD(SSticker.mode?.flags_round_type, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.active) + if(SSmonitor.gamestate == SHUTTERS_CLOSED && CHECK_BITFIELD(SSticker.mode?.round_type_flags, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.active) button.cut_overlay(visual_references[VREF_MUTABLE_BUILDING_COUNTER]) var/mutable_appearance/number = visual_references[VREF_MUTABLE_BUILDING_COUNTER] number.maptext = MAPTEXT("[SSresinshaping.quickbuild_points_by_hive[owner.get_xeno_hivenumber()]]") @@ -295,7 +295,7 @@ /datum/action/ability/activable/xeno/secrete_resin/use_ability(atom/A) var/mob/living/carbon/xenomorph/xowner = owner - if(SSmonitor.gamestate == SHUTTERS_CLOSED && CHECK_BITFIELD(SSticker.mode?.flags_round_type, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.active) + if(SSmonitor.gamestate == SHUTTERS_CLOSED && CHECK_BITFIELD(SSticker.mode?.round_type_flags, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.active) preshutter_build_resin(A) else if(get_dist(owner, A) > xowner.xeno_caste.resin_max_range) //Maximum range is defined in the castedatum with resin_max_range, defaults to 0 build_resin(get_turf(owner)) @@ -445,6 +445,169 @@ ability_cost = initial(ability_cost) //Reset the plasma cost owner.record_structures_built() +// Secrete Special Resin +/datum/action/ability/activable/xeno/secrete_special_resin + name = "Secrete Special Resin" + action_icon_state = RESIN_WALL + desc = "Builds whatever special resin you selected" + target_flags = ABILITY_TURF_TARGET + ability_cost = 75 + action_type = ACTION_TOGGLE + keybinding_signals = list( + KEYBINDING_NORMAL = COMSIG_XENOABILITY_SECRETE_SPECIAL_RESIN, + ) + ///Minimum time to build a special resin structure + var/base_wait = 2 SECONDS + ///Multiplicator factor to add to the building time, depends on the health of builder. + var/scaling_wait = 1 SECONDS + ///List of buildable structures. Order corresponds with resin_special_images_list. + var/list/buildable_special_structures = list( + /turf/closed/wall/resin/regenerating/special/bulletproof, + /turf/closed/wall/resin/regenerating/special/fireproof, + /turf/closed/wall/resin/regenerating/special/hardy, + ) + +/datum/action/ability/activable/xeno/secrete_special_resin/give_action(mob/living/L) + . = ..() + var/mutable_appearance/build_maptext = mutable_appearance(icon = null,icon_state = null, layer = ACTION_LAYER_MAPTEXT) + build_maptext.pixel_x = 0 + build_maptext.pixel_y = 25 + build_maptext.maptext = MAPTEXT(GLOB.hive_datums[owner.get_xeno_hivenumber()].special_build_points) + visual_references[VREF_MUTABLE_SPECIAL_RESIN_COUNTER] = build_maptext + +/datum/action/ability/activable/xeno/secrete_special_resin/update_button_icon() + var/mob/living/carbon/xenomorph/X = owner + var/atom/A = X.selected_special_resin + action_icon_state = initial(A.name) + button.cut_overlay(visual_references[VREF_MUTABLE_SPECIAL_RESIN_COUNTER]) + var/mutable_appearance/number = visual_references[VREF_MUTABLE_SPECIAL_RESIN_COUNTER] + number.maptext = MAPTEXT("[GLOB.hive_datums[owner.get_xeno_hivenumber()].special_build_points]") + visual_references[VREF_MUTABLE_SPECIAL_RESIN_COUNTER] = number + button.add_overlay(visual_references[VREF_MUTABLE_SPECIAL_RESIN_COUNTER]) + return ..() + +/datum/action/ability/activable/xeno/secrete_special_resin/action_activate() + //Left click on the secrete resin button opens up radial menu (new type of changing structures). + var/mob/living/carbon/xenomorph/X = owner + if(X.selected_ability != src) + return ..() + . = ..() + var/resin_choice = show_radial_menu(owner, owner, GLOB.resin_special_images_list, radius = 35) + if(!resin_choice) + return + var/i = GLOB.resin_special_images_list.Find(resin_choice) + X.selected_special_resin = buildable_special_structures[i] + var/atom/A = X.selected_special_resin + X.balloon_alert(X, initial(A.name)) + update_button_icon() + +/datum/action/ability/activable/xeno/secrete_special_resin/alternate_action_activate() + //Right click on secrete resin button cycles through to the next construction type (old method of changing structures). + var/mob/living/carbon/xenomorph/X = owner + if(X.selected_ability != src) + return ..() + var/i = buildable_special_structures.Find(X.selected_special_resin) + if(length(buildable_special_structures) == i) + X.selected_special_resin = buildable_special_structures[1] + else + X.selected_special_resin = buildable_special_structures[i+1] + var/atom/A = X.selected_special_resin + X.balloon_alert(X, initial(A.name)) + update_button_icon() + +/datum/action/ability/activable/xeno/secrete_special_resin/use_ability(atom/A) + var/mob/living/carbon/xenomorph/xowner = owner + if(get_dist(owner, A) > xowner.xeno_caste.resin_max_range) //Maximum range is defined in the castedatum with resin_max_range, defaults to 0 + build_special_resin(get_turf(owner)) + else + build_special_resin(get_turf(A)) + +/datum/action/ability/activable/xeno/secrete_special_resin/proc/get_wait() + . = base_wait + if(!scaling_wait) + return + var/mob/living/carbon/xenomorph/X = owner + + return (base_wait + scaling_wait - max(0, (scaling_wait * X.health / X.maxHealth))) + +/datum/action/ability/activable/xeno/secrete_special_resin/proc/build_special_resin(turf/T) + var/mob/living/carbon/xenomorph/X = owner + if(GLOB.hive_datums[owner.get_xeno_hivenumber()].special_build_points <= 0) + owner.balloon_alert(owner, span_notice("There is not enough special build points to build this structure!")) + return + switch(is_valid_for_resin_structure(T, X.selected_special_resin == /obj/structure/mineral_door/resin)) + if(ERROR_CANT_WEED) + owner.balloon_alert(owner, span_notice("This spot cannot support a garden!")) + return + if(ERROR_NO_WEED) + owner.balloon_alert(owner, span_notice("This spot has no weeds to serve as support!")) + return + if(ERROR_NO_SUPPORT) + owner.balloon_alert(owner, span_notice("This spot has no adjaecent support for the structure!")) + return + if(ERROR_NOT_ALLOWED) + owner.balloon_alert(owner, span_notice("The queen mother prohibits us from building here.")) + return + if(ERROR_BLOCKER) + owner.balloon_alert(owner, span_notice("There's another xenomorph blocking the spot!")) + return + if(ERROR_FOG) + owner.balloon_alert(owner, span_notice("The fog will prevent the resin from ever taking shape!")) + return + if(ERROR_CONSTRUCT) + return + if(TRUE) + return + if(!line_of_sight(owner, T)) + owner.balloon_alert(owner, span_notice("You cannot secrete resin without line of sight!")) + return fail_activate() + if(!do_after(X, get_wait(), NONE, T, BUSY_ICON_BUILD)) + return fail_activate() + if(GLOB.hive_datums[owner.get_xeno_hivenumber()].special_build_points <= 0) + owner.balloon_alert(owner, span_notice("There is not enough special build points to build this structure!")) + return + switch(is_valid_for_resin_structure(T, X.selected_special_resin == /obj/structure/mineral_door/resin)) + if(ERROR_CANT_WEED) + owner.balloon_alert(owner, span_notice("This spot cannot support a garden!")) + return + if(ERROR_NO_WEED) + owner.balloon_alert(owner, span_notice("This spot has no weeds to serve as support!")) + return + if(ERROR_NO_SUPPORT) + owner.balloon_alert(owner, span_notice("This spot has no adjaecent support for the structure!")) + return + if(ERROR_NOT_ALLOWED) + owner.balloon_alert(owner, span_notice("The queen mother prohibits us from building here.")) + return + if(ERROR_BLOCKER) + owner.balloon_alert(owner, span_notice("There's another xenomorph blocking the spot!")) + return + if(ERROR_FOG) + owner.balloon_alert(owner, span_notice("The fog will prevent the resin from ever taking shape!")) + return + if(ERROR_CONSTRUCT) + return + if(TRUE) + return + var/atom/AM = X.selected_special_resin + X.visible_message(span_xenowarning("\The [X] regurgitates a thick substance and shapes it into \a [initial(AM.name)]!"), \ + span_xenonotice("We regurgitate some resin and shape it into \a [initial(AM.name)]."), null, 5) + playsound(owner.loc, "alien_resin_build", 25) + var/atom/new_resin + if(ispath(X.selected_resin, /turf)) // We should change turfs, not spawn them in directly + var/list/baseturfs = islist(T.baseturfs) ? T.baseturfs : list(T.baseturfs) + baseturfs |= T.type + T.ChangeTurf(X.selected_special_resin, baseturfs) + new_resin = T + else + new_resin = new X.selected_special_resin(T) + if(new_resin) + add_cooldown(SSmonitor.gamestate == SHUTTERS_CLOSED ? get_cooldown()/2 : get_cooldown()) + succeed_activate(SSmonitor.gamestate == SHUTTERS_CLOSED ? ability_cost/2 : ability_cost) + GLOB.hive_datums[owner.get_xeno_hivenumber()].special_build_points-- + ability_cost = initial(ability_cost) //Reset the plasma cost + owner.record_structures_built() + /datum/action/ability/xeno_action/pheromones name = "Emit Pheromones" action_icon_state = "emit_pheromones" @@ -605,6 +768,9 @@ use_state_flags = ABILITY_USE_BUCKLED /datum/action/ability/activable/xeno/corrosive_acid/can_use_ability(atom/A, silent = FALSE, override_flags) + var/obj/effect/xenomorph/acid/current_acid_type = acid_type + if(SSmonitor.gamestate == SHUTTERS_CLOSED && CHECK_BITFIELD(SSticker.mode?.round_type_flags, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.active) + current_acid_type = /obj/effect/xenomorph/acid/strong //if it is before shutters open, everyone gets strong acid // Check if it's an acid object we're upgrading if (istype(A, /obj/effect/xenomorph/acid)) var/obj/effect/xenomorph/acid/existing_acid = A @@ -620,24 +786,26 @@ if(!silent) owner.balloon_alert(owner, "We can't melt [A]") return FALSE - if(A.resistance_flags & UNACIDABLE || !A.dissolvability(initial(acid_type.acid_strength))) + if(A.resistance_flags & UNACIDABLE || !A.dissolvability(initial(current_acid_type.acid_strength))) if(!silent) owner.balloon_alert(owner, "We cannot dissolve [A]") return FALSE - if(!A.should_apply_acid(initial(acid_type.acid_strength)) || initial(acid_type.acid_strength) <= A.current_acid?.acid_strength) + if(!A.should_apply_acid(initial(acid_type.acid_strength)) || initial(current_acid_type.acid_strength) <= A.current_acid?.acid_strength) if(!silent) owner.balloon_alert(owner, "[A] is already subject to a more or equally powerful acid") return FALSE /datum/action/ability/activable/xeno/corrosive_acid/use_ability(atom/A) var/mob/living/carbon/xenomorph/X = owner - + var/obj/effect/xenomorph/acid/current_acid_type = acid_type + if(SSmonitor.gamestate == SHUTTERS_CLOSED && CHECK_BITFIELD(SSticker.mode?.round_type_flags, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.active) + current_acid_type = /obj/effect/xenomorph/acid/strong //if it is before shutters open, everyone gets strong acid // Check if it's an acid object we're upgrading - if (istype(A, /obj/effect/xenomorph/acid)) + if(istype(A, /obj/effect/xenomorph/acid)) var/obj/effect/xenomorph/acid/existing_acid = A A = existing_acid.acid_t // Swap the target to the target of the acid - if(!A.dissolvability(initial(acid_type.acid_strength))) + if(!A.dissolvability(initial(current_acid_type.acid_strength))) return fail_activate() X.face_atom(A) @@ -651,7 +819,7 @@ var/old_acid_ticks = A.current_acid?.ticks QDEL_NULL(A.current_acid) - A.current_acid = new acid_type(get_turf(A), A, A.dissolvability(initial(acid_type.acid_strength)), old_acid_ticks) + A.current_acid = new current_acid_type(get_turf(A), A, A.dissolvability(initial(current_acid_type.acid_strength)), old_acid_ticks) succeed_activate() @@ -718,7 +886,7 @@ keybinding_signals = list( KEYBINDING_NORMAL = COMSIG_XENOABILITY_XENO_SPIT, ) - use_state_flags = ABILITY_USE_LYING|ABILITY_USE_BUCKLED|ABILITY_DO_AFTER_ATTACK + use_state_flags = ABILITY_USE_LYING|ABILITY_USE_BUCKLED|ABILITY_DO_AFTER_ATTACK|ABILITY_USE_STAGGERED target_flags = ABILITY_MOB_TARGET ///Current target that the xeno is targeting. This is for aiming. var/current_target @@ -813,7 +981,7 @@ ability_cost = X.ammo.spit_cost newspit.generate_bullet(X.ammo, X.ammo.damage * SPIT_UPGRADE_BONUS(X)) newspit.def_zone = X.get_limbzone_target() - newspit.fire_at(current_target, X, null, X.ammo.max_range, X.ammo.shell_speed) + newspit.fire_at(current_target, X, X, X.ammo.max_range, X.ammo.shell_speed) if(can_use_ability(current_target) && X.client) //X.client to make sure autospit doesn't continue for non player mobs. succeed_activate() @@ -1109,8 +1277,8 @@ /mob/living/carbon/xenomorph/proc/add_abilities() for(var/action_path in xeno_caste.actions) - var/datum/action/ability/xeno_action/action = new action_path() - if(!SSticker.mode || SSticker.mode.flags_xeno_abilities & action.gamemode_flags) + var/datum/action/ability/xeno_action/action = new action_path(src) + if(!SSticker.mode || SSticker.mode.xeno_abilities_flags & action.gamemode_flags) action.give_action(src) @@ -1128,12 +1296,12 @@ name = "Psy drain" action_icon_state = "headbite" desc = "Drain the victim of its life force to gain larva and psych points" + ability_cost = 50 use_state_flags = ABILITY_USE_STAGGERED|ABILITY_USE_FORTIFIED|ABILITY_USE_CRESTED //can't use while staggered, defender fortified or crest down keybinding_signals = list( KEYBINDING_NORMAL = COMSIG_XENOABILITY_HEADBITE, ) gamemode_flags = ABILITY_NUCLEARWAR - ability_cost = 100 ///How much larva points it gives (8 points for one larva in distress) var/larva_point_reward = 1 @@ -1206,7 +1374,8 @@ if(HAS_TRAIT(victim, TRAIT_HIVE_TARGET)) SEND_GLOBAL_SIGNAL(COMSIG_GLOB_HIVE_TARGET_DRAINED, X) psy_points_reward = psy_points_reward * 3 - SSpoints.add_psy_points(X.hivenumber, psy_points_reward) + SSpoints.add_strategic_psy_points(X.hivenumber, psy_points_reward) + SSpoints.add_tactical_psy_points(X.hivenumber, psy_points_reward*0.25) var/datum/job/xeno_job = SSjob.GetJobType(/datum/job/xenomorph) xeno_job.add_job_points(larva_point_reward) X.hive.update_tier_limits() diff --git a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm index 0e3c5ec8aecdb..60a7cd6f6b09c 100644 --- a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm +++ b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm @@ -47,7 +47,7 @@ else if(SEND_SIGNAL(X, COMSIG_XENOMORPH_ZONE_SELECT) & COMSIG_ACCURATE_ZONE) affecting = get_limb(X.zone_selected) else - affecting = get_limb(ran_zone(X.zone_selected, 70)) + affecting = get_limb(ran_zone(X.zone_selected, XENO_DEFAULT_ACCURACY - X.xeno_caste.accuracy_malus)) if(!affecting || (random_location && !set_location) || (ignore_destroyed && !affecting.is_usable())) //No organ or it's destroyed, just get a random one affecting = get_limb(ran_zone(null, 0)) if(!affecting || (no_head && affecting == get_limb("head")) || (ignore_destroyed && !affecting.is_usable())) @@ -81,7 +81,7 @@ for(var/i in damage_mod) damage += i - var/armor_pen + var/armor_pen = X.xeno_caste.melee_ap for(var/i in armor_mod) armor_pen += i @@ -166,7 +166,7 @@ if(stat == DEAD) if(istype(wear_ear, /obj/item/radio/headset/mainship)) var/obj/item/radio/headset/mainship/cam_headset = wear_ear - if(cam_headset.camera.status) + if(cam_headset?.camera?.status) cam_headset.camera.toggle_cam(null, FALSE) playsound(loc, "alien_claw_metal", 25, 1) X.do_attack_animation(src, ATTACK_EFFECT_CLAW) @@ -210,29 +210,30 @@ return FALSE //Every other type of nonhuman mob //MARKER OVERRIDE -/mob/living/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/mob/living/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return FALSE - if (X.fortify || X.behemoth_charging) + if (xeno_attacker.fortify || xeno_attacker.behemoth_charging) return FALSE - SEND_SIGNAL(X, COMSIG_XENOMORPH_ATTACK_LIVING, src, damage_amount, X.xeno_caste.melee_damage * X.xeno_melee_damage_modifier) + SEND_SIGNAL(xeno_attacker, COMSIG_XENOMORPH_ATTACK_LIVING, src, damage_amount, xeno_attacker.xeno_caste.melee_damage * xeno_attacker.xeno_melee_damage_modifier) - switch(X.a_intent) + switch(xeno_attacker.a_intent) if(INTENT_HELP) if(on_fire) - X.visible_message(span_danger("[X] stares at [src]."), span_notice("We stare at the roasting [src], toasty."), null, 5) + xeno_attacker.visible_message(span_danger("[xeno_attacker] stares at [src]."), span_notice("We stare at the roasting [src], toasty."), null, 5) return FALSE - X.visible_message(span_notice("\The [X] caresses [src] with its scythe-like arm."), \ + + xeno_attacker.visible_message(span_notice("\The [xeno_attacker] caresses [src] with its scythe-like arm."), \ span_notice("We caress [src] with our scythe-like arm."), null, 5) return FALSE if(INTENT_GRAB) - return attack_alien_grab(X) + return attack_alien_grab(xeno_attacker) if(INTENT_HARM, INTENT_DISARM) - return attack_alien_harm(X) + return attack_alien_harm(xeno_attacker) return FALSE /mob/living/attack_larva(mob/living/carbon/xenomorph/larva/M) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/behemoth/abilities_behemoth.dm b/code/modules/mob/living/carbon/xenomorph/castes/behemoth/abilities_behemoth.dm index 609aeec8a7758..b7cd5f6c0d9ed 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/behemoth/abilities_behemoth.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/behemoth/abilities_behemoth.dm @@ -131,7 +131,7 @@ #define LANDSLIDE_ENDING_COLLISION_DELAY 0.3 SECONDS #define LANDSLIDE_KNOCKDOWN_DURATION 1 SECONDS #define LANDSLIDE_DAMAGE_MULTIPLIER 1.2 -#define LANDSLIDE_DAMAGE_MECHA_MODIFIER 20 +#define LANDSLIDE_DAMAGE_VEHICLE_MODIFIER 20 #define LANDSLIDE_OBJECT_INTEGRITY_THRESHOLD 150 #define LANDSLIDE_ENDED_CANCELLED (1<<0) @@ -321,7 +321,6 @@ animate(pixel_y = xeno_owner.pixel_y + (LANDSLIDE_RANGE / 2), time = animation_time / 2, easing = CIRCULAR_EASING|EASE_OUT) animate(pixel_y = initial(xeno_owner.pixel_y), time = animation_time / 2, easing = CIRCULAR_EASING|EASE_IN) return - addtimer(CALLBACK(owner, TYPE_PROC_REF(/atom, balloon_alert), owner, "Use [name] again to cancel"), LANDSLIDE_WIND_UP) add_cooldown(LANDSLIDE_WIND_UP) addtimer(CALLBACK(src, PROC_REF(do_charge), owner_turf, direction, charge_damage, which_step), LANDSLIDE_WIND_UP) @@ -392,9 +391,9 @@ var/obj/structure/earth_pillar/affected_pillar = affected_atom affected_pillar.throw_pillar(get_ranged_target_turf(xeno_owner, xeno_owner.dir, 7), TRUE) continue - if(ismecha(affected_atom)) - var/obj/vehicle/sealed/mecha/affected_mecha = affected_atom - affected_mecha.take_damage(damage * LANDSLIDE_DAMAGE_MECHA_MODIFIER, MELEE) + if(isvehicle(affected_atom)) + var/obj/vehicle/veh_victim = affected_atom + veh_victim.take_damage(damage * LANDSLIDE_DAMAGE_VEHICLE_MODIFIER, MELEE) continue var/obj/affected_object = affected_atom if(!affected_object.density || affected_object.allow_pass_flags & PASS_MOB || affected_object.resistance_flags & INDESTRUCTIBLE) @@ -454,9 +453,9 @@ var/obj/structure/earth_pillar/affected_pillar = affected_atom affected_pillar.throw_pillar(get_ranged_target_turf(xeno_owner, xeno_owner.dir, 7), TRUE) continue - if(ismecha(affected_atom)) - var/obj/vehicle/sealed/mecha/affected_mecha = affected_atom - affected_mecha.take_damage(damage * LANDSLIDE_DAMAGE_MECHA_MODIFIER, MELEE) + if(isvehicle(affected_atom)) + var/obj/vehicle/veh_victim = affected_atom + veh_victim.take_damage(damage * LANDSLIDE_DAMAGE_VEHICLE_MODIFIER, MELEE) continue var/obj/affected_object = affected_atom if(!affected_object.density || affected_object.allow_pass_flags & PASS_MOB || affected_object.resistance_flags & INDESTRUCTIBLE) @@ -687,7 +686,7 @@ qdel(oldest_pillar) update_button_icon() -/* RU TGMC EDIT + // *************************************** // *********** Seismic Fracture // *************************************** @@ -695,7 +694,7 @@ #define SEISMIC_FRACTURE_ATTACK_RADIUS 3 #define SEISMIC_FRACTURE_ATTACK_RADIUS_ENHANCED 5 #define SEISMIC_FRACTURE_ENHANCED_DELAY 1 SECONDS -RU TGMC EDIT */ + /obj/effect/temp_visual/behemoth/seismic_fracture icon = 'icons/effects/64x64.dmi' icon_state = "seismic_fracture" @@ -748,7 +747,7 @@ RU TGMC EDIT */ if(EAST) pixel_x += 18 pixel_y -= 8 -/* RU TGMC EDIT //moved to modular + /datum/action/ability/xeno_action/seismic_fracture name = "Seismic Fracture" action_icon_state = "seismic_fracture" @@ -845,7 +844,7 @@ RU TGMC EDIT */ excepted_turfs += turfs_to_attack iteration++ addtimer(CALLBACK(src, PROC_REF(do_attack_extra), origin_turf, extra_turfs, excepted_turfs, enhanced, range, iteration), SEISMIC_FRACTURE_ENHANCED_DELAY) -RU TGMC EDIT*/ + // *************************************** // *********** Primal Wrath @@ -856,7 +855,7 @@ RU TGMC EDIT*/ #define PRIMAL_WRATH_SPEED_BONUS -0.3 #define PRIMAL_WRATH_DECAY_MULTIPLIER 1.2 #define PRIMAL_WRATH_ACTIVE_DECAY_DIVISION 40 -//#define PRIMAL_WRATH_GAIN_MULTIPLIER 0.3 //RUTGMC EDIT +//#define PRIMAL_WRATH_GAIN_MULTIPLIER 0.3 // RUTGMC EDIT #define PRIMAL_WRATH_LANDSLIDE_CHARGES 3 /particles/primal_wrath @@ -921,14 +920,12 @@ RU TGMC EDIT*/ block_overlay = new(null, src) owner.vis_contents += block_overlay START_PROCESSING(SSprocessing, src) - RegisterSignals(owner, list(COMSIG_QDELETING, COMSIG_MOB_DEATH, COMSIG_XENOMORPH_EVOLVED, COMSIG_XENOMORPH_DEEVOLVED), PROC_REF(stop_ability)) + RegisterSignals(owner, list(COMSIG_MOB_DEATH, COMSIG_XENOMORPH_EVOLVED, COMSIG_XENOMORPH_DEEVOLVED), PROC_REF(stop_ability)) RegisterSignals(owner, list(COMSIG_XENOMORPH_BRUTE_DAMAGE, COMSIG_XENOMORPH_BURN_DAMAGE), PROC_REF(taking_damage)) -/datum/action/ability/xeno_action/primal_wrath/remove_action(mob/living/L) - . = ..() - stop_ability() - /datum/action/ability/xeno_action/primal_wrath/process() + if(!owner) + return PROCESS_KILL var/mob/living/carbon/xenomorph/xeno_owner = owner if(xeno_owner.hivenumber == XENO_HIVE_FALLEN) if(xeno_owner.wrath_stored < xeno_owner.xeno_caste.wrath_max) @@ -1093,7 +1090,7 @@ RU TGMC EDIT*/ earth_riser_action?.cooldown_duration = EARTH_RISER_PRIMAL_WRATH_COOLDOWN earth_riser_action?.change_maximum_pillars() earth_riser_action?.clear_cooldown() - var/datum/action/ability/activable/xeno/seismic_fracture/seismic_fracture_action = xeno_owner.actions_by_path[/datum/action/ability/activable/xeno/seismic_fracture] + var/datum/action/ability/xeno_action/seismic_fracture/seismic_fracture_action = xeno_owner.actions_by_path[/datum/action/ability/xeno_action/seismic_fracture] seismic_fracture_action?.clear_cooldown() RegisterSignal(xeno_owner, COMSIG_ABILITY_SUCCEED_ACTIVATE, PROC_REF(change_cost)) @@ -1242,29 +1239,29 @@ RU TGMC EDIT*/ // Attacking an Earth Pillar as a xeno has a few possible interactions, based on intent: // - Harm intent will reduce a counter in this structure. When the counter hits zero, the structure is destroyed, meaning it is much easier to break it as a xeno. // - Help intent as a Behemoth will trigger an easter egg. Does nothing, just fluff. -/obj/structure/earth_pillar/attack_alien(mob/living/carbon/xenomorph/xeno_user, isrightclick = FALSE) +/obj/structure/earth_pillar/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) var/current_turf = get_turf(src) - switch(xeno_user.a_intent) + switch(xeno_attacker.a_intent) if(INTENT_DISARM, INTENT_GRAB, INTENT_HARM) if(attacks_to_destroy <= 1) - xeno_user.do_attack_animation(src) - xeno_user.balloon_alert(xeno_user, "Destroyed") + xeno_attacker.do_attack_animation(src) + xeno_attacker.balloon_alert(xeno_attacker, "Destroyed") new /obj/effect/temp_visual/behemoth/landslide/hit(current_turf) qdel(src) return TRUE attacks_to_destroy-- - xeno_user.do_attack_animation(src) + xeno_attacker.do_attack_animation(src) do_jitter_animation(jitter_loops = 1) playsound(src, get_sfx("behemoth_earth_pillar_hit"), 40) - xeno_user.balloon_alert(xeno_user, "Attack [attacks_to_destroy] more time(s) to destroy") + xeno_attacker.balloon_alert(xeno_attacker, "Attack [attacks_to_destroy] more time(s) to destroy") new /obj/effect/temp_visual/behemoth/landslide/hit(current_turf) return TRUE if(INTENT_HELP) - if(isxenobehemoth(xeno_user)) - xeno_user.do_attack_animation(src) + if(isxenobehemoth(xeno_attacker)) + xeno_attacker.do_attack_animation(src) do_jitter_animation(jitter_loops = 1) playsound(src, 'sound/effects/behemoth/earth_pillar_eating.ogg', 30, TRUE) - xeno_user.visible_message(span_xenowarning("\The [xeno_user] eats away at the [src.name]!"), \ + xeno_attacker.visible_message(span_xenowarning("\The [xeno_attacker] eats away at the [src.name]!"), \ span_xenonotice(pick( "We eat away at the stone. It tastes good, as expected of our primary diet.", "Mmmmm... Delicious rock. A fitting meal for the hardiest of creatures.", @@ -1300,10 +1297,10 @@ RU TGMC EDIT*/ UnregisterSignal(xeno_owner, COMSIG_QDELETING) xeno_owner = null -/// Calls update_icon_state(). +/// Calls update_appearance, this exists to discard the arguments we get from the signals. /obj/structure/earth_pillar/proc/call_update_icon_state() SIGNAL_HANDLER - update_icon_state() + update_appearance() /// Deletes the pillar and creates a projectile on the same tile, to be fired at the target atom. /obj/structure/earth_pillar/proc/throw_pillar(atom/target_atom, landslide) @@ -1318,7 +1315,7 @@ RU TGMC EDIT*/ var/datum/ammo/xeno/earth_pillar/projectile = landslide? GLOB.ammo_list[/datum/ammo/xeno/earth_pillar/landslide] : GLOB.ammo_list[/datum/ammo/xeno/earth_pillar] var/obj/projectile/new_projectile = new /obj/projectile(source_turf) new_projectile.generate_bullet(projectile) - new_projectile.fire_at(get_turf(target_atom), usr, null, new_projectile.ammo.max_range, loc_override = source_turf) + new_projectile.fire_at(get_turf(target_atom), usr, source_turf, new_projectile.ammo.max_range) /// Seismic Fracture (as in the ability) has a special interaction with any Earth Pillars caught in its attack range. /// Those Earth Pillars will reflect the same attack in a similar range around it, destroying itself afterwards. @@ -1341,7 +1338,7 @@ RU TGMC EDIT*/ icon_state = "earth_pillar" ping = null bullet_color = COLOR_LIGHT_ORANGE - flags_ammo_behavior = AMMO_XENO|AMMO_SKIPS_ALIENS + ammo_behavior_flags = AMMO_XENO|AMMO_SKIPS_ALIENS shell_speed = 1 max_range = 10 damage_falloff = 0 @@ -1396,7 +1393,7 @@ RU TGMC EDIT*/ // *************************************** // *********** Global Procs // *************************************** -#define AREA_ATTACK_DAMAGE_MECHA_MODIFIER 10 +#define AREA_ATTACK_DAMAGE_VEHICLE_MODIFIER 10 /** * Checks for any atoms caught in the attack's range, and applies several effects based on the atom's type. @@ -1427,7 +1424,7 @@ RU TGMC EDIT*/ shake_camera(affected_living, 1, 0.8) affected_living.Paralyze(paralyze_duration) affected_living.apply_damage(attack_damage, BRUTE, blocked = MELEE) - else if(isearthpillar(affected_atom) || ismecha(affected_atom) || istype(affected_atom, /obj/structure/reagent_dispensers/fueltank)) + else if(isearthpillar(affected_atom) || isvehicle(affected_atom) || istype(affected_atom, /obj/structure/reagent_dispensers/fueltank)) affected_atom.do_jitter_animation() new /obj/effect/temp_visual/behemoth/landslide/hit(affected_atom.loc) playsound(affected_atom.loc, get_sfx("behemoth_earth_pillar_hit"), 40) @@ -1441,9 +1438,9 @@ RU TGMC EDIT*/ do_warning(xeno_owner, spread_turfs, wind_up_duration) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(behemoth_area_attack), xeno_owner, spread_turfs, enhanced), wind_up_duration) continue - if(ismecha(affected_atom)) - var/obj/vehicle/sealed/mecha/affected_mecha = affected_atom - affected_mecha.take_damage(attack_damage * AREA_ATTACK_DAMAGE_MECHA_MODIFIER, MELEE) + if(isvehicle(affected_atom)) + var/obj/vehicle/veh_victim = affected_atom + veh_victim.take_damage(attack_damage * AREA_ATTACK_DAMAGE_VEHICLE_MODIFIER, MELEE) continue if(istype(affected_atom, /obj/structure/reagent_dispensers/fueltank)) var/obj/structure/reagent_dispensers/fueltank/affected_tank = affected_atom diff --git a/code/modules/mob/living/carbon/xenomorph/castes/behemoth/behemoth.dm b/code/modules/mob/living/carbon/xenomorph/castes/behemoth/behemoth.dm index 6c9363ba67f66..a1e009ef6386e 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/behemoth/behemoth.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/behemoth/behemoth.dm @@ -26,7 +26,7 @@ if(!behemoth_roll_action || !behemoth_roll_action.charge_ability_on) return FALSE if(behemoth_roll_action.valid_steps_taken == behemoth_roll_action.max_steps_buildup) - icon_state = "Behemoth[is_a_rouny ? " rouny" : ""] Charging" + icon_state = "Behemoth[(xeno_flags & XENO_ROUNY) ? " rouny" : ""] Charging" else icon_state = "Behemoth Rolling" return TRUE diff --git a/code/modules/mob/living/carbon/xenomorph/castes/boiler/abilities_boiler.dm b/code/modules/mob/living/carbon/xenomorph/castes/boiler/abilities_boiler.dm index 520ab6b0ccfbe..ff7f9589ce744 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/boiler/abilities_boiler.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/boiler/abilities_boiler.dm @@ -33,23 +33,22 @@ GLOBAL_LIST_INIT(boiler_glob_image_list, list( keybinding_signals = list( KEYBINDING_NORMAL = COMSIG_XENOABILITY_LONG_RANGE_SIGHT, ) - use_state_flags = ABILITY_USE_ROOTED /datum/action/ability/xeno_action/toggle_long_range/action_activate() var/mob/living/carbon/xenomorph/boiler/X = owner - if(X.is_zoomed) + if(X.xeno_flags & XENO_ZOOMED) X.zoom_out() X.visible_message(span_notice("[X] stops looking off into the distance."), \ span_notice("We stop looking off into the distance."), null, 5) else X.visible_message(span_notice("[X] starts looking off into the distance."), \ span_notice("We start focusing your sight to look off into the distance."), null, 5) - if(!do_after(X, 1 SECONDS, IGNORE_HELD_ITEM, null, BUSY_ICON_GENERIC) || X.is_zoomed) + if(!do_after(X, 1 SECONDS, IGNORE_HELD_ITEM, null, BUSY_ICON_GENERIC) || (X.xeno_flags & XENO_ZOOMED)) return X.zoom_in(4.5) //RU TGMC EDIT ..() -/* RU TGMC EDIT // moved to modular + // *************************************** // *********** Gas type toggle // *************************************** @@ -58,7 +57,7 @@ GLOBAL_LIST_INIT(boiler_glob_image_list, list( name = "Toggle Bombard Type" action_icon_state = "toggle_bomb0" desc = "Switches Boiler Bombard type between available glob types." - use_state_flags = ABILITY_USE_BUSY|ABILITY_USE_LYING|ABILITY_USE_ROOTED + use_state_flags = ABILITY_USE_BUSY|ABILITY_USE_LYING keybinding_signals = list( KEYBINDING_NORMAL = COMSIG_XENOABILITY_TOGGLE_BOMB, KEYBINDING_ALTERNATE = COMSIG_XENOABILITY_TOGGLE_BOMB_RADIAL, @@ -102,6 +101,7 @@ GLOBAL_LIST_INIT(boiler_glob_image_list, list( * * On selecting nothing, merely keeps current ammo. * * Dynamically adjusts depending on which globs a boiler has access to, provided the global lists are maintained, though this fact isn't too relevant unless someone adds more. **/ +/* Moved to modular /datum/action/ability/xeno_action/toggle_bomb/proc/select_glob_radial() var/mob/living/carbon/xenomorph/boiler/X = owner var/list/available_globs = list() @@ -119,7 +119,7 @@ GLOBAL_LIST_INIT(boiler_glob_image_list, list( var/datum/ammo/xeno/boiler_gas/boiler_glob = X.ammo to_chat(X, span_notice(boiler_glob.select_text)) update_button_icon() - +*/ /datum/action/ability/xeno_action/toggle_bomb/update_button_icon() var/mob/living/carbon/xenomorph/boiler/X = owner var/datum/ammo/xeno/boiler_gas/boiler_glob = X.ammo //Should be safe as this always selects a ammo. @@ -136,7 +136,7 @@ GLOBAL_LIST_INIT(boiler_glob_image_list, list( action_icon = 'icons/xeno/actions_boiler_glob.dmi' desc = "Creates a Boiler Bombard of the type currently selected." ability_cost = 200 - use_state_flags = ABILITY_USE_BUSY|ABILITY_USE_LYING|ABILITY_USE_ROOTED + use_state_flags = ABILITY_USE_BUSY|ABILITY_USE_LYING keybinding_signals = list( KEYBINDING_NORMAL = COMSIG_XENOABILITY_CREATE_BOMB, ) @@ -148,7 +148,7 @@ GLOBAL_LIST_INIT(boiler_glob_image_list, list( /datum/action/ability/xeno_action/create_boiler_bomb/action_activate() var/mob/living/carbon/xenomorph/boiler/X = owner - if(X.is_zoomed) + if(X.xeno_flags & XENO_ZOOMED) to_chat(X, span_notice("We can not prepare globules as we are now. We must stop concentrating into the distance!")) return @@ -181,10 +181,8 @@ GLOBAL_LIST_INIT(boiler_glob_image_list, list( desc = "Launch a glob of neurotoxin or acid. Must be rooted to use." keybinding_signals = list( KEYBINDING_NORMAL = COMSIG_XENOABILITY_BOMBARD, - KEYBINDING_ALTERNATE = COMSIG_XENOABILITY_ROOT, ) target_flags = ABILITY_TURF_TARGET - use_state_flags = ABILITY_USE_ROOTED /datum/action/ability/activable/xeno/bombard/get_cooldown() var/mob/living/carbon/xenomorph/boiler/X = owner @@ -192,20 +190,39 @@ GLOBAL_LIST_INIT(boiler_glob_image_list, list( /datum/action/ability/activable/xeno/bombard/on_cooldown_finish() to_chat(owner, span_notice("We feel your toxin glands swell. We are able to bombard an area again.")) + var/mob/living/carbon/xenomorph/boiler/firer = owner + if(firer.selected_ability == src) + firer.set_bombard_pointer() return ..() /datum/action/ability/activable/xeno/bombard/on_selection() + var/mob/living/carbon/xenomorph/boiler/firer = owner + var/current_ammo = firer.corrosive_ammo + firer.neuro_ammo + if(current_ammo <= 0) + to_chat(firer, span_notice("We have nothing prepared to fire.")) + return FALSE + + firer.visible_message(span_notice("\The [firer] begins digging their claws into the ground."), \ + span_notice("We begin digging ourselves into place."), null, 5) + if(!do_after(firer, 3 SECONDS, FALSE, null, BUSY_ICON_HOSTILE)) + on_deselection() + firer.selected_ability = null + firer.update_action_button_icons() + firer.reset_bombard_pointer() + return FALSE + + firer.visible_message(span_notice("\The [firer] digs itself into the ground!"), \ + span_notice("We dig ourselves into place! If we move, we must wait again to fire."), null, 5) + firer.set_bombard_pointer() RegisterSignal(owner, COMSIG_MOB_ATTACK_RANGED, TYPE_PROC_REF(/datum/action/ability/activable/xeno/bombard, on_ranged_attack)) /datum/action/ability/activable/xeno/bombard/on_deselection() + var/mob/living/carbon/xenomorph/boiler/firer = owner + if(firer.selected_ability == src) + firer.reset_bombard_pointer() + to_chat(firer, span_notice("We relax our stance.")) UnregisterSignal(owner, COMSIG_MOB_ATTACK_RANGED) -/// Signal proc for clicking at a distance -/datum/action/ability/activable/xeno/bombard/proc/on_ranged_attack(mob/living/carbon/xenomorph/X, atom/A, params) - SIGNAL_HANDLER - if(can_use_ability(A, TRUE)) - INVOKE_ASYNC(src, PROC_REF(use_ability), A) - /datum/action/ability/activable/xeno/bombard/can_use_ability(atom/A, silent = FALSE, override_flags) . = ..() if(!.) @@ -214,11 +231,6 @@ GLOBAL_LIST_INIT(boiler_glob_image_list, list( var/turf/S = get_turf(owner) var/mob/living/carbon/xenomorph/boiler/boiler_owner = owner - if(!HAS_TRAIT_FROM(owner, TRAIT_IMMOBILE, BOILER_ROOTED_TRAIT)) - if(!silent) - to_chat(owner, span_warning("We need to be rooted to fire!")) - return FALSE - if(istype(boiler_owner.ammo, /datum/ammo/xeno/boiler_gas/corrosive)) if(boiler_owner.corrosive_ammo <= 0) boiler_owner.balloon_alert(boiler_owner, "No corrosive globules.") @@ -228,10 +240,6 @@ GLOBAL_LIST_INIT(boiler_glob_image_list, list( boiler_owner.balloon_alert(boiler_owner, "No neurotoxin globules.") return FALSE - if(!HAS_TRAIT_FROM(boiler_owner, TRAIT_IMMOBILE, BOILER_ROOTED_TRAIT)) - boiler_owner.balloon_alert(boiler_owner, "We need to be rooted to the ground to fire!") - return FALSE - if(!isturf(T) || T.z != S.z) if(!silent) boiler_owner.balloon_alert(boiler_owner, "Invalid target.") @@ -263,7 +271,7 @@ GLOBAL_LIST_INIT(boiler_glob_image_list, list( var/obj/projectile/P = new /obj/projectile(boiler_owner.loc) P.generate_bullet(boiler_owner.ammo) - P.fire_at(target, boiler_owner, null, boiler_owner.ammo.max_range, boiler_owner.ammo.shell_speed) + P.fire_at(target, boiler_owner, boiler_owner, boiler_owner.ammo.max_range, boiler_owner.ammo.shell_speed) playsound(boiler_owner, 'sound/effects/blobattack.ogg', 25, 1) if(istype(boiler_owner.ammo, /datum/ammo/xeno/boiler_gas/corrosive)) GLOB.round_statistics.boiler_acid_smokes++ @@ -279,54 +287,38 @@ GLOBAL_LIST_INIT(boiler_glob_image_list, list( update_button_icon() add_cooldown() +/datum/action/ability/activable/xeno/bombard/clean_action() + var/mob/living/carbon/xenomorph/boiler/firer = owner + firer.reset_bombard_pointer() + return ..() -/datum/action/ability/activable/xeno/bombard/alternate_action_activate() - INVOKE_ASYNC(src, PROC_REF(root)) - return COMSIG_KB_ACTIVATED - - -/// The alternative action of bombard, rooting. It begins the rooting/unrooting process. -/datum/action/ability/activable/xeno/bombard/proc/root() - if(HAS_TRAIT_FROM(owner, TRAIT_IMMOBILE, BOILER_ROOTED_TRAIT)) - owner.balloon_alert_to_viewers("Rooting out of place...") - if(!do_after(owner, 1 SECONDS, IGNORE_HELD_ITEM, null, BUSY_ICON_HOSTILE)) //RUTGMC EDIT - owner.balloon_alert(owner, "Interrupted!") - return - owner.balloon_alert(owner, "Unrooted!") - set_rooted(FALSE) - return - - if(HAS_TRAIT_FROM(owner, TRAIT_FLOORED, RESTING_TRAIT)) - owner.balloon_alert(owner, "Cannot while lying down!") - return - - owner.balloon_alert_to_viewers("Rooting into place...") - if(!do_after(owner, 1 SECONDS, IGNORE_HELD_ITEM, null, BUSY_ICON_HOSTILE)) //RUTGMC EDIT - owner.balloon_alert(owner, "Interrupted!") - return - - owner.balloon_alert_to_viewers("Rooted into place!") - set_rooted(TRUE) - - -/// Proc that actually does the rooting, makes us immobile and anchors us in place. Similar to defender's fortify. -/datum/action/ability/activable/xeno/bombard/proc/set_rooted(on) - var/mob/living/carbon/xenomorph/boiler/boiler_owner = owner - if(on) - ADD_TRAIT(boiler_owner, TRAIT_IMMOBILE, BOILER_ROOTED_TRAIT) - if(boiler_owner.client) - boiler_owner.client.mouse_pointer_icon = 'icons/mecha/mecha_mouse.dmi' - else - REMOVE_TRAIT(boiler_owner, TRAIT_IMMOBILE, BOILER_ROOTED_TRAIT) - if(boiler_owner.client) - boiler_owner.client.mouse_pointer_icon = initial(boiler_owner.client.mouse_pointer_icon) +/// Signal proc for clicking at a distance +/datum/action/ability/activable/xeno/bombard/proc/on_ranged_attack(mob/living/carbon/xenomorph/X, atom/A, params) + SIGNAL_HANDLER + if(can_use_ability(A, TRUE)) + INVOKE_ASYNC(src, PROC_REF(use_ability), A) - boiler_owner.anchored = on -RU TGMC EDIT END*/ +/mob/living/carbon/xenomorph/boiler/Moved(atom/OldLoc,Dir) + . = ..() + if(selected_ability?.type == /datum/action/ability/activable/xeno/bombard) + var/datum/action/ability/activable/bomb = actions_by_path[/datum/action/ability/activable/xeno/bombard] + bomb.on_deselection() + selected_ability.button.icon_state = "template" + selected_ability = null + update_action_button_icons() + +/// Set the boiler's mouse cursor to the green firing cursor. +/mob/living/carbon/xenomorph/boiler/proc/set_bombard_pointer() + if(client) + client.mouse_pointer_icon = 'icons/mecha/mecha_mouse.dmi' + +/// Resets the boiler's mouse cursor to the default cursor. +/mob/living/carbon/xenomorph/boiler/proc/reset_bombard_pointer() + if(client) + client.mouse_pointer_icon = initial(client.mouse_pointer_icon) // *************************************** // *********** Acid spray // *************************************** /datum/action/ability/activable/xeno/spray_acid/line/boiler cooldown_duration = 9 SECONDS - use_state_flags = ABILITY_USE_ROOTED diff --git a/code/modules/mob/living/carbon/xenomorph/castes/boiler/boiler.dm b/code/modules/mob/living/carbon/xenomorph/castes/boiler/boiler.dm index 09ec7333e25c7..f3066d36cd865 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/boiler/boiler.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/boiler/boiler.dm @@ -48,16 +48,6 @@ RU TGMC EDIT */ ammo = GLOB.ammo_list[/datum/ammo/xeno/boiler_gas/corrosive] // RU TGMC EDIT update_boiler_glow() RegisterSignal(src, COMSIG_XENOMORPH_GIBBING, PROC_REF(gib_explode)) -/* RUTGMC EDIT BEGIN - RegisterSignal(src, COMSIG_MOB_STAT_CHANGED, PROC_REF(on_stat_change)) - RegisterSignals(src, list(COMSIG_LIVING_STATUS_STUN, - COMSIG_LIVING_STATUS_KNOCKDOWN, - COMSIG_LIVING_STATUS_PARALYZE, - COMSIG_LIVING_STATUS_IMMOBILIZE, - COMSIG_LIVING_STATUS_UNCONSCIOUS, - COMSIG_LIVING_STATUS_SLEEP, - COMSIG_LIVING_STATUS_STAGGER), PROC_REF(on_stun)) -RUTGMC EDIT END*/ // *************************************** // *********** Gibbing behaviour @@ -68,20 +58,3 @@ RUTGMC EDIT END*/ smoke.set_up(2, get_turf(src)) smoke.start() -/* RUTGMC EDIT BEGIN -/// Handles boilers changing stat, you unroot yourself if you change stat, like going from conscious to unconscious -/mob/living/carbon/xenomorph/boiler/proc/on_stat_change(datum/source, old_state, new_state) - SIGNAL_HANDLER - var/datum/action/ability/activable/xeno/bombard/bombard_action = actions_by_path[/datum/action/ability/activable/xeno/bombard] - if(HAS_TRAIT_FROM(src, TRAIT_IMMOBILE, BOILER_ROOTED_TRAIT)) - bombard_action.set_rooted(FALSE) - -/// Handles getting staggered, stunned and other various debuffs -/mob/living/carbon/xenomorph/boiler/proc/on_stun(datum/source, amount) - SIGNAL_HANDLER - if(!(amount > 0) || !HAS_TRAIT_FROM(src, TRAIT_IMMOBILE, BOILER_ROOTED_TRAIT)) - return - var/datum/action/ability/activable/xeno/bombard/bombard_action = actions_by_path[/datum/action/ability/activable/xeno/bombard] - balloon_alert_to_viewers("[src] scrambles out of the ground from the impact!") - bombard_action.set_rooted(FALSE) -RUTGMC EDIT END */ diff --git a/code/modules/mob/living/carbon/xenomorph/castes/boiler/castedatum_boiler.dm b/code/modules/mob/living/carbon/xenomorph/castes/boiler/castedatum_boiler.dm index 113fc5ef2005c..f3db8f70d23b7 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/boiler/castedatum_boiler.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/boiler/castedatum_boiler.dm @@ -52,7 +52,7 @@ RU TGMC EDIT */ // *** Boiler Abilities *** // max_ammo = 7 bomb_strength = 1.3 //Multiplier to the effectiveness of the boiler glob. - bomb_delay = 27 SECONDS + bomb_delay = 32 SECONDS acid_spray_duration = 10 SECONDS acid_spray_damage = 16 diff --git a/code/modules/mob/living/carbon/xenomorph/castes/bull/abilities_bull.dm b/code/modules/mob/living/carbon/xenomorph/castes/bull/abilities_bull.dm index 7908d22e02b9d..3a2e1ce82cec6 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/bull/abilities_bull.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/bull/abilities_bull.dm @@ -65,7 +65,7 @@ charge_duration = addtimer(CALLBACK(src, PROC_REF(acid_charge_deactivate)), 2 SECONDS, TIMER_UNIQUE|TIMER_STOPPABLE|TIMER_OVERRIDE) RegisterSignals(X, list(COMSIG_LIVING_STATUS_PARALYZE, COMSIG_LIVING_STATUS_STAGGER), PROC_REF(acid_charge_deactivate)) RegisterSignal(X, COMSIG_MOVABLE_MOVED, PROC_REF(acid_puddle)) - X.icon_state = "[X.xeno_caste.caste_name][X.is_a_rouny ? " rouny" : ""] Charging" + X.icon_state = "[X.xeno_caste.caste_name][(X.xeno_flags & XENO_ROUNY) ? " rouny" : ""] Charging" succeed_activate() add_cooldown() @@ -117,7 +117,7 @@ RegisterSignals(X, list(COMSIG_LIVING_STATUS_PARALYZE, COMSIG_LIVING_STATUS_STAGGER), PROC_REF(headbutt_charge_deactivate)) RegisterSignal(X, COMSIG_XENOMORPH_ATTACK_LIVING, PROC_REF(bull_charge_slash)) RegisterSignal(X, COMSIG_MOVABLE_MOVED, PROC_REF(afterimage)) - X.icon_state = "[X.xeno_caste.caste_name][X.is_a_rouny ? " rouny" : ""] Charging" + X.icon_state = "[X.xeno_caste.caste_name][(X.xeno_flags & XENO_ROUNY) ? " rouny" : ""] Charging" succeed_activate() add_cooldown() @@ -184,7 +184,7 @@ RegisterSignals(X, list(COMSIG_LIVING_STATUS_PARALYZE, COMSIG_LIVING_STATUS_STAGGER), PROC_REF(gore_charge_deactivate)) RegisterSignal(X, COMSIG_XENOMORPH_ATTACK_LIVING, PROC_REF(bull_charge_slash)) RegisterSignal(X, COMSIG_MOVABLE_MOVED, PROC_REF(afterimage)) - X.icon_state = "[X.xeno_caste.caste_name][X.is_a_rouny ? " rouny" : ""] Charging" + X.icon_state = "[X.xeno_caste.caste_name][(X.xeno_flags & XENO_ROUNY) ? " rouny" : ""] Charging" succeed_activate() add_cooldown() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/bull/bull.dm b/code/modules/mob/living/carbon/xenomorph/castes/bull/bull.dm index 329dd2101d41d..145d6b4698e7b 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/bull/bull.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/bull/bull.dm @@ -10,6 +10,7 @@ plasma_stored = 200 tier = XENO_TIER_TWO upgrade = XENO_UPGRADE_NORMAL + mob_size = MOB_SIZE_BIG pixel_x = -16 pixel_y = -3 @@ -19,7 +20,7 @@ /mob/living/carbon/xenomorph/bull/handle_special_state() if(is_charging >= CHARGE_ON) - icon_state = "[xeno_caste.caste_name][is_a_rouny ? " rouny" : ""] Charging" + icon_state = "[xeno_caste.caste_name][(xeno_flags & XENO_ROUNY) ? " rouny" : ""] Charging" return TRUE return FALSE diff --git a/code/modules/mob/living/carbon/xenomorph/castes/bull/castedatum_bull.dm b/code/modules/mob/living/carbon/xenomorph/castes/bull/castedatum_bull.dm index 5207c1a34d23e..b0220eb95ea61 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/bull/castedatum_bull.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/bull/castedatum_bull.dm @@ -25,10 +25,6 @@ evolution_threshold = 225 // upgrade_threshold = TIER_TWO_THRESHOLD // RUTGMC DELETION - evolves_to = list( - /mob/living/carbon/xenomorph/crusher, - /mob/living/carbon/xenomorph/behemoth, - ) deevolves_to = list( /mob/living/carbon/xenomorph/runner, ) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/carrier/abilities_carrier.dm b/code/modules/mob/living/carbon/xenomorph/castes/carrier/abilities_carrier.dm index 56e1fa74dd775..e9c8392eb83e5 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/carrier/abilities_carrier.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/carrier/abilities_carrier.dm @@ -1,14 +1,16 @@ #define LARVAL_HUGGER "larval hugger" #define CLAWED_HUGGER "clawed hugger" -#define NEURO_HUGGER "neuro hugger" +#define NEURO_HUGGER "neurotoxin hugger" #define ACID_HUGGER "acid hugger" #define RESIN_HUGGER "resin hugger" +#define OZELOMELYN_HUGGER "ozelomelyn hugger" //List of huggie types GLOBAL_LIST_INIT(hugger_type_list, list( /obj/item/clothing/mask/facehugger/larval, /obj/item/clothing/mask/facehugger/combat/slash, -// /obj/item/clothing/mask/facehugger/combat/neuro, RU TGMC EDIT + /obj/item/clothing/mask/facehugger/combat/chem_injector/neuro, + /obj/item/clothing/mask/facehugger/combat/chem_injector/ozelomelyn, /obj/item/clothing/mask/facehugger/combat/acid, /obj/item/clothing/mask/facehugger/combat/resin, )) @@ -16,7 +18,8 @@ GLOBAL_LIST_INIT(hugger_type_list, list( GLOBAL_LIST_INIT(hugger_to_ammo, list( /obj/item/clothing/mask/facehugger/larval = /datum/ammo/xeno/hugger, /obj/item/clothing/mask/facehugger/combat/slash = /datum/ammo/xeno/hugger/slash, -// /obj/item/clothing/mask/facehugger/combat/neuro = /datum/ammo/xeno/hugger/neuro, RU TGMC EDIT + /obj/item/clothing/mask/facehugger/combat/chem_injector/neuro = /datum/ammo/xeno/hugger/neuro, + /obj/item/clothing/mask/facehugger/combat/chem_injector/ozelomelyn = /datum/ammo/xeno/hugger/ozelomelyn, /obj/item/clothing/mask/facehugger/combat/acid = /datum/ammo/xeno/hugger/acid, /obj/item/clothing/mask/facehugger/combat/resin = /datum/ammo/xeno/hugger/resin, )) @@ -25,7 +28,8 @@ GLOBAL_LIST_INIT(hugger_to_ammo, list( GLOBAL_LIST_INIT(hugger_images_list, list( LARVAL_HUGGER = image('icons/Xeno/actions.dmi', icon_state = LARVAL_HUGGER), CLAWED_HUGGER = image('icons/Xeno/actions.dmi', icon_state = CLAWED_HUGGER), -// NEURO_HUGGER = image('icons/Xeno/actions.dmi', icon_state = NEURO_HUGGER ), RU TGMC EDIT + NEURO_HUGGER = image('icons/Xeno/actions.dmi', icon_state = NEURO_HUGGER), + OZELOMELYN_HUGGER = image('icons/Xeno/actions.dmi', icon_state = OZELOMELYN_HUGGER), ACID_HUGGER = image('icons/Xeno/actions.dmi', icon_state = ACID_HUGGER), RESIN_HUGGER = image('icons/Xeno/actions.dmi', icon_state = RESIN_HUGGER), )) @@ -115,6 +119,7 @@ GLOBAL_LIST_INIT(hugger_images_list, list( keybinding_signals = list( KEYBINDING_NORMAL = COMSIG_XENOABILITY_PLACE_TRAP, ) + use_state_flags = ABILITY_USE_LYING /datum/action/ability/xeno_action/place_trap/can_use_action(silent = FALSE, override_flags) . = ..() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/carrier/castedatum_carrier.dm b/code/modules/mob/living/carbon/xenomorph/castes/carrier/castedatum_carrier.dm index 84c915d125bf9..eaeb9ae6d3b73 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/carrier/castedatum_carrier.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/carrier/castedatum_carrier.dm @@ -29,8 +29,6 @@ deevolves_to = /mob/living/carbon/xenomorph/drone - //evolves_to = list(/mob/living/carbon/xenomorph/defiler, /mob/living/carbon/xenomorph/widow) // RUTGMC DELETION, WIDOW DELETION, moved to modular - // *** Flags *** // caste_flags = CASTE_EVOLUTION_ALLOWED can_hold_eggs = CAN_HOLD_ONE_HAND diff --git a/code/modules/mob/living/carbon/xenomorph/castes/crusher/abilities_crusher.dm b/code/modules/mob/living/carbon/xenomorph/castes/crusher/abilities_crusher.dm index 47d1e2b4e19fc..b21ee6269e1ac 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/crusher/abilities_crusher.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/crusher/abilities_crusher.dm @@ -26,7 +26,7 @@ X.create_stomp() //Adds the visual effect. Wom wom wom for(var/mob/living/M in range(1, get_turf(X))) - if(X.issamexenohive(M) || M.stat == DEAD || isnestedhost(M)) + if(X.issamexenohive(M) || M.stat == DEAD || isnestedhost(M) || !X.Adjacent(M)) continue var/distance = get_dist(M, X) var/damage = X.xeno_caste.stomp_damage/max(1, distance + 1) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/crusher/castedatum_crusher.dm b/code/modules/mob/living/carbon/xenomorph/castes/crusher/castedatum_crusher.dm index 22048c18a588d..4b1c90adaf1f9 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/crusher/castedatum_crusher.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/crusher/castedatum_crusher.dm @@ -30,11 +30,14 @@ // *** Flags *** // can_flags = CASTE_CAN_BE_QUEEN_HEALED|CASTE_CAN_BE_GIVEN_PLASMA|CASTE_CAN_BE_LEADER - caste_traits = null + caste_traits = list(TRAIT_STOPS_TANK_COLLISION) // *** Defense *** // soft_armor = list(MELEE = 90, BULLET = 75, LASER = 75, ENERGY = 75, BOMB = 130, BIO = 100, FIRE = 40, ACID = 100) + // *** Sunder *** // + sunder_multiplier = 0.7 + // *** Minimap Icon *** // minimap_icon = "crusher" diff --git a/code/modules/mob/living/carbon/xenomorph/castes/crusher/crusher.dm b/code/modules/mob/living/carbon/xenomorph/castes/crusher/crusher.dm index f92b62b98ebaa..df9cb370c33a7 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/crusher/crusher.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/crusher/crusher.dm @@ -22,7 +22,7 @@ /mob/living/carbon/xenomorph/crusher/handle_special_state() if(is_charging >= CHARGE_ON) - icon_state = "[xeno_caste.caste_name][is_a_rouny ? " rouny" : ""] Charging" + icon_state = "[xeno_caste.caste_name][(xeno_flags & XENO_ROUNY) ? " rouny" : ""] Charging" return TRUE return FALSE diff --git a/code/modules/mob/living/carbon/xenomorph/castes/defender/abilities_defender.dm b/code/modules/mob/living/carbon/xenomorph/castes/defender/abilities_defender.dm index c4c82237c7f49..f28ff29214271 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/defender/abilities_defender.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/defender/abilities_defender.dm @@ -42,7 +42,7 @@ //RU TGMC GRENADE TURF THROW END for (var/mob/living/carbon/human/H in L) - if(H.stat == DEAD) + if(H.stat == DEAD || !X.Adjacent(H)) continue H.add_filter("defender_tail_sweep", 2, gauss_blur_filter(1)) //Add cool SFX; motion blur addtimer(CALLBACK(H, TYPE_PROC_REF(/atom, remove_filter), "defender_tail_sweep"), 0.5 SECONDS) //Remove cool SFX @@ -138,6 +138,7 @@ . = TRUE if(living_target.stat || isxeno(living_target) || !(iscarbon(living_target))) //we leap past xenos return + var/mob/living/carbon/xenomorph/xeno_owner = owner var/mob/living/carbon/carbon_victim = living_target var/extra_dmg = xeno_owner.xeno_caste.melee_damage * xeno_owner.xeno_melee_damage_modifier * 0.5 // 50% dmg reduction @@ -154,7 +155,6 @@ action_activate() LAZYINCREMENT(owner.do_actions, target) addtimer(CALLBACK(src, PROC_REF(decrease_do_action), target), windup_time) - return TRUE ///Decrease the do_actions of the owner /datum/action/ability/activable/xeno/charge/forward_charge/proc/decrease_do_action(atom/target) @@ -306,6 +306,7 @@ SSblackbox.record_feedback("tally", "round_statistics", 1, "defender_fortifiy_toggles") if(on) ADD_TRAIT(X, TRAIT_IMMOBILE, FORTIFY_TRAIT) + ADD_TRAIT(X, TRAIT_STOPS_TANK_COLLISION, FORTIFY_TRAIT) if(!silent) to_chat(X, span_xenowarning("We tuck ourselves into a defensive stance.")) X.soft_armor = X.soft_armor.modifyAllRatings(last_fortify_bonus) @@ -316,6 +317,7 @@ X.soft_armor = X.soft_armor.modifyAllRatings(-last_fortify_bonus) X.soft_armor = X.soft_armor.modifyRating(BOMB = -last_fortify_bonus) REMOVE_TRAIT(X, TRAIT_IMMOBILE, FORTIFY_TRAIT) + REMOVE_TRAIT(X, TRAIT_STOPS_TANK_COLLISION, FORTIFY_TRAIT) X.fortify = on X.anchored = on diff --git a/code/modules/mob/living/carbon/xenomorph/castes/defender/castedatum_defender.dm b/code/modules/mob/living/carbon/xenomorph/castes/defender/castedatum_defender.dm index 77a3012fb0e78..775ac326909e7 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/defender/castedatum_defender.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/defender/castedatum_defender.dm @@ -26,13 +26,7 @@ // *** Evolution *** // evolution_threshold = 100 // upgrade_threshold = TIER_ONE_THRESHOLD // RUTGMC DELETION -/* RU TGMC EDIT - evolves_to = list( - /mob/living/carbon/xenomorph/warrior, - /mob/living/carbon/xenomorph/bull, - /mob/living/carbon/xenomorph/puppeteer, - ) -RU TGMC EDIT*/ + // *** Flags *** // caste_flags = CASTE_EVOLUTION_ALLOWED can_flags = CASTE_CAN_BE_QUEEN_HEALED|CASTE_CAN_BE_GIVEN_PLASMA|CASTE_CAN_BE_LEADER diff --git a/code/modules/mob/living/carbon/xenomorph/castes/defender/defender.dm b/code/modules/mob/living/carbon/xenomorph/castes/defender/defender.dm index d462099bec20e..e23a5e1d1a2a2 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/defender/defender.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/defender/defender.dm @@ -19,10 +19,10 @@ // *************************************** /mob/living/carbon/xenomorph/defender/handle_special_state() if(fortify) - icon_state = "[xeno_caste.caste_name][is_a_rouny ? " rouny" : ""] Fortify" + icon_state = "[xeno_caste.caste_name][(xeno_flags & XENO_ROUNY) ? " rouny" : ""] Fortify" return TRUE if(crest_defense) - icon_state = "[xeno_caste.caste_name][is_a_rouny ? " rouny" : ""] Crest" + icon_state = "[xeno_caste.caste_name][(xeno_flags & XENO_ROUNY) ? " rouny" : ""] Crest" return TRUE return FALSE diff --git a/code/modules/mob/living/carbon/xenomorph/castes/defiler/abilities_defiler.dm b/code/modules/mob/living/carbon/xenomorph/castes/defiler/abilities_defiler.dm index ed117606f630d..5bfbce8b478fc 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/defiler/abilities_defiler.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/defiler/abilities_defiler.dm @@ -191,16 +191,16 @@ X.emitting_gas = TRUE //We gain bump movement immunity while we're emitting gas. - X.icon_state = "[X.xeno_caste.caste_name][X.is_a_rouny ? " rouny" : ""] Power Up" + X.icon_state = "[X.xeno_caste.caste_name][(X.xeno_flags & XENO_ROUNY) ? " rouny" : ""] Power Up" if(!do_after(X, DEFILER_GAS_CHANNEL_TIME, NONE, null, BUSY_ICON_HOSTILE)) if(!QDELETED(src)) to_chat(X, span_xenodanger("We abort emitting fumes, our expended plasma resulting in nothing.")) X.emitting_gas = FALSE - X.icon_state = "[X.xeno_caste.caste_name][X.is_a_rouny ? " rouny" : ""] Running" + X.icon_state = "[X.xeno_caste.caste_name][(X.xeno_flags & XENO_ROUNY) ? " rouny" : ""] Running" return fail_activate() X.emitting_gas = FALSE - X.icon_state = "[X.xeno_caste.caste_name][X.is_a_rouny ? " rouny" : ""] Running" + X.icon_state = "[X.xeno_caste.caste_name][(X.xeno_flags & XENO_ROUNY) ? " rouny" : ""] Running" add_cooldown() succeed_activate() @@ -332,6 +332,11 @@ span_xenodanger("Our stinger retracts, leaving the egg and little one alive.")) return fail_activate() + if(alien_egg.maturity_stage != alien_egg.stage_ready_to_burst) + alien_egg.balloon_alert(X, "Egg not mature") + return fail_activate() + + alien_egg.balloon_alert_to_viewers("Injected") succeed_activate() add_cooldown() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/drone/abilities_drone.dm b/code/modules/mob/living/carbon/xenomorph/castes/drone/abilities_drone.dm index 2bde8ec324b16..801426cbfbafc 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/drone/abilities_drone.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/drone/abilities_drone.dm @@ -23,6 +23,8 @@ KEYBINDING_NORMAL = COMSIG_XENOABILITY_ESSENCE_LINK, KEYBINDING_ALTERNATE = COMSIG_XENOABILITY_ESSENCE_LINK_REMOVE, ) + use_state_flags = ABILITY_USE_LYING + /// Used to determine whether there is an existing Essence Link or not. Also allows access to its vars. var/datum/status_effect/stacking/essence_link/existing_link /// The target of an existing link, if applicable. @@ -146,7 +148,7 @@ KEYBINDING_NORMAL = COMSIG_XENOABILITY_ENHANCEMENT, ) /// References Essence Link and its vars. - var/datum/action/ability/activable/xeno/essence_link/essence_link_action + var/datum/action/ability/activable/xeno/essence_link/essence_link_action //todo: All this link stuff is handled in a stinky way /// Used to determine whether Enhancement is already active or not. Also allows access to its vars. var/datum/status_effect/drone_enhancement/existing_enhancement /// Damage bonus given by this ability. @@ -154,12 +156,14 @@ /// Speed bonus given by this ability. var/speed_addition = -0.4 +/datum/action/ability/xeno_action/enhancement/New(Target) + . = ..() + INVOKE_NEXT_TICK(src, PROC_REF(link_essence_action)) + /datum/action/ability/xeno_action/enhancement/can_use_action() - var/mob/living/carbon/xenomorph/X = owner - essence_link_action = X.actions_by_path[/datum/action/ability/activable/xeno/essence_link] if(existing_enhancement) return TRUE - if(!HAS_TRAIT(X, TRAIT_ESSENCE_LINKED)) + if(!HAS_TRAIT(owner, TRAIT_ESSENCE_LINKED)) return FALSE if(!essence_link_action.existing_link.was_within_range) return FALSE @@ -176,6 +180,21 @@ existing_enhancement = essence_link_action.linked_target.has_status_effect(STATUS_EFFECT_XENO_ENHANCEMENT) succeed_activate() +///Links this action to +/datum/action/ability/xeno_action/enhancement/proc/link_essence_action() + if(essence_link_action) + return + var/mob/living/carbon/xenomorph/X = owner + essence_link_action = X.actions_by_path[/datum/action/ability/activable/xeno/essence_link] + if(!essence_link_action) + CRASH("[type] loaded with a drone_enhancement to link to") + RegisterSignal(essence_link_action, COMSIG_QDELETING, PROC_REF(unlink_essence_action)) + +///Signal proc to delink essence_link. Should only happen when the owner is being deleted to begin with +/datum/action/ability/xeno_action/enhancement/proc/unlink_essence_action() + SIGNAL_HANDLER + essence_link_action = null + /// Ends the ability if the Enhancement buff is removed. /datum/action/ability/xeno_action/enhancement/proc/end_ability() if(existing_enhancement) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/drone/castedatum_drone.dm b/code/modules/mob/living/carbon/xenomorph/castes/drone/castedatum_drone.dm index 2a4b74bfe720b..42862df809a06 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/drone/castedatum_drone.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/drone/castedatum_drone.dm @@ -29,15 +29,6 @@ evolution_threshold = 100 //upgrade_threshold = TIER_ONE_THRESHOLD // RUTGMC DELETION - evolves_to = list( - /mob/living/carbon/xenomorph/shrike, - /mob/living/carbon/xenomorph/queen, - /mob/living/carbon/xenomorph/king, - /mob/living/carbon/xenomorph/carrier, - /mob/living/carbon/xenomorph/hivelord, - /mob/living/carbon/xenomorph/hivemind, - ) - // *** Flags *** // caste_flags = CASTE_EVOLUTION_ALLOWED|CASTE_IS_BUILDER can_hold_eggs = CAN_HOLD_TWO_HANDS @@ -61,6 +52,8 @@ /datum/action/ability/activable/xeno/cocoon, /datum/action/ability/activable/xeno/plant_weeds, /datum/action/ability/activable/xeno/secrete_resin, + /datum/action/ability/activable/xeno/secrete_special_resin, + /datum/action/ability/xeno_action/place_acidwell, /datum/action/ability/activable/xeno/essence_link, /datum/action/ability/activable/xeno/psychic_cure/acidic_salve, /datum/action/ability/activable/xeno/transfer_plasma/drone, @@ -89,6 +82,8 @@ /datum/action/ability/activable/xeno/cocoon, /datum/action/ability/activable/xeno/plant_weeds, /datum/action/ability/activable/xeno/secrete_resin, + /datum/action/ability/activable/xeno/secrete_special_resin, + /datum/action/ability/xeno_action/place_acidwell, /datum/action/ability/activable/xeno/essence_link, /datum/action/ability/activable/xeno/psychic_cure/acidic_salve, /datum/action/ability/activable/xeno/transfer_plasma/drone, diff --git a/code/modules/mob/living/carbon/xenomorph/castes/gorger/abilities_gorger.dm b/code/modules/mob/living/carbon/xenomorph/castes/gorger/abilities_gorger.dm index a6c35adaf7e8a..34b9b364e9b45 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/gorger/abilities_gorger.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/gorger/abilities_gorger.dm @@ -243,46 +243,53 @@ return can_use_ability(target, TRUE) // *************************************** -// *********** Rejuvenate +// *********** oppose // *************************************** -#define REJUVENATE_MISCLICK_CD "rejuvenate_misclick" -/datum/action/ability/activable/xeno/rejuvenate - name = "Rejuvenate" + +/datum/action/ability/activable/xeno/oppose + name = "Oppose" action_icon_state = "rejuvenation" - desc = "Drains blood continuosly, slows you down and reduces damage taken, while restoring some health over time. Cancel by activating again." - cooldown_duration = 4 SECONDS - ability_cost = GORGER_REJUVENATE_COST - target_flags = ABILITY_MOB_TARGET + desc = "Violently suffuse the nearby ground with stored blood, staggering nearby marines and healing nearby xenomorphs." + cooldown_duration = 30 SECONDS + ability_cost = GORGER_OPPOSE_COST keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_REJUVENATE, + KEYBINDING_NORMAL = COMSIG_XENOABILITY_OPPOSE, ) keybind_flags = ABILITY_KEYBIND_USE_ABILITY - use_state_flags = ABILITY_USE_STAGGERED -/datum/action/ability/activable/xeno/rejuvenate/can_use_ability(atom/A, silent, override_flags) - . = ..() - if(!.) - return - if(TIMER_COOLDOWN_CHECK(owner, REJUVENATE_MISCLICK_CD)) - return FALSE - -/datum/action/ability/activable/xeno/rejuvenate/use_ability(atom/A) +/datum/action/ability/activable/xeno/oppose/use_ability(atom/A) . = ..() var/mob/living/carbon/xenomorph/owner_xeno = owner - if(owner_xeno.has_status_effect(STATUS_EFFECT_XENO_REJUVENATE)) - owner_xeno.remove_status_effect(STATUS_EFFECT_XENO_REJUVENATE) - add_cooldown() - return - owner_xeno.apply_status_effect(STATUS_EFFECT_XENO_REJUVENATE, GORGER_REJUVENATE_DURATION, owner_xeno.maxHealth * GORGER_REJUVENATE_THRESHOLD) - to_chat(owner_xeno, span_notice("We tap into our reserves for nourishment, our carapace thickening.")) + add_cooldown() succeed_activate() - TIMER_COOLDOWN_START(owner_xeno, REJUVENATE_MISCLICK_CD, 1 SECONDS) -/datum/action/ability/activable/xeno/rejuvenate/ai_should_use(atom/target) + playsound(owner_xeno.loc, 'sound/effects/bang.ogg', 25, 0) + owner_xeno.visible_message(span_xenodanger("[owner_xeno] smashes her fists into the ground into the ground!"), \ + span_xenodanger("We smash our fists into the ground!")) + owner_xeno.create_stomp() //Adds the visual effect. Wom wom wom + for(var/mob/living/M in range(3)) + if(M.stat == DEAD) + continue + var/distance = get_dist(M, owner_xeno) + if(owner_xeno.issamexenohive(M)) //Xenos can be healed up to three tiles away from you + var/mob/living/carbon/xenomorph/target_xeno = M + var/heal_amount = M.maxHealth * GORGER_OPPOSE_HEAL + HEAL_XENO_DAMAGE(target_xeno, heal_amount, FALSE) + adjustOverheal(target_xeno, heal_amount) + else if(distance == 0) //if we're right on top of them, they take actual damage + M.take_overall_damage(12, BRUTE, MELEE, updating_health = TRUE, max_limbs = 3) + to_chat(M, span_highdanger("[owner_xeno] slams her fists into you, crushing you to the ground!")) + shake_camera(M, 3, 3) + else if(distance <= 1) //marines will only be staggerslowed if they're one tile away from you + shake_camera(M, 2, 2) + to_chat(M, span_highdanger("Blood swells up from the ground around you!")) + M.adjust_stagger(2 SECONDS) + M.adjust_slowdown(3) + + +/datum/action/ability/activable/xeno/oppose/ai_should_use(atom/target) return FALSE -#undef REJUVENATE_MISCLICK_CD - // *************************************** // *********** Psychic Link // *************************************** diff --git a/code/modules/mob/living/carbon/xenomorph/castes/gorger/castedatum_gorger.dm b/code/modules/mob/living/carbon/xenomorph/castes/gorger/castedatum_gorger.dm index 972f8e6dc3ad3..1e3fc46bdb3a5 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/gorger/castedatum_gorger.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/gorger/castedatum_gorger.dm @@ -75,7 +75,7 @@ /datum/action/ability/activable/xeno/psychic_link, /datum/action/ability/activable/xeno/drain, /datum/action/ability/activable/xeno/transfusion, - /datum/action/ability/activable/xeno/rejuvenate, + /datum/action/ability/activable/xeno/oppose, /datum/action/ability/activable/xeno/carnage, /datum/action/ability/activable/xeno/feast, /datum/action/ability/activable/xeno/devour, diff --git a/code/modules/mob/living/carbon/xenomorph/castes/hivelord/abilities_hivelord.dm b/code/modules/mob/living/carbon/xenomorph/castes/hivelord/abilities_hivelord.dm index 7dd72944b86d0..efd4fe1ab14e0 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/hivelord/abilities_hivelord.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/hivelord/abilities_hivelord.dm @@ -245,6 +245,7 @@ keybinding_signals = list( KEYBINDING_NORMAL = COMSIG_XENOABILITY_PLACE_JELLY_POD, ) + use_state_flags = ABILITY_USE_LYING /datum/action/ability/xeno_action/place_jelly_pod/can_use_action(silent = FALSE, override_flags) . = ..() @@ -285,6 +286,7 @@ keybinding_signals = list( KEYBINDING_NORMAL = COMSIG_XENOABILITY_CREATE_JELLY, ) + use_state_flags = ABILITY_USE_LYING /datum/action/ability/xeno_action/create_jelly/can_use_action(silent = FALSE, override_flags) . = ..() @@ -298,7 +300,7 @@ /datum/action/ability/xeno_action/create_jelly/action_activate() var/obj/item/resin_jelly/jelly = new(owner.loc) owner.put_in_hands(jelly) - to_chat(owner, span_xenonotice("We create a globule of resin from our ovipostor.")) // Ewww... + to_chat(owner, span_xenonotice("We create a globule of resin from our ovipositor.")) // Ewww... add_cooldown() succeed_activate() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/hivelord/castedatum_hivelord.dm b/code/modules/mob/living/carbon/xenomorph/castes/hivelord/castedatum_hivelord.dm index f685211178887..f6250736921e0 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/hivelord/castedatum_hivelord.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/hivelord/castedatum_hivelord.dm @@ -30,8 +30,6 @@ deevolves_to = /mob/living/carbon/xenomorph/drone - evolves_to = list(/mob/living/carbon/xenomorph/defiler, /mob/living/carbon/xenomorph/gorger) - // *** Flags *** // caste_flags = CASTE_EVOLUTION_ALLOWED|CASTE_IS_BUILDER can_hold_eggs = CAN_HOLD_TWO_HANDS @@ -64,6 +62,7 @@ /datum/action/ability/activable/xeno/healing_infusion, /datum/action/ability/xeno_action/place_acidwell, /datum/action/ability/activable/xeno/secrete_resin/hivelord, + /datum/action/ability/activable/xeno/secrete_special_resin, /datum/action/ability/xeno_action/blessing_menu, /datum/action/ability/activable/xeno/transfer_plasma/improved, /datum/action/ability/activable/xeno/corrosive_acid, @@ -99,6 +98,7 @@ /datum/action/ability/activable/xeno/healing_infusion, /datum/action/ability/xeno_action/place_acidwell, /datum/action/ability/activable/xeno/secrete_resin/hivelord, + /datum/action/ability/activable/xeno/secrete_special_resin, /datum/action/ability/xeno_action/blessing_menu, /datum/action/ability/activable/xeno/transfer_plasma/improved, /datum/action/ability/activable/xeno/corrosive_acid/strong, diff --git a/code/modules/mob/living/carbon/xenomorph/castes/hivemind/abilities_hivemind.dm b/code/modules/mob/living/carbon/xenomorph/castes/hivemind/abilities_hivemind.dm index d4fdd73138353..6d716dbd46e78 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/hivemind/abilities_hivemind.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/hivemind/abilities_hivemind.dm @@ -13,6 +13,11 @@ return FALSE return ..() +/datum/action/ability/activable/xeno/secrete_special_resin/hivemind/can_use_action(silent = FALSE, override_flags, selecting = FALSE) + if (owner.status_flags & INCORPOREAL) + return FALSE + return ..() + /datum/action/ability/xeno_action/change_form name = "Change form" action_icon_state = "manifest" diff --git a/code/modules/mob/living/carbon/xenomorph/castes/hivemind/castedatum_hivemind.dm b/code/modules/mob/living/carbon/xenomorph/castes/hivemind/castedatum_hivemind.dm index c89a1c1b0fa78..32fff1412c34f 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/hivemind/castedatum_hivemind.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/hivemind/castedatum_hivemind.dm @@ -58,6 +58,7 @@ /datum/action/ability/xeno_action/pheromones/emit_warding, /datum/action/ability/xeno_action/pheromones/emit_frenzy, /datum/action/ability/activable/xeno/secrete_resin/hivemind, + /datum/action/ability/activable/xeno/secrete_special_resin/hivemind, ) /datum/xeno_caste/hivemind/on_caste_applied(mob/xenomorph) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/hivemind/hivemind.dm b/code/modules/mob/living/carbon/xenomorph/castes/hivemind/hivemind.dm index 63992f3c2f1ae..f3f9fa7da75ad 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/hivemind/hivemind.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/hivemind/hivemind.dm @@ -119,7 +119,7 @@ setDir(SOUTH) addtimer(CALLBACK(src, PROC_REF(do_change_form)), TIME_TO_TRANSFORM) -/mob/living/carbon/xenomorph/hivemind/set_jump_component(duration = 0.5 SECONDS, cooldown = 2 SECONDS, cost = 0, height = 16, sound = null, flags = JUMP_SHADOW, flags_pass = PASS_LOW_STRUCTURE|PASS_FIRE) +/mob/living/carbon/xenomorph/hivemind/set_jump_component(duration = 0.5 SECONDS, cooldown = 2 SECONDS, cost = 0, height = 16, sound = null, flags = JUMP_SHADOW, pass_flags = PASS_LOW_STRUCTURE|PASS_FIRE|PASS_TANK) return //no jumping, bad hivemind ///Finish the form changing of the hivemind and give the needed stats @@ -248,6 +248,7 @@ /// handles hivemind updating with their respective weedtype /mob/living/carbon/xenomorph/hivemind/update_icon_state() + . = ..() if(status_flags & INCORPOREAL) icon_state = "hivemind_marker" return @@ -352,17 +353,17 @@ //hivemind cores -/obj/structure/xeno/hivemindcore/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(isxenoqueen(X)) - var/choice = tgui_alert(X, "Are you sure you want to destroy the hivemind?", "Destroy hivemind", list("Yes", "Cancel")) +/obj/structure/xeno/hivemindcore/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(isxenoqueen(xeno_attacker)) + var/choice = tgui_alert(xeno_attacker, "Are you sure you want to destroy the hivemind?", "Destroy hivemind", list("Yes", "Cancel")) if(choice == "Yes") deconstruct(FALSE) return - X.visible_message(span_danger("[X] nudges its head against [src]."), \ + xeno_attacker.visible_message(span_danger("[xeno_attacker] nudges its head against [src]."), \ span_danger("You nudge your head against [src].")) -/obj/structure/xeno/hivemindcore/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir, armour_penetration) +/obj/structure/xeno/hivemindcore/take_damage(damage_amount, damage_type = BRUTE, armor_type = null, effects = TRUE, attack_dir, armour_penetration = 0, mob/living/blame_mob) . = ..() var/mob/living/carbon/xenomorph/hivemind/our_parent = get_parent() if(isnull(our_parent)) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/hunter/abilities_hunter.dm b/code/modules/mob/living/carbon/xenomorph/castes/hunter/abilities_hunter.dm index 1c98d43adf82d..256f511c2d283 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/hunter/abilities_hunter.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/hunter/abilities_hunter.dm @@ -1,4 +1,4 @@ -/* RU TGMC EDIT + // *************************************** // *********** Stealth // *************************************** @@ -212,8 +212,6 @@ keybinding_signals = list( KEYBINDING_NORMAL = COMSIG_XENOABILITY_TOGGLE_DISGUISE, ) - ///the regular appearance of the hunter - var/old_appearance /datum/action/ability/xeno_action/stealth/disguise/action_activate() if(stealth) @@ -230,33 +228,28 @@ if(ishuman(mark.marked_target)) to_chat(owner, "You cannot turn into a human!") return - old_appearance = xenoowner.appearance - ADD_TRAIT(xenoowner, TRAIT_MOB_ICON_UPDATE_BLOCKED, STEALTH_TRAIT) + var/image/disguised_icon = image(icon = mark.marked_target.icon, icon_state = mark.marked_target.icon_state, loc = owner) + disguised_icon.override = TRUE + xenoowner.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/everyone, "hunter_disguise", disguised_icon) + ADD_TRAIT(xenoowner, TRAIT_XENOMORPH_INVISIBLE_BLOOD, STEALTH_TRAIT) xenoowner.update_wounds() return ..() /datum/action/ability/xeno_action/stealth/disguise/cancel_stealth() . = ..() - owner.appearance = old_appearance - REMOVE_TRAIT(owner, TRAIT_MOB_ICON_UPDATE_BLOCKED, STEALTH_TRAIT) var/mob/living/carbon/xenomorph/xenoowner = owner + REMOVE_TRAIT(xenoowner, TRAIT_XENOMORPH_INVISIBLE_BLOOD, STEALTH_TRAIT) + xenoowner.remove_alt_appearance("hunter_disguise") xenoowner.update_wounds() /datum/action/ability/xeno_action/stealth/disguise/handle_stealth() var/mob/living/carbon/xenomorph/xenoowner = owner - var/datum/action/ability/activable/xeno/hunter_mark/mark = xenoowner.actions_by_path[/datum/action/ability/activable/xeno/hunter_mark] - var/old_layer = xenoowner.layer - xenoowner.appearance = mark.marked_target.appearance - //Retaining old rendering layer to prevent rendering under objects. - xenoowner.layer = old_layer - xenoowner.underlays.Cut() if(owner.last_move_intent >= world.time - HUNTER_STEALTH_STEALTH_DELAY) xenoowner.use_plasma(owner.m_intent == MOVE_INTENT_WALK ? HUNTER_STEALTH_WALK_PLASMADRAIN : HUNTER_STEALTH_RUN_PLASMADRAIN) //If we have 0 plasma after expending stealth's upkeep plasma, end stealth. if(!xenoowner.plasma_stored) to_chat(xenoowner, span_xenodanger("We lack sufficient plasma to remain disguised.")) cancel_stealth() -RU TGMC EDIT */ // *************************************** // *********** Hunter's Pounce @@ -343,7 +336,6 @@ RU TGMC EDIT */ /datum/action/ability/activable/xeno/pounce/proc/trigger_pounce_effect(mob/living/living_target) playsound(get_turf(living_target), 'sound/voice/alien_pounce.ogg', 25, TRUE) var/mob/living/carbon/xenomorph/xeno_owner = owner - xeno_owner.set_throwing(FALSE) xeno_owner.Immobilize(XENO_POUNCE_STANDBY_DURATION) xeno_owner.forceMove(get_turf(living_target)) living_target.Knockdown(XENO_POUNCE_STUN_DURATION) @@ -563,7 +555,7 @@ RU TGMC EDIT */ var/swap_used = FALSE /datum/action/ability/xeno_action/mirage/remove_action() - clean_illusions() + illusions = list() //the actual illusions fade on their own, and the cooldown object may be qdel'd return ..() /datum/action/ability/xeno_action/mirage/can_use_action(silent = FALSE, override_flags) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/hunter/castedatum_hunter.dm b/code/modules/mob/living/carbon/xenomorph/castes/hunter/castedatum_hunter.dm index a8aa09aabf867..2530fbd949d6b 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/hunter/castedatum_hunter.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/hunter/castedatum_hunter.dm @@ -14,10 +14,11 @@ // *** Melee Attacks *** // melee_damage = 24 + melee_ap = 5 attack_delay = 7 // *** Speed *** // - speed = -1.4 + speed = -1.5 weeds_speed_mod = -0.1 // *** Plasma *** // @@ -31,7 +32,6 @@ evolution_threshold = 225 //upgrade_threshold = TIER_TWO_THRESHOLD // RUTGMC DELETION - //evolves_to = list(/mob/living/carbon/xenomorph/ravager, /mob/living/carbon/xenomorph/widow) // RUTGMC DELETION, WIDOW DELETION, moved to the other file deevolves_to = /mob/living/carbon/xenomorph/runner // *** Flags *** // @@ -105,6 +105,9 @@ // *** Health *** // max_health = 330 + regen_delay = 5 SECONDS + regen_ramp_amount = 0.03 + sunder_recover = 1 // *** Flags *** // caste_flags = CASTE_INNATE_HEALING|CASTE_INNATE_PLASMA_REGEN|CASTE_HIDE_IN_STATUS diff --git a/code/modules/mob/living/carbon/xenomorph/castes/king/abilities_king.dm b/code/modules/mob/living/carbon/xenomorph/castes/king/abilities_king.dm index 8650bb8bc9940..81cd14b0dfcb2 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/king/abilities_king.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/king/abilities_king.dm @@ -46,6 +46,12 @@ keybinding_signals = list( KEYBINDING_NORMAL = COMSIG_XENOABILITY_PETRIFY, ) + ///List of mobs currently petrified + var/list/mob/living/carbon/human/petrified_humans = list() + +/datum/action/ability/xeno_action/petrify/clean_action() + end_effects() + return ..() /* TGMC Delete Begin /datum/action/ability/xeno_action/petrify/action_activate() @@ -65,7 +71,6 @@ finish_charging() playsound(owner, 'sound/effects/petrify_activate.ogg', 50) - var/list/mob/living/carbon/human/humans = list() for(var/mob/living/carbon/human/human in view(PETRIFY_RANGE, owner.loc)) if(is_blind(human)) continue @@ -87,16 +92,16 @@ stone_overlay.overlays += mask human.overlays += stone_overlay - humans[human] = stone_overlay + petrified_humans[human] = stone_overlay - if(!length(humans)) + if(!length(petrified_humans)) flick("eye_closing", eye) addtimer(CALLBACK(src, PROC_REF(remove_eye), eye), 7, TIMER_CLIENT_TIME) return addtimer(CALLBACK(src, PROC_REF(remove_eye), eye), 10, TIMER_CLIENT_TIME) flick("eye_explode", eye) - addtimer(CALLBACK(src, PROC_REF(end_effects), humans), PETRIFY_DURATION) + addtimer(CALLBACK(src, PROC_REF(end_effects)), PETRIFY_DURATION) add_cooldown() succeed_activate() TGMC DELETE END*/ @@ -111,14 +116,15 @@ ADD_TRAIT(owner, TRAIT_STAGGER_RESISTANT, XENO_TRAIT) ///ends all combat-relazted effects -/datum/action/ability/xeno_action/petrify/proc/end_effects(list/humans) - for(var/mob/living/carbon/human/human AS in humans) +/datum/action/ability/xeno_action/petrify/proc/end_effects() + for(var/mob/living/carbon/human/human AS in petrified_humans) human.notransform = FALSE human.status_flags &= ~GODMODE REMOVE_TRAIT(human, TRAIT_HANDS_BLOCKED, REF(src)) human.move_resist = initial(human.move_resist) human.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, COLOR_GRAY) - human.overlays -= humans[human] + human.overlays -= petrified_humans[human] + petrified_humans.Cut() ///callback for removing the eye from viscontents /datum/action/ability/xeno_action/petrify/proc/remove_eye(obj/effect/eye) @@ -260,9 +266,9 @@ shake_camera(carbon_victim, 3 * severity, 3 * severity) carbon_victim.apply_effect(1 SECONDS, WEAKEN) to_chat(carbon_victim, "You are smashed to the ground!") - else if(ismecha(victim)) - var/obj/vehicle/sealed/mecha/mecha_victim = victim - mecha_victim.take_damage(SHATTERING_ROAR_DAMAGE * 5 * severity, BRUTE, MELEE) + else if(isvehicle(victim)) + var/obj/vehicle/veh_victim = victim + veh_victim.take_damage(SHATTERING_ROAR_DAMAGE * 5 * severity, BRUTE, MELEE) else if(istype(victim, /obj/structure/window)) var/obj/structure/window/window_victim = victim if(window_victim.damageable) @@ -331,7 +337,7 @@ . = ..() if(!.) return - if(is_ground_level(owner.z) && CHECK_BITFIELD(SSticker.mode?.flags_round_type, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.active) // RUTGMC EDIT, tad lasering + if(is_ground_level(owner.z) && CHECK_BITFIELD(SSticker.mode?.round_type_flags, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.active) // RUTGMC EDIT, tad lasering if(!silent) owner.balloon_alert(owner, "too early") return FALSE @@ -398,9 +404,9 @@ human_victim.take_overall_damage(15, BURN, updating_health = TRUE) human_victim.flash_weak_pain() animation_flash_color(human_victim) - else if(ismecha(victim)) - var/obj/vehicle/sealed/mecha/mech_victim = victim - mech_victim.take_damage(75, BURN, ENERGY, armour_penetration = 60) + else if(isvehicle(victim)) + var/obj/vehicle/veh_victim = victim + veh_victim.take_damage(75, BURN, ENERGY, armour_penetration = 60) timer_ref = addtimer(CALLBACK(src, PROC_REF(execute_attack)), ZEROFORM_TICK_RATE, TIMER_STOPPABLE) ///ends and cleans up beam @@ -480,6 +486,8 @@ owner.balloon_alert(owner, "noone to call") return FALSE +GLOBAL_LIST_EMPTY(active_summons) + /datum/action/ability/xeno_action/psychic_summon/action_activate() var/mob/living/carbon/xenomorph/X = owner @@ -491,7 +499,9 @@ continue sister.add_filter("summonoutline", 2, outline_filter(1, COLOR_VIOLET)) - if(!do_after(X, 10 SECONDS, IGNORE_HELD_ITEM, X, BUSY_ICON_HOSTILE)) + GLOB.active_summons += X + request_admins() + if(!do_after(X, 10 SECONDS, IGNORE_HELD_ITEM, X, BUSY_ICON_HOSTILE, extra_checks = CALLBACK(src, PROC_REF(is_active_summon)))) add_cooldown(5 SECONDS) for(var/mob/living/carbon/xenomorph/sister AS in allxenos) sister.remove_filter("summonoutline") @@ -514,3 +524,23 @@ add_cooldown() succeed_activate() + +///Sends a message to admins, prompting them if they want to cancel a psychic summon +/datum/action/ability/xeno_action/psychic_summon/proc/request_admins() + var/mob/living/carbon/xenomorph/caster = owner + var/canceltext = "[caster] is using [name] at [AREACOORD(caster)] [ADMIN_TPMONTY(caster)] \[CANCEL SUMMON\]" + message_admins("[span_prefix("PSYCHIC SUMMON:")] [canceltext]") + log_game("psychic summon started by [caster] at [AREACOORD(caster)], timerid to cancel: [10 SECONDS]") + notify_ghosts("[caster] has begun to summon at [AREACOORD(caster)]!", action = NOTIFY_JUMP) + +///Checks if our summon was cancelled +/datum/action/ability/xeno_action/psychic_summon/proc/is_active_summon() + var/mob/living/carbon/xenomorph/caster = owner + if(!(caster in GLOB.active_summons)) + return FALSE + return TRUE + +/datum/action/ability/xeno_action/psychic_summon/succeed_activate() + . = ..() + var/mob/living/carbon/xenomorph/caster = owner + GLOB.active_summons -= caster //Remove ourselves from the list once we have completed our summon diff --git a/code/modules/mob/living/carbon/xenomorph/castes/king/king.dm b/code/modules/mob/living/carbon/xenomorph/castes/king/king.dm index 878ed936a858a..9306789b51929 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/king/king.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/king/king.dm @@ -30,17 +30,17 @@ var/prefix = (hive.prefix || xeno_caste.upgrade_name) ? "[hive.prefix][xeno_caste.upgrade_name] " : "" switch(playtime_mins) if(0 to 600) - name = prefix + "Hatchling King ([nicknumber])" - if(601 to 1500) name = prefix + "Young King ([nicknumber])" + if(601 to 1500) + name = prefix + "Mature King ([nicknumber])" if(1501 to 4200) - name = prefix + "Mature Emperor ([nicknumber])" - if(4201 to 10500) name = prefix + "Elder Emperor ([nicknumber])" - if(10501 to INFINITY) + if(4201 to 10500) name = prefix + "Ancient Emperor ([nicknumber])" + if(10501 to INFINITY) + name = prefix + "Prime Emperor ([nicknumber])" else - name = prefix + "Hatchling King ([nicknumber])" + name = prefix + "Young King ([nicknumber])" real_name = name if(mind) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/larva/castedatum_larva.dm b/code/modules/mob/living/carbon/xenomorph/castes/larva/castedatum_larva.dm index 989af58038431..5eaad6751e512 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/larva/castedatum_larva.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/larva/castedatum_larva.dm @@ -26,12 +26,6 @@ // *** Evolution *** // evolution_threshold = 50 - evolves_to = list( - /mob/living/carbon/xenomorph/drone, - /mob/living/carbon/xenomorph/runner, - /mob/living/carbon/xenomorph/sentinel, - /mob/living/carbon/xenomorph/defender, - ) // *** Flags *** // caste_flags = CASTE_EVOLUTION_ALLOWED|CASTE_INNATE_HEALING diff --git a/code/modules/mob/living/carbon/xenomorph/castes/mantis/abilities_mantis.dm b/code/modules/mob/living/carbon/xenomorph/castes/mantis/abilities_mantis.dm index 0b712f283d15c..e9172b38c5886 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/mantis/abilities_mantis.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/mantis/abilities_mantis.dm @@ -1,21 +1,4 @@ /datum/action/ability/activable/xeno/ravage/slow ///How long is the windup before ravaging - var/windup_time = 0.5 SECONDS cooldown_duration = 30 SECONDS - -/datum/action/ability/activable/xeno/ravage/slow/use_ability(atom/A) - if(!do_after(owner, windup_time, IGNORE_HELD_ITEM, owner, BUSY_ICON_GENERIC, extra_checks = CALLBACK(src, PROC_REF(can_use_action), FALSE, ABILITY_USE_BUSY))) - return fail_activate() - return ..() - -/datum/action/ability/activable/xeno/ravage/slow/ai_should_use(atom/target) - . = ..() - if(!.) - return - action_activate() - LAZYINCREMENT(owner.do_actions, target) - addtimer(CALLBACK(src, PROC_REF(decrease_do_action), target), windup_time) - -///Decrease the do_actions of the owner -/datum/action/ability/activable/xeno/ravage/slow/proc/decrease_do_action(atom/target) - LAZYDECREMENT(owner.do_actions, target) + ability_cost = 250 diff --git a/code/modules/mob/living/carbon/xenomorph/castes/mantis/castedatum_mantis.dm b/code/modules/mob/living/carbon/xenomorph/castes/mantis/castedatum_mantis.dm index d30cac46a6a2e..4aece66c96653 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/mantis/castedatum_mantis.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/mantis/castedatum_mantis.dm @@ -12,12 +12,13 @@ // *** Melee Attacks *** // melee_damage = 20 + melee_ap = 5 // *** Speed *** // speed = -0.6 // *** Plasma *** // - plasma_max = 600 //3 ravage + plasma_max = 500 //2 ravages plasma_gain = 20 // *** Health *** // @@ -25,7 +26,7 @@ // *** Flags *** // caste_flags = CASTE_DO_NOT_ALERT_LOW_LIFE|CASTE_IS_A_MINION - can_flags = CASTE_CAN_BE_QUEEN_HEALED + can_flags = CASTE_CAN_BE_QUEEN_HEALED|CASTE_CAN_BE_GIVEN_PLASMA caste_traits = null // *** Defense *** // diff --git a/code/modules/mob/living/carbon/xenomorph/castes/praetorian/abilities_praetorian.dm b/code/modules/mob/living/carbon/xenomorph/castes/praetorian/abilities_praetorian.dm index a647a46513b6c..623c57f1b46c1 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/praetorian/abilities_praetorian.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/praetorian/abilities_praetorian.dm @@ -57,7 +57,7 @@ RU TGMC EDIT */ return FALSE return TRUE -GLOBAL_LIST_INIT(acid_spray_hit, typecacheof(list(/obj/structure/barricade, /obj/vehicle/multitile/root/cm_armored, /obj/structure/razorwire))) +GLOBAL_LIST_INIT(acid_spray_hit, typecacheof(list(/obj/structure/barricade, /obj/hitbox, /obj/structure/razorwire))) #define CONE_PART_MIDDLE (1<<0) #define CONE_PART_LEFT (1<<1) @@ -98,7 +98,7 @@ GLOBAL_LIST_INIT(acid_spray_hit, typecacheof(list(/obj/structure/barricade, /obj var/turf/next_normal_turf = get_step(T, facing) for (var/atom/movable/A AS in T) A.acid_spray_act(owner) - if(((A.density && !(A.allow_pass_flags & PASS_PROJECTILE) && !(A.flags_atom & ON_BORDER)) || !A.Exit(source_spray, facing)) && !isxeno(A)) + if(((A.density && !(A.allow_pass_flags & PASS_PROJECTILE) && !(A.atom_flags & ON_BORDER)) || !A.Exit(source_spray, facing)) && !isxeno(A)) is_blocked = TRUE if(!is_blocked) if(!skip_timer) @@ -123,11 +123,12 @@ GLOBAL_LIST_INIT(acid_spray_hit, typecacheof(list(/obj/structure/barricade, /obj do_acid_cone_spray(next_normal_turf, distance_left - 1, facing, CONE_PART_DIAG_LEFT|CONE_PART_DIAG_RIGHT, spray) do_acid_cone_spray(next_normal_turf, distance_left - 2, facing, (distance_left < 5) ? CONE_PART_MIDDLE : CONE_PART_MIDDLE_DIAG, spray) + // *************************************** // *********** Dash // *************************************** -/datum/action/ability/activable/xeno/charge/dash - name = "Dash" +/datum/action/ability/activable/xeno/charge/acid_dash + name = "Acid Dash" action_icon_state = "pounce" desc = "Instantly dash to the selected tile." ability_cost = 100 @@ -143,33 +144,56 @@ GLOBAL_LIST_INIT(acid_spray_hit, typecacheof(list(/obj/structure/barricade, /obj ///The last tile we dashed through, used when swapping with a human var/turf/last_turf -/datum/action/ability/activable/xeno/charge/dash/use_ability(atom/A) +/datum/action/ability/activable/xeno/charge/acid_dash/use_ability(atom/A) if(!A) return var/mob/living/carbon/xenomorph/xeno_owner = owner + + RegisterSignal(xeno_owner, COMSIG_XENO_OBJ_THROW_HIT, PROC_REF(obj_hit)) RegisterSignal(xeno_owner, COMSIG_MOVABLE_POST_THROW, PROC_REF(charge_complete)) RegisterSignal(xeno_owner, COMSIG_XENOMORPH_LEAP_BUMP, PROC_REF(mob_hit)) + RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(acid_steps)) //We drop acid on every tile we pass through + xeno_owner.visible_message(span_danger("[xeno_owner] slides towards \the [A]!"), \ + span_danger("We dash towards \the [A], spraying acid down our path!") ) + xeno_owner.emote("roar") xeno_owner.xeno_flags |= XENO_LEAPING //This has to come before throw_at, which checks impact. So we don't do end-charge specials when thrown - - add_cooldown() succeed_activate() last_turf = get_turf(owner) owner.pass_flags = PASS_LOW_STRUCTURE|PASS_DEFENSIVE_STRUCTURE|PASS_FIRE owner.throw_at(A, charge_range, 2, owner) - add_cooldown() - succeed_activate() - -/datum/action/ability/activable/xeno/charge/dash/mob_hit(datum/source, mob/living/living_target) +/datum/action/ability/activable/xeno/charge/acid_dash/mob_hit(datum/source, mob/living/living_target) . = TRUE if(living_target.stat || isxeno(living_target) || !(iscarbon(living_target))) //we leap past xenos return + recast_available = TRUE var/mob/living/carbon/carbon_victim = living_target - carbon_victim.ParalyzeNoChain(0.1 SECONDS) + carbon_victim.ParalyzeNoChain(0.5 SECONDS) + + to_chat(carbon_victim, span_highdanger("The [owner] tackles us, sending us behind them!")) + owner.visible_message(span_xenodanger("\The [owner] tackles [carbon_victim], swapping location with them!"), \ + span_xenodanger("We push [carbon_victim] in our acid trail!"), visible_message_flags = COMBAT_MESSAGE) -/datum/action/ability/activable/xeno/charge/dash/charge_complete() +/datum/action/ability/activable/xeno/charge/acid_dash/charge_complete() . = ..() var/mob/living/carbon/xenomorph/xeno_owner = owner + if(recast_available) + addtimer(CALLBACK(src, PROC_REF(charge_complete)), 2 SECONDS) //Delayed recursive call, this time you won't gain a recast so it will go on cooldown in 2 SECONDS. + recast = TRUE + else + recast = FALSE + add_cooldown() + UnregisterSignal(owner, COMSIG_MOVABLE_MOVED) xeno_owner.pass_flags = initial(xeno_owner.pass_flags) + recast_available = FALSE + +///Drops an acid puddle on the current owner's tile, will do 0 damage if the owner has no acid_spray_damage +/datum/action/ability/activable/xeno/charge/acid_dash/proc/acid_steps(atom/A, atom/OldLoc, Dir, Forced) + SIGNAL_HANDLER + last_turf = OldLoc + var/mob/living/carbon/xenomorph/xeno_owner = owner + new /obj/effect/xenomorph/spray(get_turf(xeno_owner), 5 SECONDS, xeno_owner.xeno_caste.acid_spray_damage) //Add a modifier here to buff the damage if needed + for(var/obj/O in get_turf(xeno_owner)) + O.acid_spray_act(xeno_owner) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/praetorian/castedatum_praetorian.dm b/code/modules/mob/living/carbon/xenomorph/castes/praetorian/castedatum_praetorian.dm index 4db3eed279c49..984100186792f 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/praetorian/castedatum_praetorian.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/praetorian/castedatum_praetorian.dm @@ -58,7 +58,7 @@ RU TGMC EDIT */ /datum/action/ability/activable/xeno/corrosive_acid, /datum/action/ability/activable/xeno/xeno_spit, /datum/action/ability/activable/xeno/spray_acid/cone, - /datum/action/ability/activable/xeno/charge/dash, + /datum/action/ability/activable/xeno/charge/acid_dash, /datum/action/ability/xeno_action/pheromones, /datum/action/ability/xeno_action/pheromones/emit_recovery, /datum/action/ability/xeno_action/pheromones/emit_warding, @@ -82,7 +82,7 @@ RU TGMC EDIT */ /datum/action/ability/activable/xeno/corrosive_acid, /datum/action/ability/activable/xeno/xeno_spit, /datum/action/ability/activable/xeno/spray_acid/cone, - /datum/action/ability/activable/xeno/charge/dash, + /datum/action/ability/activable/xeno/charge/acid_dash, /datum/action/ability/xeno_action/pheromones, /datum/action/ability/xeno_action/pheromones/emit_recovery, /datum/action/ability/xeno_action/pheromones/emit_warding, diff --git a/code/modules/mob/living/carbon/xenomorph/castes/praetorian/praetorian.dm b/code/modules/mob/living/carbon/xenomorph/castes/praetorian/praetorian.dm index c51b2f66b5187..7d1704604b61f 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/praetorian/praetorian.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/praetorian/praetorian.dm @@ -14,4 +14,3 @@ tier = XENO_TIER_THREE upgrade = XENO_UPGRADE_NORMAL bubble_icon = "alienroyal" - diff --git a/code/modules/mob/living/carbon/xenomorph/castes/puppet/castedatum_puppet.dm b/code/modules/mob/living/carbon/xenomorph/castes/puppet/castedatum_puppet.dm index 24d9fc87b4b63..09289f196d89a 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/puppet/castedatum_puppet.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/puppet/castedatum_puppet.dm @@ -11,6 +11,7 @@ tier = XENO_TIER_MINION upgrade = XENO_UPGRADE_BASETYPE melee_damage = 15 + accuracy_malus = 65 speed = -0.8 plasma_max = 2 plasma_gain = 0 diff --git a/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/abilities_puppeteer.dm b/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/abilities_puppeteer.dm index ce2a725f6f634..611ed7415a03e 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/abilities_puppeteer.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/abilities_puppeteer.dm @@ -83,7 +83,7 @@ var/obj/projectile/spine = new /obj/projectile(current_turf) spine.generate_bullet(/datum/ammo/xeno/spine) spine.def_zone = xeno.get_limbzone_target() - spine.fire_at(victim, xeno, null, range = 6, speed = 1) + spine.fire_at(victim, xeno, xeno, range = 6, speed = 1) add_cooldown() // *************************************** @@ -194,7 +194,7 @@ var/mob/living/carbon/xenomorph/owner_xeno = owner if(target.stat == DEAD) return - owner_xeno.plasma_stored = min(owner_xeno.plasma_stored + round(damage / 0.9), owner_xeno.xeno_caste.plasma_max) + owner_xeno.gain_plasma(floor(damage / 0.9)) // *************************************** // *********** Stitch Puppet @@ -275,7 +275,7 @@ return fail_activate() RegisterSignal(victim, COMSIG_XENOMORPH_ATTACK_LIVING, PROC_REF(start_exploding)) RegisterSignal(victim, COMSIG_MOB_DEATH, PROC_REF(detonate)) - addtimer(CALLBACK(src, PROC_REF(detonate), victim), 15 SECONDS) + addtimer(CALLBACK(src, PROC_REF(start_exploding), victim), 5 SECONDS) add_cooldown() ///asynchronous signal handler for start_exploding_async diff --git a/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/castedatum_puppeteer.dm b/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/castedatum_puppeteer.dm index 6c2970dad807e..328c2cd229d2f 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/castedatum_puppeteer.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/castedatum_puppeteer.dm @@ -20,7 +20,6 @@ //upgrade_threshold = TIER_TWO_THRESHOLD // RUTGMC DELETION evolution_threshold = 225 - //evolves_to = list(/mob/living/carbon/xenomorph/widow, /mob/living/carbon/xenomorph/warlock) // RUTGMC DELETION, WIDOW DELETION, moved to the other file deevolves_to = list(/mob/living/carbon/xenomorph/defender) caste_flags = CASTE_INNATE_PLASMA_REGEN|CASTE_PLASMADRAIN_IMMUNE|CASTE_EVOLUTION_ALLOWED can_flags = CASTE_CAN_BE_QUEEN_HEALED|CASTE_CAN_BE_LEADER diff --git a/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/puppeteer.dm b/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/puppeteer.dm index 20f08f48c956e..7a3c13f965866 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/puppeteer.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/puppeteer/puppeteer.dm @@ -24,6 +24,6 @@ SIGNAL_HANDLER if(target.stat == DEAD) return - plasma_stored = min(plasma_stored + round(damage / 0.8), xeno_caste.plasma_max) + gain_plasma(floor(damage / 0.8)) SEND_SIGNAL(src, COMSIG_PUPPET_CHANGE_ALL_ORDER, PUPPET_ATTACK, target) //we are on harm intent so it probably means we want to kill the target RU TGMC EDIT*/ diff --git a/code/modules/mob/living/carbon/xenomorph/castes/queen/abilities_queen.dm b/code/modules/mob/living/carbon/xenomorph/castes/queen/abilities_queen.dm index 2648cff07184f..9e0cf2f3b9fa1 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/queen/abilities_queen.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/queen/abilities_queen.dm @@ -39,17 +39,17 @@ var/sound/queen_sound = sound(get_sfx("queen"), channel = CHANNEL_ANNOUNCEMENTS) var/sound/king_sound = sound('sound/voice/xenos_roaring.ogg', channel = CHANNEL_ANNOUNCEMENTS) for(var/mob/living/carbon/xenomorph/X AS in Q.hive.get_all_xenos()) + to_chat(X, assemble_alert( + title = "Hive Announcement", + subtitle = "From [Q.name]", + message = input, + color_override = "purple" + )) switch(Q.caste_base_type) - if(/mob/living/carbon/xenomorph/queen) + if(/mob/living/carbon/xenomorph/queen, /mob/living/carbon/xenomorph/shrike) SEND_SOUND(X, queen_sound) - //In case in combat, couldn't read fast enough, or needs to copy paste into a translator. Here's the old hive message. - to_chat(X, span_xenoannounce("

    The words of the queen reverberate in your head...


    [span_alert(input)]

    ")) if(/mob/living/carbon/xenomorph/king) SEND_SOUND(X, king_sound) - to_chat(X, span_xenoannounce("

    The words of the king reverberate in your head...


    [span_alert(input)]

    ")) - if(/mob/living/carbon/xenomorph/shrike) - SEND_SOUND(X, queen_sound) - to_chat(X, span_xenoannounce("

    The words of the shrike reverberate in your head...


    [span_alert(input)]

    ")) //Display the ruler's hive message at the top of the game screen. X.play_screen_text(queens_word, /atom/movable/screen/text/screen_text/queen_order) @@ -76,38 +76,42 @@ return ..() /datum/action/ability/activable/xeno/screech/use_ability(atom/A) - var/mob/living/carbon/xenomorph/queen/X = owner + var/mob/living/carbon/xenomorph/queen/xeno_owner = owner //screech is so powerful it kills huggers in our hands - if(istype(X.r_hand, /obj/item/clothing/mask/facehugger)) - var/obj/item/clothing/mask/facehugger/FH = X.r_hand + if(istype(xeno_owner.r_hand, /obj/item/clothing/mask/facehugger)) + var/obj/item/clothing/mask/facehugger/FH = xeno_owner.r_hand if(FH.stat != DEAD) FH.kill_hugger() - if(istype(X.l_hand, /obj/item/clothing/mask/facehugger)) - var/obj/item/clothing/mask/facehugger/FH = X.l_hand + if(istype(xeno_owner.l_hand, /obj/item/clothing/mask/facehugger)) + var/obj/item/clothing/mask/facehugger/FH = xeno_owner.l_hand if(FH.stat != DEAD) FH.kill_hugger() succeed_activate() add_cooldown() - playsound(X.loc, 'sound/voice/alien_queen_screech.ogg', 75, 0) - X.visible_message(span_xenohighdanger("\The [X] emits an ear-splitting guttural roar!")) + playsound(xeno_owner.loc, 'sound/voice/alien_queen_screech.ogg', 75, 0) + xeno_owner.visible_message(span_xenohighdanger("\The [xeno_owner] emits an ear-splitting guttural roar!")) GLOB.round_statistics.queen_screech++ SSblackbox.record_feedback("tally", "round_statistics", 1, "queen_screech") - X.create_shriekwave() //Adds the visual effect. Wom wom wom - //stop_momentum(charge_dir) //Screech kills a charge - - var/list/nearby_living = list() - for(var/mob/living/L in hearers(WORLD_VIEW, X)) - nearby_living.Add(L) + xeno_owner.create_shriekwave() //Adds the visual effect. Wom wom wom - for(var/i in GLOB.mob_living_list) - var/mob/living/L = i - if(get_dist(L, X) > WORLD_VIEW_NUM) + for(var/obj/vehicle/sealed/armored/tank AS in GLOB.tank_list) + if(get_dist(tank, xeno_owner) > WORLD_VIEW_NUM) + continue + if(tank.z != owner.z) continue - L.screech_act(X, WORLD_VIEW_NUM, L in nearby_living) + for(var/mob/living/living_victim AS in tank.occupants) + living_victim.screech_act(xeno_owner, WORLD_VIEW_NUM) //todo: The effects of screech are weird due to relying on get_dist for a mob on a diff z-level + + var/list/nearby_living = list() //if you're a hearer you get effected more severely + for(var/mob/living/living_victim in hearers(WORLD_VIEW, xeno_owner)) + nearby_living.Add(living_victim) + + for(var/mob/living/living_victim AS in cheap_get_living_near(xeno_owner, WORLD_VIEW_NUM)) + living_victim.screech_act(xeno_owner, WORLD_VIEW_NUM, living_victim in nearby_living) /datum/action/ability/activable/xeno/screech/ai_should_start_consider() return TRUE @@ -230,10 +234,10 @@ var/mob/living/carbon/xenomorph/queen/xeno = owner if(xeno.do_actions) return - if(xeno.is_zoomed) + if(xeno.xeno_flags & XENO_ZOOMED) zoom_xeno_out(xeno.observed_xeno ? FALSE : TRUE) return - if(!do_after(xeno, 1 SECONDS, IGNORE_HELD_ITEM, null, BUSY_ICON_GENERIC) || xeno.is_zoomed) + if(!do_after(xeno, 1 SECONDS, IGNORE_HELD_ITEM, null, BUSY_ICON_GENERIC) || (xeno.xeno_flags & XENO_ZOOMED)) return zoom_xeno_in(xeno.observed_xeno ? FALSE : TRUE) //No need for feedback message if our eye is elsewhere. @@ -292,7 +296,7 @@ /datum/action/ability/xeno_action/set_xeno_lead/proc/select_xeno_leader(mob/living/carbon/xenomorph/selected_xeno) var/mob/living/carbon/xenomorph/queen/xeno_ruler = owner - if(selected_xeno.queen_chosen_lead) + if(selected_xeno.xeno_flags & XENO_LEADER) unset_xeno_leader(selected_xeno) return @@ -448,7 +452,7 @@ /datum/action/ability/xeno_action/bulwark name = "Royal Bulwark" action_icon_state = "bulwark" - desc = "Creates a field of defensive energy, filling chinks in the armor of nearby sisters, making them more resilient." + desc = "Creates a field of defensive energy, filling gaps in the armor of nearby sisters, making them more resilient." ability_cost = 100 cooldown_duration = 20 SECONDS keybinding_signals = list( diff --git a/code/modules/mob/living/carbon/xenomorph/castes/queen/castedatum_queen.dm b/code/modules/mob/living/carbon/xenomorph/castes/queen/castedatum_queen.dm index e1fcb83e09373..2143f888ae9ed 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/queen/castedatum_queen.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/queen/castedatum_queen.dm @@ -23,6 +23,9 @@ // *** Health *** // max_health = 500 + // *** Sunder *** // + sunder_multiplier = 0.8 + // *** Evolution *** // //upgrade_threshold = TIER_THREE_THRESHOLD // RUTGMC DELETION evolve_min_xenos = 8 @@ -56,6 +59,7 @@ /datum/action/ability/activable/xeno/cocoon, /datum/action/ability/activable/xeno/plant_weeds, /datum/action/ability/activable/xeno/secrete_resin, + /datum/action/ability/activable/xeno/secrete_special_resin, /datum/action/ability/xeno_action/blessing_menu, /datum/action/ability/xeno_action/place_acidwell, /datum/action/ability/xeno_action/lay_egg, @@ -95,6 +99,7 @@ /datum/action/ability/activable/xeno/cocoon, /datum/action/ability/activable/xeno/plant_weeds, /datum/action/ability/activable/xeno/secrete_resin, + /datum/action/ability/activable/xeno/secrete_special_resin, /datum/action/ability/xeno_action/blessing_menu, /datum/action/ability/xeno_action/place_acidwell, /datum/action/ability/xeno_action/lay_egg, diff --git a/code/modules/mob/living/carbon/xenomorph/castes/queen/queen.dm b/code/modules/mob/living/carbon/xenomorph/castes/queen/queen.dm index 340acfb0a0d2b..c3a1ea78f0b2e 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/queen/queen.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/queen/queen.dm @@ -76,17 +76,17 @@ var/prefix = (hive.prefix || xeno_caste.upgrade_name) ? "[hive.prefix][xeno_caste.upgrade_name] " : "" switch(playtime_mins) if(0 to 600) - name = prefix + "Hatchling Queen ([nicknumber])" - if(601 to 1500) name = prefix + "Young Queen ([nicknumber])" + if(601 to 1500) + name = prefix + "Mature Queen ([nicknumber])" if(1501 to 4200) - name = prefix + "Mature Empress ([nicknumber])" - if(4201 to 10500) name = prefix + "Elder Empress ([nicknumber])" - if(10501 to INFINITY) + if(4201 to 10500) name = prefix + "Ancient Empress ([nicknumber])" + if(10501 to INFINITY) + name = prefix + "Prime Empress ([nicknumber])" else - name = prefix + "Hatchling Queen ([nicknumber])" + name = prefix + "Young Queen ([nicknumber])" real_name = name if(mind) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/ravager/abilities_ravager.dm b/code/modules/mob/living/carbon/xenomorph/castes/ravager/abilities_ravager.dm index aac732b46d432..440f0e78aa2a6 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/ravager/abilities_ravager.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/ravager/abilities_ravager.dm @@ -122,7 +122,7 @@ atoms_to_ravage += get_step(owner, turn(owner.dir, -45)).contents atoms_to_ravage += get_step(owner, turn(owner.dir, 45)).contents for(var/atom/movable/ravaged AS in atoms_to_ravage) - if(!(ravaged.resistance_flags & XENO_DAMAGEABLE)) + if(!(ravaged.resistance_flags & XENO_DAMAGEABLE) || !X.Adjacent(ravaged)) continue if(!ishuman(ravaged)) ravaged.attack_alien(X, X.xeno_caste.melee_damage) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/ravager/castedatum_ravager.dm b/code/modules/mob/living/carbon/xenomorph/castes/ravager/castedatum_ravager.dm index 0bd20765a77b5..17043f7597a05 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/ravager/castedatum_ravager.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/ravager/castedatum_ravager.dm @@ -9,7 +9,8 @@ wound_type = "ravager" //used to match appropriate wound overlays // *** Melee Attacks *** // - melee_damage = 30 + melee_damage = 25 + melee_ap = 15 attack_delay = 7 // *** Speed *** // diff --git a/code/modules/mob/living/carbon/xenomorph/castes/runner/abilities_runner.dm b/code/modules/mob/living/carbon/xenomorph/castes/runner/abilities_runner.dm index 82154957c04a4..c2b5ab3a9c33b 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/runner/abilities_runner.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/runner/abilities_runner.dm @@ -77,7 +77,8 @@ /datum/action/ability/xeno_action/evasion name = "Evasion" action_icon_state = "evasion_on" - desc = "Take evasive action, forcing non-friendly projectiles that would hit you to miss for a short duration so long as you keep moving. Alternate use toggles Auto Evasion off or on." + desc = "Take evasive action, forcing non-friendly projectiles that would hit you to miss for a short duration so long as you keep moving. \ + Alternate use toggles Auto Evasion off or on. Click again while active to deactivate early." ability_cost = 75 cooldown_duration = 10 SECONDS keybinding_signals = list( @@ -113,6 +114,15 @@ update_button_icon() /datum/action/ability/xeno_action/evasion/action_activate() + //Since both the button and the evasion extension call this proc directly, check if the cooldown timer exists + //The evasion extension removes the cooldown before calling this proc again, so use that to differentiate if it was the player trying to cancel + if(evade_active && cooldown_timer) + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_EVASION_ACTIVATION)) + return + evasion_deactivate() + return + + use_state_flags = ABILITY_IGNORE_COOLDOWN|ABILITY_IGNORE_PLASMA //To allow the ability button to be clicked while on cooldown for deactivation purposes succeed_activate() add_cooldown() if(evade_active) @@ -137,6 +147,7 @@ RegisterSignal(owner, COMSIG_LIVING_PRE_THROW_IMPACT, PROC_REF(evasion_throw_dodge)) GLOB.round_statistics.runner_evasions++ SSblackbox.record_feedback("tally", "round_statistics", 1, "runner_evasions") + TIMER_COOLDOWN_START(src, COOLDOWN_EVASION_ACTIVATION, 1 SECONDS) /datum/action/ability/xeno_action/evasion/process() var/mob/living/carbon/xenomorph/runner/runner_owner = owner @@ -152,7 +163,7 @@ */ /datum/action/ability/xeno_action/evasion/proc/evasion_flamer_hit(datum/source, obj/projectile/proj) SIGNAL_HANDLER - if(!(proj.ammo.flags_ammo_behavior & AMMO_FLAME)) + if(!(proj.ammo.ammo_behavior_flags & AMMO_FLAME)) return evasion_stacks = max(0, evasion_stacks - proj.damage) // We lose evasion stacks equal to the burn damage. if(evasion_stacks) @@ -173,6 +184,7 @@ /// Deactivates Evasion, clearing signals, vars, etc. /datum/action/ability/xeno_action/evasion/proc/evasion_deactivate() + use_state_flags = NONE //To prevent the ability from being used while on cooldown now that it can no longer be deactivated STOP_PROCESSING(SSprocessing, src) UnregisterSignal(owner, list( COMSIG_LIVING_STATUS_STUN, @@ -218,12 +230,12 @@ return FALSE if(xeno_owner.issamexenohive(proj.firer)) //We automatically dodge allied projectiles at no cost, and no benefit to our evasion stacks return COMPONENT_PROJECTILE_DODGE - if(proj.ammo.flags_ammo_behavior & AMMO_FLAME) //We can't dodge literal fire + if(proj.ammo.ammo_behavior_flags & AMMO_FLAME) //We can't dodge literal fire return FALSE if(proj.original_target == xeno_owner && proj.distance_travelled < 2) //Pointblank shot. return FALSE - if(!(proj.ammo.flags_ammo_behavior & AMMO_SENTRY) && !xeno_owner.fire_stacks) //We ignore projectiles from automated sources/sentries for the purpose of contributions towards our cooldown refresh; also fire prevents accumulation of evasion stacks - evasion_stacks += proj.damage //Add to evasion stacks for the purposes of determining whether or not our cooldown refreshes + if(!xeno_owner.fire_stacks) + evasion_stacks += proj.damage //Add to evasion stacks for the purposes of determining whether or not our cooldown refreshes, fire negates this evasion_dodge_fx(proj) return COMPONENT_PROJECTILE_DODGE @@ -299,7 +311,6 @@ return FALSE /datum/action/ability/activable/xeno/snatch/use_ability(atom/A) - succeed_activate() var/mob/living/carbon/xenomorph/X = owner if(!do_after(owner, 0.5 SECONDS, IGNORE_HELD_ITEM, A, BUSY_ICON_DANGER, extra_checks = CALLBACK(owner, TYPE_PROC_REF(/mob, break_do_after_checks), list("health" = X.health)))) return FALSE @@ -333,6 +344,7 @@ RegisterSignal(owner, COMSIG_ATOM_DIR_CHANGE, PROC_REF(owner_turned)) owner.add_movespeed_modifier(MOVESPEED_ID_SNATCH, TRUE, 0, NONE, TRUE, 2) owner_turned(null, null, owner.dir) + succeed_activate() add_cooldown() ///Signal handler to update the item overlay when the owner is changing dir diff --git a/code/modules/mob/living/carbon/xenomorph/castes/runner/castedatum_runner.dm b/code/modules/mob/living/carbon/xenomorph/castes/runner/castedatum_runner.dm index 3dcab32f8d909..3329c5835fa70 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/runner/castedatum_runner.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/runner/castedatum_runner.dm @@ -27,14 +27,8 @@ // *** Evolution *** // evolution_threshold = 100 - //upgrade_threshold = TIER_ONE_THRESHOLD // RUTGMC DELETION -/* RU TGMC EDIT - evolves_to = list( - /mob/living/carbon/xenomorph/hunter, - /mob/living/carbon/xenomorph/bull, - /mob/living/carbon/xenomorph/wraith, - ) -RU TGMC EDIT */ + //upgrade_threshold = TIER_ONE_THRESHOLD + // *** Flags *** // caste_flags = CASTE_EVOLUTION_ALLOWED can_flags = CASTE_CAN_BE_QUEEN_HEALED|CASTE_CAN_BE_GIVEN_PLASMA|CASTE_CAN_BE_LEADER|CASTE_CAN_RIDE_CRUSHER diff --git a/code/modules/mob/living/carbon/xenomorph/castes/runner/runner.dm b/code/modules/mob/living/carbon/xenomorph/castes/runner/runner.dm index ce11e90bc7d15..6284e284f1490 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/runner/runner.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/runner/runner.dm @@ -28,6 +28,14 @@ if(. == CONSCIOUS && layer != initial(layer)) layer = MOB_LAYER +/mob/living/carbon/xenomorph/runner/UnarmedAttack(atom/A, has_proximity, modifiers) + /// Runner should not be able to slash while evading. + var/datum/action/ability/xeno_action/evasion/evasion_action = actions_by_path[/datum/action/ability/xeno_action/evasion] + if(evasion_action.evade_active) + balloon_alert(src, "Cannot slash while evading") + return + return ..() + /mob/living/carbon/xenomorph/runner/med_hud_set_status() . = ..() hud_set_evasion() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/scorpion/castedatum_scorpion.dm b/code/modules/mob/living/carbon/xenomorph/castes/scorpion/castedatum_scorpion.dm index 0bf0da0ec3ca6..aa5442ecd1b0c 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/scorpion/castedatum_scorpion.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/scorpion/castedatum_scorpion.dm @@ -25,7 +25,7 @@ // *** Flags *** // caste_flags = CASTE_DO_NOT_ALERT_LOW_LIFE|CASTE_IS_A_MINION - can_flags = CASTE_CAN_BE_QUEEN_HEALED + can_flags = CASTE_CAN_BE_QUEEN_HEALED|CASTE_CAN_BE_GIVEN_PLASMA caste_traits = null // *** Defense *** // @@ -41,4 +41,5 @@ actions = list( /datum/action/ability/xeno_action/xeno_resting, /datum/action/ability/activable/xeno/xeno_spit, + /datum/action/ability/activable/xeno/corrosive_acid/drone, ) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/sentinel/abilities_sentinel.dm b/code/modules/mob/living/carbon/xenomorph/castes/sentinel/abilities_sentinel.dm index 929fe567b5ed4..e3ac16b40bc91 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/sentinel/abilities_sentinel.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/sentinel/abilities_sentinel.dm @@ -14,7 +14,7 @@ bullet_color = COLOR_PALE_GREEN_GRAY damage = 16 spit_cost = 30 - flags_ammo_behavior = AMMO_XENO|AMMO_SKIPS_ALIENS + ammo_behavior_flags = AMMO_XENO|AMMO_SKIPS_ALIENS /// The amount of stacks applied on hit. var/intoxication_stacks = 5 diff --git a/code/modules/mob/living/carbon/xenomorph/castes/sentinel/castedatum_sentinel.dm b/code/modules/mob/living/carbon/xenomorph/castes/sentinel/castedatum_sentinel.dm index a9ff1952802cc..882a6d88ab981 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/sentinel/castedatum_sentinel.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/sentinel/castedatum_sentinel.dm @@ -27,8 +27,6 @@ evolution_threshold = 100 //upgrade_threshold = TIER_ONE_THRESHOLD // RUTGMC DELETION - evolves_to = list(/mob/living/carbon/xenomorph/spitter) - // *** Flags *** // caste_flags = CASTE_EVOLUTION_ALLOWED can_flags = CASTE_CAN_BE_QUEEN_HEALED|CASTE_CAN_BE_GIVEN_PLASMA|CASTE_CAN_BE_LEADER|CASTE_CAN_RIDE_CRUSHER diff --git a/code/modules/mob/living/carbon/xenomorph/castes/shrike/abilities_shrike.dm b/code/modules/mob/living/carbon/xenomorph/castes/shrike/abilities_shrike.dm index 8002d5e8bfc25..d7405439d14d8 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/shrike/abilities_shrike.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/shrike/abilities_shrike.dm @@ -160,7 +160,7 @@ RU TGMC EDIT */ add_cooldown() addtimer(CALLBACK(owner, TYPE_PROC_REF(/mob, update_icons)), 1 SECONDS) var/mob/living/carbon/xenomorph/xeno = owner - owner.icon_state = "[xeno.xeno_caste.caste_name][xeno.is_a_rouny ? " rouny" : ""] Screeching" + owner.icon_state = "[xeno.xeno_caste.caste_name][(xeno.xeno_flags & XENO_ROUNY) ? " rouny" : ""] Screeching" if(target) // Keybind use doesn't have a target owner.face_atom(target) @@ -180,23 +180,26 @@ RU TGMC EDIT */ lower_left = locate(owner.x + 1, owner.y - 1, owner.z) upper_right = locate(owner.x + 3, owner.y + 1, owner.z) - for(var/turf/affected_tile in block(lower_left, upper_right)) //everything in the 2x3 block is found. + var/list/things_to_throw = list() + for(var/turf/affected_tile in block(lower_left, upper_right)) //everything in the 3x3 block is found. affected_tile.Shake(duration = 0.5 SECONDS) - for(var/i in affected_tile) - var/atom/movable/affected = i + for(var/atom/movable/affected AS in affected_tile) if(!ishuman(affected) && !istype(affected, /obj/item) && !isdroid(affected)) affected.Shake(duration = 0.5 SECONDS) continue - if(ishuman(affected)) //if they're human, they also should get knocked off their feet from the blast. + if(ishuman(affected)) var/mob/living/carbon/human/H = affected - if(H.stat == DEAD) //unless they are dead, then the blast mysteriously ignores them. + if(H.stat == DEAD) continue - H.apply_effects(2 SECONDS, 2 SECONDS) // Stun + H.apply_effects(2 SECONDS, 2 SECONDS) shake_camera(H, 2, 1) - var/throwlocation = affected.loc //first we get the target's location - for(var/x in 1 to 6) - throwlocation = get_step(throwlocation, owner.dir) //then we find where they're being thrown to, checking tile by tile. - affected.throw_at(throwlocation, 6, 1, owner, TRUE) + things_to_throw += affected + + for(var/atom/movable/affected AS in things_to_throw) + var/throwlocation = affected.loc + for(var/x in 1 to 6) + throwlocation = get_step(throwlocation, owner.dir) + affected.throw_at(throwlocation, 6, 1, owner, TRUE) owner.visible_message(span_xenowarning("[owner] sends out a huge blast of psychic energy!"), \ span_xenowarning("We send out a huge blast of psychic energy!")) @@ -315,6 +318,7 @@ RU TGMC EDIT */ //moved to modular keybinding_signals = list( KEYBINDING_NORMAL = COMSIG_XENOABILITY_PLACE_ACID_WELL, ) + use_state_flags = ABILITY_USE_LYING /datum/action/ability/xeno_action/place_acidwell/can_use_action(silent = FALSE, override_flags) . = ..() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/shrike/castedatum_shrike.dm b/code/modules/mob/living/carbon/xenomorph/castes/shrike/castedatum_shrike.dm index 39850eb059920..ad936f4269c96 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/shrike/castedatum_shrike.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/shrike/castedatum_shrike.dm @@ -29,7 +29,6 @@ maximum_active_caste = 1 //upgrade_threshold = TIER_TWO_THRESHOLD // RUTGMC DELETION - evolves_to = list(/mob/living/carbon/xenomorph/queen) deevolves_to = /mob/living/carbon/xenomorph/drone // *** Flags *** // @@ -58,6 +57,7 @@ /datum/action/ability/activable/xeno/neurotox_sting/ozelomelyn, /datum/action/ability/xeno_action/call_of_the_burrowed, /datum/action/ability/activable/xeno/secrete_resin, + /datum/action/ability/activable/xeno/secrete_special_resin, /datum/action/ability/xeno_action/place_acidwell, /datum/action/ability/activable/xeno/corrosive_acid, /datum/action/ability/activable/xeno/psychic_cure, @@ -94,6 +94,7 @@ /datum/action/ability/activable/xeno/neurotox_sting/ozelomelyn, /datum/action/ability/xeno_action/call_of_the_burrowed, /datum/action/ability/activable/xeno/secrete_resin, + /datum/action/ability/activable/xeno/secrete_special_resin, /datum/action/ability/xeno_action/place_acidwell, /datum/action/ability/activable/xeno/corrosive_acid, /datum/action/ability/activable/xeno/psychic_cure, diff --git a/code/modules/mob/living/carbon/xenomorph/castes/spiderling/castedatum_spiderling.dm b/code/modules/mob/living/carbon/xenomorph/castes/spiderling/castedatum_spiderling.dm index e220cbc53c5b4..0bf801722154d 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/spiderling/castedatum_spiderling.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/spiderling/castedatum_spiderling.dm @@ -13,6 +13,7 @@ // *** Melee Attacks *** // melee_damage = 8 + accuracy_malus = 65 // *** Speed *** // speed = -0.6 diff --git a/code/modules/mob/living/carbon/xenomorph/castes/spiderling/spiderling.dm b/code/modules/mob/living/carbon/xenomorph/castes/spiderling/spiderling.dm index f2ecf279d0e6e..a78fe68f88c2e 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/spiderling/spiderling.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/spiderling/spiderling.dm @@ -50,9 +50,9 @@ return ..() ///If we're covering our widow, any clicks should be transferred to them -/mob/living/carbon/xenomorph/spiderling/attack_alien(mob/living/carbon/xenomorph/X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) +/mob/living/carbon/xenomorph/spiderling/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) if(!get_dist(src, spidermother) && isxeno(x)) - spidermother.attack_alien(X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) + spidermother.attack_alien(xeno_attacker, damage_amount, damage_type, armor_type, effects, armor_penetration, isrightclick) return return ..() @@ -145,7 +145,7 @@ /// Check if escorted_atom moves away from the spiderling while it's attacking something, this is to always keep them close to escorted_atom /datum/ai_behavior/spiderling/look_for_new_state() if(current_action == MOVING_TO_ATOM) - if(escorted_atom) + if(escorted_atom && !(mob_parent.Adjacent(escorted_atom))) change_action(ESCORTING_ATOM, escorted_atom) /// Check so that we dont keep attacking our target beyond it's death diff --git a/code/modules/mob/living/carbon/xenomorph/castes/spitter/abilities_spitter.dm b/code/modules/mob/living/carbon/xenomorph/castes/spitter/abilities_spitter.dm index 22cdd0196ade5..58ac31d937d25 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/spitter/abilities_spitter.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/spitter/abilities_spitter.dm @@ -61,7 +61,7 @@ for(var/obj/O in T) if(is_type_in_typecache(O, GLOB.acid_spray_hit) && O.acid_spray_act(owner)) return // returned true if normal density applies - if(O.density && !(O.allow_pass_flags & PASS_PROJECTILE) && !(O.flags_atom & ON_BORDER)) + if(O.density && !(O.allow_pass_flags & PASS_PROJECTILE) && !(O.atom_flags & ON_BORDER)) blocked = TRUE break @@ -125,7 +125,7 @@ newspit.generate_bullet(scatter_spit, scatter_spit.damage * SPIT_UPGRADE_BONUS(X)) newspit.def_zone = X.get_limbzone_target() - newspit.fire_at(target, X, null, newspit.ammo.max_range) + newspit.fire_at(target, X, X, newspit.ammo.max_range) succeed_activate() add_cooldown() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/spitter/castedatum_spitter.dm b/code/modules/mob/living/carbon/xenomorph/castes/spitter/castedatum_spitter.dm index b1d9c86c904b0..9921f1031becf 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/spitter/castedatum_spitter.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/spitter/castedatum_spitter.dm @@ -25,10 +25,6 @@ evolution_threshold = 225 //upgrade_threshold = TIER_TWO_THRESHOLD // RUTGMC DELETION - evolves_to = list( - /mob/living/carbon/xenomorph/boiler, - /mob/living/carbon/xenomorph/praetorian, - ) deevolves_to = list( /mob/living/carbon/xenomorph/sentinel, ) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/warlock/abilities_warlock.dm b/code/modules/mob/living/carbon/xenomorph/castes/warlock/abilities_warlock.dm index 45753dc7d1c25..505abb98ab776 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/warlock/abilities_warlock.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/warlock/abilities_warlock.dm @@ -212,7 +212,7 @@ return !uncrossing /obj/effect/xeno/shield/do_projectile_hit(obj/projectile/proj) - proj.flags_projectile_behavior |= PROJECTILE_FROZEN + proj.projectile_behavior_flags |= PROJECTILE_FROZEN proj.iff_signal = null frozen_projectiles += proj take_damage(proj.damage, proj.ammo.damage_type, proj.ammo.armor_type, 0, REVERSE_DIR(proj.dir), proj.ammo.penetration) @@ -221,7 +221,7 @@ release_projectiles() owner.apply_effect(1 SECONDS, WEAKEN) -/obj/effect/xeno/shield/obj_destruction() +/obj/effect/xeno/shield/obj_destruction(damage_amount, damage_type, damage_flag, mob/living/blame_mob) release_projectiles() owner.apply_effect(1 SECONDS, WEAKEN) return ..() @@ -229,7 +229,7 @@ ///Unfeezes the projectiles on their original path /obj/effect/xeno/shield/proc/release_projectiles() for(var/obj/projectile/proj AS in frozen_projectiles) - proj.flags_projectile_behavior &= ~PROJECTILE_FROZEN + proj.projectile_behavior_flags &= ~PROJECTILE_FROZEN proj.resume_move() record_projectiles_frozen(owner, LAZYLEN(frozen_projectiles)) @@ -238,15 +238,14 @@ playsound(loc, 'sound/effects/portal.ogg', 20) var/perpendicular_angle = Get_Angle(get_turf(src), get_step(src, dir)) //the angle src is facing, get_turf because pixel_x or y messes with the angle for(var/obj/projectile/proj AS in frozen_projectiles) - proj.flags_projectile_behavior &= ~PROJECTILE_FROZEN + proj.projectile_behavior_flags &= ~PROJECTILE_FROZEN proj.distance_travelled = 0 //we're effectively firing it fresh var/new_angle = (perpendicular_angle + (perpendicular_angle - proj.dir_angle - 180)) if(new_angle < 0) new_angle += 360 else if(new_angle > 360) new_angle -= 360 - proj.firer = src - proj.fire_at(shooter = src, source = src, angle = new_angle, recursivity = TRUE) + proj.fire_at(source = src, angle = new_angle, recursivity = TRUE) //Record those sick rocket shots //Is not part of record_projectiles_frozen() because it is probably bad to be running that for every bullet! @@ -268,6 +267,7 @@ ability_cost = 40 cooldown_duration = 12 SECONDS keybind_flags = ABILITY_KEYBIND_USE_ABILITY + target_flags = ABILITY_TURF_TARGET keybinding_signals = list( KEYBINDING_NORMAL = COMSIG_XENOABILITY_PSYCHIC_CRUSH, ) @@ -403,9 +403,9 @@ carbon_victim.apply_damage(xeno_owner.xeno_caste.crush_strength * 1.5, STAMINA, blocked = BOMB) carbon_victim.adjust_stagger(5 SECONDS) carbon_victim.add_slowdown(6) - else if(ismecha(victim)) - var/obj/vehicle/sealed/mecha/mecha_victim = victim - mecha_victim.take_damage(xeno_owner.xeno_caste.crush_strength * 5, BRUTE, BOMB) + else if(isvehicle(victim)) + var/obj/vehicle/veh_victim = victim + veh_victim.take_damage(xeno_owner.xeno_caste.crush_strength * 5, BRUTE, BOMB) stop_crush() /// stops channeling and unregisters all listeners, resetting the ability @@ -542,16 +542,13 @@ /datum/action/ability/activable/xeno/psy_blast/use_ability(atom/A) var/mob/living/carbon/xenomorph/xeno_owner = owner - var/turf/target_turf = get_turf(A) - owner.balloon_alert(owner, "We channel our psychic power") - generate_particles(A, 7) //ADD_TRAIT(xeno_owner, TRAIT_IMMOBILE, PSYCHIC_BLAST_ABILITY_TRAIT) // RUTGMC DELETION, PSYBLAST IMMOBILIZING REMOVAL var/datum/ammo/energy/xeno/ammo_type = xeno_owner.ammo xeno_owner.update_glow(3, 3, ammo_type.glow_color) - if(!do_after(xeno_owner, 1 SECONDS, NONE, target_turf, BUSY_ICON_DANGER) || !can_use_ability(A, FALSE)) + if(!do_after(xeno_owner, 1 SECONDS, IGNORE_TARGET_LOC_CHANGE, A, BUSY_ICON_DANGER) || !can_use_ability(A, FALSE) || !(A in range(get_screen_size(TRUE), owner))) owner.balloon_alert(owner, "Our focus is disrupted") end_channel() //REMOVE_TRAIT(xeno_owner, TRAIT_IMMOBILE, PSYCHIC_BLAST_ABILITY_TRAIT) // RUTGMC DELETION, PSYBLAST IMMOBILIZING REMOVAL @@ -562,7 +559,7 @@ var/obj/projectile/hitscan/projectile = new /obj/projectile/hitscan(xeno_owner.loc) projectile.effect_icon = initial(ammo_type.hitscan_effect_icon) projectile.generate_bullet(ammo_type) - projectile.fire_at(A, xeno_owner, null, projectile.ammo.max_range, projectile.ammo.shell_speed) + projectile.fire_at(A, xeno_owner, xeno_owner, projectile.ammo.max_range, projectile.ammo.shell_speed) playsound(xeno_owner, 'sound/weapons/guns/fire/volkite_4.ogg', 40) if(istype(xeno_owner.ammo, /datum/ammo/energy/xeno/psy_blast)) @@ -614,10 +611,10 @@ /datum/action/ability/xeno_action/toggle_warlock_zoom/action_activate() var/mob/living/carbon/xenomorph/warlock/X = owner - if(X.is_zoomed) + if(X.xeno_flags & XENO_ZOOMED) X.zoom_out() else - if(!do_after(X, 0 SECONDS, IGNORE_HELD_ITEM, null, BUSY_ICON_GENERIC) || X.is_zoomed) + if(!do_after(X, 0 SECONDS, IGNORE_HELD_ITEM, null, BUSY_ICON_GENERIC) || (X.xeno_flags & XENO_ZOOMED)) return X.zoom_in(0, 4.5) ..() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/warlock/castedatum_warlock.dm b/code/modules/mob/living/carbon/xenomorph/castes/warlock/castedatum_warlock.dm index e763a4a4e0769..29df8b9630e20 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/warlock/castedatum_warlock.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/warlock/castedatum_warlock.dm @@ -12,7 +12,7 @@ speed = -0.5 plasma_max = 1700 plasma_gain = 60 - max_health = 375 + max_health = 325 //upgrade_threshold = TIER_THREE_THRESHOLD // RUTGMC DELETION spit_types = list(/datum/ammo/energy/xeno/psy_blast) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/warrior/castedatum_warrior.dm b/code/modules/mob/living/carbon/xenomorph/castes/warrior/castedatum_warrior.dm index bacec21114a7c..01c8ddb385a58 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/warrior/castedatum_warrior.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/warrior/castedatum_warrior.dm @@ -25,7 +25,6 @@ evolution_threshold = 225 //upgrade_threshold = TIER_TWO_THRESHOLD // RUTGMC DELETION - evolves_to = list(/mob/living/carbon/xenomorph/crusher, /mob/living/carbon/xenomorph/behemoth, /mob/living/carbon/xenomorph/gorger, /mob/living/carbon/xenomorph/warlock) deevolves_to = /mob/living/carbon/xenomorph/defender // *** Flags *** // diff --git a/code/modules/mob/living/carbon/xenomorph/castes/warrior/warrior.dm b/code/modules/mob/living/carbon/xenomorph/castes/warrior/warrior.dm index f0b570655fe09..ed76584183512 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/warrior/warrior.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/warrior/warrior.dm @@ -21,7 +21,7 @@ /mob/living/carbon/xenomorph/warrior/handle_special_state() var/datum/action/ability/xeno_action/toggle_agility/agility_action = actions_by_path[/datum/action/ability/xeno_action/toggle_agility] if(agility_action?.ability_active) - icon_state = "[xeno_caste.caste_name][is_a_rouny ? " rouny" : ""] Agility" + icon_state = "[xeno_caste.caste_name][(xeno_flags & XENO_ROUNY) ? " rouny" : ""] Agility" return TRUE return FALSE diff --git a/code/modules/mob/living/carbon/xenomorph/castes/widow/abilities_widow.dm b/code/modules/mob/living/carbon/xenomorph/castes/widow/abilities_widow.dm index 73e8dade2c253..76604218de7ca 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/widow/abilities_widow.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/widow/abilities_widow.dm @@ -17,7 +17,7 @@ newspit.generate_bullet(web_spit, web_spit.damage * SPIT_UPGRADE_BONUS(X)) newspit.def_zone = X.get_limbzone_target() - newspit.fire_at(target, X, null, newspit.ammo.max_range) + newspit.fire_at(target, X, X, newspit.ammo.max_range) succeed_activate() add_cooldown() @@ -46,7 +46,7 @@ var/obj/projectile/newspit = new (get_turf(X)) newspit.generate_bullet(leash_ball) - newspit.fire_at(target, X, null, newspit.ammo.max_range) + newspit.fire_at(target, X, X, newspit.ammo.max_range) succeed_activate() add_cooldown() @@ -108,15 +108,15 @@ return COMPONENT_MOVABLE_BLOCK_PRE_MOVE /// This is so that xenos can remove leash balls -/obj/structure/xeno/aoe_leash/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/structure/xeno/aoe_leash/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return - X.visible_message(span_xenonotice("\The [X] starts tearing down \the [src]!"), \ + xeno_attacker.visible_message(span_xenonotice("\The [xeno_attacker] starts tearing down \the [src]!"), \ span_xenonotice("We start to tear down \the [src].")) - if(!do_after(X, 1 SECONDS, NONE, X, BUSY_ICON_GENERIC) || QDELETED(src)) + if(!do_after(xeno_attacker, 1 SECONDS, NONE, xeno_attacker, BUSY_ICON_GENERIC) || QDELETED(src)) return - X.do_attack_animation(src, ATTACK_EFFECT_CLAW) - X.visible_message(span_xenonotice("\The [X] tears down \the [src]!"), \ + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_CLAW) + xeno_attacker.visible_message(span_xenonotice("\The [xeno_attacker] tears down \the [src]!"), \ span_xenonotice("We tear down \the [src].")) playsound(src, "alien_resin_break", 25) take_damage(max_integrity) @@ -135,6 +135,7 @@ KEYBINDING_NORMAL = COMSIG_XENOABILITY_CREATE_SPIDERLING, KEYBINDING_ALTERNATE = COMSIG_XENOABILITY_CREATE_SPIDERLING_USING_CC, ) + use_state_flags = ABILITY_USE_LYING /// List of all our spiderlings var/list/mob/living/carbon/xenomorph/spiderling/spiderlings = list() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/wraith/abilities_wraith.dm b/code/modules/mob/living/carbon/xenomorph/castes/wraith/abilities_wraith.dm index b086e6e5fb67a..545d1423273cc 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/wraith/abilities_wraith.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/wraith/abilities_wraith.dm @@ -297,6 +297,16 @@ GLOBAL_LIST_INIT(wraith_banish_very_short_duration_list, typecacheof(list( var/turf/return_turf = get_turf(portal) if(!return_turf) return_turf = locate(backup_coordinates[1], backup_coordinates[2], backup_coordinates[3]) + if(banishment_target.density) + var/list/cards = GLOB.cardinals.Copy() + for(var/mob/living/displacing in return_turf) + if(displacing.stat == DEAD) //no. + continue + shuffle(cards) //direction should vary. + for(var/card AS in cards) + if(step(displacing, card)) + to_chat(displacing, span_warning("A sudden force pushes you away from [return_turf]!")) + break banishment_target.resistance_flags = initial(banishment_target.resistance_flags) banishment_target.status_flags = initial(banishment_target.status_flags) //Remove stasis and temp invulerability banishment_target.forceMove(return_turf) @@ -382,7 +392,7 @@ GLOBAL_LIST_INIT(wraith_banish_very_short_duration_list, typecacheof(list( if(isclosedturf(T) && !ignore_closed_turf) //If we care about closed turfs return TRUE for(var/atom/blocker AS in T) - if((blocker.flags_atom & ON_BORDER) || blocker == subject) //If they're a border entity or our subject, we don't care + if((blocker.atom_flags & ON_BORDER) || blocker == subject) //If they're a border entity or our subject, we don't care continue if(!blocker.CanPass(subject, T) && !ignore_can_pass) //If the subject atom can't pass and we care about that, we have a block return TRUE @@ -484,7 +494,7 @@ GLOBAL_LIST_INIT(wraith_banish_very_short_duration_list, typecacheof(list( to_chat(owner, span_xenowarning("There is already a portal here!")) return FALSE var/area/area = get_area(owner) - if(area.flags_area & MARINE_BASE) + if(area.area_flags & MARINE_BASE) if(!silent) to_chat(owner, span_xenowarning("You cannot portal here!")) return FALSE @@ -552,6 +562,11 @@ GLOBAL_LIST_INIT(wraith_banish_very_short_duration_list, typecacheof(list( QDEL_NULL(portal_visuals) return ..() +/obj/effect/wraith_portal/ex_act() + if(linked_portal) + qdel(linked_portal) + qdel(src) + /obj/effect/wraith_portal/attack_ghost(mob/dead/observer/user) . = ..() if(!linked_portal) @@ -637,8 +652,6 @@ GLOBAL_LIST_INIT(wraith_banish_very_short_duration_list, typecacheof(list( animate(get_filter("portal_ripple"), time = 1.3 SECONDS, loop = -1, easing = LINEAR_EASING, radius = 32) vis_contents += our_destination -/obj/effect/wraith_portal/ex_act() - qdel(src) /datum/action/ability/activable/xeno/rewind name = "Time Shift" @@ -662,6 +675,10 @@ GLOBAL_LIST_INIT(wraith_banish_very_short_duration_list, typecacheof(list( var/target_initial_brute_damage = 0 /// Initial sunder of the target var/target_initial_sunder = 0 + /// Initial fire stacks of the target + var/target_initial_fire_stacks = 0 + /// Initial on_fire value + var/target_initial_on_fire = FALSE /// How far can you rewind someone var/range = 5 @@ -693,6 +710,8 @@ GLOBAL_LIST_INIT(wraith_banish_very_short_duration_list, typecacheof(list( last_target_locs_list = list(get_turf(A)) target_initial_brute_damage = targeted.getBruteLoss() target_initial_burn_damage = targeted.getFireLoss() + target_initial_fire_stacks = targeted.fire_stacks + target_initial_on_fire = targeted.on_fire if(isxeno(A)) var/mob/living/carbon/xenomorph/xeno_target = targeted target_initial_sunder = xeno_target.sunder @@ -735,7 +754,12 @@ GLOBAL_LIST_INIT(wraith_banish_very_short_duration_list, typecacheof(list( targeted.status_flags &= ~(INCORPOREAL|GODMODE) REMOVE_TRAIT(owner, TRAIT_IMMOBILE, TIMESHIFT_TRAIT) targeted.heal_overall_damage(targeted.getBruteLoss() - target_initial_brute_damage, targeted.getFireLoss() - target_initial_burn_damage, updating_health = TRUE) - if(isxeno(target)) + if(target_initial_on_fire && target_initial_fire_stacks >= 0) + targeted.fire_stacks = target_initial_fire_stacks + targeted.IgniteMob() + else + targeted.ExtinguishMob() + if(isxeno(targeted)) var/mob/living/carbon/xenomorph/xeno_target = targeted xeno_target.sunder = target_initial_sunder targeted.remove_filter("rewind_blur") diff --git a/code/modules/mob/living/carbon/xenomorph/castes/wraith/castedatum_wraith.dm b/code/modules/mob/living/carbon/xenomorph/castes/wraith/castedatum_wraith.dm index dddb8dd3caf8a..5f7998202ec22 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/wraith/castedatum_wraith.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/wraith/castedatum_wraith.dm @@ -26,11 +26,6 @@ evolution_threshold = 225 //upgrade_threshold = TIER_TWO_THRESHOLD // RUTGMC DELETION - evolves_to = list( - /mob/living/carbon/xenomorph/defiler, - /mob/living/carbon/xenomorph/ravager, - /mob/living/carbon/xenomorph/warlock, - ) deevolves_to = /mob/living/carbon/xenomorph/runner // *** Flags *** // diff --git a/code/modules/mob/living/carbon/xenomorph/charge_crush.dm b/code/modules/mob/living/carbon/xenomorph/charge_crush.dm index 783252f54bd8b..52d41f5a48dd2 100644 --- a/code/modules/mob/living/carbon/xenomorph/charge_crush.dm +++ b/code/modules/mob/living/carbon/xenomorph/charge_crush.dm @@ -401,7 +401,7 @@ charge_datum.do_stop_momentum() return PRECRUSH_STOPPED if(anchored) - if(flags_atom & ON_BORDER) + if(atom_flags & ON_BORDER) if(dir == REVERSE_DIR(charger.dir)) . = (CHARGE_SPEED(charge_datum) * 80) //Damage to inflict. charge_datum.speed_down(3) @@ -425,6 +425,9 @@ /obj/vehicle/sealed/mecha/pre_crush_act(mob/living/carbon/xenomorph/charger, datum/action/ability/xeno_action/ready_charge/charge_datum) return (CHARGE_SPEED(charge_datum) * 375) +/obj/hitbox/pre_crush_act(mob/living/carbon/xenomorph/charger, datum/action/ability/xeno_action/ready_charge/charge_datum) + return (CHARGE_SPEED(charge_datum) * 20) + /obj/structure/razorwire/pre_crush_act(mob/living/carbon/xenomorph/charger, datum/action/ability/xeno_action/ready_charge/charge_datum) if(CHECK_BITFIELD(resistance_flags, INDESTRUCTIBLE) || charger.is_charging < CHARGE_ON) charge_datum.do_stop_momentum() diff --git a/code/modules/mob/living/carbon/xenomorph/death.dm b/code/modules/mob/living/carbon/xenomorph/death.dm index 8d1fbbab7477c..1351684d5d038 100644 --- a/code/modules/mob/living/carbon/xenomorph/death.dm +++ b/code/modules/mob/living/carbon/xenomorph/death.dm @@ -4,10 +4,7 @@ /mob/living/carbon/xenomorph/death(gibbing, deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw.", silent) - if(stat == DEAD) - return ..() - return ..() //Just a different standard deathmessage - + return ..() //we're just changing the death message /mob/living/carbon/xenomorph/on_death() GLOB.alive_xeno_list -= src @@ -20,11 +17,13 @@ hive?.on_xeno_death(src) hive?.update_tier_limits() //Update our tier limits. - if(is_zoomed) + if(xeno_flags & XENO_ZOOMED) zoom_out() - if(tier != XENO_TIER_MINION) - GLOB.key_to_time_of_xeno_death[key] = world.time + if(GLOB.xeno_stat_multiplicator_buff == 1) //if autobalance is on, it won't equal 1, so xeno respawn timer is not set + switch(tier) + if(XENO_TIER_ZERO, XENO_TIER_ONE, XENO_TIER_TWO, XENO_TIER_THREE) //minions and tier fours have no respawn timer + GLOB.key_to_time_of_xeno_death[key] = world.time SSminimaps.remove_marker(src) set_light_on(FALSE) @@ -37,6 +36,7 @@ if(hud_used.alien_plasma_display) hud_used.alien_plasma_display.icon_state = "power_display_empty" update_icons() + hud_set_plasma() death_cry() diff --git a/code/modules/mob/living/carbon/xenomorph/egg.dm b/code/modules/mob/living/carbon/xenomorph/egg.dm index 4d77621558e64..c0f8e7477f168 100644 --- a/code/modules/mob/living/carbon/xenomorph/egg.dm +++ b/code/modules/mob/living/carbon/xenomorph/egg.dm @@ -1,7 +1,7 @@ /obj/alien/egg name = "theoretical egg" density = FALSE - flags_atom = CRITICAL_ATOM + atom_flags = CRITICAL_ATOM max_integrity = 80 integrity_failure = 20 ///What maturity stage are we in @@ -21,6 +21,7 @@ advance_maturity(maturity_stage) /obj/alien/egg/update_icon_state() + . = ..() icon_state = initial(icon_state) + "[maturity_stage]" /obj/alien/egg/obj_break(damage_flag) @@ -82,7 +83,7 @@ name = "hugger egg" icon_state = "egg_hugger" density = FALSE - flags_atom = CRITICAL_ATOM + atom_flags = CRITICAL_ATOM max_integrity = 80 maturity_time = 15 SECONDS stage_ready_to_burst = 2 @@ -119,37 +120,36 @@ hugger.go_active() */ -/obj/alien/egg/hugger/attack_alien(mob/living/carbon/xenomorph/xenomorph, damage_amount = xenomorph.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(xenomorph.status_flags & INCORPOREAL) +/obj/alien/egg/hugger/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return FALSE - if(!istype(xenomorph)) - return attack_hand(xenomorph) + if(!istype(xeno_attacker)) + return attack_hand(xeno_attacker) - if(!issamexenohive(xenomorph)) - xenomorph.do_attack_animation(src, ATTACK_EFFECT_SMASH) - xenomorph.visible_message("[xenomorph] crushes \the [src].","We crush \the [src].") + if(!issamexenohive(xeno_attacker)) + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_SMASH) + xeno_attacker.visible_message("[xeno_attacker] crushes \the [src].","We crush \the [src].") burst(FALSE) return switch(maturity_stage) if(1) - to_chat(xenomorph, span_xenowarning("The child is not developed yet.")) + to_chat(xeno_attacker, span_xenowarning("The child is not developed yet.")) if(2) - to_chat(xenomorph, span_xenonotice("We retrieve the child.")) + to_chat(xeno_attacker, span_xenonotice("We retrieve the child.")) burst() if(3, 4) - xenomorph.visible_message(span_xenonotice("\The [xenomorph] clears the hatched egg."), \ + xeno_attacker.visible_message(span_xenonotice("\The [xeno_attacker] clears the hatched egg."), \ span_xenonotice("We clear the hatched egg.")) playsound(loc, "alien_resin_break", 25) qdel(src) /obj/alien/egg/hugger/attackby(obj/item/I, mob/user, params) - . = ..() + if(istype(I, /obj/item/clothing/mask/facehugger)) + return insert_new_hugger(I, user) - if(!istype(I, /obj/item/clothing/mask/facehugger)) - return FALSE - return insert_new_hugger(I, user) + return ..() ///Try to insert a new hugger into the egg /obj/alien/egg/hugger/proc/insert_new_hugger(obj/item/clothing/mask/facehugger/facehugger, mob/user) @@ -208,18 +208,18 @@ NS.start() */ //RUTGMC EDIT END -/obj/alien/egg/gas/attack_alien(mob/living/carbon/xenomorph/xenomorph, damage_amount = xenomorph.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) +/obj/alien/egg/gas/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) if(maturity_stage > stage_ready_to_burst) - xenomorph.visible_message(span_xenonotice("\The [xenomorph] clears the hatched egg."), \ + xeno_attacker.visible_message(span_xenonotice("\The [xeno_attacker] clears the hatched egg."), \ span_xenonotice("We clear the broken egg.")) playsound(loc, "alien_resin_break", 25) qdel(src) - if(!issamexenohive(xenomorph) || xenomorph.a_intent != INTENT_HELP) - xenomorph.do_attack_animation(src, ATTACK_EFFECT_SMASH) - xenomorph.visible_message(span_xenowarning("[xenomorph] crushes \the [src]."), span_xenowarning("We crush \the [src].")) + if(!issamexenohive(xeno_attacker) || xeno_attacker.a_intent != INTENT_HELP) + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_SMASH) + xeno_attacker.visible_message(span_xenowarning("[xeno_attacker] crushes \the [src]."), span_xenowarning("We crush \the [src].")) burst(TRUE) return - to_chat(xenomorph, span_warning("That egg is filled with gas and has no child to retrieve.")) + to_chat(xeno_attacker, span_warning("That egg is filled with gas and has no child to retrieve.")) diff --git a/code/modules/mob/living/carbon/xenomorph/embryo.dm b/code/modules/mob/living/carbon/xenomorph/embryo.dm index dcdc762b858d7..6f71a087a14d3 100644 --- a/code/modules/mob/living/carbon/xenomorph/embryo.dm +++ b/code/modules/mob/living/carbon/xenomorph/embryo.dm @@ -192,9 +192,9 @@ victim.update_burst() - if(istype(victim.loc, /obj/vehicle/multitile/root)) - var/obj/vehicle/multitile/root/V = victim.loc - V.handle_player_exit(src) + if(istype(victim.loc, /obj/vehicle/sealed)) + var/obj/vehicle/sealed/armored/veh = victim.loc + forceMove(veh.exit_location(src)) else forceMove(get_turf(victim)) //moved to the turf directly so we don't get stuck inside a cryopod or another mob container. playsound(src, pick('sound/voice/alien_chestburst.ogg','sound/voice/alien_chestburst2.ogg'), 25) diff --git a/code/modules/mob/living/carbon/xenomorph/evo_datum.dm b/code/modules/mob/living/carbon/xenomorph/evo_datum.dm index 9a5b6415091d4..15bda447ac49b 100644 --- a/code/modules/mob/living/carbon/xenomorph/evo_datum.dm +++ b/code/modules/mob/living/carbon/xenomorph/evo_datum.dm @@ -24,7 +24,7 @@ .["abilities"] = list() for(var/ability in xeno.xeno_caste.actions) var/datum/action/ability/xeno_action/xeno_ability = ability - if(SSticker.mode && !(SSticker.mode.flags_xeno_abilities & initial(xeno_ability.gamemode_flags))) + if(SSticker.mode && !(SSticker.mode.xeno_abilities_flags & initial(xeno_ability.gamemode_flags))) continue .["abilities"]["[ability]"] = list( "name" = initial(xeno_ability.name), @@ -33,17 +33,17 @@ "cooldown" = (initial(xeno_ability.cooldown_duration) / 10) ) .["evolves_to"] = list() - for(var/evolves_into in xeno.xeno_caste.evolves_to) + for(var/evolves_into in xeno.get_evolution_options()) var/datum/xeno_caste/caste = GLOB.xeno_caste_datums[evolves_into][XENO_UPGRADE_BASETYPE] var/list/caste_data = list( "type_path" = caste.caste_type_path, "name" = caste.display_name, "abilities" = list(), - "instant_evolve" = (caste.caste_flags & CASTE_INSTANT_EVOLUTION), + "instant_evolve" = (caste.caste_flags & CASTE_INSTANT_EVOLUTION || (HAS_TRAIT(xeno, TRAIT_CASTE_SWAP) || HAS_TRAIT(xeno, TRAIT_REGRESSING))), ) for(var/ability in caste.actions) var/datum/action/ability/xeno_action/xeno_ability = ability - if(SSticker.mode && !(SSticker.mode.flags_xeno_abilities & initial(xeno_ability.gamemode_flags))) + if(SSticker.mode && !(SSticker.mode.xeno_abilities_flags & initial(xeno_ability.gamemode_flags))) continue caste_data["abilities"]["[ability]"] = list( "name" = initial(xeno_ability.name), @@ -74,5 +74,10 @@ switch(action) if("evolve") var/datum/xeno_caste/caste = GLOB.xeno_caste_datums[text2path(params["path"])][XENO_UPGRADE_BASETYPE] - xeno.do_evolve(caste.caste_type_path, caste.display_name) // All the checks for can or can't are handled inside do_evolve + xeno.do_evolve(caste.caste_type_path, caste.display_name, (HAS_TRAIT(xeno, TRAIT_CASTE_SWAP) || HAS_TRAIT(xeno, TRAIT_REGRESSING))) // All the checks for can or can't are handled inside do_evolve return TRUE + +/datum/evolution_panel/ui_close(mob/user) + . = ..() + REMOVE_TRAIT(user, TRAIT_CASTE_SWAP, TRAIT_CASTE_SWAP) + REMOVE_TRAIT(user, TRAIT_REGRESSING, TRAIT_REGRESSING) diff --git a/code/modules/mob/living/carbon/xenomorph/evolution.dm b/code/modules/mob/living/carbon/xenomorph/evolution.dm index 888cc62c646c3..d5b3566d4c074 100644 --- a/code/modules/mob/living/carbon/xenomorph/evolution.dm +++ b/code/modules/mob/living/carbon/xenomorph/evolution.dm @@ -2,15 +2,26 @@ //Recoded and consolidated by Abby -- ALL evolutions come from here now. It should work with any caste, anywhere // refactored by spookydonut because the above two were shitcoders and i'm sure in time my code too will be considered shit. -//All castes need an evolves_to() list in their defines -//Such as evolves_to = list("Warrior", "Sentinel", "Runner", "Badass") etc -// except use typepaths now so you dont have to have an entry for literally every evolve path /mob/living/carbon/xenomorph/verb/Evolve() set name = "Evolve" set desc = "Evolve into a higher form." set category = "Alien" + SStgui.close_user_uis(src, GLOB.evo_panel) // Closes all verbs using evo UI; evolution, caste swap and regress. They need to be refreshed with their respective castelists. + GLOB.evo_panel.ui_interact(src) + +/mob/living/carbon/xenomorph/verb/caste_swap() + set name = "Caste Swap" + set desc = "Change into another caste in the same tier." + set category = "Alien" + + if(world.time - (GLOB.key_to_time_of_caste_swap[key] ? GLOB.key_to_time_of_caste_swap[key] : -INFINITY) < 9000) //casteswap timer, 15 minutes + to_chat(src, span_warning("Your caste swap timer is not done yet.")) + return + + SStgui.close_user_uis(src, GLOB.evo_panel) + ADD_TRAIT(src, TRAIT_CASTE_SWAP, TRAIT_CASTE_SWAP) GLOB.evo_panel.ui_interact(src) /mob/living/carbon/xenomorph/verb/regress() @@ -18,42 +29,52 @@ set desc = "Regress into a lower form." set category = "Alien" - var/tiers_to_pick_from + SStgui.close_user_uis(src, GLOB.evo_panel) + ADD_TRAIT(src, TRAIT_REGRESSING, TRAIT_REGRESSING) + GLOB.evo_panel.ui_interact(src) + +///Creates a list of possible evolution options for a caste based on their tier. +/mob/living/carbon/xenomorph/proc/get_evolution_options() + . = list() + if(HAS_TRAIT(src, TRAIT_CASTE_SWAP)) + switch(tier) + if(XENO_TIER_ZERO, XENO_TIER_FOUR) + return + if(XENO_TIER_ONE) + return GLOB.xeno_types_tier_one + if(XENO_TIER_TWO) + return GLOB.xeno_types_tier_two + if(XENO_TIER_THREE) + return GLOB.xeno_types_tier_three + if(HAS_TRAIT(src, TRAIT_REGRESSING)) + switch(tier) + if(XENO_TIER_ZERO, XENO_TIER_FOUR) + if(isxenoshrike(src)) + return GLOB.xeno_types_tier_one + else + return + if(XENO_TIER_ONE) + return list(/mob/living/carbon/xenomorph/larva) + if(XENO_TIER_TWO) + return GLOB.xeno_types_tier_one + if(XENO_TIER_THREE) + return GLOB.xeno_types_tier_two switch(tier) - if(XENO_TIER_ZERO, XENO_TIER_FOUR, XENO_TIER_MINION) -/* RU TGMC EDIT - if(isxenoshrike(src)) - tiers_to_pick_from = GLOB.xeno_types_tier_one - else -RU TGMC EDIT */ - to_chat(src, span_warning("Your tier does not allow you to regress.")) - return + if(XENO_TIER_ZERO) + if(istype(xeno_caste, /datum/xeno_caste/larva_predalien)) + return list(/mob/living/carbon/xenomorph/predalien) + if(!istype(xeno_caste, /datum/xeno_caste/hivemind)) + return GLOB.xeno_types_tier_one if(XENO_TIER_ONE) - tiers_to_pick_from = list(/mob/living/carbon/xenomorph/larva) + return GLOB.xeno_types_tier_two + GLOB.xeno_types_tier_four + /mob/living/carbon/xenomorph/hivemind if(XENO_TIER_TWO) - tiers_to_pick_from = GLOB.xeno_types_tier_one + return GLOB.xeno_types_tier_three + GLOB.xeno_types_tier_four + /mob/living/carbon/xenomorph/hivemind if(XENO_TIER_THREE) - tiers_to_pick_from = GLOB.xeno_types_tier_two - else - CRASH("side_evolve() called without a valid tier") - - var/list/castes_to_pick = list() - for(var/type in tiers_to_pick_from) - var/datum/xeno_caste/available_caste = GLOB.xeno_caste_datums[type][XENO_UPGRADE_BASETYPE] - castes_to_pick += available_caste.caste_name - var/castepick = tgui_input_list(src, "We are growing into a beautiful alien! It is time to choose a caste.", null, castes_to_pick) - if(!castepick) //Changed my mind - return - - var/castetype - for(var/type in tiers_to_pick_from) - var/datum/xeno_caste/available_caste = GLOB.xeno_caste_datums[type][XENO_UPGRADE_BASETYPE] - if(castepick != available_caste.caste_name) - continue - castetype = type - break + return GLOB.xeno_types_tier_four + /mob/living/carbon/xenomorph/hivemind + if(XENO_TIER_FOUR) + if(istype(xeno_caste, /datum/xeno_caste/shrike)) + return list(/mob/living/carbon/xenomorph/queen, /mob/living/carbon/xenomorph/king) - do_evolve(castetype, castepick, TRUE) ///Handles the evolution or devolution of the xenomorph /mob/living/carbon/xenomorph/proc/do_evolve(caste_type, forced_caste_name, regression = FALSE) @@ -70,14 +91,14 @@ RU TGMC EDIT */ castepick = forced_caste_name else var/list/castes_to_pick = list() - for(var/type in xeno_caste.evolves_to) + for(var/type in get_evolution_options()) var/datum/xeno_caste/Z = GLOB.xeno_caste_datums[type][XENO_UPGRADE_BASETYPE] castes_to_pick += Z.caste_name castepick = tgui_input_list(src, "We are growing into a beautiful alien! It is time to choose a caste.", null, castes_to_pick) if(!castepick) //Changed my mind return - for(var/type in xeno_caste.evolves_to) + for(var/type in get_evolution_options()) var/datum/xeno_caste/XC = GLOB.xeno_caste_datums[type][XENO_UPGRADE_BASETYPE] if(castepick == XC.caste_name) new_mob_type = type @@ -101,6 +122,12 @@ RU TGMC EDIT */ if(!generic_evolution_checks() || !caste_evolution_checks(new_mob_type, castepick, regression)) return + if(HAS_TRAIT(src, TRAIT_CASTE_SWAP)) + GLOB.key_to_time_of_caste_swap[key] = world.time + + if(xeno_flags & XENO_ZOOMED) + zoom_out() + SStgui.close_user_uis(src) //Force close all UIs upon evolution. finish_evolve(new_mob_type) @@ -140,10 +167,10 @@ RU TGMC EDIT */ new_xeno.fireloss = fireloss //Transfers the damage over. new_xeno.updatehealth() - if(xeno_mobhud) + if(xeno_flags & XENO_MOBHUD) var/datum/atom_hud/H = GLOB.huds[DATA_HUD_XENO_STATUS] H.add_hud_to(new_xeno) //keep our mobhud choice - new_xeno.xeno_mobhud = TRUE + new_xeno.xeno_flags |= XENO_MOBHUD if(lighting_alpha != new_xeno.lighting_alpha) new_xeno.toggle_nightvision(lighting_alpha) @@ -161,7 +188,7 @@ RU TGMC EDIT */ GLOB.round_statistics.total_xenos_created-- //so an evolved xeno doesn't count as two. SSblackbox.record_feedback("tally", "round_statistics", -1, "total_xenos_created") - if(queen_chosen_lead && (new_xeno.xeno_caste.can_flags & CASTE_CAN_BE_LEADER)) // xeno leader is removed by Destroy() + if((xeno_flags & XENO_LEADER) && (new_xeno.xeno_caste.can_flags & CASTE_CAN_BE_LEADER)) // xeno leader is removed by Destroy() hive.add_leader(new_xeno) new_xeno.hud_set_queen_overwatch() if(hive.living_xeno_queen) @@ -217,7 +244,7 @@ RU TGMC EDIT */ balloon_alert(src, "The restraints are too restricting to allow us to evolve") return FALSE - if(isnull(xeno_caste.evolves_to) || !(xeno_caste.caste_flags & CASTE_EVOLUTION_ALLOWED) || HAS_TRAIT(src, TRAIT_VALHALLA_XENO)) + if(isnull(get_evolution_options()) || !(xeno_caste.caste_flags & CASTE_EVOLUTION_ALLOWED) || HAS_TRAIT(src, TRAIT_VALHALLA_XENO)) balloon_alert(src, "We are already the apex of form and function. Let's go forth and spread the hive!") return FALSE @@ -245,7 +272,7 @@ RU TGMC EDIT */ ///Check if the xeno can currently evolve into a specific caste /mob/living/carbon/xenomorph/proc/caste_evolution_checks(new_mob_type, castepick, regression = FALSE) - if(!regression && !(new_mob_type in xeno_caste.evolves_to)) + if(!regression && !(new_mob_type in get_evolution_options())) balloon_alert(src, "We can't evolve to that caste from our current one") return FALSE @@ -308,7 +335,7 @@ RU TGMC EDIT */ balloon_alert(src, "The hive cannot support another Tier 3, wait for either more aliens to be born or someone to die") return FALSE var/potential_queens = length(hive.xenos_by_typepath[/mob/living/carbon/xenomorph/larva]) + length(hive.xenos_by_typepath[/mob/living/carbon/xenomorph/drone]) - if(SSticker.mode?.flags_round_type & MODE_XENO_RULER && !hive.living_xeno_ruler && potential_queens == 1) + if(SSticker.mode?.round_type_flags & MODE_XENO_RULER && !hive.living_xeno_ruler && potential_queens == 1) if(isxenolarva(src) && new_mob_type != /mob/living/carbon/xenomorph/drone) to_chat(src, span_xenonotice("The hive currently has no sister able to become a ruler! The survival of the hive requires from us to be a Drone!")) return FALSE diff --git a/code/modules/mob/living/carbon/xenomorph/facehuggers.dm b/code/modules/mob/living/carbon/xenomorph/facehuggers.dm index 0ad69d28491c0..b714759dbd863 100644 --- a/code/modules/mob/living/carbon/xenomorph/facehuggers.dm +++ b/code/modules/mob/living/carbon/xenomorph/facehuggers.dm @@ -19,10 +19,10 @@ item_state = "facehugger" w_class = WEIGHT_CLASS_TINY //Note: can be picked up by aliens unlike most other items of w_class below 4 resistance_flags = NONE - flags_inventory = COVEREYES|COVERMOUTH - flags_armor_protection = FACE|EYES - flags_atom = CRITICAL_ATOM - flags_item = NOBLUDGEON + inventory_flags = COVEREYES|COVERMOUTH + armor_protection_flags = FACE|EYES + atom_flags = CRITICAL_ATOM + item_flags = NOBLUDGEON throw_range = 1 worn_layer = FACEHUGGER_LAYER layer = FACEHUGGER_LAYER @@ -100,7 +100,8 @@ clear_hugger_source() return ..() -/obj/item/clothing/mask/facehugger/update_icon() +/obj/item/clothing/mask/facehugger/update_icon_state() + . = ..() if(stat == DEAD) var/fertility = sterile ? "impregnated" : "dead" icon_state = "[initial(icon_state)]_[fertility]" @@ -115,18 +116,18 @@ //Deal with picking up facehuggers. "attack_alien" is the universal 'xenos click something while unarmed' proc. -/obj/item/clothing/mask/facehugger/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/item/clothing/mask/facehugger/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return - if(!issamexenohive(X) && stat != DEAD) - X.do_attack_animation(src, ATTACK_EFFECT_SMASH) - X.visible_message("[X] crushes \the [src]", + if(!issamexenohive(xeno_attacker) && stat != DEAD) + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_SMASH) + xeno_attacker.visible_message("[xeno_attacker] crushes \the [src]", "We crush \the [src]") kill_hugger() return else - attack_hand(X) + attack_hand(xeno_attacker) //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/mask/facehugger/attack_hand(mob/living/user) @@ -293,12 +294,12 @@ if(stat == DEAD || stat == UNCONSCIOUS || !isturf(loc)) //It's dead or inactive or not on a turf don't bother return about_to_jump = TRUE - update_overlays() + update_appearance(UPDATE_OVERLAYS) ///Remove the hugger's alert overlay /obj/item/clothing/mask/facehugger/proc/remove_danger_overlay() about_to_jump = FALSE - update_overlays() + update_appearance(UPDATE_OVERLAYS) /obj/item/clothing/mask/facehugger/proc/check_lifecycle() @@ -647,13 +648,13 @@ kill_hugger() /obj/item/clothing/mask/facehugger/attackby(obj/item/I, mob/user, params) - if(I.flags_item & NOBLUDGEON || attached) + if(I.item_flags & NOBLUDGEON || attached) return kill_hugger() /obj/item/clothing/mask/facehugger/bullet_act(obj/projectile/P) ..() - if(P.ammo.flags_ammo_behavior & AMMO_XENO) + if(P.ammo.ammo_behavior_flags & AMMO_XENO) return FALSE //Xeno spits ignore huggers. if(P.damage && !(P.ammo.damage_type in list(OXY, STAMINA))) kill_hugger() @@ -704,33 +705,47 @@ /obj/item/clothing/mask/facehugger/combat sterile = TRUE combat_hugger = TRUE - flags_equip_slot = NONE - + equip_slot_flags = NONE -/obj/item/clothing/mask/facehugger/combat/neuro - name = "neuro hugger" +/obj/item/clothing/mask/facehugger/combat/chem_injector desc = "This strange creature has a single prominent sharp proboscis." - color = COLOR_DARK_ORANGE impact_time = 1 SECONDS activate_time = 1.5 SECONDS jump_cooldown = 1.5 SECONDS proximity_time = 0.5 SECONDS + ///The type of chemical we inject + var/datum/reagent/toxin/injected_chemical_type + ///The amount of chemical we should inject, in units + var/amount_injected = 10 -/obj/item/clothing/mask/facehugger/combat/neuro/Attach(mob/M, mob/user) +/obj/item/clothing/mask/facehugger/combat/chem_injector/Attach(mob/living/carbon/M, mob/user) if(!combat_hugger_check_target(M)) return FALSE - var/mob/living/victim = M do_attack_animation(M) - victim.apply_damage(100, STAMINA, BODY_ZONE_HEAD, BIO) //This should prevent sprinting - victim.apply_damage(1, BRUTE, sharp = TRUE, updating_health = TRUE) //Token brute for the injection - victim.reagents.add_reagent(/datum/reagent/toxin/xeno_neurotoxin, 10, no_overdose = TRUE) - playsound(victim, 'sound/effects/spray3.ogg', 25, 1) - victim.visible_message(span_danger("[src] penetrates [victim] with its sharp probscius!"),span_danger("[src] penetrates you with a sharp probscius before falling down!")) + M.apply_damage(1, BRUTE, sharp = TRUE, updating_health = TRUE) //Token brute for the injection + M.reagents.add_reagent(injected_chemical_type, amount_injected, no_overdose = TRUE) + playsound(M, 'sound/effects/spray3.ogg', 25, 1) + M.visible_message(span_danger("[src] penetrates [M] with its sharp probscius!"), span_danger("[src] penetrates you with a sharp probscius before falling down!")) leaping = FALSE go_idle() //We're a bit slow on the recovery return TRUE +/obj/item/clothing/mask/facehugger/combat/chem_injector/neuro + name = "neurotoxin hugger" + color = COLOR_DARK_ORANGE + injected_chemical_type = /datum/reagent/toxin/xeno_neurotoxin + +/obj/item/clothing/mask/facehugger/combat/chem_injector/neuro/Attach(mob/living/carbon/M) + if(!..()) + return + M.apply_damage(100, STAMINA, BODY_ZONE_HEAD, BIO) //This should prevent sprinting + +/obj/item/clothing/mask/facehugger/combat/chem_injector/ozelomelyn + name = "ozelomelyn hugger" + injected_chemical_type = /datum/reagent/toxin/xeno_ozelomelyn + color = COLOR_MAGENTA + /obj/item/clothing/mask/facehugger/combat/acid name = "acid hugger" desc = "This repulsive looking thing is bloated with throbbing, putrescent green sacks of flesh." diff --git a/code/modules/mob/living/carbon/xenomorph/hive_datum.dm b/code/modules/mob/living/carbon/xenomorph/hive_datum.dm index 7b8a7b22d1282..a5d1cae011382 100644 --- a/code/modules/mob/living/carbon/xenomorph/hive_datum.dm +++ b/code/modules/mob/living/carbon/xenomorph/hive_datum.dm @@ -27,6 +27,8 @@ var/tier2_xeno_limit /// Queue of all clients wanting to join xeno side var/list/client/candidates + /// Amount of special resin points used to build special resin walls by each hive. + var/special_build_points = 50 ///Reference to upgrades available and purchased by this hive. var/datum/hive_purchases/purchases = new @@ -80,8 +82,8 @@ .["hive_larva_rate"] = SSsilo.current_larva_spawn_rate .["hive_larva_burrowed"] = xeno_job.total_positions - xeno_job.current_positions - var/psy_points = SSpoints.xeno_points_by_hive[hivenumber] - .["hive_psy_points"] = !isnull(psy_points) ? psy_points : 0 + .["hive_strategic_psy_points"] = !isnull(SSpoints.xeno_strategic_points_by_hive[hivenumber]) ? SSpoints.xeno_strategic_points_by_hive[hivenumber] : 0 + .["hive_tactical_psy_points"] = !isnull(SSpoints.xeno_tactical_points_by_hive[hivenumber]) ? SSpoints.xeno_tactical_points_by_hive[hivenumber] : 0 var/hivemind_countdown = SSticker.mode?.get_hivemind_collapse_countdown() .["hive_orphan_collapse"] = !isnull(hivemind_countdown) ? hivemind_countdown : 0 @@ -141,7 +143,7 @@ "health" = round(health * 100, 1), "plasma" = round((xeno.plasma_stored / (caste.plasma_max * plasma_multi)) * 100, 1), "can_be_leader" = CHECK_BITFIELD(initial(caste.can_flags), CASTE_CAN_BE_LEADER), //RUTGMC ADDITION - "is_leader" = xeno.queen_chosen_lead, + "is_leader" = xeno.xeno_flags & XENO_LEADER, "is_ssd" = !xeno.client, "index" = GLOB.hive_ui_caste_index[caste.caste_type_path], )) @@ -383,6 +385,12 @@ for(var/obj/structure/xeno/evotower/tower AS in evotowers) . += tower.boost_amount +///fetches number of bonus maturity points given to the hive +/datum/hive_status/proc/get_upgrade_boost() + . = 0 + for(var/obj/structure/xeno/evotower/tower AS in evotowers) + . += tower.maturty_boost_amount + // *************************************** // *********** Adding xenos // *************************************** @@ -537,7 +545,7 @@ if(!hive.remove_xeno(src)) CRASH("failed to remove xeno from a hive") - if(queen_chosen_lead || (src in hive.xeno_leader_list)) + if((xeno_flags & XENO_LEADER) || (src in hive.xeno_leader_list)) hive.remove_leader(src) SSdirection.stop_tracking(hive.hivenumber, src) @@ -552,7 +560,7 @@ var/obj/machinery/nuclearbomb/nuke = thing if(!nuke.timer) CRASH("hive_status's setup_nuke_hud_timer called with invalid nuke object") - nuke_hud_timer = new(null, get_all_xenos() , nuke.timer, "Nuke ACTIVE: ${timer}") + nuke_hud_timer = new(null, null, get_all_xenos() , nuke.timer, "Nuke ACTIVE: ${timer}") /datum/hive_status/Destroy(force, ...) . = ..() @@ -606,12 +614,12 @@ // *************************************** /datum/hive_status/proc/add_leader(mob/living/carbon/xenomorph/X) xeno_leader_list += X - X.queen_chosen_lead = TRUE + X.xeno_flags |= XENO_LEADER X.give_rally_abilities() /datum/hive_status/proc/remove_leader(mob/living/carbon/xenomorph/X) xeno_leader_list -= X - X.queen_chosen_lead = FALSE + X.xeno_flags &= ~XENO_LEADER if(!isxenoshrike(X) && !isxenoqueen(X) && !isxenohivemind(X)) //These innately have the Rally Hive ability X.remove_rally_hive_ability() @@ -799,7 +807,7 @@ /datum/hive_status/normal/check_ruler() - if(!(SSticker.mode?.flags_round_type & MODE_XENO_RULER)) + if(!(SSticker.mode?.round_type_flags & MODE_XENO_RULER)) return TRUE return living_xeno_ruler @@ -901,7 +909,7 @@ to_chat will check for valid clients itself already so no need to double check f /datum/hive_status/normal/handle_ruler_timer() if(!isinfestationgamemode(SSticker.mode)) //Check just need for unit test return - if(!(SSticker.mode?.flags_round_type & MODE_XENO_RULER)) + if(!(SSticker.mode?.round_type_flags & MODE_XENO_RULER)) return if(SSmonitor.gamestate == SHUTTERS_CLOSED) //don't trigger orphan hivemind if the shutters are closed return @@ -919,7 +927,7 @@ to_chat will check for valid clients itself already so no need to double check f D.orphan_hive_timer = addtimer(CALLBACK(D, TYPE_PROC_REF(/datum/game_mode, orphan_hivemind_collapse)), NUCLEAR_WAR_ORPHAN_HIVEMIND, TIMER_STOPPABLE) - orphan_hud_timer = new(null, get_all_xenos(), D.orphan_hive_timer, "Orphan Hivemind Collapse: ${timer}", 150, -80) + orphan_hud_timer = new(null, null, get_all_xenos(), D.orphan_hive_timer, "Orphan Hivemind Collapse: ${timer}", 150, -80) /datum/hive_status/normal/burrow_larva(mob/living/carbon/xenomorph/larva/L) if(!is_ground_level(L.z)) @@ -948,7 +956,7 @@ to_chat will check for valid clients itself already so no need to double check f if(!length(possible_mothers)) if(length(possible_silos)) return attempt_to_spawn_larva_in_silo(xeno_candidate, possible_silos, larva_already_reserved) - if(SSticker.mode?.flags_round_type & MODE_SILO_RESPAWN && !SSsilo.can_fire) // Distress mode & prior to shutters opening, so let the queue bypass silos if needed + if(SSticker.mode?.round_type_flags & MODE_SILO_RESPAWN && !SSsilo.can_fire) // Distress mode & prior to shutters opening, so let the queue bypass silos if needed return do_spawn_larva(xeno_candidate, pick(GLOB.spawns_by_job[/datum/job/xenomorph]), larva_already_reserved) to_chat(xeno_candidate, span_warning("There are no places currently available to receive new larvas.")) return FALSE @@ -976,7 +984,7 @@ to_chat will check for valid clients itself already so no need to double check f xeno_candidate.mob.reset_perspective(chosen_silo) var/double_check = tgui_alert(xeno_candidate.mob, "Spawn here?", "Spawn location", list("Yes","Pick another silo","Abort"), timeout = 20 SECONDS) if(double_check == "Pick another silo") - return attempt_to_spawn_larva_in_silo(xeno_candidate, possible_silos) + return attempt_to_spawn_larva_in_silo(xeno_candidate, possible_silos, larva_already_reserved) else if(double_check != "Yes") xeno_candidate.mob.reset_perspective(null) remove_from_larva_candidate_queue(xeno_candidate) @@ -1052,8 +1060,9 @@ to_chat will check for valid clients itself already so no need to double check f continue qdel(structure) - if(SSticker.mode?.flags_round_type & MODE_PSY_POINTS_ADVANCED) - SSpoints.xeno_points_by_hive[hivenumber] = SILO_PRICE + XENO_TURRET_PRICE //Give a free silo when going shipside and a turret + if(SSticker.mode?.round_type_flags & MODE_PSY_POINTS_ADVANCED) + SSpoints.xeno_strategic_points_by_hive[hivenumber] = SILO_PRICE //Give a free silo when going shipside and a turret + SSpoints.xeno_tactical_points_by_hive[hivenumber] = (XENO_TURRET_PRICE*4) /datum/hive_status/normal/proc/on_hijack_depart(datum/source, new_mode) @@ -1097,9 +1106,12 @@ to_chat will check for valid clients itself already so no need to double check f var/list/possible_mothers = list() var/list/possible_silos = list() SEND_SIGNAL(src, COMSIG_HIVE_XENO_MOTHER_PRE_CHECK, possible_mothers, possible_silos) - if(stored_larva > 0 && !LAZYLEN(candidates) && !XENODEATHTIME_CHECK(waiter.mob) && (length(possible_mothers) || length(possible_silos) || (SSticker.mode?.flags_round_type & MODE_SILO_RESPAWN && SSmonitor.gamestate == SHUTTERS_CLOSED))) - attempt_to_spawn_larva(waiter) - return + if(stored_larva > 0 && !LAZYLEN(candidates) && !XENODEATHTIME_CHECK(waiter.mob) && (length(possible_mothers) || length(possible_silos) || (SSticker.mode?.round_type_flags & MODE_SILO_RESPAWN && SSmonitor.gamestate == SHUTTERS_CLOSED))) + xeno_job.occupy_job_positions(1) + if(!attempt_to_spawn_larva(waiter, TRUE)) + xeno_job.free_job_positions(1) + return FALSE + return TRUE if(LAZYFIND(candidates, waiter)) remove_from_larva_candidate_queue(waiter) return FALSE @@ -1130,7 +1142,7 @@ to_chat will check for valid clients itself already so no need to double check f var/list/possible_mothers = list() var/list/possible_silos = list() SEND_SIGNAL(src, COMSIG_HIVE_XENO_MOTHER_PRE_CHECK, possible_mothers, possible_silos) - if(!length(possible_mothers) && !length(possible_silos) && (!(SSticker.mode?.flags_round_type & MODE_SILO_RESPAWN) || SSsilo.can_fire)) + if(!length(possible_mothers) && !length(possible_silos) && (!(SSticker.mode?.round_type_flags & MODE_SILO_RESPAWN) || SSsilo.can_fire)) return var/datum/job/xeno_job = SSjob.GetJobType(/datum/job/xenomorph) var/stored_larva = round(xeno_job.total_positions - xeno_job.current_positions) diff --git a/code/modules/mob/living/carbon/xenomorph/hive_upgrades.dm b/code/modules/mob/living/carbon/xenomorph/hive_upgrades.dm index 8843d0f67fc15..a2f8bb8352bad 100644 --- a/code/modules/mob/living/carbon/xenomorph/hive_upgrades.dm +++ b/code/modules/mob/living/carbon/xenomorph/hive_upgrades.dm @@ -28,7 +28,7 @@ GLOBAL_LIST_INIT(tier_to_primo_upgrade, list( var/datum/hive_upgrade/upgrade = new type if(upgrade.name == "Error upgrade") //defaultname just skip it its probably organisation continue - if(!(SSticker.mode.flags_xeno_abilities & upgrade.flags_gamemode)) + if(!(SSticker.mode.xeno_abilities_flags & upgrade.gamemode_flags)) continue buyable_upgrades += upgrade upgrades_by_name[upgrade.name] = upgrade @@ -54,8 +54,9 @@ GLOBAL_LIST_INIT(tier_to_primo_upgrade, list( .["upgrades"] = list() for(var/datum/hive_upgrade/upgrade AS in buyable_upgrades) .["upgrades"] += list(list("name" = upgrade.name, "desc" = upgrade.desc, "category" = upgrade.category,\ - "cost" = upgrade.psypoint_cost, "times_bought" = upgrade.times_bought, "iconstate" = upgrade.icon)) - .["psypoints"] = SSpoints.xeno_points_by_hive[X.hive.hivenumber] + "cost" = upgrade.psypoint_cost, "times_bought" = upgrade.times_bought, "iconstate" = upgrade.icon, "istactical" = (upgrade.upgrade_flags & UPGRADE_FLAG_USES_TACTICAL))) + .["strategicpoints"] = SSpoints.xeno_strategic_points_by_hive[X.hive.hivenumber] + .["tacticalpoints"] = SSpoints.xeno_tactical_points_by_hive[X.hive.hivenumber] /datum/hive_purchases/ui_static_data(mob/user) . = ..() @@ -73,7 +74,7 @@ GLOBAL_LIST_INIT(tier_to_primo_upgrade, list( if(!upgrade.on_buy(user)) return log_game("[key_name(user)] has purchased \a [upgrade] Blessing for [upgrade.psypoint_cost] psypoints for the [user.hive.hivenumber] hive") - if(upgrade.flags_upgrade & UPGRADE_FLAG_MESSAGE_HIVE) + if(upgrade.upgrade_flags & UPGRADE_FLAG_MESSAGE_HIVE) xeno_message("[user] has purchased \a [upgrade] Blessing", "xenoannounce", 5, user.hivenumber) /datum/hive_upgrade @@ -86,9 +87,9 @@ GLOBAL_LIST_INIT(tier_to_primo_upgrade, list( ///Psy point cost, float var/psypoint_cost = 10 ///upgrade flag var - var/flags_upgrade = NONE + var/upgrade_flags = NONE ///gamemode flags to whether this upgrade is purchasable - var/flags_gamemode = ABILITY_ALL_GAMEMODE + var/gamemode_flags = ABILITY_ALL_GAMEMODE ///int of the times we bought this upgrade var/times_bought = 0 ///string for UI icon in buyable_icons.dmi for this upgrade @@ -102,7 +103,10 @@ GLOBAL_LIST_INIT(tier_to_primo_upgrade, list( */ /datum/hive_upgrade/proc/on_buy(mob/living/carbon/xenomorph/buyer) SHOULD_CALL_PARENT(TRUE) - SSpoints.xeno_points_by_hive[buyer.hivenumber] -= psypoint_cost + if(upgrade_flags & UPGRADE_FLAG_USES_TACTICAL) + SSpoints.xeno_tactical_points_by_hive[buyer.hivenumber] -= psypoint_cost + else + SSpoints.xeno_strategic_points_by_hive[buyer.hivenumber] -= psypoint_cost times_bought++ /*RUTGMC EDIT begin */ if(buyer.status_flags & INCORPOREAL) @@ -120,16 +124,19 @@ GLOBAL_LIST_INIT(tier_to_primo_upgrade, list( */ /datum/hive_upgrade/proc/can_buy(mob/living/carbon/xenomorph/buyer, silent = TRUE) SHOULD_CALL_PARENT(TRUE) - if((flags_upgrade & UPGRADE_FLAG_ONETIME) && times_bought) + if((upgrade_flags & UPGRADE_FLAG_ONETIME) && times_bought) + if(!silent) + to_chat(buyer, span_xenowarning("You have already bought this blessing!")) return FALSE /*RUTGMC EDIT begin*/ if(buyer.status_flags & INCORPOREAL) to_chat(buyer, span_xenowarning("You can't build in this form!")) return FALSE /*RUTGMC EDIT end*/ - if(SSpoints.xeno_points_by_hive[buyer.hivenumber] < psypoint_cost) + var/points_requirement = (upgrade_flags & UPGRADE_FLAG_USES_TACTICAL) ? SSpoints.xeno_tactical_points_by_hive[buyer.hivenumber] : SSpoints.xeno_strategic_points_by_hive[buyer.hivenumber] + if(points_requirement < psypoint_cost) if(!silent) - to_chat(buyer, span_xenowarning("You need [psypoint_cost-SSpoints.xeno_points_by_hive[buyer.hivenumber]] more points to request this blessing!")) + to_chat(buyer, span_xenowarning("You need [points_requirement] more [(upgrade_flags & UPGRADE_FLAG_USES_TACTICAL) ? "tactical" : "strategic"] points to request this blessing!")) return FALSE return TRUE @@ -185,7 +192,7 @@ GLOBAL_LIST_INIT(tier_to_primo_upgrade, list( desc = "Constructs a silo that generates xeno larvas over time. Requires open space and time to place." psypoint_cost = SILO_PRICE icon = "larvasilo" - flags_upgrade = ABILITY_NUCLEARWAR + gamemode_flags = ABILITY_NUCLEARWAR building_type = /obj/structure/xeno/silo /* RUTGMC DELETION, SILO SCALING @@ -212,10 +219,10 @@ GLOBAL_LIST_INIT(tier_to_primo_upgrade, list( /* RU TGMC EDIT /datum/hive_upgrade/building/evotower name = "Evolution Tower" - desc = "Constructs a tower that increases the rate of evolution point and maturity point generation by 1.2 times per tower." + desc = "Constructs a tower that increases the rate of evolution point generation by 0.2 and maturity point generation by 0.8 times per tower." psypoint_cost = 300 icon = "evotower" - flags_upgrade = ABILITY_NUCLEARWAR + gamemode_flags = ABILITY_NUCLEARWAR building_type = /obj/structure/xeno/evotower /datum/hive_upgrade/building/psychictower @@ -223,7 +230,7 @@ GLOBAL_LIST_INIT(tier_to_primo_upgrade, list( desc = "Constructs a tower that increases the slots of higher tier Xenomorphs." psypoint_cost = 300 icon = "maturitytower" - flags_upgrade = ABILITY_NUCLEARWAR + gamemode_flags = ABILITY_NUCLEARWAR building_type = /obj/structure/xeno/psychictower RU TGMC EDIT */ /datum/hive_upgrade/building/pherotower @@ -231,7 +238,8 @@ RU TGMC EDIT */ desc = "Constructs a tower that emanates a selectable type of pheromone." psypoint_cost = 150 icon = "pherotower" - flags_upgrade = ABILITY_NUCLEARWAR + gamemode_flags = ABILITY_NUCLEARWAR + upgrade_flags = UPGRADE_FLAG_USES_TACTICAL building_type = /obj/structure/xeno/pherotower building_loc = 0 //This results in spawning the structure under the user. building_time = 5 SECONDS @@ -239,11 +247,35 @@ RU TGMC EDIT */ /datum/hive_upgrade/building/spawner name = "Spawner" desc = "Constructs a spawner that generates ai xenos over time" - psypoint_cost = 600 + psypoint_cost = 400 icon = "spawner" - flags_upgrade = ABILITY_NUCLEARWAR + gamemode_flags = ABILITY_NUCLEARWAR + upgrade_flags = UPGRADE_FLAG_USES_TACTICAL building_type = /obj/structure/xeno/spawner +/datum/hive_upgrade/building/acid_pool + name = "acid pool" + desc = "Constructs a pool that allows xenos to regenerate sunder in it while resting. Requires open space and time to place." + psypoint_cost = 200 + icon = "pool" + gamemode_flags = ABILITY_NUCLEARWAR + upgrade_flags = UPGRADE_FLAG_USES_TACTICAL + building_type = /obj/structure/xeno/acid_pool + +/datum/hive_upgrade/building/acid_pool/can_buy(mob/living/carbon/xenomorph/buyer, silent = TRUE) + . = ..() + if(!.) + return + + var/turf/buildloc = get_step(buyer, building_loc) + if(!buildloc) + return FALSE + + if(buildloc.density) + if(!silent) + to_chat(buyer, span_xenowarning("You cannot build in a dense location!")) + return FALSE + /datum/hive_upgrade/defence category = "Defences" @@ -252,7 +284,8 @@ RU TGMC EDIT */ desc = "Places a acid spitting resin turret under you. Must be at least 6 tiles away from other turrets, not near fog and on a weeded area." icon = "acidturret" psypoint_cost = XENO_TURRET_PRICE - flags_gamemode = ABILITY_NUCLEARWAR + gamemode_flags = ABILITY_NUCLEARWAR + upgrade_flags = UPGRADE_FLAG_USES_TACTICAL ///How long to build one turret var/build_time = 10 SECONDS ///What type of turret is built @@ -310,12 +343,74 @@ RU TGMC EDIT */ psypoint_cost = 50 turret_type = /obj/structure/xeno/xeno_turret/sticky +/datum/hive_upgrade/defence/gargoyle + name = "Gargoyle" + desc = "Constructs a gargoyle that alerts you when enemies approach." + psypoint_cost = 25 + icon = "gargoyle" + gamemode_flags = ABILITY_NUCLEARWAR + upgrade_flags = UPGRADE_FLAG_USES_TACTICAL + +/datum/hive_upgrade/defence/gargoyle/can_buy(mob/living/carbon/xenomorph/buyer, silent) + . = ..() + if(!.) + return + var/turf/buildloc = get_turf(buyer) + if(!buildloc) + return FALSE + + if(!buildloc.is_weedable()) + if(!silent) + to_chat(buyer, span_warning("We can't do that here.")) + return FALSE + + var/obj/alien/weeds/alien_weeds = locate() in buildloc + + if(!alien_weeds) + if(!silent) + to_chat(buyer, span_warning("We can only shape on weeds. We must find some resin before we start building!")) + return FALSE + + if(!buildloc.check_alien_construction(buyer, silent) || !buildloc.check_disallow_alien_fortification(buyer, silent)) + return FALSE + +/datum/hive_upgrade/defence/gargoyle/on_buy(mob/living/carbon/xenomorph/buyer) + if(!do_after(buyer, 3 SECONDS, NONE, buyer, BUSY_ICON_BUILD)) + return FALSE + + if(!can_buy(buyer, FALSE)) + return FALSE + + var/turf/buildloc = get_turf(buyer) + + var/atom/built = new /obj/structure/xeno/resin_gargoyle(buildloc, buyer.hivenumber, buyer) + to_chat(buyer, span_notice("We build [built] for [psypoint_cost] psy points.")) + log_game("[buyer] has built \a [built] in [AREACOORD(buildloc)], spending [psypoint_cost] psy points in the process") + xeno_message("[buyer] has built \a [built] at [get_area(buildloc)]!", "xenoannounce", 5, buyer.hivenumber) + return ..() + +/datum/hive_upgrade/defence/special_walls + name = "Special Resin Walls" + desc = "Gives your hive 50 special resin walls to build." + psypoint_cost = 100 + icon = "specialresin" + gamemode_flags = ABILITY_NUCLEARWAR + upgrade_flags = UPGRADE_FLAG_USES_TACTICAL + +/datum/hive_upgrade/defence/special_walls/on_buy(mob/living/carbon/xenomorph/buyer) + GLOB.hive_datums[buyer.get_xeno_hivenumber()].special_build_points += 50 + to_chat(buyer, span_notice("We buy 50 special resin points for [psypoint_cost] psy points.")) + log_game("[buyer] has purchased 50 special resin points, spending [psypoint_cost] psy points in the process.") + xeno_message("[buyer] has purchased 50 special resin points!", "xenoannounce", 5, buyer.hivenumber) + + return ..() + /datum/hive_upgrade/xenos category = "Xenos" /datum/hive_upgrade/primordial category = "Xenos" - flags_upgrade = UPGRADE_FLAG_ONETIME|UPGRADE_FLAG_MESSAGE_HIVE + upgrade_flags = UPGRADE_FLAG_ONETIME|UPGRADE_FLAG_MESSAGE_HIVE /datum/hive_upgrade/primordial/can_buy(mob/living/carbon/xenomorph/buyer, silent = TRUE) . = ..() diff --git a/code/modules/mob/living/carbon/xenomorph/life.dm b/code/modules/mob/living/carbon/xenomorph/life.dm index 1b021f0022f5a..a733a905aa3c8 100644 --- a/code/modules/mob/living/carbon/xenomorph/life.dm +++ b/code/modules/mob/living/carbon/xenomorph/life.dm @@ -3,8 +3,6 @@ #define XENO_STANDING_HEAL 0.2 #define XENO_CRIT_DAMAGE 5 -#define XENO_HUD_ICON_BUCKETS 16 // should equal the number of icons you use to represent health / plasma (from 0 -> X) - /mob/living/carbon/xenomorph/Life() if(!loc) @@ -19,10 +17,10 @@ SSmobs.stop_processing(src) return if(stat == UNCONSCIOUS) - if(is_zoomed) + if(xeno_flags & XENO_ZOOMED) zoom_out() else - if(is_zoomed) + if(xeno_flags & XENO_ZOOMED) if(!can_walk_zoomed) if(loc != zoom_turf) zoom_out() @@ -54,14 +52,13 @@ handle_critical_health_updates() return if((health >= maxHealth) || on_fire) //can't regenerate. - updatehealth() //Update health-related stats, like health itself (using brute and fireloss), health HUD and status. return var/turf/T = loc if(!istype(T)) return var/ruler_healing_penalty = 0.5 - if(hive?.living_xeno_ruler?.loc?.z == T.z || xeno_caste.can_flags & CASTE_CAN_HEAL_WITHOUT_QUEEN || (SSticker?.mode.flags_round_type & MODE_XENO_RULER)) //if the living queen's z-level is the same as ours. + if(hive?.living_xeno_ruler?.loc?.z == T.z || xeno_caste.can_flags & CASTE_CAN_HEAL_WITHOUT_QUEEN || (SSticker?.mode.round_type_flags & MODE_XENO_RULER)) //if the living queen's z-level is the same as ours. ruler_healing_penalty = 1 if(loc_weeds_type || xeno_caste.caste_flags & CASTE_INNATE_HEALING) //We regenerate on weeds or can on our own. if(lying_angle || resting || xeno_caste.caste_flags & CASTE_QUICK_HEAL_STANDING) @@ -119,25 +116,23 @@ /mob/living/carbon/xenomorph/proc/handle_living_plasma_updates() var/turf/T = loc - if(!T || !istype(T)) + if(!istype(T)) //This means plasma doesn't update while you're in things like a vent, but since you don't have weeds in a vent or can actually take advantage of pheros, this is fine return - if(plasma_stored >= xeno_caste.plasma_max * xeno_caste.plasma_regen_limit) + + if(!current_aura && (plasma_stored >= xeno_caste.plasma_max * xeno_caste.plasma_regen_limit)) //no loss or gain return if(current_aura) if(plasma_stored < pheromone_cost) - use_plasma(plasma_stored) + use_plasma(plasma_stored, FALSE) QDEL_NULL(current_aura) src.balloon_alert(src, "Stop emitting, no plasma") else - use_plasma(pheromone_cost) - - if(HAS_TRAIT(src, TRAIT_NOPLASMAREGEN)) - hud_set_plasma() - return + use_plasma(pheromone_cost, FALSE) - if(!loc_weeds_type && !(xeno_caste.caste_flags & CASTE_INNATE_PLASMA_REGEN)) - hud_set_plasma() // since we used some plasma via the aura + if(HAS_TRAIT(src, TRAIT_NOPLASMAREGEN) || !loc_weeds_type && !(xeno_caste.caste_flags & CASTE_INNATE_PLASMA_REGEN)) + if(current_aura) //we only need to update if we actually used plasma from pheros + hud_set_plasma() return var/plasma_gain = xeno_caste.plasma_gain @@ -151,8 +146,9 @@ SEND_SIGNAL(src, COMSIG_XENOMORPH_PLASMA_REGEN, plasma_mod) + plasma_mod[1] = clamp(plasma_mod[1], 0, xeno_caste.plasma_max * xeno_caste.plasma_regen_limit - plasma_stored) + gain_plasma(plasma_mod[1]) - hud_set_plasma() //update plasma amount on the plasma mob_hud /mob/living/carbon/xenomorph/can_receive_aura(aura_type, atom/source, datum/aura_bearer/bearer) . = ..() @@ -171,10 +167,10 @@ if(warding_aura != (received_auras[AURA_XENO_WARDING] || 0)) if(warding_aura) //If either the new or old warding is 0, we can skip adjusting armor for it. - soft_armor = soft_armor.modifyAllRatings(-warding_aura * 2.5) + soft_armor = soft_armor.modifyAllRatings(-warding_aura * 1.5) warding_aura = received_auras[AURA_XENO_WARDING] || 0 if(warding_aura) - soft_armor = soft_armor.modifyAllRatings(warding_aura * 2.5) + soft_armor = soft_armor.modifyAllRatings(warding_aura * 1.5) recovery_aura = received_auras[AURA_XENO_RECOVERY] || 0 @@ -182,37 +178,7 @@ ..() /mob/living/carbon/xenomorph/handle_regular_hud_updates() - if(!client) - return FALSE - - // Sanity checks - if(!maxHealth) - stack_trace("[src] called handle_regular_hud_updates() while having [maxHealth] maxHealth.") - return - if(!xeno_caste.plasma_max) - stack_trace("[src] called handle_regular_hud_updates() while having [xeno_caste.plasma_max] xeno_caste.plasma_max.") - return - - // Health Hud - if(hud_used?.healths) - if(stat != DEAD) - var/bucket = get_bucket(XENO_HUD_ICON_BUCKETS, maxHealth, health, get_crit_threshold(), list("full", "critical")) - hud_used.healths.icon_state = "health[bucket]" - else - hud_used.healths.icon_state = "health_dead" - - // Plasma Hud - if(hud_used?.alien_plasma_display) - if(stat != DEAD) - var/bucket = get_bucket(XENO_HUD_ICON_BUCKETS, xeno_caste.plasma_max, plasma_stored, 0, list("full", "empty")) - hud_used.alien_plasma_display.icon_state = "power_display_[bucket]" - else - hud_used.alien_plasma_display.icon_state = "power_display_empty" - - - interactee?.check_eye(src) - - return TRUE + return /mob/living/carbon/xenomorph/proc/handle_environment() //unused while atmos is not on var/env_temperature = loc.return_temperature() @@ -234,7 +200,7 @@ stat = CONSCIOUS return health = maxHealth - getFireLoss() - getBruteLoss() //Xenos can only take brute and fire damage. - med_hud_set_health() + med_hud_set_health() //todo: Make all damage update health so we can just kill pointless life updates entirely update_stat() update_wounds() diff --git a/code/modules/mob/living/carbon/xenomorph/say.dm b/code/modules/mob/living/carbon/xenomorph/say.dm index 31f2ea04cea50..5488227d915e0 100644 --- a/code/modules/mob/living/carbon/xenomorph/say.dm +++ b/code/modules/mob/living/carbon/xenomorph/say.dm @@ -5,7 +5,7 @@ This is also paired with [/mob/living/carbon/xenomorph/hivemind_end] */ /mob/living/carbon/xenomorph/proc/hivemind_start() - return "Hivemind, [span_name("[name]")]" + return "Hivemind, [span_name("[name]")]" /** Called to create the suffix for xeno hivemind messages @@ -56,7 +56,7 @@ if(!S?.client?.prefs || !(S.client.prefs.toggles_chat & CHAT_GHOSTHIVEMIND)) continue var/track = FOLLOW_LINK(S, src) - S.show_message("[track] [hivemind_start()] [span_message("hisses, '[message]'")][hivemind_end()]", 2) + S.show_message("[track] [hivemind_start()] [span_message("hisses, '[message]'")][hivemind_end()]", 2) hive.hive_mind_message(src, message) @@ -64,7 +64,7 @@ /mob/living/carbon/xenomorph/proc/receive_hivemind_message(mob/living/carbon/xenomorph/X, message) var/follow_link = X != src ? "(F) " : "" - show_message("[follow_link][X.hivemind_start()][span_message(" hisses, '[message]'")][X.hivemind_end()]", 2) + show_message("[follow_link][X.hivemind_start()][span_message(" hisses, '[message]'")][X.hivemind_end()]", 2) /mob/living/carbon/xenomorph/get_saymode(message, talk_key) diff --git a/code/modules/mob/living/carbon/xenomorph/update_icons.dm b/code/modules/mob/living/carbon/xenomorph/update_icons.dm index fdcfa5c149f06..c30a64881e9a6 100644 --- a/code/modules/mob/living/carbon/xenomorph/update_icons.dm +++ b/code/modules/mob/living/carbon/xenomorph/update_icons.dm @@ -20,28 +20,25 @@ update_icons() /mob/living/carbon/xenomorph/update_icons(state_change = TRUE) - if(HAS_TRAIT(src, TRAIT_MOB_ICON_UPDATE_BLOCKED)) - return + SEND_SIGNAL(src, COMSIG_XENOMORPH_UPDATE_ICONS, state_change) if(state_change) if(stat == DEAD) - icon_state = "[xeno_caste.caste_name][is_a_rouny ? " rouny" : ""] Dead" + icon_state = "[xeno_caste.caste_name][(xeno_flags & XENO_ROUNY) ? " rouny" : ""] Dead" else if(HAS_TRAIT(src, TRAIT_BURROWED)) - icon_state = "[xeno_caste.caste_name][is_a_rouny ? " rouny" : ""] Burrowed" + icon_state = "[xeno_caste.caste_name][(xeno_flags & XENO_ROUNY) ? " rouny" : ""] Burrowed" else if(lying_angle) if((resting || IsSleeping()) && (!IsParalyzed() && !IsUnconscious() && health > 0)) - icon_state = "[xeno_caste.caste_name][is_a_rouny ? " rouny" : ""] Sleeping" + icon_state = "[xeno_caste.caste_name][(xeno_flags & XENO_ROUNY) ? " rouny" : ""] Sleeping" else - icon_state = "[xeno_caste.caste_name][is_a_rouny ? " rouny" : ""] Knocked Down" + icon_state = "[xeno_caste.caste_name][(xeno_flags & XENO_ROUNY) ? " rouny" : ""] Knocked Down" else if(!handle_special_state()) if(m_intent == MOVE_INTENT_RUN) - icon_state = "[xeno_caste.caste_name][is_a_rouny ? " rouny" : ""] Running" + icon_state = "[xeno_caste.caste_name][(xeno_flags & XENO_ROUNY) ? " rouny" : ""] Running" else - icon_state = "[xeno_caste.caste_name][is_a_rouny ? " rouny" : ""] Walking" + icon_state = "[xeno_caste.caste_name][(xeno_flags & XENO_ROUNY) ? " rouny" : ""] Walking" update_fire() //the fire overlay depends on the xeno's stance, so we must update it. update_wounds() - hud_set_plasma() - med_hud_set_health() hud_set_sunder() hud_set_firestacks() @@ -53,33 +50,33 @@ update_icons() /mob/living/carbon/xenomorph/update_inv_r_hand() - remove_overlay(X_R_HAND_LAYER) + remove_overlay(R_HAND_LAYER) if(r_hand) if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) r_hand.screen_loc = ui_rhand client.screen += r_hand - overlays_standing[X_R_HAND_LAYER] = r_hand.make_worn_icon(inhands = TRUE, slot_name = slot_r_hand_str, default_icon = 'icons/mob/items_righthand_1.dmi', default_layer = X_R_HAND_LAYER) - apply_overlay(X_R_HAND_LAYER) + overlays_standing[R_HAND_LAYER] = r_hand.make_worn_icon(inhands = TRUE, slot_name = slot_r_hand_str, default_icon = 'icons/mob/inhands/items/items_right.dmi', default_layer = R_HAND_LAYER) + apply_overlay(R_HAND_LAYER) /mob/living/carbon/xenomorph/update_inv_l_hand() - remove_overlay(X_L_HAND_LAYER) + remove_overlay(L_HAND_LAYER) if(l_hand) if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) l_hand.screen_loc = ui_lhand client.screen += l_hand - overlays_standing[X_L_HAND_LAYER] = l_hand.make_worn_icon(inhands = TRUE, slot_name = slot_l_hand_str, default_icon = 'icons/mob/items_lefthand_1.dmi', default_layer = X_L_HAND_LAYER) - apply_overlay(X_L_HAND_LAYER) + overlays_standing[L_HAND_LAYER] = l_hand.make_worn_icon(inhands = TRUE, slot_name = slot_l_hand_str, default_icon = 'icons/mob/inhands/items/items_left.dmi', default_layer = L_HAND_LAYER) + apply_overlay(L_HAND_LAYER) /* /mob/living/carbon/xenomorph/proc/create_shriekwave() - overlays_standing[X_SUIT_LAYER] = image("icon"='icons/Xeno/64x64_Xeno_overlays.dmi', "icon_state" = "shriek_waves") //Ehh, suit layer's not being used. - apply_temp_overlay(X_SUIT_LAYER, 3 SECONDS) + overlays_standing[SUIT_LAYER] = image("icon"='icons/Xeno/64x64_Xeno_overlays.dmi', "icon_state" = "shriek_waves") //Ehh, suit layer's not being used. + apply_temp_overlay(SUIT_LAYER, 3 SECONDS) */ /mob/living/carbon/xenomorph/proc/create_stomp() - overlays_standing[X_SUIT_LAYER] = image("icon"='icons/Xeno/64x64_Xeno_overlays.dmi', "icon_state" = "stomp") //Ehh, suit layer's not being used. - apply_temp_overlay(X_SUIT_LAYER, 1.2 SECONDS) + overlays_standing[SUIT_LAYER] = image("icon"='icons/Xeno/64x64_Xeno_overlays.dmi', "icon_state" = "stomp") //Ehh, suit layer's not being used. + apply_temp_overlay(SUIT_LAYER, 1.2 SECONDS) /mob/living/carbon/xenomorph/update_fire() if(!fire_overlay) @@ -95,14 +92,14 @@ if(QDELETED(src)) return - remove_overlay(X_WOUND_LAYER) + remove_overlay(WOUND_LAYER) remove_filter("wounded_filter") var/health_thresholds wound_overlay.layer = layer + 0.3 wound_overlay.icon = src.icon wound_overlay.vis_flags |= VIS_HIDE - if(HAS_TRAIT(src, TRAIT_MOB_ICON_UPDATE_BLOCKED)) + if(HAS_TRAIT(src, TRAIT_XENOMORPH_INVISIBLE_BLOOD)) wound_overlay.icon_state = "none" return if(health > health_threshold_crit) @@ -134,8 +131,8 @@ if(xeno_caste.caste_flags & CASTE_HAS_WOUND_MASK) var/image/wounded_mask = image(icon, null, "alpha_[overlay_to_show]") wounded_mask.render_target = "*[REF(src)]" - overlays_standing[X_WOUND_LAYER] = wounded_mask - apply_overlay(X_WOUND_LAYER) + overlays_standing[WOUND_LAYER] = wounded_mask + apply_overlay(WOUND_LAYER) add_filter("wounded_filter", 1, alpha_mask_filter(0, 0, null, "*[REF(src)]", MASK_INVERSE)) wound_overlay.vis_flags &= ~VIS_HIDE // Show the overlay @@ -175,6 +172,7 @@ update_flame_light(owner.fire_luminosity) /atom/movable/vis_obj/xeno_wounds/fire_overlay/update_icon_state() + . = ..() if(!owner.on_fire) icon_state = "" return diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm index 6f2f6d125b12f..b1eeefe62821d 100644 --- a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm +++ b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm @@ -22,6 +22,8 @@ // *** Melee Attacks *** // ///The amount of damage a xenomorph caste will do with a 'slash' attack. var/melee_damage = 10 + ///The amount of armour pen their melee attacks have + var/melee_ap = 0 ///number of ticks between attacks for a caste. var/attack_delay = CLICK_CD_MELEE @@ -61,8 +63,6 @@ ///Threshold amount of upgrade points to next maturity //var/upgrade_threshold = 0 // RUTGMC DELETION - ///Type paths to the castes that this xenomorph can evolve to - var/list/evolves_to = list() ///Singular type path for the caste to deevolve to when forced to by the queen. var/deevolves_to @@ -92,6 +92,8 @@ var/sunder_recover = 0.5 ///What is the max amount of sunder that can be applied to a xeno (100 = 100%) var/sunder_max = 100 + ///Multiplier on the weapons sunder, e.g 10 sunder on a projectile is reduced to 5 with a 0.5 multiplier. + var/sunder_multiplier = 1 // *** Ranged Attack *** // ///Delay timer for spitting @@ -225,6 +227,8 @@ RU TGMC EDIT */ var/evolve_min_xenos = 0 // How many of this caste may be alive at once var/maximum_active_caste = INFINITY + // Accuracy malus, 0 by default. Should NOT go over 70. + var/accuracy_malus = 0 ///Add needed component to the xeno /datum/xeno_caste/proc/on_caste_applied(mob/xenomorph) @@ -279,11 +283,11 @@ RU TGMC EDIT */ ///Hive datum we belong to var/datum/hive_status/hive ///Xeno mob specific flags - var/xeno_flags = NONE //TODO: There are loads of vars below that should be flags + var/xeno_flags = NONE + ///State tracking of hive status toggles var/status_toggle_flags = HIVE_STATUS_DEFAULTS - var/list/overlays_standing[X_TOTAL_LAYERS] var/atom/movable/vis_obj/xeno_wounds/wound_overlay var/atom/movable/vis_obj/xeno_wounds/fire_overlay/fire_overlay var/datum/xeno_caste/xeno_caste @@ -322,18 +326,17 @@ RU TGMC EDIT */ ///Increases by xeno_caste.regen_ramp_amount every decisecond. If you want to balance this, look at the xeno_caste defines mentioned above. var/regen_power = 0 - var/is_zoomed = 0 var/zoom_turf = null var/can_walk_zoomed = FALSE ///Type of weeds the xeno is standing on, null when not on weeds var/obj/alien/weeds/loc_weeds_type - ///Bonus or pen to time in between attacks. + makes slashes slower. - var/attack_delay = 0 ///This will track their "tier" to restrict/limit evolutions var/tier = XENO_TIER_ONE ///which resin structure to build when we secrete resin var/selected_resin = /turf/closed/wall/resin/regenerating + //which special resin structure to build when we secrete special resin + var/selected_special_resin = /turf/closed/wall/resin/regenerating/special/bulletproof ///which reagent to slash with using reagent slash var/selected_reagent = /datum/reagent/toxin/xeno_hemodile ///which plant to place when we use sow @@ -351,18 +354,11 @@ RU TGMC EDIT */ ///Multiplicative melee damage modifier; referenced by attack_alien.dm, most notably attack_alien_harm var/xeno_melee_damage_modifier = 1 - ///whether the xeno mobhud is activated or not. - var/xeno_mobhud = FALSE - ///whether the xeno has been selected by the queen as a leader. - var/queen_chosen_lead = FALSE //Charge vars ///Will the mob charge when moving ? You need the charge verb to change this var/is_charging = CHARGE_OFF - //Pounce vars - var/usedPounce = 0 - // Gorger vars var/overheal = 0 @@ -401,10 +397,12 @@ RU TGMC EDIT */ ///The xenos/silo/nuke currently tracked by the xeno_tracker arrow var/atom/tracked - ///Are we the roony version of this xeno - var/is_a_rouny = FALSE - /// The type of footstep this xeno has. var/footstep_type = FOOTSTEP_XENO_MEDIUM COOLDOWN_DECLARE(xeno_health_alert_cooldown) + + ///The resting cooldown + COOLDOWN_DECLARE(xeno_resting_cooldown) + ///The unresting cooldown + COOLDOWN_DECLARE(xeno_unresting_cooldown) diff --git a/code/modules/mob/living/carbon/xenomorph/xenoattacks.dm b/code/modules/mob/living/carbon/xenomorph/xenoattacks.dm index 2ca62e972e7cc..b6b812c508e13 100644 --- a/code/modules/mob/living/carbon/xenomorph/xenoattacks.dm +++ b/code/modules/mob/living/carbon/xenomorph/xenoattacks.dm @@ -69,66 +69,67 @@ //Hot hot Aliens on Aliens action. //Actually just used for eating people. -/mob/living/carbon/xenomorph/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(status_flags & INCORPOREAL || X.status_flags & INCORPOREAL) //Incorporeal xenos cannot attack or be attacked +/mob/living/carbon/xenomorph/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(status_flags & INCORPOREAL || xeno_attacker.status_flags & INCORPOREAL) //Incorporeal xenos cannot attack or be attacked return - if(src == X) + if(src == xeno_attacker) return TRUE - - if(isxenolarva(X)) //Larvas can't eat people - X.visible_message(span_danger("[X] nudges its head against \the [src]."), \ + + if(isxenolarva(xeno_attacker)) //Larvas can't eat people + xeno_attacker.visible_message(span_danger("[xeno_attacker] nudges its head against \the [src]."), \ span_danger("We nudge our head against \the [src].")) return FALSE - switch(X.a_intent) + switch(xeno_attacker.a_intent) if(INTENT_HELP) if(on_fire) fire_stacks = max(fire_stacks - 1, 0) playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1, 7) - X.visible_message(span_danger("[X] tries to put out the fire on [src]!"), \ + xeno_attacker.visible_message(span_danger("[xeno_attacker] tries to put out the fire on [src]!"), \ span_warning("We try to put out the fire on [src]!"), null, 5) if(fire_stacks <= 0) - X.visible_message(span_danger("[X] has successfully extinguished the fire on [src]!"), \ + xeno_attacker.visible_message(span_danger("[xeno_attacker] has successfully extinguished the fire on [src]!"), \ span_notice("We extinguished the fire on [src]."), null, 5) ExtinguishMob() return TRUE - X.visible_message(span_notice("\The [X] caresses \the [src] with its scythe-like arm."), \ + + xeno_attacker.visible_message(span_notice("\The [xeno_attacker] caresses \the [src] with its scythe-like arm."), \ span_notice("We caress \the [src] with our scythe-like arm."), null, 5) if(INTENT_GRAB) if(anchored) return FALSE - if(!X.start_pulling(src)) + if(!xeno_attacker.start_pulling(src)) return FALSE - X.visible_message(span_warning("[X] grabs \the [src]!"), \ + xeno_attacker.visible_message(span_warning("[xeno_attacker] grabs \the [src]!"), \ span_warning("We grab \the [src]!"), null, 5) playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1, 7) if(INTENT_HARM, INTENT_DISARM)//Can't slash other xenos for now. SORRY // You can now! --spookydonut - if(issamexenohive(X)) - X.do_attack_animation(src) - X.visible_message(span_warning("\The [X] nibbles \the [src]."), \ + if(issamexenohive(xeno_attacker)) + xeno_attacker.do_attack_animation(src) + xeno_attacker.visible_message(span_warning("\The [xeno_attacker] nibbles \the [src]."), \ span_warning("We nibble \the [src]."), null, 5) return TRUE // Not at the base of the proc otherwise we can just nibble for free slashing effects - SEND_SIGNAL(X, COMSIG_XENOMORPH_ATTACK_HOSTILE_XENOMORPH, src, damage_amount, X.xeno_caste.melee_damage * X.xeno_melee_damage_modifier) + SEND_SIGNAL(xeno_attacker, COMSIG_XENOMORPH_ATTACK_HOSTILE_XENOMORPH, src, damage_amount, xeno_attacker.xeno_caste.melee_damage * xeno_attacker.xeno_melee_damage_modifier) // copypasted from attack_alien.dm //From this point, we are certain a full attack will go out. Calculate damage and modifiers - var/damage = X.xeno_caste.melee_damage + var/damage = xeno_attacker.xeno_caste.melee_damage //Somehow we will deal no damage on this attack if(!damage) - X.do_attack_animation(src) - playsound(X.loc, 'sound/weapons/alien_claw_swipe.ogg', 25, 1) - X.visible_message(span_danger("\The [X] lunges at [src]!"), \ + xeno_attacker.do_attack_animation(src) + playsound(xeno_attacker.loc, 'sound/weapons/alien_claw_swipe.ogg', 25, 1) + xeno_attacker.visible_message(span_danger("\The [xeno_attacker] lunges at [src]!"), \ span_danger("We lunge at [src]!"), null, 5) return FALSE - X.visible_message(span_danger("\The [X] slashes [src]!"), \ + xeno_attacker.visible_message(span_danger("\The [xeno_attacker] slashes [src]!"), \ span_danger("We slash [src]!"), null, 5) - log_combat(X, src, "slashed") + log_combat(xeno_attacker, src, "slashed") - X.do_attack_animation(src, ATTACK_EFFECT_REDSLASH) + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_REDSLASH) playsound(loc, "alien_claw_flesh", 25, 1) apply_damage(damage, BRUTE, blocked = MELEE, updating_health = TRUE) diff --git a/code/modules/mob/living/carbon/xenomorph/xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/xenomorph.dm index bbed0e3066a30..cea1d56235bb1 100644 --- a/code/modules/mob/living/carbon/xenomorph/xenomorph.dm +++ b/code/modules/mob/living/carbon/xenomorph/xenomorph.dm @@ -5,7 +5,6 @@ //This is so they can be easily transferred between them without copypasta /mob/living/carbon/xenomorph/Initialize(mapload) - setup_verbs() if(mob_size == MOB_SIZE_BIG) move_resist = MOVE_FORCE_EXTREMELY_STRONG move_force = MOVE_FORCE_EXTREMELY_STRONG @@ -55,10 +54,6 @@ regenerate_icons() - hud_set_plasma() - med_hud_set_health() - hud_update_primo() - toggle_xeno_mobhud() //This is a verb, but fuck it, it just werks update_spits() @@ -81,6 +76,7 @@ AddElement(/datum/element/footstep, footstep_type, mob_size >= MOB_SIZE_BIG ? 0.8 : 0.5) set_jump_component() + AddComponent(/datum/component/seethrough_mob) /mob/living/carbon/xenomorph/register_init_signals() . = ..() @@ -109,7 +105,7 @@ maxHealth = xeno_caste.max_health * GLOB.xeno_stat_multiplicator_buff if(restore_health_and_plasma) // xenos that manage plasma through special means shouldn't gain it for free on aging - plasma_stored = max(plasma_stored, xeno_caste.plasma_max * xeno_caste.plasma_regen_limit) + set_plasma(max(plasma_stored, xeno_caste.plasma_max * xeno_caste.plasma_regen_limit)) health = maxHealth setXenoCasteSpeed(xeno_caste.speed) @@ -156,17 +152,17 @@ var/rank_name switch(playtime_mins) if(0 to 600) - rank_name = "Hatchling" - if(601 to 1500) //10 hours rank_name = "Young" - if(1501 to 4200) //25 hours + if(601 to 1500) //10 hours rank_name = "Mature" - if(4201 to 10500) //70 hours + if(1501 to 4200) //25 hours rank_name = "Elder" - if(10501 to INFINITY) //175 hours + if(4201 to 10500) //70 hours rank_name = "Ancient" + if(10501 to INFINITY) //175 hours + rank_name = "Prime" else - rank_name = "Hatchling" + rank_name = "Young" var/prefix = (hive.prefix || xeno_caste.upgrade_name) ? "[hive.prefix][xeno_caste.upgrade_name] " : "" name = prefix + "[rank_name ? "[rank_name] " : ""][xeno_caste.display_name] ([nicknumber])" @@ -245,9 +241,10 @@ /mob/living/carbon/xenomorph/examine(mob/user) . = ..() . += xeno_caste.caste_desc + . += "" if(stat == DEAD) - . += "It is DEAD. Kicked the bucket. Off to that great hive in the sky." + . += "It is DEAD. Kicked the bucket. Off to that great hive in the sky." else if(stat == UNCONSCIOUS) . += "It quivers a bit, but barely moves." else @@ -264,6 +261,8 @@ if(1 to 24) . += "It is heavily injured and limping badly." + . += "" + if(hivenumber != XENO_HIVE_NORMAL) var/datum/hive_status/hive = GLOB.hive_datums[hivenumber] . += "It appears to belong to the [hive.prefix]hive" @@ -271,7 +270,8 @@ /mob/living/carbon/xenomorph/Destroy() if(mind) mind.name = name //Grabs the name when the xeno is getting deleted, to reference through hive status later. - if(is_zoomed) zoom_out() + if(xeno_flags & XENO_ZOOMED) + zoom_out() GLOB.alive_xeno_list -= src LAZYREMOVE(GLOB.alive_xeno_list_hive[hivenumber], src) @@ -415,7 +415,7 @@ /mob/living/carbon/xenomorph/Moved(atom/old_loc, movement_dir) - if(is_zoomed) + if(xeno_flags & XENO_ZOOMED) if(!can_walk_zoomed) zoom_out() handle_weeds_on_movement() @@ -471,23 +471,38 @@ Returns TRUE when loc_weeds_type changes. Returns FALSE when it doesn’t change return update_icon() -/mob/living/carbon/xenomorph/lay_down() +/mob/living/carbon/xenomorph/toggle_resting() var/datum/action/ability/xeno_action/xeno_resting/resting_action = actions_by_path[/datum/action/ability/xeno_action/xeno_resting] if(!resting_action || !resting_action.can_use_action()) return + if(resting) + if(!COOLDOWN_CHECK(src, xeno_resting_cooldown)) + balloon_alert(src, "Cannot get up so soon after resting!") + return + + if(!COOLDOWN_CHECK(src, xeno_unresting_cooldown)) + balloon_alert(src, "Cannot rest so soon after getting up!") + return return ..() -/mob/living/carbon/xenomorph/set_jump_component(duration = 0.5 SECONDS, cooldown = 2 SECONDS, cost = 0, height = 16, sound = null, flags = JUMP_SHADOW, flags_pass = PASS_LOW_STRUCTURE|PASS_FIRE) +/mob/living/carbon/xenomorph/set_resting() + . = ..() + if(resting) + COOLDOWN_START(src, xeno_resting_cooldown, XENO_RESTING_COOLDOWN) + else + COOLDOWN_START(src, xeno_unresting_cooldown, XENO_UNRESTING_COOLDOWN) + +/mob/living/carbon/xenomorph/set_jump_component(duration = 0.5 SECONDS, cooldown = 2 SECONDS, cost = 0, height = 16, sound = null, flags = JUMP_SHADOW, pass_flags = PASS_LOW_STRUCTURE|PASS_FIRE|PASS_TANK) var/gravity = get_gravity() if(gravity < 1) //low grav duration *= 2.5 - gravity cooldown *= 2 - gravity height *= 2 - gravity if(gravity <= 0.75) - flags_pass |= PASS_DEFENSIVE_STRUCTURE + pass_flags |= PASS_DEFENSIVE_STRUCTURE else if(gravity > 1) //high grav duration *= gravity * 0.5 cooldown *= gravity height *= gravity * 0.5 - AddComponent(/datum/component/jump, _jump_duration = duration, _jump_cooldown = cooldown, _stamina_cost = 0, _jump_height = height, _jump_sound = sound, _jump_flags = flags, _jumper_allow_pass_flags = flags_pass) + AddComponent(/datum/component/jump, _jump_duration = duration, _jump_cooldown = cooldown, _stamina_cost = 0, _jump_height = height, _jump_sound = sound, _jump_flags = flags, _jumper_allow_pass_flags = pass_flags) diff --git a/code/modules/mob/living/carbon/xenomorph/xenoprocs.dm b/code/modules/mob/living/carbon/xenomorph/xenoprocs.dm index 1fcb5053c17fb..12f63918e1b11 100644 --- a/code/modules/mob/living/carbon/xenomorph/xenoprocs.dm +++ b/code/modules/mob/living/carbon/xenomorph/xenoprocs.dm @@ -135,7 +135,15 @@ . += "Sunder: [100-sunder]% armor left" - //Very weak <= 1.0, weak <= 2.0, no modifier 2-3, strong <= 3.5, very strong <= 4.5 + . += "Regeneration power: [max(regen_power * 100, 0)]%" + + var/casteswap_value = ((GLOB.key_to_time_of_caste_swap[key] ? GLOB.key_to_time_of_caste_swap[key] : -INFINITY) + 15 MINUTES - world.time) * 0.1 + if(casteswap_value <= 0) + . += "Caste Swap Timer: READY" + else + . += "Caste Swap Timer: [(casteswap_value / 60) % 60]:[add_leading(num2text(casteswap_value % 60), 2, "0")]" + + //Very weak <= 1.0, Weak <= 2.0, Medium < 3.0, Strong < 4.0, Very strong >= 4.0 var/msg_holder = "" if(frenzy_aura) switch(frenzy_aura) @@ -149,7 +157,7 @@ msg_holder = "Strong" if(4.0 to INFINITY) msg_holder = "Very strong" - . += "[AURA_XENO_FRENZY] pheromone strength: [msg_holder]" + . += "[AURA_XENO_FRENZY] pheromone strength: [msg_holder] ([frenzy_aura])" if(warding_aura) switch(warding_aura) if(-INFINITY to 1.0) @@ -162,7 +170,7 @@ msg_holder = "Strong" if(4.0 to INFINITY) msg_holder = "Very strong" - . += "[AURA_XENO_WARDING] pheromone strength: [msg_holder]" + . += "[AURA_XENO_WARDING] pheromone strength: [msg_holder] ([warding_aura])" if(recovery_aura) switch(recovery_aura) if(-INFINITY to 1.0) @@ -175,7 +183,7 @@ msg_holder = "Strong" if(4.0 to INFINITY) msg_holder = "Very strong" - . += "[AURA_XENO_RECOVERY] pheromone strength: [msg_holder]" + . += "[AURA_XENO_RECOVERY] pheromone strength: [msg_holder] ([recovery_aura])" //A simple handler for checking your state. Used in pretty much all the procs. /mob/living/carbon/xenomorph/proc/check_state() @@ -191,16 +199,25 @@ return FALSE return TRUE -/mob/living/carbon/xenomorph/proc/use_plasma(value) +/mob/living/carbon/xenomorph/proc/set_plasma(value, update_plasma = TRUE) + plasma_stored = clamp(value, 0, xeno_caste.plasma_max) + if(!update_plasma) + return + hud_set_plasma() + +/mob/living/carbon/xenomorph/proc/use_plasma(value, update_plasma = TRUE) plasma_stored = max(plasma_stored - value, 0) update_action_button_icons() + if(!update_plasma) + return + hud_set_plasma() -/mob/living/carbon/xenomorph/proc/gain_plasma(value) +/mob/living/carbon/xenomorph/proc/gain_plasma(value, update_plasma = TRUE) plasma_stored = min(plasma_stored + value, xeno_caste.plasma_max) update_action_button_icons() - - - + if(!update_plasma) + return + hud_set_plasma() //Strip all inherent xeno verbs from your caste. Used in evolution. /mob/living/carbon/xenomorph/proc/remove_inherent_verbs() @@ -230,7 +247,7 @@ // Upgrade is increased based on marine to xeno population taking stored_larva as a modifier. var/datum/job/xeno_job = SSjob.GetJobType(/datum/job/xenomorph) var/stored_larva = xeno_job.total_positions - xeno_job.current_positions - upgrade_stored += 1 + (stored_larva/6) + hive.get_evolution_boost() //Do this regardless of whether we can upgrade so age accrues at primo + upgrade_stored += 1 + (stored_larva/6) + hive.get_upgrade_boost() //Do this regardless of whether we can upgrade so age accrues at primo if(!upgrade_possible()) return if(upgrade_stored < xeno_caste.upgrade_threshold) @@ -312,17 +329,16 @@ /mob/living/carbon/xenomorph/proc/zoom_in(tileoffset = 5, viewsize = 4.5) //RU TGMC EDIT if(stat || resting) - if(is_zoomed) - is_zoomed = 0 + if(xeno_flags & XENO_ZOOMED) zoom_out() return return - if(is_zoomed) + if(xeno_flags & XENO_ZOOMED) return if(!client) return zoom_turf = get_turf(src) - is_zoomed = 1 + xeno_flags |= XENO_ZOOMED client.view_size.set_view_radius_to(viewsize) //convert diameter to radius var/viewoffset = 32 * tileoffset switch(dir) @@ -340,7 +356,7 @@ client.pixel_y = 0 /mob/living/carbon/xenomorph/proc/zoom_out() - is_zoomed = 0 + xeno_flags &= ~XENO_ZOOMED zoom_turf = null if(!client) return @@ -363,7 +379,7 @@ //When the Queen's pheromones are updated, or we add/remove a leader, update leader pheromones /mob/living/carbon/xenomorph/proc/handle_xeno_leader_pheromones(mob/living/carbon/xenomorph/queen/Q) QDEL_NULL(leader_current_aura) - if(QDELETED(Q) || !queen_chosen_lead || !Q.current_aura || Q.loc.z != loc.z) //We are no longer a leader, or the Queen attached to us has dropped from her ovi, disabled her pheromones or even died + if(QDELETED(Q) || !(xeno_flags & XENO_LEADER) || !Q.current_aura || Q.loc.z != loc.z) //We are no longer a leader, or the Queen attached to us has dropped from her ovi, disabled her pheromones or even died to_chat(src, span_xenowarning("Our pheromones wane. The Queen is no longer granting us her pheromones.")) else leader_current_aura = SSaura.add_emitter(src, Q.current_aura.aura_types.Copy(), Q.current_aura.range, Q.current_aura.strength, Q.current_aura.duration, Q.current_aura.faction, Q.current_aura.hive_number) @@ -398,11 +414,6 @@ take_damage(2 * X.xeno_caste.acid_spray_structure_damage, BURN, ACID) return FALSE // not normal density flag -/obj/vehicle/multitile/root/cm_armored/acid_spray_act(mob/living/carbon/xenomorph/X) - take_damage_type(X.xeno_caste.acid_spray_structure_damage, ACID, src) - healthcheck() - return TRUE - /mob/living/carbon/acid_spray_act(mob/living/carbon/xenomorph/X) ExtinguishMob() if(isnestedhost(src)) @@ -432,7 +443,11 @@ ExtinguishMob() /obj/flamer_fire/acid_spray_act(mob/living/carbon/xenomorph/X) - Destroy() + qdel(src) + +/obj/hitbox/acid_spray_act(mob/living/carbon/xenomorph/X) + take_damage(X.xeno_caste.acid_spray_structure_damage, BURN, ACID) + return TRUE // Vent Crawl /mob/living/carbon/xenomorph/proc/vent_crawl() @@ -450,13 +465,13 @@ set desc = "Toggles the health and plasma hud appearing above Xenomorphs." set category = "Alien" - xeno_mobhud = !xeno_mobhud + xeno_flags ^= XENO_MOBHUD var/datum/atom_hud/H = GLOB.huds[DATA_HUD_XENO_STATUS] - if(xeno_mobhud) + if(xeno_flags & XENO_MOBHUD) H.add_hud_to(src) else H.remove_hud_from(src) - to_chat(src, span_notice("You have [xeno_mobhud ? "enabled" : "disabled"] the Xeno Status HUD.")) + to_chat(src, span_notice("You have [(xeno_flags & XENO_MOBHUD) ? "enabled" : "disabled"] the Xeno Status HUD.")) /mob/living/carbon/xenomorph/proc/recurring_injection(mob/living/carbon/C, datum/reagent/toxin = /datum/reagent/toxin/xeno_neurotoxin, channel_time = XENO_NEURO_CHANNEL_TIME, transfer_amount = XENO_NEURO_AMOUNT_RECURRING, count = 4) @@ -490,17 +505,12 @@ return TRUE return FALSE -/mob/living/carbon/xenomorph/proc/setup_verbs() - add_verb(src, /mob/living/proc/lay_down) - -/mob/living/carbon/xenomorph/hivemind/setup_verbs() - return - /mob/living/carbon/xenomorph/adjust_sunder(adjustment) . = ..() if(.) return - sunder = clamp(sunder + adjustment, 0, xeno_caste.sunder_max) + sunder = clamp(sunder + (adjustment > 0 ? adjustment * xeno_caste.sunder_multiplier : adjustment), 0, xeno_caste.sunder_max) +//Applying sunder is an adjustment value above 0, healing sunder is an adjustment value below 0. Use multiplier when taking sunder, not when healing. /mob/living/carbon/xenomorph/set_sunder(new_sunder) . = ..() diff --git a/code/modules/mob/living/carbon/xenomorph/xenoupgrade.dm b/code/modules/mob/living/carbon/xenomorph/xenoupgrade.dm index c642082b6cb48..7fa2cb9f9bbbf 100644 --- a/code/modules/mob/living/carbon/xenomorph/xenoupgrade.dm +++ b/code/modules/mob/living/carbon/xenomorph/xenoupgrade.dm @@ -25,7 +25,7 @@ if(found) continue var/datum/action/ability/xeno_action/action = new allowed_action_path() - if(!SSticker.mode || (SSticker.mode.flags_xeno_abilities & action.gamemode_flags)) + if(!SSticker.mode || (SSticker.mode.xeno_abilities_flags & action.gamemode_flags)) action.give_action(src) for(var/datum/action/ability/xeno_action/action_already_added AS in actions_already_added) @@ -39,7 +39,7 @@ activable_ability.select() break - if(queen_chosen_lead) + if(xeno_flags & XENO_LEADER) give_rally_abilities() //Give them back their rally hive ability if(current_aura) //Updates pheromone strength diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index af09465c5c4be..a9624e0e360cf 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -98,6 +98,7 @@ set_armor_datum() AddElement(/datum/element/gesture) AddElement(/datum/element/keybinding_update) + AddElement(/datum/element/directional_attack) /mob/living/Destroy() for(var/datum/status_effect/effect AS in status_effects) @@ -130,48 +131,8 @@ return -/mob/proc/get_contents() - return - - -//Recursive function to find everything a mob is holding. -/mob/living/get_contents(obj/item/storage/Storage = null) - var/list/L = list() - - if(Storage) //If it called itself - L += Storage.return_inv() - - for(var/obj/item/gift/G in Storage.return_inv()) //Check for gift-wrapped items - L += G.gift - if(istype(G.gift, /obj/item/storage)) - L += get_contents(G.gift) - - for(var/obj/item/smallDelivery/D in Storage.return_inv()) //Check for package wrapped items - L += D.wrapped - if(istype(D.wrapped, /obj/item/storage)) //this should never happen - L += get_contents(D.wrapped) - return L - - else - - L += contents - for(var/obj/item/storage/S in contents) //Check for storage items - L += get_contents(S) - - for(var/obj/item/gift/G in contents) //Check for gift-wrapped items - L += G.gift - if(istype(G.gift, /obj/item/storage)) - L += get_contents(G.gift) - - for(var/obj/item/smallDelivery/D in contents) //Check for package wrapped items - L += D.wrapped - if(istype(D.wrapped, /obj/item/storage)) //this should never happen - L += get_contents(D.wrapped) - return L - - /mob/living/proc/check_contents_for(A) - var/list/L = get_contents() + var/list/L = GetAllContents() for(var/obj/O in L) if(O.type == A) @@ -234,9 +195,9 @@ s_active.close(src) -/mob/living/Moved(oldLoc, dir) +/mob/living/Moved(atom/old_loc, movement_dir, forced = FALSE, list/old_locs) . = ..() - update_camera_location(oldLoc) + update_camera_location(old_loc) /mob/living/forceMove(atom/destination) @@ -255,14 +216,6 @@ /mob/living/proc/update_camera_location(oldLoc) return - -/mob/living/vv_get_dropdown() - . = ..() - . += "---" - .["Add Language"] = "?_src_=vars;[HrefToken()];addlanguage=[REF(src)]" - .["Remove Language"] = "?_src_=vars;[HrefToken()];remlanguage=[REF(src)]" - - /mob/proc/resist_grab() return //returning 1 means we successfully broke free @@ -375,8 +328,10 @@ mob_swap_mode = PHASING else if((move_resist >= MOVE_FORCE_VERY_STRONG || move_resist > L.move_force) && a_intent == INTENT_HELP) //Larger mobs can shove aside smaller ones. Xenos can always shove xenos mob_swap_mode = SWAPPING - ///if we're moving diagonally, but the mob isn't on the diagonal destination turf we have no reason to shuffle/push them - if(moving_diagonally && (get_dir(src, L) in GLOB.cardinals) && get_step(src, dir).Enter(src, loc)) + /* If we're moving diagonally, but the mob isn't on the diagonal destination turf and the destination turf is enterable we have no reason to shuffle/push them + * However we also do not want mobs of smaller move forces being able to pass us diagonally if our move resist is larger, unless they're the same faction as us + */ + if(moving_diagonally && (get_dir(src, L) in GLOB.cardinals) && (L.faction == faction || L.move_resist <= move_force) && get_step(src, dir).Enter(src, loc)) mob_swap_mode = PHASING if(mob_swap_mode) //switch our position with L @@ -483,6 +438,11 @@ stop_pulling() //being thrown breaks pulls. if(pulledby) pulledby.stop_pulling() + if(LAZYLEN(buckled_mobs) && !flying) + unbuckle_all_mobs(force = TRUE) + if(buckled) + buckled.unbuckle_mob(src) + return ..() /** @@ -772,33 +732,6 @@ below 100 is not dizzy else stop_pulling() - -/mob/living/vv_edit_var(var_name, var_value) - switch(var_name) - if("maxHealth") - if(!isnum(var_value) || var_value <= 0) - return FALSE - if("stat") - if((stat == DEAD) && (var_value < DEAD))//Bringing the dead back to life - GLOB.dead_mob_list -= src - GLOB.alive_living_list += src - if((stat < DEAD) && (var_value == DEAD))//Kill he - GLOB.alive_living_list -= src - GLOB.dead_mob_list += src - . = ..() - switch(var_name) - if("eye_blind") - set_blindness(var_value) - if("eye_blurry") - set_blurriness(var_value) - if("maxHealth") - updatehealth() - if("resize") - update_transform() - if("lighting_alpha") - sync_lighting_plane_alpha() - - /mob/living/can_interact_with(datum/D) return D == src || D.Adjacent(src) @@ -871,19 +804,15 @@ below 100 is not dizzy ///Swap the active hand /mob/living/proc/swap_hand() var/obj/item/wielded_item = get_active_held_item() - if(wielded_item && (wielded_item.flags_item & WIELDED)) //this segment checks if the item in your hand is twohanded. + if(wielded_item && (wielded_item.item_flags & WIELDED)) //this segment checks if the item in your hand is twohanded. var/obj/item/weapon/twohanded/offhand/offhand = get_inactive_held_item() - if(offhand && (offhand.flags_item & WIELDED)) + if(offhand && (offhand.item_flags & WIELDED)) wielded_item.unwield(src) //Get rid of it. hand = !hand SEND_SIGNAL(src, COMSIG_CARBON_SWAPPED_HANDS) if(hud_used.l_hand_hud_object && hud_used.r_hand_hud_object) - hud_used.l_hand_hud_object.update_icon(hand) - hud_used.r_hand_hud_object.update_icon(!hand) - if(hand) //This being 1 means the left hand is in use - hud_used.l_hand_hud_object.add_overlay("hand_active") - else - hud_used.r_hand_hud_object.add_overlay("hand_active") + hud_used.l_hand_hud_object.update_icon() + hud_used.r_hand_hud_object.update_icon() return ///Swap to the hand clicked on the hud @@ -946,7 +875,7 @@ below 100 is not dizzy get_up() ///Sets up the jump component for the mob. Proc args can be altered so different mobs have different 'default' jump settings -/mob/living/proc/set_jump_component(duration = 0.5 SECONDS, cooldown = 1 SECONDS, cost = 8, height = 16, sound = null, flags = JUMP_SHADOW, flags_pass = PASS_LOW_STRUCTURE|PASS_FIRE) +/mob/living/proc/set_jump_component(duration = 0.5 SECONDS, cooldown = 1 SECONDS, cost = 8, height = 16, sound = null, flags = JUMP_SHADOW, pass_flags = PASS_LOW_STRUCTURE|PASS_FIRE|PASS_TANK) var/gravity = get_gravity() if(gravity < 1) //low grav duration *= 2.5 - gravity @@ -954,11 +883,122 @@ below 100 is not dizzy cost *= gravity * 0.5 height *= 2 - gravity if(gravity <= 0.75) - flags_pass |= PASS_DEFENSIVE_STRUCTURE + pass_flags |= PASS_DEFENSIVE_STRUCTURE else if(gravity > 1) //high grav duration *= gravity * 0.5 cooldown *= gravity cost *= gravity height *= gravity * 0.5 - AddComponent(/datum/component/jump, _jump_duration = duration, _jump_cooldown = cooldown, _stamina_cost = cost, _jump_height = height, _jump_sound = sound, _jump_flags = flags, _jumper_allow_pass_flags = flags_pass) + AddComponent(/datum/component/jump, _jump_duration = duration, _jump_cooldown = cooldown, _stamina_cost = cost, _jump_height = height, _jump_sound = sound, _jump_flags = flags, _jumper_allow_pass_flags = pass_flags) + +/mob/living/vv_edit_var(var_name, var_value) + switch(var_name) + if (NAMEOF(src, maxHealth)) + if (!isnum(var_value) || var_value <= 0) + return FALSE + if(NAMEOF(src, health)) //this doesn't work. gotta use procs instead. + return FALSE + if(NAMEOF(src, stat)) + if((stat == DEAD) && (var_value < DEAD))//Bringing the dead back to life + GLOB.dead_mob_list -= src + GLOB.alive_living_list += src + if((stat < DEAD) && (var_value == DEAD))//Kill he + GLOB.alive_living_list -= src + GLOB.dead_mob_list += src + if(NAMEOF(src, resting)) + set_resting(var_value) + . = TRUE + if(NAMEOF(src, lying_angle)) + set_lying_angle(var_value) + . = TRUE + if(NAMEOF(src, eye_blind)) + set_blindness(var_value) + if(NAMEOF(src, eye_blurry)) + set_blurriness(var_value) + if(NAMEOF(src, lighting_alpha)) + sync_lighting_plane_alpha() + if(NAMEOF(src, resize)) + if(var_value == 0) //prevents divisions of and by zero. + return FALSE + update_transform(var_value/resize) + . = TRUE + + if(!isnull(.)) + datum_flags |= DF_VAR_EDITED + return + + . = ..() + + switch(var_name) + if(NAMEOF(src, maxHealth)) + updatehealth() + +/mob/living/vv_get_header() + . = ..() + var/refid = REF(src) + . += {" +
    [VV_HREF_TARGETREF(refid, VV_HK_GIVE_DIRECT_CONTROL, "[ckey || "no ckey"]")] / [VV_HREF_TARGETREF_1V(refid, VV_HK_BASIC_EDIT, "[real_name || "no real name"]", NAMEOF(src, real_name))] +
    + BRUTE:[getBruteLoss()] + FIRE:[getFireLoss()] + TOXIN:[getToxLoss()] + OXY:[getOxyLoss()] + CLONE:[getCloneLoss()] + STAMINA:[getStaminaLoss()] + + "} + +/mob/living/vv_get_dropdown() + . = ..() + VV_DROPDOWN_OPTION("", "---------") + VV_DROPDOWN_OPTION(VV_HK_ADD_LANGUAGE, "Add Language") + VV_DROPDOWN_OPTION(VV_HK_REMOVE_LANGUAGE, "Remove Language") + VV_DROPDOWN_OPTION(VV_HK_GIVE_SPEECH_IMPEDIMENT, "Impede Speech (Slurring, stuttering, etc)") + +/mob/living/vv_do_topic(list/href_list) + . = ..() + + if(!.) + return + + if(href_list[VV_HK_ADD_LANGUAGE]) + if(!check_rights(NONE)) + return + var/choice = tgui_input_list(usr, "Grant which language?", "Languages", GLOB.all_languages) + if(!choice) + return + grant_language(choice) + if(href_list[VV_HK_REMOVE_LANGUAGE]) + if(!check_rights(NONE)) + return + var/choice = tgui_input_list(usr, "Remove which language?", "Known Languages", src.language_holder.languages) + if(!choice) + return + remove_language(choice) + if(href_list[VV_HK_GIVE_SPEECH_IMPEDIMENT]) + if(!check_rights(NONE)) + return + admin_give_speech_impediment(usr) + +/// Admin only proc for giving a certain speech impediment to this mob +/mob/living/proc/admin_give_speech_impediment(mob/admin) + if(!admin || !check_rights(NONE)) + return + + var/list/impediments = list() + for(var/datum/status_effect/possible as anything in typesof(/datum/status_effect/speech)) + if(!initial(possible.id)) + continue + + impediments[initial(possible.id)] = possible + + var/chosen = tgui_input_list(admin, "What speech impediment?", "Impede Speech", impediments) + if(!chosen || !ispath(impediments[chosen], /datum/status_effect/speech) || QDELETED(src) || !check_rights(NONE)) + return + + var/duration = tgui_input_number(admin, "How long should it last (in seconds)? Max is infinite duration.", "Duration", 0, INFINITY, 0 SECONDS) + if(!isnum(duration) || duration <= 0 || QDELETED(src) || !check_rights(NONE)) + return + + adjust_timed_status_effect(duration * 1 SECONDS, impediments[chosen]) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index de2ad13aae925..8dcb7ea20555a 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -1,8 +1,58 @@ +/mob/living/grab_interact(obj/item/grab/grab, mob/user, base_damage = BASE_MOB_SLAM_DAMAGE, is_sharp = FALSE) + if(!isliving(grab.grabbed_thing)) + return + if(grab.grabbed_thing == src) + return + if(user == src) + return + + var/mob/living/grabbed_mob = grab.grabbed_thing + step_towards(grabbed_mob, src) + user.drop_held_item() + var/state = user.grab_state + + if(state >= GRAB_AGGRESSIVE) + var/own_stun_chance = 0 + var/grabbed_stun_chance = 0 + if(grabbed_mob.mob_size > mob_size) + own_stun_chance = 25 + grabbed_stun_chance = 10 + else if(grabbed_mob.mob_size < mob_size) + own_stun_chance = 0 + grabbed_stun_chance = 25 + else + own_stun_chance = 25 + grabbed_stun_chance = 25 + + if(prob(own_stun_chance)) + Paralyze(1 SECONDS) + if(prob(grabbed_stun_chance)) + grabbed_mob.Paralyze(1 SECONDS) + + var/damage = (user.skills.getRating(SKILL_CQC) * CQC_SKILL_DAMAGE_MOD) + switch(state) + if(GRAB_PASSIVE) + damage += base_damage + grabbed_mob.visible_message(span_warning("[user] slams [grabbed_mob] against [src]!")) + log_combat(user, grabbed_mob, "slammed", "", "against [src]") + if(GRAB_AGGRESSIVE) + damage += base_damage * 1.5 + grabbed_mob.visible_message(span_danger("[user] bashes [grabbed_mob] against [src]!")) + log_combat(user, grabbed_mob, "bashed", "", "against [src]") + if(GRAB_NECK) + damage += base_damage * 2 + grabbed_mob.visible_message(span_danger("[user] crushes [grabbed_mob] against [src]!")) + log_combat(user, grabbed_mob, "crushed", "", "against [src]") + grabbed_mob.apply_damage(damage, blocked = MELEE, updating_health = TRUE) + apply_damage(damage, blocked = MELEE, updating_health = TRUE) + playsound(src, 'sound/weapons/heavyhit.ogg', 40) + return TRUE + /mob/living/proc/electrocute_act(shock_damage, obj/source, siemens_coeff = 1.0) return 0 //only carbon liveforms have this proc /mob/living/emp_act(severity) - var/list/L = src.get_contents() + var/list/L = GetAllContents() for(var/obj/O in L) O.emp_act(severity) ..() @@ -21,9 +71,6 @@ var/obj/O = AM O.stop_throw() apply_damage(O.throwforce*(speed * 0.2), O.damtype, BODY_ZONE_CHEST, MELEE, is_sharp(O), has_edge(O), TRUE, O.penetration) - if(O.item_fire_stacks) - fire_stacks += O.item_fire_stacks - IgniteMob() visible_message(span_warning(" [src] has been hit by [AM]."), null, null, 5) if(ismob(AM.thrower)) @@ -138,6 +185,21 @@ adjust_fire_stacks(rand(1,2)) IgniteMob() +/mob/living/lava_act() + if(resistance_flags & INDESTRUCTIBLE) + return FALSE + if(stat == DEAD) + return FALSE + if(status_flags & GODMODE) + return TRUE //while godmode will stop the damage, we don't want the process to stop in case godmode is removed + + var/lava_damage = 20 + take_overall_damage(max(modify_by_armor(lava_damage, FIRE), lava_damage * 0.3), BURN, updating_health = TRUE, max_limbs = 3) //snowflakey interaction to stop complete lava immunity + if(!CHECK_BITFIELD(pass_flags, PASS_FIRE))//Pass fire allow to cross lava without igniting + adjust_fire_stacks(20) + IgniteMob() + return TRUE + /mob/living/flamer_fire_act(burnlevel) if(!burnlevel) return diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 605adb03c0e02..165474af2a3c2 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -1,6 +1,6 @@ /mob/living see_invisible = SEE_INVISIBLE_LIVING - flags_atom = CRITICAL_ATOM|PREVENT_CONTENTS_EXPLOSION|BUMP_ATTACKABLE + atom_flags = CRITICAL_ATOM|PREVENT_CONTENTS_EXPLOSION|BUMP_ATTACKABLE ///0 for no override, sets see_invisible = see_override in silicon & carbon life process via update_sight() var/see_override = 0 ///Badminnery resize @@ -124,7 +124,10 @@ var/grab_resist_level = 0 var/datum/job/job var/comm_title = "" - ///how much blood the mob has + /** + * How much blood the mob has. + * !!! Use the adjust_blood_volume() and set_blood_volume() to set this variable instead of directly modifying it!!! + */ var/blood_volume = 0 ///Multiplier. var/heart_multi = 1 diff --git a/code/modules/mob/living/living_health_procs.dm b/code/modules/mob/living/living_health_procs.dm index f06b770cc759c..ee301c667dc85 100644 --- a/code/modules/mob/living/living_health_procs.dm +++ b/code/modules/mob/living/living_health_procs.dm @@ -92,6 +92,7 @@ updateStamina(feedback) /mob/living/proc/updateStamina(feedback = TRUE) + hud_used?.staminas?.update_icon() if(staminaloss < max(health * 1.5,0) || !(COOLDOWN_CHECK(src, last_stamina_exhaustion))) //If we're on cooldown for stamina exhaustion, don't bother return @@ -105,21 +106,6 @@ adjust_blurriness(STAMINA_EXHAUSTION_DEBUFF_STACKS) COOLDOWN_START(src, last_stamina_exhaustion, LIVING_STAMINA_EXHAUSTION_COOLDOWN - (skills.getRating(SKILL_STAMINA) * STAMINA_SKILL_COOLDOWN_MOD)) //set the cooldown. - -/mob/living/carbon/human/updateStamina(feedback = TRUE) - . = ..() - if(!hud_used?.staminas) - return - if(stat == DEAD) - hud_used.staminas.icon_state = "stamloss200" - return - var/relative_stamloss = getStaminaLoss() - if(relative_stamloss < 0 && max_stamina) - relative_stamloss = round(((relative_stamloss * 14) / max_stamina), 1) - else - relative_stamloss = round(((relative_stamloss * 7) / (maxHealth * 2)), 1) - hud_used.staminas.icon_state = "stamloss[relative_stamloss]" - /// Adds an entry to our stamina_regen_modifiers and updates stamina_regen_multiplier /mob/living/proc/add_stamina_regen_modifier(mod_name, mod_value) if(stamina_regen_modifiers[mod_name] == mod_value) @@ -205,6 +191,20 @@ return remove_movespeed_modifier(MOVESPEED_ID_DROWSINESS) +///Adjusts the blood volume, with respect to the minimum and maximum values +/mob/living/proc/adjust_blood_volume(amount) + if(!amount) + return + + blood_volume = clamp(blood_volume + amount, 0, BLOOD_VOLUME_MAXIMUM) + +///Sets the blood volume, with respect to the minimum and maximum values +/mob/living/proc/set_blood_volume(amount) + if(!amount) + return + + blood_volume = clamp(amount, 0, BLOOD_VOLUME_MAXIMUM) + // heal ONE limb, organ gets randomly selected from damaged ones. /mob/living/proc/heal_limb_damage(brute, burn, robo_repair = FALSE, updating_health = FALSE) @@ -254,7 +254,6 @@ /mob/living/carbon/human/on_revive() . = ..() - revive_grace_time = initial(revive_grace_time) GLOB.alive_human_list += src LAZYADD(GLOB.alive_human_list_faction[faction], src) GLOB.dead_human_list -= src @@ -374,7 +373,7 @@ /mob/living/carbon/xenomorph/revive(admin_revive = FALSE) - plasma_stored = xeno_caste.plasma_max + set_plasma(xeno_caste.plasma_max) sunder = 0 if(stat == DEAD) hive?.on_xeno_revive(src) @@ -397,7 +396,8 @@ ADD_TRAIT(src, TRAIT_IS_RESURRECTING, REVIVE_TO_CRIT_TRAIT) if(should_zombify && (istype(wear_ear, /obj/item/radio/headset/mainship))) var/obj/item/radio/headset/mainship/radio = wear_ear - radio.safety_protocol(src) + if(istype(radio)) + radio.safety_protocol(src) addtimer(CALLBACK(src, PROC_REF(finish_revive_to_crit), should_offer_to_ghost, should_zombify), 10 SECONDS) ///Check if we have a mind, and finish the revive if we do @@ -427,3 +427,4 @@ overlay_fullscreen_timer(2 SECONDS, 20, "roundstart2", /atom/movable/screen/fullscreen/spawning_in) REMOVE_TRAIT(src, TRAIT_IS_RESURRECTING, REVIVE_TO_CRIT_TRAIT) SSmobs.start_processing(src) + diff --git a/code/modules/mob/living/living_helpers.dm b/code/modules/mob/living/living_helpers.dm index ce974aedf2c26..bde1bbef01453 100644 --- a/code/modules/mob/living/living_helpers.dm +++ b/code/modules/mob/living/living_helpers.dm @@ -32,10 +32,10 @@ /mob/living/restrained(ignore_checks) . = ..() - var/flags_to_check = RESTRAINED_NECKGRAB | RESTRAINED_XENO_NEST | RESTRAINED_STRAIGHTJACKET | RESTRAINED_RAZORWIRE | RESTRAINED_PSYCHICGRAB + var/to_check_flags = RESTRAINED_NECKGRAB | RESTRAINED_XENO_NEST | RESTRAINED_STRAIGHTJACKET | RESTRAINED_RAZORWIRE | RESTRAINED_PSYCHICGRAB if(ignore_checks) - DISABLE_BITFIELD(flags_to_check, ignore_checks) - return (. || CHECK_BITFIELD(restrained_flags, flags_to_check)) + DISABLE_BITFIELD(to_check_flags, ignore_checks) + return (. || CHECK_BITFIELD(restrained_flags, to_check_flags)) /mob/living/get_policy_keywords() diff --git a/code/modules/mob/living/living_verbs.dm b/code/modules/mob/living/living_verbs.dm index 0c323f442effa..bd456755bc2bd 100644 --- a/code/modules/mob/living/living_verbs.dm +++ b/code/modules/mob/living/living_verbs.dm @@ -3,13 +3,9 @@ set category = "IC" do_resist() - -//RUTGMC EDIT BEGIN - Moved to modular_RUtgmc\code\modules\mob\living\living_verbs.dm -/* -/mob/living/proc/lay_down() - set name = "Rest" - set category = "IC" - +/* // RUTGMC CHANGE +///Handles trying to toggle resting state +/mob/living/proc/toggle_resting() if(incapacitated(TRUE)) return @@ -17,19 +13,21 @@ if(is_ventcrawling) return FALSE set_resting(TRUE, FALSE) - else if(do_actions) - to_chat(src, span_warning("You are still in the process of standing up.")) return - else if(do_after(src, 2 SECONDS, IGNORE_LOC_CHANGE|IGNORE_HELD_ITEM, src)) - get_up() + if(do_actions) + balloon_alert(src, "Busy!") + return + get_up() +///Handles getting up, doing a basic check before relaying it to the actual proc that does it /mob/living/proc/get_up() if(!incapacitated(TRUE)) set_resting(FALSE, FALSE) else to_chat(src, span_notice("You fail to get up.")) -*/ // RUTGMC EDIT END +*/ //RUTGMC CHANGE +///Actually handles toggling the resting state /mob/living/proc/set_resting(rest, silent = TRUE) if(status_flags & INCORPOREAL) return @@ -47,11 +45,7 @@ if(!silent) to_chat(src, span_notice("You get up.")) SEND_SIGNAL(src, COMSIG_XENOMORPH_UNREST) - update_resting() - - -/mob/living/proc/update_resting() - hud_used?.rest_icon?.update_icon(src) + hud_used?.rest_icon?.update_icon() /mob/living/verb/ghost() diff --git a/code/modules/mob/living/logout.dm b/code/modules/mob/living/logout.dm index 0960b0e702323..d8d92c9dca5cb 100644 --- a/code/modules/mob/living/logout.dm +++ b/code/modules/mob/living/logout.dm @@ -12,4 +12,4 @@ else if(!isclientedaghost(src)) set_afk_status(MOB_RECENTLY_DISCONNECTED, AFK_TIMER) if(!QDELETED(src) && stat != DEAD) - LAZYDISTINCTADD(GLOB.ssd_living_mobs, src) + LAZYOR(GLOB.ssd_living_mobs, src) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 5850166dc29c5..a8e77af688a3e 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -138,19 +138,6 @@ GLOB.ai_list -= src QDEL_NULL(builtInCamera) QDEL_NULL(track) - UnregisterSignal(src, COMSIG_ORDER_SELECTED) - UnregisterSignal(src, COMSIG_MOB_CLICK_ALT) - - UnregisterSignal(SSdcs, COMSIG_GLOB_OB_LASER_CREATED) - UnregisterSignal(SSdcs, COMSIG_GLOB_CAS_LASER_CREATED) - UnregisterSignal(SSdcs, COMSIG_GLOB_RAILGUN_LASER_CREATED) - UnregisterSignal(SSdcs, COMSIG_GLOB_SHUTTLE_TAKEOFF) - UnregisterSignal(SSdcs, COMSIG_GLOB_DROPSHIP_CONTROLS_CORRUPTED) - UnregisterSignal(SSdcs, COMSIG_GLOB_MINI_DROPSHIP_DESTROYED) - UnregisterSignal(SSdcs, COMSIG_GLOB_DISK_GENERATED) - UnregisterSignal(SSdcs, COMSIG_GLOB_NUKE_START) - UnregisterSignal(SSdcs, COMSIG_GLOB_CLONE_PRODUCED) - UnregisterSignal(SSdcs, COMSIG_GLOB_HOLOPAD_AI_CALLED) QDEL_NULL(mini) return ..() @@ -255,7 +242,6 @@ to_chat(src, span_notice("Camera lights activated.")) camera_light_on = !camera_light_on - /mob/living/silicon/ai/proc/light_cameras() var/list/obj/machinery/camera/add = list() var/list/obj/machinery/camera/remove = list() @@ -277,6 +263,14 @@ C.Togglelight(1) lit_cameras |= C +/mob/living/silicon/ai/proc/supply_interface() + var/datum/supply_ui/SU + if(!SU) + SU = new(src) + SU.shuttle_id = SHUTTLE_SUPPLY + SU.home_id = "supply_home" + SU.faction = src.faction + return SU.interact(src) /mob/living/silicon/ai/proc/camera_visibility(mob/camera/aiEye/moved_eye) GLOB.cameranet.visibility(moved_eye, client, all_eyes, moved_eye.use_static) @@ -289,11 +283,11 @@ return (GLOB.cameranet && GLOB.cameranet.checkTurfVis(get_turf_pixel(A))) /mob/living/silicon/ai/proc/relay_speech(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) - raw_message = lang_treat(speaker, message_language, raw_message, spans, message_mode) var/start = "Relayed Speech: " var/namepart = "[speaker.GetVoice()][speaker.get_alt_name()]" var/hrefpart = "" var/jobpart + var/speech_part = lang_treat(speaker, message_language, raw_message, spans, message_mode) if(iscarbon(speaker)) var/mob/living/carbon/S = speaker @@ -302,8 +296,10 @@ else jobpart = "Unknown" - var/rendered = "[start][span_name("[hrefpart][namepart] ([jobpart]) ")][span_message("[raw_message]")]
    " + var/rendered = "[start][span_name("[hrefpart][namepart] ([jobpart]) ")][span_message("[speech_part]")]" + + create_chat_message(speaker, message_language, raw_message, spans, message_mode) show_message(rendered, 2) @@ -345,20 +341,19 @@ else clear_fullscreen("remote_view", 0) -/* RUTGMC DELETION + /mob/living/silicon/ai/update_sight() - . = ..() if(HAS_TRAIT(src, TRAIT_SEE_IN_DARK)) see_in_dark = max(see_in_dark, 8) lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE eyeobj.see_in_dark = max(eyeobj.see_in_dark, 8) eyeobj.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - return + return ..() + see_in_dark = initial(see_in_dark) + lighting_alpha = initial(lighting_alpha) eyeobj.see_in_dark = initial(eyeobj.see_in_dark) eyeobj.lighting_alpha = initial(eyeobj.lighting_alpha) - see_in_dark = initial(see_in_dark) - lighting_alpha = initial(lighting_alpha) // yes you really have to change both the eye and the ai vars -*/ + return ..() /mob/living/silicon/ai/get_status_tab_items() . = ..() @@ -383,7 +378,8 @@ . += "Current alert level: [GLOB.marine_main_ship.get_security_level()]" - . += "Number of living marines: [SSticker.mode.count_humans_and_xenos()[1]]" + if(SSticker.mode) + . += "Number of living marines: [SSticker.mode.count_humans_and_xenos()[1]]" if(GLOB.marine_main_ship?.rail_gun?.last_firing_ai + COOLDOWN_RAILGUN_FIRE > world.time) . += "Railgun status: Cooling down, next fire in [(GLOB.marine_main_ship?.rail_gun?.last_firing_ai + COOLDOWN_RAILGUN_FIRE - world.time)/10] seconds." @@ -394,6 +390,9 @@ . += "AI bioscan status: Instruments recalibrating, next scan in [(last_ai_bioscan + COOLDOWN_AI_BIOSCAN - world.time)/10] seconds." //about 10 minutes else . += "AI bioscan status: Instruments are ready to scan the planet." + var/status_value = SSevacuation?.get_status_panel_eta() + if(status_value) + . += "Evacuation in: [status_value]" /mob/living/silicon/ai/fully_replace_character_name(oldname, newname) . = ..() diff --git a/code/modules/mob/living/silicon/ai/freelook/read_me.dm b/code/modules/mob/living/silicon/ai/freelook/README.md similarity index 97% rename from code/modules/mob/living/silicon/ai/freelook/read_me.dm rename to code/modules/mob/living/silicon/ai/freelook/README.md index 0f92bf94e6cd6..4528926265596 100644 --- a/code/modules/mob/living/silicon/ai/freelook/read_me.dm +++ b/code/modules/mob/living/silicon/ai/freelook/README.md @@ -1,12 +1,4 @@ -// 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? +# 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. @@ -17,7 +9,7 @@ This creates several features, such as.. no more see-through-wall cameras, easie 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 +# 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/Initialize(mapload) and Destroy(). @@ -27,7 +19,7 @@ These turfs are then sorted out based on what the cameras can and cannot see. If the 16x16 block, it is listed as an "obscured" turf. Meaning the AI won't be able to see it. -HOW IT UPDATES +# 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. @@ -41,10 +33,15 @@ measures, such as an UPDATE_BUFFER which stops a chunk from updating too many ti sight; for example, we don't update glass airlocks or floors. -WHERE IS EVERYTHING? +# 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. -*/ +## 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. diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index 5f4ef743db403..44bb9a62424ff 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -198,3 +198,8 @@ /mob/camera/aiEye/proc/unregister_facedir_signals(mob/user) UnregisterSignal(user, list(COMSIG_KB_MOB_FACENORTH_DOWN, COMSIG_KB_MOB_FACEEAST_DOWN, COMSIG_KB_MOB_FACESOUTH_DOWN, COMSIG_KB_MOB_FACEWEST_DOWN)) + +/mob/camera/aiEye/playsound_local(turf/turf_source, soundin, vol, vary, frequency, falloff, is_global, channel, sound/S, distance_multiplier, mob/sound_reciever) + if(istype(parent_cameranet) && !parent_cameranet.checkTurfVis(get_turf(src))) + return + return ..(turf_source, soundin, vol, vary, frequency, falloff, is_global, channel, S, distance_multiplier, ai) diff --git a/code/modules/mob/living/silicon/ai/multicam.dm b/code/modules/mob/living/silicon/ai/multicam.dm index 680244b23c8fd..652c6bb19198f 100644 --- a/code/modules/mob/living/silicon/ai/multicam.dm +++ b/code/modules/mob/living/silicon/ai/multicam.dm @@ -222,7 +222,7 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room) if(!silent) to_chat(src, span_warning("Cannot place more than [max_multicams] multicamera windows.")) return - var/atom/movable/screen/movable/pic_in_pic/ai/C = new /atom/movable/screen/movable/pic_in_pic/ai() + var/atom/movable/screen/movable/pic_in_pic/ai/C = new() C.set_view_size(3, 3, FALSE) C.set_view_center(get_turf(eyeobj)) C.set_ai(src) diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm index db7e8e950f486..1d0b5e1310393 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -114,7 +114,7 @@ log_game("[key_name(src)] made a vocal announcement with the following message: [message].") log_talk(message, LOG_SAY, tag="VOX Announcement") - to_chat(src, span_notice("The following vocal announcement has been made: [message].")) + minor_announce(capitalize(message), "[name] announces:", receivers = (GLOB.alive_human_list + GLOB.ai_list + GLOB.observer_list), should_play_sound = FALSE) for(var/word in words) //play vox sounds to the rest of our zlevel play_vox_word(word, src.z, null) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index f3a37e5f0297c..ccd70bbe026d4 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -18,6 +18,7 @@ /mob/living/silicon/Initialize(mapload) . = ..() + GLOB.silicon_mobs += src radio = new(src) if(SStts.tts_enabled) voice = pick(SStts.available_speakers) @@ -25,6 +26,7 @@ /mob/living/silicon/Destroy() QDEL_NULL(radio) + GLOB.silicon_mobs -= src return ..() diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index c3e48b988a810..5d8dadf6c6fa6 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -141,7 +141,7 @@ slot_l_hand_str = 'icons/mob/inhands/items/animals_left.dmi', slot_r_hand_str = 'icons/mob/inhands/items/animals_right.dmi', ) - flags_armor_features = ARMOR_NO_DECAP + armor_features_flags = ARMOR_NO_DECAP soft_armor = list(MELEE = 25, BULLET = 25, LASER = 25, ENERGY = 25, BOMB = 10, BIO = 5, FIRE = 50, ACID = 50) var/mob/living/simple_animal/cat/cat diff --git a/code/modules/mob/living/simple_animal/friendly/parrot.dm b/code/modules/mob/living/simple_animal/friendly/parrot.dm index cf94b7f4e534e..f9f88241e19f1 100644 --- a/code/modules/mob/living/simple_animal/friendly/parrot.dm +++ b/code/modules/mob/living/simple_animal/friendly/parrot.dm @@ -156,8 +156,8 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list( if(stat != DEAD && user.a_intent == INTENT_HELP) handle_automated_speech(1) //assured speak/emote -/mob/living/simple_animal/parrot/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - return attack_hand(X) +/mob/living/simple_animal/parrot/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + return attack_hand(xeno_attacker) /mob/living/simple_animal/parrot/attack_animal(mob/living/simple_animal/M) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index c9cb366bca4c1..b92cdf747865a 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -386,7 +386,7 @@ var/obj/projectile/P = new(startloc) playsound(src, projectilesound, 100, 1) P.generate_bullet(GLOB.ammo_list[ammotype]) - P.fire_at(targeted_atom, src) + P.fire_at(targeted_atom, src, src) /mob/living/simple_animal/hostile/proc/CanSmashTurfs(turf/T) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 5104d3f4295db..9a50d11f8d745 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -197,22 +197,22 @@ return TRUE -/mob/living/simple_animal/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) +/mob/living/simple_animal/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) . = ..() if(!.) return - if(X.a_intent == INTENT_DISARM) + if(xeno_attacker.a_intent == INTENT_DISARM) playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) - visible_message(span_danger("[X] [response_disarm] [name]!"), \ - span_userdanger("[X] [response_disarm] [name]!")) - log_combat(X, src, "disarmed") + visible_message(span_danger("[xeno_attacker] [response_disarm] [name]!"), \ + span_userdanger("[xeno_attacker] [response_disarm] [name]!")) + log_combat(xeno_attacker, src, "disarmed") else var/damage = rand(15, 30) - visible_message(span_danger("[X] has slashed at [src]!"), \ - span_userdanger("[X] has slashed at [src]!")) + visible_message(span_danger("[xeno_attacker] has slashed at [src]!"), \ + span_userdanger("[xeno_attacker] has slashed at [src]!")) playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1) attack_threshold_check(damage) - log_combat(X, src, "attacked") + log_combat(xeno_attacker, src, "attacked") return TRUE diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index a9aa21994f39e..ea2f0bd67c1e2 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -11,7 +11,6 @@ ghostize() clear_fullscreens() if(mind) - stack_trace("Found a reference to an undeleted mind in mob/Destroy(). Mind name: [mind.name]. Mind mob: [mind.current]") mind = null if(hud_used) QDEL_NULL(hud_used) @@ -34,6 +33,11 @@ GLOB.dead_mob_list += src set_focus(src) prepare_huds() + for(var/v in GLOB.active_alternate_appearances) + if(!v) + continue + var/datum/atom_hud/alternate_appearance/AA = v + AA.onNewMob(src) . = ..() if(islist(skills)) set_skills(getSkills(arglist(skills))) @@ -240,13 +244,13 @@ return FALSE equip_to_slot(W, slot) //This proc should not ever fail. //This will unwield items -without- triggering lights. - if(CHECK_BITFIELD(W.flags_item, TWOHANDED)) + if(CHECK_BITFIELD(W.item_flags, TWOHANDED)) W.unwield(src) return TRUE else equip_to_slot(W, slot) //This proc should not ever fail. //This will unwield items -without- triggering lights. - if(CHECK_BITFIELD(W.flags_item, TWOHANDED)) + if(CHECK_BITFIELD(W.item_flags, TWOHANDED)) W.unwield(src) return TRUE @@ -307,7 +311,7 @@ var/obj/item/found = I.do_quick_equip(src) if(!found) return FALSE - if(CHECK_BITFIELD(found.flags_inventory, NOQUICKEQUIP)) + if(CHECK_BITFIELD(found.inventory_flags, NOQUICKEQUIP)) return FALSE temporarilyRemoveItemFromInventory(found) put_in_hands(found) @@ -318,6 +322,37 @@ . += "---" .["Player Panel"] = "?_src_=vars;[HrefToken()];playerpanel=[REF(src)]" +/mob/vv_edit_var(var_name, var_value) + switch(var_name) + if(NAMEOF(src, control_object)) + var/obj/O = var_value + if(!istype(O) || (O.obj_flags & DANGEROUS_POSSESSION)) + return FALSE + if(NAMEOF(src, machine)) + set_machine(var_value) + . = TRUE + if(NAMEOF(src, focus)) + set_focus(var_value) + . = TRUE + if(NAMEOF(src, stat)) + set_stat(var_value) + . = TRUE + + if(!isnull(.)) + datum_flags |= DF_VAR_EDITED + return + + var/slowdown_edit = (var_name == NAMEOF(src, cached_multiplicative_slowdown)) + var/diff + if(slowdown_edit && isnum(cached_multiplicative_slowdown) && isnum(var_value)) + remove_movespeed_modifier(MOVESPEED_ID_ADMIN_VAREDIT) + diff = var_value - cached_multiplicative_slowdown + + . = ..() + + if(. && slowdown_edit && isnum(diff)) + update_movespeed() + /client/verb/changes() set name = "Changelog" @@ -789,6 +824,7 @@ //This would go on on_revive() but that is a mob/living proc var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[ckey] personal_statistics.times_revived++ + personal_statistics.mission_times_revived++ SEND_SIGNAL(src, COMSIG_MOB_STAT_CHANGED, ., new_stat) /// Cleanup proc that's called when a mob loses a client, either through client destroy or logout diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index f1f3482670a8e..7d5a782d81d0d 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -6,7 +6,7 @@ animate_movement = SLIDE_STEPS datum_flags = DF_USE_TAG mouse_drag_pointer = MOUSE_ACTIVE_POINTER - flags_atom = PREVENT_CONTENTS_EXPLOSION + atom_flags = PREVENT_CONTENTS_EXPLOSION resistance_flags = NONE //Mob @@ -77,6 +77,8 @@ var/list/fullscreens = list() ///contains /atom/movable/screen/alert only, used by alerts.dm var/list/alerts = list() + ///List of queued interactions on this mob + var/list/queued_interactions var/list/datum/action/actions = list() var/list/actions_by_path = list() var/lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index b416799643b3c..b31dc5f2511d6 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -4,8 +4,8 @@ name = "grab" icon_state = "reinforce" icon = 'icons/mob/screen/generic.dmi' - flags_atom = NONE - flags_item = NOBLUDGEON|DELONDROP|ITEM_ABSTRACT + atom_flags = NONE + item_flags = NOBLUDGEON|DELONDROP|ITEM_ABSTRACT layer = ABOVE_HUD_LAYER plane = ABOVE_HUD_PLANE item_state = "nothing" @@ -61,7 +61,7 @@ if(user.grab_state > GRAB_KILL) return user.changeNext_move(CLICK_CD_GRABBING) - if(!do_after(user, 2 SECONDS, NONE, victim, BUSY_ICON_HOSTILE, extra_checks = CALLBACK(user, TYPE_PROC_REF(/datum, Adjacent), victim)) || !user.pulling) + if(!do_after(user, max(2 SECONDS - (user.skills.getRating(SKILL_CQC) * 0.5 SECONDS), 1 SECONDS), NONE, victim, BUSY_ICON_HOSTILE, extra_checks = CALLBACK(user, TYPE_PROC_REF(/datum, Adjacent), victim)) || !user.pulling) return user.advance_grab_state() if(user.grab_state == GRAB_NECK) @@ -74,6 +74,7 @@ var/mob/living/victim = pulling playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, TRUE, 7) setGrabState(grab_state + 1) + victim.grab_resist_level -= 1 switch(grab_state) if(GRAB_AGGRESSIVE) log_combat(src, victim, "aggressive grabbed") diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 97b1823a88a2d..6794ea95a60e8 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -252,10 +252,10 @@ GLOBAL_LIST_INIT(organ_rel_size, list( /mob/proc/abiotic(full_body) - if(full_body && ((l_hand && !( l_hand.flags_item & ITEM_ABSTRACT )) || (r_hand && !( r_hand.flags_item & ITEM_ABSTRACT )))) + if(full_body && ((l_hand && !( l_hand.item_flags & ITEM_ABSTRACT )) || (r_hand && !( r_hand.item_flags & ITEM_ABSTRACT )))) return TRUE - if((src.l_hand && !( src.l_hand.flags_item & ITEM_ABSTRACT )) || (src.r_hand && !( src.r_hand.flags_item & ITEM_ABSTRACT ))) + if((src.l_hand && !( src.l_hand.item_flags & ITEM_ABSTRACT )) || (src.r_hand && !( src.r_hand.item_flags & ITEM_ABSTRACT ))) return TRUE return FALSE diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 654a57c6173a9..c5f5c182dc6a3 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -184,7 +184,7 @@ if(istype(src,/mob/living/carbon/human/)) // Only humans can wear magboots, so we give them a chance to. var/mob/living/carbon/human/H = src - if((istype(turf,/turf/open/floor)) && !(istype(H.shoes, /obj/item/clothing/shoes/magboots) && (H.shoes.flags_inventory & NOSLIPPING))) + if((istype(turf,/turf/open/floor)) && !(istype(H.shoes, /obj/item/clothing/shoes/magboots) && (H.shoes.inventory_flags & NOSLIPPING))) continue @@ -361,7 +361,7 @@ if(hud_used?.static_inventory) for(var/atom/movable/screen/mov_intent/selector in hud_used.static_inventory) - selector.update_icon(src) + selector.update_icon() return TRUE diff --git a/code/modules/mob/mob_movespeed.dm b/code/modules/mob/mob_movespeed.dm index 967a4c1f4a54f..47019380785eb 100644 --- a/code/modules/mob/mob_movespeed.dm +++ b/code/modules/mob/mob_movespeed.dm @@ -61,17 +61,6 @@ Key procs update_movespeed(FALSE) return TRUE -///Handles the special case of editing the movement var -/mob/vv_edit_var(var_name, var_value) - var/slowdown_edit = (var_name == NAMEOF(src, cached_multiplicative_slowdown)) - var/diff - if(slowdown_edit && isnum(cached_multiplicative_slowdown) && isnum(var_value)) - remove_movespeed_modifier(MOVESPEED_ID_ADMIN_VAREDIT) - diff = var_value - cached_multiplicative_slowdown - . = ..() - if(. && slowdown_edit && isnum(diff)) - add_movespeed_modifier(MOVESPEED_ID_ADMIN_VAREDIT, TRUE, 100, NONE, TRUE, diff) - ///Is there a movespeed modifier for this mob /mob/proc/has_movespeed_modifier(id) return LAZYACCESS(movespeed_modification, id) diff --git a/code/modules/mob/mob_verbs.dm b/code/modules/mob/mob_verbs.dm index ddcfab3cf347b..bf6a7005b2cad 100644 --- a/code/modules/mob/mob_verbs.dm +++ b/code/modules/mob/mob_verbs.dm @@ -82,7 +82,7 @@ return var/mob/new_player/M = new /mob/new_player() - if(SSticker.mode?.flags_round_type & MODE_TWO_HUMAN_FACTIONS) + if(SSticker.mode?.round_type_flags & MODE_TWO_HUMAN_FACTIONS) M.faction = faction if(!client) qdel(M) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 5b019faae00e3..bc80a844dd0fc 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -173,7 +173,7 @@ DIRECT_OUTPUT(usr, browse(null, "window=xenosunbalanced")) if(href_list["showpoll"]) - handle_playeR_DBRANKSing() + handle_playeR_POLLSing() return if(href_list["viewpoll"]) @@ -195,7 +195,7 @@ if(!GLOB.enter_allowed) dat += "
    You may no longer join the round.

    " var/forced_faction - if(SSticker.mode.flags_round_type & MODE_TWO_HUMAN_FACTIONS) + if(SSticker.mode.round_type_flags & MODE_TWO_HUMAN_FACTIONS) if(faction in SSticker.mode.get_joinable_factions(FALSE)) forced_faction = faction else @@ -455,7 +455,7 @@ to_chat(src, span_warning("The round is either not ready, or has already finished.")) return - if(SSticker.mode.flags_round_type & MODE_NO_LATEJOIN) + if(SSticker.mode.round_type_flags & MODE_NO_LATEJOIN) to_chat(src, span_warning("Sorry, you cannot late join during [SSticker.mode.name]. You have to start at the beginning of the round. You may observe or try to join as an alien, if possible.")) return diff --git a/code/modules/mob/new_player/poll.dm b/code/modules/mob/new_player/poll.dm index 8fdf495ae35fa..570b13273c086 100644 --- a/code/modules/mob/new_player/poll.dm +++ b/code/modules/mob/new_player/poll.dm @@ -2,7 +2,7 @@ * Shows a list of currently running polls a player can vote/has voted on * */ -/mob/new_player/proc/handle_playeR_DBRANKSing() +/mob/new_player/proc/handle_playeR_POLLSing() var/list/output = list("
    Player polls
    ") var/rs = REF(src) for(var/p in GLOB.polls) diff --git a/code/modules/mob/update_icons.dm b/code/modules/mob/update_icons.dm index 79b8c359da1a5..5c275bf383fd2 100644 --- a/code/modules/mob/update_icons.dm +++ b/code/modules/mob/update_icons.dm @@ -61,9 +61,6 @@ /mob/proc/update_inv_ears() return -/mob/proc/update_targeted() - return - /mob/proc/update_burst() return diff --git a/code/modules/orbits/spaceship.dm b/code/modules/orbits/spaceship.dm index 211830a9cf303..d058fe16f2c3b 100644 --- a/code/modules/orbits/spaceship.dm +++ b/code/modules/orbits/spaceship.dm @@ -161,7 +161,7 @@ GLOBAL_VAR_INIT(current_orbit,STANDARD_ORBIT) message_admins("[ADMIN_TPMONTY(usr)] Has sent the ship [direction == "UP" ? "UPWARD" : "DOWNWARD"] in orbit") var/message = "Prepare for orbital change in 10 seconds.\nMoving [direction] the gravity well.\nSecure all belongings and prepare for engine ignition." - priority_announce(message, title = "Orbit Change") + minor_announce(message, title = "Orbit Change") addtimer(CALLBACK(src, PROC_REF(do_change_orbit), current_orbit, direction), 10 SECONDS) /obj/machinery/computer/navigation/proc/can_change_orbit(current_orbit, direction, silent = FALSE) @@ -195,7 +195,7 @@ GLOBAL_VAR_INIT(current_orbit,STANDARD_ORBIT) engine_shudder() var/message = "Arriving at new orbital level. Prepare for engine ignition and stabilization." - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(priority_announce), message, "Orbit Change"), 290 SECONDS) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(minor_announce), message, "Orbit Change"), 290 SECONDS) addtimer(CALLBACK(src, PROC_REF(orbit_gets_changed), current_orbit, direction), 3 MINUTES) /obj/machinery/computer/navigation/proc/orbit_gets_changed(current_orbit, direction) diff --git a/code/modules/organs/limb_objects.dm b/code/modules/organs/limb_objects.dm index 75f4c607be4d9..b7d806af28330 100644 --- a/code/modules/organs/limb_objects.dm +++ b/code/modules/organs/limb_objects.dm @@ -93,7 +93,7 @@ overlays.Add(facial) // icon.Blend(facial, ICON_OVERLAY) - if(H.h_style && !(H.head && (H.head.flags_inv_hide & HIDETOPHAIR))) + if(H.h_style && !(H.head && (H.head.inv_hide_flags & HIDETOPHAIR))) var/datum/sprite_accessory/hair_style = GLOB.hair_styles_list[H.h_style] if(hair_style) var/icon/hair = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") diff --git a/code/modules/organs/limbs.dm b/code/modules/organs/limbs.dm index 91e88a3c8b201..8f447083d25c7 100644 --- a/code/modules/organs/limbs.dm +++ b/code/modules/organs/limbs.dm @@ -194,7 +194,7 @@ RU TGMC EDIT */ //Possibly trigger an internal wound, too. var/local_damage = brute_dam + burn_dam + brute - if(brute > 15 && local_damage > 30 && prob(brute*0.5) && !(limb_status & LIMB_ROBOT) && !(SSticker.mode?.flags_round_type & MODE_NO_PERMANENT_WOUNDS)) + if(brute > 15 && local_damage > 30 && prob(brute*0.5) && !(limb_status & LIMB_ROBOT) && !(SSticker.mode?.round_type_flags & MODE_NO_PERMANENT_WOUNDS)) new /datum/wound/internal_bleeding(min(brute - 15, 15), src) owner.custom_pain("You feel something rip in your [display_name]!", 1) @@ -269,7 +269,7 @@ RU TGMC EDIT */ owner.updatehealth() return update_icon() var/obj/item/clothing/worn_helmet = owner.head - if(body_part == HEAD && worn_helmet && (worn_helmet.flags_armor_features & ARMOR_NO_DECAP)) //Early return if the body part is a head but target is wearing decap-protecting headgear. + if(body_part == HEAD && worn_helmet && (worn_helmet.armor_features_flags & ARMOR_NO_DECAP)) //Early return if the body part is a head but target is wearing decap-protecting headgear. if(updating_health) owner.updatehealth() return update_icon() @@ -558,51 +558,51 @@ Note that amputating the affected organ does in fact remove the infection from t remove_limb_flags(LIMB_BLEEDING) -/datum/limb/proc/set_limb_flags(flags_to_set) - if(flags_to_set == limb_status) +/datum/limb/proc/set_limb_flags(to_set_flags) + if(to_set_flags == limb_status) return . = limb_status - var/flags_to_change = . & ~flags_to_set //Flags to remove - if(flags_to_change) - remove_limb_flags(flags_to_change) - flags_to_change = flags_to_set & ~(flags_to_set & .) //Flags to add - if(flags_to_change) - add_limb_flags(flags_to_change) + var/to_change_flags = . & ~to_set_flags //Flags to remove + if(to_change_flags) + remove_limb_flags(to_change_flags) + to_change_flags = to_set_flags & ~(to_set_flags & .) //Flags to add + if(to_change_flags) + add_limb_flags(to_change_flags) -/datum/limb/proc/remove_limb_flags(flags_to_remove) - if(!(limb_status & flags_to_remove)) +/datum/limb/proc/remove_limb_flags(to_remove_flags) + if(!(limb_status & to_remove_flags)) return //Nothing old to remove. . = limb_status - limb_status &= ~flags_to_remove - var/changed_flags = . & flags_to_remove + limb_status &= ~to_remove_flags + var/changed_flags = . & to_remove_flags if((changed_flags & LIMB_DESTROYED)) SEND_SIGNAL(src, COMSIG_LIMB_UNDESTROYED) -/datum/limb/proc/add_limb_flags(flags_to_add) - if(flags_to_add == (limb_status & flags_to_add)) +/datum/limb/proc/add_limb_flags(to_add_flags) + if(to_add_flags == (limb_status & to_add_flags)) return //Nothing new to add. . = limb_status - limb_status |= flags_to_add - var/changed_flags = ~(. & flags_to_add) & flags_to_add + limb_status |= to_add_flags + var/changed_flags = ~(. & to_add_flags) & to_add_flags if((changed_flags & LIMB_DESTROYED)) SEND_SIGNAL(src, COMSIG_LIMB_DESTROYED) -/datum/limb/foot/remove_limb_flags(flags_to_remove) +/datum/limb/foot/remove_limb_flags(to_remove_flags) . = ..() if(isnull(.)) return - var/changed_flags = . & flags_to_remove + var/changed_flags = . & to_remove_flags if((changed_flags & LIMB_DESTROYED) && owner.has_legs()) REMOVE_TRAIT(owner, TRAIT_LEGLESS, TRAIT_LEGLESS) -/datum/limb/foot/add_limb_flags(flags_to_add) +/datum/limb/foot/add_limb_flags(to_add_flags) . = ..() if(isnull(.)) return - var/changed_flags = ~(. & flags_to_add) & flags_to_add + var/changed_flags = ~(. & to_add_flags) & to_add_flags if((changed_flags & LIMB_DESTROYED) && !owner.has_legs()) ADD_TRAIT(owner, TRAIT_LEGLESS, TRAIT_LEGLESS) @@ -668,6 +668,11 @@ Note that amputating the affected organ does in fact remove the infection from t return limb_name return null +///Amputates the limb in the specified limb zone +/mob/living/carbon/human/proc/amputate_limb(limb_zone) + var/datum/limb/limb_to_drop = get_limb(limb_zone) + limb_to_drop?.droplimb(TRUE, TRUE) + //Handles dismemberment /datum/limb/proc/droplimb(amputation, delete_limb = FALSE) if(limb_status & LIMB_DESTROYED) @@ -922,23 +927,19 @@ Note that amputating the affected organ does in fact remove the infection from t // todo this proc sucks lmao just redo it from scratch //for arms and hands /datum/limb/proc/process_grasp(obj/item/c_hand, hand_name) - if (!c_hand) + if(!c_hand) return if(!is_usable()) - owner.dropItemToGround(c_hand) - owner.emote("me", 1, "drop[owner.p_s()] what [owner.p_they()] [owner.p_were()] holding in [owner.p_their()] [hand_name], [owner.p_their()] [display_name] unresponsive!") - return - if(is_broken()) - if(prob(15)) - owner.dropItemToGround(c_hand) - var/emote_scream = pick("screams in pain and", "lets out a sharp cry and", "cries out and") - owner.emote("me", 1, "[(owner.species && owner.species.species_flags & NO_PAIN) ? "" : emote_scream ] drops what [owner.p_they()] [owner.p_were()] holding in their [hand_name]!") - return - if(is_malfunctioning()) - if(prob(20)) - owner.dropItemToGround(c_hand) - owner.emote("me", 1, "drops what they were holding, [owner.p_their()] [hand_name] malfunctioning!") + if(owner.dropItemToGround(c_hand)) + owner.emote("me", 1, "drops what [owner.p_they()] [owner.p_were()] holding in [owner.p_their()] [hand_name], [owner.p_their()] [display_name] unresponsive!") + else if(is_broken() && prob(15)) + if(owner.dropItemToGround(c_hand)) + var/emote_scream = owner.species?.species_flags & NO_PAIN ? "" : pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ") + owner.emote("me", 1, "[emote_scream]drops what [owner.p_they()] [owner.p_were()] holding in [owner.p_their()] [hand_name]!") + else if(is_malfunctioning() && prob(20)) + if(owner.dropItemToGround(c_hand)) + owner.emote("me", 1, "drops what [owner.p_they()] [owner.p_were()] holding, [owner.p_their()] [hand_name] malfunctioning!") new /datum/effect_system/spark_spread(owner, owner, 5, 0, TRUE, 1 SECONDS) ///applies a splint stack to this limb. should probably be more generic but #notit diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index ea5469ecdb3ca..f78e8d1432b31 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -42,7 +42,7 @@ return var/mob/living/carbon/human/human = carbon_mob var/datum/limb/limb = human.get_limb(parent_limb) - LAZYDISTINCTADD(limb.internal_organs, src) + LAZYOR(limb.internal_organs, src) ///Signal handler to prevent hard del /datum/internal_organ/proc/clean_owner() @@ -50,7 +50,7 @@ owner = null /datum/internal_organ/proc/take_damage(amount, silent= FALSE) - if(SSticker.mode?.flags_round_type & MODE_NO_PERMANENT_WOUNDS) + if(SSticker.mode?.round_type_flags & MODE_NO_PERMANENT_WOUNDS) return if(amount <= 0) heal_organ_damage(-amount) diff --git a/code/modules/organs/wound.dm b/code/modules/organs/wound.dm index 1b2c9a05c2786..50d6b60e91876 100644 --- a/code/modules/organs/wound.dm +++ b/code/modules/organs/wound.dm @@ -73,7 +73,7 @@ parent_limb.createwound(CUT, 0.1) if(!quickclot || !thwei) //Quickclot/thwei stops bleeding, magic! - parent_limb.owner.blood_volume = max(0, parent_limb.owner.blood_volume - damage/30) + parent_limb.owner.set_blood_volume(parent_limb.owner.blood_volume - damage/30) if(prob(1)) parent_limb.owner.custom_pain("You feel a stabbing pain in your [parent_limb.display_name]!", 1) diff --git a/code/modules/paperwork/beginner_tutorials.dm b/code/modules/paperwork/beginner_tutorials.dm new file mode 100644 index 0000000000000..61235612899a2 --- /dev/null +++ b/code/modules/paperwork/beginner_tutorials.dm @@ -0,0 +1,747 @@ +//Each beginner loadout in quick_load_beginners.dm has a instruction pamphlet. + +/obj/item/paper/tutorial/beginner_rifleman + name = "Rifleman Tutorial" + info = {"As a rifleman, you are suited for virtually all theatres of combat.\ + Your AR-12 assault rifle is accurate and effective at all ranges, and its powerful underbarrel grenade launcher poses even further danger to mid-range threats.\ + Inside your backpack is a box of flares to refill your flare pouch, gauze and ointment for brute (slashes) and burn (acid) wounds respectively,\ + and backup magazines for your AR 12.\ + Your belt contains backup magazines for your AR-12, while your body armor contains additional grenades to reload your underbarrel grenade launcher.\ + Your left pocket contains a flare gun holster and several flares.\ + Your right pocket contains a first aid kit, with Bicaridine (heals brute damage), Kelotane (heals burn damage), Tramadol (a painkiller),\ + Tricordrazine (heals all damage, but slowly), and Dylovene (heals toxin damage), as well as splints and inaprovaline.\ + Your helmet contains two protein bars, in case you get hungry, and your boots contain a standard-issue combat knife for clearing weeds or breaking things.
    +
    + Try to spend as much time as possible near other marines - being alone is very dangerous.\ + Your versatility is an immense strength and makes you the ideal battle buddy for virtually any other marine.\ + You can easily work with a shotgunner to clear close quarters areas, or perhaps with a machine gunner to hold a fortified position, or even take point in front of a marksman.\ + When not in immediate danger, use your flare gun to keep your surroundings lit, as your and your fellow marines' lives may very well depend on it.
    +
    + TIPS
    +
    + BKTT is an acronym used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation\ + that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system,\ + and too many at once risks a dangerous overdose.\ + Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment\ + as long as you hold still. You can remove pills from their packets directly by right-clicking on the packet, even while it's in storage.
    +
    + While holding your AR-12, use Z to wield your weapon with both hands, increasing accuracy and stability and reducing recoil.\ + In the top left of your screen are several weapon-specific buttons. The "Take Aim" button toggles aim mode, a feature that slows your rate of fire\ + in exchange for allowing you to shoot through allied marines. (Note that your grenades will NOT go through marines!)\ + The second option changes the firing mode, between Single Automatic, Burst, and Burst Automatic.\ + Automatic modes will keep firing as long as you hold down the mouse button.\ + The third option enables your underbarrel grenade launcher. Once enabled, you can use right-click to launch a grenade out!
    +
    + On running out of ammo, the empty magazine will automatically eject from the rifle.\ + To reload, simply grab a new magazine with an empty hand and click your gun with it.\ + Alternatively, you can perform a tactical reload by click-dragging the magazine from its storage directly onto the rifle,\ + which can be done without an empty hand and with a different magazine still in the gun.\ + You can reload the underbarrel launcher by right-clicking on the gun while holding a valid grenade (like the HEDP grenades in your webbing).
    +
    + Your flare gun can be rapidly reloaded by just right-clicking the flare pouch with it in hand.\ + Your flare pouch can be refilled by left-clicking on it while holding a flare box. + Flare any dark area you can see to reduce the risk of a xenomorph ambushing you.\ + On a similar note, your suit's light can be toggled in the top left - you should almost always keep this on to help your visibility.
    +
    + Your P23 has a pistol lace attached.\ + By toggling it in the top left while wielding it, it becomes impossible for you to drop - or for it to be knocked out of your hand by a xenomorph.\ + Similarly, your AR-12 has a magnetic harness, which means if you drop it or otherwise lose it, it'll automatically snap back to your armor.
    +
    + Because your AR-12 can effectively engage at all ranges, your optimal range is whatever your opponent's optimal range isn't.\ + Try keeping the distance from ferocious melee enemies, while getting too close for comfort with squishier ranged ones."} + +/obj/item/paper/tutorial/beginner_machinegunner + name = "Machinegunner Tutorial" + info = {"As a machinegunner, you are the backbone of a marine force. While you possess heavy armor reinforced with\ + Tyr-pattern plating (strengthening its defense even further against melee attacks), your slow move speed and the unwieldy nature of your MG-60 machinegun\ + means you should not be spearheading any pushes. Aim mode is your best friend - combined with your bipod, you are very apt at sitting just behind the front line,\ + eliminating threats and keeping the marines in front of you safe.\ + Your backpack contains several additional box magazines, allowing you to carry almost two THOUSAND rounds on your person at any time.\ + Your left pouch contains a first aid kit, complete with Bicaridine (heals brute damage), Kelotane (heals burn damage), Tramadol (a painkiller),\ + Tricordrazine (heals all damage, but slowly), and Dylovene (heals toxin damage), as well as splints and inaprovaline.\ + Your right pocket contains a flare gun holster and several flares. Your suit storage contains two plasma pistols, which are low in damage but can start fires.\ + Your webbing contains an MRE to eat and both gauze and ointment, your helmet contains two protein bars for further eating,\ + and your boots contain a standard-issue combat knife for clearing weeds or breaking things.
    +
    + Your full strength is hard to utilize on your own or in the very front of battle.\ + Your ideal positions are either safely behind a barricade guarding a front or flank from assault,\ + or behind your fellow marines, shooting over them with aim mode to protect them from enemies.\ + Keep in mind that your heavy armor and weapon means you move rather slowly - so if you get the order to leave a position, get moving early to avoid being left behind.
    +
    + TIPS
    +
    + BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix\ + for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system,\ + and too many at once risks a dangerous overdose.\ + Your gauze and ointment are body-part specific, unlike medication, but once you start applying one,\ + you will keep applying it to all body parts that require treatment as long as you hold still.\ + Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb.\ + Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine\ + that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state.\ + You can remove pills from their packets directly by right-clicking on the packet, even while it's in storage.
    +
    + While holding your MG-60, use Z to wield your weapon with both hands, increasing accuracy and stability and reducing recoil.\ + In the top left of your screen are several weapon-specific buttons. The "Take Aim" button toggles aim mode, a feature that slows your rate of fire\ + in exchange for allowing you to shoot through allied marines. The bipod button will deploy your bipod, increasing fire rate and accuracy significantly\ + for as long as you remain stationary.
    +
    + On running out of ammo, the empty magazine will automatically eject from the machine gun.\ + To reload, simply grab a new magazine with an empty hand and click your gun with it.\ + Alternatively, you can perform a tactical reload by click-dragging the magazine from its storage directly onto the machine gun, which can be done without an empty hand\ + and with a different magazine still in the gun.
    +
    + Your flare gun can be rapidly reloaded by just right-clicking the flare pouch with it in hand.\ + Your flare pouch can be refilled by left clicking on it while holding a flare box.\ + Flare any dark area you can see to reduce the risk of a xenomorph ambushing you from the dark.\ + On a similar note, your suit's light can be toggled in the top left - you should almost always keep this on to help your visibility.
    +
    + On your belt is a belt harness. By left clicking on your belt harness with your machine gun, you can attach them.\ + If you drop your machine gun, or have a xenomorph make you drop it, your machine gun will automatically return to your armor if it's attached.
    +
    + If you are facehugged, quickly take out your plasma pistol and shoot the ground with it, then walk into the fire.\ + While this will cause you to be set on fire, facehuggers will detach in the presence of fire, preventing you from becoming infected.\ + You can press B (or click resist in the bottom right) once the facehugger has detached to stop, drop, and roll, extinguishing the fire.
    +
    + Your impressive magazine size means you don't need to reload often.\ + You can suppress one spot for an impressive amount of time, and you have the ammo and damage to clear out resin walls.
    +
    + The more bullets you shoot, the better a marine you are. It's actually that simple."} + +/obj/item/paper/tutorial/beginner_marksman + name = "Marksman Tutorial" + info = {"As a marksman, you are a master of precision and range, and should utilize both of these advantages as much as possible.\ + Your DMR-37 is incredibly accurate at long ranges and packs a devastating punch. Due to your ability to engage at long range - and conversely,\ + your inability to engage properly at short range - you should be staying as far from conflict as possible while still remaining in your rifle's effective range.\ + Your backpack and both of your pouches contain spare magazines for your DMR. Your backpack also contains an MRE to eat, and both gauze and ointment for treating injuries.\ + Your armor contains Bicaridine (heals brute damage), Kelotane (heals burn damage), Tramadol (a painkiller),\ + Tricordrazine (heals all damage, but slowly), and an inaprovaline injector for helping other marines in critical condition.\ + Your webbing contains the MK88 Mod 4, a fully automatic handgun for self-defense, as well as spare magazines for it.\ + Your helmet contains protein bars to eat, and your boots contain a survival knife for clearing weeds and breaking things.
    +
    + With your DMR, aim to support other marines from afar using your scope and aim mode.\ + Your range means that many xenomorphs might not realize you're watching over an area until you're already shooting at them - use this to your advantage.\ + Your rate of fire is relatively slow compared to automatic weapons, so make each of your shots count.
    +
    + TIPS
    +
    + BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix\ + for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process\ + through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start\ + applying one, you will keep applying it to all body parts that require treatment as long as you hold still.\ + Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious\ + on the ground (referred to as "critical condition") to rescue them from that state.\ + You can remove pills from their packets directly by right-clicking on the packet, even while it's in storage.
    +
    + On running out of ammo, the empty magazine will automatically eject from the DMR.\ + To reload, simply grab a new magazine with an empty hand and click your gun with it.\ + Alternatively, you can perform a tactical reload by click-dragging the magazine from its storage directly onto the DMR,\ + which can be done without an empty hand and with a different magazine still in the gun.
    +
    + While holding your DMR-37, use Z to wield your weapon with both hands, increasing accuracy and stability and reducing recoil.\ + In the top left of your screen are several weapon-specific buttons.\ + The "Take Aim" button toggles aim mode, a feature that slows your rate of fire in exchange for allowing you to shoot through allied marines.\ + The scope button will zoom your screen out and towards the direction you're currently facing, allowing you to see (and shoot at) targets much farther away.
    +
    + On your belt is a belt harness. By left clicking on your belt harness with your DMR, you can attach them. If you drop your DMR,\ + or have a xenomorph make you drop it, your DMR will automatically return to your armor if it's attached.
    +
    + Try holding your fire until your target is already engaging someone else. While this may seem counter-intuitive,\ + it allows you to wait until they've already committed to a fight (that's likely to damage them) and may cause them to not notice your presence until it's too late,\ + increasing the odds of securing a kill.
    +
    + Do not attempt to use your DMR at too close of a range, as marksman weapons have a chance to miss against enemies that are near you.\ + Instead, try switching to your MK88 Mod 4, your fully automatic handgun that's much more effective at close range.\ + Use your strengths in overwatching the battlefield to assist in securing valuable kills. "} + +/obj/item/paper/tutorial/beginner_shotgunner + name = "Shotgunner Tutorial" + info = {"As a shotgunner, you are the spearhead of the marine force.\ + Your semiautomatic SH-39 fires slugs that will devastate any target at short to medium range, dealing heavy damage as well as leaving them stunned and staggered.\ + Your role is to be at the front of any marine push, side by side with your fellow marines as you charge into danger. Your shotgun shell rig on your belt,\ + as well as your backpack, hold many additional slugs to reload your shotgun with.\ + Your backpack also contains an MRE to eat, and both gauze and ointment for treating injuries, as well as inaprovaline.\ + Your left pouch contains a first aid kit, complete with Bicaridine (heals brute damage), Kelotane (heals burn damage),\ + Tramadol (which is a painkiller), Tricordrazine (heals all damage, but slowly), and Dylovene (heals toxin damage),\ + as well as splints and inaprovaline. Your right pocket contains a flare gun holster and several flares.\ + Your webbing contains a plasma pistol, a low damage sidearm that starts fires wherever it hits.\ + Your suit storage contains boxes of additional flares. Your helmet contains protein bars to eat, and your boot contains a combat knife for clearing weeds and breaking things.
    +
    + You should be close to the enemy constantly to take full advantage of your shotgun.\ + This does not mean you should run off alone, as this is a good way to get yourself killed;\ + rather, be in front of other marines, clearing away enemies to allow them to safely advance and cover you.
    +
    + TIPS
    +
    + BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix\ + for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process\ + through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start\ + applying one, you will keep applying it to all body parts that require treatment as long as you hold still.\ + Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb.\ + Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious\ + on the ground (referred to as "critical condition") to rescue them from that state.\ + You can remove pills from their packets directly by right-clicking on the packet, even while it's in storage.
    +
    + While holding your SH-39, use Z to wield your weapon with both hands, increasing accuracy and stability and reducing recoil.
    +
    + Your flare gun can be rapidly reloaded by just right-clicking the flare pouch with it in hand.\ + Your flare pouch can be refilled by left clicking on it while holding a flare box.\ + Flare any dark area you can see to reduce the risk of a xenomorph ambushing you.\ + On a similar note, your suit's light can be toggled in the top left - you should almost always keep this on to help your visibility.
    +
    + If you are facehugged, quickly take out your plasma pistol and shoot the ground with it, then walk into the fire.\ + While this will cause you to be set on fire, facehuggers will detach in the presence of fire, preventing you from becoming infected.\ + You can press B (or click resist in the bottom right) once the facehugger has detached to stop, drop, and roll, extinguishing the fire.
    +
    + To reload your shotgun, take out a handful of shells with a free hand and click your gun with them while it's in your other hand.
    +
    + Shotguns can take a variety of rounds, in case slugs aren't your style. Buckshot rounds have more stopping power but fall off at mid range,\ + while flechette rounds are less generally effective in exchange for drastically improved performance against heavily armored targets.\ + The requisitions-exclusive incendiary slugs aren't quite as powerful as standard slugs but set anything they hit on fire!
    +
    + The green M50 signal flares in your body armor don't last as long as normal flares but deploying them signals to CAS (close air support)\ + that you're requesting an airstrike in the region, also granting them the ability to see and shoot at xenomorphs in the area.
    +
    + Using the powerful knockback of your shotgun to knock xenomorphs TOWARDS other marines is a good way to get kills\ + - most xenomorphs can't deal with that many marines at once!
    +
    + Shotguns don't have access to aimmode, so be careful near other marines so you don't risk shooting them.
    +
    + You have incredibly high per-shot damage. Waiting a little bit to allow a xenomorph to get closer before opening fire can lure it\ + into a false sense of safety, potentially scoring you a kill."} + +/obj/item/paper/tutorial/beginner_shocktrooper + name = "Shocktrooper Tutorial" + info = {"As a shock trooper, you are a versatile yet powerful frontliner, and aim to change up tactics often to gain the advantage.\ + You use the multimodal laser rifle, an experimental battery-powered weapon with an underbarrel flamethrower.\ + Your belt contains spare energy cells for your laser rifle. Your right pocket and body armor contain a powerpack to recharge energy cells.\ + Your body armor also contains a box of flares. Your left pocket contains a flare gun holster and several flares.\ + Your backpack contains a large amount of miniature fuel tanks for use with your underbarrel flamethrower, as well as an inaprovaline autoinjector.\ + Your webbing contains Bicaridine (heals brute damage), Kelotane (heals burn damage), Tramadol (a painkiller), Tricordrazine (heals all damage, but slowly),\ + and gauze and ointment, which also heal brute and burn damage, respectively. Your helmet contains protein bars and your boots contain an MRE, in case you get hungry.
    +
    + Switching between the different modes of your laser rifle is key to mastery on the battlefield.\ + Like other frontliners, you aim to lead the push into enemy territory, clearing the path forward and facing xenomorphs head-on.
    +
    + TIPS
    +
    + BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix\ + for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process\ + through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start\ + applying one, you will keep applying it to all body parts that require treatment as long as you hold still.\ + Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious\ + on the ground (referred to as "critical condition") to rescue them from that state.\ + You can remove pills from their packets directly by right-clicking on the packet, even while it's in storage.
    +
    + On running out of ammo, the empty battery will automatically eject from the rifle.\ + To reload, simply grab a new battery with an empty hand and click your gun with it.\ + Alternatively, you can perform a tactical reload by click-dragging the battery from its storage directly onto the rifle,\ + which can be done without an empty hand and with a different battery still in the gun.\ + You can click a powercell to your powerpacks to recharge them. They have four times the energy of a normal magazine.\ + To refuel your underbarrel flamethrower, right-click the gun with an empty hand to remove the old tank, then right-click the gun again with a fresh tank.
    +
    + While holding your laser rifle, use Z to wield your weapon with both hands, increasing accuracy and stability and reducing recoil.\ + In the top left of your screen are several weapon-specific buttons.\ + By pressing toggle mini flamethrower, you enable your underbarrel flamethrower, which you can now shoot with right-click.
    +
    + Your flare gun can be rapidly reloaded by just right clicking the flare pouch with it in hand.\ + Your flare pouch can be refilled by left clicking on it while holding a flare box.\ + Flare any dark area you can see to reduce the risk of a xenomorph ambushing you.\ + On a similar note, your suit's light can be toggled in the top left - you should almost always keep this on to help your visibility.
    +
    + By pressing unique action (default: space bar), you can cycle between the different modes of your laser gun.\ + Standard mode rapidly fires laser beams, Overcharge mode fires more powerful beams at a lower rate of fire, weakening mode slows the target mildly\ + as well as draining their plasma, and microwave applies a stacking debuff (up to five times) that deals armor-piercing damage over time.\ + Note that different modes consume battery charge at different rates.
    +
    + Laser weapons, unlike traditional ballistics, can fire through windows unimpeded.\ + Use this with stronger windows, such as ballistic glass, to attack the enemy without them being able to attack you back."} + +/obj/item/paper/tutorial/beginner_hazmat + name = "Hazmat Tutorial" + info = {"As a HAZMAT, you excel in situations too dangerous for other marines. Your Mimir type armor grants you complete immunity to toxic gas,\ + from acid to neurotoxin. It also provides an increased resistance against acid in general, for dealing with ranged xenomorphs.\ + Your AR-11 is somewhat unwieldy and inaccurate, but packs both potent bursts and an impressive 70-round magazine.\ + Your backpack, left pouch, and suit storage are all filled with spare magazines for your AR-11.\ + Your right pouch contains a first aid kit, complete with Bicaridine (heals brute damage), Kelotane (heals burn damage), Tramadol (a painkiller),\ + Tricordrazine (heals all damage, but slowly), and Dylovene (heals toxin damage), as well as splints and inaprovaline.\ + Your webbing contains flares for lighting areas, gauze and ointment for treating wounds, and a miniature fire extinguisher.\ + Your helmet contains protein bars and your boots contain an MRE, for if you get hungry.
    +
    + Unlike other marines, you have no reason to fear toxic gas - and thanks to your tactical sensor, you pose quite a threat to xenomorphs while in it.\ + Hide in smoke and use your sensor to fire at xenomorphs that can't see you back.\ + In the absence of smoke, your AR-11 is still quite powerful, and can be used in many situations, though its inaccuracy makes it somewhat less potent at longer ranges.
    +
    + TIPS
    +
    + BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix\ + for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process\ + through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start\ + applying one, you will keep applying it to all body parts that require treatment as long as you hold still.\ + Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb.\ + Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious\ + on the ground (referred to as "critical condition") to rescue them from that state.\ + You can remove pills from their packets directly by right-clicking on the packet, even while it's in storage.
    +
    + While holding your AR-11, use Z to wield your weapon with both hands, increasing accuracy and stability and reducing recoil.\ + In the top left of your screen are several weapon-specific buttons.\ + The "Take Aim" button toggles aim mode, a feature that slows your rate of fire in exchange for allowing you to shoot through allied marines.\ + The second option changes the firing mode, between Single Automatic, Burst, and Burst Automatic. Automatic modes will keep firing as long as you hold down the mouse button.\ + The tactical sensor option toggles your tactical sensor - you should keep this on always.
    +
    + Your tactical sensor will periodically blip, detecting moving targets in an area a little bigger than your screen.\ + Green circles are friendly targets (or anyone wearing a marine ID), while red circles accompanied with an audible blip are unknown (almost always hostile) targets.\ + This sensor works even without vision, such as through any form of smoke and through walls.
    +
    + On running out of ammo, the empty magazine will automatically eject from the rifle.\ + To reload, simply grab a new magazine with an empty hand and click your gun with it.\ + Alternatively, you can perform a tactical reload by click-dragging the magazine from its storage directly onto the rifle, which can be done without an empty hand\ + and with a different magazine still in the gun.
    +
    + Your suit's light can be toggled in the top left - you should almost always keep this on to help your visibility.\ + However, note that xenomorphs will often determine a marine's position in a smoke cloud by their light, so you should turn OFF your light if hiding in smoke!
    +
    + On your belt is a belt harness. By left-clicking on your belt harness with your AR-11, you can attach them.\ + If you drop your AR, or have a xenomorph make you drop it, your AR will automatically return to your armor if it's attached.
    +
    + While you're no machinegunner, you have over 700 rounds on you. Don't be afraid to shoot at anything that blips on your tactical sensor\ + (as long as there aren't friendlies in the way!)"} + +/obj/item/paper/tutorial/beginner_cqc + name = "CQC Tutorial" + info = {"As a CQC marine, you are incredibly mobile, and should be using and abusing your speed to dart in and out of danger.\ + You are effective both spearheading the assault and pushing into flanks.\ + Your AR-18 carbine isn't the most dangerous rifle, nor does it have a particularly high magazine size, but it's incredibly lightweight\ + compared to almost any other weapon, and its relative accuracy and stability even while moving and high fire rate allow it to pose\ + a surprise threat to almost any xenomorphs. Your belt, body armor, and backpack all contain spare magazines for your AR-18.\ + Your backpack also contains an MRE (in case you get hungry) as well as gauze and ointment to treat injuries with.\ + Your left pocket contains a flare gun and several flares.\ + Your right pouch contains a first aid kit, complete with Bicaridine (heals brute damage), Kelotane (heals burn damage), Tramadol (a painkiller),\ + Tricordrazine (heals all damage, but slowly), and Dylovene (heals toxin damage), as well as splints and inaprovaline.\ + Your webbing contains gauze and ointment for healing, an MRE for eating, and two boxes of flares.\ + Your helmet contains protein bars for eating, and your boots contain a combat knife for clearing weeds and breaking things.
    +
    + Your speed is your greatest strength. You should be using it to rush into combat and chase after already injured enemies,\ + only to rapidly retreat before things turn south. You're ideal at scouting locations, quickly reinforcing threatened positions, and being everywhere at once.
    +
    + TIPS
    +
    + BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix\ + for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process\ + through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start\ + applying one, you will keep applying it to all body parts that require treatment as long as you hold still.\ + Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb.\ + Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious\ + on the ground (referred to as "critical condition") to rescue them from that state.\ + You can remove pills from their packets directly by right-clicking on the packet, even while it's in storage.
    +
    + While holding your AR-18, use Z to wield your weapon with both hands, increasing accuracy and stability and reducing recoil.\ + In the top left of your screen are several weapon-specific buttons.\ + The "Take Aim" button toggles aim mode, a feature that slows your rate of fire in exchange for allowing you to shoot through allied marines.\ + The second option changes the firing mode, between Single Automatic, Burst, and Burst Automatic.\ + Automatic modes will keep firing as long as you hold down the mouse button. The tactical sensor option toggles your tactical sensor - you should keep this on always.
    +
    + On running out of ammo, the empty magazine will automatically eject from the rifle.\ + To reload, simply grab a new magazine with an empty hand and click your gun with it.\ + Alternatively, you can perform a tactical reload by click-dragging the magazine from its storage directly onto the rifle, which can be done without\ + an empty hand and with a different magazine still in the gun.
    +
    + Your flare gun can be rapidly reloaded by just right-clicking the flare pouch with it in hand.\ + Your flare pouch can be refilled by left clicking on it while holding a flare box.\ + Flare any dark area you can see to reduce the risk of a xenomorph ambushing you.\ + On a similar note, your suit's light can be toggled in the top left - you should almost always keep this on to help your visibility.
    +
    + Don't be afraid to charge headfirst into danger if you think you can save a teammate or get a kill - you have the speed to get back out, after all.\ + The ALT key by default allows humans or clones to sprint at the cost of stamina, to go even faster!
    +
    + While your rifle runs out of ammo quickly, its rapid-fire four-round bursts deal impressive damage. Combined with your speed, you are the master of ambushing."} + +/obj/item/paper/tutorial/beginner_chad + name = "Grenadier Tutorial" + info = {"As a grenadier, you are the master of area denial. Your six-chamber GL-70 grenade launcher boasts unparalleled room-clearing potential,\ + and impressive lethality - just take care to avoid harming your fellow marines.\ + Your belt, backpack, both pockets, and body armor are all filled with HEDP grenades to reload your grenade launcher with.\ + Your webbing contains Bicaridine (heals brute damage), Kelotane (heals burn damage), Tramadol (a painkiller), Tricordrazine (heals all damage, but slowly),\ + and gauze and ointment, which also heal brute and burn damage respectively. Your backpack also contains an inaprovaline injector.\ + Your helmet contains two protein bars, in case you get hungry, and your boots contain a derringer, a two-shot sidearm for when the first six grenades didn't kill the bug.
    +
    + Your power is as much of a liability as it is a utility if you aren't careful.\ + Before you get happy on the trigger, make SURE there aren't going to be marines in the blast radius, unless you want to end up filled with bullet holes\ + (which your Hod accident prevention plating will partially block!) With that warning out of the way, you can kill even the beefiest of xenomorphs with good aim.
    +
    + TIPS
    +
    + BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix\ + for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process\ + through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start\ + applying one, you will keep applying it to all body parts that require treatment as long as you hold still.\ + Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious\ + on the ground (referred to as "critical condition") to rescue them from that state.\ + You can remove pills from their packets directly by right-clicking on the packet, even while it's in storage.
    +
    + While holding your grenade launcher, press Z to wield it. You MUST wield your grenade launcher to use it!
    +
    + To reload your grenade launcher, grab a grenade from one of your storages and left-click the grenade launcher with it while it's in your other hand.
    +
    + Hlin-pattern armor plating, orderable from requisitions, makes you practically immune to explosives. Get trigger happy!\ + (Don't get TOO trigger happy, though - your fellow marines are NOT immune.)
    +
    + Your suit's light can be toggled in the top left - you should almost always keep this on to help your visibility. +
    + As a grenadier, you hold the power to clear rooms and control territory like no other. Victory is just a well-placed grenade away."} + +/obj/item/paper/tutorial/builder + name = "Builder Tutorial" + info = {"The Builder loadout is designed around you establishing defenses, barricades made from metal, plasteel or sandbags.\ + You are the frontline - without you marines will be exposed to attacks from any and all directions.\ + Your backpack contains some materials, a box of flares, and extra drums for your gun, as well as gauze and ointment to treat injuries with. + Your left pocket contains a tool pouch for all the tools you'll need to perform your engineering duties.\ + Your right pouch contains a first aid kit, complete with Bicaridine (heals brute damage), Kelotane (heals burn damage), Tramadol (a painkiller),\ + Tricordrazine (heals all damage, but slowly), and Dylovene (heals toxin damage), as well as splints and inaprovaline.\ + Your helmet contains protein bars for eating, and your boots contain an MRE for further eating.\ + The optical mesons on your eyewear slot give you the ability to see the shape of rooms behind solid walls, though you can't see anything (including xenomorphs!)\ + behind those walls.\ + Use your quicker build speed and tools to aid and repair barricades, and fix APCs for generating the nuclear disks to win the round!\ + Your suit storage contains materials, and your loadout also containsa MG42 Light machine gun for self defense and suppression,\ + and a radiopack for ordering more material to entrench and establish a fortified defensive position.
    +
    + TIPS
    +
    + In your webbing you will find a spare powercell and a handheld cell crank charger to charge them, when fixing apcs swap the empty battery for\ + your full one. Insert the empty one into your crank, press Z to start charging, and charge it for the next disk!
    +
    + When building defensive barricades it is best to not make them "flush" with nearby doors or walls.\ + Instead pull back 1 tile and build it there; this prevents xenos from hiding around the corner behind the walls and smacking your cades freely without repercussion.
    +
    + All metal barricades can be upgraded, the basic upgrade is barbed wire.\ + This damages xenos when they attack the barricade and prevents them (and marines!) from climbing over the barricade.\ + Press Z with metal sheets in your hand to open up a radial menu where you can select to build barbed wire.\ + You can also build razorwire, which you can deploy to the tile in front of you by using it in-hand. Razorwire can trap charging xenomorphs momentarily to\ + allow marines to shoot them.\ + You can click a barricade with a piece of metal to open a radial menu to upgrade it. Cades have to be at full health to upgrade, so you might need to click them with + a welder first to fix any damages.\ + Caustic armor increases the cade's resistance to acid spit and prevents it from being melted.\ + Concussive armor increases the cade's resistance to explosions and Warlock's gravity crush ability.\ + Ballistic armor increases the cade's resistance to projectile and melee damage and xenomorph charges.\
    +
    + BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol\ + used as an all-rounder combat medicine mix for any situation that heals all different types of damage.\ + Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, + and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start\ + applying one, you will keep applying it to all body parts that require treatment as long as you hold still.\ + Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb.\ + Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious\ + on the ground (referred to as "critical condition") to rescue them from that state.\ + You can remove pills from their packets directly by right-clicking on the packet, even while it's in storage.
    +
    + Through your building expertise, marines can hold various critical locations, ensuring steady progress towards mission completion."} + +/obj/item/paper/tutorial/flamer + name = "Flamer Tutorial" + info = {"As a Flamethrower specialist, your job is to burn, burn some more and BURN again.\ + You are equipped with a flamethrower bag that refills your flamethrower every time you insert it back into the bag,\ + and also have a laser carbine for more practical and pragmatic self-defense. Also comes with a large box of claymore anti-personnel mines,\ + and some general materials for helping fortify positions in the suit storage.
    + Your backpack contains some materials, a box of flares, and extra drums for your gun, as well as gauze and ointment to treat injuries with. + Your left pocket contains a tool pouch for all the tools you'll need to perform your engineering duties.\ + Your right pouch contains a first aid kit, complete with Bicaridine (heals brute damage), Kelotane (heals burn damage), Tramadol (a painkiller),\ + Tricordrazine (heals all damage, but slowly), and Dylovene (heals toxin damage), as well as splints and inaprovaline.\ + Your helmet contains protein bars for eating, and your boots contain an MRE for further eating.\ + The optical mesons on your eyewear slot give you the ability to see the shape of rooms behind solid walls, though you can't see anything (including xenomorphs!)\ + behind those walls.\ + Removing resin walls will help open up the battlefield for your fellow marines, ensuring greater vision and mobility, and, hopefully, a greater number of successful\ + fights against xenomorphs.\ +
    + TIPS
    +
    + Your flamethrower is best used to clear resin walls, it is a poor weapon for self defense and is best used to help carve a path through\ + enemy mazes and to deny areas of movement without punishing xenos for trekking through the flames.
    +
    + Red resin walls are fire-resistant and require you to engage them in close quarters with a melee weapon to detroy them - the bayonet on your laser carbine is good for this,\ + just be careful about any xenomorphs lurking in the mazes!
    +
    + Requisitions offers many useful upgrades to your kit. You can request a SURT pyrotechnic module for your armor that will make you unable to be set on fire.\ + You can also request X Fuel, a fuel for flamethrowers that burns hotter for longer and appears blue.\ +
    + Your laser carbine is good for short-range defense. You can toggle the modes of it using unique action (default: space bar).\ + The spread mode deals greater armor penetration and damage but is slow to fire. Impact mode knocks back targets. Cripple mode will slow enemies down.
    +
    + In your webbing you will find a spare powercell and a handheld cell crank charger to charge them, when fixing apcs swap the empty battery for\ + your full one. Insert the empty one into your crank, press Z to start charging, and charge it for the next disk!
    +
    + Your claymore mines are useful for denying an area from being easily flanked and can cause serious disruption for (or even kill)\ + backlining xenomorphs trying to cause you a bad day.
    +
    + BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix\ + for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process\ + through your system, and too many at once risks a dangerous overdose.\ + Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying\ + it to all body parts that require treatment as long as you hold still.\ + Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb.\ + Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious\ + on the ground (referred to as "critical condition") to rescue them from that state.\ + You can remove pills from their packets directly by right-clicking on the packet, even while it's in storage.
    +
    + By removing resin structures with your flamethrower, you ensure area denial and dominance, flushing xenomorphs out and providing favorable battle circumstances for your\ + fellow marines."} + +/obj/item/paper/tutorial/plasmacutter + name = "Plasma Cutter Tutorial" + info = {"Tired of watching marines endlessly pour into a maze or terribly held choke point? This is the class for you then!\ + With your plasma cutter, you will be able to easily delete resin walls from existence, and carve through metal, reinforced, or even solid rock walls!\ + With this kit you'll be able to widen choke points and eradicate mazes with ease.\ + This loadout also comes with a few materials for defenses in your suit storage, and a MP19 SMG for self-defense in your technician welderpack.\ + Your left pocket contains a tool pouch for all the tools you'll need to perform your engineering duties.\ + Your right pouch contains a first aid kit, complete with Bicaridine (heals brute damage), Kelotane (heals burn damage), Tramadol (a painkiller),\ + Tricordrazine (heals all damage, but slowly), and Dylovene (heals toxin damage), as well as splints and inaprovaline.\ + Your helmet contains protein bars for eating, and your boots contain an MRE for further eating.\ + The optical mesons on your eyewear slot give you the ability to see the shape of rooms behind solid walls, though you can't see anything (including xenomorphs!)\ + behind those walls.\ + Removing chokes and flanks will help your team to take better angles and more successfully push objectives.\
    +
    + TIPS
    +
    + Your Plasma Cutter (often abbreviated to PC) is a very versatile tool but it contains a limited charge of 7500;\ + for resin walls the charge is rather miniscule at 100 Charge but a much heavier or thicker metallic or rock wall will cost you 1000 Charge,\ + so make sure to keep track of how much charge your battery contains!\ + Do remember to keep your welding module or goggles on when using it, however, as the Plasma Cutter will damage your eyes!
    +
    + In your webbing you will find a spare powercell and a handheld cell crank charger to charge them, when fixing apcs swap the empty battery for\ + your full one. Insert the empty one into your crank, press Z to start charging, and charge it for the next disk!
    +
    + Your Plasma Cutter can be used as a melee weapon in emergency situations, while not the best by any means it can work in a pinch\ + and if you manage to smack a xenomorph you'll get rewarded with draining them of a small amount of plasma and earning a bit of charge for your Plasma Cutter.\ + Use this to destroy mazes and punish xenomorphss for trying to attack you by refilling your battery.
    +
    + BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix\ + for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process\ + through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start\ + applying one, you will keep applying it to all body parts that require treatment as long as you hold still.\ + Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb.\ + Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious\ + on the ground (referred to as "critical condition") to rescue them from that state.\ + You can remove pills from their packets directly by right-clicking on the packet, even while it's in storage.
    +
    + Your ability to treat terrain as a sandbox has infinite potential for assisting your allies."} + +/obj/item/paper/tutorial/lifesaver + name = "Lifesaver Tutorial" + info = {"As the lifesaver, you are a MEDIC first and foremost. You should be prioritizing healing marines over trying to fight xenomorphs yourself.\ + Your belt contains many pill bottles - examine them to find out what they do with shift+click, and draw from them with right-click.\ + Your belt also contains splints, which are used on fractured bones, and a medical analyzer, which will tell you exactly what's wrong with a person.\ + Avoid giving someone more than one pill of a given medicine at a time; many pills overdose at three, and some at two, and some marines might go and take a pill themselves,\ + so one is safest. In your armor storage are an assortment of autoinjectors. Combat injectors should be used on marines in active danger, Quick Clot Plus helps deal\ + with internal bleeding, Peridaxon Plus heals organs, and Dexalin Plus helps with deoxygenation.\ + Your right pouch contains three stacks of trauma and burn kits, which will cause a body part they're applied to to heal brute or burn damage over time respectively.\ + It also contains a hypospray full of MeraDerm, a medicine mixture that heals both brute and burn damage quickly.\ + Your webbing contains Oxycodone, a painkiller; Nanoblood, a blood replacement; a stasis bag to hold patients you aren't actively treating in to prevent their\ + condition from worsening; tweezers to remove shrapnel; a roller bed to roll around patients with; and a medivac to evacuate patients.\ + Your boots and helmet contain food.
    +
    + Stay away from the frontlines - let patients come to (or be dragged to) you instead of putting yourself in danger.\ + Try to remain in a safe location, as xenomorphs do not obey the Geneva Convention and will in fact deliberately target you and your patients as often as possible.
    +
    + TIPS
    +
    + Your gloves are defibrillators. By clicking on any dead target with their exosuit removed (drag their sprite onto your sprite to remove it)\ + you will attempt to bring them back to life, healing them somewhat and then resuscitating them if they're healed enough.\ + Drag your gloves to your backpack to recharge them. This even works on robots!\ + Make sure your intent is help while doing this or you might just punch them right after they revive, taking them out again.
    +
    + While holding your repeater, use Z to wield your weapon with both hands, increasing accuracy and stability and reducing recoil.\ + In the top left of your screen are several weapon-specific buttons.\ + The "Take Aim" button toggles aim mode, a feature that slows your rate of fire in exchange for allowing you to shoot through allied marines.
    +
    + As your rifle is bolt-action, it needs to be racked after every shot. Do this by pressing your Unique Action key, which defaults to the spacebar.
    +
    + Your backpack contains ammo packets. You can click on your shotgun shell pouch to quickly transfer ammo into the pouch.\ + You can then reload your repeater by clicking it while it's in your hand with the handful of bullets.
    +
    + Before you do ANYTHING to a patient, use your medical analyzer on them. Not analyzing is the number one cause of overdoses.\ + Right-clicking with the analyzer instead shows them their own health scan, useful for getting their attention or informing them that they're fully healed.
    +
    + When you dispense your equipment, a medivac beacon will appear on the floor.\ + Pick this up, take your medivac and click it on the beacon so it says linked!\ + Once done, you should go to your ship's medical bay and place the beacon by pressing Z with it in hand.\ + Once groundside, you can now medivac people for treatment shipside.\ + Shipside can fix bone fractures, clone damage, facehugging, and anything else you can't.\ + To evac someone, deploy your medivac by pressing Z with it in hand, drag them onto it to buckle them to it, then right click to send them up.\ + Drag the medivac to you to pick it back up once you're done.
    +
    + Marines will "go cold" after five minutes of being dead, rendering them permanently unrevivable.\ + This timer can be extended via your stasis bag or with CPR, which other marines can perform while you work by left-clicking the corpse on help intent\ + while neither of them are wearing a mask.
    +
    + Accidentally overdose a marine? They're full of deadly neurotoxin? Don't panic - use Hypervene.\ + While uncomfortable for the marine, this medication (located in your medical belt) will rapidly purge their system.
    +
    + You can use Meralyne and Dermaline at the same time as Bicaridine and kelotane, for an accelerated healing rate. Keep the Corps well and the rest will follow."} + +/obj/item/paper/tutorial/hypobelt + name = "Hypobelt Tutorial" + info = {"As the hypobelt medic, you are the master of rapid healing.\ + Your belt is full of hyposprays which instantly apply a dose of medicine when you click a marine with them.\ + Examine them with shift+click to read their labels to find out what they do.\ + Avoid injecting someone more than once or twice with the same medicine to prevent an overdose!\ + Your pouch contains three stacks of trauma and burn kits, which will cause a body part they're applied to to heal brute or burn damage over time respectively.\ + It also contains a hypospray full of MeraDerm, a medicine mixture that heals both brute and burn damage quickly.\ + These hyposprays can be refilled by the bottles in the syringe cases of your belt.\ + Your webbing is filled with splints for treating fractures.\ + Your body armor contains Oxycodone, a painkiller; a stasis bag to hold patients you aren't actively treating in to prevent their condition from worsening;\ + tweezers to remove shrapnel; a roller bed to roll around patients with; and a medivac to evacuate patients.\ + Your boots and helmet contain food.
    +
    + Your light armor and quick injectors make you adept at rapidly getting marines back into the action.\ + However, take care to avoid danger; xenomorphs WILL target you, and you will go down fast without proper protection.
    +
    + TIPS
    +
    + Your gloves are medical analyzers, which you can use on a patient by left clicking them.\ + Before you do ANYTHING to a patient, use your medical analyzer on them.\ + Not analyzing is the number one cause of overdoses.\ + Right-click with the analyzer instead shows them their own health scan, useful for getting their attention or informing them that they're fully healed.
    +
    + In your backpack is a defibrillator. By holding it and clicking on any dead target with their exosuit removed (drag their sprite onto your sprite to remove it)\ + you will attempt to bring them back to life, healing them somewhat and then resuscitating them if they're healed enough.\ + Drag your defib to your backpack to recharge them. This even works on robots!
    +
    + When you dispense your equipment, a medivac beacon will appear on the floor.\ + Pick this up, take your medivac and click it on the beacon so it says linked!\ + Once done, you should go to your ship's medical bay and place the beacon by pressing Z with it in hand.\ + Once groundside, you can now medivac people for treatment shipside. Shipside can fix bone fractures, clone damage, facehugging, and anything else you can't.\ + To evac someone, deploy your medivac by pressing Z with it in hand, drag them onto it to buckle them to it, then right-click to send them up.\ + Drag the medivac to you to pick it back up once you're done.
    +
    + Marines will "go cold" after five minutes of being dead, rendering them permanently unrevivable.\ + This timer can be extended via your stasis bag or with CPR, which other marines can perform while you work by left-clicking the corpse\ + on help intent while neither of them are wearing a mask.
    +
    + Accidentally overdose a marine? They're full of deadly neurotoxin? Don't panic - use Hypervene.\ + While uncomfortable for the marine, this medication (located in your medical belt) will rapidly purge their system.
    +
    + You can use Meralyne and Dermaline at the same time as Bicaridine and kelotane, for an accelerated healing rate.
    +
    + As your shotgun is pump-action, you'll need to pump it after every shot by pressing Unique Action (default space bar).
    +
    + You can reload your shotgun by grabbing a handful of slugs from your backpack and clicking your shotgun with them.
    +
    + Remember your primary goal is to keep the force healthy and allow them to continue with progressing the operation."} + +/obj/item/paper/tutorial/smartmachinegunner + name = "Smartmachinegunner Tutorial" + info = {"As the smartmachinegunner, you are the very backbone of your squad, and should be behind another marine or three at all times.\ + Your SG-29 is capable of firing directly through your teammates without risk of harm, so staying safe and behind your allies is essential\ + to gaining full value out of it. Your backpack and body armor contain both fire extinguisher and spare ammo, with your backpack also containing\ + a plasma pistol to start fires with, inaprovaline, and a cloak grenade to escape skirmishes. Your left pouch contains a flare gun holster and several flares.\ + Your right pouch contains a first aid kit complete with Bicaridine (heals brute damage), Kelotane (heals burn damage), Tramadol (a painkiller),\ + Tricordrazine (heals all damage, but slowly), and Dylovene (heals toxin damage), as well as splints and inaprovaline.\ + Your webbing contains flares for creating lights and gauze and ointment for treating injuries.\ + Your helmet and boots contain food, in case you get hungry.
    +
    + You should NEVER be at the front of a group of marines.\ + Aim to provide covering fire for those who are in front, and let them protect you in turn by, well, being in front of you.\ + Remember that your SG-29 fires through marines, so you don't need to worry about friendly fire.
    +
    + TIPS
    +
    + BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix\ + for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process\ + through your system, and too many at once risks a dangerous overdose.\ + Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that\ + require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb.\ + Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious\ + on the ground (referred to as "critical condition") to rescue them from that state.\ + You can remove pills from their packets directly by right-clicking on the packet, even while it's in storage.
    +
    + Your flare gun can be rapidly reloaded by just right-clicking the flare pouch with it in hand.\ + Your flare pouch can be refilled by left clicking on it while holding a flare box.\ + Flare any dark area you can see to reduce the risk of a xenomorph ambushing you.\ + On a similar note, your suit's light can be toggled in the top left - you should almost always keep this on to help your visibility.
    +
    + On your belt is a belt harness. By left clicking on your belt harness with your machine gun, you can attach them.\ + If you drop your machine gun, or have a xenomorph make you drop it, your machine gun will automatically return to your armor if it's attached.
    +
    + If you are facehugged, quickly take out your plasma pistol and shoot the ground with it, then walk into the fire.\ + While this will cause you to be set on fire, facehuggers will detach in the presence of fire, preventing you from becoming infected.\ + You can press B (or click resist in the bottom right) once the facehugger has detached to stop, drop, and roll, extinguishing the fire.
    +
    + Your impressive magazine size means you don't need to reload often. You can suppress one spot for an impressive amount of time,\ + and you have the ammo and damage to clear out resin walls.
    +
    + While holding your SG-29, use Z to wield your weapon with both hands, increasing accuracy and stability and reducing recoil.\ + In the top left of your screen are several weapon-specific buttons. The tactical sensor option toggles your tactical sensor - you should keep this on always.
    +
    + Your tactical sensor will periodically blip, detecting moving targets in an area a little bigger than your screen.\ + Green circles are friendly targets (or anyone wearing a marine ID), while red circles accompanied with an audible blip are unknown (almost always hostile) targets.\ + This sensor works even without vision, such as through any form of smoke and through walls.
    +
    + On running out of ammo, the empty magazine will automatically eject from the smartgun. To reload, simply grab a new magazine with an empty hand\ + and click your gun with it. Alternatively, you can perform a tactical reload by click-dragging the magazine from its storage directly onto the rifle,\ + which can be done without an empty hand and with a different magazine still in the gun.
    +
    + STAY BEHIND OTHER MARINES. I cannot stress this enough. You are a priority target for xenomorphs due to your ability to provide covering fire from behind other marines.
    +
    + Your massive drum size of 250 rounds means you don't need to reload often. Because of this, you should avoid reloading in dangerous areas if you can help it,\ + instead waiting until you're back behind fortifications or other marines.
    +
    + Your ammunition refills will come from Requisitions. To request something, say :u followed by a clear and polite request as to what you would like to receive.\ + For example, if you ran out of ammo, you might say ":u RO, requesting SG-85 bins to the FC's beacon."\ + After some amount of time, you will likely get a response in the requisitions channel (pay attention!) along the lines of "Yourname, your order is ready. Sending."\ + After some time, you should hear a WOOSH noise, and a box will teleport to the beacon with what you requested.\ + Note that requisitions is the ONLY place you can get more smartgun ammo!
    +
    + You are the most mobile among smartgunners - use this to your advantage. You are the best at providing cover fire for a mobile squad."} + +/obj/item/paper/tutorial/smartminigunner + name = "Smartminigunner Tutorial" + info = {"As the smartminigunner, you are the very embodiment of BRRT. With your huge SG-85 smart minigun,\ + you can fire ten rounds per second for one hundred straight seconds, providing powerful covering fire for other marines.\ + No enemy wants to get stuck in your line of fire. Instead of a backpack you carry a back mounted powerpack that feeds and powers your SG-85.\ + In your body armor are two bins to refill your powerpack with. Your left pouch contains a flare gun holster and several flares. \ + Your right pouch contains a first aid kit, complete with Bicaridine (heals brute damage), Kelotane (heals burn damage),\ + Tramadol (a painkiller), Tricordrazine (heals all damage, but slowly), and Dylovene (heals toxin damage),\ + as well as splints and inaprovaline. Your webbing contains flares for creating lights and gauze and ointment for treating injuries.\ + Your helmet and boots contain food, in case you get hungry.
    +
    + Your minigun boasts both high levels of armor piercing and the ability to shoot through allies - use both to your advantage.\ + Note that the heavy nature of your minigun and your brief windup before you can fire means you're best positioned defensively, firing at the toughest targets within range.
    +
    + TIPS
    + BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix\ + for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process\ + through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start\ + applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures,\ + by applying them to a fractured limb. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is\ + so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state.\ + You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
    +
    + Your flare gun can be rapidly reloaded by just right clicking the flare pouch with it in hand.\ + Your flare pouch can be refilled by left clicking on it while holding a flare box.\ + Flare any dark area you can see to reduce the risk of a xenomorph ambushing you.\ + On a similar note, your suit's light can be toggled in the top left - you should almost always keep this on to help your visibility.
    +
    + On your belt is a belt harness. By left clicking on your belt harness with your minigun, you can attach them.\ + If you drop your minigun, or have a xenomorph make you drop it, your machine gun will automatically return to your armor if it's attached.\ + On the same note, by left clicking your powerpack, you hook up your minigun, allowing it to draw from it for ammo.\ + If you drop your minigun, even if it's saved by the belt harness, you will have to re-attach it to the powerpack.
    +
    + To reload your power back, take it into your hand, then grab an ammo bin with your other hand and click the power pack with it.
    +
    + While holding your SG-85, use Z to wield your weapon with both hands, which is required to fire it. In the top left of your screen are several weapon-specific buttons.\ + The tactical sensor option toggles your tactical sensor - you should keep this on always.
    +
    + Your tactical sensor will periodically blip, detecting moving targets in an area a little bigger than your screen.\ + Green circles are friendly targets (or anyone wearing a marine ID), while red circles accompanied with an audible blip are unknown (almost always hostile) targets.\ + This sensor works even without vision, such as through any form of smoke and through walls.
    +
    + Your ammunition refills will come from Requisitions. To request something, say :u followed by a clear and polite request as to what you would like to receive.\ + For example, if you ran out of ammo, you might say ":u RO, requesting SG-85 bins to the FC's beacon."\ + After some amount of time, you will likely get a response in the requisitions channel (pay attention!) along the lines of "Yourname, your order is ready. Sending."\ + After some time, you should hear a WOOSH noise, and a box will teleport to the beacon with what you requested.\ + Note that requisitions is the ONLY place you can get more smartgun ammo!
    +
    + STAY BEHIND OTHER MARINES. I cannot stress this enough. You are a priority target for xenomorphs due to your ability to provide covering fire from behind other marines.
    +
    + You almost never need to reload - you have enough rounds to fire for almost two straight minutes.\ + Because of this, you should exclusively reload when it is completely safe to do so, as other marines are counting on you to protect them.
    +
    + Your minigun boasts an incredibly high amount of armor piercing. Aim for particularly durable targets, like Crushers and Kings, as you'll likely do a lot more damage."} diff --git a/code/modules/paperwork/carbonpaper.dm b/code/modules/paperwork/carbonpaper.dm index 27357cecf4b78..8639ccf0610c1 100644 --- a/code/modules/paperwork/carbonpaper.dm +++ b/code/modules/paperwork/carbonpaper.dm @@ -10,7 +10,8 @@ var/iscopy = 0 -/obj/item/paper/carbon/update_icon() +/obj/item/paper/carbon/update_icon_state() + . = ..() if(iscopy) if(info) icon_state = "cpaper_words" diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index f00baa297f248..6065552478f12 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -12,7 +12,7 @@ throw_range = 10 var/obj/item/tool/pen/haspen //The stored pen. var/obj/item/toppaper //The topmost piece of paper. - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT /obj/item/clipboard/Initialize(mapload) . = ..() @@ -35,18 +35,21 @@ return -/obj/item/clipboard/update_icon() - overlays.Cut() +/obj/item/clipboard/update_overlays() + . = ..() + if(toppaper) - overlays += toppaper.icon_state - overlays += toppaper.overlays + . += toppaper.icon_state + . += toppaper.overlays if(haspen) - overlays += "clipboard_pen" - overlays += "clipboard_over" + . += "clipboard_pen" + . += "clipboard_over" /obj/item/clipboard/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/paper) || istype(I, /obj/item/photo)) user.drop_held_item() diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 0fbcadd084357..9afd5eb71c681 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -39,6 +39,8 @@ /obj/structure/filingcabinet/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/paper) || istype(I, /obj/item/folder) || istype(I, /obj/item/photo) || istype(I, /obj/item/paper_bundle)) if(!user.transferItemToLoc(I, src)) diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index 746aebeffcd47..58832643e9f75 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -43,14 +43,16 @@ if(updateicon) update_icon() -/obj/item/folder/update_icon() - overlays.Cut() +/obj/item/folder/update_overlays() + . = ..() if(length(contents)) - overlays += "folder_paper" - return + . += "folder_paper" + /obj/item/folder/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/paper) || istype(I, /obj/item/photo) || istype(I, /obj/item/paper_bundle)) if(!user.transferItemToLoc(I, src)) return diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index b37b62ba8e55d..b85eab4f19b10 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -16,8 +16,8 @@ w_class = WEIGHT_CLASS_TINY throw_range = 1 throw_speed = 1 - flags_equip_slot = ITEM_SLOT_HEAD - flags_armor_protection = HEAD + equip_slot_flags = ITEM_SLOT_HEAD + armor_protection_flags = HEAD attack_verb = list("bapped") var/info //What's actually written on the paper. @@ -51,9 +51,8 @@ update_icon() updateinfolinks() -/obj/item/paper/update_icon() - if(icon_state == "paper_talisman") - return +/obj/item/paper/update_icon_state() + . = ..() if(info) icon_state = "paper_words" return @@ -106,22 +105,26 @@ user.visible_message(span_notice("You show the paper to [M]. "), \ span_notice(" [user] holds up a paper and shows it to [M]. ")) examine(M) + return - else if(user.zone_selected == "mouth") // lipstick wiping - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H == user) - to_chat(user, span_notice("You wipe off the lipstick with [src].")) - H.lip_style = null - H.update_body() - else - user.visible_message(span_warning("[user] begins to wipe [H]'s lipstick off with \the [src]."), \ - span_notice("You begin to wipe off [H]'s lipstick.")) - if(do_after(user, 10, NONE, H, BUSY_ICON_FRIENDLY)) - user.visible_message(span_notice("[user] wipes [H]'s lipstick off with \the [src]."), \ - span_notice("You wipe off [H]'s lipstick.")) - H.lip_style = null - H.update_body() + if(user.zone_selected == "mouth") // lipstick wiping + if(!ishuman(M)) + return + var/mob/living/carbon/human/H = M + if(H == user) + to_chat(user, span_notice("You wipe off the lipstick with [src].")) + H.makeup_style = null + H.update_body() + return + + user.visible_message(span_warning("[user] begins to wipe [H]'s lipstick off with \the [src]."), \ + span_notice("You begin to wipe off [H]'s lipstick.")) + if(!do_after(user, 10, NONE, H, BUSY_ICON_FRIENDLY)) + return + user.visible_message(span_notice("[user] wipes [H]'s lipstick off with \the [src]."), \ + span_notice("You wipe off [H]'s lipstick.")) + H.makeup_style = null + H.update_body() /obj/item/paper/proc/addtofield(id, text, links = 0) var/locid = 0 @@ -282,6 +285,8 @@ /obj/item/paper/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/paper) || istype(I, /obj/item/photo)) if(istype(I, /obj/item/paper/carbon)) @@ -354,8 +359,9 @@ icon_state = "commendation" fields = 5 -/obj/item/paper/commendation/update_icon() //it looks fancy and we want it to stay fancy. +/obj/item/paper/commendation/update_icon_state() //it looks fancy and we want it to stay fancy. return + /*Let this be a lesson about pre-made forms. when building your paper, use the above parsed pen code in parsepencode(). no square bracket anything in the info field. @@ -432,9 +438,10 @@ then, for every time you included a field, increment fields. */ name = "paper scrap" icon_state = "scrap" -/obj/item/paper/crumpled/update_icon() +/obj/item/paper/crumpled/update_icon_state() return + /obj/item/paper/crumpled/bloody/ icon_state = "scrap_bloodied" diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index 36bfd5eddd392..aa1760c18863a 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -19,6 +19,8 @@ /obj/item/paper_bundle/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/paper)) @@ -196,36 +198,51 @@ usr.dropItemToGround(src) qdel(src) -/obj/item/paper_bundle/update_icon() +/obj/item/paper_bundle/update_icon_state() + . = ..() if(length(contents)) var/obj/item/I = contents[1] icon_state = I.icon_state - overlays = I.overlays + +/obj/item/paper_bundle/update_desc(updates) + . = ..() + var/paper_number = 0 + var/photo = FALSE + for(var/obj/thing in src) + if(istype(thing, /obj/item/paper)) + paper_number++ + else if(istype(thing, /obj/item/photo)) + photo = TRUE + if(paper_number>1) + desc = "[paper_number] papers clipped to each other." + else + desc = "A single sheet of paper." + if(photo) + desc += "There is a photo attached to it." + + +/obj/item/paper_bundle/update_overlays() + . = ..() + if(length(contents)) + var/obj/item/I = contents[1] + . = I.overlays underlays = 0 - var/i = 0 - var/photo + var/paper_number = 0 for(var/obj/O in src) var/image/IMG = image('icons/obj/items/paper.dmi') if(istype(O, /obj/item/paper)) IMG.icon_state = O.icon_state - IMG.pixel_x -= min(1*i, 2) - IMG.pixel_y -= min(1*i, 2) - pixel_x = min(0.5*i, 1) - pixel_y = min( 1*i, 2) + IMG.pixel_x -= min(1*paper_number, 2) + IMG.pixel_y -= min(1*paper_number, 2) + pixel_x = min(0.5*paper_number, 1) + pixel_y = min( 1*paper_number, 2) underlays += IMG - i++ + paper_number++ else if(istype(O, /obj/item/photo)) var/obj/item/photo/PH = O IMG = PH.picture.picture_icon - photo = 1 - overlays += IMG - if(i>1) - desc = "[i] papers clipped to each other." - else - desc = "A single sheet of paper." - if(photo) - desc += "\nThere is a photo attached to it." - overlays += image('icons/obj/items/paper.dmi', "clip") + . += IMG + . += image('icons/obj/items/paper.dmi', "clip") /obj/item/paper_bundle/proc/attach_doc(obj/item/I, mob/living/user, no_message) if(I.loc == user) diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index c3fd7b637b407..2610bf0c48831 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -48,6 +48,8 @@ /obj/structure/paper_bin/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/paper)) if(!user.transferItemToLoc(I, src)) @@ -66,7 +68,8 @@ . += span_notice("There are no papers in the bin.") -/obj/structure/paper_bin/update_icon() +/obj/structure/paper_bin/update_icon_state() + . = ..() if(amount < 1) icon_state = "paper_bin0" else diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index fa8cf4b795dcc..b6e184960de89 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -134,6 +134,8 @@ /obj/machinery/photocopier/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/paper)) if(!copier_empty()) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index a4f224c4c2def..3a3c3f234c4ee 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -103,7 +103,8 @@ return ..() -/obj/item/photo/update_icon() +/obj/item/photo/update_icon_state() + . = ..() if(!istype(picture) || !picture.picture_image) return var/icon/I = picture.get_small_icon() @@ -171,7 +172,7 @@ light_color = COLOR_WHITE light_power = FLASH_LIGHT_POWER w_class = WEIGHT_CLASS_SMALL - flags_atom = CONDUCT + atom_flags = CONDUCT interaction_flags = INTERACT_REQUIRES_DEXTERITY var/flash_enabled = TRUE var/state_on = "camera" @@ -213,6 +214,8 @@ /obj/item/camera/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/camera_film)) if(pictures_left) diff --git a/code/modules/power/apc/apc.dm b/code/modules/power/apc/apc.dm new file mode 100644 index 0000000000000..fd28cb01f026e --- /dev/null +++ b/code/modules/power/apc/apc.dm @@ -0,0 +1,655 @@ +//The Area Power Controller (APC), formerly Power Distribution Unit (PDU) +//One per area, needs wire conection to power network + +//Controls power to devices in that area +//May be opened to change power cell +//Three different channels (lighting/equipment/environ) - may each be set to on, off, or auto + + +/obj/machinery/power/apc + name = "area power controller" + desc = "A control terminal for the area electrical systems." + icon = 'icons/obj/machines/apc.dmi' + icon_state = "apc0" + anchored = TRUE + use_power = NO_POWER_USE + req_access = list(ACCESS_CIVILIAN_ENGINEERING) + resistance_flags = UNACIDABLE + interaction_flags = INTERACT_MACHINE_TGUI + light_range = 1 + light_power = 0.5 + ///The area we're affecting + var/area/area + ///The power cell inside the APC + var/obj/item/cell/cell + ///The charge of the APC when first spawned + var/start_charge = 90 + ///The type of cell to spawn this APC with + var/cell_type = /obj/item/cell/apc + ///The current state of the APC cover + var/opened = APC_COVER_CLOSED + ///Is the APC shorted? + var/shorted = FALSE + ///State of the lighting channel (off, auto off, on, auto on) + var/lighting = APC_CHANNEL_AUTO_ON + ///State of the equipment channel (off, auto off, on, auto on) + var/equipment = APC_CHANNEL_AUTO_ON + ///State of the environmental channel (off, auto off, on, auto on) + var/environ = APC_CHANNEL_AUTO_ON + ///Is the apc working? + var/operating = TRUE + ///State of the apc charging (not charging, charging, fully charged) + var/charging = APC_NOT_CHARGING + ///Can the APC recharge? + var/chargemode = TRUE + ///Number of ticks where the apc is trying to recharge + var/chargecount = 0 + ///Is the apc interface locked? + var/locked = TRUE + ///Is the apc cover locked? + var/coverlocked = TRUE + ///Is the AI locked from using the APC + var/aidisabled = FALSE + ///Reference to our cable terminal + var/obj/machinery/power/terminal/terminal = null + ///Amount of power used by the lighting channel + var/lastused_light = 0 + ///Amount of power used by the equipment channel + var/lastused_equip = 0 + ///Amount of power used by the environmental channel + var/lastused_environ = 0 + ///Total amount of power used by the three channels + var/lastused_total = 0 + var/main_status = APC_EXTERNAL_POWER_NONE + ///State of the electronics inside (missing, installed, secured) + var/has_electronics = APC_ELECTRONICS_MISSING + ///Used for counting how many times it has been hit, used for Aliens at the moment + var/beenhit = 0 + ///Buffer state that makes apcs not shut off channels immediately as long as theres some power left, effect visible in apcs only slowly losing power + var/longtermpower = 10 + ///Stores the flags related to icon updating + var/update_state = NONE + ///Stores the flag for the overlays + var/update_overlay = NONE + ///Used to stop the icon from updating too much + var/icon_update_needed = FALSE + ///Probability of APC being broken by a shuttle crash on the same z-level + var/crash_break_probability = 85 + +/obj/machinery/power/apc/connect_to_network() + //Override because the APC does not directly connect to the network; it goes through a terminal. + //The terminal is what the power computer looks for anyway. + if(terminal) + terminal.connect_to_network() + +/obj/machinery/power/apc/updateUsrDialog() + if(machine_stat & (BROKEN|MAINT)) + return + return ..() + +/obj/machinery/power/apc/Initialize(mapload, ndir, building) + GLOB.apcs_list += src + wires = new /datum/wires/apc(src) + + // offset 32 pixels in direction of dir + // this allows the APC to be embedded in a wall, yet still inside an area + if (ndir) + setDir(ndir) + + switch(dir) + if(NORTH) + pixel_y = -32 + if(SOUTH) + pixel_y = 32 + if(EAST) + pixel_x = -32 + if(WEST) + pixel_x = 32 + + if(building) + var/area/A = get_area(src) + area = A + opened = APC_COVER_OPENED + operating = FALSE + name = "\improper [area.name] APC" + machine_stat |= MAINT + update_icon() + addtimer(CALLBACK(src, PROC_REF(update)), 5) + + start_processing() + + . = ..() + + var/area/A = get_area(src) + area = A + name = "\improper [area.name] APC" + + update_icon() + update() //areas should be lit on startup + + if(mapload) + has_electronics = APC_ELECTRONICS_SECURED + + //Is starting with a power cell installed, create it and set its charge level + if(cell_type) + set_cell(new cell_type(src)) + cell.charge = start_charge * cell.maxcharge / 100.0 //Convert percentage to actual value + cell.update_icon() + + + make_terminal() + + update() //areas should be lit on startup + + //Break few ACPs on the colony + if(!start_charge && is_ground_level(z) && prob(10)) + addtimer(CALLBACK(src, PROC_REF(set_broken)), 5) + +/obj/machinery/power/apc/Destroy() + GLOB.apcs_list -= src + + area.power_light = 0 + area.power_equip = 0 + area.power_environ = 0 + area.power_change() + + QDEL_NULL(cell) + QDEL_NULL(wires) + if(terminal) + disconnect_terminal() + + return ..() + +///Wrapper to guarantee powercells are properly nulled and avoid hard deletes. +/obj/machinery/power/apc/proc/set_cell(obj/item/cell/new_cell) + if(cell) + UnregisterSignal(cell, COMSIG_QDELETING) + cell = new_cell + if(cell) + RegisterSignal(cell, COMSIG_QDELETING, PROC_REF(on_cell_deletion)) + + +///Called by the deletion of the referenced powercell. +/obj/machinery/power/apc/proc/on_cell_deletion(obj/item/cell/source, force) + SIGNAL_HANDLER + set_cell(null) + + +/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(loc) + terminal.setDir(REVERSE_DIR(dir)) + terminal.master = src + +/obj/machinery/power/apc/examine(mob/user) + . = ..() + + if(machine_stat & BROKEN) + . += span_info("It appears to be completely broken. It's hard to see what else is wrong with it.") + return + + if(opened) + if(has_electronics && terminal) + . += span_info("The cover is [opened == APC_COVER_REMOVED ? "removed":"open"] and the power cell is [cell ? "installed":"missing"].") + else + . += span_info("It's [ !terminal ? "not" : "" ] wired up.") + . += span_info("The electronics are[!has_electronics?"n't":""] installed.") + else + if(machine_stat & MAINT) + . += span_info("The cover is closed. Something is wrong with it, it doesn't work.") + else + . += span_info("The cover is closed.") + + if(CHECK_BITFIELD(machine_stat, PANEL_OPEN)) + . += span_info("The wiring is exposed.") + +/obj/machinery/power/apc/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + + if(!ui) + ui = new(user, src, "Apc", name) + ui.open() + +/obj/machinery/power/apc/ui_data(mob/user) + var/list/data = list( + "locked" = locked, + "isOperating" = operating, + "externalPower" = main_status, + "powerCellStatus" = cell ? cell.percent() : null, + "chargeMode" = chargemode, + "chargingStatus" = charging, + "totalLoad" = DisplayPower(lastused_total), + "coverLocked" = coverlocked, + "siliconUser" = issilicon(user), + + "powerChannels" = list( + list( + "title" = "Equipment", + "powerLoad" = DisplayPower(lastused_equip), + "status" = equipment, + "topicParams" = list( + "auto" = list("eqp" = 3), + "on" = list("eqp" = 2), + "off" = list("eqp" = 1) + ) + ), + list( + "title" = "Lighting", + "powerLoad" = DisplayPower(lastused_light), + "status" = lighting, + "topicParams" = list( + "auto" = list("lgt" = 3), + "on" = list("lgt" = 2), + "off" = list("lgt" = 1) + ) + ), + list( + "title" = "Environment", + "powerLoad" = DisplayPower(lastused_environ), + "status" = environ, + "topicParams" = list( + "auto" = list("env" = 3), + "on" = list("env" = 2), + "off" = list("env" = 1) + ) + ) + ) + ) + return data + + +/obj/machinery/power/apc/proc/setsubsystem(val) + if(cell?.charge > 0) + return (val==1) ? 0 : val + else if(val == 3) + return 1 + else + return 0 + +/obj/machinery/power/apc/proc/can_use(mob/user, loud = FALSE) //used by attack_hand() and Topic() + if(IsAdminGhost(user)) + return TRUE + if(isAI(user) && aidisabled) + if(!loud) + balloon_alert(user, "eee is disabled") + return FALSE + return TRUE + +/obj/machinery/power/apc/ui_act(action, list/params) + . = ..() + if(. || !can_use(usr, TRUE) || (locked && !usr.has_unlimited_silicon_privilege)) + return + switch(action) + if("lock") + if(usr.has_unlimited_silicon_privilege) + if((machine_stat & (BROKEN|MAINT))) + balloon_alert(usr, "APC unresponsive") + else + locked = !locked + update_icon() + . = TRUE + if("cover") + coverlocked = !coverlocked + . = TRUE + if("breaker") + toggle_breaker(usr) + . = TRUE + if("charge") + chargemode = !chargemode + if(!chargemode) + charging = APC_NOT_CHARGING + update_icon() + . = TRUE + if("channel") + if(params["eqp"]) + equipment = setsubsystem(text2num(params["eqp"])) + update_icon() + update() + else if(params["lgt"]) + lighting = setsubsystem(text2num(params["lgt"])) + update_icon() + update() + else if(params["env"]) + environ = setsubsystem(text2num(params["env"])) + update_icon() + update() + . = TRUE + if("overload") + if(usr.has_unlimited_silicon_privilege) + overload_lighting() + . = TRUE + return TRUE + +/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) + area.power_light = (lighting > 1) + area.power_equip = (equipment > 1) + area.power_environ = (environ > 1) + else + area.power_light = 0 + area.power_equip = 0 + area.power_environ = 0 + area.power_change() + + +/obj/machinery/power/apc/proc/reset(wire) + switch(wire) + if(WIRE_IDSCAN) + locked = TRUE + if(WIRE_POWER1, WIRE_POWER2) + if(!wires.is_cut(WIRE_POWER1) && !wires.is_cut(WIRE_POWER2)) + shorted = FALSE + if(WIRE_AI) + if(!wires.is_cut(WIRE_AI)) + aidisabled = FALSE + if(APC_RESET_EMP) + equipment = 3 + environ = 3 + update_icon() + update() + +/obj/machinery/power/apc/surplus() + if(terminal) + return terminal.surplus() + else + return 0 + + +/obj/machinery/power/apc/add_load(amount) + if(terminal?.powernet) + return terminal.add_load(amount) + return 0 + + +/obj/machinery/power/apc/avail() + if(terminal) + return terminal.avail() + else + return 0 + + +/obj/machinery/power/apc/process() + if(icon_update_needed) + update_icon() + if(machine_stat & (BROKEN|MAINT)) + return + if(!area.requires_power) + return + + lastused_light = area.usage(STATIC_LIGHTS) + lastused_light += area.usage(LIGHT) + lastused_equip = area.usage(EQUIP) + lastused_equip += area.usage(STATIC_EQUIP) + lastused_environ = area.usage(ENVIRON) + lastused_environ += area.usage(STATIC_ENVIRON) + area.clear_usage() + + lastused_total = lastused_light + lastused_equip + lastused_environ + + //store states to update icon if any change + var/last_lt = lighting + var/last_eq = equipment + var/last_en = environ + var/last_ch = charging + + var/excess = surplus() + + if(!avail()) + main_status = APC_EXTERNAL_POWER_NONE + else if(excess < 0) + main_status = APC_EXTERNAL_POWER_LOW + else + main_status = APC_EXTERNAL_POWER_GOOD + + if(cell && !shorted) + // draw power from cell as before to power the area + var/cellused = min(cell.charge, GLOB.CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell + cell.use(cellused) + + if(excess > lastused_total) // if power excess recharge the cell + // by the same amount just used + cell.give(cellused) + add_load(cellused / GLOB.CELLRATE) // add the load used to recharge the cell + + + else // no excess, and not enough per-apc + if((cell.charge / GLOB.CELLRATE + excess) >= lastused_total) // can we draw enough from cell+grid to cover last usage? + cell.charge = min(cell.maxcharge, cell.charge + GLOB.CELLRATE * excess) //recharge with what we can + add_load(excess) // so draw what we can from the grid + charging = APC_NOT_CHARGING + + else // not enough power available to run the last tick! + charging = APC_NOT_CHARGING + chargecount = 0 + // This turns everything off in the case that there is still a charge left on the battery, just not enough to run the room. + equipment = autoset(equipment, 0) + lighting = autoset(lighting, 0) + environ = autoset(environ, 0) + + + // set channels depending on how much charge we have left + + // Allow the APC to operate as normal if the cell can charge + if(charging && longtermpower < 10) + longtermpower += 1 + else if(longtermpower > -10) + longtermpower -= 2 + + if(cell.charge <= 0) // zero charge, turn all off + equipment = autoset(equipment, 0) + lighting = autoset(lighting, 0) + environ = autoset(environ, 0) + area.poweralert(0, src) + else if(cell.percent() < 15 && longtermpower < 0) // <15%, turn off lighting & equipment + equipment = autoset(equipment, 2) + lighting = autoset(lighting, 2) + environ = autoset(environ, 1) + area.poweralert(0, src) + else if(cell.percent() < 30 && longtermpower < 0) // <30%, turn off equipment + equipment = autoset(equipment, 2) + lighting = autoset(lighting, 1) + environ = autoset(environ, 1) + area.poweralert(0, src) + else // otherwise all can be on + equipment = autoset(equipment, 1) + lighting = autoset(lighting, 1) + environ = autoset(environ, 1) + area.poweralert(1, src) + if(cell.percent() > 75) + area.poweralert(1, src) + + // now trickle-charge the cell + if(chargemode && charging == APC_CHARGING && operating) + if(excess > 0) // check to make sure we have enough to charge + // Max charge is capped to % per second constant + var/ch = min(excess*GLOB.CELLRATE, cell.maxcharge*GLOB.CHARGELEVEL) + add_load(ch/GLOB.CELLRATE) // Removes the power we're taking from the grid + cell.give(ch) // actually recharge the cell + + else + charging = APC_NOT_CHARGING // stop charging + chargecount = 0 + + // show cell as fully charged if so + if(cell.charge >= cell.maxcharge) + cell.charge = cell.maxcharge + charging = APC_FULLY_CHARGED + + if(chargemode) + if(!charging) + if(excess > cell.maxcharge * GLOB.CHARGELEVEL) + chargecount++ + else + chargecount = 0 + + if(chargecount == 10) + + chargecount = 0 + charging = APC_CHARGING + + else // chargemode off + charging = APC_NOT_CHARGING + chargecount = 0 + + else // no cell, switch everything off + charging = APC_NOT_CHARGING + chargecount = 0 + equipment = autoset(equipment, 0) + lighting = autoset(lighting, 0) + environ = autoset(environ, 0) + area.poweralert(0, src) + + // update icon & area power if anything changed + if(last_lt != lighting || last_eq != equipment || last_en != environ) + queue_icon_update() + update() + else if(last_ch != charging) + queue_icon_update() + +//val 0 = off, 1 = off(auto) 2 = on, 3 = on(auto) +//on 0 = off, 1 = auto-on, 2 = auto-off + +/proc/autoset(val, on) + + switch(on) + if(0) //Turn things off + switch(val) + if(2) //If on, return off + return 0 + if(3) //If auto-on, return auto-off + return 1 + + if(1) //Turn things auto-on + if(val == 1) //If auto-off, return auto-on + return 3 + + if(2) //Turn things auto-off + if(val == 3) //If auto-on, return auto-off + return 1 + return val + + +/obj/machinery/power/apc/emp_act(severity) + if(cell) + cell.emp_act(severity) + lighting = 0 + equipment = 0 + environ = 0 + update_icon() + update() + addtimer(CALLBACK(src, PROC_REF(reset), APC_RESET_EMP), 60 SECONDS) + return ..() + + +/obj/machinery/power/apc/ex_act(severity) + switch(severity) + if(EXPLODE_DEVASTATE) + cell?.ex_act(1) //More lags woohoo + qdel(src) + return + if(EXPLODE_HEAVY) + if(prob(50)) + return + set_broken() + if(!cell || prob(50)) + return + if(EXPLODE_LIGHT) + if(prob(75)) + return + set_broken() + if(!cell || prob(75)) + return + if(EXPLODE_WEAK) + if(prob(80)) + return + set_broken() + if(!cell || prob(85)) + return + + cell.ex_act(severity) + + +/obj/machinery/power/apc/proc/set_broken() + //Aesthetically much better! + visible_message(span_warning("[src]'s screen flickers with warnings briefly!")) + addtimer(CALLBACK(src, PROC_REF(do_break)), rand(2, 5)) + + +/obj/machinery/power/apc/proc/do_break() + visible_message(span_danger("[src]'s screen suddenly explodes in rain of sparks and small debris!")) + machine_stat |= BROKEN + operating = FALSE + update_icon() + update() + + +//Overload all the lights in this APC area +/obj/machinery/power/apc/proc/overload_lighting() + if(!operating || shorted) + return + if(cell?.charge >= 20) + cell.use(20) + INVOKE_ASYNC(src, PROC_REF(break_lights)) + + +/obj/machinery/power/apc/proc/break_lights() + for(var/obj/machinery/light/L in get_area(src)) + L.broken() + stoplag() + + +/obj/machinery/power/apc/disconnect_terminal() + if(terminal) + terminal.master = null + terminal = null + + +/obj/machinery/power/apc/proc/toggle_breaker(mob/user) + if(machine_stat & (NOPOWER|BROKEN|MAINT)) + return + + operating = !operating + log_combat(user, src, "turned [operating ? "on" : "off"]") + update() + update_icon() + + +//------Various APCs ------// + +// mapping helpers +/obj/machinery/power/apc/drained + start_charge = 0 + +/obj/machinery/power/apc/lowcharge + start_charge = 25 + +/obj/machinery/power/apc/potato + cell_type = /obj/item/cell/potato + +/obj/machinery/power/apc/weak + cell_type = /obj/item/cell + +/obj/machinery/power/apc/high + cell_type = /obj/item/cell/high + +/obj/machinery/power/apc/super + cell_type = /obj/item/cell/super + +/obj/machinery/power/apc/hyper + cell_type = /obj/item/cell/hyper + +//------Marine ship APCs ------// + +/obj/machinery/power/apc/mainship + req_access = list(ACCESS_MARINE_ENGINEERING) + cell_type = /obj/item/cell/high + +/obj/machinery/power/apc/mainship/hardened + name = "hardened area power controller" + desc = "A control terminal for the area electrical systems. This one is hardened against sudden power fluctuations caused by electrical grid damage." + crash_break_probability = 0 diff --git a/code/modules/power/apc/apc_appearance.dm b/code/modules/power/apc/apc_appearance.dm new file mode 100644 index 0000000000000..fe95cfb680947 --- /dev/null +++ b/code/modules/power/apc/apc_appearance.dm @@ -0,0 +1,88 @@ +/obj/machinery/power/apc/update_appearance(updates=check_updates()) + icon_update_needed = FALSE + if(!updates) + return + . = ..() + // And now, separately for cleanness, the lighting changing + if(!update_state) + switch(charging) + if(APC_NOT_CHARGING) + set_light_color(LIGHT_COLOR_RED) + if(APC_CHARGING) + set_light_color(LIGHT_COLOR_BLUE) + if(APC_FULLY_CHARGED) + set_light_color(LIGHT_COLOR_GREEN) + set_light(initial(light_range)) + return + set_light(0) + +/obj/machinery/power/apc/update_icon_state() + . = ..() + + var/broken = CHECK_BITFIELD(update_state, UPSTATE_BROKE) ? "-b" : "" + var/status = (CHECK_BITFIELD(update_state, UPSTATE_WIREEXP) && !CHECK_BITFIELD(update_state, UPSTATE_OPENED1)) ? "-wires" : broken + icon_state = "apc[opened][status]" + +/obj/machinery/power/apc/update_overlays() + . = ..() + + if(opened && cell) + . += "apco-cell" + + if((machine_stat & (BROKEN|MAINT)) || update_state) + return + + . += emissive_appearance(icon, "apcox-[locked]") + . += mutable_appearance(icon, "apcox-[locked]") + . += emissive_appearance(icon, "apco3-[charging]") + . += mutable_appearance(icon, "apco3-[charging]") + + . += emissive_appearance(icon, "apco0-[operating ? equipment : 0]") + . += mutable_appearance(icon, "apco0-[operating ? equipment : 0]") + . += emissive_appearance(icon, "apco1-[operating ? lighting : 0]") + . += mutable_appearance(icon, "apco1-[operating ? lighting : 0]") + . += emissive_appearance(icon, "apco2-[operating ? environ : 0]") + . += mutable_appearance(icon, "apco2-[operating ? environ : 0]") + +/// Checks for what icon updates we will need to handle +/obj/machinery/power/apc/proc/check_updates() + SIGNAL_HANDLER + . = NONE + + // Handle icon status: + var/new_update_state = NONE + if(machine_stat & BROKEN) + new_update_state |= UPSTATE_BROKE + if(machine_stat & MAINT) + new_update_state |= UPSTATE_MAINT + + if(opened) + new_update_state |= (opened << UPSTATE_COVER_SHIFT) + + else if(CHECK_BITFIELD(machine_stat, PANEL_OPEN)) + new_update_state |= UPSTATE_WIREEXP + + if(new_update_state != update_state) + update_state = new_update_state + . |= UPDATE_ICON_STATE + + // Handle overlay status: + var/new_update_overlay = NONE + if(operating) + new_update_overlay |= UPOVERLAY_OPERATING + + if(!update_state) + if(locked) + new_update_overlay |= UPOVERLAY_LOCKED + + new_update_overlay |= (charging << UPOVERLAY_CHARGING_SHIFT) + new_update_overlay |= (equipment << UPOVERLAY_EQUIPMENT_SHIFT) + new_update_overlay |= (lighting << UPOVERLAY_LIGHTING_SHIFT) + new_update_overlay |= (environ << UPOVERLAY_ENVIRON_SHIFT) + + if(new_update_overlay != update_overlay) + update_overlay = new_update_overlay + . |= UPDATE_OVERLAYS + +/obj/machinery/power/apc/proc/queue_icon_update() + icon_update_needed = TRUE diff --git a/code/modules/power/apc/apc_attack.dm b/code/modules/power/apc/apc_attack.dm new file mode 100644 index 0000000000000..96edd263d5da4 --- /dev/null +++ b/code/modules/power/apc/apc_attack.dm @@ -0,0 +1,223 @@ +/obj/machinery/power/apc/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) + return FALSE + + if(effects) + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_CLAW) + xeno_attacker.visible_message(span_danger("[xeno_attacker] slashes \the [src]!"), \ + span_danger("We slash \the [src]!"), null, 5) + playsound(loc, "alien_claw_metal", 25, 1) + + var/allcut = wires.is_all_cut() + + if(beenhit >= pick(3, 4) && !CHECK_BITFIELD(machine_stat, PANEL_OPEN)) + ENABLE_BITFIELD(machine_stat, PANEL_OPEN) + update_appearance() + visible_message(span_danger("\The [src]'s cover swings open, exposing the wires!"), null, null, 5) + + else if(CHECK_BITFIELD(machine_stat, PANEL_OPEN) && !allcut) + wires.cut_all() + update_appearance() + visible_message(span_danger("\The [src]'s wires snap apart in a rain of sparks!"), null, null, 5) + if(xeno_attacker.client) + var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[xeno_attacker.ckey] + personal_statistics.apcs_slashed++ + else + beenhit += 1 + +//Attack with an item - open/close cover, insert cell, or (un)lock interface //todo please clean this up +/obj/machinery/power/apc/attackby(obj/item/I, mob/user, params) + . = ..() + if(.) + return + + if(istype(I, /obj/item/cell) && opened) //Trying to put a cell inside + if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) + user.visible_message(span_notice("[user] fumbles around figuring out how to fit [I] into [src]."), + span_notice("You fumble around figuring out how to fit [I] into [src].")) + var/fumbling_time = 5 SECONDS * ( SKILL_ENGINEER_ENGI - user.skills.getRating(SKILL_ENGINEER) ) + if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED)) + return + + if(cell) + balloon_alert(user, "Already installed") + return + + if(machine_stat & MAINT) + balloon_alert(user, "No connector") + return + + if(!user.transferItemToLoc(I, src)) + return + + set_cell(I) + user.visible_message("[user] inserts [I] into [src]!", + "You insert [I] into [src]!") + chargecount = 0 + update_appearance() + + else if(istype(I, /obj/item/card/id)) //Trying to unlock the interface with an ID card + if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) + user.visible_message(span_notice("[user] fumbles around figuring out where to swipe [I] on [src]."), + span_notice("You fumble around figuring out where to swipe [I] on [src].")) + var/fumbling_time = 3 SECONDS * ( SKILL_ENGINEER_ENGI - user.skills.getRating(SKILL_ENGINEER) ) + if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED)) + return + + if(opened) + balloon_alert(user, "Close the cover first") + return + + if(CHECK_BITFIELD(machine_stat, PANEL_OPEN)) + balloon_alert(user, "Close the panel first") + return + + if(machine_stat & (BROKEN|MAINT)) + balloon_alert(user, "Nothing happens") + return + + if(!allowed(user)) + balloon_alert(user, "Access denied") + return + + locked = !locked + balloon_alert_to_viewers("[locked ? "locked" : "unlocked"]") + update_appearance() + + else if(iscablecoil(I) && !terminal && opened && has_electronics != APC_ELECTRONICS_SECURED) + var/obj/item/stack/cable_coil/C = I + + if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) + balloon_alert_to_viewers("fumbles") + var/fumbling_time = 5 SECONDS * ( SKILL_ENGINEER_ENGI - user.skills.getRating(SKILL_ENGINEER) ) + if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED)) + return + + var/turf/T = get_turf(src) + if(T.intact_tile) + balloon_alert(user, "Remove the floor plating") + return + + if(C.get_amount() < 10) + balloon_alert(user, "Not enough wires") + return + + balloon_alert_to_viewers("starts wiring [src]") + playsound(loc, 'sound/items/deconstruct.ogg', 25, 1) + + if(!do_after(user, 20, NONE, src, BUSY_ICON_BUILD) || terminal || !opened || has_electronics == APC_ELECTRONICS_SECURED) + return + + var/obj/structure/cable/N = T.get_cable_node() + if(prob(50) && electrocute_mob(user, N, N)) + var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread + s.set_up(5, 1, src) + s.start() + return + + if(!C.use(10)) + return + + balloon_alert_to_viewers("Wired]") + make_terminal() + terminal.connect_to_network() + + else if(istype(I, /obj/item/circuitboard/apc) && opened && has_electronics == APC_ELECTRONICS_MISSING && !(machine_stat & BROKEN)) + if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) + balloon_alert_to_viewers("fumbles") + var/fumbling_time = 5 SECONDS * ( SKILL_ENGINEER_ENGI - user.skills.getRating(SKILL_ENGINEER) ) + if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED)) + return + + balloon_alert_to_viewers("Tries to insert APC board into [src]") + playsound(loc, 'sound/items/deconstruct.ogg', 25, 1) + + if(!do_after(user, 15, NONE, src, BUSY_ICON_BUILD)) + return + + has_electronics = APC_ELECTRONICS_INSTALLED + balloon_alert_to_viewers("Inserts APC board into [src]") + qdel(I) + + else if(istype(I, /obj/item/circuitboard/apc) && opened && has_electronics == APC_ELECTRONICS_MISSING && (machine_stat & BROKEN)) + if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) + balloon_alert_to_viewers("fumbles") + var/fumbling_time = 5 SECONDS * ( SKILL_ENGINEER_ENGI - user.skills.getRating(SKILL_ENGINEER) ) + if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED)) + return + + balloon_alert(user, "Cannot, frame damaged") + + else if(istype(I, /obj/item/frame/apc) && opened && (machine_stat & BROKEN)) + if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) + balloon_alert_to_viewers("fumbles") + var/fumbling_time = 5 SECONDS * ( SKILL_ENGINEER_ENGI - user.skills.getRating(SKILL_ENGINEER) ) + if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED)) + return + + if(has_electronics) + balloon_alert(user, "Cannot, electronics still inside") + return + + balloon_alert_to_viewers("Begins replacing front panel") + + if(!do_after(user, 50, NONE, src, BUSY_ICON_BUILD)) + return + + balloon_alert_to_viewers("Replaces front panel") + qdel(I) + DISABLE_BITFIELD(machine_stat, BROKEN) + if(opened == APC_COVER_REMOVED) + opened = APC_COVER_OPENED + update_appearance() + + else if(istype(I, /obj/item/frame/apc) && opened) + if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) + balloon_alert_to_viewers("fumbles") + var/fumbling_time = 5 SECONDS * ( SKILL_ENGINEER_ENGI - user.skills.getRating(SKILL_ENGINEER) ) + if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED)) + return + + if(opened == APC_COVER_REMOVED) + opened = APC_COVER_OPENED + balloon_alert_to_viewers("Replaces [src]'s front panel") + qdel(I) + update_appearance() + + else + if(((machine_stat & BROKEN)) && !opened && I.force >= 5) + opened = APC_COVER_REMOVED + balloon_alert_to_viewers("Knocks down [src]'s panel") + update_appearance() + else + if(issilicon(user)) + return attack_hand(user) + + if(!opened && CHECK_BITFIELD(machine_stat, PANEL_OPEN) && (ismultitool(I) || iswirecutter(I))) + return attack_hand(user) + balloon_alert_to_viewers("Hits [src] with [I]") + +//Attack with hand - remove cell (if cover open) or interact with the APC +/obj/machinery/power/apc/attack_hand(mob/living/user) + . = ..() + if(.) + return + + if(opened && cell && !issilicon(user)) + if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) + balloon_alert_to_viewers("fumbles") + var/fumbling_time = 5 SECONDS * ( SKILL_ENGINEER_ENGI - user.skills.getRating(SKILL_ENGINEER) ) + if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED)) + return + balloon_alert_to_viewers("Removes [src] from [src]") + user.put_in_hands(cell) + cell.update_appearance() + set_cell(null) + charging = APC_NOT_CHARGING + update_appearance() + return + + if(machine_stat & (BROKEN|MAINT)) + return + + interact(user) diff --git a/code/modules/power/apc/apc_tool_act.dm b/code/modules/power/apc/apc_tool_act.dm new file mode 100644 index 0000000000000..6fcf7c5677490 --- /dev/null +++ b/code/modules/power/apc/apc_tool_act.dm @@ -0,0 +1,116 @@ +/obj/machinery/power/apc/crowbar_act(mob/user, obj/item/I) + . = TRUE + if(opened) + if(has_electronics == APC_ELECTRONICS_INSTALLED) + if(terminal) + balloon_alert(user, "Disconnect the wires") + return + if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) + balloon_alert_to_viewers("Fumbles around removing cell from [src]") + var/fumbling_time = 5 SECONDS * ( SKILL_ENGINEER_ENGI - user.skills.getRating(SKILL_ENGINEER) ) + if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED)) + return + I.play_tool_sound(src) + balloon_alert(user, "Removing APC board") + if(I.use_tool(src, user, 50)) + if(has_electronics == APC_ELECTRONICS_INSTALLED) + has_electronics = APC_ELECTRONICS_MISSING + if(machine_stat & BROKEN) + balloon_alert_to_viewers("Removes the charred control board") + return + else + balloon_alert_to_viewers("Removes the control board") + new /obj/item/circuitboard/apc(loc) + return + else if(opened != APC_COVER_REMOVED) + opened = APC_COVER_CLOSED + coverlocked = TRUE //closing cover relocks it + update_appearance() + return + else if(!(machine_stat & BROKEN)) + if(coverlocked && !(machine_stat & MAINT)) // locked... + balloon_alert(user, "Locked") + return + else if(machine_stat & PANEL_OPEN) + balloon_alert(user, "Can't, wires in way") + return + else + opened = APC_COVER_OPENED + update_appearance() + return + + +/obj/machinery/power/apc/screwdriver_act(mob/living/user, obj/item/I) + . = ..() + if(.) + return TRUE + . = TRUE + if(opened) + if(cell) + if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) + balloon_alert_to_viewers("fumbles") + var/fumbling_time = 5 SECONDS * ( SKILL_ENGINEER_ENGI - user.skills.getRating(SKILL_ENGINEER) ) + if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED)) + return + balloon_alert_to_viewers("Removes cell") + var/turf/T = get_turf(user) + cell.forceMove(T) + cell.update_appearance() + set_cell(null) + charging = APC_NOT_CHARGING + update_appearance() + return + else + switch(has_electronics) + if(APC_ELECTRONICS_INSTALLED) + has_electronics = APC_ELECTRONICS_SECURED + machine_stat &= ~MAINT + I.play_tool_sound(src) + balloon_alert(user, "Screws circuit board in") + if(APC_ELECTRONICS_SECURED) + has_electronics = APC_ELECTRONICS_INSTALLED + machine_stat |= MAINT + I.play_tool_sound(src) + balloon_alert(user, "Unfastens electronics") + else + balloon_alert(user, "Nothing securable") + return + update_appearance() + else + TOGGLE_BITFIELD(machine_stat, PANEL_OPEN) + balloon_alert(user, "wires [CHECK_BITFIELD(machine_stat, PANEL_OPEN) ? "exposed" : "unexposed"]") + update_appearance() + + +/obj/machinery/power/apc/wirecutter_act(mob/living/user, obj/item/I) + if(terminal && opened) + terminal.deconstruct(user) + return TRUE + + +/obj/machinery/power/apc/welder_act(mob/living/user, obj/item/I) + if(!opened || has_electronics || terminal) + return + + if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) + balloon_alert_to_viewers("fumbles") + var/fumbling_time = 5 SECONDS * ( SKILL_ENGINEER_ENGI - user.skills.getRating(SKILL_ENGINEER) ) + if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED)) + return + + if(!I.tool_start_check(user, amount = 3)) + return + balloon_alert_to_viewers("welds [src]") + + if(!I.use_tool(src, user, 50, volume = 50, amount = 3)) + return + + if((machine_stat & BROKEN) || opened == APC_COVER_REMOVED) + new /obj/item/stack/sheet/metal(loc) + balloon_alert_to_viewers("cuts apart [src]") + else + new /obj/item/frame/apc(loc) + balloon_alert_to_viewers("cuts [src] from the wall") + qdel(src) + return TRUE + diff --git a/code/modules/power/batteryrack.dm b/code/modules/power/batteryrack.dm index 9e5b59adea496..0e2a60f11d6b7 100644 --- a/code/modules/power/batteryrack.dm +++ b/code/modules/power/batteryrack.dm @@ -68,19 +68,19 @@ capacity = C * 40 //Basic cells are such crap. Hyper cells needed to get on normal SMES levels. -/obj/machinery/power/smes/batteryrack/update_icon() - overlays.Cut() +/obj/machinery/power/smes/batteryrack/update_overlays() + . = ..() if(machine_stat & BROKEN) return - if (outputting) - overlays += image('icons/obj/power.dmi', "gsmes_outputting") + if(outputting) + . += image('icons/obj/power.dmi', "gsmes_outputting") if(inputting) - overlays += image('icons/obj/power.dmi', "gsmes_charging") + . += image('icons/obj/power.dmi', "gsmes_charging") var/clevel = chargedisplay() if(clevel>0) - overlays += image('icons/obj/power.dmi', "gsmes_og[clevel]") + . += image('icons/obj/power.dmi', "gsmes_og[clevel]") @@ -90,6 +90,8 @@ /obj/machinery/power/smes/batteryrack/attackby(obj/item/I, mob/user, params) //these can only be moved by being reconstructed, solves having to remake the powernet. . = ..() //SMES attackby for now handles screwdriver, cable coils and wirecutters, no need to repeat that here + if(.) + return if(!CHECK_BITFIELD(machine_stat, PANEL_OPEN)) return @@ -108,8 +110,6 @@ M.state = 2 M.icon_state = "box_1" for(var/obj/O in component_parts) - if(O.reliability != 100 && crit_fail) - O.crit_fail = TRUE O.forceMove(loc) qdel(src) @@ -147,20 +147,21 @@ /obj/machinery/power/smes/batteryrack/makeshift/update_icon() - overlays.Cut() - if(machine_stat & BROKEN) return + . = ..() + if(machine_stat & BROKEN) + return - if (outputting) - overlays += image('icons/obj/power.dmi', "gsmes_outputting") + if(outputting) + . += image('icons/obj/power.dmi', "gsmes_outputting") if(inputting) - overlays += image('icons/obj/power.dmi', "gsmes_charging") - if (overcharge_percent > 100) - overlays += image('icons/obj/power.dmi', "gsmes_overcharge") + . += image('icons/obj/power.dmi', "gsmes_charging") + if(overcharge_percent > 100) + . += image('icons/obj/power.dmi', "gsmes_overcharge") else var/clevel = chargedisplay() if(clevel>0) - overlays += image('icons/obj/power.dmi', "gsmes_og[clevel]") - return + . += image('icons/obj/power.dmi', "gsmes_og[clevel]") + //This mess of if-elses and magic numbers handles what happens if the engies don't pay attention and let it eat too much charge //What happens depends on how much capacity has the ghetto smes and how much it is overcharged. diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 4d06c11d197d2..de7b516c8130a 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -115,7 +115,7 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri return ..() // then go ahead and delete the cable /obj/structure/cable/deconstruct(disassembled = TRUE) - if(!(flags_atom & NODECONSTRUCT)) + if(!(atom_flags & NODECONSTRUCT)) new /obj/item/stack/cable_coil(drop_location(), 1) return ..() @@ -124,6 +124,7 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri /////////////////////////////////// /obj/structure/cable/update_icon_state() + . = ..() if(!linked_dirs) icon_state = "l[cable_layer]-noconnection" else @@ -396,8 +397,8 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list(new/datum/stack_recipe("cable restrain w_class = WEIGHT_CLASS_SMALL throw_speed = 3 throw_range = 5 - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT attack_verb = list("whipped", "lashed", "disciplined", "flogged") singular_name = "cable piece" usesound = 'sound/items/deconstruct.ogg' diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index f111de72c7aa6..35de3bf6b44ae 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -54,14 +54,9 @@ explode() return 0 - if(maxcharge < amount) return 0 + if(maxcharge < amount) + return 0 var/amount_used = min(maxcharge-charge,amount) - if(crit_fail) return 0 - if(!prob(reliability)) - minor_fault++ - if(prob(minor_fault)) - crit_fail = 1 - return 0 charge += amount_used return amount_used @@ -72,8 +67,6 @@ . += "The manufacturer's label states this cell has a power rating of [maxcharge], and that you should not swallow it.\nThe charge meter reads [round(src.percent() )]%." else . += "This power cell has an exciting chrome finish, as it is an uber-capacity cell type! It has a power rating of [maxcharge]!\nThe charge meter reads [round(src.percent() )]%." - if(crit_fail) - . += span_warning("This power cell seems to be faulty.") if(rigged) if(get_dist(user,src) < 3) //Have to be close to make out the *DANGEROUS* details . += span_danger("This power cell looks jury rigged to explode!") @@ -104,6 +97,8 @@ /obj/item/cell/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/reagent_containers/syringe)) var/obj/item/reagent_containers/syringe/S = I @@ -194,9 +189,7 @@ charge -= 1000 / severity if (charge < 0) charge = 0 - if(reliability != 100 && prob(50/severity)) - reliability -= 10 / severity - ..() + return ..() /obj/item/cell/ex_act(severity) diff --git a/code/modules/power/fusion_engine.dm b/code/modules/power/fusion_engine.dm index 75228d4c32f2b..4c5b38ec7d97f 100644 --- a/code/modules/power/fusion_engine.dm +++ b/code/modules/power/fusion_engine.dm @@ -178,12 +178,12 @@ if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_ENGI) balloon_alert_to_viewers("Fumbles with [src]'s internals") var/fumbling_time = 10 SECONDS - 2 SECONDS * user.skills.getRating(SKILL_ENGINEER) - if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED, extra_checks = CALLBACK(WT, /obj/item/tool/weldingtool/proc/isOn))) + if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED, extra_checks = CALLBACK(WT, TYPE_PROC_REF(/obj/item/tool/weldingtool, isOn)))) return FALSE playsound(loc, 'sound/items/weldingtool_weld.ogg', 25) balloon_alert_to_viewers("Starts welding some damage") add_overlay(GLOB.welding_sparks) - if(!do_after(user, 20 SECONDS - (user.skills.getRating(SKILL_ENGINEER) * 3 SECONDS) , NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(WT, /obj/item/tool/weldingtool/proc/isOn))) + if(!do_after(user, 20 SECONDS - (user.skills.getRating(SKILL_ENGINEER) * 3 SECONDS) , NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(WT, TYPE_PROC_REF(/obj/item/tool/weldingtool, isOn)))) return FALSE if(buildstate != FUSION_ENGINE_HEAVY_DAMAGE || is_on) cut_overlay(GLOB.welding_sparks) @@ -301,7 +301,7 @@ . += span_info("The power gauge reads: [power_gen_percent]%") if(fusion_cell) . += span_info("You can see a fuel cell in the receptacle.") - if(user.skills.getRating(SKILL_ENGINEER) >= SKILL_ENGINEER_MASTER) + if(user.skills.getRating(SKILL_ENGINEER) >= SKILL_ENGINEER_EXPERT) switch(fusion_cell.fuel_amount) if(0 to 10) . += span_danger("The fuel cell is critically low.") @@ -318,7 +318,8 @@ else . += span_info("There is no fuel cell in the receptacle.") -/obj/machinery/power/fusion_engine/update_icon() +/obj/machinery/power/fusion_engine/update_icon_state() + . = ..() switch(buildstate) if(FUSION_ENGINE_NO_DAMAGE) if(fusion_cell?.fuel_amount > 0) @@ -383,7 +384,8 @@ fuel_amount = rand(0,100) update_icon() -/obj/item/fuel_cell/update_icon() +/obj/item/fuel_cell/update_icon_state() + . = ..() switch(get_fuel_percent()) if(-INFINITY to 0) icon_state = "cell-empty" diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index f4036e3c0a1cb..a3e3ee4ad3bfb 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -75,6 +75,8 @@ /obj/machinery/power/generator/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(iswrench(I)) anchored = !anchored diff --git a/code/modules/power/groundmap_geothermal.dm b/code/modules/power/groundmap_geothermal.dm index fcb7a3d77feb8..8370a53629726 100644 --- a/code/modules/power/groundmap_geothermal.dm +++ b/code/modules/power/groundmap_geothermal.dm @@ -32,6 +32,7 @@ GLOBAL_VAR_INIT(generators_on_ground, 0) . = ..() RegisterSignals(SSdcs, list(COMSIG_GLOB_OPEN_TIMED_SHUTTERS_LATE, COMSIG_GLOB_OPEN_TIMED_SHUTTERS_XENO_HIVEMIND, COMSIG_GLOB_OPEN_SHUTTERS_EARLY, COMSIG_GLOB_TADPOLE_LAUNCHED), PROC_REF(activate_corruption)) update_icon() + SSminimaps.add_marker(src, MINIMAP_FLAG_ALL, image('modular_RUtgmc/icons/UI_icons/map_blips.dmi', null, "generator", ABOVE_FLOAT_LAYER)) //RU TGMC edit - map blips if(is_ground_level(z)) GLOB.generators_on_ground += 1 @@ -55,7 +56,7 @@ GLOBAL_VAR_INIT(generators_on_ground, 0) return TRUE //We don't want to cut/update the power overlays every single proc. Just when it actually changes. This should save on CPU cycles. Efficiency! -/obj/machinery/power/geothermal/update_icon() +/obj/machinery/power/geothermal/update_icon_state() . = ..() //RUTGMC ADDITION BEGIN SSminimaps.remove_marker(src) @@ -91,6 +92,19 @@ GLOBAL_VAR_INIT(generators_on_ground, 0) icon_state = "wrench" desc = "A thermoelectric generator sitting atop a plasma-filled borehole. This one is lightly damaged. Use a wrench to repair it." +/obj/machinery/power/geothermal/update_desc(updates) + . = ..() + switch(buildstate) + if(GEOTHERMAL_NO_DAMAGE) + if(!is_on) + desc = "A thermoelectric generator sitting atop a borehole dug deep in the planet's surface. It generates energy by boiling the plasma steam that rises from the well.\nIt is old technology and has a large failure rate, and must be repaired frequently.\nIt is currently turned off and silent." + if(GEOTHERMAL_HEAVY_DAMAGE) + desc = "A thermoelectric generator sitting atop a plasma-filled borehole. This one is heavily damaged. Use a blowtorch, wirecutters, and then a wrench to repair it." + if(GEOTHERMAL_MEDIUM_DAMAGE) + desc = "A thermoelectric generator sitting atop a plasma-filled borehole. This one is damaged. Use wirecutters and then a wrench to repair it." + if(GEOTHERMAL_LIGHT_DAMAGE) + desc = "A thermoelectric generator sitting atop a plasma-filled borehole. This one is lightly damaged. Use a wrench to repair it." + /obj/machinery/power/geothermal/update_overlays() . = ..() if(corrupted) @@ -112,7 +126,9 @@ GLOBAL_VAR_INIT(generators_on_ground, 0) return PROCESS_KILL if((length(GLOB.humans_by_zlevel["2"]) > 0.2 * length(GLOB.alive_human_list_faction[FACTION_TERRAGOV]))) //You get points proportional to the % of generators corrupted (for example, if 66% of generators are corrupted the hive gets 0.66 points per second) - SSpoints.add_psy_points(corrupted, GENERATOR_PSYCH_POINT_OUTPUT / GLOB.generators_on_ground) + var/points_generated = GENERATOR_PSYCH_POINT_OUTPUT / GLOB.generators_on_ground + SSpoints.add_strategic_psy_points(corrupted, points_generated) + SSpoints.add_tactical_psy_points(corrupted, points_generated*0.25) return if(!is_on || buildstate || !anchored || !powernet) //Default logic checking return PROCESS_KILL @@ -158,26 +174,26 @@ GLOBAL_VAR_INIT(generators_on_ground, 0) return TRUE return FALSE //Nope, all fine -/obj/machinery/power/geothermal/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) +/obj/machinery/power/geothermal/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) . = ..() if(corrupted) //you have no reason to interact with it if its already corrupted return - if(CHECK_BITFIELD(X.xeno_caste.can_flags, CASTE_CAN_CORRUPT_GENERATOR) && is_corruptible) - to_chat(X, span_notice("You start to corrupt [src]")) - if(!do_after(X, 10 SECONDS, NONE, src, BUSY_ICON_HOSTILE)) + if(CHECK_BITFIELD(xeno_attacker.xeno_caste.can_flags, CASTE_CAN_CORRUPT_GENERATOR) && is_corruptible) + to_chat(xeno_attacker, span_notice("You start to corrupt [src]")) + if(!do_after(xeno_attacker, 10 SECONDS, NONE, src, BUSY_ICON_HOSTILE)) return - corrupt(X.hivenumber) - to_chat(X, span_notice("You have corrupted [src]")) - record_generator_sabotages(X) + corrupt(xeno_attacker.hivenumber) + to_chat(xeno_attacker, span_notice("You have corrupted [src]")) + record_generator_sabotages(xeno_attacker) return if(buildstate) return - X.do_attack_animation(src, ATTACK_EFFECT_CLAW) + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_CLAW) play_attack_sound(1) - X.visible_message(span_danger("\The [X] slashes at \the [src], tearing at it's components!"), + xeno_attacker.visible_message(span_danger("\The [xeno_attacker] slashes at \the [src], tearing at it's components!"), span_danger("We start slashing at \the [src], tearing at it's components!")) fail_rate += 5 // 5% fail rate every attack - record_generator_sabotages(X) + record_generator_sabotages(xeno_attacker) /obj/machinery/power/geothermal/attack_hand(mob/living/carbon/user) interact_hand(user) @@ -231,7 +247,7 @@ GLOBAL_VAR_INIT(generators_on_ground, 0) user.visible_message(span_notice("[user] fumbles around figuring out the resin tendrils on [src]."), span_notice("You fumble around figuring out the resin tendrils on [src].")) var/fumbling_time = 10 SECONDS - 2 SECONDS * user.skills.getRating(SKILL_ENGINEER) - if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED, extra_checks = CALLBACK(WT, /obj/item/tool/weldingtool/proc/isOn))) + if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED, extra_checks = CALLBACK(WT, TYPE_PROC_REF(/obj/item/tool/weldingtool, isOn)))) return if(!WT.remove_fuel(1, user)) @@ -242,7 +258,7 @@ GLOBAL_VAR_INIT(generators_on_ground, 0) span_notice("You carefully start burning [src]'s resin off.")) add_overlay(GLOB.welding_sparks) - if(!do_after(user, 20 SECONDS, NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(WT, /obj/item/tool/weldingtool/proc/isOn))) + if(!do_after(user, 20 SECONDS - clamp((user.skills.getRating(SKILL_ENGINEER) - SKILL_ENGINEER_ENGI) * 5, 0, 20) SECONDS, NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(WT, TYPE_PROC_REF(/obj/item/tool/weldingtool, isOn)))) cut_overlay(GLOB.welding_sparks) return FALSE @@ -259,7 +275,7 @@ GLOBAL_VAR_INIT(generators_on_ground, 0) user.visible_message(span_notice("[user] fumbles around figuring out [src]'s internals."), span_notice("You fumble around figuring out [src]'s internals.")) var/fumbling_time = 10 SECONDS - 2 SECONDS * user.skills.getRating(SKILL_ENGINEER) - if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED, extra_checks = CALLBACK(WT, /obj/item/tool/weldingtool/proc/isOn)) || buildstate != GEOTHERMAL_HEAVY_DAMAGE || is_on) + if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED, extra_checks = CALLBACK(WT, TYPE_PROC_REF(/obj/item/tool/weldingtool, isOn))) || buildstate != GEOTHERMAL_HEAVY_DAMAGE || is_on) return if(!WT.remove_fuel(1, user)) @@ -270,7 +286,7 @@ GLOBAL_VAR_INIT(generators_on_ground, 0) span_notice("You start welding [src]'s internal damage.")) add_overlay(GLOB.welding_sparks) - if(!do_after(user, 20 SECONDS, NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(WT, /obj/item/tool/weldingtool/proc/isOn)) || buildstate != GEOTHERMAL_HEAVY_DAMAGE || is_on) + if(!do_after(user, 20 SECONDS - clamp((user.skills.getRating(SKILL_ENGINEER) - SKILL_ENGINEER_ENGI) * 5, 0, 20) SECONDS, NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(WT, TYPE_PROC_REF(/obj/item/tool/weldingtool, isOn))) || buildstate != GEOTHERMAL_HEAVY_DAMAGE || is_on) cut_overlay(GLOB.welding_sparks) return FALSE @@ -296,7 +312,7 @@ GLOBAL_VAR_INIT(generators_on_ground, 0) user.visible_message(span_notice("[user] starts securing [src]'s wiring."), span_notice("You start securing [src]'s wiring.")) - if(!do_after(user, 12 SECONDS, NONE, src, BUSY_ICON_BUILD) || buildstate != GEOTHERMAL_MEDIUM_DAMAGE || is_on) + if(!do_after(user, 12 SECONDS - clamp((user.skills.getRating(SKILL_ENGINEER) - SKILL_ENGINEER_ENGI) * 4, 0, 12) SECONDS, NONE, src, BUSY_ICON_BUILD) || buildstate != GEOTHERMAL_MEDIUM_DAMAGE || is_on) return FALSE playsound(loc, 'sound/items/wirecutter.ogg', 25, 1) @@ -321,7 +337,7 @@ GLOBAL_VAR_INIT(generators_on_ground, 0) user.visible_message(span_notice("[user] starts repairing [src]'s tubing and plating."), span_notice("You start repairing [src]'s tubing and plating.")) - if(!do_after(user, 15 SECONDS, NONE, src, BUSY_ICON_BUILD) || buildstate != GEOTHERMAL_LIGHT_DAMAGE || is_on) + if(!do_after(user, 15 SECONDS - clamp((user.skills.getRating(SKILL_ENGINEER) - SKILL_ENGINEER_ENGI) * 5, 0, 15) SECONDS, NONE, src, BUSY_ICON_BUILD) || buildstate != GEOTHERMAL_LIGHT_DAMAGE || is_on) return FALSE playsound(loc, 'sound/items/ratchet.ogg', 25, 1) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm old mode 100644 new mode 100755 index 1130171274dc7..0011fcbd390a9 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -34,6 +34,8 @@ /obj/machinery/light_construct/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(iswrench(I)) if(stage == 1) @@ -125,6 +127,7 @@ name = "light fixture" icon = 'icons/obj/lighting.dmi' var/base_state = "tube" // base description and icon_state + base_icon_state = "tube" icon_state = "tube1" desc = "A lighting fixture." anchored = TRUE @@ -139,13 +142,27 @@ var/bulb_power = 1 // basically the light_power of the emitted light source var/bulb_colour = COLOR_WHITE var/status = LIGHT_OK // LIGHT_OK, _EMPTY, _BURNED or _BROKEN + ///is our light flickering? var/flickering = FALSE - var/light_type = /obj/item/light_bulb/tube // the type of light item + ///what's the duration that the light switches between on and off while flickering + var/flicker_time = 2 SECONDS + ///the type of light item + var/light_type = /obj/item/light_bulb/tube var/fitting = "tube" ///count of number of times switched on/off. this is used to calc the probability the light burns out var/switchcount = 0 /// true if rigged to explode var/rigged = FALSE + ///holds the state of our flickering + var/light_flicker_state = FALSE + ///if true randomize the time we turn on and off + var/random_flicker = FALSE + ///upper bounds of potential flicker time when randomized + var/flicker_time_upper_max = 10 SECONDS + ///lower bounds of potential flicker time when randomized + var/flicker_time_lower_min = 0.2 SECONDS + ///looping sound for flickering lights + var/datum/looping_sound/flickeringambient/lightambient /obj/machinery/light/mainship base_state = "tube" @@ -165,6 +182,7 @@ brightness = 4 desc = "A small lighting fixture." light_type = /obj/item/light_bulb/bulb + base_icon_state = "bulb" /obj/machinery/light/red base_state = "tubered" @@ -183,6 +201,7 @@ brightness = 4 desc = "A small lighting fixture." light_type = /obj/item/light_bulb/bulb + base_icon_state = "bulb" /obj/machinery/light/spot name = "spotlight" @@ -242,6 +261,7 @@ turn_light(null, (A.lightswitch && A.power_light)) /obj/machinery/light/Destroy() + QDEL_NULL(lightambient) GLOB.nightfall_toggleable_lights -= src return ..() @@ -250,7 +270,8 @@ return TRUE return FALSE -/obj/machinery/light/update_icon() +/obj/machinery/light/update_icon_state() + . = ..() switch(status) // set icon_states if(LIGHT_OK) icon_state = "[base_state][light_on]" @@ -310,6 +331,8 @@ . += "The [fitting] is burnt out." if(LIGHT_BROKEN) . += "The [fitting] has been smashed." + if(flickering) + . += "The fixture seems to be damaged and the cabling is partially broken." @@ -317,6 +340,8 @@ /obj/machinery/light/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/lightreplacer)) var/obj/item/lightreplacer/LR = I @@ -357,7 +382,7 @@ return visible_message("[user] smashed the light!", "You hit the light, and it smashes!") - if(light_on && (I.flags_atom & CONDUCT) && prob(12)) + if(light_on && (I.atom_flags & CONDUCT) && prob(12)) electrocute_mob(user, get_area(src), src, 0.3) broken() @@ -379,7 +404,7 @@ newlight.stage = 2 qdel(src) - else if(has_power() && (I.flags_atom & CONDUCT)) + else if(has_power() && (I.atom_flags & CONDUCT)) to_chat(user, "You stick \the [I] into the light socket!") var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread s.set_up(3, 1, src) @@ -394,34 +419,57 @@ var/area/A = get_area(src) return A.lightswitch && A.power_light -/obj/machinery/light/proc/flicker(amount = rand(10, 20)) - if(flickering) +///flicker lights on and off +/obj/machinery/light/proc/flicker(toggle_flicker = FALSE) + if(!has_power()) + lightambient.stop(src) return - flickering = TRUE - spawn(0) - if(light_on && status == LIGHT_OK) - for(var/i = 0; i < amount; i++) - if(status != LIGHT_OK) - break - update(FALSE) - sleep(rand(5, 15)) - update(FALSE) + if(toggle_flicker) + if(status != LIGHT_OK) + addtimer(CALLBACK(src, PROC_REF(flicker), TRUE), flicker_time) + return + flickering = !flickering + if(flickering) + lightambient.start(src) + else + lightambient.stop(src) + if(random_flicker) + flicker_time = rand(flicker_time_lower_min, flicker_time_upper_max) + if(status != LIGHT_OK) + lightambient.stop(src) flickering = FALSE + addtimer(CALLBACK(src, PROC_REF(flicker), TRUE), flicker_time) + return + light_flicker_state = !light_flicker_state + if(!light_flicker_state) + flick("[base_icon_state]_flick_off", src) + //delay the power change long enough to get the flick() animation off + addtimer(CALLBACK(src, PROC_REF(flicker_power_state)), 0.3 SECONDS) + else + flick("[base_icon_state]_flick_on", src) + addtimer(CALLBACK(src, PROC_REF(flicker_power_state)), 0.3 SECONDS) + flicker_time = flicker_time * 2 //for effect it's best if the amount of time we spend off is more than the time we spend on + if(!flickering) + return + addtimer(CALLBACK(src, PROC_REF(flicker)), flicker_time) -// ai attack - make lights flicker, because why not - -/obj/machinery/light/attack_ai(mob/user) - flicker(1) - +///proc to toggle power on and off for light +/obj/machinery/light/proc/flicker_power_state(turn_on = TRUE, turn_off = FALSE) + if(!light_flicker_state) + pick(playsound(loc, 'sound/effects/lightfizz.ogg', 10, TRUE), playsound(loc, 'sound/effects/lightfizz2.ogg', 10, TRUE), playsound(loc, 'sound/effects/lightfizz3.ogg', 10, TRUE), playsound(loc, 'sound/effects/lightfizz4.ogg', 10, TRUE), playsound(loc, 'sound/effects/lightfizz5.ogg', 10, TRUE), playsound(loc, 'sound/effects/lightfizz6.ogg', 10, TRUE)) + update(FALSE) + else + pick(playsound(loc, 'sound/effects/lightfizz.ogg', 10, TRUE), playsound(loc, 'sound/effects/lightfizz2.ogg', 10, TRUE), playsound(loc, 'sound/effects/lightfizz3.ogg', 10, TRUE), playsound(loc, 'sound/effects/lightfizz4.ogg', 10, TRUE), playsound(loc, 'sound/effects/lightfizz5.ogg', 10, TRUE), playsound(loc, 'sound/effects/lightfizz6.ogg', 10, TRUE)) + turn_light(null, FALSE) //Xenos smashing lights -/obj/machinery/light/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/machinery/light/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return if(status == 2) //Ignore if broken. return FALSE - X.do_attack_animation(src, ATTACK_EFFECT_SMASH) - X.visible_message(span_danger("\The [X] smashes [src]!"), \ + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_SMASH) + xeno_attacker.visible_message(span_danger("\The [xeno_attacker] smashes [src]!"), \ span_danger("We smash [src]!"), null, 5) broken() //Smashola! @@ -538,6 +586,9 @@ // called when area power state changes /obj/machinery/light/power_change() var/area/A = get_area(src) + if(flickering) + lightambient.start(src) + addtimer(CALLBACK(src, PROC_REF(flicker)), flicker_time) turn_light(null, (A.lightswitch && A.power_light)) // called when on fire @@ -656,6 +707,8 @@ // if a syringe, can inject phoron to make it explode /obj/item/light_bulb/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/reagent_containers/syringe)) var/obj/item/reagent_containers/syringe/S = I diff --git a/code/modules/power/pipecleaners.dm b/code/modules/power/pipecleaners.dm index 15f2790b81782..2da0c72f9553e 100644 --- a/code/modules/power/pipecleaners.dm +++ b/code/modules/power/pipecleaners.dm @@ -107,7 +107,7 @@ By design, d1 is the smallest direction and d2 is the highest return ..() // then go ahead and delete the pipe_cleaner /obj/structure/pipe_cleaner/deconstruct(disassembled = TRUE) - if(!(flags_atom & NODECONSTRUCT)) + if(!(atom_flags & NODECONSTRUCT)) var/turf/T = get_turf(loc) if(T) stored.forceMove(T) @@ -120,10 +120,14 @@ By design, d1 is the smallest direction and d2 is the highest // General procedures /////////////////////////////////// -/obj/structure/pipe_cleaner/update_icon() +/obj/structure/pipe_cleaner/update_icon_state() + . = ..() icon_state = "[d1]-[d2]" + +/obj/structure/pipe_cleaner/update_icon() color = null add_atom_colour(pipe_cleaner_color, FIXED_COLOUR_PRIORITY) + return ..() // Items usable on a pipe_cleaner : // - Wirecutters : cut it duh ! @@ -183,8 +187,8 @@ By design, d1 is the smallest direction and d2 is the highest w_class = WEIGHT_CLASS_SMALL throw_speed = 3 throw_range = 5 - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT attack_verb = list("whipped", "lashed", "disciplined", "flogged") singular_name = "pipe cleaner piece" usesound = 'sound/items/deconstruct.ogg' @@ -206,11 +210,18 @@ By design, d1 is the smallest direction and d2 is the highest /////////////////////////////////// -/obj/item/stack/pipe_cleaner_coil/update_icon() +/obj/item/stack/pipe_cleaner_coil/update_icon_state() + . = ..() icon_state = "[initial(item_state)][amount < 3 ? amount : ""]" + +/obj/item/stack/pipe_cleaner_coil/update_name(updates) + . = ..() name = "pipe cleaner [amount < 3 ? "piece" : "coil"]" + +/obj/item/stack/pipe_cleaner_coil/update_icon() color = null add_atom_colour(pipe_cleaner_color, FIXED_COLOUR_PRIORITY) + return ..() /obj/item/stack/pipe_cleaner_coil/attack_hand(mob/user) . = ..() diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 598cd7880ea1b..b8c8061d08e69 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -30,11 +30,11 @@ record_generator_sabotages(user) return TRUE -/obj/machinery/power/port_gen/attack_alien(mob/living/carbon/xenomorph/X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) +/obj/machinery/power/port_gen/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) . = ..() if(!.) return FALSE - record_generator_sabotages(X) + record_generator_sabotages(xeno_attacker) return TRUE /obj/machinery/power/port_gen/should_have_node() @@ -70,6 +70,7 @@ soundloop.start() /obj/machinery/power/port_gen/update_icon_state() + . = ..() icon_state = "[base_icon]" /obj/machinery/power/port_gen/process() diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 3de0d90d94e6a..b68e6c03d0d45 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -132,6 +132,8 @@ //almost never called, overwritten by all power machines but terminal and generator /obj/machinery/power/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(iscablecoil(I)) var/obj/item/stack/cable_coil/coil = I diff --git a/code/modules/power/power_monitor.dm b/code/modules/power/power_monitor.dm index 1c2875e9f34dc..a6c798f17f872 100644 --- a/code/modules/power/power_monitor.dm +++ b/code/modules/power/power_monitor.dm @@ -87,6 +87,7 @@ set_light(initial(light_range)) /obj/machinery/power/monitor/update_icon_state() + . = ..() if(machine_stat & (BROKEN|DISABLED)) icon_state = "[initial(icon_state)]_broken" else @@ -105,6 +106,8 @@ //copied from computer.dm /obj/machinery/power/monitor/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(isscrewdriver(I) && circuit) playsound(loc, 'sound/items/screwdriver.ogg', 25, 1) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index db94f65d73827..767d3d16ed456 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -188,6 +188,8 @@ /obj/machinery/power/smes/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(isscrewdriver(I)) TOGGLE_BITFIELD(machine_stat, PANEL_OPEN) diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm index c9bd9c432140b..19d68ec5a9bd7 100644 --- a/code/modules/power/smes_construction.dm +++ b/code/modules/power/smes_construction.dm @@ -168,12 +168,10 @@ A.set_broken() // Failing SMES has special icon overlay. -/obj/machinery/power/smes/buildable/update_icon() - if (failing) - overlays.Cut() - overlays += image('icons/obj/power.dmi', "smes_crit") - else - ..() +/obj/machinery/power/smes/buildable/update_overlays() + . = ..() + if(failing) + . += image('icons/obj/power.dmi', "smes_crit") /obj/machinery/power/smes/buildable/attackby(obj/item/I, mob/user, params) // No more disassembling of overloaded SMESs. You broke it, now enjoy the consequences. @@ -225,8 +223,6 @@ M.state = 2 M.icon_state = "box_1" for(var/obj/O in component_parts) - if(O.reliability != 100 && crit_fail) - O.crit_fail = TRUE O.forceMove(loc) qdel(src) diff --git a/code/modules/projectiles/ammo_datums.dm b/code/modules/projectiles/ammo_datums.dm index 5cf59ed867aec..3b56bf133821e 100644 --- a/code/modules/projectiles/ammo_datums.dm +++ b/code/modules/projectiles/ammo_datums.dm @@ -1,5 +1,9 @@ #define DEBUG_STAGGER_SLOWDOWN 0 +/*! + * TODO SPLIT THIS FILE GODDAM + */ + GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/facehugger, /obj/alien/egg, /obj/structure/mineral_door, /obj/alien/resin, /obj/structure/bed/nest))) //For sticky/acid spit /datum/ammo @@ -60,13 +64,13 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh ///How far the bullet can travel before incurring a chance of hitting barricades; normally 1. var/barricade_clear_distance = 1 ///Does this have an override for the armor type the ammo should test? Bullet by default - var/armor_type = "bullet" + var/armor_type = BULLET ///How many stacks of sundering to apply to a mob on hit var/sundering = 0 ///how much damage airbursts do to mobs around the target, multiplier of the bullet's damage var/airburst_multiplier = 0.1 ///What kind of behavior the ammo has - var/flags_ammo_behavior = NONE + var/ammo_behavior_flags = NONE ///Determines what color our bullet will be when it flies var/bullet_color = COLOR_WHITE ///If this ammo is hitscan, the icon of beam coming out from the gun @@ -82,7 +86,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh ///greyscale color for the projectile associated with the ammo var/projectile_greyscale_colors = null ///Multiplier for deflagrate chance - var/deflagrate_multiplier = 1 + var/deflagrate_multiplier = 0.9 ///Flat damage caused if fire_burst is triggered by deflagrate var/fire_burst_damage = 10 ///Base fire stacks added on hit if the projectile has AMMO_INCENDIARY @@ -108,7 +112,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh return ///Special effects for leaving a turf. Only called if the projectile has AMMO_LEAVE_TURF enabled -/datum/ammo/proc/on_leave_turf(turf/T, atom/firer, obj/projectile/proj) +/datum/ammo/proc/on_leave_turf(turf/T, obj/projectile/proj) return ///Handles CC application on the victim @@ -163,19 +167,19 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh if(iscarbon(victim)) var/mob/living/carbon/carbon_victim = victim #if DEBUG_STAGGER_SLOWDOWN - to_chat(world, span_debuginfo("Damage: Initial stagger is: [target.IsStaggered()]")) + to_chat(world, span_debuginfo("Damage: Initial stagger is: [carbon_victim.AmountStaggered()]")) #endif if(!HAS_TRAIT(carbon_victim, TRAIT_STAGGER_RESISTANT)) //Some mobs like the Queen are immune to projectile stagger - carbon_victim.adjust_stagger(stagger) + carbon_victim.Stagger(stagger) #if DEBUG_STAGGER_SLOWDOWN - to_chat(world, span_debuginfo("Damage: Final stagger is: [target.IsStaggered()]")) + to_chat(world, span_debuginfo("Damage: Final stagger is: [carbon_victim.AmountStaggered()]")) #endif #if DEBUG_STAGGER_SLOWDOWN - to_chat(world, span_debuginfo("Damage: Initial slowdown is: [target.slowdown]")) + to_chat(world, span_debuginfo("Damage: Initial slowdown is: [carbon_victim.slowdown]")) #endif carbon_victim.add_slowdown(slowdown) #if DEBUG_STAGGER_SLOWDOWN - to_chat(world, span_debuginfo("Damage: Final slowdown is: [target.slowdown]")) + to_chat(world, span_debuginfo("Damage: Final slowdown is: [carbon_victim.slowdown]")) #endif to_chat(victim, "[impact_message]") //Summarize all the bad shit that happened @@ -188,7 +192,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh continue victim.visible_message(span_danger("[victim] is hit by backlash from \a [proj.name]!"), isxeno(victim) ? span_xenodanger("We are hit by backlash from \a [proj.name]!") : span_highdanger("You are hit by backlash from \a [proj.name]!")) - victim.apply_damage(proj.damage * proj.airburst_multiplier, proj.ammo.damage_type, blocked = armor_type, updating_health = TRUE) + victim.apply_damage(proj.damage * airburst_multiplier, proj.ammo.damage_type, blocked = armor_type, updating_health = TRUE) ///handles the probability of a projectile hit to trigger fire_burst, based off actual damage done /datum/ammo/proc/deflagrate(atom/target, obj/projectile/proj) @@ -217,12 +221,16 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh //Damages the victims, inflicts brief stagger+slow, and ignites victim.apply_damage(fire_burst_damage, BURN, blocked = FIRE, updating_health = TRUE) - staggerstun(victim, proj, 30, stagger = 1 SECONDS, slowdown = 0.5) + staggerstun(victim, proj, 30, stagger = 0.5 SECONDS, slowdown = 0.5) victim.adjust_fire_stacks(5) victim.IgniteMob() - -/datum/ammo/proc/fire_bonus_projectiles(obj/projectile/main_proj, atom/shooter, atom/source, range, speed, angle, target, origin_override) +/** + * Fires additional projectiles, generally considered to still be originating from a gun + * Such a buckshot + * origin_override used to have the new projectile(s) originate from a different source than the main projectile +*/ +/datum/ammo/proc/fire_bonus_projectiles(obj/projectile/main_proj, mob/living/shooter, atom/source, range, speed, angle, target, origin_override) //todo: Combine these procs with extra args or something, as they are quite similar var/effect_icon = "" var/proj_type = /obj/projectile if(istype(main_proj, /obj/projectile/hitscan)) @@ -249,7 +257,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh new_proj.fire_at(target, shooter, source, range, speed, new_angle, TRUE, loc_override = origin_override) ///A variant of Fire_bonus_projectiles without fixed scatter and no link between gun and bonus_projectile accuracy -/datum/ammo/proc/fire_directionalburst(obj/projectile/main_proj, atom/shooter, atom/source, projectile_amount, range, speed, angle, target) +/datum/ammo/proc/fire_directionalburst(obj/projectile/main_proj, mob/living/shooter, atom/source, projectile_amount, range, speed, angle, target) var/effect_icon = "" var/proj_type = /obj/projectile if(istype(main_proj, /obj/projectile/hitscan)) @@ -265,7 +273,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh if(isgun(source)) var/obj/item/weapon/gun/gun = source - gun.apply_gun_modifiers(new_proj, target, shooter) + gun.apply_gun_modifiers(new_proj, target) //Scatter here is how many degrees extra stuff deviate from the main projectile's firing angle. Fully randomised with no 45 degree cap like normal bullets var/f = (i-1) @@ -274,7 +282,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh new_angle += 360 if(new_angle > 360) new_angle -= 360 - new_proj.fire_at(target, main_proj.loc, source, range, speed, new_angle, TRUE) + new_proj.fire_at(target, shooter, main_proj.loc, range, speed, new_angle, TRUE) /datum/ammo/proc/drop_flame(turf/T) if(!istype(T)) @@ -295,9 +303,6 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh ///bounces the projectile by creating a new projectile and calculating an angle of reflection /datum/ammo/proc/reflect(turf/T, obj/projectile/proj, scatter_variance) - if(!bonus_projectiles_type) - return - var/new_range = proj.proj_max_range - proj.distance_travelled if(new_range <= 0) return @@ -322,8 +327,8 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh new_angle -= 360 bonus_projectiles_amount = 1 - fire_bonus_projectiles(proj, T, proj.shot_from, new_range, proj.projectile_speed, new_angle, null, get_step(T, dir_to_proj)) - bonus_projectiles_amount = 0 + fire_bonus_projectiles(proj, null, proj.shot_from, new_range, proj.projectile_speed, new_angle, null, get_step(T, dir_to_proj)) + bonus_projectiles_amount = initial(bonus_projectiles_amount) /* //================================================ @@ -334,7 +339,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet name = "default bullet" icon_state = "bullet" - flags_ammo_behavior = AMMO_BALLISTIC + ammo_behavior_flags = AMMO_BALLISTIC sound_hit = "ballistic_hit" sound_armor = "ballistic_armor" sound_miss = "ballistic_miss" @@ -357,7 +362,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "pistol bullet" hud_state = "pistol" hud_state_empty = "pistol_empty" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC damage = 20 penetration = 5 accurate_range = 5 @@ -452,7 +457,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh hud_state = "pistol_fire" damage_type = BURN shrapnel_chance = 0 - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_INCENDIARY + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_INCENDIARY damage = 20 /datum/ammo/bullet/pistol/squash @@ -471,7 +476,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh hud_state_empty = "monkey_empty" ping = null //no bounce off. damage_type = BURN - flags_ammo_behavior = AMMO_INCENDIARY|AMMO_IGNORE_ARMOR + ammo_behavior_flags = AMMO_INCENDIARY shell_speed = 2 damage = 15 @@ -492,7 +497,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh hud_state = "revolver" hud_state_empty = "revolver_empty" handful_amount = 7 - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC damage = 45 penetration = 10 sundering = 3 @@ -597,7 +602,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "submachinegun bullet" hud_state = "smg" hud_state_empty = "smg_empty" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC accuracy_var_low = 7 accuracy_var_high = 7 damage = 20 @@ -620,16 +625,38 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/smg/hollow name = "hollow-point submachinegun bullet" hud_state = "pistol_squash" - flags_ammo_behavior = AMMO_BALLISTIC + ammo_behavior_flags = AMMO_BALLISTIC damage = 35 penetration = 0 damage_falloff = 3 shrapnel_chance = 45 +/datum/ammo/bullet/smg/squash + name = "squash-head submachinegun bullet" + hud_state = "pistol_squash" + ammo_behavior_flags = AMMO_BALLISTIC + damage = 15 + penetration = 15 + armor_type = BOMB + sundering = 1 + damage_falloff = 2 + shrapnel_chance = 0 + ///shatter effection duration when hitting mobs + var/shatter_duration = 3 SECONDS + +/datum/ammo/bullet/smg/squash/on_hit_mob(mob/M, obj/projectile/proj) + if(!isliving(M)) + return + + var/mob/living/living_victim = M + living_victim.apply_status_effect(STATUS_EFFECT_SHATTER, shatter_duration) + + + /datum/ammo/bullet/smg/incendiary name = "incendiary submachinegun bullet" hud_state = "smg_fire" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_INCENDIARY + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_INCENDIARY damage = 18 penetration = 0 @@ -648,6 +675,12 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh return living_victim.apply_radiation(2, 2) +/datum/ammo/bullet/smg/heavy + name = "heavy submachinegun bullet" + damage = 27.5 + penetration = 10 + sundering = 1 + /datum/ammo/bullet/smg/mech name = "super-heavy submachinegun bullet" damage = 20 @@ -664,7 +697,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "rifle bullet" hud_state = "rifle" hud_state_empty = "rifle_empty" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC accurate_range = 12 damage = 25 penetration = 5 @@ -706,7 +739,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh hud_state = "rifle_fire" damage_type = BURN shrapnel_chance = 0 - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_INCENDIARY + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_INCENDIARY accuracy = -10 /datum/ammo/bullet/rifle/machinegun @@ -731,17 +764,17 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh hud_state = "hivelo" hud_state_empty = "hivelo_empty" damage_falloff = 0 - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC accurate_range = 15 damage = 40 - penetration = 20 - sundering = 10 + penetration = 30 + sundering = 5 bullet_color = COLOR_SOFT_RED /datum/ammo/bullet/rifle/tx8/incendiary name = "high velocity incendiary bullet" hud_state = "hivelo_fire" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_INCENDIARY|AMMO_SUNDERING|AMMO_PASS_THROUGH_MOB + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_INCENDIARY|AMMO_PASS_THROUGH_MOB damage = 25 penetration = 20 sundering = 2.5 @@ -751,8 +784,8 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "high velocity impact bullet" hud_state = "hivelo_impact" damage = 30 - penetration = 10 - sundering = 12.5 + penetration = 20 + sundering = 6.5 /datum/ammo/bullet/rifle/tx8/impact/on_hit_mob(mob/M, obj/projectile/P) staggerstun(M, P, max_range = 14, slowdown = 1, knockback = 1) @@ -760,7 +793,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/rifle/mpi_km name = "crude heavy rifle bullet" hud_state = "rifle_crude" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC damage = 30 penetration = 15 sundering = 1.75 @@ -770,7 +803,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh hud_state = "hivelo" hud_state_empty = "hivelo_empty" damage_falloff = 0.5 - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC accurate_range = 25 accurate_range_min = 6 max_range = 40 @@ -789,7 +822,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "light marksman bullet" hud_state = "hivelo" hud_state_empty = "hivelo_empty" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC penetration = 15 damage = 32.5 sundering = 1.25 @@ -833,7 +866,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "shotgun slug" handful_icon_state = "shotgun slug" hud_state = "shotgun_slug" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC shell_speed = 3 max_range = 15 damage = 100 @@ -849,7 +882,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh handful_icon_state = "beanbag slug" icon_state = "beanbag" hud_state = "shotgun_beanbag" - flags_ammo_behavior = AMMO_BALLISTIC + ammo_behavior_flags = AMMO_BALLISTIC damage = 15 max_range = 15 shrapnel_chance = 0 @@ -863,7 +896,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh handful_icon_state = "incendiary slug" hud_state = "shotgun_fire" damage_type = BRUTE - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_INCENDIARY|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_INCENDIARY max_range = 15 damage = 70 penetration = 15 @@ -878,7 +911,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh handful_icon_state = "shotgun flechette shell" icon_state = "flechette" hud_state = "shotgun_flechette" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC bonus_projectiles_type = /datum/ammo/bullet/shotgun/flechette/flechette_spread bonus_projectiles_amount = 2 bonus_projectiles_scatter = 3 @@ -913,6 +946,22 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/shotgun/buckshot/on_hit_mob(mob/M,obj/projectile/P) staggerstun(M, P, weaken = 2 SECONDS, stagger = 2 SECONDS, knockback = 2, slowdown = 0.5, max_range = 3) +/datum/ammo/bullet/hefa_buckshot + name = "hefa fragment" + handful_icon_state = "shotgun buckshot shell" + icon_state = "buckshot" + hud_state = "shotgun_buckshot" + accuracy_var_low = 9 + accuracy_var_high = 9 + accurate_range = 3 + max_range = 10 + shrapnel_chance = 15 + damage = 30 + damage_falloff = 3 + +/datum/ammo/bullet/hefa_buckshot/on_hit_mob(mob/mob_hit, obj/projectile/projectile) + staggerstun(mob_hit, projectile, knockback = 2, max_range = 4) + /datum/ammo/bullet/shotgun/spread name = "additional buckshot" icon_state = "buckshot" @@ -928,7 +977,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "shotgun explosive shell" handful_icon_state = "shotgun tracker shell" hud_state = "shotgun_tracker" - flags_ammo_behavior = AMMO_BALLISTIC + ammo_behavior_flags = AMMO_BALLISTIC bonus_projectiles_type = /datum/ammo/bullet/shotgun/frag/frag_spread bonus_projectiles_amount = 2 bonus_projectiles_scatter = 6 @@ -1010,7 +1059,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh handful_icon_state = "shotgun flechette shell" icon_state = "flechette" hud_state = "shotgun_flechette" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC bonus_projectiles_type = /datum/ammo/bullet/shotgun/tx15_flechette/spread bonus_projectiles_amount = 4 bonus_projectiles_scatter = 2 @@ -1027,7 +1076,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "shotgun slug" handful_icon_state = "shotgun slug" hud_state = "shotgun_slug" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC shell_speed = 3 max_range = 15 damage = 60 @@ -1060,7 +1109,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh handful_icon_state = "light shotgun sabot shell" icon_state = "shotgun_slug" hud_state = "shotgun_sabot" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC shell_speed = 5 max_range = 30 damage = 50 @@ -1128,7 +1177,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh hud_state = "sniper" hud_state_empty = "sniper_empty" damage_falloff = 0 - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SNIPER|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_SNIPER accurate_range_min = 7 shell_speed = 4 accurate_range = 30 @@ -1142,7 +1191,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh hud_state = "sniper_fire" accuracy = 0 damage_type = BURN - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_INCENDIARY|AMMO_SNIPER|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_INCENDIARY|AMMO_SNIPER accuracy_var_high = 7 max_range = 20 damage = 70 @@ -1158,7 +1207,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh airburst_multiplier = 0.5 /datum/ammo/bullet/sniper/flak/on_hit_mob(mob/victim, obj/projectile/proj) - staggerstun(victim, proj, max_range = 30, slowdown = 2) + staggerstun(victim, proj, max_range = 30) airburst(victim, proj) /datum/ammo/bullet/sniper/svd @@ -1175,7 +1224,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh handful_icon_state = "crude heavy sniper bullet" hud_state = "sniper_crude" handful_amount = 5 - flags_ammo_behavior = AMMO_BALLISTIC + ammo_behavior_flags = AMMO_BALLISTIC damage = 120 penetration = 20 accurate_range_min = 0 @@ -1192,7 +1241,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/sniper/elite name = "supersonic sniper bullet" hud_state = "sniper_supersonic" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC accuracy = 20 damage = 100 penetration = 60 @@ -1201,7 +1250,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/sniper/pfc name = "high caliber rifle bullet" hud_state = "sniper_heavy" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_SNIPER + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_SNIPER damage = 80 penetration = 30 sundering = 7.5 @@ -1210,7 +1259,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/sniper/pfc/flak name = "high caliber flak rifle bullet" hud_state = "sniper_heavy_flak" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_SNIPER + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_SNIPER damage = 40 penetration = 10 sundering = 10 @@ -1221,9 +1270,9 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/sniper/auto - name = "high caliber rifle bullet" + name = "low velocity high caliber rifle bullet" hud_state = "sniper_auto" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_SNIPER + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_SNIPER damage = 50 penetration = 30 sundering = 2 @@ -1232,7 +1281,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/sniper/clf_heavyrifle name = "high velocity incendiary sniper bullet" handful_icon_state = "ptrs" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_INCENDIARY|AMMO_SNIPER|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_INCENDIARY|AMMO_SNIPER hud_state = "sniper_fire" accurate_range_min = 4 shell_speed = 5 @@ -1242,7 +1291,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/sniper/mech name = "light anti-tank bullet" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_SNIPER|AMMO_IFF + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_SNIPER|AMMO_IFF damage = 100 penetration = 35 sundering = 0 @@ -1259,7 +1308,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh bullet_color = COLOR_SOFT_RED //Red bullets to indicate friendly fire restriction hud_state = "smartgun" hud_state_empty = "smartgun_empty" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC accurate_range = 12 damage = 20 penetration = 15 @@ -1270,7 +1319,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh bullet_color = COLOR_SOFT_RED //Red bullets to indicate friendly fire restriction hud_state = "smartgun_minigun" hud_state_empty = "smartgun_empty" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC accurate_range = 12 damage = 10 penetration = 25 @@ -1282,7 +1331,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh bullet_color = COLOR_SOFT_RED //Red bullets to indicate friendly fire restriction hud_state = "smartgun" hud_state_empty = "smartgun_empty" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC damage = 40 max_range = 40 penetration = 30 @@ -1292,13 +1341,25 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh accurate_range = 25 accurate_range_min = 3 +/datum/ammo/bullet/cupola + name = "cupola bullet" + bullet_color = COLOR_SOFT_RED //Red bullets to indicate friendly fire restriction + hud_state = "smartgun" + hud_state_empty = "smartgun_empty" + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_IFF + accurate_range = 12 + damage = 30 + penetration = 10 + sundering = 1 + /datum/ammo/bullet/spottingrifle name = "smart spotting bullet" bullet_color = COLOR_SOFT_RED //Red bullets to indicate friendly fire restriction hud_state = "spotrifle" hud_state_empty = "smartgun_empty" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC damage = 50 + max_range = 40 penetration = 25 sundering = 5 shell_speed = 4 @@ -1310,7 +1371,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh sundering = 0.5 /datum/ammo/bullet/spottingrifle/highimpact/on_hit_mob(mob/M,obj/projectile/P) - staggerstun(M, P, stagger = 1, slowdown = 1, max_range = 12) + staggerstun(M, P, stagger = 1 SECONDS, slowdown = 1, max_range = 12) /datum/ammo/bullet/spottingrifle/heavyrubber name = "smart heavy-rubber spotting bullet" @@ -1319,7 +1380,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh sundering = 0.5 /datum/ammo/bullet/spottingrifle/heavyrubber/on_hit_mob(mob/M,obj/projectile/P) - staggerstun(M, P, weaken = 1, slowdown = 1, max_range = 12) + staggerstun(M, P, weaken = 1 SECONDS, slowdown = 1, max_range = 12) /datum/ammo/bullet/spottingrifle/plasmaloss name = "smart tanglefoot spotting bullet" @@ -1354,7 +1415,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/spottingrifle/incendiary name = "smart incendiary spotting bullet" hud_state = "spotrifle_incend" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_INCENDIARY + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_INCENDIARY damage_type = BURN damage = 10 sundering = 0.5 @@ -1364,7 +1425,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh bullet_color = COLOR_SOFT_RED hud_state = "rifle" hud_state_empty = "rifle_empty" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_SENTRY + ammo_behavior_flags = AMMO_BALLISTIC accurate_range = 10 damage = 25 penetration = 20 @@ -1382,13 +1443,72 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "small caliber autocannon bullet" damage = 20 penetration = 20 - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SENTRY + ammo_behavior_flags = AMMO_BALLISTIC +/datum/ammo/bullet/turret/sniper + name = "antimaterial bullet" + bullet_color = COLOR_SOFT_RED + accurate_range = 21 + damage = 80 + penetration = 50 + sundering = 5 + +/datum/ammo/bullet/turret/buckshot + name = "turret buckshot shell" + icon_state = "buckshot" + hud_state = "shotgun_buckshot" + bonus_projectiles_type = /datum/ammo/bullet/turret/spread + bonus_projectiles_amount = 6 + bonus_projectiles_scatter = 5 + max_range = 10 + damage = 20 + penetration = 40 + damage_falloff = 1 + +/datum/ammo/bullet/turret/buckshot/on_hit_mob(mob/M,obj/projectile/P) + staggerstun(M, P, knockback = 1, max_range = 4) + +/datum/ammo/bullet/turret/spread + name = "additional buckshot" + max_range = 10 + damage = 20 + penetration = 40 + damage_falloff = 1 + +/datum/ammo/flamer + name = "flame turret glob" + icon_state = "pulse0" + hud_state = "flame" + hud_state_empty = "flame_empty" + damage_type = BURN + ammo_behavior_flags = AMMO_INCENDIARY|AMMO_FLAME + armor_type = FIRE + damage = 30 + max_range = 7 + bullet_color = LIGHT_COLOR_FIRE + +/datum/ammo/flamer/drop_nade(turf/T) + flame_radius(2, T) + playsound(T, 'sound/weapons/guns/fire/flamethrower2.ogg', 50, 1, 4) + + +/datum/ammo/flamer/on_hit_mob(mob/M, obj/projectile/P) + drop_nade(get_turf(M)) + +/datum/ammo/flamer/on_hit_obj(obj/O, obj/projectile/P) + drop_nade(O.density ? P.loc : O.loc) + +/datum/ammo/flamer/on_hit_turf(turf/T, obj/projectile/P) + drop_nade(T.density ? P.loc : T) + +/datum/ammo/flamer/do_at_max_range(turf/T, obj/projectile/P) + drop_nade(T.density ? P.loc : T) + /datum/ammo/bullet/machinegun //Adding this for the MG Nests (~Art) name = "machinegun bullet" icon_state = "bullet" // Keeping it bog standard with the turret but allows it to be changed. - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC hud_state = "minigun" hud_state_empty = "smartgun_empty" accurate_range = 12 @@ -1402,7 +1522,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "minigun bullet" hud_state = "minigun" hud_state_empty = "smartgun_empty" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC accuracy_var_low = 3 accuracy_var_high = 3 accurate_range = 5 @@ -1417,11 +1537,20 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh penetration = 10 sundering = 0.5 +/datum/ammo/bullet/minigun/ltaap + name = "chaingun bullet" + damage = 30 + penetration = 10 + sundering = 0 + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_IFF + damage_falloff = 2 + accuracy = 80 + /datum/ammo/bullet/auto_cannon name = "autocannon high-velocity bullet" hud_state = "minigun" hud_state_empty = "smartgun_empty" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_PASS_THROUGH_TURF|AMMO_PASS_THROUGH_MOVABLE + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_PASS_THROUGH_TURF|AMMO_PASS_THROUGH_MOVABLE accurate_range_min = 6 accuracy_var_low = 3 accuracy_var_high = 3 @@ -1430,7 +1559,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh sundering = 1 max_range = 35 ///Bonus flat damage to walls, balanced around resin walls. - var/autocannon_wall_bonus = 20 + var/autocannon_wall_bonus = 50 /datum/ammo/bullet/auto_cannon/on_hit_turf(turf/T, obj/projectile/P) P.proj_max_range -= 20 @@ -1449,13 +1578,13 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/auto_cannon/flak name = "autocannon smart-detonating bullet" hud_state = "sniper_flak" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_EXPLOSIVE + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_TARGET_TURF damage = 50 penetration = 30 sundering = 5 max_range = 30 airburst_multiplier = 1 - autocannon_wall_bonus = 5 + autocannon_wall_bonus = 25 /datum/ammo/bullet/auto_cannon/flak/on_hit_mob(mob/victim, obj/projectile/proj) airburst(victim, proj) @@ -1467,7 +1596,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "armor piercing railgun slug" hud_state = "railgun_ap" icon_state = "blue_bullet" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_PASS_THROUGH_TURF|AMMO_PASS_THROUGH_MOVABLE + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_PASS_THROUGH_TURF|AMMO_PASS_THROUGH_MOVABLE shell_speed = 4 max_range = 14 damage = 150 @@ -1494,7 +1623,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/railgun/smart name = "smart armor piercing railgun slug" hud_state = "railgun_smart" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_PASS_THROUGH_TURF|AMMO_PASS_THROUGH_MOVABLE|AMMO_IFF + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_PASS_THROUGH_TURF|AMMO_PASS_THROUGH_MOVABLE|AMMO_IFF damage = 100 penetration = 20 sundering = 20 @@ -1506,7 +1635,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "\improper APFSDS round" hud_state = "alloy_spike" icon_state = "blue_bullet" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_PASS_THROUGH_MOVABLE|AMMO_UNWIELDY + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_PASS_THROUGH_MOVABLE|AMMO_UNWIELDY shell_speed = 4 max_range = 14 damage = 150 @@ -1524,8 +1653,8 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh handful_amount = 3 ping = null //no bounce off. sound_bounce = "rocket_bounce" - flags_ammo_behavior = AMMO_EXPLOSIVE|AMMO_ROCKET|AMMO_SUNDERING - armor_type = "bomb" + ammo_behavior_flags = AMMO_TARGET_TURF|AMMO_SNIPER + armor_type = BOMB damage_falloff = 0.5 shell_speed = 2 accurate_range = 12 @@ -1593,6 +1722,13 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh handful_greyscale_colors = COLOR_AMMO_TANGLEFOOT projectile_greyscale_colors = COLOR_AMMO_TANGLEFOOT +/datum/ammo/tx54/smoke/acid + name = "20mm acid grenade" + hud_state = "grenade_acid" + bonus_projectiles_type = /datum/ammo/bullet/tx54_spread/smoke/acid + handful_greyscale_colors = COLOR_AMMO_ACID + projectile_greyscale_colors = COLOR_AMMO_ACID + /datum/ammo/tx54/razor name = "20mm razorburn grenade" hud_state = "grenade_razor" @@ -1629,7 +1765,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/tx54_spread name = "Shrapnel" icon_state = "flechette" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_PASS_THROUGH_MOB + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_PASS_THROUGH_MOB accuracy_var_low = 5 accuracy_var_high = 5 max_range = 4 @@ -1643,7 +1779,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/tx54_spread/incendiary name = "incendiary flechette" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_PASS_THROUGH_MOB|AMMO_INCENDIARY|AMMO_LEAVE_TURF + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_PASS_THROUGH_MOB|AMMO_INCENDIARY|AMMO_LEAVE_TURF damage = 15 penetration = 10 sundering = 1.5 @@ -1656,12 +1792,12 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh return T.ignite(5, 10) -/datum/ammo/bullet/tx54_spread/incendiary/on_leave_turf(turf/T, atom/firer, obj/projectile/proj) +/datum/ammo/bullet/tx54_spread/incendiary/on_leave_turf(turf/T, obj/projectile/proj) drop_flame(T) /datum/ammo/bullet/tx54_spread/smoke name = "chemical bomblet" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_PASS_THROUGH_MOB|AMMO_LEAVE_TURF + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_PASS_THROUGH_MOB|AMMO_LEAVE_TURF max_range = 3 damage = 5 penetration = 0 @@ -1682,7 +1818,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/tx54_spread/smoke/on_hit_mob(mob/M, obj/projectile/proj) return -/datum/ammo/bullet/tx54_spread/smoke/on_leave_turf(turf/T, atom/firer, obj/projectile/proj) +/datum/ammo/bullet/tx54_spread/smoke/on_leave_turf(turf/T, obj/projectile/proj) trail_spread_system.set_up(0, T) trail_spread_system.start() @@ -1692,9 +1828,12 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/tx54_spread/smoke/tangle trail_spread_system = /datum/effect_system/smoke_spread/plasmaloss +/datum/ammo/bullet/tx54_spread/smoke/acid + trail_spread_system = /datum/effect_system/smoke_spread/xeno/acid + /datum/ammo/bullet/tx54_spread/razor name = "chemical bomblet" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_PASS_THROUGH_MOB|AMMO_LEAVE_TURF + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_PASS_THROUGH_MOB|AMMO_LEAVE_TURF max_range = 4 damage = 5 penetration = 0 @@ -1720,7 +1859,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/tx54_spread/razor/on_hit_mob(mob/M, obj/projectile/proj) return -/datum/ammo/bullet/tx54_spread/razor/on_leave_turf(turf/T, atom/firer, obj/projectile/proj) +/datum/ammo/bullet/tx54_spread/razor/on_leave_turf(turf/T, obj/projectile/proj) chemical_payload.set_up(0, T, reagent_list, RAZOR_FOAM) chemical_payload.start() @@ -1743,7 +1882,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/micro_rail hud_state_empty = "grenade_empty_flash" handful_icon_state = "micro_grenade_airburst" - flags_ammo_behavior = AMMO_BALLISTIC + ammo_behavior_flags = AMMO_BALLISTIC shell_speed = 2 handful_amount = 3 max_range = 3 //failure to detonate if the target is too close @@ -1802,7 +1941,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/micro_rail_spread name = "Shrapnel" icon_state = "flechette" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_PASS_THROUGH_MOB + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_PASS_THROUGH_MOB accuracy_var_low = 5 accuracy_var_high = 5 max_range = 7 @@ -1816,7 +1955,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/micro_rail_spread/incendiary name = "incendiary flechette" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_PASS_THROUGH_MOB|AMMO_INCENDIARY|AMMO_LEAVE_TURF + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_PASS_THROUGH_MOB|AMMO_INCENDIARY|AMMO_LEAVE_TURF damage = 15 penetration = 5 sundering = 1.5 @@ -1830,14 +1969,14 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh return T.ignite(5, 10) -/datum/ammo/bullet/micro_rail_spread/incendiary/on_leave_turf(turf/T, atom/firer, obj/projectile/proj) +/datum/ammo/bullet/micro_rail_spread/incendiary/on_leave_turf(turf/T, obj/projectile/proj) if(prob(40)) drop_flame(T) /datum/ammo/micro_rail_cluster name = "bomblet" icon_state = "bullet" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_LEAVE_TURF + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_LEAVE_TURF sound_hit = "ballistic_hit" sound_armor = "ballistic_armor" sound_miss = "ballistic_miss" @@ -1879,7 +2018,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh var/obj/obj_victim = target obj_victim.take_damage(explosion_damage, BRUTE, BOMB) -/datum/ammo/micro_rail_cluster/on_leave_turf(turf/T, atom/firer, obj/projectile/proj) +/datum/ammo/micro_rail_cluster/on_leave_turf(turf/T, obj/projectile/proj) ///chance to detonate early, scales with distance and capped, to avoid lots of immediate detonations, and nothing reach max range respectively. var/detonate_probability = min(proj.distance_travelled * 4, 16) if(prob(detonate_probability)) @@ -1900,7 +2039,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/smoke_burst name = "micro smoke canister" icon_state = "bullet" - flags_ammo_behavior = AMMO_BALLISTIC + ammo_behavior_flags = AMMO_BALLISTIC sound_hit = "ballistic_hit" sound_armor = "ballistic_armor" sound_miss = "ballistic_miss" @@ -1943,8 +2082,8 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh handful_amount = 1 ping = null //no bounce off. sound_bounce = "rocket_bounce" - flags_ammo_behavior = AMMO_EXPLOSIVE|AMMO_ROCKET|AMMO_IFF - armor_type = "bomb" + ammo_behavior_flags = AMMO_TARGET_TURF|AMMO_SNIPER|AMMO_IFF + armor_type = BOMB damage_falloff = 0.5 shell_speed = 2 accurate_range = 12 @@ -1979,7 +2118,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/ags_spread name = "Shrapnel" icon_state = "flechette" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_PASS_THROUGH_MOB + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_PASS_THROUGH_MOB accuracy_var_low = 15 accuracy_var_high = 5 max_range = 6 @@ -1990,7 +2129,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/ags_spread/incendiary name = "White phosphorous shrapnel" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_INCENDIARY + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_INCENDIARY damage = 20 penetration = 10 sundering = 1.5 @@ -2018,7 +2157,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "high-velocity tungsten slug" hud_state = "railgun_ap" icon_state = "blue_bullet" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_PASS_THROUGH_MOVABLE + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_PASS_THROUGH_MOVABLE shell_speed = 5 max_range = 31 damage = 70 @@ -2044,8 +2183,8 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh hud_state_empty = "rocket_empty" ping = null //no bounce off. sound_bounce = "rocket_bounce" - flags_ammo_behavior = AMMO_EXPLOSIVE|AMMO_ROCKET|AMMO_SUNDERING - armor_type = "bomb" + ammo_behavior_flags = AMMO_TARGET_TURF|AMMO_SNIPER + armor_type = BOMB damage_falloff = 0 shell_speed = 2 accuracy = 40 @@ -2084,7 +2223,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/rocket/he/unguided damage = 100 - flags_ammo_behavior = AMMO_ROCKET|AMMO_SUNDERING // We want this one to specifically go over onscreen range. + ammo_behavior_flags = AMMO_SNIPER // We want this one to specifically go over onscreen range. /datum/ammo/rocket/he/unguided/drop_nade(turf/T) explosion(T, 0, 7, 0, 0, 2) @@ -2104,14 +2243,15 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/rocket/ltb name = "cannon round" icon_state = "ltb" - flags_ammo_behavior = AMMO_EXPLOSIVE|AMMO_ROCKET + ammo_behavior_flags = AMMO_TARGET_TURF|AMMO_SNIPER accurate_range = 15 max_range = 40 - penetration = 200 - damage = 300 + penetration = 50 + damage = 200 + hud_state = "bigshell_he" /datum/ammo/rocket/ltb/drop_nade(turf/T) - explosion(T, 0, 4, 6, 0, 7) + explosion(T, 0, 2, 5, 0, 3) /datum/ammo/rocket/mech name = "large high-explosive rocket" @@ -2123,16 +2263,15 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh explosion(T, 0, 0, 5, 0, 5) /datum/ammo/rocket/heavy_isg - name = "15cm round" + name = "8.8cm round" icon_state = "heavyrr" hud_state = "bigshell_he" hud_state_empty = "shell_empty" - flags_ammo_behavior = AMMO_ROCKET|AMMO_EXPLOSIVE - damage = 50 + ammo_behavior_flags = AMMO_SNIPER|AMMO_TARGET_TURF + damage = 100 penetration = 200 max_range = 30 shell_speed = 0.75 - accuracy = 30 accurate_range = 21 handful_amount = 1 @@ -2141,18 +2280,17 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/rocket/heavy_isg/unguided hud_state = "bigshell_he_unguided" - flags_ammo_behavior = AMMO_ROCKET + ammo_behavior_flags = AMMO_SNIPER /datum/ammo/bullet/heavy_isg_apfds - name = "15cm APFDS round" + name = "8.8cm APFDS round" icon_state = "apfds" hud_state = "bigshell_apfds" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_PASS_THROUGH_TURF|AMMO_PASS_THROUGH_MOVABLE - damage = 200 + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_PASS_THROUGH_TURF|AMMO_PASS_THROUGH_MOVABLE + damage = 275 penetration = 75 shell_speed = 7 accurate_range = 24 - accurate_range_min = 6 max_range = 35 /datum/ammo/bullet/isg_apfds/on_hit_turf(turf/T, obj/projectile/P) @@ -2169,8 +2307,8 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "white phosphorous rocket" icon_state = "rocket_wp" hud_state = "rocket_fire" - flags_ammo_behavior = AMMO_ROCKET|AMMO_INCENDIARY|AMMO_EXPLOSIVE|AMMO_SUNDERING - armor_type = "fire" + ammo_behavior_flags = AMMO_SNIPER|AMMO_INCENDIARY|AMMO_TARGET_TURF + armor_type = FIRE damage_type = BURN accuracy_var_low = 7 accurate_range = 15 @@ -2190,7 +2328,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/rocket/wp/quad name = "thermobaric rocket" hud_state = "rocket_thermobaric" - flags_ammo_behavior = AMMO_ROCKET + ammo_behavior_flags = AMMO_SNIPER damage = 40 penetration = 25 max_range = 30 @@ -2215,13 +2353,13 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "white phosphorous RPG" hud_state = "rpg_fire" icon_state = "rpg_incendiary" - flags_ammo_behavior = AMMO_ROCKET + ammo_behavior_flags = AMMO_SNIPER effect_radius = 5 /datum/ammo/rocket/wp/quad/ds name = "super thermobaric rocket" hud_state = "rocket_thermobaric" - flags_ammo_behavior = AMMO_ROCKET + ammo_behavior_flags = AMMO_SNIPER damage = 200 penetration = 75 max_range = 30 @@ -2229,7 +2367,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/rocket/wp/unguided damage = 100 - flags_ammo_behavior = AMMO_ROCKET|AMMO_INCENDIARY|AMMO_SUNDERING + ammo_behavior_flags = AMMO_SNIPER|AMMO_INCENDIARY effect_radius = 5 /datum/ammo/rocket/recoilless @@ -2237,8 +2375,8 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh icon_state = "recoilless_rifle_he" hud_state = "shell_he" hud_state_empty = "shell_empty" - flags_ammo_behavior = AMMO_EXPLOSIVE|AMMO_ROCKET|AMMO_SUNDERING - armor_type = "bomb" + ammo_behavior_flags = AMMO_TARGET_TURF|AMMO_SNIPER + armor_type = BOMB damage_falloff = 0 shell_speed = 2 accurate_range = 20 @@ -2254,7 +2392,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "HEAT shell" icon_state = "recoilless_rifle_heat" hud_state = "shell_heat" - flags_ammo_behavior = AMMO_ROCKET|AMMO_SUNDERING + ammo_behavior_flags = AMMO_SNIPER damage = 200 penetration = 100 sundering = 0 @@ -2265,7 +2403,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/rocket/recoilless/heat/mech //for anti mech use in HvH name = "HEAM shell" accuracy = -10 //Not designed for anti human use - flags_ammo_behavior = AMMO_ROCKET|AMMO_SUNDERING|AMMO_UNWIELDY + ammo_behavior_flags = AMMO_SNIPER|AMMO_UNWIELDY /datum/ammo/rocket/recoilless/heat/mech/on_hit_obj(obj/O, obj/projectile/P) drop_nade(get_turf(O)) @@ -2279,7 +2417,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "light explosive shell" icon_state = "recoilless_rifle_le" hud_state = "shell_le" - flags_ammo_behavior = AMMO_ROCKET|AMMO_SUNDERING //We want this to specifically go farther than onscreen range. + ammo_behavior_flags = AMMO_SNIPER //We want this to specifically go farther than onscreen range. accurate_range = 15 max_range = 20 damage = 75 @@ -2293,7 +2431,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "low velocity chemical shell" icon_state = "recoilless_rifle_smoke" hud_state = "shell_le" - flags_ammo_behavior = AMMO_ROCKET|AMMO_SUNDERING|AMMO_IFF //We want this to specifically go farther than onscreen range and pass through friendlies. + ammo_behavior_flags = AMMO_SNIPER|AMMO_IFF //We want this to specifically go farther than onscreen range and pass through friendlies. accurate_range = 21 max_range = 21 damage = 10 @@ -2327,7 +2465,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "low impact explosive shell" icon_state = "recoilless_rifle_le" hud_state = "shell_le" - flags_ammo_behavior = AMMO_ROCKET|AMMO_SUNDERING //We want this to specifically go farther than onscreen range. + ammo_behavior_flags = AMMO_SNIPER //We want this to specifically go farther than onscreen range. accurate_range = 15 max_range = 20 damage = 75 @@ -2348,7 +2486,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "high explosive RPG" icon_state = "rpg_he" hud_state = "rpg_he" - flags_ammo_behavior = AMMO_ROCKET|AMMO_SUNDERING + ammo_behavior_flags = AMMO_SNIPER accurate_range = 15 max_range = 20 damage = 80 @@ -2362,7 +2500,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "low impact RPG" icon_state = "rpg_le" hud_state = "rpg_le" - flags_ammo_behavior = AMMO_ROCKET|AMMO_SUNDERING + ammo_behavior_flags = AMMO_SNIPER accurate_range = 15 damage = 60 penetration = 10 @@ -2387,7 +2525,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh penetration = 100 sundering = 0 accuracy = -10 //Not designed for anti human use - flags_ammo_behavior = AMMO_ROCKET|AMMO_SUNDERING|AMMO_UNWIELDY + ammo_behavior_flags = AMMO_SNIPER|AMMO_UNWIELDY /datum/ammo/rocket/som/heat/on_hit_obj(obj/O, obj/projectile/P) drop_nade(get_turf(O)) @@ -2404,7 +2542,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh damage = 50 penetration = 10 ///Base strength of the rad effects - var/rad_strength = 25 + var/rad_strength = 20 ///Range for the maximum rad effects var/inner_range = 3 ///Range for the moderate rad effects @@ -2437,7 +2575,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh icon_state = "atgun" hud_state = "shell_heat" hud_state_empty = "shell_empty" - flags_ammo_behavior = AMMO_EXPLOSIVE|AMMO_ROCKET|AMMO_SUNDERING|AMMO_PASS_THROUGH_TURF + ammo_behavior_flags = AMMO_TARGET_TURF|AMMO_SNIPER|AMMO_PASS_THROUGH_TURF shell_speed = 2 damage = 90 penetration = 30 @@ -2454,7 +2592,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/rocket/atgun_shell/apcr name = "tungsten penetrator" hud_state = "shell_apcr" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_PASS_THROUGH_TURF|AMMO_PASS_THROUGH_MOVABLE + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_PASS_THROUGH_TURF|AMMO_PASS_THROUGH_MOVABLE shell_speed = 4 damage = 200 penetration = 70 @@ -2477,7 +2615,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/rocket/atgun_shell/he name = "low velocity high explosive shell" hud_state = "shell_he" - flags_ammo_behavior = AMMO_EXPLOSIVE|AMMO_ROCKET|AMMO_SUNDERING + ammo_behavior_flags = AMMO_TARGET_TURF|AMMO_SNIPER damage = 50 penetration = 50 sundering = 35 @@ -2491,7 +2629,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/rocket/atgun_shell/beehive name = "beehive shell" hud_state = "shell_le" - flags_ammo_behavior = AMMO_EXPLOSIVE|AMMO_ROCKET|AMMO_SUNDERING + ammo_behavior_flags = AMMO_TARGET_TURF|AMMO_SNIPER shell_speed = 3 damage = 30 penetration = 30 @@ -2524,14 +2662,14 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/rocket/atgun_shell/beehive/incend name = "napalm shell" hud_state = "shell_heat" - flags_ammo_behavior = AMMO_EXPLOSIVE|AMMO_ROCKET|AMMO_SUNDERING + ammo_behavior_flags = AMMO_TARGET_TURF|AMMO_SNIPER shell_speed = 3 bonus_projectiles_type = /datum/ammo/bullet/atgun_spread/incendiary /datum/ammo/bullet/atgun_spread name = "Shrapnel" icon_state = "flechette" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_PASS_THROUGH_MOB + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_PASS_THROUGH_MOB accuracy_var_low = 15 accuracy_var_high = 5 max_range = 6 @@ -2542,7 +2680,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/atgun_spread/incendiary name = "incendiary flechette" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_PASS_THROUGH_MOB|AMMO_INCENDIARY|AMMO_LEAVE_TURF + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_PASS_THROUGH_MOB|AMMO_INCENDIARY|AMMO_LEAVE_TURF damage = 20 penetration = 10 sundering = 1.5 @@ -2555,13 +2693,13 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh return T.ignite(5, 10) -/datum/ammo/bullet/atgun_spread/incendiary/on_leave_turf(turf/T, atom/firer, obj/projectile/proj) +/datum/ammo/bullet/atgun_spread/incendiary/on_leave_turf(turf/T, obj/projectile/proj) drop_flame(T) /datum/ammo/mortar name = "80mm shell" icon_state = "mortar" - flags_ammo_behavior = AMMO_EXPLOSIVE|AMMO_PASS_THROUGH_TURF|AMMO_PASS_THROUGH_MOVABLE + ammo_behavior_flags = AMMO_TARGET_TURF|AMMO_PASS_THROUGH_TURF|AMMO_PASS_THROUGH_MOVABLE shell_speed = 0.75 damage = 0 penetration = 0 @@ -2626,7 +2764,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh smoke.set_up(6, T, 7) smoke.start() flame_radius(4, T) - flame_radius(1, T, burn_intensity = 45, burn_duration = 75, burn_damage = 15, fire_stacks = 75) + flame_radius(1, T, burn_intensity = 75, burn_duration = 45, burn_damage = 15, fire_stacks = 75) /datum/ammo/mortar/smoke/howi/plasmaloss smoketype = /datum/effect_system/smoke_spread/plasmaloss @@ -2672,6 +2810,11 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/mortar/rocket/mlrs/drop_nade(turf/T) explosion(T, 0, 0, 4, 0, 2) +/datum/ammo/mortar/rocket/mlrs/incendiary/drop_nade(turf/T) + explosion(T, 0, 0, 2, 0, 2) + flame_radius(3, T) + playsound(T, 'sound/weapons/guns/fire/flamethrower2.ogg', 35, 1, 4) + /datum/ammo/mortar/rocket/smoke/mlrs shell_speed = 2.5 smoketype = /datum/effect_system/smoke_spread/mustard @@ -2683,6 +2826,9 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh smoke.set_up(5, T, 6) smoke.start() +/datum/ammo/mortar/rocket/smoke/mlrs/cloak + smoketype = /datum/effect_system/smoke_spread/tactical + /* //================================================ Energy Ammo @@ -2697,8 +2843,8 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh sound_bounce = "ballistic_bounce" damage_type = BURN - flags_ammo_behavior = AMMO_ENERGY|AMMO_SOUND_PITCH - armor_type = "energy" + ammo_behavior_flags = AMMO_ENERGY|AMMO_SOUND_PITCH + armor_type = ENERGY accuracy = 15 //lasers fly fairly straight bullet_color = COLOR_LASER_RED barricade_clear_distance = 2 @@ -2706,7 +2852,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/energy/emitter //Damage is determined in emitter.dm name = "emitter bolt" icon_state = "emitter" - flags_ammo_behavior = AMMO_ENERGY|AMMO_IGNORE_ARMOR + ammo_behavior_flags = AMMO_ENERGY accurate_range = 10 max_range = 10 bullet_color = COLOR_VIBRANT_LIME @@ -2719,10 +2865,11 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh damage = 10 penetration = 100 damage_type = STAMINA - flags_ammo_behavior = AMMO_ENERGY|AMMO_SKIPS_ALIENS + ammo_behavior_flags = AMMO_ENERGY|AMMO_SKIPS_ALIENS max_range = 15 accurate_range = 10 bullet_color = COLOR_VIVID_YELLOW + /datum/ammo/energy/taser/on_hit_mob(mob/M,obj/projectile/P) staggerstun(M, P, stun = 20 SECONDS) @@ -2731,7 +2878,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh icon_state = "tesla" hud_state = "taser" hud_state_empty = "battery_empty" - flags_ammo_behavior = AMMO_ENERGY|AMMO_SPECIAL_PROCESS + ammo_behavior_flags = AMMO_ENERGY|AMMO_SPECIAL_PROCESS shell_speed = 0.1 damage = 20 penetration = 20 @@ -2741,7 +2888,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh zap_beam(proj, 4, damage) /datum/ammo/energy/tesla/focused - flags_ammo_behavior = AMMO_ENERGY|AMMO_SPECIAL_PROCESS|AMMO_IFF + ammo_behavior_flags = AMMO_ENERGY|AMMO_SPECIAL_PROCESS|AMMO_IFF shell_speed = 0.1 damage = 10 penetration = 10 @@ -2756,12 +2903,22 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh var/mob/living/carbon/xenomorph/X = M X.use_plasma(0.3 * X.xeno_caste.plasma_max * X.xeno_caste.plasma_regen_limit) //Drains 30% of max plasma on hit +/datum/ammo/energy/lasburster + name = "lasburster bolt" + ammo_behavior_flags = AMMO_ENERGY|AMMO_HITSCAN + hud_state = "laser_overcharge" + armor_type = LASER + damage = 40 + penetration = 5 + max_range = 7 + hitscan_effect_icon = "beam_heavy" + /datum/ammo/energy/lasgun name = "laser bolt" icon_state = "laser" hud_state = "laser" - armor_type = "laser" - flags_ammo_behavior = AMMO_ENERGY|AMMO_SUNDERING + armor_type = LASER + ammo_behavior_flags = AMMO_ENERGY shell_speed = 4 accurate_range = 15 damage = 20 @@ -2789,7 +2946,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh hud_state = "laser_heat" damage = 12 //requires mod with -0.15 multiplier should math out to 10 penetration = 100 // It's a laser that burns the skin! The fire stacks go threw anyway. - flags_ammo_behavior = AMMO_ENERGY|AMMO_INCENDIARY|AMMO_SUNDERING + ammo_behavior_flags = AMMO_ENERGY|AMMO_INCENDIARY sundering = 1 /datum/ammo/energy/lasgun/M43/blast @@ -2849,7 +3006,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh damage = 45 penetration = 0 damage_type = STAMINA - flags_ammo_behavior = AMMO_ENERGY + ammo_behavior_flags = AMMO_ENERGY bullet_color = COLOR_DISABLER_BLUE /datum/ammo/energy/lasgun/M43/practice/on_hit_mob(mob/living/carbon/C, obj/projectile/P) @@ -2866,7 +3023,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh // TE Lasers // /datum/ammo/energy/lasgun/marine - flags_ammo_behavior = AMMO_ENERGY|AMMO_SUNDERING|AMMO_HITSCAN + ammo_behavior_flags = AMMO_ENERGY|AMMO_HITSCAN damage = 20 penetration = 10 sundering = 1.5 @@ -2996,7 +3153,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh penetration = 30 sundering = 3 hitscan_effect_icon = "beam_heavy" - flags_ammo_behavior = AMMO_ENERGY|AMMO_SUNDERING|AMMO_HITSCAN|AMMO_PASS_THROUGH_MOB + ammo_behavior_flags = AMMO_ENERGY|AMMO_HITSCAN|AMMO_PASS_THROUGH_MOB /datum/ammo/energy/lasgun/marine/autolaser/charge/on_hit_turf(turf/T, obj/projectile/proj) if(istype(T, /turf/closed/wall)) @@ -3032,7 +3189,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh damage = 60 penetration = 30 accurate_range_min = 5 - flags_ammo_behavior = AMMO_ENERGY|AMMO_SUNDERING|AMMO_HITSCAN|AMMO_SNIPER + ammo_behavior_flags = AMMO_ENERGY|AMMO_HITSCAN|AMMO_SNIPER sundering = 5 max_range = 40 damage_falloff = 0 @@ -3045,7 +3202,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh damage = 40 penetration = 10 accurate_range_min = 5 - flags_ammo_behavior = AMMO_ENERGY|AMMO_INCENDIARY|AMMO_SUNDERING|AMMO_HITSCAN|AMMO_SNIPER + ammo_behavior_flags = AMMO_ENERGY|AMMO_INCENDIARY|AMMO_HITSCAN|AMMO_SNIPER sundering = 1 hitscan_effect_icon = "u_laser_beam" bullet_color = COLOR_DISABLER_BLUE @@ -3080,7 +3237,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh hud_state = "laser_heat" damage = 100 penetration = 30 - flags_ammo_behavior = AMMO_ENERGY|AMMO_SUNDERING|AMMO_HITSCAN|AMMO_SNIPER + ammo_behavior_flags = AMMO_ENERGY|AMMO_HITSCAN|AMMO_SNIPER sundering = 1 hitscan_effect_icon = "u_laser_beam" bonus_projectiles_scatter = 0 @@ -3133,7 +3290,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh damage = 20 shell_speed = 2.5 penetration = 10 - flags_ammo_behavior = AMMO_ENERGY|AMMO_INCENDIARY|AMMO_SUNDERING|AMMO_HITSCAN + ammo_behavior_flags = AMMO_ENERGY|AMMO_INCENDIARY|AMMO_HITSCAN sundering = 0.5 hitscan_effect_icon = "beam_incen" bullet_color = COLOR_LASER_RED @@ -3145,7 +3302,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "xray heat bolt" hud_state = "laser_xray" icon_state = "u_laser" - flags_ammo_behavior = AMMO_ENERGY|AMMO_INCENDIARY|AMMO_SUNDERING|AMMO_HITSCAN + ammo_behavior_flags = AMMO_ENERGY|AMMO_INCENDIARY|AMMO_HITSCAN damage = 25 penetration = 5 sundering = 1 @@ -3155,14 +3312,14 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/energy/lasgun/marine/xray/piercing name = "xray piercing bolt" icon_state = "xray" - flags_ammo_behavior = AMMO_ENERGY|AMMO_HITSCAN|AMMO_PASS_THROUGH_TURF|AMMO_PASS_THROUGH_MOVABLE + ammo_behavior_flags = AMMO_ENERGY|AMMO_HITSCAN|AMMO_PASS_THROUGH_TURF|AMMO_PASS_THROUGH_MOVABLE damage = 25 penetration = 100 max_range = 10 hitscan_effect_icon = "xray_beam" /datum/ammo/energy/lasgun/marine/heavy_laser - flags_ammo_behavior = AMMO_EXPLOSIVE|AMMO_ROCKET|AMMO_ENERGY|AMMO_SUNDERING|AMMO_HITSCAN|AMMO_INCENDIARY + ammo_behavior_flags = AMMO_TARGET_TURF|AMMO_SNIPER|AMMO_ENERGY|AMMO_HITSCAN|AMMO_INCENDIARY hud_state = "laser_overcharge" damage = 60 penetration = 10 @@ -3188,6 +3345,172 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/energy/lasgun/marine/heavy_laser/do_at_max_range(turf/T, obj/projectile/P) drop_nade(T.density ? get_step_towards(T, P) : T) +/datum/ammo/energy/plasma + name = "superheated plasma" + icon_state = "plasma_small" + hud_state = "plasma" + hud_state_empty = "battery_empty" + armor_type = ENERGY + bullet_color = COLOR_DISABLER_BLUE + ammo_behavior_flags = AMMO_ENERGY + shell_speed = 3 + +/datum/ammo/energy/plasma/rifle_standard + damage = 25 + penetration = 20 + sundering = 0.75 + +/datum/ammo/energy/plasma/rifle_marksman + icon_state = "plasma_big" + hud_state = "plasma_blast" + ammo_behavior_flags = AMMO_ENERGY|AMMO_PASS_THROUGH_MOB + damage = 40 + penetration = 30 + sundering = 2 + damage_falloff = 0.5 + accurate_range = 25 + +/datum/ammo/energy/plasma/rifle_marksman/on_hit_mob(mob/M, obj/projectile/proj) + if(!isliving(M)) + return + var/mob/living/living_victim = M + living_victim.apply_status_effect(STATUS_EFFECT_SHATTER, 2 SECONDS) + +/datum/ammo/energy/plasma/blast + name = "plasma blast" + icon_state = "plasma_ball_small" + hud_state = "plasma_blast" + damage = 30 + penetration = 10 + sundering = 2 + damage_falloff = 0.5 + accurate_range = 5 + max_range = 12 + +/datum/ammo/energy/plasma/blast/drop_nade(turf/T) + explosion(T, weak_impact_range = 3, color = COLOR_DISABLER_BLUE) + +/datum/ammo/energy/plasma/blast/on_hit_obj(obj/O, obj/projectile/P) + drop_nade(O.density ? P.loc : O.loc) + +/datum/ammo/energy/plasma/blast/on_hit_turf(turf/T, obj/projectile/P) + drop_nade(T.density ? P.loc : T) + +/datum/ammo/energy/plasma/blast/do_at_max_range(turf/T, obj/projectile/P) + drop_nade(T.density ? P.loc : T) + +/datum/ammo/energy/plasma/blast/on_hit_mob(mob/M, obj/projectile/proj) + drop_nade(M.loc) + +/datum/ammo/energy/plasma/blast/melting + damage = 40 + sundering = 3 + damage_falloff = 0.5 + accurate_range = 7 + ///Number of melting stacks to apply + var/melting_stacks = 2 + +/datum/ammo/energy/plasma/blast/melting/drop_nade(turf/T) + explosion(T, weak_impact_range = 4, color = COLOR_DISABLER_BLUE) + for(var/mob/living/living_victim in viewers(3, T)) //normally using viewers wouldn't work due to darkness and smoke both blocking vision. However explosions clear both temporarily so we avoid this issue. + var/datum/status_effect/stacking/melting/debuff = living_victim.has_status_effect(STATUS_EFFECT_MELTING) + if(debuff) + debuff.add_stacks(melting_stacks) + else + living_victim.apply_status_effect(STATUS_EFFECT_MELTING, melting_stacks) + +/datum/ammo/energy/plasma/blast/shatter + damage = 40 + sundering = 3 + damage_falloff = 0.5 + accurate_range = 9 + ammo_behavior_flags = AMMO_ENERGY + +/datum/ammo/energy/plasma/blast/shatter/drop_nade(turf/T) + explosion(T, light_impact_range = 2, weak_impact_range = 5, throw_range = 0, color = COLOR_DISABLER_BLUE) + for(var/mob/living/living_victim in viewers(3, T)) + living_victim.apply_status_effect(STATUS_EFFECT_SHATTER, 5 SECONDS) + +/datum/ammo/energy/plasma/blast/incendiary + name = "plasma glob" + damage = 30 + ammo_behavior_flags = AMMO_ENERGY|AMMO_INCENDIARY + shell_speed = 2 + icon_state = "plasma_big" + hud_state = "flame" + +/datum/ammo/energy/plasma/blast/incendiary/drop_nade(turf/T) + flame_radius(2, T, burn_duration = 9, colour = "blue") + playsound(T, 'sound/weapons/guns/fire/flamethrower2.ogg', 35, 1, 4) + +#define PLASMA_CANNON_INNER_STAGGERSTUN_RANGE 3 +#define PLASMA_CANNON_STAGGERSTUN_RANGE 9 +#define PLASMA_CANNON_STAGGER_DURATION 3 SECONDS +#define PLASMA_CANNON_SHATTER_DURATION 5 SECONDS +/datum/ammo/energy/plasma/cannon_heavy + name = "plasma heavy glob" + icon_state = "plasma_ball_big" + hud_state = "plasma_sphere" + damage = 60 + penetration = 40 + sundering = 10 + +/datum/ammo/energy/plasma/cannon_heavy/on_hit_mob(mob/M, obj/projectile/proj) + var/damage_mult = 1 + switch(M.mob_size) + if(MOB_SIZE_BIG) + damage_mult = 2 + if(MOB_SIZE_XENO) + damage_mult = 1.5 + + proj.damage *= damage_mult + if(!isliving(M)) + return + var/mob/living/living_victim = M + living_victim.apply_status_effect(STATUS_EFFECT_SHATTER, PLASMA_CANNON_SHATTER_DURATION) + staggerstun(living_victim, proj, PLASMA_CANNON_INNER_STAGGERSTUN_RANGE, weaken = 0.5 SECONDS, knockback = 1, hard_size_threshold = 1) + staggerstun(living_victim, proj, PLASMA_CANNON_STAGGERSTUN_RANGE, stagger = PLASMA_CANNON_STAGGER_DURATION, slowdown = 2, knockback = 1, hard_size_threshold = 2) + +/datum/ammo/energy/plasma/cannon_heavy/on_hit_obj(obj/O, obj/projectile/proj) + var/damage_mult = 3 + if(isvehicle(O)) + var/obj/vehicle/vehicle_target = O + if(ismecha(vehicle_target) || isarmoredvehicle(vehicle_target)) + damage_mult = 4 + if(get_dist_euclidean(proj.starting_turf, vehicle_target) <= PLASMA_CANNON_STAGGERSTUN_RANGE) //staggerstun will fail on tank occupants if we just use staggerstun + for(var/mob/living/living_victim AS in vehicle_target.occupants) + living_victim.Stagger(PLASMA_CANNON_STAGGER_DURATION) + to_chat(living_victim, "You are knocked about by the impact, staggering you!") + proj.damage *= damage_mult + +/datum/ammo/energy/plasma/cannon_heavy/on_hit_turf(turf/T, obj/projectile/proj) + proj.damage *= 5 + +#undef PLASMA_CANNON_INNER_STAGGERSTUN_RANGE +#undef PLASMA_CANNON_STAGGERSTUN_RANGE +#undef PLASMA_CANNON_STAGGER_DURATION +#undef PLASMA_CANNON_SHATTER_DURATION + +/datum/ammo/energy/plasma/smg_standard + icon_state = "plasma_ball_small" + damage = 22 + penetration = 10 + sundering = 0.5 + +/datum/ammo/energy/plasma/smg_standard/one + bonus_projectiles_type = /datum/ammo/energy/plasma/smg_standard + +/datum/ammo/energy/plasma/smg_standard/two + bonus_projectiles_type = /datum/ammo/energy/plasma/smg_standard/one + +/datum/ammo/energy/plasma/smg_standard/three + bonus_projectiles_type = /datum/ammo/energy/plasma/smg_standard/two + +/datum/ammo/energy/plasma/smg_standard/four + bonus_projectiles_type = /datum/ammo/energy/plasma/smg_standard/three + +/datum/ammo/energy/plasma/smg_standard/on_hit_turf(turf/T, obj/projectile/proj) + reflect(T, proj, 5) /datum/ammo/energy/xeno barricade_clear_distance = 0 @@ -3200,7 +3523,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/energy/xeno/psy_blast name = "psychic blast" - flags_ammo_behavior = AMMO_XENO|AMMO_EXPLOSIVE|AMMO_ROCKET|AMMO_ENERGY|AMMO_SUNDERING|AMMO_HITSCAN|AMMO_SKIPS_ALIENS + ammo_behavior_flags = AMMO_XENO|AMMO_TARGET_TURF|AMMO_SNIPER|AMMO_ENERGY|AMMO_HITSCAN|AMMO_SKIPS_ALIENS damage = 35 penetration = 10 sundering = 1 @@ -3223,7 +3546,6 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh var/mob/living/carbon/xenomorph/xeno_firer = P.firer aoe_damage = xeno_firer.xeno_caste.blast_strength - var/list/throw_atoms = list() var/list/turf/target_turfs = generate_true_cone(T, aoe_range, -1, 359, 0, air_pass = TRUE) for(var/turf/target_turf AS in target_turfs) for(var/atom/movable/target AS in target_turf) @@ -3238,16 +3560,11 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh var/obj/obj_victim = target if(!(obj_victim.resistance_flags & XENO_DAMAGEABLE)) continue + if(isbarricade(target)) + continue obj_victim.take_damage(aoe_damage, BURN, ENERGY, TRUE, armour_penetration = penetration) if(target.anchored) continue - throw_atoms += target - - for(var/atom/movable/target AS in throw_atoms) - var/throw_dir = get_dir(T, target) - if(T == get_turf(target)) - throw_dir = get_dir(P.starting_turf, T) - target.safe_throw_at(get_ranged_target_turf(T, throw_dir, 5), 3, 1, spin = TRUE) new /obj/effect/temp_visual/shockwave(T, aoe_range + 2) @@ -3265,7 +3582,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/energy/xeno/psy_blast/psy_lance name = "psychic lance" - flags_ammo_behavior = AMMO_XENO|AMMO_ENERGY|AMMO_SUNDERING|AMMO_HITSCAN|AMMO_PASS_THROUGH_MOVABLE + ammo_behavior_flags = AMMO_XENO|AMMO_ENERGY|AMMO_HITSCAN|AMMO_PASS_THROUGH_MOVABLE damage = 60 penetration = 50 accuracy = 100 @@ -3278,14 +3595,14 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh glow_color = "#CB0166" /datum/ammo/energy/xeno/psy_blast/psy_lance/on_hit_obj(obj/O, obj/projectile/P) - if(ismecha(O)) - var/obj/vehicle/sealed/mecha/mech_victim = O - mech_victim.take_damage(200, BURN, ENERGY, TRUE, armour_penetration = penetration) + if(isvehicle(O)) + var/obj/vehicle/veh_victim = O + veh_victim.take_damage(200, BURN, ENERGY, TRUE, armour_penetration = penetration) /datum/ammo/energy/xeno/psy_blast/psy_lance/on_hit_mob(mob/M, obj/projectile/P) if(isxeno(M)) return - staggerstun(M, P, 9, stagger = 4 SECONDS, slowdown = 2, knockback = 1) + staggerstun(M, P, 9, stagger = 1 SECONDS, slowdown = 2, knockback = 1) /datum/ammo/energy/xeno/psy_blast/psy_lance/on_hit_turf(turf/T, obj/projectile/P) return @@ -3314,7 +3631,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/energy/lasgun/marine/mech/lance_strike name = "particle lance" - flags_ammo_behavior = AMMO_ENERGY|AMMO_SNIPER|AMMO_SUNDERING|AMMO_HITSCAN|AMMO_PASS_THROUGH_MOVABLE|AMMO_PASS_THROUGH_MOB + ammo_behavior_flags = AMMO_ENERGY|AMMO_SNIPER|AMMO_HITSCAN|AMMO_PASS_THROUGH_MOVABLE|AMMO_PASS_THROUGH_MOB damage_type = BRUTE damage = 100 armor_type = MELEE @@ -3331,11 +3648,11 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh max_range = 5 // Plasma // -/datum/ammo/energy/plasma +/datum/ammo/energy/sectoid_plasma name = "plasma bolt" icon_state = "pulse2" hud_state = "plasma" - armor_type = "laser" + armor_type = LASER shell_speed = 4 accurate_range = 15 damage = 40 @@ -3353,7 +3670,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh max_range = 14 penetration = 5 shell_speed = 1.5 - flags_ammo_behavior = AMMO_ENERGY|AMMO_INCENDIARY|AMMO_EXPLOSIVE + ammo_behavior_flags = AMMO_ENERGY|AMMO_INCENDIARY|AMMO_TARGET_TURF bullet_color = LIGHT_COLOR_ELECTRIC_GREEN ///Fire burn time @@ -3395,9 +3712,9 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh icon_state = "overchargedlaser" hud_state = "laser_heat" hud_state_empty = "battery_empty_flash" - flags_ammo_behavior = AMMO_ENERGY|AMMO_SUNDERING|AMMO_SOUND_PITCH + ammo_behavior_flags = AMMO_ENERGY|AMMO_SOUND_PITCH bullet_color = COLOR_TAN_ORANGE - armor_type = "energy" + armor_type = ENERGY max_range = 14 accurate_range = 5 //for charger shell_speed = 4 @@ -3409,6 +3726,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh penetration = 10 sundering = 2 fire_burst_damage = 15 + deflagrate_multiplier = 1 //inherited, could use some changes ping = "ping_s" @@ -3427,15 +3745,17 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh accuracy_var_low = 3 accuracy_var_high = 3 fire_burst_damage = 20 + deflagrate_multiplier = 0.9 /datum/ammo/energy/volkite/medium/custom - deflagrate_multiplier = 2 + deflagrate_multiplier = 1.8 /datum/ammo/energy/volkite/heavy max_range = 35 accurate_range = 12 damage = 25 fire_burst_damage = 20 + deflagrate_multiplier = 0.9 /datum/ammo/energy/volkite/light max_range = 25 @@ -3443,6 +3763,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh accuracy_var_low = 3 accuracy_var_high = 3 penetration = 5 + deflagrate_multiplier = 0.9 /* //================================================ @@ -3453,10 +3774,10 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh icon_state = "neurotoxin" ping = "ping_x" damage_type = TOX - flags_ammo_behavior = AMMO_XENO + ammo_behavior_flags = AMMO_XENO var/added_spit_delay = 0 //used to make cooldown of the different spits vary. var/spit_cost = 5 - armor_type = "bio" + armor_type = BIO shell_speed = 1 accuracy = 40 accurate_range = 15 @@ -3481,7 +3802,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/xeno/toxin name = "neurotoxic spit" - flags_ammo_behavior = AMMO_XENO|AMMO_EXPLOSIVE|AMMO_SKIPS_ALIENS + ammo_behavior_flags = AMMO_XENO|AMMO_TARGET_TURF|AMMO_SKIPS_ALIENS spit_cost = 55 added_spit_delay = 0 damage_type = STAMINA @@ -3569,9 +3890,9 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh name = "sticky resin spit" icon_state = "sticky" ping = null - flags_ammo_behavior = AMMO_SKIPS_ALIENS|AMMO_EXPLOSIVE|AMMO_XENO + ammo_behavior_flags = AMMO_SKIPS_ALIENS|AMMO_TARGET_TURF|AMMO_XENO damage_type = STAMINA - armor_type = "bio" + armor_type = BIO spit_cost = 50 sound_hit = "alien_resin_build2" sound_bounce = "alien_resin_build3" @@ -3593,6 +3914,9 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/xeno/sticky/on_hit_obj(obj/O, obj/projectile/P) + if(isarmoredvehicle(O)) + var/obj/vehicle/sealed/armored/tank = O + COOLDOWN_START(tank, cooldown_vehicle_move, tank.move_delay) var/turf/T = get_turf(O) drop_resin(T.density ? P.loc : T) @@ -3660,8 +3984,8 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh damage_type = BURN added_spit_delay = 5 spit_cost = 50 - flags_ammo_behavior = AMMO_XENO|AMMO_EXPLOSIVE - armor_type = "acid" + ammo_behavior_flags = AMMO_XENO|AMMO_TARGET_TURF + armor_type = ACID damage = 18 max_range = 8 bullet_color = COLOR_PALE_GREEN_GRAY @@ -3681,7 +4005,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/xeno/acid/medium name = "acid spatter" damage = 30 - flags_ammo_behavior = AMMO_XENO + ammo_behavior_flags = AMMO_XENO /datum/ammo/xeno/acid/auto name = "light acid spatter" @@ -3706,7 +4030,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/xeno/acid/passthrough name = "acid spittle" damage = 20 - flags_ammo_behavior = AMMO_XENO|AMMO_SKIPS_ALIENS + ammo_behavior_flags = AMMO_XENO|AMMO_SKIPS_ALIENS /datum/ammo/xeno/acid/heavy name = "acid splash" @@ -3736,7 +4060,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh ///For the Spitter's Scatterspit ability /datum/ammo/xeno/acid/heavy/scatter damage = 20 - flags_ammo_behavior = AMMO_XENO|AMMO_EXPLOSIVE|AMMO_SKIPS_ALIENS + ammo_behavior_flags = AMMO_XENO|AMMO_TARGET_TURF|AMMO_SKIPS_ALIENS bonus_projectiles_type = /datum/ammo/xeno/acid/heavy/scatter bonus_projectiles_amount = 6 bonus_projectiles_scatter = 2 @@ -3751,15 +4075,15 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh var/icon_key = BOILER_GLOB_NEURO ///This text will show up when a boiler selects this ammo. Span proc should be applied when this var is used. var/select_text = "We will now fire neurotoxic gas. This is nonlethal." - flags_ammo_behavior = AMMO_XENO|AMMO_SKIPS_ALIENS|AMMO_EXPLOSIVE + ammo_behavior_flags = AMMO_XENO|AMMO_SKIPS_ALIENS|AMMO_TARGET_TURF var/danger_message = span_danger("A glob of acid lands with a splat and explodes into noxious fumes!") - armor_type = "bio" + armor_type = BIO accuracy_var_high = 10 max_range = 30 damage = 50 damage_type = STAMINA damage_falloff = 0 - penetration = 40 + penetration = 50 bullet_color = BOILER_LUMINOSITY_AMMO_NEUROTOXIN_COLOR reagent_transfer_amount = 30 ///On a direct hit, how long is the target paralyzed? @@ -3775,9 +4099,9 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh ///We're going to reuse one smoke spread system repeatedly to cut down on processing. var/datum/effect_system/smoke_spread/xeno/trail_spread_system -/datum/ammo/xeno/boiler_gas/on_leave_turf(turf/T, atom/firer, obj/projectile/proj) - if(isxeno(firer)) - var/mob/living/carbon/xenomorph/X = firer +/datum/ammo/xeno/boiler_gas/on_leave_turf(turf/T, obj/projectile/proj) + if(isxeno(proj.firer)) + var/mob/living/carbon/xenomorph/X = proj.firer trail_spread_system.strength = X.xeno_caste.bomb_strength trail_spread_system.set_up(0, T) trail_spread_system.start() @@ -3800,7 +4124,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/xeno/boiler_gas/New() . = ..() - if((flags_ammo_behavior & AMMO_LEAVE_TURF) && passed_turf_smoke_type) + if((ammo_behavior_flags & AMMO_LEAVE_TURF) && passed_turf_smoke_type) trail_spread_system = new passed_turf_smoke_type(only_once = FALSE) /datum/ammo/xeno/boiler_gas/Destroy() @@ -3866,12 +4190,12 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh sound_bounce = "acid_bounce" icon_key = BOILER_GLOB_ACID select_text = "We will now fire corrosive acid. This is lethal!" - flags_ammo_behavior = AMMO_XENO|AMMO_SKIPS_ALIENS|AMMO_EXPLOSIVE - armor_type = "acid" + ammo_behavior_flags = AMMO_XENO|AMMO_SKIPS_ALIENS|AMMO_TARGET_TURF + armor_type = ACID danger_message = span_danger("A glob of acid lands with a splat and explodes into corrosive bile!") damage = 50 damage_type = BURN - penetration = 40 + penetration = 50 bullet_color = BOILER_LUMINOSITY_AMMO_CORROSIVE_COLOR hit_paralyze_time = 1 SECONDS hit_eye_blur = 1 @@ -3897,11 +4221,11 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh icon_key = BOILER_GLOB_NEURO_LANCE select_text = "We will now fire a pressurized neurotoxic lance. This is barely nonlethal." ///As opposed to normal globs, this will pass by the target tile if they hit nothing. - flags_ammo_behavior = AMMO_XENO|AMMO_SKIPS_ALIENS|AMMO_LEAVE_TURF + ammo_behavior_flags = AMMO_XENO|AMMO_SKIPS_ALIENS|AMMO_LEAVE_TURF danger_message = span_danger("A pressurized glob of acid lands with a nasty splat and explodes into noxious fumes!") - max_range = 40 + max_range = 25 damage = 75 - penetration = 60 + penetration = 70 reagent_transfer_amount = 55 passed_turf_smoke_type = /datum/effect_system/smoke_spread/xeno/neuro/light hit_paralyze_time = 2 SECONDS @@ -3917,24 +4241,23 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh icon_key = BOILER_GLOB_ACID_LANCE select_text = "We will now fire a pressurized corrosive lance. This lethal!" ///As opposed to normal globs, this will pass by the target tile if they hit nothing. - flags_ammo_behavior = AMMO_XENO|AMMO_SKIPS_ALIENS|AMMO_LEAVE_TURF + ammo_behavior_flags = AMMO_XENO|AMMO_SKIPS_ALIENS|AMMO_LEAVE_TURF danger_message = span_danger("A pressurized glob of acid lands with a concerning hissing sound and explodes into corrosive bile!") - max_range = 40 + max_range = 25 damage = 75 - penetration = 60 + penetration = 70 passed_turf_smoke_type = /datum/effect_system/smoke_spread/xeno/acid/light hit_paralyze_time = 1.5 SECONDS hit_eye_blur = 4 hit_drowsyness = 2 fixed_spread_range = 2 accuracy = 100 - accurate_range = 30 shell_speed = 1.5 /datum/ammo/xeno/hugger name = "hugger ammo" ping = "" - flags_ammo_behavior = AMMO_XENO + ammo_behavior_flags = AMMO_XENO damage = 0 max_range = 6 shell_speed = 1 @@ -3963,7 +4286,10 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh hugger_type = /obj/item/clothing/mask/facehugger/combat/slash /datum/ammo/xeno/hugger/neuro - hugger_type = /obj/item/clothing/mask/facehugger/combat/neuro + hugger_type = /obj/item/clothing/mask/facehugger/combat/chem_injector/neuro + +/datum/ammo/xeno/hugger/ozelomelyn + hugger_type = /obj/item/clothing/mask/facehugger/combat/chem_injector/ozelomelyn /datum/ammo/xeno/hugger/resin hugger_type = /obj/item/clothing/mask/facehugger/combat/resin @@ -3979,7 +4305,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh sound_bounce = "alien_resin_build3" damage_type = STAMINA bullet_color = COLOR_PURPLE - flags_ammo_behavior = AMMO_SKIPS_ALIENS + ammo_behavior_flags = AMMO_SKIPS_ALIENS ping = null armor_type = BIO accurate_range = 15 @@ -4015,7 +4341,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh icon_state = "widow_snareball" ping = "ping_x" damage_type = STAMINA - flags_ammo_behavior = AMMO_SKIPS_ALIENS | AMMO_EXPLOSIVE + ammo_behavior_flags = AMMO_SKIPS_ALIENS | AMMO_TARGET_TURF bullet_color = COLOR_PURPLE ping = null damage = 0 @@ -4053,7 +4379,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh damage_type = BRUTE bullet_color = COLOR_WHITE sound_hit = 'sound/bullets/spear_armor1.ogg' - flags_ammo_behavior = AMMO_XENO|AMMO_SKIPS_ALIENS + ammo_behavior_flags = AMMO_XENO|AMMO_SKIPS_ALIENS RU TGMC EDIT*/ /* //================================================ @@ -4065,10 +4391,10 @@ RU TGMC EDIT*/ name = "pepperball" hud_state = "pepperball" hud_state_empty = "pepperball_empty" - flags_ammo_behavior = AMMO_BALLISTIC + ammo_behavior_flags = AMMO_BALLISTIC accurate_range = 15 damage_type = STAMINA - armor_type = "bio" + armor_type = BIO damage = 70 penetration = 0 shrapnel_chance = 0 @@ -4080,8 +4406,9 @@ RU TGMC EDIT*/ /datum/ammo/bullet/pepperball/on_hit_mob(mob/living/victim, obj/projectile/proj) if(isxeno(victim)) var/mob/living/carbon/xenomorph/X = victim - X.use_plasma(drain_multiplier * X.xeno_caste.plasma_max * X.xeno_caste.plasma_regen_limit) - X.use_plasma(plasma_drain) + if(!(X.xeno_caste.caste_flags & CASTE_PLASMADRAIN_IMMUNE)) + X.use_plasma(drain_multiplier * X.xeno_caste.plasma_max * X.xeno_caste.plasma_regen_limit) + X.use_plasma(plasma_drain) /datum/ammo/bullet/pepperball/pepperball_mini damage = 40 @@ -4109,8 +4436,8 @@ RU TGMC EDIT*/ hud_state = "flame" hud_state_empty = "flame_empty" damage_type = BURN - flags_ammo_behavior = AMMO_INCENDIARY|AMMO_FLAME|AMMO_EXPLOSIVE - armor_type = "fire" + ammo_behavior_flags = AMMO_INCENDIARY|AMMO_FLAME|AMMO_TARGET_TURF + armor_type = FIRE max_range = 7 damage = 31 damage_falloff = 0 @@ -4164,7 +4491,7 @@ RU TGMC EDIT*/ damage = 0 shell_speed = 1 damage_type = BURN - flags_ammo_behavior = AMMO_EXPLOSIVE + ammo_behavior_flags = AMMO_TARGET_TURF bullet_color = null /datum/ammo/water/proc/splash(turf/extinguished_turf, splash_direction) @@ -4209,7 +4536,7 @@ RU TGMC EDIT*/ damage_type = BRUTE var/nade_type = /obj/item/explosive/grenade icon_state = "grenade" - armor_type = "bomb" + armor_type = BOMB damage = 15 accuracy = 15 max_range = 10 @@ -4239,7 +4566,7 @@ RU TGMC EDIT*/ /datum/ammo/grenade_container/ags_grenade name = "grenade shell" - flags_ammo_behavior = AMMO_EXPLOSIVE|AMMO_IFF + ammo_behavior_flags = AMMO_TARGET_TURF|AMMO_IFF icon_state = "grenade_projectile" hud_state = "grenade_he" hud_state_empty = "grenade_empty" diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index d396b81d1d863..402276f43088d 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -8,8 +8,8 @@ slot_l_hand_str = 'icons/mob/inhands/weapons/ammo_left.dmi', slot_r_hand_str = 'icons/mob/inhands/weapons/ammo_right.dmi', ) - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT throwforce = 2 w_class = WEIGHT_CLASS_TINY throw_speed = 2 @@ -33,7 +33,7 @@ ///Just an easier way to track how many shells to eject later. var/used_casings = 0 ///flags specifically for magazines. - var/flags_magazine = MAGAZINE_REFILLABLE + var/magazine_flags = MAGAZINE_REFILLABLE ///the default mag icon state. var/base_mag_icon @@ -53,7 +53,8 @@ update_icon() /obj/item/ammo_magazine/update_icon_state() - if(CHECK_BITFIELD(flags_magazine, MAGAZINE_HANDFUL)) + . = ..() + if(CHECK_BITFIELD(magazine_flags, MAGAZINE_HANDFUL)) setDir(current_rounds + round(current_rounds/3)) return if(current_rounds <= 0) @@ -67,7 +68,7 @@ /obj/item/ammo_magazine/attack_hand(mob/living/user) - if(user.get_inactive_held_item() != src || !CHECK_BITFIELD(flags_magazine, MAGAZINE_REFILLABLE)) + if(user.get_inactive_held_item() != src || !CHECK_BITFIELD(magazine_flags, MAGAZINE_REFILLABLE)) return ..() if(current_rounds <= 0) to_chat(user, span_notice("[src] is empty. There is nothing to grab.")) @@ -76,8 +77,10 @@ /obj/item/ammo_magazine/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!istype(I, /obj/item/ammo_magazine)) - if(!CHECK_BITFIELD(flags_magazine, MAGAZINE_WORN) || !istype(I, /obj/item/weapon/gun) || loc != user) + if(!CHECK_BITFIELD(magazine_flags, MAGAZINE_WORN) || !istype(I, /obj/item/weapon/gun) || loc != user) return ..() var/obj/item/weapon/gun/gun = I if(!CHECK_BITFIELD(gun.reciever_flags, AMMO_RECIEVER_MAGAZINES)) @@ -85,10 +88,10 @@ gun.reload(src, user) return - if(!CHECK_BITFIELD(flags_magazine, MAGAZINE_REFILLABLE)) //and a refillable magazine + if(!CHECK_BITFIELD(magazine_flags, MAGAZINE_REFILLABLE)) //and a refillable magazine return - if(src != user.get_inactive_held_item() && !CHECK_BITFIELD(flags_magazine, MAGAZINE_HANDFUL)) //It has to be held. + if(src != user.get_inactive_held_item() && !CHECK_BITFIELD(magazine_flags, MAGAZINE_HANDFUL)) //It has to be held. to_chat(user, span_notice("Try holding [src] before you attempt to restock it.")) return @@ -149,7 +152,7 @@ source.current_rounds -= amount_difference current_rounds += amount_difference - if(source.current_rounds <= 0 && CHECK_BITFIELD(source.flags_magazine, MAGAZINE_HANDFUL)) //We want to delete it if it's a handful. + if(source.current_rounds <= 0 && CHECK_BITFIELD(source.magazine_flags, MAGAZINE_HANDFUL)) //We want to delete it if it's a handful. user?.temporarilyRemoveItemFromInventory(source) QDEL_NULL(source) //Dangerous. Can mean future procs break if they reference the source. Have to account for this. else @@ -170,13 +173,13 @@ user.put_in_hands(new_handful) to_chat(user, span_notice("You grab [rounds] round\s from [src].")) update_icon() //Update the other one. - if(current_rounds <= 0 && CHECK_BITFIELD(flags_magazine, MAGAZINE_HANDFUL)) + if(current_rounds <= 0 && CHECK_BITFIELD(magazine_flags, MAGAZINE_HANDFUL)) user.temporarilyRemoveItemFromInventory(src) qdel(src) return rounds //Give the number created. else update_icon() - if(current_rounds <= 0 && CHECK_BITFIELD(flags_magazine, MAGAZINE_HANDFUL)) + if(current_rounds <= 0 && CHECK_BITFIELD(magazine_flags, MAGAZINE_HANDFUL)) qdel(src) return new_handful @@ -221,15 +224,30 @@ /obj/item/ammo_magazine/handful name = "generic handful of bullets or shells" desc = "A handful of rounds to reload on the go." - flags_equip_slot = null // It only fits into pockets and such. + equip_slot_flags = null // It only fits into pockets and such. w_class = WEIGHT_CLASS_SMALL current_rounds = 1 // So it doesn't get autofilled for no reason. max_rounds = 5 // For shotguns, though this will be determined by the handful type when generated. - flags_atom = CONDUCT|DIRLOCK - flags_magazine = MAGAZINE_HANDFUL|MAGAZINE_REFILLABLE + atom_flags = CONDUCT|DIRLOCK + magazine_flags = MAGAZINE_HANDFUL|MAGAZINE_REFILLABLE attack_speed = 3 // should make reloading less painful icon_state_mini = "bullets" +/obj/item/ammo_magazine/handful/repeater + name = "handful of heavy impact rifle bullet (.45-70 Government)" + icon_state = "bullet" + current_rounds = 8 + max_rounds = 8 + default_ammo = /datum/ammo/bullet/rifle/repeater + caliber = CALIBER_4570 + +/obj/item/ammo_magazine/handful/slug + name = "handful of shotgun slug (12 gauge)" + icon_state = "shotgun slug" + current_rounds = 5 + default_ammo = /datum/ammo/bullet/shotgun/slug + caliber = CALIBER_12G + /obj/item/ammo_magazine/handful/buckshot name = "handful of shotgun buckshot shells (12g)" icon_state = "shotgun buckshot shell" @@ -300,7 +318,7 @@ Turn() or Shift() as there is virtually no overhead. ~N w_class = WEIGHT_CLASS_TINY layer = LOWER_ITEM_LAYER //Below other objects dir = 1 //Always north when it spawns. - flags_atom = CONDUCT|DIRLOCK + atom_flags = CONDUCT|DIRLOCK var/current_casings = 1 //This is manipulated in the procs that use these. var/max_casings = 16 var/current_icon = 0 @@ -313,10 +331,16 @@ Turn() or Shift() as there is virtually no overhead. ~N pixel_y = rand(-2, 2) icon_state = initial_icon_state += "[rand(1, number_of_states)]" //Set the icon to it. -//This does most of the heavy lifting. It updates the icon and name if needed, then changes .dir to simulate new casings. -/obj/item/ammo_casing/update_icon() +//This does most of the heavy lifting. It updates the icon and name if needed + +/obj/item/ammo_casing/update_name(updates) + . = ..() + if(max_casings >= current_casings && current_casings == 2) + name += "s" //In case there is more than one. + +/obj/item/ammo_casing/update_icon_state() + . = ..() if(max_casings >= current_casings) - if(current_casings == 2) name += "s" //In case there is more than one. if(round((current_casings-1)/8) > current_icon) current_icon++ icon_state += "_[current_icon]" @@ -324,9 +348,24 @@ Turn() or Shift() as there is virtually no overhead. ~N var/base_direction = current_casings - (current_icon * 8) setDir(base_direction + round(base_direction)/3) switch(current_casings) - if(3 to 5) w_class = WEIGHT_CLASS_SMALL //Slightly heavier. - if(9 to 10) w_class = WEIGHT_CLASS_NORMAL //Can't put it in your pockets and stuff. + if(3 to 5) + w_class = WEIGHT_CLASS_SMALL //Slightly heavier. + if(9 to 10) + w_class = WEIGHT_CLASS_NORMAL //Can't put it in your pockets and stuff. + +///changes .dir to simulate new casings, also sets the new w_class +/obj/item/ammo_casing/proc/update_dir() + var/base_direction = current_casings - (current_icon * 8) + setDir(base_direction + round(base_direction)/3) + switch(current_casings) + if(3 to 5) + w_class = WEIGHT_CLASS_SMALL //Slightly heavier. + if(9 to 10) + w_class = WEIGHT_CLASS_NORMAL //Can't put it in your pockets and stuff. +/obj/item/ammo_casing/update_icon() + update_dir() + return ..() //Making child objects so that locate() and istype() doesn't screw up. /obj/item/ammo_casing/bullet @@ -352,7 +391,7 @@ Turn() or Shift() as there is virtually no overhead. ~N icon = 'icons/obj/items/ammo.dmi' icon_state = "big_ammo_box" item_state = "big_ammo_box" - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK base_icon_state = "big_ammo_box" var/default_ammo = /datum/ammo/bullet/rifle var/bullet_amount = 2400 @@ -360,6 +399,7 @@ Turn() or Shift() as there is virtually no overhead. ~N var/caliber = CALIBER_10X24_CASELESS /obj/item/big_ammo_box/update_icon_state() + . = ..() if(bullet_amount) icon_state = base_icon_state return @@ -374,13 +414,15 @@ Turn() or Shift() as there is virtually no overhead. ~N /obj/item/big_ammo_box/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/ammo_magazine)) var/obj/item/ammo_magazine/AM = I if(!isturf(loc)) to_chat(user, span_warning("[src] must be on the ground to be used.")) return - if(AM.flags_magazine & MAGAZINE_REFILLABLE) + if(AM.magazine_flags & MAGAZINE_REFILLABLE) if(default_ammo != AM.default_ammo) to_chat(user, span_warning("Those aren't the same rounds. Better not mix them up.")) return @@ -398,13 +440,13 @@ Turn() or Shift() as there is virtually no overhead. ~N var/S = min(bullet_amount, AM.max_rounds - AM.current_rounds) AM.current_rounds += S bullet_amount -= S - AM.update_icon(S) + AM.update_icon() update_icon() if(AM.current_rounds == AM.max_rounds) to_chat(user, span_notice("You refill [AM].")) else to_chat(user, span_notice("You put [S] rounds in [AM].")) - else if(AM.flags_magazine & MAGAZINE_HANDFUL) + else if(AM.magazine_flags & MAGAZINE_HANDFUL) if(caliber != AM.caliber) to_chat(user, span_warning("The rounds don't match up. Better not mix them up.")) return @@ -437,7 +479,7 @@ Turn() or Shift() as there is virtually no overhead. ~N item_state = "ammoboxslug" base_icon_state = "ammoboxslug" w_class = WEIGHT_CLASS_HUGE - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK ///Current stored rounds var/current_rounds = 200 ///Maximum stored rounds @@ -450,7 +492,8 @@ Turn() or Shift() as there is virtually no overhead. ~N var/caliber = CALIBER_12G -/obj/item/shotgunbox/update_icon() +/obj/item/shotgunbox/update_icon_state() + . = ..() if(!deployed) icon_state = "[initial(icon_state)]" else if(current_rounds > 0) @@ -508,6 +551,8 @@ Turn() or Shift() as there is virtually no overhead. ~N /obj/item/shotgunbox/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!istype(I, /obj/item/ammo_magazine/handful)) return diff --git a/code/modules/projectiles/gun_attachables.dm b/code/modules/projectiles/gun_attachables.dm index 1c69ae4681cf4..afec546fc066d 100644 --- a/code/modules/projectiles/gun_attachables.dm +++ b/code/modules/projectiles/gun_attachables.dm @@ -26,16 +26,12 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. icon_state = null item_state = null - greyscale_config = null - greyscale_colors = GUN_PALETTE_BLACK - colorable_colors = GUN_PALETTE_LIST - ///Determines the amount of pixels to move the icon state for the overlay. in the x direction var/pixel_shift_x = 16 ///Determines the amount of pixels to move the icon state for the overlay. in the y direction var/pixel_shift_y = 16 - flags_atom = CONDUCT + atom_flags = CONDUCT w_class = WEIGHT_CLASS_SMALL force = 1 ///ATTACHMENT_SLOT_MUZZLE, ATTACHMENT_SLOT_RAIL, ATTACHMENT_SLOT_UNDER, ATTACHMENT_SLOT_STOCK the particular 'slot' the attachment can attach to. must always be a singular slot. @@ -120,7 +116,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. var/activation_sound = 'sound/machines/click.ogg' ///various yes no flags associated with attachments. See defines for these: [ATTACH_REMOVABLE] - var/flags_attach_features = ATTACH_REMOVABLE + var/attach_features_flags = ATTACH_REMOVABLE ///only used by lace, denotes whether the lace is currently deployed var/lace_deployed = FALSE @@ -158,7 +154,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. /obj/item/attachable/Initialize(mapload) . = ..() - AddElement(/datum/element/attachment, slot, icon, PROC_REF(on_attach), PROC_REF(on_detach), PROC_REF(activate), PROC_REF(can_attach), pixel_shift_x, pixel_shift_y, flags_attach_features, attach_delay, detach_delay, attach_skill, attach_skill_upper_threshold, attach_sound) + AddElement(/datum/element/attachment, slot, icon, PROC_REF(on_attach), PROC_REF(on_detach), PROC_REF(activate), PROC_REF(can_attach), pixel_shift_x, pixel_shift_y, attach_features_flags, attach_delay, detach_delay, attach_skill, attach_skill_upper_threshold, attach_sound) ///Called when the attachment is attached to something. If it is a gun it will update the guns stats. /obj/item/attachable/proc/on_attach(attaching_item, mob/user) @@ -184,14 +180,6 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. icon_state = variants_by_parent_type[selection] update_icon() - if(!greyscale_colors || !greyscale_config) - return - RegisterSignal(master_gun, COMSIG_ITEM_SECONDARY_COLOR, PROC_REF(handle_color)) - -///Sends a list of available colored attachments to be colored when the parent is right clicked with paint. -/obj/item/attachable/proc/handle_color(datum/source, mob/user, list/obj/item/secondaries) - SIGNAL_HANDLER - secondaries += src ///Called when the attachment is detached from something. If the thing is a gun, it returns its stats to what they were before being attached. /obj/item/attachable/proc/on_detach(detaching_item, mob/user) @@ -211,9 +199,6 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. master_gun = null icon_state = initial(icon_state) update_icon() - if(!greyscale_config || !greyscale_colors) - return - UnregisterSignal(master_gun, COMSIG_ITEM_SECONDARY_COLOR) ///Handles the modifiers to the parent gun /obj/item/attachable/proc/apply_modifiers(attaching_item, mob/user, attaching) @@ -325,9 +310,10 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. master_gun.fire_sound = initial(master_gun.fire_sound) /obj/item/attachable/ui_action_click(mob/living/user, datum/action/item_action/action, obj/item/weapon/gun/G) - if(G == user.get_active_held_item() || G == user.get_inactive_held_item() || CHECK_BITFIELD(G.flags_item, IS_DEPLOYED)) - if(activate(user)) //success + if(G == user.get_active_held_item() || G == user.get_inactive_held_item() || CHECK_BITFIELD(G.item_flags, IS_DEPLOYED)) + if(activate(user)) playsound(user, activation_sound, 15, 1) + return TRUE else to_chat(user, span_warning("[G] must be in our hands to do this.")) @@ -358,7 +344,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. damage_falloff_mod = 0.1 /obj/item/attachable/suppressor/unremovable - flags_attach_features = NONE + attach_features_flags = NONE /obj/item/attachable/suppressor/unremovable/invisible @@ -486,7 +472,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. icon_state = "sniperbarrel" desc = "A heavy barrel. CANNOT BE REMOVED." slot = ATTACHMENT_SLOT_MUZZLE - flags_attach_features = NONE + attach_features_flags = NONE accuracy_mod = 0.15 scatter_mod = -3 @@ -495,7 +481,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. icon_state = "t81barrel" desc = "A heavy barrel. CANNOT BE REMOVED." slot = ATTACHMENT_SLOT_UNDER - flags_attach_features = NONE + attach_features_flags = NONE pixel_shift_x = 7 pixel_shift_y = 14 accuracy_mod = 0 @@ -506,7 +492,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. icon_state = "smartbarrel" desc = "A heavy rotating barrel. CANNOT BE REMOVED." slot = ATTACHMENT_SLOT_MUZZLE - flags_attach_features = NONE + attach_features_flags = NONE /obj/item/attachable/focuslens name = "M43 focused lens" @@ -552,7 +538,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. desc = "The standard barrel on the SX-16. CANNOT BE REMOVED." slot = ATTACHMENT_SLOT_MUZZLE icon_state = "sx16barrel" - flags_attach_features = NONE + attach_features_flags = NONE /obj/item/attachable/pulselens name = "M43 pulse lens" @@ -569,7 +555,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. icon_state = "sg29barrel" desc = "A heavy barrel. CANNOT BE REMOVED." slot = ATTACHMENT_SLOT_MUZZLE - flags_attach_features = NONE + attach_features_flags = NONE ///////////// Rail attachments //////////////////////// @@ -580,7 +566,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. slot = ATTACHMENT_SLOT_RAIL accuracy_mod = 0.15 accuracy_unwielded_mod = 0.1 - aim_mode_delay_mod = -0.5 + aim_mode_movement_mult = -0.35 variants_by_parent_type = list(/obj/item/weapon/gun/rifle/som = "", /obj/item/weapon/gun/shotgun/som = "") /obj/item/attachable/m16sight @@ -600,7 +586,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. light_mod = 6 light_system = MOVABLE_LIGHT slot = ATTACHMENT_SLOT_RAIL - flags_attach_features = ATTACH_REMOVABLE|ATTACH_ACTIVATION + attach_features_flags = ATTACH_REMOVABLE|ATTACH_ACTIVATION attachment_action_type = /datum/action/item_action/toggle activation_sound = 'sound/items/flashlight.ogg' @@ -643,6 +629,8 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. /obj/item/attachable/flashlight/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I,/obj/item/tool/screwdriver)) to_chat(user, span_notice("You modify the rail flashlight back into a normal flashlight.")) @@ -657,7 +645,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. desc = "A simple flashlight used for mounting on a firearm. \nHas no drawbacks, but isn't particuraly useful outside of providing a light source." icon_state = "uflashlight" slot = ATTACHMENT_SLOT_UNDER - flags_attach_features = ATTACH_REMOVABLE|ATTACH_ACTIVATION + attach_features_flags = ATTACH_REMOVABLE|ATTACH_ACTIVATION @@ -684,7 +672,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. . = ..() if(!master_gun) return - reequip_component = master_gun.AddComponent(/datum/component/reequip, list(SLOT_S_STORE, SLOT_BACK)) + reequip_component = master_gun.AddComponent(/datum/component/reequip, list(SLOT_S_STORE, SLOT_BELT, SLOT_BACK)) /obj/item/attachable/magnetic_harness/on_detach(attaching_item, mob/user) . = ..() @@ -700,7 +688,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. aim_speed_mod = 0.5 //Extra slowdown when aiming wield_delay_mod = 0.4 SECONDS scoped_accuracy_mod = SCOPE_RAIL //accuracy mod of 0.4 when scoped - flags_attach_features = ATTACH_REMOVABLE|ATTACH_ACTIVATION + attach_features_flags = ATTACH_REMOVABLE|ATTACH_ACTIVATION attachment_action_type = /datum/action/item_action/toggle scope_zoom_mod = TRUE // codex accuracy_unwielded_mod = -0.05 @@ -753,7 +741,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. icon_state = "t76scope" /obj/item/attachable/scope/unremovable - flags_attach_features = ATTACH_ACTIVATION + attach_features_flags = ATTACH_ACTIVATION /obj/item/attachable/scope/unremovable/flaregun name = "long range ironsights" @@ -797,16 +785,16 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. scope_delay = 2 SECONDS zoom_tile_offset = 7 -/obj/item/attachable/scope/unremovable/tl102 +/obj/item/attachable/scope/unremovable/hsg_102 name = "HSG-102 smart sight" - desc = "An unremovable smart sight built for use with the tl102, it does nearly all the aiming work for the gun's integrated IFF systems." + desc = "An unremovable smart sight built for use with the HSG-102, it does nearly all the aiming work for the gun's integrated IFF systems." icon_state = "sniperscope_invisible" zoom_viewsize = 0 zoom_tile_offset = 5 deployed_scope_rezoom = TRUE //all mounted guns with a nest use this -/obj/item/attachable/scope/unremovable/tl102/nest +/obj/item/attachable/scope/unremovable/hsg_102/nest scope_delay = 2 SECONDS zoom_tile_offset = 7 zoom_viewsize = 5 //RU TGMC EDIT @@ -818,11 +806,11 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. zoom(user) return TRUE - if(!(master_gun.flags_item & WIELDED) && !CHECK_BITFIELD(master_gun.flags_item, IS_DEPLOYED)) + if(!(master_gun.item_flags & WIELDED) && !CHECK_BITFIELD(master_gun.item_flags, IS_DEPLOYED)) if(user) to_chat(user, span_warning("You must hold [master_gun] with two hands to use [src].")) return FALSE - if(CHECK_BITFIELD(master_gun.flags_item, IS_DEPLOYED) && user.dir != master_gun.loc.dir) + if(CHECK_BITFIELD(master_gun.item_flags, IS_DEPLOYED) && user.dir != master_gun.loc.dir) user.setDir(master_gun.loc.dir) if(!do_after(user, scope_delay, NONE, src, BUSY_ICON_BAR)) return FALSE @@ -842,7 +830,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. RegisterSignal(user, COMSIG_CARBON_SWAPPED_HANDS, PROC_REF(zoom_item_turnoff)) else RegisterSignals(user, list(COMSIG_MOVABLE_MOVED, COMSIG_CARBON_SWAPPED_HANDS), PROC_REF(zoom_item_turnoff)) - if(!CHECK_BITFIELD(master_gun.flags_item, IS_DEPLOYED)) + if(!CHECK_BITFIELD(master_gun.item_flags, IS_DEPLOYED)) RegisterSignal(user, COMSIG_MOB_FACE_DIR, PROC_REF(change_zoom_offset)) RegisterSignals(master_gun, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_UNWIELD, COMSIG_ITEM_DROPPED), PROC_REF(zoom_item_turnoff)) master_gun.accuracy_mult += scoped_accuracy_mod @@ -889,6 +877,11 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. desc = "A marine standard mounted zoom sight scope made for the Terra Experimental laser sniper rifle otherwise known as TE-S abbreviated, allows zoom by activating the attachment." icon_state = "tes" +/obj/item/attachable/scope/unremovable/plasma_sniper_scope + name = "PL-02 sniper rifle rail scope" + desc = "A marine standard mounted zoom sight scope made for the PL-02 plasma sniper rifle, allows zoom by activating the attachment. Use F12 if your HUD doesn't come back." + icon_state = "plasma_scope" + /obj/item/attachable/scope/mini name = "mini rail scope" icon_state = "miniscope" @@ -917,7 +910,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. scoped_accuracy_mod = SCOPE_RAIL_SNIPER has_nightvision = TRUE zoom_allow_movement = FALSE - flags_attach_features = ATTACH_ACTIVATION|ATTACH_REMOVABLE + attach_features_flags = ATTACH_ACTIVATION|ATTACH_REMOVABLE pixel_shift_x = 0 pixel_shift_y = 17 @@ -927,7 +920,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. /obj/item/attachable/scope/pmc icon_state = "pmcscope" - flags_attach_features = ATTACH_ACTIVATION + attach_features_flags = ATTACH_ACTIVATION /obj/item/attachable/scope/mini/dmr name = "DMR-37 mini rail scope" @@ -941,7 +934,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. name = "default stock" desc = "Default parent object, not meant for use." slot = ATTACHMENT_SLOT_STOCK - flags_attach_features = NONE //most stocks are not removable + attach_features_flags = NONE //most stocks are not removable size_mod = 2 pixel_shift_x = 30 pixel_shift_y = 14 @@ -1003,8 +996,6 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. name = "SG-29 stock" desc = "A standard machinegun stock." icon_state = "sg29stock" - greyscale_config = /datum/greyscale_config/gun_attachment - colorable_allowed = PRESET_COLORS_ALLOWED pixel_shift_x = 32 pixel_shift_y = 13 @@ -1033,8 +1024,6 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. name = "\improper SR-127 stock" desc = "A irremovable SR-127 sniper rifle stock." icon_state = "tl127stock" - greyscale_config = /datum/greyscale_config/gun_attachment - colorable_allowed = PRESET_COLORS_ALLOWED pixel_shift_x = 32 pixel_shift_y = 13 @@ -1088,7 +1077,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. pixel_shift_x = 32 pixel_shift_y = 13 size_mod = 1 - flags_attach_features = ATTACH_REMOVABLE + attach_features_flags = ATTACH_REMOVABLE wield_delay_mod = 0.2 SECONDS accuracy_mod = 0.15 recoil_mod = -2 @@ -1098,8 +1087,6 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. name = "MG-60 stock" desc = "A irremovable MG-60 general purpose machinegun stock." icon_state = "t60stock" - greyscale_config = /datum/greyscale_config/gun_attachment - colorable_allowed = PRESET_COLORS_ALLOWED pixel_shift_x = 32 pixel_shift_y = 13 @@ -1164,7 +1151,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. name = "T-76 magnum stock" desc = "A R-76 magnum stock. Makes about all your handling better outside of making it harder to wield. Recommended to be kept on the R-76 at all times if you value your shoulder." icon_state = "t76stock" - flags_attach_features = ATTACH_REMOVABLE + attach_features_flags = ATTACH_REMOVABLE melee_mod = 5 scatter_mod = -1 size_mod = 2 @@ -1179,8 +1166,6 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. name = "vertical grip" desc = "A custom-built improved foregrip for better accuracy, moderately faster aimed movement speed, less recoil, and less scatter when wielded especially during burst fire. \nHowever, it also increases weapon size, slightly increases wield delay and makes unwielded fire more cumbersome." icon_state = "verticalgrip" - greyscale_config = /datum/greyscale_config/gun_attachment - colorable_allowed = PRESET_COLORS_ALLOWED wield_delay_mod = 0.2 SECONDS size_mod = 1 slot = ATTACHMENT_SLOT_UNDER @@ -1199,8 +1184,6 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. name = "angled grip" desc = "A custom-built improved foregrip for less recoil, and faster wielding time. \nHowever, it also increases weapon size, and slightly hinders unwielded firing." icon_state = "angledgrip" - greyscale_config = /datum/greyscale_config/gun_attachment - colorable_allowed = PRESET_COLORS_ALLOWED wield_delay_mod = -0.3 SECONDS size_mod = 1 slot = ATTACHMENT_SLOT_UNDER @@ -1240,7 +1223,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. desc = "A simple lace to wrap around your wrist." icon_state = "lace" slot = ATTACHMENT_SLOT_MUZZLE //so you cannot have this and RC at once aka balance - flags_attach_features = ATTACH_REMOVABLE|ATTACH_ACTIVATION + attach_features_flags = ATTACH_REMOVABLE|ATTACH_ACTIVATION attachment_action_type = /datum/action/item_action/toggle /obj/item/attachable/lace/activate(mob/living/user, turn_off) @@ -1289,7 +1272,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. desc = "A foldable stock. You shouldn't see this." icon_state = "" slot = ATTACHMENT_SLOT_STOCK - flags_attach_features = ATTACH_REMOVABLE|ATTACH_ACTIVATION + attach_features_flags = ATTACH_REMOVABLE|ATTACH_ACTIVATION attachment_action_type = /datum/action/item_action/toggle ///How long it takes to fold or unfold var/deploy_time @@ -1316,9 +1299,6 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. icon_state = variants_by_parent_type[selection] update_icon() - if(!greyscale_config || !greyscale_colors) - return - RegisterSignal(master_gun, COMSIG_ITEM_SECONDARY_COLOR, PROC_REF(handle_color)) /obj/item/attachable/foldable/on_detach(detaching_item, mob/user) if(!isgun(detaching_item)) @@ -1336,9 +1316,6 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. master_gun = null icon_state = initial(icon_state) update_icon() - if(!greyscale_config || !greyscale_colors) - return - UnregisterSignal(master_gun, COMSIG_ITEM_SECONDARY_COLOR) /obj/item/attachable/foldable/activate(mob/living/user, turn_off) if(user && deploy_time && !do_after(user, deploy_time, NONE, src, BUSY_ICON_BAR)) @@ -1368,7 +1345,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. desc = "A foldable wire stock for a Skorpion submachinegun" icon = 'icons/Marine/attachments_64.dmi' icon_state = "skorpion" - flags_attach_features = ATTACH_ACTIVATION + attach_features_flags = ATTACH_ACTIVATION pixel_shift_x = 0 pixel_shift_y = 0 size_mod = 2 @@ -1382,7 +1359,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. /obj/item/attachable/foldable/t19stock name = "\improper MP-19 machinepistol stock" desc = "A submachinegun stock distributed in small numbers to TGMC forces. Compatible with the MP-19, this stock reduces recoil and improves accuracy, but at a reduction to handling and agility. Seemingly a bit more effective in a brawl." - flags_attach_features = ATTACH_ACTIVATION + attach_features_flags = ATTACH_ACTIVATION wield_delay_mod = 0.1 SECONDS melee_mod = 5 size_mod = 1 @@ -1396,7 +1373,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. /obj/item/attachable/foldable/som_carbine name = "\improper V-34 carbine stock" desc = "A side folding stock built into the V-34 carbine. The gun is designed to be fired with the stock deployed, but can be done without, with some difficulty." - flags_attach_features = ATTACH_ACTIVATION + attach_features_flags = ATTACH_ACTIVATION wield_delay_mod = 0.1 SECONDS melee_mod = 5 size_mod = 1 @@ -1409,7 +1386,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. /obj/item/attachable/foldable/icc_machinepistol name = "\improper PL-38 machinepistol stock" desc = "A submachinegun stock found on ICC subguns, this stock reduces recoil and improves accuracy, but at a reduction to handling and agility. Seemingly a bit more effective in a brawl." - flags_attach_features = ATTACH_ACTIVATION + attach_features_flags = ATTACH_ACTIVATION icon = 'icons/Marine/attachments_64.dmi' wield_delay_mod = 0.1 SECONDS melee_mod = 5 @@ -1426,9 +1403,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. desc = "A non-standard heavy stock for the SH-35 shotgun. Less quick and more cumbersome than the standard issue stakeout, but reduces recoil and improves accuracy. Allegedly makes a pretty good club in a fight too." icon = 'icons/Marine/attachments_64.dmi' icon_state = "t35stock" - greyscale_config = /datum/greyscale_config/gun_attachment_64 - colorable_allowed = PRESET_COLORS_ALLOWED - flags_attach_features = ATTACH_ACTIVATION + attach_features_flags = ATTACH_ACTIVATION wield_delay_mod = 0.2 SECONDS accuracy_mod = 0.15 recoil_mod = -3 @@ -1448,7 +1423,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. aim_mode_delay_mod = -0.5 /obj/item/attachable/foldable/bipod/activate(mob/living/user, turn_off) - if(folded && !(master_gun.flags_item & WIELDED)) //no one handed bipod use + if(folded && !(master_gun.item_flags & WIELDED)) //no one handed bipod use if(user) balloon_alert(user, "Unwielded") return @@ -1499,13 +1474,13 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. /obj/item/attachable/buildasentry/on_attach(attaching_item, mob/user) . = ..() - ENABLE_BITFIELD(master_gun.flags_item, IS_DEPLOYABLE) + ENABLE_BITFIELD(master_gun.item_flags, IS_DEPLOYABLE) master_gun.deployable_item = /obj/machinery/deployable/mounted/sentry/buildasentry master_gun.ignored_terrains = list( /obj/machinery/deployable/mounted, /obj/machinery/miner, ) - if(master_gun.ammo_datum_type && CHECK_BITFIELD(initial(master_gun.ammo_datum_type.flags_ammo_behavior), AMMO_ENERGY) || istype(master_gun, /obj/item/weapon/gun/energy)) //If the guns ammo is energy, the sentry will shoot at things past windows. + if(master_gun.ammo_datum_type && CHECK_BITFIELD(initial(master_gun.ammo_datum_type.ammo_behavior_flags), AMMO_ENERGY) || istype(master_gun, /obj/item/weapon/gun/energy)) //If the guns ammo is energy, the sentry will shoot at things past windows. master_gun.ignored_terrains += list( /obj/structure/window, /obj/structure/window/reinforced, @@ -1522,171 +1497,12 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. /obj/item/attachable/buildasentry/on_detach(detaching_item, mob/user) . = ..() var/obj/item/weapon/gun/detaching_gun = detaching_item - DISABLE_BITFIELD(detaching_gun.flags_item, IS_DEPLOYABLE) + DISABLE_BITFIELD(detaching_gun.item_flags, IS_DEPLOYABLE) qdel(detaching_gun.GetComponent(/datum/component/deployable_item)) detaching_gun.ignored_terrains = null detaching_gun.deployable_item = null detaching_gun.turret_flags &= ~(TURRET_HAS_CAMERA|TURRET_SAFETY|TURRET_ALERTS) - -/obj/item/attachable/shoulder_mount - name = "experimental shoulder attachment point" - desc = "A brand new advance in combat technology. This device, once attached to a firearm, will allow the firearm to be mounted onto any piece of modular armor. Once attached to the armor and activated, the gun will fire when the user chooses.\nOnce attached to the armor, right clicking the armor with an empty hand will select what click will fire the armor (middle, right, left). Right clicking with ammunition will reload the gun. Using the Unique Action keybind will perform the weapon's unique action only when the gun is active." - icon = 'icons/mob/modular/shoulder_gun.dmi' - icon_state = "shoulder_gun" - slot = ATTACHMENT_SLOT_RAIL - pixel_shift_x = 13 - ///What click the gun will fire on. - var/fire_mode = "right" - ///Blacklist of item types not allowed to be in the users hand to fire the gun. - var/list/in_hand_items_blacklist = list( - /obj/item/weapon/gun, - /obj/item/weapon/shield, - ) - -/obj/item/attachable/shoulder_mount/on_attach(attaching_item, mob/user) - . = ..() - var/obj/item/weapon/gun/attaching_gun = attaching_item - ENABLE_BITFIELD(flags_attach_features, ATTACH_BYPASS_ALLOWED_LIST|ATTACH_APPLY_ON_MOB) - attaching_gun.AddElement(/datum/element/attachment, ATTACHMENT_SLOT_MODULE, icon, null, null, null, null, 0, 0, flags_attach_features, attach_delay, detach_delay, attach_skill, attach_skill_upper_threshold, attach_sound, attachment_layer = COLLAR_LAYER) - RegisterSignal(attaching_gun, COMSIG_ATTACHMENT_ATTACHED, PROC_REF(handle_armor_attach)) - RegisterSignal(attaching_gun, COMSIG_ATTACHMENT_DETACHED, PROC_REF(handle_armor_detach)) - -/obj/item/attachable/shoulder_mount/on_detach(detaching_item, mob/user) - var/obj/item/weapon/gun/detaching_gun = detaching_item - detaching_gun.RemoveElement(/datum/element/attachment, ATTACHMENT_SLOT_MODULE, icon, null, null, null, null, 0, 0, flags_attach_features, attach_delay, detach_delay, attach_skill, attach_skill_upper_threshold, attach_sound, attachment_layer = COLLAR_LAYER) - DISABLE_BITFIELD(flags_attach_features, ATTACH_BYPASS_ALLOWED_LIST|ATTACH_APPLY_ON_MOB) - UnregisterSignal(detaching_gun, list(COMSIG_ATTACHMENT_ATTACHED, COMSIG_ATTACHMENT_DETACHED)) - return ..() - -/obj/item/attachable/shoulder_mount/ui_action_click(mob/living/user, datum/action/item_action/action, obj/item/weapon/gun/G) - if(!istype(master_gun.loc, /obj/item/clothing/suit/modular) || master_gun.loc.loc != user) - return - activate(user) - -/obj/item/attachable/shoulder_mount/activate(mob/user, turn_off) - . = ..() - if(CHECK_BITFIELD(master_gun.flags_item, IS_DEPLOYED)) - DISABLE_BITFIELD(master_gun.flags_item, IS_DEPLOYED) - UnregisterSignal(user, COMSIG_MOB_MOUSEDOWN) - master_gun.set_gun_user(null) - . = FALSE - else if(!turn_off) - ENABLE_BITFIELD(master_gun.flags_item, IS_DEPLOYED) - update_icon() - master_gun.set_gun_user(user) - RegisterSignal(user, COMSIG_MOB_MOUSEDOWN, PROC_REF(handle_firing)) - master_gun.RegisterSignal(user, COMSIG_MOB_MOUSEDRAG, TYPE_PROC_REF(/obj/item/weapon/gun, change_target)) - . = TRUE - for(var/datum/action/item_action/toggle/action_to_update AS in actions) - action_to_update.set_toggle(.) - action_to_update.update_button_icon() - -///Handles the gun attaching to the armor. -/obj/item/attachable/shoulder_mount/proc/handle_armor_attach(datum/source, attaching_item, mob/user) - SIGNAL_HANDLER - if(!istype(attaching_item, /obj/item/clothing/suit/modular)) - return - master_gun.set_gun_user(null) - RegisterSignal(attaching_item, COMSIG_ITEM_EQUIPPED, PROC_REF(handle_activations)) - RegisterSignal(attaching_item, COMSIG_ATOM_ATTACK_HAND_ALTERNATE, PROC_REF(switch_mode)) - RegisterSignal(attaching_item, COMSIG_ATOM_ATTACKBY_ALTERNATE, PROC_REF(reload_gun)) - RegisterSignal(master_gun, COMSIG_MOB_GUN_FIRED, PROC_REF(after_fire)) - master_gun.base_gun_icon = master_gun.placed_overlay_iconstate - master_gun.update_icon() - -///Handles the gun detaching from the armor. -/obj/item/attachable/shoulder_mount/proc/handle_armor_detach(datum/source, detaching_item, mob/user) - SIGNAL_HANDLER - if(!istype(detaching_item, /obj/item/clothing/suit/modular)) - return - for(var/datum/action/action_to_delete AS in actions) - if(action_to_delete.target != src) - continue - QDEL_NULL(action_to_delete) - break - update_icon(user) - master_gun.base_gun_icon = initial(master_gun.icon_state) - master_gun.update_icon() - UnregisterSignal(detaching_item, list(COMSIG_ITEM_EQUIPPED, COMSIG_ATOM_ATTACK_HAND_ALTERNATE, COMSIG_ATOM_ATTACKBY_ALTERNATE)) - UnregisterSignal(master_gun, COMSIG_MOB_GUN_FIRED) - UnregisterSignal(user, COMSIG_MOB_MOUSEDOWN) - -///Sets up the action. -/obj/item/attachable/shoulder_mount/proc/handle_activations(datum/source, mob/equipper, slot) - if(!isliving(equipper)) - return - if(slot != SLOT_WEAR_SUIT) - LAZYREMOVE(actions_types, /datum/action/item_action/toggle) - var/datum/action/item_action/toggle/old_action = locate(/datum/action/item_action/toggle) in actions - if(!old_action) - return - old_action.remove_action(equipper) - actions = null - else - LAZYADD(actions_types, /datum/action/item_action/toggle) - var/datum/action/item_action/toggle/new_action = new(src) - new_action.give_action(equipper) - -///Performs the firing. -/obj/item/attachable/shoulder_mount/proc/handle_firing(datum/source, atom/object, turf/location, control, params) - SIGNAL_HANDLER - var/list/modifiers = params2list(params) - if(!modifiers[fire_mode]) - return - if(!istype(master_gun.loc, /obj/item/clothing/suit/modular) || master_gun.loc.loc != source) - return - if(source.Adjacent(object)) - return - var/mob/living/user = master_gun.gun_user - if(user.incapacitated() || user.lying_angle || LAZYACCESS(user.do_actions, src) || !user.dextrous || (!CHECK_BITFIELD(master_gun.flags_gun_features, GUN_ALLOW_SYNTHETIC) && !CONFIG_GET(flag/allow_synthetic_gun_use) && issynth(user))) - return - var/active_hand = user.get_active_held_item() - var/inactive_hand = user.get_inactive_held_item() - for(var/item_blacklisted in in_hand_items_blacklist) - if(!istype(active_hand, item_blacklisted) && !istype(inactive_hand, item_blacklisted)) - continue - to_chat(user, span_warning("[src] beeps. Guns or shields in your hands are interfering with its targetting. Aborting.")) - return - master_gun.start_fire(source, object, location, control, null, TRUE) - -///Switches click fire modes. -/obj/item/attachable/shoulder_mount/proc/switch_mode(datum/source, mob/living/user) - SIGNAL_HANDLER - switch(fire_mode) - if("right") - fire_mode = "middle" - to_chat(user, span_notice("[master_gun] will now fire on a 'middle click'.")) - if("middle") - fire_mode = "left" - to_chat(user, span_notice("[master_gun] will now fire on a 'left click'.")) - if("left") - fire_mode = "right" - to_chat(user, span_notice("[master_gun] will now fire on a 'right click'.")) - -///Reloads the gun -/obj/item/attachable/shoulder_mount/proc/reload_gun(datum/source, obj/item/attacking_item, mob/living/user) - SIGNAL_HANDLER - INVOKE_ASYNC(master_gun, TYPE_PROC_REF(/obj/item/weapon/gun, reload), attacking_item, user) - -///Performs the unique action after firing and checks to see if the user is still able to fire. -/obj/item/attachable/shoulder_mount/proc/after_fire(datum/source, atom/target, obj/item/weapon/gun/fired_gun) - SIGNAL_HANDLER - if(CHECK_BITFIELD(master_gun.reciever_flags, AMMO_RECIEVER_REQUIRES_UNIQUE_ACTION)) - INVOKE_ASYNC(master_gun, TYPE_PROC_REF(/obj/item/weapon/gun, do_unique_action), master_gun.gun_user) - var/mob/living/user = master_gun.gun_user - var/active_hand = user.get_active_held_item() - var/inactive_hand = user.get_inactive_held_item() - for(var/item_blacklisted in in_hand_items_blacklist) - if(!istype(active_hand, item_blacklisted) && !istype(inactive_hand, item_blacklisted)) - continue - to_chat(user, span_warning("[src] beeps. Guns or shields in your hands are interfering with its targetting. Stopping fire.")) - master_gun.stop_fire() - return - if(!user.incapacitated() && !user.lying_angle && !LAZYACCESS(user.do_actions, src) && user.dextrous && (CHECK_BITFIELD(master_gun.flags_gun_features, GUN_ALLOW_SYNTHETIC) || CONFIG_GET(flag/allow_synthetic_gun_use) || !issynth(user))) - return - master_gun.stop_fire() - /obj/item/attachable/flamer_nozzle name = "standard flamer nozzle" desc = "The standard flamer nozzle. This one fires a stream of fire for direct and accurate flames. Though not as area filling as its counterpart, this one excels at directed frontline combat." @@ -1695,7 +1511,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. attach_delay = 2 SECONDS detach_delay = 2 SECONDS - ///This is pulled when the parent flamer fires, it determins how the parent flamers fire stream acts. + ///This is pulled when the parent flamer fires, it determines how the parent flamers fire stream acts. var/stream_type = FLAMER_STREAM_STRAIGHT ///Modifier for burn level of attached flamer. Percentage based. @@ -1728,7 +1544,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. flamer.mob_flame_damage_mod /= mob_flame_damage_mod /obj/item/attachable/flamer_nozzle/unremovable - flags_attach_features = NONE + attach_features_flags = NONE /obj/item/attachable/flamer_nozzle/unremovable/invisible icon_state = null @@ -1789,8 +1605,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. attached_to:gunattachment = src activate(user) new_action.set_toggle(TRUE) - new_action.update_button_icon() - update_icon(user) + update_icon() RegisterSignal(master_gun, COMSIG_ITEM_REMOVED_INVENTORY, TYPE_PROC_REF(/obj/item/weapon/gun, drop_connected_mag)) ///This is called when an attachment gun (src) detaches from a gun. @@ -1809,7 +1624,7 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. UnregisterSignal(master_gun, COMSIG_ITEM_REMOVED_INVENTORY) master_gun = null attached_to:gunattachment = null - update_icon(user) + update_icon() ///This activates the weapon for use. /obj/item/weapon/gun/proc/activate(mob/user) @@ -1825,11 +1640,6 @@ inaccurate. Don't worry if force is ever negative, it won't runtime. set_gun_user(null) set_gun_user(master_gun.gun_user) to_chat(user, span_notice("You start using [src].")) - for(var/datum/action/item_action/toggle/action AS in master_gun.actions) - if(action.target != src ) - continue - action.set_toggle(master_gun.active_attachable == src) - action.update_button_icon() return TRUE ///Called when the attachment is trying to be attached. If the attachment is allowed to go through, return TRUE. diff --git a/code/modules/projectiles/gun_helpers.dm b/code/modules/projectiles/gun_helpers.dm index 55ed0b9ce8854..32d4500c0d15b 100644 --- a/code/modules/projectiles/gun_helpers.dm +++ b/code/modules/projectiles/gun_helpers.dm @@ -26,6 +26,8 @@ /obj/item/weapon/gun/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(user.get_inactive_held_item() != src || istype(I, /obj/item/attachable) || isgun(I)) return reload(I, user) @@ -74,16 +76,16 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w /obj/item/weapon/gun/proc/do_wield(mob/user, wdelay) //*shrugs* if(wield_time > 0 && !do_after(user, wdelay, IGNORE_LOC_CHANGE, user, BUSY_ICON_HOSTILE, null, PROGRESS_CLOCK, CALLBACK(src, PROC_REF(is_wielded)))) return FALSE - flags_item |= FULLY_WIELDED + item_flags |= FULLY_WIELDED setup_bullet_accuracy() return TRUE /obj/item/weapon/gun/attack_self(mob/user) . = ..() //There are only two ways to interact here. - if(!CHECK_BITFIELD(flags_item, TWOHANDED)) + if(!(item_flags & TWOHANDED)) return - if(flags_item & WIELDED) + if(item_flags & WIELDED) unwield(user)//Trying to unwield it return wield(user)//Trying to wield it @@ -125,7 +127,7 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w if(istype(new_magazine.loc, /obj/item/storage)) var/obj/item/storage/S = new_magazine.loc S.remove_from_storage(new_magazine, get_turf(user), user) - if(!CHECK_BITFIELD(get_flags_magazine_features(new_magazine), MAGAZINE_WORN)) + if(!CHECK_BITFIELD(get_magazine_features_flags(new_magazine), MAGAZINE_WORN)) user.put_in_any_hand_if_possible(new_magazine) reload(new_magazine, user) @@ -154,7 +156,7 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w return 1 /obj/item/weapon/gun/proc/is_wielded() //temporary proc until we get traits going - return CHECK_BITFIELD(flags_item, WIELDED) + return CHECK_BITFIELD(item_flags, WIELDED) ///Checks the gun to see if it has an attachment of type attachment_type /obj/item/weapon/gun/proc/has_attachment(attachment_type) @@ -220,12 +222,9 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w var/datum/action/item_action/firemode/firemode_action = action if(!istype(firemode_action)) if(master_gun) - activate(user) - return + return activate(user) return ..() - do_toggle_firemode() - user.update_action_buttons() - + return do_toggle_firemode() /mob/living/carbon/human/verb/toggle_autofire() set category = "Weapons" @@ -334,11 +333,10 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w if(ishuman(source)) to_chat(source, span_notice("[icon2html(src, source)] You switch to [gun_firemode].")) - if(source == gun_user) - gun_user.update_action_buttons() playsound(src, 'sound/weapons/guns/interact/selector.ogg', 15, 1) SEND_SIGNAL(src, COMSIG_GUN_FIRE_MODE_TOGGLE, gun_firemode) setup_bullet_accuracy() + return TRUE /obj/item/weapon/gun/proc/add_firemode(added_firemode, mob/user) @@ -354,7 +352,7 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w var/datum/action/new_action = new /datum/action/item_action/firemode(src) if(user) var/mob/living/living_user = user - if((src == living_user.l_hand || src == living_user.r_hand) && !CHECK_BITFIELD(flags_item, IS_DEPLOYED)) + if((src == living_user.l_hand || src == living_user.r_hand) && !CHECK_BITFIELD(item_flags, IS_DEPLOYED)) new_action.give_action(living_user) else //The action should already be there by now. return @@ -369,7 +367,7 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w var/datum/action/old_action = locate(/datum/action/item_action/firemode) in actions if(user) var/mob/living/living_user = user - if((src == living_user.l_hand || src == living_user.r_hand) && !CHECK_BITFIELD(flags_item, IS_DEPLOYED)) + if((src == living_user.l_hand || src == living_user.r_hand) && !CHECK_BITFIELD(item_flags, IS_DEPLOYED)) old_action.remove_action(living_user) qdel(old_action) @@ -507,7 +505,7 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w var/list/usable_attachments = list() // rail attachment use the button to toggle flashlight instead. - // if(rail && (rail.flags_attach_features & ATTACH_ACTIVATION) ) + // if(rail && (rail.attach_features_flags & ATTACH_ACTIVATION) ) // usable_attachments += rail if(!length(attachments_by_slot)) balloon_alert(usr, "No usable attachments") @@ -518,7 +516,7 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w if(!attachment) continue var/obj/item/attachable/attachable = attachment - if(attachable.flags_attach_features & ATTACH_ACTIVATION) + if(attachable.attach_features_flags & ATTACH_ACTIVATION) usable_attachments += attachment if(!length(usable_attachments)) //No usable attachments. @@ -577,7 +575,7 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w balloon_alert(usr, "Automatic unloading [CHECK_BITFIELD(reciever_flags, AMMO_RECIEVER_AUTO_EJECT) ? "enabled" : "disabled"].") /obj/item/weapon/gun/item_action_slot_check(mob/user, slot) - if(slot != SLOT_L_HAND && slot != SLOT_R_HAND && !CHECK_BITFIELD(flags_item, IS_DEPLOYED)) + if(slot != SLOT_L_HAND && slot != SLOT_R_HAND && !CHECK_BITFIELD(item_flags, IS_DEPLOYED)) return FALSE return TRUE @@ -634,7 +632,7 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w /obj/item/weapon/gun/proc/toggle_auto_aim_mode(mob/living/carbon/human/user) //determines whether toggle_aim_mode activates at the end of gun/wield proc - if((flags_item & FULLY_WIELDED) || (flags_item & IS_DEPLOYED)) //if gun is wielded it toggles aim mode directly instead + if((item_flags & FULLY_WIELDED) || (item_flags & IS_DEPLOYED)) //if gun is wielded it toggles aim mode directly instead toggle_aim_mode(user) return @@ -661,7 +659,7 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w gunattachment.modify_auto_burst_delay(-aim_fire_delay) to_chat(user, span_notice("You cease aiming.")) return - if(!(flags_item & WIELDED) && !(flags_item & IS_DEPLOYED)) + if(!(item_flags & WIELDED) && !(item_flags & IS_DEPLOYED)) to_chat(user, span_notice("You need to wield your gun before aiming.")) return if(!user.wear_id) @@ -672,10 +670,10 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w if(user.do_actions) return if(!user.marksman_aura) - if(!do_after(user, aim_time, (flags_item & IS_DEPLOYED) ? NONE : IGNORE_USER_LOC_CHANGE, (flags_item & IS_DEPLOYED) ? loc : src, BUSY_ICON_BAR)) + if(!do_after(user, aim_time, (item_flags & IS_DEPLOYED) ? NONE : IGNORE_USER_LOC_CHANGE, (item_flags & IS_DEPLOYED) ? loc : src, BUSY_ICON_BAR)) to_chat(user, span_warning("Your concentration is interrupted!")) return - if(!(flags_item & WIELDED) && !(flags_item & IS_DEPLOYED)) + if(!(item_flags & WIELDED) && !(item_flags & IS_DEPLOYED)) to_chat(user, span_notice("You need to wield your gun before aiming.")) return user.overlays += aim_mode_visual @@ -693,7 +691,7 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w /// Signal handler to activate the rail attachement of that gun if it's in our active hand /obj/item/weapon/gun/proc/activate_rail_attachment() SIGNAL_HANDLER - if(gun_user?.get_active_held_item() != src && !(flags_item & IS_DEPLOYED)) + if(gun_user?.get_active_held_item() != src && !(item_flags & IS_DEPLOYED)) return activate_attachment(ATTACHMENT_SLOT_RAIL, gun_user) return COMSIG_KB_ACTIVATED @@ -701,7 +699,7 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w /// Signal handler to activate the underrail attachement of that gun if it's in our active hand /obj/item/weapon/gun/proc/activate_underrail_attachment() SIGNAL_HANDLER - if(gun_user?.get_active_held_item() != src && !(flags_item & IS_DEPLOYED)) + if(gun_user?.get_active_held_item() != src && !(item_flags & IS_DEPLOYED)) return activate_attachment(ATTACHMENT_SLOT_UNDER, gun_user) return COMSIG_KB_ACTIVATED diff --git a/code/modules/projectiles/gun_system.dm b/code/modules/projectiles/gun_system.dm index d7268d4bb8c52..393b33f9081a3 100644 --- a/code/modules/projectiles/gun_system.dm +++ b/code/modules/projectiles/gun_system.dm @@ -17,30 +17,26 @@ /obj/item/weapon/gun name = "Guns" desc = "Its a gun. It's pretty terrible, though." - icon = 'icons/obj/items/gun.dmi' icon_state = "" item_state = "gun" item_state_worn = TRUE item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', - ) + slot_l_hand_str = 'icons/mob/inhands/guns/rifles_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/rifles_right_1.dmi', + ) max_integrity = 250 w_class = WEIGHT_CLASS_NORMAL throwforce = 5 throw_speed = 4 throw_range = 5 force = 5 - flags_atom = CONDUCT - flags_item = TWOHANDED + atom_flags = CONDUCT + item_flags = TWOHANDED light_system = MOVABLE_LIGHT light_range = 0 light_color = COLOR_WHITE appearance_flags = KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE|LONG_GLIDE - greyscale_colors = GUN_PALETTE_BLACK - colorable_colors = GUN_PALETTE_LIST - /* * Muzzle Vars */ @@ -155,7 +151,7 @@ */ ///Innate carateristics of that gun - var/flags_gun_features = GUN_CAN_POINTBLANK + var/gun_features_flags = GUN_CAN_POINTBLANK ///Current selected firemode of the gun. var/gun_firemode = GUN_FIREMODE_SEMIAUTO ///List of allowed firemodes. @@ -178,10 +174,8 @@ var/shots_fired = 0 ///If this gun is in inactive hands and shooting in akimbo var/dual_wield = FALSE - ///determines upper accuracy modifier in akimbo - var/upper_akimbo_accuracy = 2 - ///determines lower accuracy modifier in akimbo - var/lower_akimbo_accuracy = 1 + ///mult to scatter when firing akimbo + var/akimbo_scatter_mod = 3 ///If fire delay is 1 second, and akimbo_additional_delay is 0.5, then you'll have to wait 1 second * 0.5 to fire the second gun var/akimbo_additional_delay = 0.5 ///Delay for the gun winding up before firing. @@ -238,7 +232,7 @@ ///Multiplier. Increased and decreased through attachments. Multiplies the accuracy/scatter penalty of the projectile when firing while moving. var/movement_acc_penalty_mult = 5 ///For regular shots, how long to wait before firing again. - var/fire_delay = 6 + var/fire_delay = 0.6 SECONDS ///Modifies the speed of projectiles fired. var/shell_speed_mod = 0 ///Modifies projectile damage by a % when a marine gets passed, but not hit @@ -264,7 +258,7 @@ ///Slowdown for wielding var/aim_slowdown = 0 ///How long between wielding and firing in tenths of seconds - var/wield_delay = 0.4 SECONDS + var/wield_delay = 0.6 SECONDS ///Extra wield delay for untrained operators var/wield_penalty = 0.2 SECONDS ///Storing value for above @@ -288,10 +282,27 @@ var/gun_accuracy_mod = 0 ///The actual scatter value of the fired projectile var/gun_scatter = 0 + /* - * extra icon and item states or overlays + * HEAT MECHANIC VARS + * */ + /// heat on this gun. at over 100 heat stops you from firing and goes on cooldown + var/heat_amount = 0 + ///heat that we add every successful fire() + var/heat_per_fire = 0 + ///heat reduction per second + var/cool_amount = 5 + ///tracks overheat timer ref + var/overheat_timer + ///multiplier on cool amount to determine overheat time + var/overheat_multiplier = 1.1 + ///image we create to keep track of heat + var/image/heat_bar/heat_meter +/* + * extra icon and item states or overlays +*/ ///Whether the gun has ammo level overlays for its icon, mainly for eguns var/ammo_level_icon ///Whether the icon_state overlay is offset in the x axis @@ -299,13 +310,12 @@ ///Whether the icon_state overlay is offset in the Y axis var/icon_overlay_y_offset = 0 + /* * * ATTACHMENT VARS * */ - - ///List of offsets to make attachment overlays not look wonky. var/list/attachable_offset = null ///List of allowed attachments, IT MUST INCLUDE THE STARTING ATTACHMENT TYPES OR THEY WILL NOT ATTACH. @@ -339,7 +349,7 @@ ///Pixel shift on the Y Axis for the attached overlay. var/pixel_shift_y = 16 ///Flags for attachment functions. - var/flags_attach_features = ATTACH_REMOVABLE + var/attach_features_flags = ATTACH_REMOVABLE ///Time it takes to attach src to a master gun. var/attach_delay = 0 SECONDS ///Time it takes to detach src to a master gun. @@ -391,8 +401,8 @@ setup_firemodes() AddComponent(/datum/component/automatedfire/autofire, fire_delay, autoburst_delay, burst_delay, burst_amount, gun_firemode, CALLBACK(src, PROC_REF(set_bursting)), CALLBACK(src, PROC_REF(reset_fire)), CALLBACK(src, PROC_REF(Fire))) //This should go after handle_starting_attachment() and setup_firemodes() to get the proper values set. AddComponent(/datum/component/attachment_handler, attachments_by_slot, attachable_allowed, attachable_offset, starting_attachment_types, null, CALLBACK(src, PROC_REF(on_attachment_attach)), CALLBACK(src, PROC_REF(on_attachment_detach)), attachment_overlays) - if(CHECK_BITFIELD(flags_gun_features, GUN_IS_ATTACHMENT)) - AddElement(/datum/element/attachment, slot, icon, PROC_REF(on_attach), PROC_REF(on_detach), PROC_REF(activate), PROC_REF(can_attach), pixel_shift_x, pixel_shift_y, flags_attach_features, attach_delay, detach_delay, SKILL_FIREARMS, SKILL_FIREARMS_DEFAULT, 'sound/machines/click.ogg') + if(CHECK_BITFIELD(gun_features_flags, GUN_IS_ATTACHMENT)) + AddElement(/datum/element/attachment, slot, icon, PROC_REF(on_attach), PROC_REF(on_detach), PROC_REF(activate), PROC_REF(can_attach), pixel_shift_x, pixel_shift_y, attach_features_flags, attach_delay, detach_delay, SKILL_FIREARMS, SKILL_FIREARMS_DEFAULT, 'sound/machines/click.ogg') muzzle_flash = new(src, muzzleflash_iconstate) @@ -472,8 +482,11 @@ COMSIG_MOB_SHOCK_STAGE_CHANGED, COMSIG_HUMAN_MARKSMAN_AURA_CHANGED)) gun_user.client?.mouse_pointer_icon = initial(gun_user.client.mouse_pointer_icon) - SEND_SIGNAL(gun_user, COMSIG_GUN_USER_UNSET) - gun_user.hud_used.remove_ammo_hud(src) + SEND_SIGNAL(gun_user, COMSIG_GUN_USER_UNSET, src) + gun_user.hud_used?.remove_ammo_hud(src) + if(heat_meter && gun_user.client) + gun_user.client.images -= heat_meter + heat_meter = null gun_user = null if(!user) @@ -483,8 +496,12 @@ return gun_user = user SEND_SIGNAL(gun_user, COMSIG_GUN_USER_SET, src) - if(flags_gun_features & GUN_AMMO_COUNTER) - gun_user.hud_used.add_ammo_hud(src, get_ammo_list(), get_display_ammo_count()) + if(gun_features_flags & GUN_AMMO_COUNTER) + gun_user.hud_used?.add_ammo_hud(src, get_ammo_list(), get_display_ammo_count()) + if(heat_per_fire) + heat_meter = new(loc=gun_user) + heat_meter.animate_change(heat_amount/100, 5) + gun_user.client.images += heat_meter if(master_gun) return setup_bullet_accuracy() @@ -493,13 +510,14 @@ COMSIG_MOB_SKILLS_CHANGED, COMSIG_MOB_SHOCK_STAGE_CHANGED, COMSIG_HUMAN_MARKSMAN_AURA_CHANGED), PROC_REF(setup_bullet_accuracy)) - if(!CHECK_BITFIELD(flags_item, IS_DEPLOYED)) + if(!CHECK_BITFIELD(item_flags, IS_DEPLOYED)) RegisterSignal(gun_user, COMSIG_MOB_MOUSEDOWN, PROC_REF(start_fire)) RegisterSignal(gun_user, COMSIG_MOB_MOUSEDRAG, PROC_REF(change_target)) else RegisterSignal(gun_user, COMSIG_KB_UNIQUEACTION, PROC_REF(unique_action)) RegisterSignal(gun_user, COMSIG_QDELETING, PROC_REF(clean_gun_user)) - RegisterSignals(gun_user, list(COMSIG_MOB_MOUSEUP, COMSIG_ITEM_ZOOM, COMSIG_ITEM_UNZOOM), PROC_REF(stop_fire)) + RegisterSignals(gun_user, list(COMSIG_MOB_MOUSEUP, COMSIG_ITEM_ZOOM), PROC_REF(stop_fire)) + RegisterSignal(gun_user, COMSIG_ITEM_UNZOOM, PROC_REF(on_unzoom)) RegisterSignal(gun_user, COMSIG_KB_RAILATTACHMENT, PROC_REF(activate_rail_attachment)) RegisterSignal(gun_user, COMSIG_KB_UNDERRAILATTACHMENT, PROC_REF(activate_underrail_attachment)) RegisterSignal(gun_user, COMSIG_KB_UNLOADGUN, PROC_REF(unload_gun)) @@ -513,7 +531,7 @@ SIGNAL_HANDLER set_gun_user(null) -/obj/item/weapon/gun/update_icon(mob/user) +/obj/item/weapon/gun/update_icon() . = ..() for(var/datum/action/action AS in actions) @@ -528,23 +546,15 @@ /obj/item/weapon/gun/update_icon_state() . = ..() if(CHECK_BITFIELD(reciever_flags, AMMO_RECIEVER_TOGGLES_OPEN) && !CHECK_BITFIELD(reciever_flags, AMMO_RECIEVER_CLOSED)) - icon_state = !greyscale_config ? base_gun_icon + "_o" : GUN_ICONSTATE_OPEN + icon_state = base_gun_icon + "_o" else if(CHECK_BITFIELD(reciever_flags, AMMO_RECIEVER_REQUIRES_UNIQUE_ACTION) && !in_chamber && length(chamber_items)) - icon_state = !greyscale_config ? base_gun_icon + "_u" : GUN_ICONSTATE_UNRACKED + icon_state = base_gun_icon + "_u" else if((!length(chamber_items) && max_chamber_items) || (!rounds && !max_chamber_items)) - icon_state = !greyscale_config ? base_gun_icon + "_e" : GUN_ICONSTATE_UNLOADED + icon_state = base_gun_icon + "_e" else if(current_chamber_position <= length(chamber_items) && chamber_items[current_chamber_position] && chamber_items[current_chamber_position].loc != src) icon_state = base_gun_icon + "_l" else - icon_state = !greyscale_config ? base_gun_icon : GUN_ICONSTATE_LOADED - -/obj/item/weapon/gun/color_item(obj/item/facepaint/paint, mob/user) - . = ..() - if(!ishuman(user)) - return - var/mob/living/carbon/human/human = user - human.regenerate_icons() - + icon_state = base_gun_icon //manages the overlays for the gun - separate from attachment overlays /obj/item/weapon/gun/update_overlays() @@ -569,13 +579,13 @@ /obj/item/weapon/gun/update_item_state() var/current_state = item_state - if(flags_gun_features & GUN_SHOWS_AMMO_REMAINING) //shows different ammo levels + if(gun_features_flags & GUN_SHOWS_AMMO_REMAINING) //shows different ammo levels var/remaining_rounds = (rounds <= 0) ? 0 : CEILING((rounds / max((length(chamber_items) ? max_rounds : max_shells), 1)) * 100, 25) - item_state = "[initial(icon_state)]_[remaining_rounds][flags_item & WIELDED ? "_w" : ""]" - else if(flags_gun_features & GUN_SHOWS_LOADED) //shows loaded or unloaded - item_state = "[initial(icon_state)]_[rounds ? 100 : 0][flags_item & WIELDED ? "_w" : ""]" + item_state = "[initial(icon_state)]_[remaining_rounds][item_flags & WIELDED ? "_w" : ""]" + else if(gun_features_flags & GUN_SHOWS_LOADED) //shows loaded or unloaded + item_state = "[initial(icon_state)]_[rounds ? 100 : 0][item_flags & WIELDED ? "_w" : ""]" else - item_state = "[base_gun_icon][flags_item & WIELDED ? "_w" : ""]" + item_state = "[base_gun_icon][item_flags & WIELDED ? "_w" : ""]" return if(current_state != item_state && ishuman(gun_user)) @@ -607,11 +617,11 @@ . += "[dat.Join(" ")]" examine_ammo_count(user) - if(!CHECK_BITFIELD(flags_item, IS_DEPLOYED)) - if(CHECK_BITFIELD(flags_item, IS_DEPLOYABLE)) + if(!CHECK_BITFIELD(item_flags, IS_DEPLOYED)) + if(CHECK_BITFIELD(item_flags, IS_DEPLOYABLE)) . += span_notice("Use Ctrl-Click on a tile to deploy.") return - if(!CHECK_BITFIELD(flags_item, DEPLOYED_NO_ROTATE)) + if(!CHECK_BITFIELD(item_flags, DEPLOYED_NO_ROTATE)) . += span_notice("Left or Right Click on a nearby tile to aim towards it.") return . += span_notice("Click-Drag to yourself to undeploy.") @@ -620,16 +630,16 @@ ///Gives the user a description of the ammunition remaining, as well as other information pertaining to reloading/ammo. /obj/item/weapon/gun/proc/examine_ammo_count(mob/user) - if(CHECK_BITFIELD(flags_gun_features, GUN_UNUSUAL_DESIGN) && CHECK_BITFIELD(reciever_flags, AMMO_RECIEVER_MAGAZINES)) //Internal mags and unusual guns have their own stuff set. + if(CHECK_BITFIELD(gun_features_flags, GUN_UNUSUAL_DESIGN) && CHECK_BITFIELD(reciever_flags, AMMO_RECIEVER_MAGAZINES)) //Internal mags and unusual guns have their own stuff set. return var/list/dat = list() if(CHECK_BITFIELD(reciever_flags, AMMO_RECIEVER_TOGGLES_OPEN)) dat += "[CHECK_BITFIELD(reciever_flags, AMMO_RECIEVER_CLOSED) ? "It is closed. \n" : "It is open. \n"]" if(rounds > 0) - if(flags_gun_features & GUN_AMMO_COUNTER) - if(max_rounds && CHECK_BITFIELD(flags_gun_features, GUN_AMMO_COUNT_BY_PERCENTAGE)) + if(gun_features_flags & GUN_AMMO_COUNTER) + if(max_rounds && CHECK_BITFIELD(gun_features_flags, GUN_AMMO_COUNT_BY_PERCENTAGE)) dat += "Ammo counter shows [round((rounds / max_rounds) * 100)] percent remaining.
    " - else if(max_rounds && CHECK_BITFIELD(flags_gun_features, GUN_AMMO_COUNT_BY_SHOTS_REMAINING)) + else if(max_rounds && CHECK_BITFIELD(gun_features_flags, GUN_AMMO_COUNT_BY_SHOTS_REMAINING)) dat += "Ammo counter shows [round(rounds / rounds_per_shot)] shots remaining." else dat += "Ammo counter shows [rounds] round\s remaining.
    " @@ -645,7 +655,7 @@ /* MOVED TO MODULE /obj/item/weapon/gun/wield(mob/user) - if(CHECK_BITFIELD(flags_gun_features, GUN_DEPLOYED_FIRE_ONLY)) + if(CHECK_BITFIELD(gun_features_flags, GUN_DEPLOYED_FIRE_ONLY)) to_chat(user, span_notice("[src] cannot be fired by hand and must be deployed.")) return @@ -659,13 +669,13 @@ var/wdelay = wield_delay //slower or faster wield delay depending on skill. if(user.skills.getRating(SKILL_FIREARMS) < SKILL_FIREARMS_DEFAULT) - wdelay += 0.3 SECONDS //no training in any firearms + wdelay += wield_penalty else var/skill_value = user.skills.getRating(gun_skill_category) + if(skill_value < 0) + wdelay += wield_penalty if(skill_value > 0) wdelay -= skill_value * 2 - else - wdelay += wield_penalty wield_time = world.time + wdelay do_wield(user, wdelay) if(HAS_TRAIT(src, TRAIT_GUN_AUTO_AIM_MODE)) @@ -687,9 +697,9 @@ /obj/item/weapon/gun/toggle_wielded(user, wielded) if(wielded) - flags_item |= WIELDED + item_flags |= WIELDED else - flags_item &= ~(WIELDED|FULLY_WIELDED) + item_flags &= ~(WIELDED|FULLY_WIELDED) //---------------------------------------------------------- // \\ @@ -763,6 +773,11 @@ active_attachable?.clean_target() target = get_turf(target) +///Handles unzoom behavior +/obj/item/weapon/gun/proc/on_unzoom(mob/user) + SIGNAL_HANDLER + stop_fire() + ///Reset variables used in firing and remove the gun from the autofire system /obj/item/weapon/gun/proc/stop_fire() SIGNAL_HANDLER @@ -812,7 +827,7 @@ ///Wrapper proc to complete the whole firing process. /obj/item/weapon/gun/proc/Fire() - if(!target || !(gun_user || istype(loc, /obj/machinery/deployable/mounted/sentry)) || !(CHECK_BITFIELD(flags_item, IS_DEPLOYED) || able_to_fire(gun_user)) || windup_checked == WEAPON_WINDUP_CHECKING) + if(!target || !(gun_user || istype(loc, /obj/machinery/deployable/mounted/sentry)) || !(CHECK_BITFIELD(item_flags, IS_DEPLOYED) || able_to_fire(gun_user)) || windup_checked == WEAPON_WINDUP_CHECKING) return NONE if(windup_delay && windup_checked == WEAPON_WINDUP_NOT_CHECKED) windup_checked = WEAPON_WINDUP_CHECKING @@ -867,9 +882,24 @@ update_icon() if(dual_wield && (gun_firemode == GUN_FIREMODE_SEMIAUTO || gun_firemode == GUN_FIREMODE_BURSTFIRE)) var/obj/item/weapon/gun/inactive_gun = gun_user.get_inactive_held_item() - if(inactive_gun.rounds && !(inactive_gun.flags_gun_features & GUN_WIELDED_FIRING_ONLY)) + if(inactive_gun.rounds && !(inactive_gun.gun_features_flags & GUN_WIELDED_FIRING_ONLY)) inactive_gun.last_fired = max(world.time - fire_delay * (1 - akimbo_additional_delay), inactive_gun.last_fired) gun_user.swap_hand() + heat_amount += heat_per_fire + if(!(datum_flags & DF_ISPROCESSING)) + START_PROCESSING(SSprocessing, src) + if(!heat_per_fire) + return AUTOFIRE_CONTINUE + if(heat_amount >= 100) + STOP_PROCESSING(SSprocessing, src) + var/obj/effect/abstract/particle_holder/overheat_smoke = new(src, /particles/overheat_smoke) + playsound(src, 'sound/weapons/guns/interact/gun_overheat.ogg', 25, 1, 5) + //overheat gives either you a bonus or penalty depending on gun, by default it is +10% time. + var/overheat_time = (heat_amount/cool_amount*overheat_multiplier) SECONDS + overheat_timer = addtimer(CALLBACK(src, PROC_REF(complete_overheat), overheat_smoke), overheat_time, TIMER_STOPPABLE) + heat_meter.animate_change(0, overheat_time) + return NONE + heat_meter.animate_change(heat_amount/100, fire_delay) return AUTOFIRE_CONTINUE ///Actually fires the gun, sets up the projectile and fires it. @@ -881,13 +911,14 @@ apply_gun_modifiers(projectile_to_fire, target, firer) projectile_to_fire.accuracy = round((projectile_to_fire.accuracy * max( 0.1, gun_accuracy_mult))) + var/proj_scatter = 0 - if((flags_item & FULLY_WIELDED) || CHECK_BITFIELD(flags_item, IS_DEPLOYED) || (master_gun && (master_gun.flags_item & FULLY_WIELDED))) + if((item_flags & FULLY_WIELDED) || CHECK_BITFIELD(item_flags, IS_DEPLOYED) || (master_gun && (master_gun.item_flags & FULLY_WIELDED))) scatter = clamp((scatter + scatter_increase) - ((world.time - last_fired - 1) * scatter_decay), min_scatter, max_scatter) - projectile_to_fire.scatter += gun_scatter + scatter + proj_scatter += gun_scatter + scatter else scatter_unwielded = clamp((scatter_unwielded + scatter_increase_unwielded) - ((world.time - last_fired - 1) * scatter_decay_unwielded), min_scatter_unwielded, max_scatter_unwielded) - projectile_to_fire.scatter += gun_scatter + scatter_unwielded + proj_scatter += gun_scatter + scatter_unwielded if(gun_user) projectile_to_fire.firer = gun_user @@ -899,17 +930,17 @@ projectile_to_fire.damage *= 1 + skill_level * FIREARM_SKILL_DAM_MOD if((world.time - gun_user.last_move_time) < 5) //if you moved during the last half second, you have some penalties to accuracy and scatter - if(flags_item & FULLY_WIELDED) + if(item_flags & FULLY_WIELDED) projectile_to_fire.accuracy -= projectile_to_fire.accuracy * max(0,movement_acc_penalty_mult * 0.03) - projectile_to_fire.scatter = max(0, projectile_to_fire.scatter + max(0, movement_acc_penalty_mult * 0.5)) + proj_scatter = max(0, proj_scatter + max(0, movement_acc_penalty_mult * 0.5)) else projectile_to_fire.accuracy -= projectile_to_fire.accuracy * max(0,movement_acc_penalty_mult * 0.06) - projectile_to_fire.scatter = max(0, projectile_to_fire.scatter + max(0, movement_acc_penalty_mult)) + proj_scatter = max(0, proj_scatter + max(0, movement_acc_penalty_mult)) projectile_to_fire.accuracy += gun_accuracy_mod //additive added after move delay mult - projectile_to_fire.scatter = max(projectile_to_fire.scatter, 0) + proj_scatter = max(proj_scatter, 0) - var/firing_angle = get_angle_with_scatter((gun_user || get_turf(src)), target, projectile_to_fire.scatter, projectile_to_fire.p_x, projectile_to_fire.p_y) + var/firing_angle = get_angle_with_scatter((gun_user || get_turf(src)), target, proj_scatter, projectile_to_fire.p_x, projectile_to_fire.p_y) //Finally, make with the pew pew! if(!isobj(projectile_to_fire)) @@ -1001,8 +1032,8 @@ simulate_recoil(dual_wield, firing_angle) - projectile_to_fire.fire_at(target, master_gun ? gun_user : loc, src, projectile_to_fire.ammo.max_range, projectile_to_fire.projectile_speed, firing_angle, suppress_light = HAS_TRAIT(src, TRAIT_GUN_SILENCED)) - if(CHECK_BITFIELD(flags_gun_features, GUN_SMOKE_PARTICLES)) + projectile_to_fire.fire_at(target, master_gun ? gun_user : null, src, projectile_to_fire.ammo.max_range, projectile_to_fire.projectile_speed, firing_angle, suppress_light = HAS_TRAIT(src, TRAIT_GUN_SILENCED)) + if(CHECK_BITFIELD(gun_features_flags, GUN_SMOKE_PARTICLES)) var/x_component = sin(firing_angle) * 40 var/y_component = cos(firing_angle) * 40 var/obj/effect/abstract/particle_holder/gun_smoke = new(get_turf(src), /particles/firing_smoke) @@ -1022,8 +1053,21 @@ windup_checked = WEAPON_WINDUP_CHECKED Fire() +///called by a timer after overheat finishes +/obj/item/weapon/gun/proc/complete_overheat(overheat_smoke) + QDEL_NULL(overheat_smoke) + overheat_timer = null + heat_amount = 0 + +/obj/item/weapon/gun/process(delta_time) + if(heat_meter) + heat_amount = max(0, heat_amount - cool_amount*delta_time) + heat_meter.animate_change(heat_amount/100, 5) + if(!heat_amount) + return PROCESS_KILL + /obj/item/weapon/gun/attack(mob/living/M, mob/living/user, def_zone) - if(!CHECK_BITFIELD(flags_gun_features, GUN_CAN_POINTBLANK) || !able_to_fire(user) || gun_on_cooldown(user) || CHECK_BITFIELD(M.status_flags, INCORPOREAL)) // If it can't point blank, you can't suicide and such. + if(!CHECK_BITFIELD(gun_features_flags, GUN_CAN_POINTBLANK) || !able_to_fire(user) || gun_on_cooldown(user) || CHECK_BITFIELD(M.status_flags, INCORPOREAL)) // If it can't point blank, you can't suicide and such. if(master_gun) return return ..() @@ -1045,21 +1089,21 @@ if(M != user || user.zone_selected != "mouth") return ..() - DISABLE_BITFIELD(flags_gun_features, GUN_CAN_POINTBLANK) //If they try to click again, they're going to hit themselves. + DISABLE_BITFIELD(gun_features_flags, GUN_CAN_POINTBLANK) //If they try to click again, they're going to hit themselves. user.visible_message(span_warning("[user] sticks their gun in their mouth, ready to pull the trigger.")) log_combat(user, null, "is trying to commit suicide") if(!do_after(user, 40, NONE, src, BUSY_ICON_DANGER)) M.visible_message(span_notice("[user] decided life was worth living.")) - ENABLE_BITFIELD(flags_gun_features, GUN_CAN_POINTBLANK) + ENABLE_BITFIELD(gun_features_flags, GUN_CAN_POINTBLANK) return var/obj/projectile/projectile_to_fire = in_chamber if(!projectile_to_fire) //We actually have a projectile, let's move on. playsound(src, dry_fire_sound, 25, 1, 5) - ENABLE_BITFIELD(flags_gun_features, GUN_CAN_POINTBLANK) + ENABLE_BITFIELD(gun_features_flags, GUN_CAN_POINTBLANK) return projectile_to_fire = get_ammo_object() @@ -1078,7 +1122,7 @@ user.death() to_chat(user, span_highdanger("Your life flashes before you as your spirit is torn from your body!")) user.ghostize(FALSE) //No return. - ENABLE_BITFIELD(flags_gun_features, GUN_CAN_POINTBLANK) + ENABLE_BITFIELD(gun_features_flags, GUN_CAN_POINTBLANK) return switch(projectile_to_fire.ammo.damage_type) @@ -1100,7 +1144,7 @@ QDEL_NULL(projectile_to_fire) - ENABLE_BITFIELD(flags_gun_features, GUN_CAN_POINTBLANK) + ENABLE_BITFIELD(gun_features_flags, GUN_CAN_POINTBLANK) /obj/item/weapon/gun/attack_alternate(mob/living/M, mob/living/user) if(active_attachable) @@ -1228,7 +1272,7 @@ if(!(new_mag.type in allowed_ammo_types)) if(isammomagazine(new_mag) && CHECK_BITFIELD(reciever_flags, AMMO_RECIEVER_HANDFULS)) var/obj/item/ammo_magazine/mag = new_mag - if(!CHECK_BITFIELD(mag.flags_magazine, MAGAZINE_HANDFUL)) //If the gun uses handfuls, it accepts all handfuls since it uses caliber to check if its allowed. + if(!CHECK_BITFIELD(mag.magazine_flags, MAGAZINE_HANDFUL)) //If the gun uses handfuls, it accepts all handfuls since it uses caliber to check if its allowed. to_chat(user, span_warning("[new_mag] cannot fit into [src]!")) return FALSE if(mag.caliber != caliber) @@ -1261,8 +1305,8 @@ if(!get_current_rounds(new_mag) && !force) to_chat(user, span_notice("[new_mag] is empty!")) return FALSE - var/flags_magazine_features = get_flags_magazine_features(new_mag) - if(flags_magazine_features && CHECK_BITFIELD(flags_magazine_features, MAGAZINE_WORN) && \ + var/magazine_features_flags = get_magazine_features_flags(new_mag) + if(magazine_features_flags && CHECK_BITFIELD(magazine_features_flags, MAGAZINE_WORN) && \ (!((loc == user) || (master_gun?.loc == user)) || (new_mag.loc != user))) to_chat(user, span_warning("You need to be carrying both [src] and [new_mag] to connect them!")) return FALSE @@ -1282,7 +1326,7 @@ get_ammo() if(user) playsound(src, reload_sound, 25, 1) - if(!flags_magazine_features || (flags_magazine_features && !CHECK_BITFIELD(flags_magazine_features, MAGAZINE_WORN))) + if(!magazine_features_flags || (magazine_features_flags && !CHECK_BITFIELD(magazine_features_flags, MAGAZINE_WORN))) new_mag.forceMove(src) user?.temporarilyRemoveItemFromInventory(new_mag) if(istype(new_mag, /obj/item/ammo_magazine)) @@ -1301,7 +1345,7 @@ if(max_chamber_items) if(CHECK_BITFIELD(reciever_flags, AMMO_RECIEVER_HANDFULS)) var/obj/item/ammo_magazine/mag = new_mag - if(CHECK_BITFIELD(mag.flags_magazine, MAGAZINE_HANDFUL)) + if(CHECK_BITFIELD(mag.magazine_flags, MAGAZINE_HANDFUL)) if(mag.current_rounds > 1) items_to_insert += mag.create_handful(null, 1) else @@ -1414,7 +1458,7 @@ playsound(src, unload_sound, 25, 1, 5) user?.visible_message(span_notice("[user] unloads [mag] from [src]."), span_notice("You unload [mag] from [src]."), null, 4) - if(drop && !(CHECK_BITFIELD(reciever_flags, AMMO_RECIEVER_MAGAZINES) && CHECK_BITFIELD(get_flags_magazine_features(mag), MAGAZINE_WORN))) + if(drop && !(CHECK_BITFIELD(reciever_flags, AMMO_RECIEVER_MAGAZINES) && CHECK_BITFIELD(get_magazine_features_flags(mag), MAGAZINE_WORN))) if(user) user.put_in_hands(mag) else @@ -1426,7 +1470,7 @@ if(istype(mag, /obj/item/ammo_magazine)) var/obj/item/ammo_magazine/magazine = mag magazine.on_removed(src) - if(CHECK_BITFIELD(reciever_flags, AMMO_RECIEVER_MAGAZINES) && CHECK_BITFIELD(get_flags_magazine_features(mag), MAGAZINE_REFUND_IN_CHAMBER) && !after_fire && !CHECK_BITFIELD(reciever_flags, AMMO_RECIEVER_CYCLE_ONLY_BEFORE_FIRE)) + if(CHECK_BITFIELD(reciever_flags, AMMO_RECIEVER_MAGAZINES) && CHECK_BITFIELD(get_magazine_features_flags(mag), MAGAZINE_REFUND_IN_CHAMBER) && !after_fire && !CHECK_BITFIELD(reciever_flags, AMMO_RECIEVER_CYCLE_ONLY_BEFORE_FIRE)) QDEL_NULL(in_chamber) adjust_current_rounds(mag, rounds_per_shot) UnregisterSignal(mag, COMSIG_ITEM_REMOVED_INVENTORY) @@ -1498,7 +1542,7 @@ num_of_casings-- if(num_of_casings) casing.current_casings += num_of_casings - casing.update_icon() + casing.update_appearance() playsound(current_turf, sound_to_play, 25, 1, 5) @@ -1507,7 +1551,7 @@ var/datum/ammo/new_ammo = get_ammo() if(!new_ammo) return - var/projectile_type = CHECK_BITFIELD(initial(new_ammo.flags_ammo_behavior), AMMO_HITSCAN) ? /obj/projectile/hitscan : /obj/projectile + var/projectile_type = CHECK_BITFIELD(initial(new_ammo.ammo_behavior_flags), AMMO_HITSCAN) ? /obj/projectile/hitscan : /obj/projectile var/obj/projectile/projectile = new projectile_type(null, initial(new_ammo.hitscan_effect_icon)) projectile.generate_bullet(new_ammo) return projectile @@ -1544,9 +1588,9 @@ ///returns ammo count to display in the ammo counter of the HUD /obj/item/weapon/gun/proc/get_display_ammo_count() - if(rounds && (flags_gun_features & GUN_AMMO_COUNT_BY_SHOTS_REMAINING)) + if(rounds && (gun_features_flags & GUN_AMMO_COUNT_BY_SHOTS_REMAINING)) return round(rounds / rounds_per_shot) - if(max_rounds && rounds && (flags_gun_features & GUN_AMMO_COUNT_BY_PERCENTAGE)) + if(max_rounds && rounds && (gun_features_flags & GUN_AMMO_COUNT_BY_PERCENTAGE)) return round((rounds / max_rounds) * 100) return rounds @@ -1582,7 +1626,7 @@ SIGNAL_HANDLER if(!length(chamber_items) || !chamber_items[current_chamber_position]) return - if(!(get_flags_magazine_features(chamber_items[current_chamber_position]) & MAGAZINE_WORN)) + if(!(get_magazine_features_flags(chamber_items[current_chamber_position]) & MAGAZINE_WORN)) return unload(user, FALSE) @@ -1601,12 +1645,12 @@ var/obj/item/ammo_magazine/magazine = mag return magazine?.max_rounds -///Getter to draw flags_magazine features. If the mag has none, overwrite and return null. -/obj/item/weapon/gun/proc/get_flags_magazine_features(obj/item/mag) +///Getter to draw magazine_flags features. If the mag has none, overwrite and return null. +/obj/item/weapon/gun/proc/get_magazine_features_flags(obj/item/mag) var/obj/item/ammo_magazine/magazine = mag if(!istype(magazine)) return NONE - return magazine ? magazine.flags_magazine : NONE + return magazine ? magazine.magazine_flags : NONE ///Getter to draw default ammo type. If the mag has none, overwrite and return null. /obj/item/weapon/gun/proc/get_magazine_default_ammo(obj/item/mag) @@ -1656,35 +1700,38 @@ if(!user.dextrous) to_chat(user, span_warning("You don't have the dexterity to do this!")) return FALSE - if(!(flags_gun_features & GUN_ALLOW_SYNTHETIC) && !CONFIG_GET(flag/allow_synthetic_gun_use) && issynth(user)) + if(!(gun_features_flags & GUN_ALLOW_SYNTHETIC) && !CONFIG_GET(flag/allow_synthetic_gun_use) && issynth(user)) to_chat(user, span_warning("Your program does not allow you to use this firearm.")) return FALSE if(HAS_TRAIT(src, TRAIT_GUN_SAFETY)) to_chat(user, span_warning("The safety is on!")) return FALSE - if(CHECK_BITFIELD(flags_gun_features, GUN_WIELDED_FIRING_ONLY)) //If we're not holding the weapon with both hands when we should. - if(!master_gun && !CHECK_BITFIELD(flags_item, WIELDED)) + if(CHECK_BITFIELD(gun_features_flags, GUN_WIELDED_FIRING_ONLY)) //If we're not holding the weapon with both hands when we should. + if(!master_gun && !CHECK_BITFIELD(item_flags, WIELDED)) to_chat(user, "You need a more secure grip to fire this weapon!") return FALSE - if(master_gun && !CHECK_BITFIELD(master_gun.flags_item, WIELDED)) + if(master_gun && !CHECK_BITFIELD(master_gun.item_flags, WIELDED)) to_chat(user, span_warning("You need a more secure grip to fire [src]!")) return FALSE if(LAZYACCESS(user.do_actions, src)) to_chat(user, "You are doing something else currently.") return FALSE - if(CHECK_BITFIELD(flags_gun_features, GUN_WIELDED_STABLE_FIRING_ONLY))//If we must wait to finish wielding before shooting. - if(!master_gun && !(flags_item & FULLY_WIELDED)) + if(CHECK_BITFIELD(gun_features_flags, GUN_WIELDED_STABLE_FIRING_ONLY))//If we must wait to finish wielding before shooting. + if(!master_gun && !(item_flags & FULLY_WIELDED)) to_chat(user, "You need a more secure grip to fire this weapon!") return FALSE - if(master_gun && !(master_gun.flags_item & FULLY_WIELDED)) + if(master_gun && !(master_gun.item_flags & FULLY_WIELDED)) to_chat(user, "You need a more secure grip to fire [src]!") return FALSE - if(CHECK_BITFIELD(flags_gun_features, GUN_DEPLOYED_FIRE_ONLY) && !CHECK_BITFIELD(flags_item, IS_DEPLOYED)) + if(CHECK_BITFIELD(gun_features_flags, GUN_DEPLOYED_FIRE_ONLY) && !CHECK_BITFIELD(item_flags, IS_DEPLOYED)) to_chat(user, span_notice("You cannot fire [src] while it is not deployed.")) return FALSE - if(CHECK_BITFIELD(flags_gun_features, GUN_IS_ATTACHMENT) && !master_gun && CHECK_BITFIELD(flags_gun_features, GUN_ATTACHMENT_FIRE_ONLY)) + if(CHECK_BITFIELD(gun_features_flags, GUN_IS_ATTACHMENT) && !master_gun && CHECK_BITFIELD(gun_features_flags, GUN_ATTACHMENT_FIRE_ONLY)) to_chat(user, span_notice("You cannot fire [src] without it attached to a gun!")) return FALSE + if(overheat_timer) + balloon_alert(user, "overheat") + return FALSE return TRUE /obj/item/weapon/gun/proc/gun_on_cooldown(mob/user) @@ -1713,7 +1760,7 @@ /obj/item/weapon/gun/proc/play_fire_sound(mob/user) //Guns with low ammo have their firing sound - var/firing_sndfreq = CHECK_BITFIELD(flags_gun_features, GUN_NO_PITCH_SHIFT_NEAR_EMPTY) ? FALSE : ((rounds / (max_rounds ? max_rounds : max_shells)) > 0.25) ? FALSE : 55000 + var/firing_sndfreq = CHECK_BITFIELD(gun_features_flags, GUN_NO_PITCH_SHIFT_NEAR_EMPTY) ? FALSE : ((max(rounds, 1) / (max_rounds ? max_rounds : max_shells)) > 0.25) ? FALSE : 55000 if(HAS_TRAIT(src, TRAIT_GUN_SILENCED)) playsound(user, fire_sound, 25, firing_sndfreq ? TRUE : FALSE, frequency = firing_sndfreq) return @@ -1730,7 +1777,7 @@ projectile_to_fire.damage_falloff *= max(0, damage_falloff_mult) projectile_to_fire.projectile_speed = projectile_to_fire.ammo.shell_speed projectile_to_fire.projectile_speed += shell_speed_mod - if(flags_gun_features & GUN_IFF || HAS_TRAIT(src, TRAIT_GUN_IS_AIMING) || projectile_to_fire.ammo.flags_ammo_behavior & AMMO_IFF) + if(gun_features_flags & GUN_IFF || HAS_TRAIT(src, TRAIT_GUN_IS_AIMING) || projectile_to_fire.ammo.ammo_behavior_flags & AMMO_IFF) var/iff_signal if(ishuman(firer)) var/mob/living/carbon/human/_firer = firer @@ -1755,13 +1802,13 @@ gun_accuracy_mod = 0 gun_scatter = 0 - if((flags_item & FULLY_WIELDED) || CHECK_BITFIELD(flags_item, IS_DEPLOYED) || (master_gun && (master_gun.flags_item & FULLY_WIELDED) )) + if((item_flags & FULLY_WIELDED) || CHECK_BITFIELD(item_flags, IS_DEPLOYED) || (master_gun && (master_gun.item_flags & FULLY_WIELDED) )) wielded_fire = TRUE gun_accuracy_mult = accuracy_mult else gun_accuracy_mult = accuracy_mult_unwielded - if(CHECK_BITFIELD(flags_item, IS_DEPLOYED)) //if our gun is deployed, change the scatter by this number, usually a negative + if(CHECK_BITFIELD(item_flags, IS_DEPLOYED)) //if our gun is deployed, change the scatter by this number, usually a negative gun_scatter += deployed_scatter_change if(gun_firemode == GUN_FIREMODE_BURSTFIRE || gun_firemode == GUN_FIREMODE_AUTOBURST) @@ -1773,7 +1820,7 @@ gun_scatter += burst_amount * burst_scatter_mult * 2 if(dual_wield) //akimbo firing gives terrible scatter - gun_scatter += 2 * rand(upper_akimbo_accuracy, lower_akimbo_accuracy) //TODO: remove the rng increase + gun_scatter += akimbo_scatter_mod if(gun_user) //firearm skills modifiers @@ -1795,21 +1842,18 @@ gun_accuracy_mod -= round(min(20, (shooter_human.shock_stage * 0.2))) //Accuracy declines with pain, being reduced by 0.2% per point of pain. if(shooter_human.marksman_aura) gun_accuracy_mod += 10 + max(5, shooter_human.marksman_aura * 5) //Accuracy bonus from active focus order - add_aim_mode_fire_delay(AURA_HUMAN_FOCUS, initial(aim_fire_delay) * -0.5) - else - remove_aim_mode_fire_delay(AURA_HUMAN_FOCUS) /obj/item/weapon/gun/proc/simulate_recoil(recoil_bonus = 0, firing_angle) - if(CHECK_BITFIELD(flags_item, IS_DEPLOYED) || !gun_user) + if(CHECK_BITFIELD(item_flags, IS_DEPLOYED) || !gun_user) return TRUE var/total_recoil = recoil_bonus - if((flags_item & FULLY_WIELDED) || master_gun) + if((item_flags & FULLY_WIELDED) || master_gun) total_recoil += recoil else total_recoil += recoil_unwielded if(HAS_TRAIT(src, TRAIT_GUN_BURST_FIRING)) total_recoil += 1 - if(!gun_user.skills.getRating(SKILL_FIREARMS)) //no training in any firearms + if(gun_user.skills.getRating(SKILL_FIREARMS) <= SKILL_FIREARMS_UNTRAINED) //no training in any firearms total_recoil += 2 else var/recoil_tweak = gun_user.skills.getRating(gun_skill_category) @@ -1836,7 +1880,7 @@ muzzle_flash.applied = FALSE //For letting xenos turn off the flashlights on any guns left lying around. -/obj/item/weapon/gun/attack_alien(mob/living/carbon/xenomorph/X, isrightclick = FALSE) +/obj/item/weapon/gun/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) if(!HAS_TRAIT(src, TRAIT_GUN_FLASHLIGHT_ON)) return for(var/attachment_slot in attachments_by_slot) @@ -1845,5 +1889,36 @@ continue lit_flashlight.turn_light(null, FALSE) playsound(loc, "alien_claw_metal", 25, 1) - X.do_attack_animation(src, ATTACK_EFFECT_CLAW) - to_chat(X, span_warning("We disable the metal thing's lights.") ) + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_CLAW) + to_chat(xeno_attacker, span_warning("We disable the metal thing's lights.") ) + + +/particles/overheat_smoke + icon = 'icons/effects/particles/smoke.dmi' + icon_state = list("smoke_1" = 1, "smoke_2" = 1, "smoke_3" = 2) + width = 100 + height = 200 + count = 1000 + spawning = 3 + lifespan = 1.5 SECONDS + fade = 1 SECONDS + velocity = list(0, 0.3, 0) + position = list(8, 8) + drift = generator(GEN_SPHERE, 0, 1, NORMAL_RAND) + friction = 0.2 + gravity = list(0, 0.95) + grow = 0.05 + +//tried to make this a alpha mask that moved up and down over the bar but I failed so whatever +/image/heat_bar + icon = 'icons/effects/overheat.dmi' + icon_state = "status_bar" + plane = ABOVE_HUD_PLANE + appearance_flags = APPEARANCE_UI_IGNORE_ALPHA + +///takes a 0-1 value and then animates to display that percentage on this bar +/image/heat_bar/proc/animate_change(new_percentage, animate_time) + if(new_percentage != 0) + animate(src, color=gradient(COLOR_GREEN, COLOR_RED, new_percentage), alpha = 175, easing=SINE_EASING, time=animate_time) + return + animate(src, color=gradient(COLOR_GREEN, COLOR_RED, new_percentage), alpha = 0, easing=SINE_EASING, time=animate_time) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index e55fb6bfefc0a..4ba50fafac44a 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -3,9 +3,14 @@ //ENERGY GUNS/ETC /obj/item/weapon/gun/energy + icon = 'icons/obj/items/guns/energy.dmi' + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/energy_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/energy_right_1.dmi', + ) attachable_allowed = list() rounds_per_shot = 10 //100 shots. - flags_gun_features = GUN_AMMO_COUNTER|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_NO_PITCH_SHIFT_NEAR_EMPTY + gun_features_flags = GUN_AMMO_COUNTER|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_NO_PITCH_SHIFT_NEAR_EMPTY general_codex_key = "energy weapons" placed_overlay_iconstate = "laser" @@ -29,9 +34,9 @@ /obj/item/weapon/gun/energy/get_magazine_default_ammo(obj/item/mag) return null -/obj/item/weapon/gun/energy/get_flags_magazine_features(obj/item/mag) +/obj/item/weapon/gun/energy/get_magazine_features_flags(obj/item/mag) var/obj/item/cell/lasgun/cell = mag - return cell ? cell.flags_magazine_features : NONE + return cell ? cell.magazine_features_flags : NONE //based off of basegun proc, should work. /obj/item/weapon/gun/energy/get_magazine_overlay(obj/item/mag) var/obj/item/cell/lasgun/cell = mag @@ -52,7 +57,7 @@ default_ammo_type = /obj/item/cell/lasgun/lasrifle allowed_ammo_types = list(/obj/item/cell/lasgun/lasrifle) rounds_per_shot = 500 - flags_gun_features = GUN_AMMO_COUNTER|GUN_ALLOW_SYNTHETIC|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING + gun_features_flags = GUN_AMMO_COUNTER|GUN_ALLOW_SYNTHETIC|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING gun_skill_category = SKILL_PISTOLS movement_acc_penalty_mult = 0 @@ -80,15 +85,15 @@ fire_sound = 'sound/weapons/guns/fire/laser.ogg' load_method = CELL //codex ammo_datum_type = /datum/ammo/energy/lasgun - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK muzzleflash_iconstate = "muzzle_flash_laser" w_class = WEIGHT_CLASS_BULKY force = 15 overcharge = FALSE - flags_gun_features = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_SHOWS_AMMO_REMAINING + gun_features_flags = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_SHOWS_AMMO_REMAINING reciever_flags = AMMO_RECIEVER_MAGAZINES|AMMO_RECIEVER_AUTO_EJECT|AMMO_RECIEVER_DO_NOT_EJECT_HANDFULS|AMMO_RECIEVER_CYCLE_ONLY_BEFORE_FIRE aim_slowdown = 0.75 - wield_delay = 1 SECONDS + wield_delay = 1.2 SECONDS gun_skill_category = SKILL_RIFLES muzzle_flash_color = COLOR_LASER_RED @@ -97,8 +102,7 @@ accuracy_mult_unwielded = 0.6 scatter_unwielded = 80 //Heavy and unwieldy damage_falloff_mult = 0.5 - upper_akimbo_accuracy = 5 - lower_akimbo_accuracy = 3 + akimbo_scatter_mod = 8 /obj/item/weapon/gun/energy/lasgun/unique_action(mob/user, dont_operate = FALSE) QDEL_NULL(in_chamber) @@ -170,7 +174,7 @@ /obj/item/attachable/stock/lasgun, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_ENERGY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_SHOWS_AMMO_REMAINING + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_ENERGY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_SHOWS_AMMO_REMAINING starting_attachment_types = list(/obj/item/attachable/stock/lasgun) attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 18,"rail_x" = 12, "rail_y" = 23, "under_x" = 23, "under_y" = 15, "stock_x" = 22, "stock_y" = 12) ammo_level_icon = "m43" @@ -206,8 +210,8 @@ default_ammo_type = /obj/item/cell/lasgun/pulse allowed_ammo_types = list(/obj/item/cell/lasgun/pulse) - flags_equip_slot = ITEM_SLOT_BACK|ITEM_SLOT_BELT - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_ENERGY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_NO_PITCH_SHIFT_NEAR_EMPTY + equip_slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_ENERGY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_NO_PITCH_SHIFT_NEAR_EMPTY attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 18,"rail_x" = 12, "rail_y" = 23, "under_x" = 23, "under_y" = 15, "stock_x" = 22, "stock_y" = 12) ammo_level_icon = "m19c4" fire_delay = 4 @@ -244,7 +248,7 @@ /obj/item/weapon/gun/energy/lasgun/lasrifle name = "\improper LR-73 lasrifle MK2" desc = "A multifunctional laser based rifle with an integrated mode selector. Ideal for any situation. Uses power cells instead of ballistic magazines." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/energy64.dmi' icon_state = "tx73" item_state = "tx73" max_shots = 50 //codex stuff @@ -268,7 +272,7 @@ /obj/item/attachable/scope/marine, /obj/item/attachable/scope/mini, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_ENERGY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_NO_PITCH_SHIFT_NEAR_EMPTY + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_ENERGY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_NO_PITCH_SHIFT_NEAR_EMPTY attachable_offset = list("muzzle_x" = 34, "muzzle_y" = 14,"rail_x" = 18, "rail_y" = 18, "under_x" = 23, "under_y" = 10, "stock_x" = 22, "stock_y" = 12) ammo_level_icon = "tx73" accuracy_mult_unwielded = 0.5 //Heavy and unwieldy; you don't one hand this. @@ -276,7 +280,7 @@ damage_falloff_mult = 0.25 fire_delay = 2 default_ammo_type = /obj/item/cell/lasgun/lasrifle - allowed_ammo_types = list(/obj/item/cell/lasgun/lasrifle, /obj/item/cell/lasgun/volkite/powerpack/marine, /obj/item/cell/lasgun/lasrifle/recharger) + allowed_ammo_types = list(/obj/item/cell/lasgun/lasrifle, /obj/item/cell/lasgun/lasrifle/recharger) /// A list of available modes this gun can switch to var/list/datum/lasrifle/mode_list = list() /// The index of the current mode selected, used for non radial mode switches @@ -291,10 +295,12 @@ var/fire_delay = 0 ///Gives guns a burst amount, editable. var/burst_amount = 0 + ///heat amount per shot + var/heat_per_fire = 0 ///The gun firing sound of this mode var/fire_sound = null ///What message it sends to the user when you switch to this mode. - var/message_to_user = "" + var/message_to_user = "" // todo delete me I'm useless ///Used to change the gun firemode, like automatic, semi-automatic and burst. var/fire_mode = GUN_FIREMODE_SEMIAUTO ///what to change the gun icon_state to when switching to this mode. @@ -308,6 +314,7 @@ ///codex description var/description = "" +//TODO this proc should be generic so that you dont have to manually copy paste the default mode onto the item /obj/item/weapon/gun/energy/lasgun/lasrifle/unique_action(mob/user) if(!user) CRASH("switch_modes called with no user.") @@ -344,6 +351,7 @@ fire_sound = initial(choice.fire_sound) rounds_per_shot = initial(choice.rounds_per_shot) windup_delay = initial(choice.windup_delay) + heat_per_fire = initial(choice.heat_per_fire) SEND_SIGNAL(src, COMSIG_GUN_BURST_SHOTS_TO_FIRE_MODIFIED, burst_amount) SEND_SIGNAL(src, COMSIG_GUN_AUTOFIREDELAY_MODIFIED, fire_delay) SEND_SIGNAL(src, COMSIG_GUN_FIRE_MODE_TOGGLE, initial(choice.fire_mode), user.client) @@ -365,15 +373,14 @@ desc = "A Terra Experimental energy rifle that fires balls of elecricity that shock all those near them, it is meant to drain the plasma of unidentified creatures from within, limiting their abilities. As with all TE Laser weapons, they use a lightweight alloy combined without the need for bullets any longer decreases their weight and aiming speed quite some vs their ballistic counterparts. Uses standard Terra Experimental (TE) power cells." icon_state = "tesla" item_state = "tesla" - icon = 'icons/Marine/gun64.dmi' reload_sound = 'sound/weapons/guns/interact/standard_laser_rifle_reload.ogg' fire_sound = 'sound/weapons/guns/fire/tesla.ogg' ammo_datum_type = /datum/ammo/energy/tesla - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_BULKY default_ammo_type = /obj/item/cell/lasgun/lasrifle - allowed_ammo_types = list(/obj/item/cell/lasgun/lasrifle, /obj/item/cell/lasgun/volkite/powerpack/marine) - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_SHOWS_AMMO_REMAINING + allowed_ammo_types = list(/obj/item/cell/lasgun/lasrifle) + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_SHOWS_AMMO_REMAINING muzzle_flash_color = COLOR_TESLA_BLUE ammo_level_icon = "tesla" max_shots = 6 //codex stuff @@ -385,7 +392,6 @@ /obj/item/attachable/magnetic_harness, /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, ) mode_list = list( @@ -423,8 +429,8 @@ desc = "A Terra Experimental laser rifle, abbreviated as the TE-R. Has multiple firemodes for tactical flexibility. Uses standard Terra Experimental (abbreviated as TE) power cells. As with all TE Laser weapons, they use a lightweight alloy combined without the need for bullets any longer decreases their weight and aiming speed quite some vs their ballistic counterparts." reload_sound = 'sound/weapons/guns/interact/standard_laser_rifle_reload.ogg' fire_sound = 'sound/weapons/guns/fire/Laser Rifle Standard.ogg' - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED + icon_state = "ter" + item_state = "ter" max_shots = 60 ammo_datum_type = /datum/ammo/energy/lasgun/marine rounds_per_shot = 10 @@ -432,14 +438,6 @@ gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) turret_flags = TURRET_INACCURATE ammo_level_icon = "te" - greyscale_config = /datum/greyscale_config/gun/gun64/lasgun - colorable_allowed = PRESET_COLORS_ALLOWED - item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/ter, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/ter, - slot_back_str = /datum/greyscale_config/worn_gun/ter, - slot_s_store_str = /datum/greyscale_config/worn_gun/suit/ter, - ) attachable_allowed = list( /obj/item/attachable/bayonet, /obj/item/attachable/bayonetknife, @@ -454,7 +452,6 @@ /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, - /obj/item/attachable/shoulder_mount, /obj/item/attachable/gyro, /obj/item/attachable/verticalgrip, /obj/item/attachable/angledgrip, @@ -462,11 +459,11 @@ /obj/item/attachable/foldable/bipod, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING + gun_features_flags = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING attachable_offset = list("muzzle_x" = 40, "muzzle_y" = 17,"rail_x" = 22, "rail_y" = 21, "under_x" = 29, "under_y" = 10, "stock_x" = 22, "stock_y" = 12) aim_slowdown = 0.4 - wield_delay = 0.5 SECONDS + wield_delay = 0.7 SECONDS scatter = 0 scatter_unwielded = 10 fire_delay = 0.2 SECONDS @@ -492,7 +489,7 @@ fire_sound = 'sound/weapons/guns/fire/Laser Rifle Standard.ogg' message_to_user = "You set the laser rifle's charge mode to standard fire." fire_mode = GUN_FIREMODE_AUTOMATIC - icon_state = GUN_ICONSTATE_LOADED + icon_state = "ter" description = "Fire a standard automatic laser pulse. Better armour penetration and sunder than common projectiles." @@ -503,7 +500,7 @@ fire_sound = 'sound/weapons/guns/fire/Laser overcharge standard.ogg' message_to_user = "You set the laser rifle's charge mode to overcharge." fire_mode = GUN_FIREMODE_AUTOMATIC - icon_state = GUN_ICONSTATE_LOADED + icon_state = "ter" radial_icon_state = "laser_overcharge" description = "Fires a powerful overcharged laser pulse. Deals heavy damage with superior penetration at the cost of slower fire rate." @@ -514,7 +511,7 @@ fire_sound = 'sound/weapons/guns/fire/laser.ogg' message_to_user = "You set the laser rifle's charge mode to weakening." fire_mode = GUN_FIREMODE_AUTOMATIC - icon_state = GUN_ICONSTATE_LOADED + icon_state = "ter" radial_icon_state = "laser_disabler" description = "Fires a pulse of energy that inflicts slowdown, and deals stamina damage to humans, or drains plasma from xenomorphs." @@ -526,7 +523,7 @@ fire_sound = 'sound/weapons/guns/fire/laser_rifle_2.ogg' message_to_user = "You set the laser rifle's charge mode to microwave." fire_mode = GUN_FIREMODE_AUTOMATIC - icon_state = GUN_ICONSTATE_LOADED + icon_state = "ter" radial_icon_state = "laser_microwave" description = "Fires a deadly pulse of microwave radiation, dealing moderate damage but applying a 'microwave' effect that deals strong damage over time." @@ -537,22 +534,17 @@ desc = "A TerraGov standard issue laser pistol abbreviated as TE-P. It has an integrated charge selector for normal, heat and taser settings. Uses standard Terra Experimental (abbreviated as TE) power cells. As with all TE Laser weapons, they use a lightweight alloy combined without the need for bullets any longer decreases their weight and aiming speed quite some vs their ballistic counterparts." reload_sound = 'sound/weapons/guns/interact/standard_laser_pistol_reload.ogg' fire_sound = 'sound/weapons/guns/fire/Laser Pistol Standard.ogg' - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED + icon_state = "tep" + item_state = "tep" w_class = WEIGHT_CLASS_NORMAL - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT + gun_skill_category = SKILL_PISTOLS max_shots = 30 //codex stuff ammo_datum_type = /datum/ammo/energy/lasgun/marine/pistol ammo_level_icon = null rounds_per_shot = 20 - gun_firemode = GUN_FIREMODE_SEMIAUTO - gun_firemode_list = list(GUN_FIREMODE_SEMIAUTO) - greyscale_config = /datum/greyscale_config/gun/pistol/tep - colorable_allowed = PRESET_COLORS_ALLOWED - item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/tep, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/tep, - ) + gun_firemode = GUN_FIREMODE_AUTOMATIC + gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) attachable_allowed = list( /obj/item/attachable/bayonet, /obj/item/attachable/bayonetknife, @@ -566,11 +558,11 @@ /obj/item/attachable/flashlight/under, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING + gun_features_flags = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING attachable_offset = list("muzzle_x" = 23, "muzzle_y" = 22,"rail_x" = 12, "rail_y" = 22, "under_x" = 16, "under_y" = 14, "stock_x" = 22, "stock_y" = 12) akimbo_additional_delay = 0.9 - wield_delay = 0.2 SECONDS + wield_delay = 0.4 SECONDS scatter = 2 scatter_unwielded = 4 fire_delay = 0.15 SECONDS @@ -593,8 +585,8 @@ fire_delay = 0.15 SECONDS fire_sound = 'sound/weapons/guns/fire/Laser Pistol Standard.ogg' message_to_user = "You set the laser pistol's charge mode to standard fire." - fire_mode = GUN_FIREMODE_SEMIAUTO - icon_state = GUN_ICONSTATE_LOADED + fire_mode = GUN_FIREMODE_AUTOMATIC + icon_state = "tep" description = "Fires a standard laser pulse. Moderate damage." /datum/lasrifle/energy_pistol_mode/disabler @@ -604,7 +596,7 @@ fire_sound = 'sound/weapons/guns/fire/disabler.ogg' message_to_user = "You set the laser pistol's charge mode to disabler fire." fire_mode = GUN_FIREMODE_AUTOMATIC - icon_state = GUN_ICONSTATE_LOADED + icon_state = "tep" radial_icon_state = "laser_disabler" description = "Fires a disabling pulse that drains stamina. Ineffective against xenomorphs." @@ -615,7 +607,7 @@ fire_sound = 'sound/weapons/guns/fire/laser3.ogg' message_to_user = "You set the laser pistol's charge mode to wave heat." fire_mode = GUN_FIREMODE_AUTOMATIC - icon_state = GUN_ICONSTATE_LOADED + icon_state = "tep" radial_icon_state = "laser_heat" description = "Fires an incendiary laser pulse that ignites living targets." @@ -626,22 +618,14 @@ desc = "A TerraGov standard issue laser carbine, otherwise known as TE-C for short. Has multiple firemodes for tactical flexibility. Uses standard Terra Experimental (abbreviated as TE) power cells. As with all TE Laser weapons, they use a lightweight alloy combined without the need for bullets any longer decreases their weight and aiming speed quite some vs their ballistic counterparts." reload_sound = 'sound/weapons/guns/interact/standard_laser_rifle_reload.ogg' fire_sound = 'sound/weapons/guns/fire/Laser Carbine Scatter.ogg' - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED + icon_state = "tec" + item_state = "tec" max_shots = 12 ammo_datum_type = /datum/ammo/energy/lasgun/marine/blast rounds_per_shot = 50 gun_firemode = GUN_FIREMODE_SEMIAUTO gun_firemode_list = list(GUN_FIREMODE_SEMIAUTO) ammo_level_icon = "te" - greyscale_config = /datum/greyscale_config/gun/gun64/lasgun/tec - colorable_allowed = PRESET_COLORS_ALLOWED - item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/tec, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/tec, - slot_back_str = /datum/greyscale_config/worn_gun/tec, - slot_s_store_str = /datum/greyscale_config/worn_gun/suit/tec, - ) attachable_allowed = list( /obj/item/attachable/bayonet, /obj/item/attachable/bayonetknife, @@ -655,18 +639,17 @@ /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, - /obj/item/attachable/shoulder_mount, /obj/item/attachable/gyro, /obj/item/attachable/verticalgrip, /obj/item/attachable/angledgrip, /obj/item/attachable/flashlight/under, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING + gun_features_flags = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 18,"rail_x" = 17, "rail_y" = 21, "under_x" = 23, "under_y" = 10, "stock_x" = 22, "stock_y" = 12) aim_slowdown = 0.2 - wield_delay = 0.3 SECONDS + wield_delay = 0.5 SECONDS scatter = 1 scatter_unwielded = 10 fire_delay = 1.5 SECONDS @@ -703,6 +686,13 @@ /obj/item/attachable/gyro, ) +/obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_carbine/beginner + starting_attachment_types = list( + /obj/item/attachable/magnetic_harness, + /obj/item/attachable/verticalgrip, + /obj/item/attachable/bayonet, + ) + /datum/lasrifle/energy_carbine_mode/auto_burst rounds_per_shot = 12 ammo_datum_type = /datum/ammo/energy/lasgun/marine/carbine @@ -711,7 +701,7 @@ fire_sound = 'sound/weapons/guns/fire/Laser Rifle Standard.ogg' message_to_user = "You set the laser carbine's charge mode to standard auto burst fire." fire_mode = GUN_FIREMODE_AUTOBURST - icon_state = GUN_ICONSTATE_LOADED + icon_state = "tec" description = "Fires a rapid pulse laser, dealing good damage per second, but suffers from increased scatter and poorer falloff." /datum/lasrifle/energy_carbine_mode/base/spread @@ -722,7 +712,7 @@ fire_sound = 'sound/weapons/guns/fire/Laser Carbine Scatter.ogg' message_to_user = "You set the laser carbine's charge mode to spread." fire_mode = GUN_FIREMODE_SEMIAUTO - icon_state = GUN_ICONSTATE_LOADED + icon_state = "tec" radial_icon_state = "laser_spread" description = "Fire a 3 strong laser pulse dealing heavy damage with good penetration, but with a very slow rate of fire." @@ -734,7 +724,7 @@ fire_sound = 'sound/weapons/guns/fire/laser3.ogg' message_to_user = "You set the laser carbine's charge mode to impact." fire_mode = GUN_FIREMODE_SEMIAUTO - icon_state = GUN_ICONSTATE_LOADED + icon_state = "tec" radial_icon_state = "laser_impact" description = "Fires an experimental laser pulse designed to apply significant kinetic force on a target, applying strong knockback, but modest direct damage." @@ -746,7 +736,7 @@ fire_sound = 'sound/weapons/guns/fire/laser.ogg' message_to_user = "You set the laser carbine's charge mode to cripple." fire_mode = GUN_FIREMODE_AUTOMATIC - icon_state = GUN_ICONSTATE_LOADED + icon_state = "tec" radial_icon_state = "laser_disabler" description = "Fires a laser pulse dealing moderate damage and slowdown." @@ -757,8 +747,8 @@ desc = "The T-ES, a Terra Experimental standard issue laser sniper rifle, has multiple powerful firemodes, although the lack of aim mode can limit its tactical flexibility. Uses standard Terra Experimental (abbreviated as TE) power cells. As with all TE Laser weapons, they use a lightweight alloy combined without the need for bullets any longer decreases their weight and aiming speed quite some vs their ballistic counterparts." reload_sound = 'sound/weapons/guns/interact/standard_laser_sniper_reload.ogg' fire_sound = 'sound/weapons/guns/fire/Laser Sniper Standard.ogg' - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED + icon_state = "tes" + item_state = "tes" w_class = WEIGHT_CLASS_BULKY max_shots = 20 ammo_datum_type = /datum/ammo/energy/lasgun/marine/sniper @@ -770,14 +760,6 @@ ammo_level_icon = "te" icon_overlay_x_offset = -1 icon_overlay_y_offset = -3 - greyscale_config = /datum/greyscale_config/gun/gun64/lasgun/tes - colorable_allowed = PRESET_COLORS_ALLOWED - item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/tes, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/tes, - slot_back_str = /datum/greyscale_config/worn_gun/tes, - slot_s_store_str = /datum/greyscale_config/worn_gun/suit/tes, - ) attachable_allowed = list( /obj/item/attachable/bayonet, /obj/item/attachable/bayonetknife, @@ -789,7 +771,6 @@ /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, - /obj/item/attachable/shoulder_mount, /obj/item/attachable/gyro, /obj/item/attachable/verticalgrip, /obj/item/attachable/angledgrip, @@ -797,12 +778,12 @@ /obj/item/attachable/foldable/bipod, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING + gun_features_flags = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING attachable_offset = list("muzzle_x" = 41, "muzzle_y" = 18,"rail_x" = 19, "rail_y" = 19, "under_x" = 28, "under_y" = 8, "stock_x" = 22, "stock_y" = 12) starting_attachment_types = list(/obj/item/attachable/scope/unremovable/laser_sniper_scope) aim_slowdown = 0.7 - wield_delay = 0.7 SECONDS + wield_delay = 0.9 SECONDS scatter = -4 scatter_unwielded = 10 fire_delay = 0.8 SECONDS @@ -823,7 +804,7 @@ fire_sound = 'sound/weapons/guns/fire/Laser Sniper Standard.ogg' message_to_user = "You set the sniper rifle's charge mode to standard fire." fire_mode = GUN_FIREMODE_SEMIAUTO - icon_state = GUN_ICONSTATE_LOADED + icon_state = "tes" description = "Fires a single strong laser pulse, with good damage and penetration, and no falloff." /datum/lasrifle/energy_sniper_mode/heat @@ -833,7 +814,7 @@ fire_sound = 'sound/weapons/guns/fire/laser3.ogg' message_to_user = "You set the sniper rifle's charge mode to wave heat." fire_mode = GUN_FIREMODE_SEMIAUTO - icon_state = GUN_ICONSTATE_LOADED + icon_state = "tes" radial_icon_state = "laser_heat" description = "Fires an incendiary laser pulse, designed to ignite victims at range." @@ -844,7 +825,7 @@ fire_sound = 'sound/weapons/guns/fire/laser_rifle_2.ogg' message_to_user = "You set the sniper rifle's charge mode to shatter." fire_mode = GUN_FIREMODE_SEMIAUTO - icon_state = GUN_ICONSTATE_LOADED + icon_state = "tes" radial_icon_state = "laser_charge" description = "Fires a devestating laser pulse that significantly degrades the victims armor, at the cost of lower direct damage." @@ -855,7 +836,7 @@ fire_sound = 'sound/weapons/guns/fire/laser3.ogg' message_to_user = "You set the sniper rifle's charge mode to ricochet." fire_mode = GUN_FIREMODE_SEMIAUTO - icon_state = GUN_ICONSTATE_LOADED + icon_state = "tes" radial_icon_state = "laser_ricochet" description = "Fires an experiment laser pulse capable of bouncing off many wall surfaces. The laser increases in potency when bouncing, before collapsing entirely after exceeding its threshold." @@ -866,23 +847,16 @@ desc = "A Terra Experimental standard issue machine laser gun, often called as the TE-M by marines. High efficiency modulators ensure the TE-M has an extremely high fire count, and multiple firemodes makes it a flexible infantry support gun. Uses standard Terra Experimental (abbreviated as TE) power cells. As with all TE Laser weapons, they use a lightweight alloy combined without the need for bullets any longer decreases their weight and aiming speed quite some vs their ballistic counterparts." reload_sound = 'sound/weapons/guns/interact/standard_machine_laser_reload.ogg' fire_sound = 'sound/weapons/guns/fire/Laser Rifle Standard.ogg' - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED + icon_state = "tem" + item_state = "tem" w_class = WEIGHT_CLASS_BULKY + gun_skill_category = SKILL_HEAVY_WEAPONS max_shots = 150 //codex stuff ammo_datum_type = /datum/ammo/energy/lasgun/marine/autolaser rounds_per_shot = 4 gun_firemode = GUN_FIREMODE_AUTOMATIC gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) ammo_level_icon = "te" - greyscale_config = /datum/greyscale_config/gun/gun64/lasgun/tem - colorable_allowed = PRESET_COLORS_ALLOWED - item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/tem, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/tem, - slot_back_str = /datum/greyscale_config/worn_gun/tem, - slot_s_store_str = /datum/greyscale_config/worn_gun/suit/tem, - ) attachable_allowed = list( /obj/item/attachable/bayonet, /obj/item/attachable/bayonetknife, @@ -896,7 +870,6 @@ /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, - /obj/item/attachable/shoulder_mount, /obj/item/attachable/gyro, /obj/item/attachable/verticalgrip, /obj/item/attachable/angledgrip, @@ -904,11 +877,11 @@ /obj/item/attachable/foldable/bipod, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING + gun_features_flags = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING attachable_offset = list("muzzle_x" = 41, "muzzle_y" = 15,"rail_x" = 22, "rail_y" = 24, "under_x" = 30, "under_y" = 8, "stock_x" = 22, "stock_y" = 12) aim_slowdown = 0.7 - wield_delay = 0.8 SECONDS + wield_delay = 1 SECONDS scatter = 1 fire_delay = 0.2 SECONDS burst_delay = 0.25 SECONDS @@ -940,7 +913,7 @@ fire_sound = 'sound/weapons/guns/fire/Laser Sniper Standard.ogg' message_to_user = "You set the machine laser's charge mode to standard fire." fire_mode = GUN_FIREMODE_AUTOMATIC - icon_state = GUN_ICONSTATE_LOADED + icon_state = "tem" description = "Fires a rapid laser pulse with slightly reduced damage, but improved penetration and vastly improved energy efficiency." /datum/lasrifle/energy_mg_mode/standard/burst @@ -951,7 +924,7 @@ fire_sound = 'sound/weapons/guns/fire/Laser Carbine Scatter.ogg' message_to_user = "You set the machine laser's charge mode to burst." fire_mode = GUN_FIREMODE_BURSTFIRE - icon_state = GUN_ICONSTATE_LOADED + icon_state = "tem" radial_icon_state = "laser_spread" description = "Fires a series of laser pulses in quick succession. Each pulse in a burst is more powerful than the last." @@ -1001,7 +974,6 @@ /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, - /obj/item/attachable/shoulder_mount, /obj/item/attachable/gyro, /obj/item/attachable/verticalgrip, /obj/item/attachable/angledgrip, @@ -1009,11 +981,11 @@ /obj/item/attachable/foldable/bipod, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING + gun_features_flags = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING attachable_offset = list("muzzle_x" = 40, "muzzle_y" = 19,"rail_x" = 20, "rail_y" = 21, "under_x" = 30, "under_y" = 13, "stock_x" = 22, "stock_y" = 14) ammo_level_icon = "tex" aim_slowdown = 0.4 - wield_delay = 0.5 SECONDS + wield_delay = 0.7 SECONDS scatter = 0 scatter_unwielded = 10 fire_delay = 0.5 SECONDS @@ -1063,7 +1035,7 @@ gun_firemode = GUN_FIREMODE_AUTOMATIC gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) attachable_allowed = list() - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_ENERGY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_SHOWS_LOADED + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_ENERGY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_SHOWS_LOADED attachable_offset = list("muzzle_x" = 34, "muzzle_y" = 14,"rail_x" = 18, "rail_y" = 18, "under_x" = 23, "under_y" = 10, "stock_x" = 22, "stock_y" = 12) accuracy_mult = 1 @@ -1074,8 +1046,7 @@ recoil_unwielded = 3 aim_slowdown = 0.35 - wield_delay = 0.4 SECONDS - wield_penalty = 0.2 SECONDS + wield_delay = 0.6 SECONDS damage_falloff_mult = 0.9 fire_delay = 0.2 SECONDS @@ -1084,12 +1055,12 @@ light_power = 0.1 light_color = LIGHT_COLOR_ORANGE -/obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/update_icon(mob/user) +/obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/update_icon() . = ..() if(rounds) - turn_light(user, TRUE) + turn_light(null, TRUE) else - turn_light(user, FALSE) + turn_light(null, FALSE) /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/turn_light(mob/user, toggle_on) . = ..() @@ -1108,14 +1079,15 @@ icon_state = "vx12" item_state = "vx12" w_class = WEIGHT_CLASS_NORMAL + gun_skill_category = SKILL_PISTOLS max_shots = 15 rounds_per_shot = 36 ammo_datum_type = /datum/ammo/energy/volkite/medium default_ammo_type = /obj/item/cell/lasgun/volkite/small allowed_ammo_types = list(/obj/item/cell/lasgun/volkite/small) fire_sound = 'sound/weapons/guns/fire/volkite_3.ogg' - gun_firemode = GUN_FIREMODE_SEMIAUTO - gun_firemode_list = list(GUN_FIREMODE_SEMIAUTO) + gun_firemode = GUN_FIREMODE_AUTOMATIC + gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) fire_delay = 0.35 SECONDS scatter = -1 scatter_unwielded = 5 @@ -1124,7 +1096,7 @@ recoil_unwielded = 0 movement_acc_penalty_mult = 2 aim_slowdown = 0.1 - wield_delay = 0.2 SECONDS + wield_delay = 0.4 SECONDS /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/serpenta/custom name = "\improper VX-12c Serpenta" @@ -1154,7 +1126,6 @@ /obj/item/attachable/magnetic_harness, /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, ) attachable_offset = list("muzzle_x" = 30, "muzzle_y" = 13,"rail_x" = 9, "rail_y" = 23, "under_x" = 30, "under_y" = 10, "stock_x" = 22, "stock_y" = 12) scatter = 3 @@ -1180,14 +1151,13 @@ /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/caliver name = "\improper VX-33 Caliver" desc = "Volkite weapons are the pride of Martian weapons manufacturing, their construction being a tightly guarded secret. Infamous for its ability to deflagrate organic targets with its tremendous thermal energy, explosively burning flesh in a fiery blast that can be deadly to anyone unfortunate enough to be nearby. The caliver is the primary rifle of the volkite family, and effective at most ranges and situations. Drag click the powerpack to the gun to use that instead of magazines." - icon = 'icons/Marine/gun64.dmi' icon_state = "caliver" item_state = "caliver" inhand_x_dimension = 64 inhand_y_dimension = 32 item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_64.dmi', + slot_l_hand_str = 'icons/mob/inhands/guns/energy_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/energy_right_64.dmi', ) fire_sound = 'sound/weapons/guns/fire/volkite_3.ogg' max_shots = 40 @@ -1208,13 +1178,12 @@ /obj/item/attachable/scope/marine, /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, ) attachable_offset = list("muzzle_x" = 38, "muzzle_y" = 13,"rail_x" = 9, "rail_y" = 24, "under_x" = 45, "under_y" = 11, "stock_x" = 22, "stock_y" = 12) accuracy_mult = 1.1 aim_slowdown = 0.65 damage_falloff_mult = 0.4 - wield_delay = 0.7 SECONDS + wield_delay = 0.9 SECONDS fire_delay = 0.25 SECONDS /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/caliver/magharness @@ -1237,10 +1206,11 @@ inhand_x_dimension = 64 inhand_y_dimension = 32 item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_64.dmi', + slot_l_hand_str = 'icons/mob/inhands/guns/energy_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/energy_right_64.dmi', ) ammo_level_icon = null + gun_skill_category = SKILL_HEAVY_WEAPONS max_shots = 120 ammo_datum_type = /datum/ammo/energy/volkite/heavy rounds_per_shot = 30 @@ -1249,11 +1219,11 @@ attachable_allowed = list( /obj/item/attachable/magnetic_harness, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_ENERGY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_WIELDED_FIRING_ONLY|GUN_SHOWS_LOADED + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_ENERGY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_WIELDED_FIRING_ONLY|GUN_SHOWS_LOADED reciever_flags = AMMO_RECIEVER_MAGAZINES|AMMO_RECIEVER_DO_NOT_EJECT_HANDFULS|AMMO_RECIEVER_CYCLE_ONLY_BEFORE_FIRE attachable_offset = list("muzzle_x" = 34, "muzzle_y" = 14,"rail_x" = 11, "rail_y" = 29, "under_x" = 23, "under_y" = 10, "stock_x" = 22, "stock_y" = 12) aim_slowdown = 1 - wield_delay = 1.2 SECONDS + wield_delay = 1.4 SECONDS fire_delay = 0.15 SECONDS scatter = 3 accuracy_mult_unwielded = 0.4 diff --git a/code/modules/projectiles/guns/flamer.dm b/code/modules/projectiles/guns/flamer.dm index 37df4a7cdaa8d..78dbe81dc5317 100644 --- a/code/modules/projectiles/guns/flamer.dm +++ b/code/modules/projectiles/guns/flamer.dm @@ -5,15 +5,20 @@ /obj/item/weapon/gun/flamer name = "flamer" desc = "flame go froosh" - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_BULKY force = 15 + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/special_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/special_right_1.dmi', + ) fire_sound = "gun_flamethrower" dry_fire_sound = 'sound/weapons/guns/fire/flamethrower_empty.ogg' unload_sound = 'sound/weapons/guns/interact/flamethrower_unload.ogg' reload_sound = 'sound/weapons/guns/interact/flamethrower_reload.ogg' muzzle_flash = null aim_slowdown = 1.75 + wield_delay = 0.4 SECONDS general_codex_key = "flame weapons" attachable_allowed = list( //give it some flexibility. /obj/item/attachable/flashlight, @@ -23,7 +28,6 @@ /obj/item/attachable/flamer_nozzle, /obj/item/attachable/flamer_nozzle/wide, /obj/item/attachable/flamer_nozzle/wide/red, - /obj/item/attachable/shoulder_mount, ) attachments_by_slot = list( ATTACHMENT_SLOT_MUZZLE, @@ -34,7 +38,7 @@ ATTACHMENT_SLOT_FLAMER_NOZZLE, ) starting_attachment_types = list(/obj/item/attachable/flamer_nozzle) - flags_gun_features = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY + gun_features_flags = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY gun_skill_category = SKILL_HEAVY_WEAPONS reciever_flags = AMMO_RECIEVER_MAGAZINES|AMMO_RECIEVER_DO_NOT_EJECT_HANDFULS|AMMO_RECIEVER_DO_NOT_EMPTY_ROUNDS_AFTER_FIRE attachable_offset = list("rail_x" = 12, "rail_y" = 23, "flamer_nozzle_x" = 33, "flamer_nozzle_y" = 20) @@ -67,7 +71,7 @@ ///Gun based modifier for burn time. Percentage based. var/burn_time_mod = 1 ///Bitfield flags for flamer specific traits. - var/flags_flamer_features = NONE + var/flamer_features_flags = NONE ///Overlay icon state of the pilot light. var/lit_overlay_icon_state = "+lit" ///Pixel offset on the X axis for the pilot light overlay. @@ -114,24 +118,24 @@ ///Makes the sound of the flamer being lit, and applies the overlay. /obj/item/weapon/gun/flamer/proc/light_pilot(light) - if(!CHECK_BITFIELD(flags_flamer_features, FLAMER_IS_LIT) == !light) //!s so we can check equivalence on truthy, rather than true, values + if(!CHECK_BITFIELD(flamer_features_flags, FLAMER_IS_LIT) == !light) //!s so we can check equivalence on truthy, rather than true, values return if(light) - ENABLE_BITFIELD(flags_flamer_features, FLAMER_IS_LIT) + ENABLE_BITFIELD(flamer_features_flags, FLAMER_IS_LIT) turn_light(null, TRUE) else - DISABLE_BITFIELD(flags_flamer_features, FLAMER_IS_LIT) + DISABLE_BITFIELD(flamer_features_flags, FLAMER_IS_LIT) turn_light(null, FALSE) - playsound(src, CHECK_BITFIELD(flags_flamer_features, FLAMER_IS_LIT) ? 'sound/weapons/guns/interact/flamethrower_on.ogg' : 'sound/weapons/guns/interact/flamethrower_off.ogg', 25, 1) + playsound(src, CHECK_BITFIELD(flamer_features_flags, FLAMER_IS_LIT) ? 'sound/weapons/guns/interact/flamethrower_on.ogg' : 'sound/weapons/guns/interact/flamethrower_off.ogg', 25, 1) - if(CHECK_BITFIELD(flags_flamer_features, FLAMER_NO_LIT_OVERLAY)) + if(CHECK_BITFIELD(flamer_features_flags, FLAMER_NO_LIT_OVERLAY)) return update_icon() /obj/item/weapon/gun/flamer/update_overlays() . = ..() - if(!CHECK_BITFIELD(flags_flamer_features, FLAMER_IS_LIT)|| CHECK_BITFIELD(flags_flamer_features, FLAMER_NO_LIT_OVERLAY)) + if(!CHECK_BITFIELD(flamer_features_flags, FLAMER_IS_LIT)|| CHECK_BITFIELD(flamer_features_flags, FLAMER_NO_LIT_OVERLAY)) return var/image/lit_overlay = image(icon, src, lit_overlay_icon_state) @@ -237,7 +241,7 @@ if(!length(turfs_to_burn) || !length(chamber_items)) return FALSE - var/datum/ammo/flamethrower/loaded_ammo = CHECK_BITFIELD(flags_flamer_features, FLAMER_USES_GUN_FLAMES) ? ammo_datum_type : get_magazine_default_ammo(chamber_items[current_chamber_position]) + var/datum/ammo/flamethrower/loaded_ammo = CHECK_BITFIELD(flamer_features_flags, FLAMER_USES_GUN_FLAMES) ? ammo_datum_type : get_magazine_default_ammo(chamber_items[current_chamber_position]) var/burn_level = initial(loaded_ammo.burnlevel) * burn_level_mod var/burn_time = initial(loaded_ammo.burntime) * burn_time_mod var/fire_color = initial(loaded_ammo.fire_color) @@ -286,21 +290,22 @@ /obj/item/weapon/gun/flamer/big_flamer name = "\improper FL-240 incinerator unit" desc = "The FL-240 has proven to be one of the most effective weapons at clearing out soft-targets. This is a weapon to be feared and respected as it is quite deadly." + icon = 'icons/obj/items/guns/special.dmi' icon_state = "m240" item_state = "m240" /obj/item/weapon/gun/flamer/som name = "\improper V-62 incinerator" desc = "The V-62 is a deadly weapon employed in close quarter combat, favoured as much for the terror it inspires as the actual damage it inflicts. It has good range for a flamer, but lacks the integrated extinguisher of its TGMC equivalent." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/special64.dmi' icon_state = "v62" item_state = "v62" - flags_gun_features = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_SHOWS_LOADED + gun_features_flags = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_SHOWS_LOADED inhand_x_dimension = 64 inhand_y_dimension = 32 item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_64.dmi', + slot_l_hand_str = 'icons/mob/inhands/guns/special_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/special_right_64.dmi', ) lit_overlay_icon_state = "v62_lit" lit_overlay_offset_x = 0 @@ -310,6 +315,7 @@ default_ammo_type = /obj/item/ammo_magazine/flamer_tank/large/som allowed_ammo_types = list( /obj/item/ammo_magazine/flamer_tank/large/som, + /obj/item/ammo_magazine/flamer_tank/large/X/som, /obj/item/ammo_magazine/flamer_tank/backtank, /obj/item/ammo_magazine/flamer_tank/backtank/X, ) @@ -344,14 +350,21 @@ ) starting_attachment_types = list(/obj/item/attachable/flamer_nozzle, /obj/item/attachable/stock/t84stock) +/obj/item/weapon/gun/flamer/big_flamer/marinestandard/engineer/beginner + starting_attachment_types = list( + /obj/item/attachable/motiondetector, + /obj/item/attachable/flamer_nozzle, + /obj/item/attachable/stock/t84stock, + ) + /obj/item/weapon/gun/flamer/mini_flamer name = "mini flamethrower" desc = "A weapon-mounted refillable flamethrower attachment.\nIt is designed for short bursts." icon = 'icons/Marine/marine-weapons.dmi' icon_state = "flamethrower" - flags_gun_features = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_IS_ATTACHMENT|GUN_ATTACHMENT_FIRE_ONLY - flags_flamer_features = FLAMER_NO_LIT_OVERLAY + gun_features_flags = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_IS_ATTACHMENT|GUN_ATTACHMENT_FIRE_ONLY + flamer_features_flags = FLAMER_NO_LIT_OVERLAY w_class = WEIGHT_CLASS_BULKY fire_delay = 2.5 SECONDS fire_sound = 'sound/weapons/guns/fire/flamethrower3.ogg' @@ -378,7 +391,7 @@ wield_delay_mod = 0.2 SECONDS /obj/item/weapon/gun/flamer/mini_flamer/unremovable - flags_attach_features = NONE + attach_features_flags = NONE /obj/item/weapon/gun/flamer/big_flamer/marinestandard @@ -387,7 +400,7 @@ default_ammo_type = /obj/item/ammo_magazine/flamer_tank/large icon_state = "tl84" item_state = "tl84" - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_WIELDED_STABLE_FIRING_ONLY + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_WIELDED_STABLE_FIRING_ONLY attachable_offset = list("rail_x" = 10, "rail_y" = 23, "stock_x" = 16, "stock_y" = 13, "flamer_nozzle_x" = 33, "flamer_nozzle_y" = 20, "under_x" = 24, "under_y" = 15) attachable_allowed = list( /obj/item/attachable/flashlight, @@ -458,7 +471,8 @@ /turf/open/floor/plating/ground/snow/ignite(fire_lvl, burn_lvl, f_color, fire_stacks = 0, fire_damage = 0) if(slayer > 0) slayer -= 1 - update_icon(1, 0) + update_appearance() + update_sides() return ..() @@ -635,8 +649,8 @@ GLOBAL_LIST_EMPTY(flamer_particles) slot = ATTACHMENT_SLOT_UNDER attach_delay = 3 SECONDS detach_delay = 3 SECONDS - flags_gun_features = GUN_AMMO_COUNTER|GUN_IS_ATTACHMENT|GUN_ATTACHMENT_FIRE_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_WIELDED_FIRING_ONLY - flags_flamer_features = FLAMER_NO_LIT_OVERLAY + gun_features_flags = GUN_AMMO_COUNTER|GUN_IS_ATTACHMENT|GUN_ATTACHMENT_FIRE_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_WIELDED_FIRING_ONLY + flamer_features_flags = FLAMER_NO_LIT_OVERLAY flame_max_wall_pen = 1 //Actually means we'll hit one wall and then stop flame_max_wall_pen_wide = 1 diff --git a/code/modules/projectiles/guns/grenade_launchers.dm b/code/modules/projectiles/guns/grenade_launchers.dm index ba92c58e18f80..8f2742e1e5338 100644 --- a/code/modules/projectiles/guns/grenade_launchers.dm +++ b/code/modules/projectiles/guns/grenade_launchers.dm @@ -7,14 +7,20 @@ The Grenade Launchers /obj/item/weapon/gun/grenade_launcher w_class = WEIGHT_CLASS_BULKY - gun_skill_category = SKILL_FIREARMS - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_skill_category = SKILL_HEAVY_WEAPONS + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES reciever_flags = NONE throw_speed = 2 throw_range = 10 force = 5 + wield_delay = 0.4 SECONDS caliber = CALIBER_40MM //codex load_method = SINGLE_CASING //codex + icon = 'icons/obj/items/guns/special.dmi' + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/special_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/special_right_1.dmi', + ) fire_sound = 'sound/weapons/guns/fire/grenadelauncher.ogg' fire_rattle = 'sound/weapons/guns/fire/grenadelauncher.ogg' cocked_sound = 'sound/weapons/guns/interact/m92_cocked.ogg' @@ -37,6 +43,7 @@ The Grenade Launchers /obj/item/explosive/grenade/smokebomb/som, /obj/item/explosive/grenade/smokebomb/cloak, /obj/item/explosive/grenade/smokebomb/drain, + /obj/item/explosive/grenade/smokebomb/antigas, /obj/item/explosive/grenade/smokebomb/neuro, /obj/item/explosive/grenade/smokebomb/acid, /obj/item/explosive/grenade/smokebomb/satrapine, @@ -51,11 +58,13 @@ The Grenade Launchers /obj/item/explosive/grenade/chem_grenade, /obj/item/explosive/grenade/chem_grenade/large, /obj/item/explosive/grenade/chem_grenade/metalfoam, - /obj/item/explosive/grenade/chem_grenade/razorburn_smol, + /obj/item/explosive/grenade/chem_grenade/razorburn_small, /obj/item/explosive/grenade/chem_grenade/razorburn_large, /obj/item/explosive/grenade/chem_grenade/incendiary, /obj/item/explosive/grenade/chem_grenade/teargas, /obj/item/explosive/grenade/flashbang/stun, + /obj/item/explosive/grenade/bullet/laser, + /obj/item/explosive/grenade/bullet/hefa, ) reciever_flags = NONE @@ -87,7 +96,7 @@ The Grenade Launchers grenade_to_launch.throw_at(target, max_range, 3, (gun_user ? gun_user : loc)) if(fire_animation) flick("[fire_animation]", src) - if(CHECK_BITFIELD(flags_gun_features, GUN_SMOKE_PARTICLES)) + if(CHECK_BITFIELD(gun_features_flags, GUN_SMOKE_PARTICLES)) var/firing_angle = Get_Angle(user_turf, target) var/x_component = sin(firing_angle) * 40 var/y_component = cos(firing_angle) * 40 @@ -110,11 +119,11 @@ The Grenade Launchers /obj/item/weapon/gun/grenade_launcher/multinade_launcher name = "\improper GL-70 grenade launcher" desc = "The GL-70 is the standard grenade launcher used by the TerraGov Marine Corps for area denial and big explosions." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/special64.dmi' icon_state = "t70" item_state = "t70" fire_animation = "t70_fire" - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK max_shells = 6 //codex wield_delay = 1 SECONDS fire_sound = 'sound/weapons/guns/fire/underbarrel_grenadelauncher.ogg' @@ -131,6 +140,9 @@ The Grenade Launchers fire_delay = 1.2 SECONDS max_chamber_items = 5 +/obj/item/weapon/gun/grenade_launcher/multinade_launcher/beginner + starting_attachment_types = list(/obj/item/attachable/magnetic_harness) + /obj/item/weapon/gun/grenade_launcher/multinade_launcher/unloaded default_ammo_type = null @@ -150,7 +162,7 @@ The Grenade Launchers slot = ATTACHMENT_SLOT_UNDER attach_delay = 3 SECONDS detach_delay = 3 SECONDS - flags_gun_features = GUN_AMMO_COUNTER|GUN_IS_ATTACHMENT|GUN_ATTACHMENT_FIRE_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_AMMO_COUNTER|GUN_IS_ATTACHMENT|GUN_ATTACHMENT_FIRE_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES pixel_shift_x = 14 pixel_shift_y = 18 allowed_ammo_types = list( @@ -166,6 +178,7 @@ The Grenade Launchers /obj/item/explosive/grenade/smokebomb/som, /obj/item/explosive/grenade/smokebomb/cloak, /obj/item/explosive/grenade/smokebomb/drain, + /obj/item/explosive/grenade/smokebomb/antigas, /obj/item/explosive/grenade/smokebomb/neuro, /obj/item/explosive/grenade/smokebomb/acid, /obj/item/explosive/grenade/smokebomb/satrapine, @@ -181,7 +194,7 @@ The Grenade Launchers wield_delay_mod = 0.2 SECONDS /obj/item/weapon/gun/grenade_launcher/underslung/invisible - flags_attach_features = NONE + attach_features_flags = NONE /obj/item/weapon/gun/grenade_launcher/underslung/battle_rifle name = "\improper BR-64 underslung grenade launcher" @@ -193,11 +206,11 @@ The Grenade Launchers /obj/item/weapon/gun/grenade_launcher/underslung/mpi icon_state = "grenade_mpi" - flags_attach_features = NONE + attach_features_flags = NONE default_ammo_type = /obj/item/explosive/grenade/som /obj/item/weapon/gun/grenade_launcher/underslung/mpi/removeable - flags_attach_features = ATTACH_REMOVABLE + attach_features_flags = ATTACH_REMOVABLE /obj/item/weapon/gun/grenade_launcher/single_shot name = "\improper GL-81 grenade launcher" @@ -205,11 +218,14 @@ The Grenade Launchers icon_state = "m81" item_state = "m81" max_shells = 1 //codex - flags_equip_slot = ITEM_SLOT_BACK|ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT wield_delay = 0.2 SECONDS aim_slowdown = 1 - flags_gun_features = GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES - attachable_allowed = list() + gun_features_flags = GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + attachable_allowed = list( + /obj/item/attachable/magnetic_harness, + /obj/item/attachable/flashlight, + ) attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 14, "rail_y" = 22, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) fire_delay = 1.05 SECONDS max_chamber_items = 0 @@ -231,7 +247,7 @@ The Grenade Launchers fire_sound = 'sound/weapons/guns/fire/flare.ogg' fire_sound = 'sound/weapons/guns/fire/flare.ogg' w_class = WEIGHT_CLASS_SMALL - flags_gun_features = NONE + gun_features_flags = NONE gun_skill_category = SKILL_PISTOLS fire_delay = 0.5 SECONDS default_ammo_type = /obj/item/explosive/grenade/flare diff --git a/code/modules/projectiles/guns/mounted.dm b/code/modules/projectiles/guns/mounted.dm index a0640ed6d9d5c..1d02ab6651e41 100644 --- a/code/modules/projectiles/guns/mounted.dm +++ b/code/modules/projectiles/guns/mounted.dm @@ -1,5 +1,5 @@ ///box for storage of ammo and gun -/obj/item/storage/box/tl102 +/obj/item/storage/box/hsg_102 name = "\improper HSG-102 crate" desc = "A large and rusted metal case. It has not seen much use. Written in faded letters on its top, it says, \"This is a HSG-102 heavy smartgun\". There are many other warning labels atop that are too faded to read." icon = 'icons/Marine/marine-hmg.dmi' @@ -7,29 +7,33 @@ w_class = WEIGHT_CLASS_HUGE storage_slots = 7 bypass_w_limit = list( - /obj/item/weapon/gun/tl102, - /obj/item/ammo_magazine/tl102, + /obj/item/weapon/gun/hsg_102, + /obj/item/ammo_magazine/hsg_102, ) -/obj/item/storage/box/tl102/Initialize(mapload) +/obj/item/storage/box/hsg_102/Initialize(mapload) . = ..() - new /obj/item/weapon/gun/tl102(src) //gun itself - new /obj/item/ammo_magazine/tl102(src) //ammo for the gun + new /obj/item/weapon/gun/hsg_102(src) //gun itself + new /obj/item/ammo_magazine/hsg_102(src) //ammo for the gun ///HSG-102, now with full auto. It is not a superclass of deployed guns, however there are a few varients. -/obj/item/weapon/gun/tl102 +/obj/item/weapon/gun/hsg_102 name = "\improper HSG-102 mounted heavy smartgun" desc = "The HSG-102 heavy machinegun, it's too heavy to be wielded or operated without the tripod. IFF capable. No extra work required, just deploy it with Ctrl-Click. Can be repaired with a blowtorch once deployed." w_class = WEIGHT_CLASS_HUGE - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK icon = 'icons/Marine/marine-hmg.dmi' icon_state = "turret" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/misc_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/misc_right_1.dmi', + ) fire_sound = 'sound/weapons/guns/fire/hmg2.ogg' reload_sound = 'sound/weapons/guns/interact/minigun_cocked.ogg' - default_ammo_type = /obj/item/ammo_magazine/tl102 + default_ammo_type = /obj/item/ammo_magazine/hsg_102 scatter = 10 deployed_scatter_change = -10 @@ -42,20 +46,20 @@ burst_accuracy_bonus = 1 burst_scatter_mult = 0 - flags_item = IS_DEPLOYABLE|TWOHANDED - flags_gun_features = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_IFF|GUN_SMOKE_PARTICLES + item_flags = IS_DEPLOYABLE|TWOHANDED + gun_features_flags = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_IFF|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_BURSTFIRE, GUN_FIREMODE_AUTOMATIC) attachable_allowed = list( - /obj/item/attachable/scope/unremovable/tl102, + /obj/item/attachable/scope/unremovable/hsg_102, ) starting_attachment_types = list( - /obj/item/attachable/scope/unremovable/tl102, + /obj/item/attachable/scope/unremovable/hsg_102, ) allowed_ammo_types = list( - /obj/item/ammo_magazine/tl102, + /obj/item/ammo_magazine/hsg_102, ) deploy_time = 5 SECONDS @@ -66,27 +70,27 @@ soft_armor = list(MELEE = 0, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 100, FIRE = 0, ACID = 20) ///Unmovable ship mounted version. -/obj/item/weapon/gun/tl102/hsg_nest +/obj/item/weapon/gun/hsg_102/hsg_nest name = "\improper HSG-102 heavy smartgun nest" desc = "A HSG-102 heavy smartgun mounted upon a small reinforced post with sandbags to provide a small machinegun nest for all your defense purpose needs." icon = 'icons/Marine/marine-hmg.dmi' icon_state = "entrenched" - default_ammo_type = /obj/item/ammo_magazine/tl102/hsg_nest + default_ammo_type = /obj/item/ammo_magazine/hsg_102/hsg_nest - attachable_allowed = list(/obj/item/attachable/scope/unremovable/tl102/nest) + attachable_allowed = list(/obj/item/attachable/scope/unremovable/hsg_102/nest) starting_attachment_types = list( - /obj/item/attachable/scope/unremovable/tl102/nest, + /obj/item/attachable/scope/unremovable/hsg_102/nest, ) allowed_ammo_types = list( - /obj/item/ammo_magazine/tl102, - /obj/item/ammo_magazine/tl102/hsg_nest, + /obj/item/ammo_magazine/hsg_102, + /obj/item/ammo_magazine/hsg_102/hsg_nest, ) - flags_item = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE + item_flags = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE soft_armor = list(MELEE = 0, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 100, FIRE = 0, ACID = 0) -/obj/item/weapon/gun/tl102/hsg_nest/sandless +/obj/item/weapon/gun/hsg_102/hsg_nest/sandless icon_state = "entrenched_sandless" //------------------------------------------------------- @@ -97,7 +101,7 @@ desc = "The MG-2005 mounted minigun is a gun simple in principle, it will shoot a lot of bullets really fast and will rip through xeno hordes." w_class = WEIGHT_CLASS_HUGE - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK icon = 'icons/Marine/marine-hmg.dmi' icon_state = "minigun" caliber = CALIBER_762X51 @@ -113,16 +117,16 @@ windup_delay = 0.4 SECONDS windup_sound = 'sound/weapons/guns/fire/tank_minigun_start.ogg' - flags_item = IS_DEPLOYABLE|TWOHANDED - flags_gun_features = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + item_flags = IS_DEPLOYABLE|TWOHANDED + gun_features_flags = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) actions_types = list(/datum/action/item_action/aim_mode) aim_time = 2 SECONDS aim_fire_delay = 0.05 SECONDS - attachable_allowed = list(/obj/item/attachable/scope/unremovable/tl102) + attachable_allowed = list(/obj/item/attachable/scope/unremovable/hsg_102) - starting_attachment_types = list(/obj/item/attachable/scope/unremovable/tl102) + starting_attachment_types = list(/obj/item/attachable/scope/unremovable/hsg_102) allowed_ammo_types = list(/obj/item/ammo_magazine/heavy_minigun) @@ -140,11 +144,11 @@ icon = 'icons/Marine/marine-hmg.dmi' icon_state = "minigun_nest" - flags_item = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE + item_flags = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE - attachable_allowed = list(/obj/item/attachable/scope/unremovable/tl102/nest) + attachable_allowed = list(/obj/item/attachable/scope/unremovable/hsg_102/nest) - starting_attachment_types = list(/obj/item/attachable/scope/unremovable/tl102/nest,) + starting_attachment_types = list(/obj/item/attachable/scope/unremovable/hsg_102/nest) soft_armor = list(MELEE = 0, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 100, FIRE = 0, ACID = 20) @@ -155,9 +159,13 @@ name = "\improper ATR-22 mounted flak gun" desc = "The ATR-22 is a recoiling barrel 20mm autocannon, created to be used against low flying targets, it is however able to engage ground targets at medium ranges with extreme efficency even if the recoil makes it near impossible to hit anything close by, its bullets will shred hard targets such as armored foes or walls. Both barrels can be fired at the same time rather than in sequence, but will incur large scatter penalties do so." w_class = WEIGHT_CLASS_HUGE - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK icon = 'icons/Marine/marine-ac.dmi' icon_state = "autocannon" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/misc_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/misc_right_1.dmi', + ) fire_sound = "ac_fire" reload_sound = 'sound/weapons/guns/interact/minigun_cocked.ogg' @@ -171,8 +179,8 @@ burst_scatter_mult = 0.65 extra_delay = 1.5 SECONDS - flags_item = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE - flags_gun_features = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_IFF|GUN_SMOKE_PARTICLES + item_flags = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE + gun_features_flags = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_IFF|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_BURSTFIRE, GUN_FIREMODE_AUTOBURST) attachable_allowed = list(/obj/item/attachable/scope/unremovable/standard_atgun) @@ -202,9 +210,9 @@ desc = "The TE-9001 mounted heavy laser is a non-IFF heavy laser that is powerful enough to start a sizeable fire on its impact, this weapon is exceptional at area denial and has direct fire capability on the side." w_class = WEIGHT_CLASS_HUGE - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK icon = 'icons/Marine/marine-hmg.dmi' - icon_state = "heavylaser" + icon_state = "heavylaser_deployed" fire_sound = 'sound/weapons/guns/fire/tank_flamethrower.ogg' reload_sound = 'sound/weapons/guns/interact/minigun_cocked.ogg' @@ -216,13 +224,13 @@ deployed_scatter_change = -10 fire_delay = 0.7 SECONDS - flags_item = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE - flags_gun_features = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + item_flags = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE + gun_features_flags = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) - attachable_allowed = list(/obj/item/attachable/scope/unremovable/tl102/nest) + attachable_allowed = list(/obj/item/attachable/scope/unremovable/hsg_102/nest) - starting_attachment_types = list(/obj/item/attachable/scope/unremovable/tl102/nest) + starting_attachment_types = list(/obj/item/attachable/scope/unremovable/hsg_102/nest) allowed_ammo_types = list(/obj/item/cell/lasgun/heavy_laser) @@ -258,7 +266,7 @@ fire_sound = 'sound/weapons/guns/fire/Laser Rifle Standard.ogg' message_to_user = "You set the heavy laser to burst fire mode." fire_mode = GUN_FIREMODE_AUTOBURST - icon_state = GUN_ICONSTATE_LOADED + icon_state = "heavylaser" description = "Fires a rapid pulse laser, dealing mediocre damage and shattering armor, but suffers from increased scatter and poorer falloff." /datum/lasrifle/heavy_laser/ricochet @@ -268,14 +276,14 @@ fire_sound = 'sound/weapons/guns/fire/laser3.ogg' message_to_user = "You set the heavy laser to ricochet mode." fire_mode = GUN_FIREMODE_SEMIAUTO - icon_state = GUN_ICONSTATE_LOADED + icon_state = "heavylaser" radial_icon_state = "laser_ricochet" description = "Fires an experiment laser pulse capable of bouncing off many wall surfaces. The laser increases in potency when bouncing, before collapsing entirely after exceeding its threshold." /obj/item/weapon/gun/energy/lasgun/lasrifle/heavy_laser/deployable icon_state = "heavylaser_deployable" - flags_item = IS_DEPLOYABLE|TWOHANDED + item_flags = IS_DEPLOYABLE|TWOHANDED //------------------------------------------------------- //FK-88 mounted heavy infantry support gun @@ -285,7 +293,7 @@ desc = "The FK-88 is a big gun, offically meant to be used against large hostile wildlife or unruly crowds, this cannon will most definitely give a very bad day to anything that gets caught in its line of fire. Takes quite a while to dial in your shots. Uses 15cm shells." w_class = WEIGHT_CLASS_HUGE - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK icon = 'icons/Marine/marine-fkgun.dmi' icon_state = "isg" fire_sound = 'sound/weapons/guns/fire/tank_cannon1.ogg' @@ -300,13 +308,13 @@ deployed_scatter_change = -10 fire_delay = 10 SECONDS - flags_item = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE|DEPLOYED_ANCHORED_FIRING_ONLY - flags_gun_features = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + item_flags = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE|DEPLOYED_ANCHORED_FIRING_ONLY + gun_features_flags = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_SEMIAUTO) - attachable_allowed = list(/obj/item/attachable/scope/unremovable/tl102/nest) + attachable_allowed = list(/obj/item/attachable/scope/unremovable/hsg_102/nest) - starting_attachment_types = list(/obj/item/attachable/scope/unremovable/tl102/nest) + starting_attachment_types = list(/obj/item/attachable/scope/unremovable/hsg_102/nest) allowed_ammo_types = list( /obj/item/ammo_magazine/heavy_isg/he, @@ -328,7 +336,7 @@ pixel_y = -11 ///This is my meme version, the first version of the HSG-102 to have auto-fire, revel in its presence. -/obj/item/weapon/gun/tl102/death +/obj/item/weapon/gun/hsg_102/death name = "\improper \"Death incarnate\" heavy machine gun" desc = "It looks like a regular HSG-102, however glowing archaeic writing glows faintly on its sides and top. It beckons for blood." icon = 'icons/Marine/marine-hmg.dmi' @@ -344,7 +352,7 @@ aim_slowdown = 3 wield_delay = 5 SECONDS - flags_gun_features = GUN_AMMO_COUNTER|GUN_IFF|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_AMMO_COUNTER|GUN_IFF|GUN_SMOKE_PARTICLES // This is a deployed IFF-less MACHINEGUN, has 500 rounds, drums do not fit anywhere but your belt slot and your back slot. But it has 500 rounds. That's nice. @@ -352,9 +360,13 @@ name = "\improper HMG-08 heavy machinegun" desc = "An absolute monster of a weapon, this is a watercooled heavy machinegun modernized by some crazy armorer with a wheeling kit included. Considering the mish mash of parts for the wheeling kit, you think its from another model of the gun. The pinnacle at holding a chokepoint. Holds 500 rounds of 10x28mm caseless in a box case. IS NOT IFF CAPABLE. Aiming carefully recommended. Can be repaired with a blowtorch once deployed. Alt Right click to unanchor and reanchor it." w_class = WEIGHT_CLASS_HUGE - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK icon = 'icons/Marine/marine-hmg.dmi' icon_state = "mg08" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/misc_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/misc_right_1.dmi', + ) fire_sound = 'sound/weapons/guns/fire/mg08.ogg' reload_sound = 'sound/weapons/guns/interact/minigun_cocked.ogg' @@ -370,8 +382,8 @@ burst_amount = 1 - flags_item = IS_DEPLOYABLE|TWOHANDED - flags_gun_features = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + item_flags = IS_DEPLOYABLE|TWOHANDED + gun_features_flags = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) attachable_allowed = list( @@ -397,16 +409,20 @@ /obj/item/weapon/gun/standard_mmg name = "\improper MG-27 medium machinegun" desc = "The MG-27 is the SG-29s aging IFF-less cousin, made for rapid accurate machinegun fire in a short amount of time, you could use it while standing, not a great idea. Use the tripod for actual combat. It uses 10x27mm boxes." - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_BULKY icon = 'icons/Marine/marine-mmg.dmi' icon_state = "t27" item_state = "t27" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_1.dmi', + ) caliber = CALIBER_10x27_CASELESS // codex max_shells = 150 //codex force = 40 aim_slowdown = 1.2 - wield_delay = 2 SECONDS + wield_delay = 2.2 SECONDS fire_sound = 'sound/weapons/guns/fire/tgmc/kinetic/gun_mg27.ogg' fire_rattle = 'sound/weapons/guns/fire/tgmc/kinetic/gun_mg27_low.ogg' dry_fire_sound = 'sound/weapons/guns/fire/m41a_empty.ogg' @@ -432,8 +448,8 @@ starting_attachment_types = list(/obj/item/attachable/stock/t27) attachable_offset = list("muzzle_x" = 45, "muzzle_y" = 19,"rail_x" = 18, "rail_y" = 24, "under_x" = 28, "under_y" = 13, "stock_x" = 0, "stock_y" = 0) - flags_item = IS_DEPLOYABLE|TWOHANDED - flags_gun_features = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + item_flags = IS_DEPLOYABLE|TWOHANDED + gun_features_flags = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES deployable_item = /obj/machinery/deployable/mounted gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) actions_types = list(/datum/action/item_action/aim_mode) @@ -466,8 +482,8 @@ icon_state = "ptrs" item_state = "ptrs" item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_64.dmi', + slot_l_hand_str = 'icons/mob/inhands/guns/special_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/special_right_64.dmi', ) inhand_x_dimension = 64 inhand_y_dimension = 32 @@ -481,7 +497,7 @@ hand_reload_sound = 'sound/weapons/guns/interact/shotgun_shell_insert.ogg' cocked_sound = 'sound/weapons/guns/interact/shotgun_reload.ogg' opened_sound = 'sound/weapons/guns/interact/shotgun_open.ogg' - flags_gun_features = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY + gun_features_flags = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY reciever_flags = AMMO_RECIEVER_HANDFULS default_ammo_type = /datum/ammo/bullet/sniper/clf_heavyrifle attachable_allowed = list( @@ -495,8 +511,8 @@ starting_attachment_types = list(/obj/item/attachable/stock/clf_heavyrifle) attachable_offset = list("muzzle_x" = 45, "muzzle_y" = 19,"rail_x" = 18, "rail_y" = 24, "under_x" = 28, "under_y" = 13, "stock_x" = 8, "stock_y" = 0) - flags_item = IS_DEPLOYABLE|TWOHANDED - flags_gun_features = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY + item_flags = IS_DEPLOYABLE|TWOHANDED + gun_features_flags = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY deployable_item = /obj/machinery/deployable/mounted gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) actions_types = list(/datum/action/item_action/aim_mode) @@ -543,8 +559,8 @@ starting_attachment_types = list(/obj/item/attachable/scope/unremovable/standard_atgun) attachable_allowed = list(/obj/item/attachable/scope/unremovable/standard_atgun) - flags_item = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE|DEPLOYED_NO_ROTATE_ANCHORED|DEPLOYED_ANCHORED_FIRING_ONLY - flags_gun_features = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + item_flags = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE|DEPLOYED_NO_ROTATE_ANCHORED|DEPLOYED_ANCHORED_FIRING_ONLY + gun_features_flags = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_SEMIAUTO) actions_types = list(/datum/action/item_action/aim_mode) @@ -617,9 +633,9 @@ /obj/item/weapon/gun/standard_agls name = "\improper AGLS-37 Kauser automatic grenade launcher" - desc = "The AGLS-37 automatic grenade launching IFF capable system, it's too heavy to be wielded or operated without the tripod. On the back, it reads: \"The Explosions and Fragmentation from this weapon ARE NOT friendly fire capable. Kauser is not obligated to buy you new body parts for you or your friends if you lose them.\"\nCan be deployed with Crtl-Click. It CANNOT be turned once deployed, due to a lack of swivels, pick it up to move your cone of fire. Can be repaired with a blowtorch once deployed." + desc = "The AGLS-37 automatic grenade launching IFF capable system, it's too heavy to be wielded or operated without the tripod. On the back, it reads: \"The Explosions and Fragmentation from this weapon ARE NOT friendly fire capable. Kauser is not obligated to buy you new body parts for you or your friends if you lose them.\"\nCan be deployed with Crtl-Click. Can be repaired with a blowtorch once deployed." w_class = WEIGHT_CLASS_HUGE - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK caliber = CALIBER_40MM icon = 'icons/Marine/marine-hmg.dmi' icon_state = "ags" @@ -630,8 +646,8 @@ fire_delay = 1.1 SECONDS burst_amount = 0 accuracy_mult = 1.2 //it's got a bipod - flags_item = IS_DEPLOYABLE|TWOHANDED - flags_gun_features = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY + item_flags = IS_DEPLOYABLE|TWOHANDED + gun_features_flags = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) attachable_allowed = list( @@ -667,3 +683,57 @@ gun_user?.record_war_crime() +// Non-TGMC HMG + +/obj/item/weapon/gun/icc_hmg + name = "\improper KRD-61ES mounted heavy machinegun" + desc = "The KRD-61ES machinegun is the export variant of the ML-91 HMG. It's too heavy to be wielded or operated without the tripod. No extra work required, just deploy it with Ctrl-Click. Can be repaired with a blowtorch once deployed." + icon = 'icons/Marine/marine-mmg.dmi' + icon_state = "kord" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/misc_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/misc_right_1.dmi', + ) + + fire_sound = 'sound/weapons/guns/fire/hmg2.ogg' + reload_sound = 'sound/weapons/guns/interact/minigun_cocked.ogg' + + w_class = WEIGHT_CLASS_HUGE + equip_slot_flags = ITEM_SLOT_BACK + + scatter = 10 + deployed_scatter_change = -10 + accuracy_mult = 1.2 //it's got a bipod + fire_delay = 0.25 SECONDS + + default_ammo_type = /obj/item/ammo_magazine/icc_hmg + + allowed_ammo_types = list( + /obj/item/ammo_magazine/icc_hmg, + ) + + item_flags = IS_DEPLOYABLE|TWOHANDED + gun_features_flags = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) + actions_types = list(/datum/action/item_action/aim_mode) + aim_fire_delay = 0.05 SECONDS + aim_speed_modifier = 5 + + attachable_allowed = list( + /obj/item/attachable/scope/unremovable/hsg_102, + ) + + starting_attachment_types = list( + /obj/item/attachable/scope/unremovable/hsg_102, + ) + + deploy_time = 1.5 SECONDS + undeploy_time = 0.5 SECONDS + deployable_item = /obj/machinery/deployable/mounted + + max_integrity = 200 + soft_armor = list(MELEE = 0, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 100, FIRE = 0, ACID = 20) + + allowed_ammo_types = list( + /obj/item/ammo_magazine/icc_hmg, + ) diff --git a/code/modules/projectiles/guns/pistols.dm b/code/modules/projectiles/guns/pistols.dm index 856b4117cb6a9..1c61ae7abf681 100644 --- a/code/modules/projectiles/guns/pistols.dm +++ b/code/modules/projectiles/guns/pistols.dm @@ -2,18 +2,23 @@ //-------------------------------------------------- /obj/item/weapon/gun/pistol + icon = 'icons/obj/items/guns/pistols.dmi' icon_state = "" //Defaults to revolver pistol when there's no sprite. + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/pistols_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/pistols_right_1.dmi', + ) fire_sound = 'sound/weapons/guns/fire/pistol.ogg' unload_sound = 'sound/weapons/guns/interact/pistol_unload.ogg' reload_sound = 'sound/weapons/guns/interact/pistol_reload.ogg' cocked_sound = 'sound/weapons/guns/interact/pistol_cocked.ogg' muzzleflash_iconstate = "muzzle_flash_light" load_method = MAGAZINE //codex - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_NORMAL force = 6 movement_acc_penalty_mult = 2 - wield_delay = 0.2 SECONDS //If you modify your pistol to be two-handed, it will still be fast to aim + wield_delay = 0.4 SECONDS type_of_casings = "bullet" gun_skill_category = SKILL_PISTOLS attachable_allowed = list( @@ -31,7 +36,7 @@ /obj/item/attachable/buildasentry, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES actions_types = list(/datum/action/item_action/aim_mode) // all pistols can aim mode aim_speed_modifier = 0.65 scatter = -2 @@ -47,18 +52,12 @@ /obj/item/weapon/gun/pistol/standard_pistol name = "\improper P-14 pistol" desc = "The P-14, produced by Terran Armories. A reliable sidearm that loads 9x19mm Parabellum Auto munitions. Capable of mounting a limited amount of attachments, and firing at a respectable rate of fire, often as fast as you can pull the trigger. Takes 21-round 9mm magazines." - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED + icon_state = "tp14" + item_state = "tp14" caliber = CALIBER_9X19 //codex max_shells = 21 //codex fire_sound = 'sound/weapons/guns/fire/tgmc/kinetic/gun_p14.ogg' reload_sound = 'sound/weapons/guns/interact/tp14_reload.ogg' - greyscale_config = /datum/greyscale_config/gun/pistol - colorable_allowed = PRESET_COLORS_ALLOWED - item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/tp14, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/tp14, - ) default_ammo_type = /obj/item/ammo_magazine/pistol/standard_pistol allowed_ammo_types = list(/obj/item/ammo_magazine/pistol/standard_pistol) @@ -70,30 +69,28 @@ scatter_unwielded = 4 recoil = -2 recoil_unwielded = -2 - upper_akimbo_accuracy = 5 - lower_akimbo_accuracy = 4 + akimbo_scatter_mod = 8 //------------------------------------------------------- //PP-7 Plasma Pistol /obj/item/weapon/gun/pistol/plasma_pistol name = "\improper PP-7 plasma pistol" desc = "An experimental weapon designed to set the terrain and targets on fire. It hums with power as magnetic fields coil round each other." - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED + icon_state = "tx7" + item_state = "tx7" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/energy_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/energy_right_1.dmi', + ) caliber = CALIBER_PLASMA max_shots = 10 + icon = 'icons/obj/items/guns/energy.dmi' reload_sound = 'sound/weapons/guns/interact/tp14_reload.ogg' fire_sound = 'sound/weapons/guns/fire/laser3.ogg' default_ammo_type = /obj/item/ammo_magazine/pistol/plasma_pistol allowed_ammo_types = list(/obj/item/ammo_magazine/pistol/plasma_pistol) type_of_casings = null attachable_offset = list("muzzle_x" = 29, "muzzle_y" = 20,"rail_x" = 13, "rail_y" = 23, "under_x" = 19, "under_y" = 13, "stock_x" = 21, "stock_y" = 17) - greyscale_config = /datum/greyscale_config/gun/pistol/tx7 - colorable_allowed = PRESET_COLORS_ALLOWED - item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/tx7, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/tx7, - ) attachable_allowed = list( /obj/item/attachable/reddot, /obj/item/attachable/flashlight, @@ -101,16 +98,15 @@ /obj/item/attachable/gyro, /obj/item/attachable/lace, /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, /obj/item/attachable/scope/marine, /obj/item/weapon/gun/shotgun/combat/masterkey, ) muzzleflash_iconstate = "muzzle_flash_laser" - flags_gun_features = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_IS_ATTACHMENT|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_IS_ATTACHMENT|GUN_SMOKE_PARTICLES reciever_flags = AMMO_RECIEVER_MAGAZINES|AMMO_RECIEVER_AUTO_EJECT|AMMO_RECIEVER_DO_NOT_EJECT_HANDFULS|AMMO_RECIEVER_CYCLE_ONLY_BEFORE_FIRE actions_types = list() - wield_delay = 0.5 SECONDS + wield_delay = 0.7 SECONDS muzzle_flash_color = COLOR_GREEN fire_delay = 1.5 SECONDS @@ -128,6 +124,9 @@ placed_overlay_iconstate = "tx7" +/obj/item/weapon/gun/pistol/plasma_pistol/beginner + starting_attachment_types = list(/obj/item/weapon/gun/shotgun/combat/masterkey, /obj/item/attachable/reddot, /obj/item/attachable/lasersight) + /obj/item/weapon/gun/pistol/plasma_pistol/can_attach(obj/item/attaching_to, mob/attacher) if(!attachments_by_slot[ATTACHMENT_SLOT_RAIL]) return TRUE @@ -135,11 +134,11 @@ return FALSE /obj/item/weapon/gun/pistol/plasma_pistol/on_attach(obj/item/attached_to, mob/user) - flags_gun_features |= (GUN_WIELDED_STABLE_FIRING_ONLY|GUN_WIELDED_FIRING_ONLY) + gun_features_flags |= (GUN_WIELDED_STABLE_FIRING_ONLY|GUN_WIELDED_FIRING_ONLY) return ..() /obj/item/weapon/gun/pistol/plasma_pistol/on_detach(obj/item/attached_to, mob/user) - flags_gun_features &= ~(GUN_WIELDED_STABLE_FIRING_ONLY|GUN_WIELDED_FIRING_ONLY) + gun_features_flags &= ~(GUN_WIELDED_STABLE_FIRING_ONLY|GUN_WIELDED_FIRING_ONLY) return ..() /obj/item/weapon/gun/pistol/plasma_pistol/guardsman_pistol @@ -179,20 +178,14 @@ /obj/item/weapon/gun/pistol/standard_heavypistol name = "\improper P-23 service pistol" desc = "A standard P-23 chambered in .45 ACP. Has a smaller magazine capacity, but packs a better punch. Has an irremovable laser sight. Uses .45 magazines." - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED + icon_state = "tp23" + item_state = "tp23" caliber = CALIBER_45ACP //codex max_shells = 14 //codex fire_sound = 'sound/weapons/guns/fire/tgmc/kinetic/gun_p23.ogg' unload_sound = 'sound/weapons/guns/interact/colt_unload.ogg' reload_sound = 'sound/weapons/guns/interact/colt_reload.ogg' cocked_sound = 'sound/weapons/guns/interact/colt_cocked.ogg' - greyscale_config = /datum/greyscale_config/gun/pistol/tp23 - colorable_allowed = PRESET_COLORS_ALLOWED - item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/tp23, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/tp23, - ) default_ammo_type = /obj/item/ammo_magazine/pistol/standard_heavypistol allowed_ammo_types = list(/obj/item/ammo_magazine/pistol/standard_heavypistol) attachable_allowed = list( @@ -204,10 +197,9 @@ /obj/item/attachable/heavy_barrel, /obj/item/attachable/lace, /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES attachable_offset = list("muzzle_x" = 31, "muzzle_y" = 22,"rail_x" = 13, "rail_y" = 24, "under_x" = 21, "under_y" = 17, "stock_x" = 21, "stock_y" = 17) fire_delay = 0.2 SECONDS @@ -215,7 +207,6 @@ accuracy_mult_unwielded = 0.95 recoil = -2 recoil_unwielded = -2 - lower_akimbo_accuracy = 2 /obj/item/weapon/gun/pistol/standard_heavypistol/suppressed starting_attachment_types = list(/obj/item/attachable/suppressor, /obj/item/attachable/flashlight) //Tacticool @@ -225,6 +216,10 @@ /obj/item/weapon/gun/pistol/standard_heavypistol/tactical starting_attachment_types = list(/obj/item/attachable/reddot) + +/obj/item/weapon/gun/pistol/standard_heavypistol/beginner + starting_attachment_types = list(/obj/item/attachable/lace, /obj/item/attachable/reddot) + //------------------------------------------------------- //P-1911 @@ -248,7 +243,6 @@ accuracy_mult_unwielded = 0.85 damage_mult = 1.15 recoil = -2 - lower_akimbo_accuracy = 2 /obj/item/weapon/gun/pistol/m1911/custom name = "\improper P-1911A1 custom pistol" @@ -262,9 +256,8 @@ /obj/item/attachable/quickfire, /obj/item/attachable/lace, /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES fire_delay = 0.15 SECONDS damage_mult = 1.3 @@ -342,10 +335,9 @@ /obj/item/attachable/flashlight/under, /obj/item/attachable/lace, /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES attachable_offset = list("muzzle_x" = 31, "muzzle_y" = 19,"rail_x" = 9, "rail_y" = 23, "under_x" = 22, "under_y" = 14, "stock_x" = 20, "stock_y" = 17) fire_delay = 0.45 SECONDS @@ -388,10 +380,9 @@ /obj/item/attachable/buildasentry, /obj/item/attachable/flashlight/under, /obj/item/attachable/suppressor/unremovable/invisible, - /obj/item/attachable/shoulder_mount, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES attachable_offset = list("muzzle_x" = 30, "muzzle_y" = 19,"rail_x" = 10, "rail_y" = 22, "under_x" = 21, "under_y" = 18, "stock_x" = 21, "stock_y" = 18) //Making the gun have an invisible silencer since it's supposed to have one. starting_attachment_types = list(/obj/item/attachable/suppressor/unremovable/invisible) @@ -431,7 +422,7 @@ /obj/item/attachable/lace, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES attachable_offset = list("muzzle_x" = 25, "muzzle_y" = 20,"rail_x" = 12, "rail_y" = 22, "under_x" = 17, "under_y" = 15, "stock_x" = 22, "stock_y" = 17) fire_delay = 0.15 SECONDS @@ -459,7 +450,7 @@ /obj/item/attachable/lace, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES attachable_offset = list("muzzle_x" = 28, "muzzle_y" = 20,"rail_x" = 10, "rail_y" = 22, "under_x" = 17, "under_y" = 15, "stock_x" = 22, "stock_y" = 17) fire_delay = 0.15 SECONDS @@ -487,7 +478,7 @@ allowed_ammo_types = list(/obj/item/ammo_magazine/pistol/highpower) force = 10 - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES attachable_offset = list("muzzle_x" = 27, "muzzle_y" = 20,"rail_x" = 8, "rail_y" = 22, "under_x" = 18, "under_y" = 15, "stock_x" = 16, "stock_y" = 15) fire_delay = 0.45 SECONDS @@ -542,12 +533,14 @@ aim_slowdown = 0.2 scatter = 0 scatter_unwielded = 6 - lower_akimbo_accuracy = 2 akimbo_additional_delay = 2 /obj/item/weapon/gun/pistol/vp70/tactical starting_attachment_types = list(/obj/item/attachable/reddot, /obj/item/attachable/lasersight, /obj/item/attachable/compensator) +/obj/item/weapon/gun/pistol/vp70/beginner + starting_attachment_types = list(/obj/item/attachable/reddot, /obj/item/attachable/lasersight, /obj/item/attachable/lace) + //------------------------------------------------------- //VP78 @@ -664,7 +657,7 @@ It is a modified Beretta 93R, and can fire three round burst or single fire. Whe desc = "The PL-5 is a true and tested ICCAF handgun, used for a very long time with minimal changes to the core design, best used at close quarters with its higher than usual magazine size for its caliber. It is chambered in .45 ACP." icon_state = "pl5" item_state = "pl5" - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/pistols64.dmi' caliber = CALIBER_45ACP //codex max_shells = 18 //codex fire_sound = 'sound/weapons/guns/fire/colt.ogg' @@ -701,7 +694,7 @@ It is a modified Beretta 93R, and can fire three round burst or single fire. Whe type_of_casings = null gun_skill_category = SKILL_PISTOLS attachable_allowed = list() - flags_gun_features = GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES fire_delay = 0.3 SECONDS burst_delay = 0.2 SECONDS @@ -716,7 +709,7 @@ It is a modified Beretta 93R, and can fire three round burst or single fire. Whe reload_sound = 'sound/weapons/flipblade.ogg' cocked_sound = 'sound/weapons/guns/interact/pistol_cocked.ogg' caliber = CALIBER_ALIEN - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_NORMAL force = 30 movement_acc_penalty_mult = 3 @@ -753,7 +746,7 @@ It is a modified Beretta 93R, and can fire three round burst or single fire. Whe /obj/item/weapon/gun/pistol/smart_pistol name = "\improper SP-13 smart pistol" desc = "The SP-13 is a IFF-capable sidearm used by the TerraGov Marine Corps. A cutting-edge miniaturization technology allows mounting of a KTLD IFF system on the pistol, albeit at high manufactoring cost and the usual specialized training required to use such a pistol. Unique design feature high-capacity mag on top of the barrel, with integrated sight." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/pistols64.dmi' icon_state = "sp13" item_state = "sp13" caliber = CALIBER_9X19 //codex @@ -773,7 +766,7 @@ It is a modified Beretta 93R, and can fire three round burst or single fire. Whe /obj/item/attachable/lace, ) - flags_gun_features = GUN_AMMO_COUNTER|GUN_IFF|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_AMMO_COUNTER|GUN_IFF|GUN_SMOKE_PARTICLES gun_skill_category = SKILL_SMARTGUN actions_types = list() // Inherits aimmode, but has IFF so.. gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_SEMIAUTO) @@ -781,7 +774,7 @@ It is a modified Beretta 93R, and can fire three round burst or single fire. Whe attachable_offset = list("muzzle_x" = 29, "muzzle_y" = 20,"rail_x" = 13, "rail_y" = 23, "under_x" = 19, "under_y" = 13, "stock_x" = 21, "stock_y" = 17) aim_slowdown = 0.2 - wield_delay = 0.4 SECONDS + wield_delay = 0.6 SECONDS fire_delay = 0.2 SECONDS accuracy_mult = 1.2 accuracy_mult_unwielded = 0.85 diff --git a/code/modules/projectiles/guns/plasma.dm b/code/modules/projectiles/guns/plasma.dm new file mode 100644 index 0000000000000..6bbbfe5b43656 --- /dev/null +++ b/code/modules/projectiles/guns/plasma.dm @@ -0,0 +1,274 @@ +/obj/item/weapon/gun/energy/lasgun/lasrifle/plasma + name = "generic plasma weapon" + icon = 'icons/obj/items/guns/plasma64.dmi' + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/plasma_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/plasma_right_1.dmi', + ) + default_ammo_type = /obj/item/cell/lasgun/plasma + allowed_ammo_types = list(/obj/item/cell/lasgun/plasma) + heat_per_fire = 5 + muzzle_flash_color = COLOR_DISABLER_BLUE + muzzleflash_iconstate = "muzzle_flash_pulse" + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_AMMO_COUNT_BY_SHOTS_REMAINING + accuracy_mult = 1 + accuracy_mult_unwielded = 0.5 + scatter = 4 + scatter_unwielded = 35 + movement_acc_penalty_mult = 5 + damage_falloff_mult = 0.25 + overheat_multiplier = 0.5 + cool_amount = 9 + ammo_level_icon = null + +/obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/rifle + name = "\improper PL-38 plasma rifle" + desc = "The PL-38 Plasma Rifle is an experimental addition to the TerraGov Marine Corps arsenal, rumored to be the child of some back door contract deals, it is a versatile weapon if you mind the rather cheap cooling systems. It has a normal beam mode similar to a rifle, a hipower mode that easily pierces through soft targets, and a blast mode that will easily melt through the armor of anything hit by it." + icon_state = "plasma_rifle" + item_state = "plasma_rifle" + fire_sound = 'sound/weapons/guns/fire/plasma_fire_med.ogg' + unload_sound = 'sound/weapons/guns/interact/plasma_unload_3.ogg' + reload_sound = 'sound/weapons/guns/interact/plasma_reload_2.ogg' + + wield_delay = 0.7 SECONDS + aim_slowdown = 0.5 + + accuracy_mult = 1.15 + scatter = 0 + + fire_delay = 0.2 SECONDS + heat_per_fire = 3 + rounds_per_shot = 12 + gun_firemode = GUN_FIREMODE_AUTOMATIC + ammo_datum_type = /datum/ammo/energy/plasma/rifle_standard + force = 20 + mode_list = list( + "Standard" = /datum/lasrifle/base/plasma_rifle/rifle_standard, + "Piercing" = /datum/lasrifle/base/plasma_rifle/rifle_marksman, + "Blast" = /datum/lasrifle/base/plasma_rifle/rifle_blast, + ) + attachable_offset = list("muzzle_x" = 50, "muzzle_y" = 16,"rail_x" = 25, "rail_y" = 25, "under_x" = 37, "under_y" = 10, "stock_x" = 0, "stock_y" = 13) + attachable_allowed = list( + /obj/item/attachable/bayonet, + /obj/item/attachable/bayonetknife, + /obj/item/attachable/bayonetknife/som, + /obj/item/attachable/reddot, + /obj/item/attachable/lasersight, + /obj/item/attachable/flashlight, + /obj/item/attachable/flashlight/under, + /obj/item/attachable/verticalgrip, + /obj/item/attachable/angledgrip, + /obj/item/attachable/magnetic_harness, + /obj/item/attachable/scope/marine, + /obj/item/attachable/scope/mini, + /obj/item/weapon/gun/shotgun/combat/masterkey, + /obj/item/weapon/gun/flamer/mini_flamer, + /obj/item/weapon/gun/grenade_launcher/underslung, + /obj/item/attachable/motiondetector, + /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, + ) + +/obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/rifle/standard + starting_attachment_types = list( + /obj/item/weapon/gun/flamer/mini_flamer, + /obj/item/attachable/reddot, + /obj/item/attachable/bayonet, + ) + +/obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/rifle/v_grip + starting_attachment_types = list( + /obj/item/attachable/verticalgrip, + /obj/item/attachable/reddot, + /obj/item/attachable/bayonet, + ) + +/datum/lasrifle/base/plasma_rifle/rifle_standard + fire_sound = 'sound/weapons/guns/fire/plasma_fire_med.ogg' + ammo_datum_type = /datum/ammo/energy/plasma/rifle_standard + icon_state = "plasma_rifle" + fire_mode = GUN_FIREMODE_AUTOMATIC + fire_delay = 0.2 SECONDS + heat_per_fire = 3 + rounds_per_shot = 12 + radial_icon_state = "plasma_weak" + message_to_user = "You set the plasma rifle's charge mode to standard fire." + +/datum/lasrifle/base/plasma_rifle/rifle_marksman + fire_sound = 'sound/weapons/guns/fire/plasma_fire_heavy.ogg' + ammo_datum_type = /datum/ammo/energy/plasma/rifle_marksman + icon_state = "plasma_rifle" + fire_mode = GUN_FIREMODE_AUTOMATIC + fire_delay = 0.6 SECONDS + heat_per_fire = 12 + rounds_per_shot = 48 + radial_icon_state = "plasma_strong" + message_to_user = "You set the plasma rifle's charge mode to piercing fire." + +/datum/lasrifle/base/plasma_rifle/rifle_blast + fire_sound = 'sound/weapons/guns/fire/plasma_fire_blast.ogg' + ammo_datum_type = /datum/ammo/energy/plasma/blast/melting + icon_state = "plasma_rifle" + fire_mode = GUN_FIREMODE_AUTOMATIC + fire_delay = 1.5 SECONDS + heat_per_fire = 33 + rounds_per_shot = 100 + radial_icon_state = "plasma_multi" + message_to_user = "You set the plasma rifle's charge mode to blast fire." + +/obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/cannon + name = "\improper PL-96 plasma cannon" + desc = "The PL-96 Plasma Cannon is an experimental addition to the TerraGov Marine Corps arsenal, rumored to be the child of some back door contract deals, is an absolutely incredibly devastating weapon to behold... if you mind the incredibly poor cooling mechanisms and unwieldiness of the whole package. It has a normal beam mode similar to a machinegun, a fire glob mode that leaves devastating flames in the aftermath, and a Charge mode nicknamed the 'Femur breaker' due to its incredible armor shattering potiential upon hitting a target." + icon_state = "plasma_cannon" + item_state = "plasma_cannon" + gun_features_flags = GUN_AMMO_COUNTER|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY + gun_skill_category = SKILL_HEAVY_WEAPONS + + aim_slowdown = 1.2 + wield_delay = 1.7 SECONDS + movement_acc_penalty_mult = 7 + + accuracy_mult = 1 + accuracy_mult_unwielded = 0.5 + scatter = 2 + + fire_sound = 'sound/weapons/guns/fire/plasma_fire_heavy.ogg' + unload_sound = 'sound/weapons/guns/interact/plasma_unload_2.ogg' + reload_sound = 'sound/weapons/guns/interact/plasma_reload_1.ogg' + force = 35 + ammo_datum_type = /datum/ammo/energy/plasma/cannon_heavy + gun_firemode = GUN_FIREMODE_AUTOMATIC + fire_delay = 2 SECONDS + heat_per_fire = 50 + rounds_per_shot = 180 + windup_delay = 0.5 SECONDS + mode_list = list( + "Standard" = /datum/lasrifle/base/plasma_cannon/cannon_standard, + "Shatter" = /datum/lasrifle/base/plasma_cannon/shatter_blast, + "Incendiary" = /datum/lasrifle/base/plasma_cannon/incendiary_blast, + ) + attachable_offset = list("muzzle_x" = 49, "muzzle_y" = 16,"rail_x" = 25, "rail_y" = 26, "under_x" = 42, "under_y" = 11, "stock_x" = 0, "stock_y" = 13) + attachable_allowed = list( + /obj/item/attachable/reddot, + /obj/item/attachable/magnetic_harness, + ) + +/obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/cannon/mag_harness + starting_attachment_types = list(/obj/item/attachable/magnetic_harness) + +/datum/lasrifle/base/plasma_cannon/cannon_standard + fire_sound = 'sound/weapons/guns/fire/plasma_fire_heavy.ogg' + ammo_datum_type = /datum/ammo/energy/plasma/cannon_heavy + fire_mode = GUN_FIREMODE_AUTOMATIC + fire_delay = 2 SECONDS + heat_per_fire = 50 + rounds_per_shot = 180 + windup_delay = 0.5 SECONDS + icon_state = "plasma_cannon" + radial_icon_state = "plasma_cannon" + message_to_user = "You set the plasma cannon's charge mode to standard." + +/datum/lasrifle/base/plasma_cannon/shatter_blast + fire_sound = 'sound/weapons/guns/fire/plasma_fire_blast.ogg' + ammo_datum_type = /datum/ammo/energy/plasma/blast/shatter + fire_mode = GUN_FIREMODE_AUTOMATIC + fire_delay = 1.5 SECONDS + heat_per_fire = 45 + rounds_per_shot = 150 + windup_delay = 0.5 SECONDS + icon_state = "plasma_cannon" + radial_icon_state = "plasma_fire" + message_to_user = "You set the gun's charge mode to shatter." + +/datum/lasrifle/base/plasma_cannon/incendiary_blast + fire_sound = 'sound/weapons/guns/fire/flamethrower3.ogg' + ammo_datum_type = /datum/ammo/energy/plasma/blast/incendiary + fire_mode = GUN_FIREMODE_AUTOMATIC + fire_delay = 1.5 SECONDS + heat_per_fire = 40 + rounds_per_shot = 100 + windup_delay = 0.5 SECONDS + icon_state = "plasma_cannon" + radial_icon_state = "plasma_strong" + message_to_user = "You set the plasma cannon's charge mode to incendiary." + +/obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/smg + name = "\improper PL-51 plasma SMG" + desc = "The PL-51 Plasma SMG, ." + icon_state = "plasma_smg" + item_state = "plasma_smg" + gun_skill_category = SKILL_SMGS + fire_sound = 'sound/weapons/guns/fire/plasma_fire_fast.ogg' + unload_sound = 'sound/weapons/guns/interact/plasma_unload_3.ogg' + reload_sound = 'sound/weapons/guns/interact/plasma_reload_3.ogg' + fire_sound = 'sound/weapons/guns/fire/plasma_fire_fast.ogg' + ammo_datum_type = /datum/ammo/energy/plasma/smg_standard/four + + wield_delay = 0.3 SECONDS + aim_slowdown = 0.25 + movement_acc_penalty_mult = 3 + + accuracy_mult = 1.1 + accuracy_mult_unwielded = 0.7 + scatter = 6 + scatter_unwielded = 12 + + damage_falloff_mult = 0.75 + + gun_firemode = GUN_FIREMODE_AUTOMATIC + fire_delay = 0.15 SECONDS + heat_per_fire = 3 + rounds_per_shot = 12 + mode_list = list( + "Standard" = /datum/lasrifle/base/plasma_smg/smg_standard, + "Overcharge" = /datum/lasrifle/base/plasma_smg/smg_overcharge, + ) + attachable_offset = list("muzzle_x" = 43, "muzzle_y" = 17,"rail_x" = 25, "rail_y" = 25, "under_x" = 33, "under_y" = 11, "stock_x" = 0, "stock_y" = 13) + attachable_allowed = list( + /obj/item/attachable/bayonet, + /obj/item/attachable/bayonetknife, + /obj/item/attachable/bayonetknife/som, + /obj/item/attachable/reddot, + /obj/item/attachable/lasersight, + /obj/item/attachable/flashlight, + /obj/item/attachable/flashlight/under, + /obj/item/attachable/verticalgrip, + /obj/item/attachable/angledgrip, + /obj/item/attachable/magnetic_harness, + /obj/item/attachable/motiondetector, + ) + +/obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/smg/standard + starting_attachment_types = list( + /obj/item/attachable/verticalgrip, + /obj/item/attachable/reddot, + /obj/item/attachable/bayonet, + ) + +/obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/smg/motion_sensor + starting_attachment_types = list( + /obj/item/attachable/verticalgrip, + /obj/item/attachable/motiondetector, + /obj/item/attachable/bayonet, + ) + +/datum/lasrifle/base/plasma_smg/smg_standard + fire_sound = 'sound/weapons/guns/fire/plasma_fire_fast.ogg' + ammo_datum_type = /datum/ammo/energy/plasma/smg_standard/four + icon_state = "plasma_smg" + fire_mode = GUN_FIREMODE_AUTOMATIC + fire_delay = 0.15 SECONDS + heat_per_fire = 3 + rounds_per_shot = 12 + radial_icon_state = "plasma_bouncy" + message_to_user = "You set the guns's firemode to standard fire." + +/datum/lasrifle/base/plasma_smg/smg_overcharge + fire_sound = 'sound/weapons/guns/fire/plasma_fire_heavy.ogg' + ammo_datum_type = /datum/ammo/energy/plasma/blast + icon_state = "plasma_smg" + fire_mode = GUN_FIREMODE_AUTOMATIC + fire_delay = 1 SECONDS + heat_per_fire = 25 + rounds_per_shot = 90 + radial_icon_state = "plasma_cannon" + message_to_user = "You set the guns's firemode to overcharge." diff --git a/code/modules/projectiles/guns/revolvers.dm b/code/modules/projectiles/guns/revolvers.dm index d1510026fd017..db6f85b273aff 100644 --- a/code/modules/projectiles/guns/revolvers.dm +++ b/code/modules/projectiles/guns/revolvers.dm @@ -2,21 +2,26 @@ //--------------------------------------------------- /obj/item/weapon/gun/revolver - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_NORMAL + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/pistols_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/pistols_right_1.dmi', + ) fire_sound = 'sound/weapons/guns/fire/44mag.ogg' reload_sound = 'sound/weapons/guns/interact/revolver_spun.ogg' cocked_sound = 'sound/weapons/guns/interact/revolver_cocked.ogg' unload_sound = 'sound/weapons/guns/interact/revolver_unload.ogg' + icon = 'icons/obj/items/guns/pistols.dmi' muzzleflash_iconstate = "muzzle_flash_medium" hand_reload_sound = 'sound/weapons/guns/interact/revolver_load.ogg' type_of_casings = "bullet" load_method = SINGLE_CASING|SPEEDLOADER //codex - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_SMOKE_PARTICLES actions_types = list(/datum/action/item_action/aim_mode) aim_speed_modifier = 0.75 aim_fire_delay = 0.25 SECONDS - wield_delay = 0.2 SECONDS //If you modify your revolver to be two-handed, it will still be fast to aim + wield_delay = 0.4 SECONDS gun_skill_category = SKILL_PISTOLS reciever_flags = AMMO_RECIEVER_HANDFULS|AMMO_RECIEVER_ROTATES_CHAMBER|AMMO_RECIEVER_TOGGLES_OPEN|AMMO_RECIEVER_TOGGLES_OPEN_EJECTS @@ -60,20 +65,14 @@ /obj/item/weapon/gun/revolver/standard_revolver name = "\improper R-44 combat revolver" desc = "The R-44 standard combat revolver, produced by Terran Armories. A sturdy and hard hitting firearm that loads .44 Magnum rounds. Holds 7 rounds in the cylinder. Due to an error in the cylinder rotation system the fire rate of the gun is much faster than intended, it ended up being billed as a feature of the system." - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED + icon_state = "tp44" + item_state = "tp44" fire_sound = 'sound/weapons/guns/fire/tgmc/kinetic/gun_r44.ogg' caliber = CALIBER_44 //codex max_chamber_items = 7 //codex default_ammo_type = /obj/item/ammo_magazine/revolver/standard_revolver allowed_ammo_types = list(/obj/item/ammo_magazine/revolver/standard_revolver) force = 8 - greyscale_config = /datum/greyscale_config/gun/revolver - colorable_allowed = PRESET_COLORS_ALLOWED - item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/tp44, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/tp44, - ) attachable_allowed = list( /obj/item/attachable/bayonet, /obj/item/attachable/reddot, @@ -85,7 +84,6 @@ /obj/item/attachable/lasersight, /obj/item/attachable/lace, /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, ) attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 19,"rail_x" = 13, "rail_y" = 23, "under_x" = 22, "under_y" = 14, "stock_x" = 22, "stock_y" = 19) fire_delay = 0.15 SECONDS @@ -184,7 +182,6 @@ /obj/item/attachable/compensator, /obj/item/attachable/lace, /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, ) attachable_offset = list("muzzle_x" = 30, "muzzle_y" = 19,"rail_x" = 8, "rail_y" = 23, "under_x" = 24, "under_y" = 15, "stock_x" = 22, "stock_y" = 15) @@ -281,7 +278,7 @@ /obj/item/weapon/gun/revolver/standard_magnum name = "\improper R-76 KC magnum" desc = "The R-76 magnum is an absolute beast of a handgun used by the TGMC, rumors say it was created as a money laundering scheme by some general due to the sheer inpracticality of this firearm. Hits hard, recommended to be used with its stock attachment. Chambered in 12.7mm." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/pistols64.dmi' icon_state = "t76" item_state = "t76" fire_animation = "t76_fire" @@ -299,7 +296,6 @@ /obj/item/attachable/extended_barrel, /obj/item/attachable/lasersight, /obj/item/attachable/lace, - /obj/item/attachable/shoulder_mount, /obj/item/attachable/stock/t76, /obj/item/attachable/scope/standard_magnum, ) @@ -329,7 +325,6 @@ /obj/item/attachable/extended_barrel, /obj/item/attachable/lasersight, /obj/item/attachable/lace, - /obj/item/attachable/shoulder_mount, /obj/item/attachable/stock/t76, /obj/item/attachable/scope/standard_magnum, /obj/item/attachable/compensator, diff --git a/code/modules/projectiles/guns/rifles.dm b/code/modules/projectiles/guns/rifles.dm index 1b6719038e0f8..03f58e680eab4 100644 --- a/code/modules/projectiles/guns/rifles.dm +++ b/code/modules/projectiles/guns/rifles.dm @@ -1,15 +1,16 @@ //------------------------------------------------------- /obj/item/weapon/gun/rifle + icon = 'icons/obj/items/guns/rifles.dmi' reload_sound = 'sound/weapons/guns/interact/rifle_reload.ogg' cocked_sound = 'sound/weapons/guns/interact/cocked.ogg' - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_BULKY force = 15 - flags_gun_features = GUN_CAN_POINTBLANK||GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK||GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES load_method = MAGAZINE //codex aim_slowdown = 0.35 - wield_delay = 0.6 SECONDS + wield_delay = 0.8 SECONDS gun_skill_category = SKILL_RIFLES burst_amount = 3 @@ -19,8 +20,7 @@ scatter_unwielded = 13 recoil_unwielded = 4 damage_falloff_mult = 0.5 - upper_akimbo_accuracy = 5 - lower_akimbo_accuracy = 3 + akimbo_scatter_mod = 8 //------------------------------------------------------- //AR-18 Carbine @@ -28,8 +28,8 @@ /obj/item/weapon/gun/rifle/standard_carbine name = "\improper AR-18 Kauser carbine" desc = "The Keckler and Hoch AR-18 carbine is one of the standard rifles used by the TerraGov Marine Corps. It's commonly used by people who prefer greater mobility in combat, like scouts and other light infantry. Uses 10x24mm caseless ammunition." - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED + icon_state = "t18" + item_state = "t18" fire_sound = 'sound/weapons/guns/fire/tgmc/kinetic/gun_ar18.ogg' dry_fire_sound = 'sound/weapons/guns/fire/m41a_empty.ogg' unload_sound = 'sound/weapons/guns/interact/t18_unload.ogg' @@ -38,15 +38,7 @@ max_shells = 36 //codex force = 20 default_ammo_type = /obj/item/ammo_magazine/rifle/standard_carbine - allowed_ammo_types = list(/obj/item/ammo_magazine/rifle/standard_carbine) - greyscale_config = /datum/greyscale_config/gun - colorable_allowed = PRESET_COLORS_ALLOWED - item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/t18, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/t18, - slot_back_str = /datum/greyscale_config/worn_gun/t18, - slot_s_store_str = /datum/greyscale_config/worn_gun/suit/t18, - ) + allowed_ammo_types = list(/obj/item/ammo_magazine/rifle/standard_carbine, /obj/item/ammo_magazine/rifle/standard_carbine/ap) attachable_allowed = list( /obj/item/attachable/stock/t18stock, /obj/item/attachable/reddot, @@ -76,11 +68,10 @@ /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, - /obj/item/attachable/shoulder_mount, /obj/item/weapon/gun/energy/lasgun/lasrifle/pocket_beam, //RUTGMC EDIT ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_BURSTFIRE, GUN_FIREMODE_AUTOBURST) starting_attachment_types = list(/obj/item/attachable/stock/t18stock) attachable_offset = list("muzzle_x" = 30, "muzzle_y" = 16,"rail_x" = 5, "rail_y" = 19, "under_x" = 18, "under_y" = 14, "stock_x" = 0, "stock_y" = 13) @@ -108,19 +99,25 @@ starting_attachment_types = list(/obj/item/attachable/stock/t18stock, /obj/item/weapon/gun/grenade_launcher/underslung, /obj/item/attachable/motiondetector, /obj/item/attachable/extended_barrel) /obj/item/weapon/gun/rifle/standard_carbine/engineer - starting_attachment_types = list(/obj/item/attachable/stock/t18stock, /obj/item/attachable/magnetic_harness, /obj/item/attachable/lasersight) + starting_attachment_types = list(/obj/item/attachable/stock/t18stock, /obj/item/attachable/magnetic_harness, /obj/item/attachable/verticalgrip, /obj/item/attachable/extended_barrel) /obj/item/weapon/gun/rifle/standard_carbine/plasma_pistol starting_attachment_types = list(/obj/item/attachable/stock/t18stock, /obj/item/weapon/gun/pistol/plasma_pistol, /obj/item/attachable/motiondetector, /obj/item/attachable/compensator) +/obj/item/weapon/gun/rifle/standard_carbine/beginner + starting_attachment_types = list(/obj/item/attachable/stock/t18stock, /obj/item/attachable/magnetic_harness, /obj/item/attachable/angledgrip, /obj/item/attachable/compensator) + +/obj/item/weapon/gun/rifle/standard_carbine/suppressed + starting_attachment_types = list(/obj/item/attachable/stock/t18stock, /obj/item/weapon/gun/grenade_launcher/underslung, /obj/item/attachable/reddot, /obj/item/attachable/suppressor) + //------------------------------------------------------- //AR-12 Assault Rifle /obj/item/weapon/gun/rifle/standard_assaultrifle name = "\improper AR-12 K&H assault rifle" desc = "The Keckler and Hoch AR-12 assault rifle used to be the TerraGov Marine Corps standard issue rifle before the AR-18 carbine replaced it. It is, however, still used widely despite that. The gun itself is very good at being used in most situations however it suffers in engagements at close quarters and is relatively hard to shoulder than some others. It uses 10x24mm caseless ammunition." - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED + icon_state = "t12" + item_state = "t12" fire_sound = "gun_ar12" dry_fire_sound = 'sound/weapons/guns/fire/m41a_empty.ogg' unload_sound = 'sound/weapons/guns/interact/t18_unload.ogg' @@ -129,16 +126,9 @@ max_shells = 50 //codex force = 20 default_ammo_type = /obj/item/ammo_magazine/rifle/standard_assaultrifle - allowed_ammo_types = list(/obj/item/ammo_magazine/rifle/standard_assaultrifle) - greyscale_config = /datum/greyscale_config/gun/gun64 - colorable_allowed = PRESET_COLORS_ALLOWED - item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand, - slot_back_str = /datum/greyscale_config/worn_gun, - slot_s_store_str = /datum/greyscale_config/worn_gun/suit, - ) + allowed_ammo_types = list(/obj/item/ammo_magazine/rifle/standard_assaultrifle, /obj/item/ammo_magazine/rifle/standard_assaultrifle/ap) attachable_allowed = list( + /obj/item/attachable/stock/t12stock, /obj/item/attachable/reddot, /obj/item/attachable/verticalgrip, /obj/item/attachable/lasersight, @@ -166,12 +156,12 @@ /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, - /obj/item/attachable/shoulder_mount, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_BURSTFIRE, GUN_FIREMODE_AUTOBURST) - attachable_offset = list("muzzle_x" = 46, "muzzle_y" = 17,"rail_x" = 16, "rail_y" = 23, "under_x" = 33, "under_y" = 13, "stock_x" = 0, "stock_y" = 13) + starting_attachment_types = list(/obj/item/attachable/stock/t12stock) + attachable_offset = list("muzzle_x" = 30, "muzzle_y" = 17,"rail_x" = 0, "rail_y" = 23, "under_x" = 17, "under_y" = 13, "stock_x" = 0, "stock_y" = 13) actions_types = list(/datum/action/item_action/aim_mode) aim_fire_delay = 0.1 SECONDS aim_speed_modifier = 2 @@ -181,7 +171,7 @@ extra_delay = 0.05 SECONDS accuracy_mult = 1.1 scatter = -2 - wield_delay = 0.7 SECONDS + wield_delay = 0.9 SECONDS burst_amount = 3 aim_slowdown = 0.4 damage_falloff_mult = 0.5 @@ -189,13 +179,13 @@ placed_overlay_iconstate = "t12" /obj/item/weapon/gun/rifle/standard_assaultrifle/rifleman - starting_attachment_types = list(/obj/item/attachable/reddot, /obj/item/attachable/extended_barrel, /obj/item/weapon/gun/grenade_launcher/underslung) + starting_attachment_types = list(/obj/item/attachable/stock/t12stock, /obj/item/attachable/reddot, /obj/item/attachable/extended_barrel, /obj/item/weapon/gun/grenade_launcher/underslung) /obj/item/weapon/gun/rifle/standard_assaultrifle/engineer - starting_attachment_types = list(/obj/item/attachable/magnetic_harness, /obj/item/attachable/extended_barrel, /obj/item/weapon/gun/flamer/mini_flamer) + starting_attachment_types = list(/obj/item/attachable/stock/t12stock, /obj/item/attachable/magnetic_harness, /obj/item/attachable/extended_barrel, /obj/item/weapon/gun/flamer/mini_flamer) /obj/item/weapon/gun/rifle/standard_assaultrifle/medic - starting_attachment_types = list(/obj/item/attachable/magnetic_harness, /obj/item/attachable/extended_barrel, /obj/item/weapon/gun/grenade_launcher/underslung) + starting_attachment_types = list(/obj/item/attachable/stock/t12stock, /obj/item/attachable/magnetic_harness, /obj/item/attachable/extended_barrel, /obj/item/weapon/gun/grenade_launcher/underslung) //------------------------------------------------------- //DMR-37 DMR @@ -203,16 +193,12 @@ /obj/item/weapon/gun/rifle/standard_dmr name = "\improper DMR-37 SCA designated marksman rifle" desc = "The San Cristo Arms DMR-37 is the TerraGov Marine Corps designated marksman rifle. It is rather well-known for it's very consistent target placement at longer than usual range, it however lacks a burst fire mode or an automatic mode. It is mostly used by people who prefer to do more careful shooting than most. Uses 10x27mm caseless caliber." - icon = 'icons/Marine/gun64.dmi' - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED - greyscale_config = /datum/greyscale_config/gun/gun64/t37 - colorable_allowed = PRESET_COLORS_ALLOWED + icon = 'icons/obj/items/guns/marksman64.dmi' + icon_state = "t37" + item_state = "t37" item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/t37, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/t37, - slot_back_str = /datum/greyscale_config/worn_gun/t37, - slot_s_store_str = /datum/greyscale_config/worn_gun/suit/t37, + slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_64.dmi', ) inhand_x_dimension = 64 inhand_y_dimension = 32 @@ -225,7 +211,7 @@ reload_sound = 'sound/weapons/guns/interact/m41a_reload.ogg' caliber = CALIBER_10x27_CASELESS //codex aim_slowdown = 0.75 - wield_delay = 0.8 SECONDS + wield_delay = 1 SECONDS force = 20 max_shells = 20 //codex default_ammo_type = /obj/item/ammo_magazine/rifle/standard_dmr @@ -257,10 +243,9 @@ /obj/item/weapon/gun/grenade_launcher/underslung, /obj/item/attachable/buildasentry, /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, - /obj/item/attachable/shoulder_mount, ) - flags_gun_features = GUN_AMMO_COUNTER|GUN_CAN_POINTBLANK|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_AMMO_COUNTER|GUN_CAN_POINTBLANK|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) starting_attachment_types = list(/obj/item/attachable/scope/mini/dmr) attachable_offset = list("muzzle_x" = 50, "muzzle_y" = 20,"rail_x" = 21, "rail_y" = 22, "under_x" = 31, "under_y" = 15, "stock_x" = 14, "stock_y" = 10) @@ -277,6 +262,8 @@ /obj/item/weapon/gun/rifle/standard_dmr/marksman starting_attachment_types = list(/obj/item/attachable/scope, /obj/item/attachable/angledgrip, /obj/item/attachable/extended_barrel) +/obj/item/weapon/gun/rifle/standard_dmr/beginner + starting_attachment_types = list(/obj/item/attachable/scope, /obj/item/attachable/verticalgrip, /obj/item/attachable/extended_barrel) //------------------------------------------------------- @@ -287,10 +274,10 @@ desc = "The San Cristo Arms BR-64 is the TerraGov Marine Corps main battle rifle. It is known for its consistent ability to perform well at most ranges, and medium range stopping power with bursts. It is mostly used by people who prefer a bigger round than the average. Uses 10x26.5smm caseless caliber." icon_state = "t64" item_state = "t64" - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/marksman64.dmi' item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_64.dmi', + slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_64.dmi', ) inhand_x_dimension = 64 inhand_y_dimension = 32 @@ -303,7 +290,7 @@ reload_sound = 'sound/weapons/guns/interact/m41a_reload.ogg' caliber = CALIBER_10x265_CASELESS //codex aim_slowdown = 0.55 - wield_delay = 0.7 SECONDS + wield_delay = 0.9 SECONDS force = 20 max_shells = 36 //codex default_ammo_type = /obj/item/ammo_magazine/rifle/standard_br @@ -334,11 +321,10 @@ /obj/item/weapon/gun/grenade_launcher/underslung, /obj/item/attachable/buildasentry, /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, - /obj/item/attachable/shoulder_mount, /obj/item/weapon/gun/energy/lasgun/lasrifle/pocket_beam, //RUTGMC EDIT ) - flags_gun_features = GUN_AMMO_COUNTER|GUN_CAN_POINTBLANK|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_AMMO_COUNTER|GUN_CAN_POINTBLANK|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_BURSTFIRE, GUN_FIREMODE_AUTOBURST) starting_attachment_types = list(/obj/item/attachable/stock/t64stock, /obj/item/weapon/gun/grenade_launcher/underslung/battle_rifle, /obj/item/attachable/scope/mini) attachable_offset = list("muzzle_x" = 44, "muzzle_y" = 19,"rail_x" = 18, "rail_y" = 23, "under_x" = 33, "under_y" = 13, "stock_x" = 11, "stock_y" = 14) @@ -362,7 +348,7 @@ /obj/item/weapon/gun/rifle/m412 name = "\improper PR-412 pulse rifle" desc = "The PR-412 rifle is a Pulse Industries rifle, billed as a pulse rifle due to its use of electronic firing for faster velocity. A rather common sight in most systems. Uses 10x24mm caseless ammunition." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/rifles64.dmi' icon_state = "m412" item_state = "m412" muzzleflash_iconstate = "muzzle_flash_medium" @@ -405,11 +391,10 @@ /obj/item/weapon/gun/grenade_launcher/underslung, /obj/item/attachable/buildasentry, /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, - /obj/item/attachable/shoulder_mount, /obj/item/weapon/gun/energy/lasgun/lasrifle/pocket_beam, //RUTGMC EDIT ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_BURSTFIRE, GUN_FIREMODE_AUTOBURST) starting_attachment_types = list(/obj/item/weapon/gun/grenade_launcher/underslung) attachable_offset = list("muzzle_x" = 44, "muzzle_y" = 19,"rail_x" = 15, "rail_y" = 21, "under_x" = 25, "under_y" = 16, "stock_x" = 18, "stock_y" = 15) @@ -418,7 +403,7 @@ burst_delay = 0.15 SECONDS accuracy_mult = 1.1 scatter = -1 - wield_delay = 0.7 SECONDS + wield_delay = 0.9 SECONDS burst_amount = 3 aim_slowdown = 0.4 damage_mult = 1.05 //Has smaller magazines @@ -457,7 +442,6 @@ /obj/item/weapon/gun/grenade_launcher/underslung, /obj/item/attachable/buildasentry, /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, - /obj/item/attachable/shoulder_mount, ) attachable_offset = list("muzzle_x" = 44, "muzzle_y" = 19,"rail_x" = 15, "rail_y" = 21, "under_x" = 25, "under_y" = 16, "stock_x" = 18, "stock_y" = 15) @@ -479,15 +463,19 @@ /obj/item/weapon/gun/rifle/m41a name = "\improper PR-11 pulse rifle" desc = "A strange failed electronically fired rifle, a rather unknown weapon of its time. It caused a surge in the use of electronic firing in the modern era though. Uses 10x24mm caseless ammunition. Has a irremoveable grenade launcher." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/machineguns64.dmi' icon_state = "m41a" item_state = "m41a" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_1.dmi', + ) fire_sound = "gun_pulse" dry_fire_sound = 'sound/weapons/guns/fire/m41a_empty.ogg' unload_sound = 'sound/weapons/guns/interact/m41a_unload.ogg' reload_sound = 'sound/weapons/guns/interact/m41a_reload.ogg' aim_slowdown = 0.5 - wield_delay = 1.35 SECONDS + wield_delay = 1.55 SECONDS max_shells = 95 //codex default_ammo_type = /obj/item/ammo_magazine/rifle/m41a allowed_ammo_types = list(/obj/item/ammo_magazine/rifle/m41a) @@ -507,10 +495,9 @@ /obj/item/attachable/buildasentry, /obj/item/attachable/stock/m41a, /obj/item/weapon/gun/grenade_launcher/underslung/invisible, - /obj/item/attachable/shoulder_mount, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_BURSTFIRE, GUN_FIREMODE_AUTOBURST) starting_attachment_types = list(/obj/item/attachable/stock/m41a, /obj/item/weapon/gun/grenade_launcher/underslung/invisible) attachable_offset = list("muzzle_x" = 41, "muzzle_y" = 19,"rail_x" = 12, "rail_y" = 24, "under_x" = 24, "under_y" = 13, "stock_x" = 22, "stock_y" = 16) @@ -520,14 +507,27 @@ scatter = 0 fire_delay = 0.2 SECONDS +/obj/item/weapon/gun/rifle/m41a/field_commander + starting_attachment_types = list( + /obj/item/attachable/stock/m41a, + /obj/item/weapon/gun/grenade_launcher/underslung/invisible, + /obj/item/attachable/reddot, + /obj/item/attachable/extended_barrel, + ) +/obj/item/weapon/gun/rifle/m41a/magharness + starting_attachment_types = list( + /obj/item/attachable/stock/m41a, + /obj/item/attachable/magnetic_harness, + /obj/item/weapon/gun/grenade_launcher/underslung/invisible, + ) //------------------------------------------------------- /obj/item/weapon/gun/rifle/mpi_km name = "\improper MPi-KM assault rifle" desc = "A cheap and robust rifle, sometimes better known as an 'AK'. Chambers 7.62x39mm. Despite lacking attachment points beyond its underbarrel, remains a popular product on the black market with its cheap cost and higher than usual caliber rounds." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/rifles64.dmi' icon_state = "ak47" item_state = "ak47" caliber = CALIBER_762X39 //codex @@ -556,7 +556,6 @@ /obj/item/attachable/magnetic_harness, /obj/item/attachable/buildasentry, /obj/item/attachable/stock/mpi_km, - /obj/item/attachable/shoulder_mount, /obj/item/attachable/verticalgrip, /obj/item/weapon/gun/pistol/plasma_pistol, /obj/item/weapon/gun/shotgun/combat/masterkey, @@ -566,7 +565,7 @@ /obj/item/weapon/gun/grenade_launcher/underslung/mpi, //alt sprite, unremovable ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) attachable_offset = list("muzzle_x" = 35, "muzzle_y" = 18,"rail_x" = 6, "rail_y" = 20, "under_x" = 19, "under_y" = 14, "stock_x" = 5, "stock_y" = 12) starting_attachment_types = list(/obj/item/attachable/stock/mpi_km) @@ -575,7 +574,7 @@ burst_amount = 1 fire_delay = 0.25 SECONDS scatter = 0 - wield_delay = 0.7 SECONDS + wield_delay = 0.9 SECONDS placed_overlay_iconstate = "ak47" @@ -608,7 +607,6 @@ /obj/item/attachable/magnetic_harness, /obj/item/attachable/buildasentry, /obj/item/attachable/stock/mpi_km/black, - /obj/item/attachable/shoulder_mount, /obj/item/attachable/verticalgrip, /obj/item/weapon/gun/pistol/plasma_pistol, /obj/item/weapon/gun/shotgun/combat/masterkey, @@ -642,14 +640,18 @@ /obj/item/weapon/gun/rifle/lmg_d name = "\improper lMG-D light machinegun" desc = "A cheap and robust machinegun, sometimes better known as an 'RPD'. Chambers 7.62x39mm. Despite lacking attachment points beyond its underbarrel, remains a popular product on the black market with its cheap cost, high capacity and higher than usual caliber rounds." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/machineguns64.dmi' icon_state = "rpd" item_state = "rpd" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_1.dmi', + ) fire_animation = "rpd_fire" caliber = CALIBER_762X39 //codex muzzleflash_iconstate = "muzzle_flash_medium" max_shells = 100 //codex - wield_delay = 1.2 SECONDS + wield_delay = 1.4 SECONDS aim_slowdown = 0.95 fire_sound = 'sound/weapons/guns/fire/ak47.ogg' unload_sound = 'sound/weapons/guns/interact/ak47_unload.ogg' @@ -666,7 +668,6 @@ /obj/item/attachable/magnetic_harness, /obj/item/attachable/buildasentry, /obj/item/attachable/stock/lmg_d, - /obj/item/attachable/shoulder_mount, /obj/item/attachable/verticalgrip, /obj/item/attachable/foldable/bipod, /obj/item/weapon/gun/pistol/plasma_pistol, @@ -680,7 +681,7 @@ /obj/item/attachable/flashlight/under, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) attachable_offset = list("muzzle_x" = 35, "muzzle_y" = 18,"rail_x" = 6, "rail_y" = 20, "under_x" = 19, "under_y" = 14, "stock_x" = 6, "stock_y" = 14) @@ -704,9 +705,13 @@ /obj/item/weapon/gun/rifle/dpm name = "\improper Degtyaryov 'RP' machine gun" desc = "A cheap and robust machine gun seen commonly in the fringes of the bubble. Fires high caliber rounds to accommodate for its sluggish rate of fire, it is generally found being called 'The Record Player' due to the resemblance. Fires 7.62x39mm AP rounds." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/machineguns64.dmi' icon_state = "dp27" item_state = "dp27" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_1.dmi', + ) max_shells = 47 //codex caliber = CALIBER_762X39 //codex fire_sound = "svd_fire" @@ -722,7 +727,7 @@ /obj/item/attachable/stock/dpm, ) - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 17,"rail_x" = 22, "rail_y" = 17, "under_x" = 32, "under_y" = 14, "stock_x" = 13, "stock_y" = 9) starting_attachment_types = list(/obj/item/attachable/stock/dpm) @@ -736,7 +741,7 @@ accuracy_mult = 1 scatter = 2 recoil = -1 - wield_delay = 0.9 SECONDS + wield_delay = 1.1 SECONDS aim_slowdown = 0.85 movement_acc_penalty_mult = 4 @@ -746,7 +751,7 @@ /obj/item/weapon/gun/rifle/m16 name = "\improper FN M16A4 assault rifle" desc = "A light, versatile assault rifle with a 30 round magazine, chambered to fire the 5.56x45mm NATO cartridge. The 4th generation in the M16 platform, this FN variant has added automatic fire selection and retains relevance among mercenaries and militias thanks to its high customizability. It is incredibly good at rapid burst fire, but must be paced correctly." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/rifles64.dmi' icon_state = "m16a4" item_state = "m16a4" muzzleflash_iconstate = "muzzle_flash_medium" @@ -784,10 +789,9 @@ /obj/item/weapon/gun/grenade_launcher/underslung, /obj/item/attachable/buildasentry, /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, - /obj/item/attachable/shoulder_mount, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_BURSTFIRE) attachable_offset = list("muzzle_x" = 47, "muzzle_y" = 19,"rail_x" = 18, "rail_y" = 24, "under_x" = 29, "under_y" = 15, "stock_x" = 19, "stock_y" = 13) actions_types = list(/datum/action/item_action/aim_mode) @@ -799,7 +803,7 @@ extra_delay = -0.05 SECONDS burst_delay = 0.15 SECONDS accuracy_mult = 1.1 - wield_delay = 0.5 SECONDS + wield_delay = 0.7 SECONDS damage_mult = 1.2 /obj/item/weapon/gun/rifle/m16/freelancer @@ -817,7 +821,7 @@ /obj/item/weapon/gun/rifle/famas name = "\improper FAMAS assault rifle" desc = "A light, versatile fast firing assault rifle with a 24 round magazine and short range scope, chambered to fire the 5.56x45mm NATO cartridge within a short amount of time." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/rifles64.dmi' icon_state = "famas" item_state = "famas" muzzleflash_iconstate = "muzzle_flash_medium" @@ -852,14 +856,14 @@ /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_BURSTFIRE, GUN_FIREMODE_AUTOBURST) attachable_offset = list("muzzle_x" = 38, "muzzle_y" = 17,"rail_x" = 22, "rail_y" = 24, "under_x" = 28, "under_y" = 12, "stock_x" = 19, "stock_y" = 13) fire_delay = 0.15 SECONDS burst_delay = 0.15 SECONDS accuracy_mult = 1.15 - wield_delay = 0.5 SECONDS + wield_delay = 0.7 SECONDS damage_mult = 1.2 scatter = 1 movement_acc_penalty_mult = 4 @@ -875,13 +879,11 @@ name = "\improper MG-42 Kauser light machine gun" desc = "The Kauser MG-42 is the TGMC's current standard non-IFF-capable LMG. It's known for its ability to lay down heavy fire support very well. It is generally used when someone wants to hold a position or provide fire support. It uses 10x24mm ammunition." - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED + icon_state = "t42" + item_state = "t42" item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/t42, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/t42, - slot_back_str = /datum/greyscale_config/worn_gun/t42, - slot_s_store_str = /datum/greyscale_config/worn_gun/suit/t42, + slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_64.dmi', ) inhand_x_dimension = 64 inhand_y_dimension = 32 @@ -890,16 +892,15 @@ max_shells = 120 //codex force = 30 aim_slowdown = 0.8 - wield_delay = 1 SECONDS + wield_delay = 1.2 SECONDS fire_sound = 'sound/weapons/guns/fire/tgmc/kinetic/gun_mg42.ogg' dry_fire_sound = 'sound/weapons/guns/fire/m41a_empty.ogg' unload_sound = 'sound/weapons/guns/interact/T42_unload.ogg' reload_sound = 'sound/weapons/guns/interact/T42_reload.ogg' default_ammo_type = /obj/item/ammo_magazine/standard_lmg allowed_ammo_types = list(/obj/item/ammo_magazine/standard_lmg) - greyscale_config = /datum/greyscale_config/gun/gun64/t42 - colorable_allowed = PRESET_COLORS_ALLOWED attachable_allowed = list( + /obj/item/attachable/stock/t42stock, /obj/item/attachable/reddot, /obj/item/attachable/verticalgrip, /obj/item/attachable/flashlight, @@ -927,9 +928,10 @@ /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, ) - flags_gun_features = GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_AUTOBURST) gun_skill_category = SKILL_HEAVY_WEAPONS + starting_attachment_types = list(/obj/item/attachable/stock/t42stock) attachable_offset = list("muzzle_x" = 30, "muzzle_y" = 17,"rail_x" = 4, "rail_y" = 20, "under_x" = 16, "under_y" = 14, "stock_x" = 0, "stock_y" = 13) actions_types = list(/datum/action/item_action/aim_mode) aim_fire_delay = 0.1 SECONDS @@ -944,23 +946,25 @@ scatter_unwielded = 80 movement_acc_penalty_mult = 6 +/obj/item/weapon/gun/rifle/standard_lmg/autorifleman + starting_attachment_types = list(/obj/item/attachable/verticalgrip, /obj/item/attachable/reddot) + +/obj/item/weapon/gun/rifle/standard_lmg/beginner + starting_attachment_types = list(/obj/item/attachable/extended_barrel, /obj/item/attachable/reddot, /obj/item/attachable/verticalgrip) + //------------------------------------------------------- //MG-60 General Purpose Machine Gun /obj/item/weapon/gun/rifle/standard_gpmg name = "\improper MG-60 Raummetall general purpose machine gun" desc = "The Raummetall MG-60 general purpose machinegun is the TGMC's current standard GPMG. Though usually seen mounted on vehicles, it is sometimes used by infantry to hold chokepoints or suppress enemies, or in rare cases for marching fire. It uses 10x26mm boxes." - icon = 'icons/Marine/gun64.dmi' - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED - fire_animation = "loaded_fire" - greyscale_config = /datum/greyscale_config/gun/gun64/t60 - colorable_allowed = PRESET_COLORS_ALLOWED + icon = 'icons/obj/items/guns/machineguns64.dmi' + icon_state = "t60" + item_state = "t60" + fire_animation = "t60_fire" item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/t60, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/t60, - slot_back_str = /datum/greyscale_config/worn_gun/t60, - slot_s_store_str = /datum/greyscale_config/worn_gun/suit/t60, + slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_64.dmi', ) inhand_x_dimension = 64 inhand_y_dimension = 32 @@ -969,7 +973,7 @@ max_shells = 200 //codex force = 35 aim_slowdown = 1.2 - wield_delay = 1.5 SECONDS + wield_delay = 1.7 SECONDS fire_sound = 'sound/weapons/guns/fire/tgmc/kinetic/gun_mg60.ogg' fire_rattle = 'sound/weapons/guns/fire/tgmc/kinetic/gun_mg60_low.ogg' dry_fire_sound = 'sound/weapons/guns/fire/m41a_empty.ogg' @@ -992,10 +996,9 @@ /obj/item/attachable/magnetic_harness, /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, ) - flags_gun_features = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) starting_attachment_types = list(/obj/item/attachable/stock/t60stock) gun_skill_category = SKILL_HEAVY_WEAPONS @@ -1015,25 +1018,30 @@ placed_overlay_iconstate = "lmg" -/obj/item/weapon/gun/rifle/standard_lmg/autorifleman - starting_attachment_types = list(/obj/item/attachable/verticalgrip, /obj/item/attachable/reddot) - /obj/item/weapon/gun/rifle/standard_gpmg/machinegunner starting_attachment_types = list(/obj/item/attachable/stock/t60stock, /obj/item/attachable/foldable/bipod, /obj/item/attachable/magnetic_harness, /obj/item/attachable/extended_barrel) +/obj/item/weapon/gun/rifle/standard_gpmg/beginner + starting_attachment_types = list(/obj/item/attachable/stock/t60stock, /obj/item/attachable/foldable/bipod, /obj/item/attachable/magnetic_harness, /obj/item/attachable/heavy_barrel) + //------------------------------------------------------- //M41AE2 Heavy Pulse Rifle /obj/item/weapon/gun/rifle/m412l1_hpr name = "\improper PR-412L1 heavy pulse rifle" desc = "A large weapon capable of laying down supressing fire, based on the PR-412 pulse rifle platform. Effective in burst fire. Uses 10x24mm caseless ammunition." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/machineguns64.dmi' icon_state = "m412l1" item_state = "m412l1" + fire_animation = "m412l1_fire" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_1.dmi', + ) caliber = CALIBER_10X24_CASELESS //codex max_shells = 200 //codex aim_slowdown = 0.8 - wield_delay = 2 SECONDS + wield_delay = 2.2 SECONDS fire_sound = 'sound/weapons/guns/fire/hmg.ogg' dry_fire_sound = 'sound/weapons/guns/fire/m41a_empty.ogg' unload_sound = 'sound/weapons/guns/interact/m41a_unload.ogg' @@ -1059,10 +1067,9 @@ /obj/item/weapon/gun/grenade_launcher/underslung, /obj/item/attachable/buildasentry, /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, - /obj/item/attachable/shoulder_mount, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_BURSTFIRE, GUN_FIREMODE_AUTOBURST) gun_skill_category = SKILL_HEAVY_WEAPONS attachable_offset = list("muzzle_x" = 42, "muzzle_y" = 19,"rail_x" = 17, "rail_y" = 21, "under_x" = 31, "under_y" = 15, "stock_x" = 18, "stock_y" = 15) @@ -1094,7 +1101,7 @@ /obj/item/weapon/gun/rifle/type71 name = "\improper Type 71 pulse rifle" desc = "The primary rifle of the USL pirates, the Type 71 is a reliable rifle chambered in 7.62x39mm, firing in three round bursts to conserve ammunition. A newer model for surpression roles to comply with overmatch doctrines is in progress and only issued to a limited number of privates in the USL." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/rifles64.dmi' icon_state = "type71" item_state = "type71" muzzleflash_iconstate = "muzzle_flash_medium" @@ -1107,7 +1114,7 @@ default_ammo_type = /obj/item/ammo_magazine/rifle/type71 allowed_ammo_types = list(/obj/item/ammo_magazine/rifle/type71) aim_slowdown = 0.6 - wield_delay = 0.7 SECONDS + wield_delay = 0.9 SECONDS attachable_allowed = list( /obj/item/attachable/reddot, /obj/item/attachable/verticalgrip, @@ -1138,7 +1145,7 @@ /obj/item/attachable/scope/unremovable, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES attachable_offset = list("muzzle_x" = 41, "muzzle_y" = 19,"rail_x" = 18, "rail_y" = 24, "under_x" = 34, "under_y" = 16, "stock_x" = 19, "stock_y" = 13) gun_firemode_list = list(GUN_FIREMODE_BURSTFIRE, GUN_FIREMODE_AUTOBURST) actions_types = list(/datum/action/item_action/aim_mode) @@ -1186,7 +1193,7 @@ desc = "An much rarer variant of the standard Type 71, this version contains an integrated supressor, a scope, and lots of fine-tuning. Many parts have been replaced, filed down, and improved upon. As a result, this variant is rarely seen outside of elite units." icon_state = "type71" item_state = "type71" - wield_delay = 0 //Ends up being .5 seconds due to scope + wield_delay = 0.2 SECONDS attachable_offset = list("muzzle_x" = 30, "muzzle_y" = 19,"rail_x" = 10, "rail_y" = 22, "under_x" = 21, "under_y" = 18, "stock_x" = 21, "stock_y" = 18) starting_attachment_types = list(/obj/item/attachable/suppressor/unremovable/invisible, /obj/item/attachable/scope/unremovable) @@ -1205,22 +1212,19 @@ /obj/item/weapon/gun/rifle/standard_autoshotgun name = "\improper Zauer SH-15 automatic shotgun" desc = "The Zauer SH-15 Automatic Assault Shotgun, this is a Terran Armories variant. Another iteration of the ZX series of firearms though it has been since regulated as part of the TGMC arsenal, hence the SH designation. It took over the various shotgun models as the semi-automatic shotgun provided to the TGMC. It is rifled, and loads primarily longer ranged munitions, being incompatible with buckshot shells. Takes 12-round 16 gauge magazines." - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED + icon_state = "tx15" + item_state = "tx15" + icon = 'icons/obj/items/guns/shotguns.dmi' + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/shotguns_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/shotguns_right_1.dmi', + ) fire_sound = 'sound/weapons/guns/fire/tgmc/kinetic/gun_sh15.ogg' dry_fire_sound = 'sound/weapons/guns/fire/shotgun_empty.ogg' caliber = CALIBER_16G //codex max_shells = 12 //codex force = 20 default_ammo_type = /obj/item/ammo_magazine/rifle/tx15_slug - greyscale_config = /datum/greyscale_config/gun/tx15 - colorable_allowed = PRESET_COLORS_ALLOWED - item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/tx15, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/tx15, - slot_back_str = /datum/greyscale_config/worn_gun/tx15, - slot_s_store_str = /datum/greyscale_config/worn_gun/suit/tx15, - ) allowed_ammo_types = list( /obj/item/ammo_magazine/rifle/tx15_slug, /obj/item/ammo_magazine/rifle/tx15_flechette, @@ -1248,7 +1252,7 @@ /obj/item/weapon/gun/energy/lasgun/lasrifle/pocket_beam, //RUTGMC EDIT ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES //Its a shotgun type weapon effectively, most shotgun type weapons shouldn't be able to point blank 1 handed. + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES //Its a shotgun type weapon effectively, most shotgun type weapons shouldn't be able to point blank 1 handed. gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) starting_attachment_types = list(/obj/item/attachable/stock/tx15) attachable_offset = list("muzzle_x" = 30, "muzzle_y" = 16,"rail_x" = 12, "rail_y" = 17, "under_x" = 20, "under_y" = 13, "stock_x" = 26, "stock_y" = 13) @@ -1275,30 +1279,26 @@ /obj/item/weapon/gun/rifle/standard_smartmachinegun name = "\improper SG-29 Raummetall-KT smart machine gun" desc = "The Raummetall-KT SG-29 is the TGMC's current standard IFF-capable medium machine gun. It's known for its ability to lay down heavy fire support very well. It is generally used when someone wants to hold a position or provide fire support. Requires special training and it cannot turn off IFF. It uses 10x26mm ammunition." - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED + icon_state = "sg29" + item_state = "sg29" + icon = 'icons/obj/items/guns/machineguns.dmi' + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_1.dmi', + ) caliber = CALIBER_10x26_CASELESS //codex max_shells = 300 //codex force = 30 aim_slowdown = 0.95 - wield_delay = 1.3 SECONDS + wield_delay = 1.5 SECONDS fire_sound = "gun_smartgun" dry_fire_sound = 'sound/weapons/guns/fire/m41a_empty.ogg' unload_sound = 'sound/weapons/guns/interact/T42_unload.ogg' reload_sound = 'sound/weapons/guns/interact/T42_reload.ogg' - greyscale_config = /datum/greyscale_config/gun/sg29 - colorable_allowed = PRESET_COLORS_ALLOWED - item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/sg29, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/sg29, - slot_back_str = /datum/greyscale_config/worn_gun/sg29, - slot_s_store_str = /datum/greyscale_config/worn_gun/suit/sg29, - ) default_ammo_type = /obj/item/ammo_magazine/standard_smartmachinegun allowed_ammo_types = list(/obj/item/ammo_magazine/standard_smartmachinegun) attachable_allowed = list( /obj/item/attachable/reddot, - /obj/item/attachable/verticalgrip, /obj/item/attachable/flashlight, /obj/item/attachable/lasersight, /obj/item/attachable/foldable/bipod, @@ -1309,10 +1309,9 @@ /obj/item/attachable/buildasentry, /obj/item/attachable/stock/sgstock, /obj/item/attachable/sgbarrel, - /obj/item/attachable/shoulder_mount, ) - flags_gun_features = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_IFF|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_IFF|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) starting_attachment_types = list(/obj/item/attachable/stock/sgstock, /obj/item/attachable/sgbarrel) gun_skill_category = SKILL_SMARTGUN //Uses SG skill for the penalties. @@ -1334,7 +1333,7 @@ starting_attachment_types = list(/obj/item/attachable/stock/sgstock, /obj/item/attachable/sgbarrel, /obj/item/attachable/magnetic_harness, /obj/item/attachable/lasersight) /obj/item/weapon/gun/rifle/standard_smartmachinegun/patrol - starting_attachment_types = list(/obj/item/attachable/stock/sgstock, /obj/item/attachable/sgbarrel, /obj/item/attachable/motiondetector, /obj/item/attachable/verticalgrip) + starting_attachment_types = list(/obj/item/attachable/stock/sgstock, /obj/item/attachable/sgbarrel, /obj/item/attachable/motiondetector, /obj/item/attachable/lasersight) //------------------------------------------------------- //SG Target Rifle, has underbarreled spotting rifle that applies effects. @@ -1342,13 +1341,17 @@ /obj/item/weapon/gun/rifle/standard_smarttargetrifle name = "\improper SG-62 Kauser-KT smart target rifle" desc = "The Kauser-KT SG-62 is a IFF-capable rifle used by the TerraGov Marine Corps, coupled with a spotting rifle that is also IFF capable of applying various bullets with specialized ordnance, this is a gun with many answers to many situations... if you have the right ammo loaded. Requires special training and it cannot turn off IFF. It uses high velocity 10x27mm for the rifle and 12x66mm ammunition for the underslung rifle." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/marksman64.dmi' icon_state = "sg62" item_state = "sg62" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_1.dmi', + ) caliber = CALIBER_10x27_CASELESS //codex max_shells = 40 //codex aim_slowdown = 0.85 - wield_delay = 0.65 SECONDS + wield_delay = 0.85 SECONDS fire_sound = 'sound/weapons/guns/fire/t62.ogg' dry_fire_sound = 'sound/weapons/guns/fire/m41a_empty.ogg' unload_sound = 'sound/weapons/guns/interact/T42_unload.ogg' @@ -1365,10 +1368,9 @@ /obj/item/attachable/stock/strstock, /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, ) - flags_gun_features = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_IFF|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_IFF|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) gun_skill_category = SKILL_SMARTGUN //Uses SG skill for the penalties. attachable_offset = list("muzzle_x" = 12, "muzzle_y" = 22, "rail_x" = 15, "rail_y" = 22, "under_x" = 28, "under_y" = 16, "stock_x" = 12, "stock_y" = 14) @@ -1391,7 +1393,7 @@ name = "SG-153 spotting rifle" desc = "An underslung spotting rifle, generally found ontop of another gun." icon_state = "sg153" - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/marksman64.dmi' fire_sound = 'sound/weapons/guns/fire/spottingrifle.ogg' caliber = CALIBER_12x7 slot = ATTACHMENT_SLOT_UNDER @@ -1410,8 +1412,8 @@ attachable_allowed = list() actions_types = list() gun_firemode_list = list(GUN_FIREMODE_SEMIAUTO) - flags_gun_features = GUN_IS_ATTACHMENT|GUN_WIELDED_FIRING_ONLY|GUN_ATTACHMENT_FIRE_ONLY|GUN_AMMO_COUNTER|GUN_IFF|GUN_SMOKE_PARTICLES - flags_attach_features = NONE + gun_features_flags = GUN_IS_ATTACHMENT|GUN_WIELDED_FIRING_ONLY|GUN_ATTACHMENT_FIRE_ONLY|GUN_AMMO_COUNTER|GUN_IFF|GUN_SMOKE_PARTICLES + attach_features_flags = NONE fire_delay = 1 SECONDS accuracy_mult = 1.25 pixel_shift_x = 18 @@ -1423,21 +1425,26 @@ /obj/item/weapon/gun/rifle/sectoid_rifle name = "alien rifle" desc = "An unusual gun of alien origin. It is lacking a trigger or any obvious way to fire it." + icon = 'icons/obj/items/guns/energy.dmi' icon_state = "alien_rifle" item_state = "alien_rifle" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/energy_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/energy_right_1.dmi', + ) fire_sound = 'sound/weapons/guns/fire/alienplasma.ogg' fire_rattle = 'sound/weapons/guns/fire/alienplasma.ogg' dry_fire_sound = 'sound/weapons/guns/fire/vp70_empty.ogg' unload_sound = 'sound/weapons/guns/interact/m41a_unload.ogg' reload_sound = 'sound/weapons/guns/interact/m4ra_reload.ogg' max_shells = 20//codex stuff - ammo_datum_type = /datum/ammo/energy/plasma + ammo_datum_type = /datum/ammo/energy/sectoid_plasma muzzleflash_iconstate = "muzzle_flash_pulse" default_ammo_type = /obj/item/ammo_magazine/rifle/sectoid_rifle allowed_ammo_types = list(/obj/item/ammo_magazine/rifle/sectoid_rifle) - wield_delay = 0.4 SECONDS + wield_delay = 0.6 SECONDS - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_ENERGY|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_ENERGY|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_SEMIAUTO, GUN_FIREMODE_BURSTFIRE, GUN_FIREMODE_AUTOBURST) attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 18,"rail_x" = 12, "rail_y" = 23, "under_x" = 23, "under_y" = 15, "stock_x" = 22, "stock_y" = 12) @@ -1472,16 +1479,12 @@ /obj/item/weapon/gun/rifle/chambered name = "\improper SR-127 Bauer bolt action rifle" desc = "The Bauer SR-127 is the standard issue bolt action rifle used by the TGMC. Known for its long range accuracy and use by marksmen despite its age and lack of IFF, though careful aim allows fire support from behind. It has an irremoveable scope. Uses 8.6×70mm box magazines." - icon = 'icons/Marine/gun64.dmi' - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED - greyscale_config = /datum/greyscale_config/gun/gun64/shotgun/tl127 - colorable_allowed = PRESET_COLORS_ALLOWED + icon = 'icons/obj/items/guns/marksman64.dmi' + icon_state = "tl127" + item_state = "tl127" item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/tl127, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/tl127, - slot_back_str = /datum/greyscale_config/worn_gun/tl127, - slot_s_store_str = /datum/greyscale_config/worn_gun/suit/tl127, + slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_64.dmi', ) inhand_x_dimension = 64 @@ -1512,10 +1515,10 @@ /obj/item/attachable/foldable/bipod, ) - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES reciever_flags = AMMO_RECIEVER_REQUIRES_UNIQUE_ACTION|AMMO_RECIEVER_MAGAZINES|AMMO_RECIEVER_UNIQUE_ACTION_LOCKS|AMMO_RECIEVER_AUTO_EJECT - cock_animation = GUN_ICONSTATE_PUMP + cock_animation = "tl127_cock" cocked_message = "You rack the bolt!" gun_firemode_list = list(GUN_FIREMODE_SEMIAUTO) @@ -1537,7 +1540,7 @@ recoil = 0 recoil_unwielded = 4 aim_slowdown = 1 - wield_delay = 1.3 SECONDS + wield_delay = 1.5 SECONDS cock_delay = 0.7 SECONDS movement_acc_penalty_mult = 6 @@ -1550,8 +1553,8 @@ /obj/item/weapon/gun/rifle/standard_autosniper name = "\improper SR-81 Kauser-KT automatic sniper rifle" desc = "The Kauser-KT SR-81 is the TerraGov Marine Corps's automatic sniper rifle usually married to it's iconic NVG/KTLD scope combo. It is notable for its high rate of fire for its class, and has decent performance in any range. Uses 8.6x70mm caseless with specialized pressures for IFF fire." - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED + icon_state = "t81" + item_state = "t81" fire_sound = 'sound/weapons/guns/fire/sniper.ogg' dry_fire_sound = 'sound/weapons/guns/fire/sniper_empty.ogg' unload_sound = 'sound/weapons/guns/interact/m41a_unload.ogg' @@ -1560,15 +1563,8 @@ max_shells = 20 //codex default_ammo_type = /obj/item/ammo_magazine/rifle/autosniper allowed_ammo_types = list(/obj/item/ammo_magazine/rifle/autosniper) - greyscale_config = /datum/greyscale_config/gun/gun64/t81 - colorable_allowed = PRESET_COLORS_ALLOWED - item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/t81, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/t81, - slot_back_str = /datum/greyscale_config/worn_gun/t81, - slot_s_store_str = /datum/greyscale_config/worn_gun/suit/t81, - ) attachable_allowed = list( + /obj/item/attachable/autosniperbarrel, /obj/item/attachable/scope/nightvision, /obj/item/attachable/extended_barrel, /obj/item/attachable/suppressor, @@ -1578,10 +1574,11 @@ /obj/item/attachable/compensator, ) - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_IFF|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_IFF|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) attachable_offset = list("muzzle_x" = 48, "muzzle_y" = 18,"rail_x" = 23, "rail_y" = 23, "under_x" = 38, "under_y" = 16, "stock_x" = 9, "stock_y" = 12) starting_attachment_types = list( + /obj/item/attachable/autosniperbarrel, /obj/item/attachable/scope/nightvision, ) @@ -1594,7 +1591,7 @@ recoil = 0 recoil_unwielded = 4 aim_slowdown = 1 - wield_delay = 1.3 SECONDS + wield_delay = 1.5 SECONDS movement_acc_penalty_mult = 6 //------------------------------------------------------- @@ -1603,25 +1600,17 @@ /obj/item/weapon/gun/rifle/tx11 name = "\improper AR-11 K&H combat rifle" desc = "The Keckler and Hoch AR-11 is the former standard issue rifle of the TGMC. Most of them have been mothballed into storage long ago, but some still pop up in marine or mercenary hands. It is known for its large magazine size and great burst fire, but rather awkward to use, especially during combat. It uses 4.92×34mm caseless HV ammunition." - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED + icon_state = "tx11" + item_state = "tx11" caliber = CALIBER_492X34_CASELESS //codex max_shells = 70 //codex - wield_delay = 0.65 SECONDS + wield_delay = 0.85 SECONDS fire_sound = 'sound/weapons/guns/fire/tgmc/kinetic/gun_ar11.ogg' dry_fire_sound = 'sound/weapons/guns/fire/m41a_empty.ogg' unload_sound = 'sound/weapons/guns/interact/T42_unload.ogg' reload_sound = 'sound/weapons/guns/interact/T42_reload.ogg' default_ammo_type = /obj/item/ammo_magazine/rifle/tx11 allowed_ammo_types = list(/obj/item/ammo_magazine/rifle/tx11) - greyscale_config = /datum/greyscale_config/gun/tx11 - colorable_allowed = PRESET_COLORS_ALLOWED - item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/tx11, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/tx11, - slot_back_str = /datum/greyscale_config/worn_gun/tx11, - slot_s_store_str = /datum/greyscale_config/worn_gun/suit/tx11, - ) attachable_allowed = list( /obj/item/attachable/reddot, /obj/item/attachable/flashlight, @@ -1637,7 +1626,7 @@ /obj/item/attachable/scope/marine, ) - flags_gun_features = GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_BURSTFIRE, GUN_FIREMODE_AUTOBURST) starting_attachment_types = list(/obj/item/attachable/stock/tx11, /obj/item/attachable/scope/mini/tx11) attachable_offset = list("muzzle_x" = 31, "muzzle_y" = 17,"rail_x" = 6, "rail_y" = 20, "under_x" = 20, "under_y" = 12, "stock_x" = 17, "stock_y" = 14) @@ -1673,14 +1662,12 @@ /obj/item/weapon/gun/rifle/standard_skirmishrifle name = "\improper AR-21 Kauser skirmish rifle" desc = "The Kauser AR-21 is a versatile rifle is developed to bridge a gap between higher caliber weaponry and a normal rifle. It fires a strong 10x25mm round, which has decent stopping power. It however suffers in magazine size and movement capablity compared to smaller peers." - icon = 'icons/Marine/gun64.dmi' - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED + icon = 'icons/obj/items/guns/rifles64.dmi' + icon_state = "t21" + item_state = "t21" item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/t21, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/t21, - slot_back_str = /datum/greyscale_config/worn_gun/t21, - slot_s_store_str = /datum/greyscale_config/worn_gun/suit/t21, + slot_l_hand_str = 'icons/mob/inhands/guns/rifles_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/rifles_right_64.dmi', ) inhand_x_dimension = 64 @@ -1690,12 +1677,10 @@ unload_sound = 'sound/weapons/guns/interact/t21_unload.ogg' reload_sound = 'sound/weapons/guns/interact/t21_reload.ogg' caliber = CALIBER_10X25_CASELESS //codex - max_shells = 30 //codex + max_shells = 40 //codex force = 20 default_ammo_type = /obj/item/ammo_magazine/rifle/standard_skirmishrifle allowed_ammo_types = list(/obj/item/ammo_magazine/rifle/standard_skirmishrifle) - greyscale_config = /datum/greyscale_config/gun/gun64/t21 - colorable_allowed = PRESET_COLORS_ALLOWED attachable_allowed = list( /obj/item/attachable/reddot, /obj/item/attachable/verticalgrip, @@ -1725,7 +1710,7 @@ /obj/item/weapon/gun/energy/lasgun/lasrifle/pocket_beam, //RUTGMC EDIT ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) attachable_offset = list("muzzle_x" = 46, "muzzle_y" = 16,"rail_x" = 18, "rail_y" = 19, "under_x" = 34, "under_y" = 13, "stock_x" = 0, "stock_y" = 13) actions_types = list(/datum/action/item_action/aim_mode) @@ -1737,7 +1722,7 @@ burst_delay = 0.15 SECONDS accuracy_mult = 1.2 scatter = -2 - wield_delay = 0.6 SECONDS + wield_delay = 0.8 SECONDS aim_slowdown = 0.5 damage_falloff_mult = 0.5 @@ -1754,8 +1739,13 @@ /obj/item/weapon/gun/rifle/alf_machinecarbine name = "\improper ALF-51B Kauser machinecarbine" desc = "The Kauser ALF-51B is an unoffical modification of a ALF-51, or better known as the AR-18 carbine, modified to SMG length of barrel, rechambered for a stronger round, and belt based. Truly the peak of CQC. Useless past that. Aiming is impossible. Uses 10x25mm caseless ammunition." + icon = 'icons/obj/items/guns/machineguns.dmi' icon_state = "alf51b" item_state = "alf51b" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_1.dmi', + ) fire_animation = "alf51b_fire" fire_sound = 'sound/weapons/guns/fire/t18b.ogg' dry_fire_sound = 'sound/weapons/guns/fire/m41a_empty.ogg' @@ -1778,7 +1768,7 @@ /obj/item/attachable/bayonetknife/som, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_BURSTFIRE, GUN_FIREMODE_AUTOBURST) attachable_offset = list("muzzle_x" = 31, "muzzle_y" = 16,"rail_x" = 10, "rail_y" = 19, "under_x" = 21, "under_y" = 13, "stock_x" = 0, "stock_y" = 13) @@ -1788,7 +1778,7 @@ scatter = 4 burst_amount = 4 aim_slowdown = 0.3 - wield_delay = 0.4 SECONDS + wield_delay = 0.6 SECONDS damage_falloff_mult = 3 movement_acc_penalty_mult = 4 @@ -1812,7 +1802,7 @@ /obj/item/weapon/gun/rifle/mkh name = "\improper MKH-98 storm rifle" desc = "A certified classic, this reproduction design was hailed as the first successful assault rifle concept, generally termed a 'storm rifle'. Has a higher than usual firerate for its class, but suffers in capacity. This version of it chambers 7.62x39mm." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/rifles64.dmi' icon_state = "mkh98" item_state = "mkh98" caliber = CALIBER_762X39 //codex @@ -1838,7 +1828,7 @@ /obj/item/attachable/bayonetknife/som, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) attachable_offset = list("muzzle_x" = 51, "muzzle_y" = 18,"rail_x" = 24, "rail_y" = 22, "under_x" = 36, "under_y" = 16, "stock_x" = 0, "stock_y" = 12) @@ -1846,7 +1836,7 @@ burst_amount = 1 fire_delay = 0.2 SECONDS scatter = 1 - wield_delay = 0.5 SECONDS + wield_delay = 0.7 SECONDS movement_acc_penalty_mult = 4 //------------------------------------------------------- @@ -1854,9 +1844,13 @@ /obj/item/weapon/gun/rifle/tx54 name = "\improper GL-54 grenade launcher" desc = "A magazine fed, semi-automatic grenade launcher designed to shoot airbursting smart grenades. Requires a T49 scope for precision aiming." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/special64.dmi' icon_state = "tx54" item_state = "tx54" ///todo + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/special_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/special_right_1.dmi', + ) max_shells = 5 //codex max_chamber_items = 1 fire_delay = 1.2 SECONDS @@ -1876,10 +1870,9 @@ /obj/item/attachable/motiondetector, /obj/item/attachable/flashlight/under, /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, ) - flags_gun_features = GUN_AMMO_COUNTER|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_AMMO_COUNTER|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES starting_attachment_types = list(/obj/item/attachable/scope/optical) default_ammo_type = null allowed_ammo_types = list( @@ -1889,18 +1882,23 @@ /obj/item/ammo_magazine/rifle/tx54/smoke, /obj/item/ammo_magazine/rifle/tx54/smoke/dense, /obj/item/ammo_magazine/rifle/tx54/smoke/tangle, + /obj/item/ammo_magazine/rifle/tx54/smoke/acid, /obj/item/ammo_magazine/rifle/tx54/razor, ) gun_firemode_list = list(GUN_FIREMODE_SEMIAUTO) attachable_offset = list("muzzle_x" = 31, "muzzle_y" = 17,"rail_x" = 12, "rail_y" = 20, "under_x" = 28, "under_y" = 13, "stock_x" = -1, "stock_y" = 17) aim_slowdown = 0.8 - wield_delay = 0.8 SECONDS + wield_delay = 1 SECONDS burst_amount = 1 accuracy_mult = 1.15 scatter = -2 aim_fire_delay = 0.2 SECONDS aim_speed_modifier = 2 +/obj/item/weapon/gun/rifle/tx54/motion_sensor + starting_attachment_types = list(/obj/item/attachable/motiondetector) + default_ammo_type = /obj/item/ammo_magazine/rifle/tx54 + //------------------------------------------------------- // AR-55 built in grenade launcher @@ -1911,8 +1909,8 @@ icon_state = "tx55gl" placed_overlay_iconstate = "tx55gl" attachable_allowed = list() - flags_gun_features = GUN_AMMO_COUNTER|GUN_IS_ATTACHMENT|GUN_ATTACHMENT_FIRE_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES - flags_attach_features = NONE + gun_features_flags = GUN_AMMO_COUNTER|GUN_IS_ATTACHMENT|GUN_ATTACHMENT_FIRE_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + attach_features_flags = NONE slot = ATTACHMENT_SLOT_STOCK default_ammo_type = /obj/item/ammo_magazine/rifle/tx54 attach_delay = 3 SECONDS @@ -1934,7 +1932,7 @@ reload_sound = 'sound/weapons/guns/interact/t18_reload.ogg' caliber = CALIBER_10X24_CASELESS //codex max_shells = 36 //codex - wield_delay = 1 SECONDS + wield_delay = 1.2 SECONDS default_ammo_type = /obj/item/ammo_magazine/rifle/standard_carbine allowed_ammo_types = list(/obj/item/ammo_magazine/rifle/standard_carbine) attachable_allowed = list( @@ -1961,7 +1959,7 @@ /obj/item/attachable/motiondetector, ) - flags_gun_features = GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_BURSTFIRE, GUN_FIREMODE_AUTOBURST) starting_attachment_types = list( /obj/item/weapon/gun/rifle/tx54/mini, @@ -2003,16 +2001,15 @@ /obj/item/weapon/gun/rifle/garand name = "\improper CAU C1 Garand self loading rifle" desc = "The Carlford-1 is a remastered classic made by Carlford Armories, made to fit in the modern day. Most of the noticeable differences are minor rail modifications. Other than that, it is a faithful recreation with the trademark ping sound and all. Uses .30-06 enbloc clips." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/marksman64.dmi' icon_state = "garand" item_state = "garand" - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_64.dmi', - ) - inhand_x_dimension = 64 inhand_y_dimension = 32 + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_64.dmi', + ) fire_sound = 'sound/weapons/guns/fire/garand.ogg' dry_fire_sound = 'sound/weapons/guns/fire/sniper_empty.ogg' unload_sound = 'sound/weapons/guns/interact/garand_ping.ogg' @@ -2037,7 +2034,7 @@ /obj/item/attachable/foldable/bipod, ) - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES reciever_flags = AMMO_RECIEVER_MAGAZINES|AMMO_RECIEVER_AUTO_EJECT|AMMO_RECIEVER_CYCLE_ONLY_BEFORE_FIRE gun_firemode_list = list(GUN_FIREMODE_SEMIAUTO) @@ -2058,7 +2055,7 @@ recoil = 0 recoil_unwielded = 4 aim_slowdown = 0.75 - wield_delay = 1 SECONDS + wield_delay = 1.2 SECONDS movement_acc_penalty_mult = 6 //------------------------------------------------------- @@ -2068,7 +2065,7 @@ name = "\improper V-31 assault rifle" desc = "The V-31 was the primary rifle of the Sons of Mars until the introduction of more advanced energy weapons. Nevertheless, the V-31 continues to see common use due to its comparative ease of production and maintenance, and due to the inbuilt low velocity railgun designed for so called 'micro' grenades. Has good handling due to its compact bullpup design, and is generally effective at all ranges. Uses 10x25mm caseless ammunition." icon_state = "v31" - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/rifles64.dmi' item_state = "v31" fire_sound = 'sound/weapons/guns/fire/som_rifle.ogg' dry_fire_sound = 'sound/weapons/guns/fire/m41a_empty.ogg' @@ -2101,7 +2098,7 @@ /obj/item/attachable/motiondetector, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_BURSTFIRE, GUN_FIREMODE_AUTOBURST) starting_attachment_types = list( /obj/item/weapon/gun/shotgun/micro_grenade, @@ -2109,7 +2106,7 @@ attachable_offset = list("muzzle_x" = 45, "muzzle_y" = 16,"rail_x" = 23, "rail_y" = 24, "under_x" = 33, "under_y" = 11, "stock_x" = -1, "stock_y" = 17) actions_types = list(/datum/action/item_action/aim_mode) - wield_delay = 0.6 SECONDS + wield_delay = 0.8 SECONDS aim_fire_delay = 0.1 SECONDS aim_speed_modifier = 2 @@ -2136,6 +2133,14 @@ /obj/item/attachable/reddot, ) +/obj/item/weapon/gun/rifle/som/suppressed + starting_attachment_types = list( + /obj/item/weapon/gun/shotgun/micro_grenade, + /obj/item/attachable/verticalgrip, + /obj/item/attachable/suppressor, + /obj/item/attachable/magnetic_harness, + ) + /obj/item/weapon/gun/rifle/som/veteran default_ammo_type = /obj/item/ammo_magazine/rifle/som/ap starting_attachment_types = list( @@ -2165,7 +2170,7 @@ /obj/item/weapon/gun/rifle/som_carbine name = "\improper V-34 carbine" desc = "An old but robust weapon that saw extensive use in the Martian uprising. A comparatively light and compact weapon, it still packs a considerable punch thanks to a good rate of fire and high calibre, although at range its effective drops off considerably. It is chambered in 7.62x39mm." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/rifles64.dmi' icon_state = "v34" item_state = "v34" caliber = CALIBER_762X39 @@ -2192,7 +2197,7 @@ /obj/item/attachable/verticalgrip, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) attachable_offset = list("muzzle_x" = 30, "muzzle_y" = 18,"rail_x" = 8, "rail_y" = 20, "under_x" = 17, "under_y" = 13, "stock_x" = -6, "stock_y" = 16) starting_attachment_types = list(/obj/item/attachable/foldable/som_carbine) @@ -2203,8 +2208,8 @@ accuracy_mult = 0.75 scatter = 12 recoil = 1.5 - wield_delay = 0.4 SECONDS - aim_slowdown = 0.3 + wield_delay = 0.6 SECONDS + aim_slowdown = 0.4 movement_acc_penalty_mult = 4 damage_falloff_mult = 1.4 damage_mult = 0.9 @@ -2237,13 +2242,13 @@ /obj/item/weapon/gun/rifle/som_mg name = "\improper V-41 machine gun" desc = "The V-41 is a large man portable machine used by the SOM, allowing for sustained, accurate suppressive firepower at the cost of mobility and handling. Commonly seen where their preferred tactics of fast, mobile aggression is ill suited. Takes 10x26mm Caseless." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/machineguns64.dmi' icon_state = "v41" item_state = "v41" fire_animation = "v41_fire" item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_64.dmi', + slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_64.dmi', ) inhand_x_dimension = 64 @@ -2251,7 +2256,7 @@ caliber = CALIBER_10x26_CASELESS max_shells = 200 force = 35 - wield_delay = 1.5 SECONDS + wield_delay = 1.7 SECONDS fire_sound = 'sound/weapons/guns/fire/v41.ogg' dry_fire_sound = 'sound/weapons/guns/fire/m41a_empty.ogg' unload_sound = 'sound/weapons/guns/interact/T42_unload.ogg' @@ -2274,10 +2279,9 @@ /obj/item/attachable/magnetic_harness, /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, ) - flags_gun_features = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) starting_attachment_types = list(/obj/item/attachable/stock/som_mg_stock) gun_skill_category = SKILL_HEAVY_WEAPONS @@ -2305,12 +2309,12 @@ /obj/item/weapon/gun/rifle/icc_sharpshooter name = "\improper L-11 sharpshooter rifle" desc = "The L-11 is a venerable and battle-tested rifle used by the ICCAF. Although rather heavy, long and unwieldy compared to most ICCAF rifles, which focus on getting up close and personal, it easily makes up with excellent long-range potential when compared to most of its peers, mostly seen in use by reserve troops who expect to fight at distance, rather than up close. Uses 10x27mm magazines." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/marksman64.dmi' icon_state = "l11" item_state = "l11" item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_64.dmi', + slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_64.dmi', ) inhand_x_dimension = 64 inhand_y_dimension = 32 @@ -2322,7 +2326,7 @@ reload_sound = 'sound/weapons/guns/interact/fal_reload.ogg' caliber = CALIBER_10x27_CASELESS //codex aim_slowdown = 0.8 - wield_delay = 0.85 SECONDS + wield_delay = 1.05 SECONDS force = 20 max_shells = 20 //codex default_ammo_type = /obj/item/ammo_magazine/rifle/icc_sharpshooter @@ -2355,7 +2359,7 @@ ) starting_attachment_types = list(/obj/item/attachable/stock/icc_sharpshooter) - flags_gun_features = GUN_AMMO_COUNTER|GUN_CAN_POINTBLANK|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_AMMO_COUNTER|GUN_CAN_POINTBLANK|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) attachable_offset = list("muzzle_x" = 40, "muzzle_y" = 14, "rail_x" = 15, "rail_y" = 17, "under_x" = 23, "under_y" = 10, "stock_x" = 17, "stock_y" = 10) actions_types = list(/datum/action/item_action/aim_mode) @@ -2378,12 +2382,12 @@ /obj/item/weapon/gun/rifle/icc_battlecarbine name = "\improper L-15 battlecarbine" desc = "The L-15 battlecarbine is the standard rifle of the ICCAF, boasting a high caliber round and a menacing profile, it presents an excellent CQC firearm. However it struggles at range due to high dropoff from the short barrel, units that use it say that you need to close the gap at any cost to see the true efficacy of this weapon. Uses 10x25mm caseless ammunition." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/rifles64.dmi' icon_state = "l15" item_state = "l15" item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_64.dmi', + slot_l_hand_str = 'icons/mob/inhands/guns/rifles_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/rifles_right_64.dmi', ) inhand_x_dimension = 64 @@ -2425,7 +2429,7 @@ /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) attachable_offset = list("muzzle_x" = 44, "muzzle_y" = 19,"rail_x" = 20, "rail_y" = 23, "under_x" = 33, "under_y" = 13, "stock_x" = 0, "stock_y" = 13) actions_types = list(/datum/action/item_action/aim_mode) @@ -2436,7 +2440,7 @@ fire_delay = 0.2 SECONDS scatter = 3 aim_slowdown = 0.35 - wield_delay = 0.35 SECONDS + wield_delay = 0.55 SECONDS damage_falloff_mult = 2.5 movement_acc_penalty_mult = 4 @@ -2450,12 +2454,12 @@ /obj/item/weapon/gun/rifle/icc_confrontationrifle name = "\improper ML-12 confrontation rifle" desc = "The ML-12 confrontation rifle is an absolute beast of a weapon used by the ICCAF. Featuring a high caliber round in a short package, it will absolutely shred enemy targets at close quarters, a operator must mind the incredible recoil while making followup shots, however. Uses 10x28mm caseless ammunition." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/marksman64.dmi' icon_state = "ml12" item_state = "ml12" item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_64.dmi', + slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_64.dmi', ) inhand_x_dimension = 64 @@ -2488,7 +2492,7 @@ /obj/item/attachable/motiondetector, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) attachable_offset = list("muzzle_x" = 48, "muzzle_y" = 18,"rail_x" = 24, "rail_y" = 26, "under_x" = 36, "under_y" = 14, "stock_x" = 0, "stock_y" = 13) actions_types = list(/datum/action/item_action/aim_mode) @@ -2498,7 +2502,7 @@ burst_amount = 1 fire_delay = 0.45 SECONDS aim_slowdown = 0.55 - wield_delay = 0.65 SECONDS + wield_delay = 0.85 SECONDS damage_falloff_mult = 2 movement_acc_penalty_mult = 6.5 @@ -2517,9 +2521,13 @@ /obj/item/weapon/gun/rifle/icc_autoshotgun name = "\improper ML-41 autoshotgun" desc = "The ML-41 Automatic Shotgun is used by the ICCAF in fast paced boarding assaults, fielding a wide variety of ammo for all situations. Takes 16-round 12 gauge drums." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/shotguns64.dmi' icon_state = "ml41" item_state = "ml41" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/shotguns_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/shotguns_right_1.dmi', + ) fire_sound = 'sound/weapons/guns/fire/shotgun.ogg' dry_fire_sound = 'sound/weapons/guns/fire/shotgun_empty.ogg' caliber = CALIBER_12G //codex @@ -2547,7 +2555,7 @@ /obj/item/attachable/motiondetector, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES //Its a shotgun type weapon effectively, most shotgun type weapons shouldn't be able to point blank 1 handed. + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES //Its a shotgun type weapon effectively, most shotgun type weapons shouldn't be able to point blank 1 handed. gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) attachable_offset = list("muzzle_x" = 30, "muzzle_y" = 26,"rail_x" = 26, "rail_y" = 24, "under_x" = 40, "under_y" = 16, "stock_x" = 26, "stock_y" = 13) gun_skill_category = SKILL_SHOTGUNS @@ -2556,7 +2564,7 @@ accuracy_mult = 1.15 damage_mult = 0.5 aim_slowdown = 0.6 - wield_delay = 0.55 SECONDS + wield_delay = 0.75 SECONDS burst_amount = 1 scatter = 8 movement_acc_penalty_mult = 2 @@ -2570,7 +2578,7 @@ /obj/item/weapon/gun/rifle/icc_assaultcarbine name = "\improper L-88 assault carbine" desc = "An aged, reliable but outdated bullpup rifle used by ICCAF reserve personnel it is best used in close quarters when you need to quickly clear corners at rapid pace, has an integral foregrip and unmagnified scope to increase accuracy and reduce drag. Chambered in 5.56x45mm NATO." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/rifles64.dmi' icon_state = "l88" item_state = "l88" muzzleflash_iconstate = "muzzle_flash_medium" @@ -2595,7 +2603,7 @@ /obj/item/attachable/magnetic_harness, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_BURSTFIRE, GUN_FIREMODE_AUTOBURST) attachable_offset = list("muzzle_x" = 44, "muzzle_y" = 19,"rail_x" = 8, "rail_y" = 21, "under_x" = 28, "under_y" = 12, "stock_x" = 19, "stock_y" = 13) @@ -2605,7 +2613,7 @@ accuracy_mult = 1.15 damage_mult = 1.2 damage_falloff_mult = 1.5 - wield_delay = 0.65 SECONDS + wield_delay = 0.85 SECONDS aim_slowdown = 0.2 scatter = 0 @@ -2615,3 +2623,68 @@ icon_state = "l88_export" item_state = "l88_export" default_ammo_type = /obj/item/ammo_magazine/rifle/icc_assaultcarbine/export + +//------------------------------------------------------- +//MG-60 General Purpose Machine Gun + +/obj/item/weapon/gun/rifle/icc_mg + name = "\improper ML-41 assault machine gun" + desc = "The ML-41 is an incredibly lightweight machinegun used by ICCAF forces, being incredibly light for its class allows it to be used in rapid manuevers, at the cost of damage at range and generally high scatter. It uses 10x26mm boxes." + icon = 'icons/obj/items/guns/machineguns64.dmi' + icon_state = "minimi" + item_state = "minimi" + fire_animation = "minimi_fire" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_64.dmi', + ) + inhand_x_dimension = 64 + inhand_y_dimension = 32 + + caliber = CALIBER_10x26_CASELESS //codex + max_shells = 200 //codex + force = 30 + aim_slowdown = 0.85 + wield_delay = 0.95 SECONDS + fire_sound = 'sound/weapons/guns/fire/tgmc/kinetic/gun_mg60.ogg' + dry_fire_sound = 'sound/weapons/guns/fire/m41a_empty.ogg' + unload_sound = 'sound/weapons/guns/interact/T42_unload.ogg' + reload_sound = 'sound/weapons/guns/interact/T42_reload.ogg' + default_ammo_type = /obj/item/ammo_magazine/icc_mg + allowed_ammo_types = list(/obj/item/ammo_magazine/icc_mg, /obj/item/ammo_magazine/icc_mg/belt) + attachable_allowed = list( + /obj/item/attachable/flashlight, + /obj/item/attachable/lasersight, + /obj/item/attachable/flashlight/under, + /obj/item/attachable/foldable/bipod, + /obj/item/attachable/extended_barrel, + /obj/item/attachable/heavy_barrel, + /obj/item/attachable/bayonet, + /obj/item/attachable/bayonetknife, + /obj/item/attachable/bayonetknife/som, + /obj/item/attachable/scope/mini, + /obj/item/attachable/stock/t60stock, + /obj/item/attachable/magnetic_harness, + /obj/item/attachable/motiondetector, + /obj/item/attachable/buildasentry, + ) + + gun_features_flags = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) + gun_skill_category = SKILL_HEAVY_WEAPONS + attachable_offset = list("muzzle_x" = 42, "muzzle_y" = 21,"rail_x" = 6, "rail_y" = 23, "under_x" = 26, "under_y" = 15, "stock_x" = 8, "stock_y" = 13) + actions_types = list(/datum/action/item_action/aim_mode) + aim_fire_delay = 0.15 SECONDS + aim_speed_modifier = 5 + + fire_delay = 0.15 SECONDS + damage_falloff_mult = 2.5 + burst_amount = 1 + accuracy_mult = 0.85 + accuracy_mult_unwielded = 0.4 + scatter = 5 + scatter_unwielded = 45 + movement_acc_penalty_mult = 6 + +/obj/item/weapon/gun/rifle/icc_mg/guard + starting_attachment_types = list(/obj/item/attachable/magnetic_harness, /obj/item/attachable/heavy_barrel) diff --git a/code/modules/projectiles/guns/sentries.dm b/code/modules/projectiles/guns/sentries.dm index 03489ffd340f9..e98da3b19c802 100644 --- a/code/modules/projectiles/guns/sentries.dm +++ b/code/modules/projectiles/guns/sentries.dm @@ -23,10 +23,10 @@ ) turret_flags = TURRET_HAS_CAMERA|TURRET_SAFETY|TURRET_ALERTS - flags_gun_features = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_IFF|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_IFF|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) deployable_item = /obj/machinery/deployable/mounted/sentry - flags_item = IS_DEPLOYABLE|TWOHANDED + item_flags = IS_DEPLOYABLE|TWOHANDED deploy_time = 5 SECONDS allowed_ammo_types = list(/obj/item/ammo_magazine/sentry) @@ -71,9 +71,9 @@ gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_AUTOBURST) - attachable_allowed = list(/obj/item/attachable/scope/unremovable/tl102) + attachable_allowed = list(/obj/item/attachable/scope/unremovable/hsg_102) starting_attachment_types = list( - /obj/item/attachable/scope/unremovable/tl102, + /obj/item/attachable/scope/unremovable/hsg_102, ) /obj/item/weapon/gun/sentry/pod_sentry @@ -81,7 +81,7 @@ desc = "A fully automatic turret with AI targeting capabilities, designed specifically for deploying inside a paired drop pod shell. Armed with a M30 autocannon and a 500-round drum magazine. Designed to sweeping a landing area to support orbital assaults." icon_state = "podsentry" turret_flags = TURRET_HAS_CAMERA|TURRET_ALERTS|TURRET_RADIAL - flags_item = IS_DEPLOYABLE|DEPLOY_ON_INITIALIZE|DEPLOYED_NO_PICKUP + item_flags = IS_DEPLOYABLE|DEPLOY_ON_INITIALIZE|DEPLOYED_NO_PICKUP sentry_iff_signal = TGMC_LOYALIST_IFF turret_range = 10 knockdown_threshold = 500 @@ -101,6 +101,10 @@ desc = "The Centurion Omnidirectional Point-defense Energy sentry is a man portable, automated weapon system utilised by the SOM. It is activated in hand then thrown into place before it deploys, where it's ground hugging profile makes it a difficult target to accurately hit. Equipped with a compact volkite weapon system, and a recharging battery to allow for prolonged use, but can take normal volkite cells in a pinch." icon_state = "cope" icon = 'icons/Marine/sentry.dmi' + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/misc_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/misc_right_1.dmi', + ) max_integrity = 225 integrity_failure = 50 deploy_time = 1 SECONDS @@ -118,10 +122,10 @@ /obj/machinery/miner, ) - flags_gun_features = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_ENERGY|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_ENERGY|GUN_SMOKE_PARTICLES reciever_flags = AMMO_RECIEVER_MAGAZINES|AMMO_RECIEVER_DO_NOT_EJECT_HANDFULS|AMMO_RECIEVER_CYCLE_ONLY_BEFORE_FIRE //doesn't autoeject its recharging battery gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) - flags_item = IS_DEPLOYABLE|TWOHANDED + item_flags = IS_DEPLOYABLE|TWOHANDED max_shots = 150 rounds_per_shot = 12 @@ -182,28 +186,28 @@ deployed_machine.max_integrity = max_integrity //Syncs new machine or structure integrity with that of the item. deployed_machine.obj_integrity = obj_integrity - deployed_machine.update_icon_state() + deployed_machine.update_appearance() forceMove(deployed_machine) //Moves the Item into the machine or structure - ENABLE_BITFIELD(flags_item, IS_DEPLOYED) + ENABLE_BITFIELD(item_flags, IS_DEPLOYED) /obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/cope/predeployed - flags_item = IS_DEPLOYABLE|TWOHANDED|DEPLOY_ON_INITIALIZE|DEPLOYED_NO_PICKUP + item_flags = IS_DEPLOYABLE|TWOHANDED|DEPLOY_ON_INITIALIZE|DEPLOYED_NO_PICKUP /obj/item/weapon/gun/sentry/big_sentry/premade sentry_iff_signal = TGMC_LOYALIST_IFF - flags_item = IS_DEPLOYABLE|TWOHANDED|DEPLOY_ON_INITIALIZE + item_flags = IS_DEPLOYABLE|TWOHANDED|DEPLOY_ON_INITIALIZE /obj/item/weapon/gun/sentry/big_sentry/premade/radial turret_range = 9 turret_flags = TURRET_HAS_CAMERA|TURRET_ALERTS|TURRET_RADIAL - flags_item = IS_DEPLOYABLE|TWOHANDED|DEPLOY_ON_INITIALIZE|DEPLOYED_NO_PICKUP + item_flags = IS_DEPLOYABLE|TWOHANDED|DEPLOY_ON_INITIALIZE|DEPLOYED_NO_PICKUP /obj/item/weapon/gun/sentry/big_sentry/dropship ammo_datum_type = /datum/ammo/bullet/turret/gauss sentry_iff_signal = TGMC_LOYALIST_IFF - flags_item = IS_DEPLOYABLE|TWOHANDED|DEPLOY_ON_INITIALIZE|DEPLOYED_NO_PICKUP + item_flags = IS_DEPLOYABLE|TWOHANDED|DEPLOY_ON_INITIALIZE|DEPLOYED_NO_PICKUP var/obj/structure/dropship_equipment/shuttle/sentry_holder/deployment_system turret_flags = TURRET_HAS_CAMERA|TURRET_IMMOBILE density = FALSE @@ -213,7 +217,7 @@ fire_delay = 0.2 SECONDS ammo_datum_type = /datum/ammo/bullet/turret/gauss sentry_iff_signal = TGMC_LOYALIST_IFF - flags_item = IS_DEPLOYABLE|DEPLOY_ON_INITIALIZE|DEPLOYED_NO_PICKUP + item_flags = IS_DEPLOYABLE|DEPLOY_ON_INITIALIZE|DEPLOYED_NO_PICKUP turret_flags = TURRET_IMMOBILE|TURRET_RADIAL|TURRET_LOCKED|TURRET_ON default_ammo_type = /obj/item/ammo_magazine/sentry/fob_sentry allowed_ammo_types = list(/obj/item/ammo_magazine/sentry/fob_sentry) @@ -272,12 +276,12 @@ allowed_ammo_types = list(/obj/item/ammo_magazine/sentry) gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_AUTOBURST) - flags_item = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE + item_flags = IS_DEPLOYABLE|TWOHANDED|DEPLOYED_NO_PICKUP|DEPLOY_ON_INITIALIZE /obj/item/weapon/gun/sentry/premade/dumb name = "\improper Modified ST-571 sentry gun" desc = "A deployable, semi-automated turret with AI targeting capabilities. Armed with an M30 Autocannon and a 500-round drum magazine. This one's IFF system has been disabled, and it will open fire on any targets within range." - flags_gun_features = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES ammo_datum_type = /datum/ammo/bullet/turret/dumb default_ammo_type = /obj/item/ammo_magazine/sentry_premade/dumb allowed_ammo_types = list(/obj/item/ammo_magazine/sentry_premade/dumb) @@ -295,4 +299,147 @@ ammo_datum_type = /datum/ammo/bullet/turret sentry_iff_signal = TGMC_LOYALIST_IFF +// Sniper Sentry + +/obj/item/weapon/gun/sentry/sniper_sentry + name = "\improper SRT-574 sentry gun" + desc = "A deployable, fully automatic turret with AI targeting capabilities. Armed with a heavy caliber AM-5 antimaterial rifle and a 75-round drum magazine." + icon_state = "snipersentry" + + turret_range = 12 + deploy_time = 10 SECONDS + max_shells = 75 + fire_delay = 2 SECONDS + burst_amount = 1 + + scatter = 0 + + ammo_datum_type = /datum/ammo/bullet/turret/sniper + default_ammo_type = /obj/item/ammo_magazine/sentry/sniper + allowed_ammo_types = list(/obj/item/ammo_magazine/sentry/sniper) + + gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) + + attachable_allowed = list(/obj/item/attachable/scope/unremovable) + starting_attachment_types = list( + /obj/item/attachable/scope/unremovable, + ) + +/obj/item/storage/box/crate/sentry_sniper + name = "\improper SST-574 sentry crate" + desc = "A large case containing all you need to set up an automated sentry." + icon_state = "sentry_case" + w_class = WEIGHT_CLASS_HUGE + max_w_class = WEIGHT_CLASS_HUGE + storage_slots = 6 + max_storage_space = 16 + can_hold = list( + /obj/item/weapon/gun/sentry/sniper_sentry, + /obj/item/ammo_magazine/sentry/sniper, + ) + bypass_w_limit = list( + /obj/item/weapon/gun/sentry/sniper_sentry, + /obj/item/ammo_magazine/sentry/sniper, + ) + +/obj/item/storage/box/crate/sentry_sniper/Initialize(mapload) + . = ..() + new /obj/item/weapon/gun/sentry/sniper_sentry(src) + new /obj/item/ammo_magazine/sentry/sniper(src) + +// Shotgun Sentry + +/obj/item/weapon/gun/sentry/shotgun_sentry + name = "\improper SHT-573 sentry gun" + desc = "A deployable, fully automatic turret with AI targeting capabilities. Armed with a heavy caliber SM-10 shotgun and a 100-round drum magazine." + icon_state = "shotgunsentry" + + turret_range = 8 + deploy_time = 5 SECONDS + max_shells = 75 + fire_delay = 1 SECONDS + burst_amount = 1 + + scatter = 5 + + ammo_datum_type = /datum/ammo/bullet/turret/buckshot + default_ammo_type = /obj/item/ammo_magazine/sentry/shotgun + allowed_ammo_types = list(/obj/item/ammo_magazine/sentry/shotgun) + + gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) + + attachable_allowed = list(/obj/item/attachable/scope/unremovable/hsg_102) + starting_attachment_types = list( + /obj/item/attachable/scope/unremovable/hsg_102, + ) + +/obj/item/storage/box/crate/sentry_shotgun + name = "\improper SHT-573 sentry crate" + desc = "A large case containing all you need to set up an automated sentry." + icon_state = "sentry_case" + w_class = WEIGHT_CLASS_HUGE + max_w_class = WEIGHT_CLASS_HUGE + storage_slots = 6 + max_storage_space = 16 + can_hold = list( + /obj/item/weapon/gun/sentry/shotgun_sentry, + /obj/item/ammo_magazine/sentry/shotgun, + ) + bypass_w_limit = list( + /obj/item/weapon/gun/sentry/shotgun_sentry, + /obj/item/ammo_magazine/sentry/shotgun, + ) + +/obj/item/storage/box/crate/sentry_shotgun/Initialize(mapload) + . = ..() + new /obj/item/weapon/gun/sentry/shotgun_sentry(src) + new /obj/item/ammo_magazine/sentry/shotgun(src) + +// Flamethrower Sentry + +/obj/item/weapon/gun/sentry/flamer_sentry + name = "\improper SFT-573 sentry gun" + desc = "A deployable, fully automatic turret with AI targeting capabilities. Armed with a heavy flamethrower and a 200-round drum magazine." + icon_state = "flamersentry" + + turret_range = 8 + deploy_time = 5 SECONDS + max_shells = 200 + fire_delay = 2 SECONDS + burst_amount = 1 + + scatter = 5 + + ammo_datum_type = /datum/ammo/flamer + default_ammo_type = /obj/item/ammo_magazine/sentry/flamer + allowed_ammo_types = list(/obj/item/ammo_magazine/sentry/flamer) + + gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) + + attachable_allowed = list(/obj/item/attachable/scope/unremovable/hsg_102) + starting_attachment_types = list( + /obj/item/attachable/scope/unremovable/hsg_102, + ) + +/obj/item/storage/box/crate/sentry_flamer + name = "\improper SHT-573 sentry crate" + desc = "A large case containing all you need to set up an automated sentry." + icon_state = "sentry_case" + w_class = WEIGHT_CLASS_HUGE + max_w_class = WEIGHT_CLASS_HUGE + storage_slots = 6 + max_storage_space = 16 + can_hold = list( + /obj/item/weapon/gun/sentry/flamer_sentry, + /obj/item/ammo_magazine/sentry/flamer, + ) + bypass_w_limit = list( + /obj/item/weapon/gun/sentry/flamer_sentry, + /obj/item/ammo_magazine/sentry/flamer, + ) + +/obj/item/storage/box/crate/sentry_flamer/Initialize(mapload) + . = ..() + new /obj/item/weapon/gun/sentry/flamer_sentry(src) + new /obj/item/ammo_magazine/sentry/flamer(src) diff --git a/code/modules/projectiles/guns/shotguns.dm b/code/modules/projectiles/guns/shotguns.dm index 422efb203c7b4..1c8be523a0ad4 100644 --- a/code/modules/projectiles/guns/shotguns.dm +++ b/code/modules/projectiles/guns/shotguns.dm @@ -4,20 +4,25 @@ caliber = CALIBER_12G //codex max_chamber_items = 8 //codex load_method = SINGLE_CASING //codex + icon = 'icons/obj/items/guns/shotguns.dmi' + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/shotguns_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/shotguns_right_1.dmi', + ) fire_sound = 'sound/weapons/guns/fire/shotgun.ogg' dry_fire_sound = 'sound/weapons/guns/fire/shotgun_empty.ogg' reload_sound = 'sound/weapons/guns/interact/shotgun_shell_insert.ogg' hand_reload_sound = 'sound/weapons/guns/interact/shotgun_shell_insert.ogg' cocked_sound = 'sound/weapons/guns/interact/shotgun_reload.ogg' opened_sound = 'sound/weapons/guns/interact/shotgun_open.ogg' - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES reciever_flags = AMMO_RECIEVER_HANDFULS type_of_casings = "shell" allowed_ammo_types = list() aim_slowdown = 0.35 - wield_delay = 0.6 SECONDS //Shotguns are really easy to put up to fire, since they are designed for CQC (at least compared to a rifle) + wield_delay = 0.8 SECONDS //Shotguns are really easy to put up to fire, since they are designed for CQC (at least compared to a rifle) gun_skill_category = SKILL_SHOTGUNS - flags_item_map_variant = NONE + item_map_variant_flags = NONE fire_delay = 6 accuracy_mult = 1.15 @@ -27,8 +32,7 @@ recoil = 2 recoil_unwielded = 4 movement_acc_penalty_mult = 2 - lower_akimbo_accuracy = 3 - upper_akimbo_accuracy = 5 + akimbo_scatter_mod = 8 placed_overlay_iconstate = "shotgun" @@ -39,11 +43,11 @@ /obj/item/weapon/gun/shotgun/combat name = "\improper SH-221 tactical shotgun" desc = "The Nanotrasen SH-221 Shotgun, a quick-firing semi-automatic shotgun based on the centuries old Benelli M4 shotgun. Only issued to the TGMC in small numbers." - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK icon_state = "mk221" item_state = "mk221" fire_sound = 'sound/weapons/guns/fire/shotgun_automatic.ogg' - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES default_ammo_type = /datum/ammo/bullet/shotgun/buckshot max_chamber_items = 9 attachable_allowed = list( @@ -74,12 +78,12 @@ name = "\improper SH-39 combat shotgun" desc = "The Terran Armories SH-39 combat shotgun is a semi automatic shotgun used by breachers and pointmen within the TGMC squads. Uses 12 gauge shells." force = 20 //Has a stock already - flags_equip_slot = ITEM_SLOT_BACK - icon = 'icons/Marine/gun64.dmi' + equip_slot_flags = ITEM_SLOT_BACK + icon = 'icons/obj/items/guns/shotguns64.dmi' icon_state = "t39" item_state = "t39" fire_sound = 'sound/weapons/guns/fire/tgmc/kinetic/gun_sh39.ogg' - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES default_ammo_type = /datum/ammo/bullet/shotgun/buckshot attachable_allowed = list( /obj/item/attachable/bayonet, @@ -110,9 +114,13 @@ damage_mult = 0.7 //30% less damage. Faster firerate. recoil = 2 recoil_unwielded = 4 - wield_delay = 0.8 SECONDS + wield_delay = 1 SECONDS akimbo_additional_delay = 0.9 +/obj/item/weapon/gun/shotgun/combat/standardmarine/beginner + default_ammo_type = /datum/ammo/bullet/shotgun/slug + starting_attachment_types = list(/obj/item/attachable/magnetic_harness, /obj/item/attachable/heavy_barrel, /obj/item/attachable/verticalgrip, /obj/item/attachable/stock/t39stock) + /obj/item/weapon/gun/shotgun/combat/masterkey name = "masterkey shotgun" desc = "A weapon-mounted, three-shot shotgun. Reloadable with any normal 12 gauge shell. The short barrel reduces the ammo's effectiveness drastically in exchange for fitting as a attachment.." @@ -124,7 +132,7 @@ slot = ATTACHMENT_SLOT_UNDER attach_delay = 3 SECONDS detach_delay = 3 SECONDS - flags_gun_features = GUN_IS_ATTACHMENT|GUN_AMMO_COUNTER|GUN_ATTACHMENT_FIRE_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_CAN_POINTBLANK|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_IS_ATTACHMENT|GUN_AMMO_COUNTER|GUN_ATTACHMENT_FIRE_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_CAN_POINTBLANK|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES default_ammo_type = /datum/ammo/bullet/shotgun/buckshot damage_mult = 0.6 // 40% less damage, but MUCH higher falloff. scatter = 3 @@ -140,7 +148,7 @@ /obj/item/weapon/gun/shotgun/double name = "double barrel shotgun" desc = "A double barreled over and under shotgun of archaic, but sturdy design. Uses 12 gauge shells, but can only hold 2 at a time." - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK icon_state = "dshotgun" item_state = "dshotgun" max_chamber_items = 2 //codex @@ -157,7 +165,7 @@ /obj/item/attachable/flashlight/under, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES reciever_flags = AMMO_RECIEVER_TOGGLES_OPEN|AMMO_RECIEVER_TOGGLES_OPEN_EJECTS|AMMO_RECIEVER_HANDFULS attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 21,"rail_x" = 15, "rail_y" = 22, "under_x" = 21, "under_y" = 16, "stock_x" = 21, "stock_y" = 16) @@ -168,15 +176,16 @@ recoil = 2 recoil_unwielded = 4 aim_slowdown = 0.6 + damage_mult = 0.7 /obj/item/weapon/gun/shotgun/double/sawn name = "sawn-off shotgun" desc = "A double barreled shotgun whose barrel has been artificially shortened to reduce range for further CQC potiential." icon_state = "sshotgun" item_state = "sshotgun" - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT attachable_allowed = list() - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES|GUN_WIELDED_FIRING_ONLY + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES|GUN_WIELDED_FIRING_ONLY attachable_offset = list("muzzle_x" = 30, "muzzle_y" = 20,"rail_x" = 11, "rail_y" = 22, "under_x" = 18, "under_y" = 16, "stock_x" = 18, "stock_y" = 16) fire_delay = 2 @@ -192,7 +201,7 @@ /obj/item/weapon/gun/shotgun/double/marine name = "\improper SH-34 double barrel shotgun" desc = "A double barreled shotgun of archaic, but sturdy design used by the TGMC. Due to reports of barrel bursting, the abiility to fire both barrels has been disabled. Uses 12 gauge shells, but can only hold 2 at a time." - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK icon_state = "ts34" item_state = "ts34" max_chamber_items = 2 //codex @@ -214,7 +223,7 @@ /obj/item/attachable/scope/mini, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 17,"rail_x" = 15, "rail_y" = 19, "under_x" = 21, "under_y" = 13, "stock_x" = 13, "stock_y" = 16) fire_delay = 0.65 SECONDS @@ -232,7 +241,7 @@ /obj/item/weapon/gun/shotgun/pump name = "\improper V10 pump shotgun" desc = "A classic design, using the outdated shotgun frame. The V10 combines close-range firepower with long term reliability.\nRequires a pump, which is the Unique Action key." - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK icon_state = "v10" item_state = "v10" default_ammo_type = /datum/ammo/bullet/shotgun/buckshot @@ -257,7 +266,7 @@ /obj/item/attachable/magnetic_harness, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES reciever_flags = AMMO_RECIEVER_HANDFULS|AMMO_RECIEVER_REQUIRES_UNIQUE_ACTION|AMMO_RECIEVER_UNIQUE_ACTION_LOCKS cocked_message = "You rack the pump." cock_locked_message = "The pump is locked! Fire it first!" @@ -280,7 +289,7 @@ /obj/item/weapon/gun/shotgun/pump/cmb name = "\improper SH-12 Paladin pump shotgun" desc = "A nine-round pump action shotgun. A shotgun used for hunting, home defence and police work, many versions of it exist and are used by just about anyone." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/shotguns64.dmi' icon_state = "pal12" item_state = "pal12" fire_sound = 'sound/weapons/guns/fire/shotgun_cmb.ogg' @@ -298,7 +307,7 @@ /obj/item/attachable/motiondetector, /obj/item/attachable/stock/pal12, ) - flags_item_map_variant = NONE + item_map_variant_flags = NONE attachable_offset = list("muzzle_x" = 38, "muzzle_y" = 19,"rail_x" = 14, "rail_y" = 19, "under_x" = 37, "under_y" = 16, "stock_x" = 15, "stock_y" = 14) starting_attachment_types = list( /obj/item/attachable/stock/pal12, @@ -325,9 +334,10 @@ /obj/item/weapon/gun/shotgun/pump/trenchgun name = "\improper L-4034 trenchgun" desc = "A six-round pump action shotgun. A shotgun used for hunting, home defence and police work, many versions of it exist and are used by just about anyone." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/shotguns64.dmi' icon_state = "trenchgun" item_state = "trenchgun" + cock_animation = "trenchgun_pump" fire_sound = 'sound/weapons/guns/fire/trenchgun.ogg' reload_sound = 'sound/weapons/guns/interact/shotgun_cmb_insert.ogg' cocked_sound = 'sound/weapons/guns/interact/trenchgun_pump.ogg' @@ -343,7 +353,7 @@ /obj/item/attachable/motiondetector, /obj/item/attachable/stock/trenchgun, ) - flags_item_map_variant = NONE + item_map_variant_flags = NONE attachable_offset = list("muzzle_x" = 34, "muzzle_y" = 19,"rail_x" = 12, "rail_y" = 21, "under_x" = 37, "under_y" = 16, "stock_x" = 0, "stock_y" = 12) starting_attachment_types = list( /obj/item/attachable/stock/trenchgun, @@ -379,9 +389,13 @@ /obj/item/weapon/gun/shotgun/pump/bolt name = "\improper Mosin Nagant rifle" desc = "A mosin nagant rifle, even just looking at it you can feel the cosmoline already. Commonly known by its slang, \"Moist Nugget\", by downbrained colonists and outlaws." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/marksman64.dmi' icon_state = "mosin" item_state = "mosin" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_1.dmi', + ) fire_sound = 'sound/weapons/guns/fire/tgmc/kinetic/gun_mosin.ogg' fire_rattle = 'sound/weapons/guns/fire/tgmc/kinetic/gun_mosin_low.ogg' dry_fire_sound = 'sound/weapons/guns/fire/sniper_empty.ogg' @@ -408,10 +422,9 @@ /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, /obj/item/attachable/stock/mosin, - /obj/item/attachable/shoulder_mount, ) - flags_item_map_variant = NONE - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + item_map_variant_flags = NONE + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES attachable_offset = list("muzzle_x" = 37, "muzzle_y" = 18,"rail_x" = 14, "rail_y" = 19, "under_x" = 19, "under_y" = 14, "stock_x" = 15, "stock_y" = 12) starting_attachment_types = list( /obj/item/attachable/scope/mosin, @@ -431,7 +444,7 @@ recoil_unwielded = 4 cock_delay = 12 aim_slowdown = 1 - wield_delay = 1.2 SECONDS + wield_delay = 1.4 SECONDS movement_acc_penalty_mult = 4.5 placed_overlay_iconstate = "wood" @@ -445,10 +458,14 @@ /obj/item/weapon/gun/shotgun/double/martini name = "\improper Martini Henry lever action rifle" desc = "A lever action with room for a single round of .557/440 ball. Perfect for any kind of hunt, be it elephant or xeno with how quick to the draw it is." - flags_equip_slot = ITEM_SLOT_BACK - icon = 'icons/Marine/gun64.dmi' + equip_slot_flags = ITEM_SLOT_BACK + icon = 'icons/obj/items/guns/marksman64.dmi' icon_state = "martini" item_state = "martini" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_1.dmi', + ) shell_eject_animation = "martini_flick" caliber = CALIBER_557 //codex muzzle_flash_lum = 7 @@ -472,10 +489,9 @@ /obj/item/attachable/scope/marine, /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES attachable_offset = list("muzzle_x" = 45, "muzzle_y" = 23,"rail_x" = 17, "rail_y" = 25, "under_x" = 19, "under_y" = 14, "stock_x" = 15, "stock_y" = 12) /* RU TGMC EDIT actions_types = list(/datum/action/item_action/aim_mode) RU TGMC EDIT @@ -492,10 +508,11 @@ RU TGMC EDIT */ recoil_unwielded = 4 aim_slowdown = 1 - wield_delay = 1 SECONDS + wield_delay = 1.2 SECONDS movement_acc_penalty_mult = 5 placed_overlay_iconstate = "wood" + damage_mult = 1 //*********************************************************** // Derringer @@ -505,6 +522,7 @@ RU TGMC EDIT */ desc = "The R-2395 Derringer has been a classic for centuries. This latest iteration combines plasma propulsion powder with the classic design to make an assasination weapon that will leave little to chance." icon_state = "derringer" item_state = "tp17" + icon = 'icons/obj/items/guns/pistols.dmi' gun_skill_category = SKILL_PISTOLS w_class = WEIGHT_CLASS_TINY caliber = CALIBER_41RIM //codex @@ -517,7 +535,7 @@ RU TGMC EDIT */ cocked_sound = 'sound/weapons/guns/interact/martini_cocked.ogg' opened_sound = 'sound/weapons/guns/interact/martini_open.ogg' attachable_allowed = list() - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES fire_delay = 0.2 SECONDS scatter = 0 @@ -525,7 +543,8 @@ RU TGMC EDIT */ recoil = 0 recoil_unwielded = 0 aim_slowdown = 0 - wield_delay = 0.1 SECONDS + wield_delay = 0.3 SECONDS + damage_mult = 1 /obj/item/weapon/gun/shotgun/double/derringer/Initialize(mapload) . = ..() @@ -540,7 +559,7 @@ RU TGMC EDIT */ /obj/item/weapon/gun/shotgun/pump/lever name = "lever action rifle" desc = "A .44 magnum lever action rifle with side loading port. It has a low fire rate, but it packs quite a punch in hunting." - icon = 'icons/obj/items/gun.dmi' + icon = 'icons/obj/items/guns/shotguns.dmi' icon_state = "mares_leg" item_state = "mares_leg" fire_sound = 'sound/weapons/guns/fire/leveraction.ogg'//I like how this one sounds. @@ -553,7 +572,7 @@ RU TGMC EDIT */ gun_skill_category = SKILL_RIFLES cocked_sound = 'sound/weapons/guns/interact/ak47_cocked.ogg'//good enough for now. cocked_message = "You work the lever." - flags_item_map_variant = NONE + item_map_variant_flags = NONE attachable_allowed = list( /obj/item/attachable/reddot, /obj/item/attachable/scope/mini, @@ -563,7 +582,7 @@ RU TGMC EDIT */ /obj/item/attachable/bayonet, ) attachable_offset = list("muzzle_x" = 50, "muzzle_y" = 21,"rail_x" = 8, "rail_y" = 21, "under_x" = 37, "under_y" = 16, "stock_x" = 20, "stock_y" = 14) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES fire_delay = 8 accuracy_mult = 1.2 @@ -581,9 +600,13 @@ RU TGMC EDIT */ /obj/item/weapon/gun/shotgun/pump/lever/repeater name = "\improper Leicester Repeater" desc = "The gun that won the west or so they say. But space is a very different kind of frontier all together, chambered for .45-70 Governemnt." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/marksman64.dmi' icon_state = "leicrepeater" item_state = "leicrepeater" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_1.dmi', + ) fire_sound = 'sound/weapons/guns/fire/tgmc/kinetic/gun_repeater.ogg' dry_fire_sound = 'sound/weapons/guns/fire/sniper_empty.ogg' reload_sound = 'sound/weapons/guns/interact/mosin_reload.ogg' @@ -593,7 +616,7 @@ RU TGMC EDIT */ default_ammo_type = /datum/ammo/bullet/rifle/repeater gun_skill_category = SKILL_RIFLES cocked_sound = 'sound/weapons/guns/interact/ak47_cocked.ogg'//good enough for now. - flags_item_map_variant = NONE + item_map_variant_flags = NONE attachable_allowed = list( /obj/item/attachable/reddot, /obj/item/attachable/scope/mini, @@ -605,7 +628,7 @@ RU TGMC EDIT */ /obj/item/attachable/motiondetector, ) attachable_offset = list ("muzzle_x" = 45, "muzzle_y" = 23,"rail_x" = 21, "rail_y" = 23, "under_x" = 19, "under_y" = 14, "stock_x" = 15, "stock_y" = 12) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES actions_types = list(/datum/action/item_action/aim_mode) aim_fire_delay = 0.3 SECONDS aim_speed_modifier = 2 @@ -622,6 +645,9 @@ RU TGMC EDIT */ aim_slowdown = 0.6 movement_acc_penalty_mult = 5 +/obj/item/weapon/gun/shotgun/pump/lever/repeater/beginner + starting_attachment_types = list(/obj/item/attachable/magnetic_harness, /obj/item/attachable/bayonet) + //------------------------------------------------------ //MBX900 Lever Action Shotgun /obj/item/weapon/gun/shotgun/pump/lever/mbx900 @@ -660,8 +686,9 @@ RU TGMC EDIT */ ) attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 17,"rail_x" = 12, "rail_y" = 19, "under_x" = 27, "under_y" = 16, "stock_x" = 0, "stock_y" = 0) - flags_item_map_variant = NONE + item_map_variant_flags = NONE + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES fire_delay = 0.6 SECONDS accuracy_mult = 1.2 cock_delay = 0.2 SECONDS @@ -671,22 +698,14 @@ RU TGMC EDIT */ /obj/item/weapon/gun/shotgun/pump/t35 name = "\improper SH-35 pump shotgun" desc = "The Terran Armories SH-35 is the shotgun used by the TerraGov Marine Corps. It's used as a close quarters tool when someone wants something more suited for close range than most people, or as an odd sidearm on your back for emergencies. Uses 12 gauge shells.\nRequires a pump, which is the Unique Action key." - flags_equip_slot = ITEM_SLOT_BACK - icon = 'icons/Marine/gun64.dmi' - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED - cock_animation = GUN_ICONSTATE_PUMP + equip_slot_flags = ITEM_SLOT_BACK + icon = 'icons/obj/items/guns/shotguns64.dmi' + icon_state = "t35" + item_state = "t35" + cock_animation = "t35_pump" default_ammo_type = /datum/ammo/bullet/shotgun/buckshot fire_sound = 'sound/weapons/guns/fire/tgmc/kinetic/gun_sh35.ogg' max_chamber_items = 8 - greyscale_config = /datum/greyscale_config/gun/gun64/shotgun - colorable_allowed = PRESET_COLORS_ALLOWED - item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/t35, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/t35, - slot_back_str = /datum/greyscale_config/worn_gun/t35, - slot_s_store_str = /datum/greyscale_config/worn_gun/suit/t35, - ) attachable_allowed = list( /obj/item/attachable/bayonet, /obj/item/attachable/bayonetknife, @@ -704,12 +723,11 @@ RU TGMC EDIT */ /obj/item/attachable/foldable/t35stock, /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, ) starting_attachment_types = list(/obj/item/attachable/foldable/t35stock) attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 9, "rail_y" = 21, "under_x" = 18, "under_y" = 12, "stock_x" = -3, "stock_y" = 16) - flags_item_map_variant = NONE + item_map_variant_flags = NONE fire_delay = 20 scatter_unwielded = 10 @@ -733,16 +751,20 @@ RU TGMC EDIT */ default_ammo_type = /datum/ammo/bullet/shotgun/buckshot starting_attachment_types = list(/obj/item/attachable/foldable/t35stock, /obj/item/attachable/angledgrip, /obj/item/attachable/magnetic_harness) +/obj/item/weapon/gun/shotgun/pump/t35/beginner + default_ammo_type = /datum/ammo/bullet/shotgun/slug + starting_attachment_types = list(/obj/item/attachable/foldable/t35stock, /obj/item/attachable/gyro, /obj/item/attachable/magnetic_harness, /obj/item/attachable/bayonet) + //------------------------------------------------------- //THE MYTH, THE GUN, THE LEGEND, THE DEATH, THE ZX /obj/item/weapon/gun/shotgun/zx76 name = "\improper ZX-76 assault shotgun" desc = "The ZX-76 Assault Shotgun, a incredibly rare, double barreled semi-automatic combat shotgun with a twin shot mode. Possibly the unrivaled master of CQC. Has a 9 round internal magazine." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/shotguns64.dmi' icon_state = "zx-76" item_state = "zx-76" - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK max_chamber_items = 9 //codex caliber = CALIBER_12G //codex load_method = SINGLE_CASING //codex @@ -767,7 +789,7 @@ RU TGMC EDIT */ fire_delay = 1.75 SECONDS damage_mult = 0.9 - wield_delay = 0.75 SECONDS + wield_delay = 0.95 SECONDS burst_amount = 2 burst_delay = 0.01 SECONDS //basically instantaneous two shots extra_delay = 0.5 SECONDS @@ -785,15 +807,15 @@ RU TGMC EDIT */ /obj/item/weapon/gun/shotgun/som name = "\improper V-51 combat shotgun" desc = "The V-51 is the main shotgun utilised by the Sons of Mars. Slower firing than some other semi automatic shotguns, but packs more of a kick." - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK icon_state = "v51" - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/shotguns64.dmi' item_state = "v51" fire_sound = "shotgun_som" dry_fire_sound = 'sound/weapons/guns/fire/v51_empty.ogg' reload_sound = 'sound/weapons/guns/interact/v51_load.ogg' hand_reload_sound = 'sound/weapons/guns/interact/v51_load.ogg' - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES default_ammo_type = /datum/ammo/bullet/shotgun/buckshot max_chamber_items = 9 attachable_allowed = list( @@ -819,7 +841,7 @@ RU TGMC EDIT */ recoil = 1 recoil_unwielded = 4 aim_slowdown = 0.35 - wield_delay = 0.65 SECONDS + wield_delay = 0.85 SECONDS /obj/item/weapon/gun/shotgun/som/pointman starting_attachment_types = list(/obj/item/attachable/bayonet, /obj/item/attachable/motiondetector) @@ -858,8 +880,8 @@ RU TGMC EDIT */ icon_state = "va61" fire_sound = 'sound/weapons/guns/fire/pred_plasma_shot.ogg' max_chamber_items = 2 - flags_gun_features = GUN_IS_ATTACHMENT|GUN_AMMO_COUNTER|GUN_ATTACHMENT_FIRE_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_WIELDED_FIRING_ONLY - flags_attach_features = NONE + gun_features_flags = GUN_IS_ATTACHMENT|GUN_AMMO_COUNTER|GUN_ATTACHMENT_FIRE_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_WIELDED_FIRING_ONLY + attach_features_flags = NONE slot = ATTACHMENT_SLOT_STOCK default_ammo_type = /datum/ammo/bullet/micro_rail/airburst caliber = CALIBER_10G_RAIL diff --git a/code/modules/projectiles/guns/smgs.dm b/code/modules/projectiles/guns/smgs.dm index 9efce183ec928..d4602c0afa285 100644 --- a/code/modules/projectiles/guns/smgs.dm +++ b/code/modules/projectiles/guns/smgs.dm @@ -1,4 +1,9 @@ /obj/item/weapon/gun/smg + icon = 'icons/obj/items/guns/submachineguns.dmi' + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/submachineguns_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/submachineguns_right_1.dmi', + ) fire_sound = 'sound/weapons/guns/fire/smg_light.ogg' unload_sound = 'sound/weapons/guns/interact/smg_unload.ogg' reload_sound = 'sound/weapons/guns/interact/smg_reload.ogg' @@ -8,7 +13,7 @@ load_method = MAGAZINE //codex force = 8 w_class = WEIGHT_CLASS_BULKY - wield_delay = 0.4 SECONDS + wield_delay = 0.6 SECONDS attachable_allowed = list( /obj/item/attachable/suppressor, /obj/item/attachable/reddot, @@ -16,7 +21,7 @@ /obj/item/attachable/magnetic_harness, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_BURSTFIRE, GUN_FIREMODE_AUTOBURST) gun_skill_category = SKILL_SMGS @@ -24,7 +29,7 @@ burst_amount = 3 recoil_unwielded = 0.5 akimbo_additional_delay = 0.2 - movement_acc_penalty_mult = 3 + akimbo_scatter_mod = 8 //------------------------------------------------------- // MP-19 Machinepistol. It fits here more. @@ -38,7 +43,7 @@ caliber = CALIBER_10X20_CASELESS //codex gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_AUTOBURST) max_shells = 30 //codex - flags_equip_slot = ITEM_SLOT_BACK|ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT type_of_casings = null default_ammo_type = /obj/item/ammo_magazine/smg/standard_machinepistol allowed_ammo_types = list(/obj/item/ammo_magazine/smg/standard_machinepistol) @@ -75,14 +80,10 @@ aim_slowdown = 0.15 movement_acc_penalty_mult = 2 - upper_akimbo_accuracy = 5 - lower_akimbo_accuracy = 3 - - burst_amount = 1 - autoburst_delay = 0.1 SECONDS - autoburst_delay = 0.1 SECONDS //this makes it fuller auto - burst_accuracy_bonus = -0.3 - burst_scatter_mult = 25 + akimbo_scatter_mod = 24 + burst_amount = 5 + burst_delay = 0.1 SECONDS + akimbo_additional_delay = 20 // Literally do not even bother to try /obj/item/weapon/gun/smg/standard_machinepistol/compact starting_attachment_types = list(/obj/item/attachable/foldable/t19stock, /obj/item/attachable/reddot, /obj/item/attachable/compensator, /obj/item/attachable/lasersight) @@ -100,24 +101,16 @@ name = "\improper SMG-90 submachinegun" desc = "The SMG-90 is the TerraGov Marine Corps standard issue SMG. Its known for it's compact size and ease of use inside the field. It's usually carried by troops who want a lightweight firearm to rush with. It uses 10x20mm caseless rounds." fire_sound = 'sound/weapons/guns/fire/tgmc/kinetic/gun_smg90.ogg' - icon_state = GUN_ICONSTATE_LOADED - item_state = GUN_ICONSTATE_LOADED + icon_state = "t90" + item_state = "t90" caliber = CALIBER_10X20_CASELESS //codex max_shells = 50 //codex - flags_equip_slot = ITEM_SLOT_BACK - wield_delay = 0.5 SECONDS + equip_slot_flags = ITEM_SLOT_BACK + wield_delay = 0.7 SECONDS force = 20 type_of_casings = null default_ammo_type = /obj/item/ammo_magazine/smg/standard_smg allowed_ammo_types = list(/obj/item/ammo_magazine/smg/standard_smg) - greyscale_config = /datum/greyscale_config/gun/t90 - colorable_allowed = PRESET_COLORS_ALLOWED - item_icons = list( - slot_l_hand_str = /datum/greyscale_config/gun_inhand/t90, - slot_r_hand_str = /datum/greyscale_config/gun_inhand/r_hand/t90, - slot_back_str = /datum/greyscale_config/worn_gun/t90, - slot_s_store_str = /datum/greyscale_config/worn_gun/suit/t90, - ) attachable_allowed = list( /obj/item/attachable/suppressor, /obj/item/attachable/reddot, @@ -131,10 +124,9 @@ /obj/item/attachable/magnetic_harness, /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 15,"rail_x" = 22, "rail_y" = 22, "under_x" = 17, "under_y" = 15, "stock_x" = 24, "stock_y" = 10) actions_types = list(/datum/action/item_action/aim_mode) @@ -147,8 +139,6 @@ scatter_unwielded = 8 aim_slowdown = 0.2 burst_amount = 0 - upper_akimbo_accuracy = 4 - lower_akimbo_accuracy = 2 placed_overlay_iconstate = "t90" @@ -161,13 +151,69 @@ /obj/item/weapon/gun/smg/standard_smg/tactical starting_attachment_types = list(/obj/item/attachable/compensator, /obj/item/attachable/reddot, /obj/item/attachable/lasersight) +//------------------------------------------------------- +//Da slapper. + +/obj/item/weapon/gun/smg/standard_heavysmg + name = "\improper SMG-45 heavy submachinegun" + desc = "The SMG-45 is a heavier than usual subgun used by the TerraGov Marine Corps. Best known for carrying a punch within a small package. It's usually carried by troops who want a lightweight firearm to rush with while beating a mean punch, however it struggles at range. It uses 10x20mm caseless rounds." + icon = 'icons/obj/items/guns/submachineguns64.dmi' + icon_state = "t45" + item_state = "t45" + caliber = CALIBER_45ACP //codex + max_shells = 40 //codex + fire_sound = 'sound/weapons/guns/fire/skorpevo.ogg' + unload_sound = 'sound/weapons/guns/interact/mp5_unload.ogg' + reload_sound = 'sound/weapons/guns/interact/mp5_reload.ogg' + equip_slot_flags = ITEM_SLOT_BACK + type_of_casings = null + default_ammo_type = /obj/item/ammo_magazine/smg/standard_heavysmg + allowed_ammo_types = list( + /obj/item/ammo_magazine/smg/standard_heavysmg, + /obj/item/ammo_magazine/smg/standard_heavysmg/squashhead, + ) + attachable_allowed = list( + /obj/item/attachable/suppressor, + /obj/item/attachable/reddot, + /obj/item/attachable/verticalgrip, + /obj/item/attachable/compensator, + /obj/item/attachable/lasersight, + /obj/item/attachable/flashlight, + /obj/item/attachable/motiondetector, + /obj/item/attachable/flashlight/under, + /obj/item/attachable/extended_barrel, + /obj/item/attachable/heavy_barrel, + /obj/item/attachable/scope/mini, + /obj/item/attachable/magnetic_harness, + /obj/item/attachable/burstfire_assembly, + /obj/item/weapon/gun/pistol/plasma_pistol, + /obj/item/weapon/gun/shotgun/combat/masterkey, + /obj/item/weapon/gun/flamer/mini_flamer, + /obj/item/weapon/gun/grenade_launcher/underslung, + /obj/item/attachable/gyro, + ) + + attachable_offset = list("muzzle_x" = 43, "muzzle_y" = 19,"rail_x" = 22, "rail_y" = 23, "under_x" = 32, "under_y" = 14, "stock_x" = 24, "stock_y" = 16) + actions_types = list(/datum/action/item_action/aim_mode) + aim_fire_delay = 0.1 SECONDS + + aim_slowdown = 0.25 + accuracy_mult = 1.15 + accuracy_mult_unwielded = 0.85 + fire_delay = 0.25 SECONDS + burst_delay = 0.2 SECONDS + burst_amount = 3 + scatter = 2 + scatter_unwielded = 11 + akimbo_additional_delay = 0.4 + //------------------------------------------------------- //M-25 SMG /obj/item/weapon/gun/smg/m25 name = "\improper SMG-25 submachinegun" desc = "The RivArms SMG-25 submachinegun, an update to a classic design. A light firearm capable of effective one-handed use that is ideal for close to medium range engagements. Uses 10x20mm rounds in a high capacity magazine." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/submachineguns64.dmi' icon_state = "m25" item_state = "m25" caliber = CALIBER_10X20_CASELESS //codex @@ -175,7 +221,7 @@ fire_sound = 'sound/weapons/guns/fire/mp5.ogg' unload_sound = 'sound/weapons/guns/interact/mp5_unload.ogg' reload_sound = 'sound/weapons/guns/interact/mp5_reload.ogg' - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK type_of_casings = null default_ammo_type = /obj/item/ammo_magazine/smg/m25 allowed_ammo_types = list( @@ -213,8 +259,6 @@ aim_slowdown = 0.15 burst_amount = 3 akimbo_additional_delay = 0.4 - upper_akimbo_accuracy = 5 - lower_akimbo_accuracy = 3 damage_falloff_mult = 0.9 /obj/item/weapon/gun/smg/m25/holstered @@ -223,6 +267,12 @@ /obj/item/weapon/gun/smg/m25/magharness starting_attachment_types = list(/obj/item/attachable/magnetic_harness, /obj/item/attachable/compensator, /obj/item/attachable/gyro) +/obj/item/weapon/gun/smg/m25/vgrip + starting_attachment_types = list(/obj/item/attachable/magnetic_harness, /obj/item/attachable/compensator, /obj/item/attachable/verticalgrip) + +/obj/item/weapon/gun/smg/m25/plasma + starting_attachment_types = list(/obj/item/attachable/magnetic_harness, /obj/item/attachable/compensator, /obj/item/weapon/gun/pistol/plasma_pistol) + /obj/item/weapon/gun/smg/m25/elite name = "\improper SMG-25B2 submachinegun" desc = "The RivArms SMG-25 submachinegun, B2 variant. Has an integrated barrel charger. This reliable weapon fires armor piercing 10x20mm rounds and is used by elite troops." @@ -244,7 +294,7 @@ /obj/item/attachable/gyro, ) - flags_item_map_variant = NONE + item_map_variant_flags = NONE burst_amount = 4 accuracy_mult = 1.1 @@ -301,12 +351,12 @@ /obj/item/weapon/gun/smg/skorpion name = "\improper CZ-81 submachinegun" desc = "A robust, 20th century firearm that's a combination of pistol and submachinegun. Fires .32ACP caliber rounds from a 20 round magazine." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/submachineguns64.dmi' icon_state = "skorpion" item_state = "skorpion" caliber = CALIBER_32ACP //codex max_shells = 20 //codex - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_NORMAL fire_sound = 'sound/weapons/guns/fire/skorpion.ogg' unload_sound = 'sound/weapons/guns/interact/skorpion_unload.ogg' @@ -331,7 +381,7 @@ scatter_unwielded = 6 fire_delay = 0.1 SECONDS aim_slowdown = 0.3 - wield_delay = 0.3 SECONDS + wield_delay = 0.5 SECONDS /obj/item/weapon/gun/smg/skorpion/mag_harness starting_attachment_types = list(/obj/item/attachable/foldable/skorpion_stock, /obj/item/attachable/magnetic_harness) @@ -342,12 +392,12 @@ /obj/item/weapon/gun/smg/ppsh name = "\improper PPSh-17b submachinegun" desc = "The PPSh-17b or \"Papasha\" is replica of a 20th century USSR model submachinegun that many terrorist organizations had copied all over the years. Despite its small-hitting firepower, its reliablity, extreme longevity and high firepower rate proves useful for the hands of the user." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/submachineguns64.dmi' icon_state = "ppsh" item_state = "ppsh" caliber = CALIBER_762X25 //codex max_shells = 42 //codex - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK fire_sound = 'sound/weapons/guns/fire/ppsh.ogg' dry_fire_sound = 'sound/weapons/guns/fire/ppsh_empty.ogg' unload_sound = 'sound/weapons/guns/interact/ppsh_unload.ogg' @@ -374,7 +424,7 @@ /obj/item/attachable/foldable/bipod, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES attachable_offset = list("muzzle_x" = 38, "muzzle_y" = 19,"rail_x" = 13, "rail_y" = 21, "under_x" = 26, "under_y" = 15, "stock_x" = 19, "stock_y" = 13) actions_types = list(/datum/action/item_action/aim_mode) aim_fire_delay = 0.15 SECONDS @@ -423,7 +473,7 @@ scatter = 0 scatter_unwielded = 4 aim_slowdown = 0.15 - wield_delay = 0.2 SECONDS + wield_delay = 0.4 SECONDS /obj/item/weapon/gun/smg/uzi/mag_harness default_ammo_type = /obj/item/ammo_magazine/smg/uzi/extended @@ -436,11 +486,11 @@ name = "\improper V-21 submachinegun" desc = "The V-21 is the principal submachinegun used by the Sons of Mars, designed to be used effectively one or two handed with a variable rate of fire. When fired at full speed it's performance is severely degraded unless used properly wielded, while the lower rate of fire can still be effectively used one handed when necessary. It uses 10x20mm caseless rounds." icon_state = "v21" - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/submachineguns64.dmi' item_state = "v21" caliber = CALIBER_10X20_CASELESS max_shells = 50 - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK type_of_casings = null default_ammo_type = /obj/item/ammo_magazine/smg/som allowed_ammo_types = list( @@ -471,7 +521,7 @@ fire_delay = 0.15 SECONDS aim_slowdown = 0.15 - wield_delay = 0.4 SECONDS + wield_delay = 0.6 SECONDS accuracy_mult = 1.05 accuracy_mult_unwielded = 0.9 @@ -490,8 +540,6 @@ burst_scatter_mult = 15 akimbo_additional_delay = 0.7 - upper_akimbo_accuracy = 5 - lower_akimbo_accuracy = 3 /obj/item/weapon/gun/smg/som/scout starting_attachment_types = list( @@ -534,12 +582,12 @@ /obj/item/weapon/gun/smg/icc_machinepistol name = "\improper PL-38 machinepistol" desc = "The PL-38 is a machinepistol used by rearline ICCAF personnel, it presents solid performance at longer ranges in a compact package, although suffers due to a slow rate of fire for its class. It uses 10x20mm caseless rounds." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/submachineguns64.dmi' icon_state = "pl38" item_state = "pl38" item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_64.dmi', + slot_l_hand_str = 'icons/mob/inhands/guns/submachineguns_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/submachineguns_right_64.dmi', ) inhand_x_dimension = 64 @@ -548,7 +596,7 @@ caliber = CALIBER_10X20_CASELESS //codex gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_AUTOBURST) max_shells = 32 //codex - flags_equip_slot = ITEM_SLOT_BACK|ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT type_of_casings = null default_ammo_type = /obj/item/ammo_magazine/smg/icc_machinepistol allowed_ammo_types = list(/obj/item/ammo_magazine/smg/icc_machinepistol, /obj/item/ammo_magazine/smg/icc_machinepistol/hp) @@ -587,10 +635,7 @@ scatter = 2 scatter_unwielded = 5 aim_slowdown = 0.2 - wield_delay = 0.35 SECONDS - - upper_akimbo_accuracy = 5 - lower_akimbo_accuracy = 3 + wield_delay = 0.55 SECONDS /obj/item/weapon/gun/smg/icc_machinepistol/medic starting_attachment_types = list(/obj/item/attachable/foldable/icc_machinepistol, /obj/item/attachable/magnetic_harness, /obj/item/attachable/verticalgrip, /obj/item/attachable/extended_barrel) @@ -601,12 +646,12 @@ /obj/item/weapon/gun/smg/icc_pdw name = "\improper L-40 personal defense weapon" desc = "The L-40 is the primer ICCAF submachinegun, generally termed as a 'PDW' due to its armor-piercing high velocity round, while it has adequate ranged performance, it is mostly tuned for at close quarters combat. It uses 4.6mm high velocity caseless rounds." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/submachineguns64.dmi' icon_state = "l40" item_state = "l40" item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_64.dmi', + slot_l_hand_str = 'icons/mob/inhands/guns/submachineguns_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/submachineguns_right_64.dmi', ) inhand_x_dimension = 64 @@ -614,7 +659,7 @@ caliber = CALIBER_46X30 max_shells = 45 - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK type_of_casings = null default_ammo_type = /obj/item/ammo_magazine/smg/icc_pdw allowed_ammo_types = list(/obj/item/ammo_magazine/smg/icc_pdw) @@ -650,7 +695,7 @@ burst_amount = 1 fire_delay = 0.15 SECONDS aim_slowdown = 0.25 - wield_delay = 0.4 SECONDS + wield_delay = 0.6 SECONDS accuracy_mult = 1.05 accuracy_mult_unwielded = 0.9 diff --git a/code/modules/projectiles/guns/specialist.dm b/code/modules/projectiles/guns/specialist.dm index 9d23e168cf874..f070a573539c0 100644 --- a/code/modules/projectiles/guns/specialist.dm +++ b/code/modules/projectiles/guns/specialist.dm @@ -17,18 +17,23 @@ Because this parent type did not exist Note that this means that snipers will have a slowdown of 3, due to the scope */ /obj/item/weapon/gun/rifle/sniper + icon = 'icons/obj/items/guns/marksman.dmi' aim_slowdown = 1 gun_skill_category = SKILL_RIFLES - wield_delay = 1 SECONDS + wield_delay = 1.2 SECONDS //Pow! Headshot /obj/item/weapon/gun/rifle/sniper/antimaterial name = "\improper SR-26 scoped rifle" desc = "The SR-26 is an IFF capable sniper rifle which is mostly used by long range marksmen. It excels in long-range combat situations and support sniping. It has a laser designator installed, and the scope itself has IFF integrated into it. Uses specialized 10x28 caseless rounds made to work with the guns odd IFF-scope system. \nIt has an integrated Target Marker and a Laser Targeting system.\n\"Peace Through Superior Firepower\"." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/special64.dmi' icon_state = "t26" item_state = "t26" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/special_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/special_right_1.dmi', + ) max_shells = 15 //codex caliber = CALIBER_10X28 fire_sound = 'sound/weapons/guns/fire/sniper.ogg' @@ -42,12 +47,11 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/ammo_magazine/sniper/flak, ) force = 12 - wield_delay = 12 //Ends up being 1.6 seconds due to scope + wield_delay = 1.4 SECONDS attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 12, "rail_y" = 20, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) var/targetmarker_on = FALSE var/targetmarker_primed = FALSE var/mob/living/carbon/laser_target = null - var/image/LT = null var/obj/item/binoculars/tactical/integrated_laze = null attachable_allowed = list( /obj/item/attachable/foldable/bipod, @@ -55,10 +59,8 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/attachable/scope/antimaterial, /obj/item/attachable/buildasentry, /obj/item/attachable/sniperbarrel, - /obj/item/attachable/scope/pmc, - /obj/item/attachable/shoulder_mount, ) - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_IFF|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_IFF|GUN_SMOKE_PARTICLES starting_attachment_types = list(/obj/item/attachable/scope/antimaterial, /obj/item/attachable/sniperbarrel) fire_delay = 2.5 SECONDS @@ -74,7 +76,6 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/weapon/gun/rifle/sniper/antimaterial/Initialize(mapload) . = ..() - LT = image("icon" = 'icons/obj/items/projectiles.dmi',"icon_state" = "sniper_laser", "layer" =-LASER_LAYER) integrated_laze = new(src) /obj/item/weapon/gun/rifle/sniper/antimaterial/do_fire(obj/object_to_fire) @@ -89,7 +90,24 @@ Note that this means that snipers will have a slowdown of 3, due to the scope if(!QDELETED(laser_target)) target = laser_target return ..() +/* + * This override exists due to the fact the mouseup signal calls start_fire() + * which tries to get a turf from the clickcatcher, which ends up with the COMSIG_QDELETING signal + * getting registered on that turf, which we do not care about if we are lazing. + * The issue with this is that the signal gets registered to the turf and then gets overriden + * if the gun user ever clicks that turf again (also leaves hanging signals because they dont unregister) + * Shouldn't mess with reset_fire +*/ +/obj/item/weapon/gun/rifle/sniper/antimaterial/set_target(atom/object) + if(laser_target) + return ..(laser_target) + return ..() +/obj/item/weapon/gun/rifle/sniper/antimaterial/do_fire(obj/object_to_fire) + if(laser_target) + var/obj/projectile/projectile_to_fire = object_to_fire + projectile_to_fire.projectile_behavior_flags |= PROJECTILE_PRECISE_TARGET + return ..() /obj/item/weapon/gun/rifle/sniper/antimaterial/InterceptClickOn(mob/user, params, atom/object) var/list/pa = params2list(params) @@ -102,27 +120,18 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /atom/proc/apply_laser() return FALSE -/mob/living/carbon/human/apply_laser() - overlays_standing[LASER_LAYER] = image("icon" = 'icons/obj/items/projectiles.dmi',"icon_state" = "sniper_laser", "layer" =-LASER_LAYER) +/mob/living/carbon/apply_laser() + overlays_standing[LASER_LAYER] = image('icons/obj/items/projectiles.dmi', icon_state = "sniper_laser", layer =-LASER_LAYER) apply_overlay(LASER_LAYER) return TRUE -/mob/living/carbon/xenomorph/apply_laser() - overlays_standing[X_LASER_LAYER] = image("icon" = 'icons/obj/items/projectiles.dmi',"icon_state" = "sniper_laser", "layer" =-X_LASER_LAYER) - apply_overlay(X_LASER_LAYER) - return TRUE - /mob/living/carbon/proc/remove_laser() return FALSE -/mob/living/carbon/human/remove_laser() +/mob/living/carbon/remove_laser() remove_overlay(LASER_LAYER) return TRUE -/mob/living/carbon/xenomorph/remove_laser() - remove_overlay(X_LASER_LAYER) - return TRUE - /obj/item/weapon/gun/rifle/sniper/antimaterial/unique_action(mob/user) if(!targetmarker_primed && !targetmarker_on) return laser_on(user) @@ -135,7 +144,7 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/weapon/gun/rifle/sniper/antimaterial/dropped() laser_off() - . = ..() + return ..() /obj/item/weapon/gun/rifle/sniper/antimaterial/process() var/obj/item/attachable/scope = LAZYACCESS(attachments_by_slot, ATTACHMENT_SLOT_RAIL) @@ -146,11 +155,7 @@ Note that this means that snipers will have a slowdown of 3, due to the scope if(!istype(user)) laser_off() return - if(!laser_target) - laser_off(user) - playsound(user,'sound/machines/click.ogg', 25, 1) - return - if(!line_of_sight(user, laser_target, 24)) + if(laser_target && !line_of_sight(user, laser_target, 24)) laser_off() to_chat(user, span_danger("You lose sight of your target!")) playsound(user,'sound/machines/click.ogg', 25, 1) @@ -161,49 +166,31 @@ Note that this means that snipers will have a slowdown of 3, due to the scope if(!scope.zoom && (targetmarker_on || targetmarker_primed) ) laser_off(user) -/atom/proc/sniper_target(atom/A) - return FALSE - -/obj/item/weapon/gun/rifle/sniper/antimaterial/sniper_target(atom/A) - if(!laser_target) - return FALSE - if(A == laser_target) - return laser_target - else - return TRUE +/obj/item/weapon/gun/rifle/sniper/antimaterial/on_unzoom(mob/user) + . = ..() + if(!targetmarker_primed && !laser_target) + return + laser_off(user) /obj/item/weapon/gun/rifle/sniper/antimaterial/proc/activate_laser_target(atom/target, mob/living/user) laser_target = target to_chat(user, span_danger("You focus your target marker on [target]!")) targetmarker_primed = FALSE targetmarker_on = TRUE - RegisterSignal(src, COMSIG_PROJ_SCANTURF, PROC_REF(scan_turf_for_target)) START_PROCESSING(SSobj, src) accuracy_mult += 0.50 //We get a big accuracy bonus vs the lasered target /obj/item/weapon/gun/rifle/sniper/antimaterial/proc/deactivate_laser_target() - UnregisterSignal(src, COMSIG_PROJ_SCANTURF) laser_target.remove_laser() laser_target = null - -/obj/item/weapon/gun/rifle/sniper/antimaterial/proc/scan_turf_for_target(datum/source, turf/target_turf) - SIGNAL_HANDLER - if(QDELETED(laser_target) || !isturf(laser_target.loc)) - return NONE - if(get_turf(laser_target) == target_turf) - return COMPONENT_PROJ_SCANTURF_TARGETFOUND - return COMPONENT_PROJ_SCANTURF_TURFCLEAR - - /obj/item/weapon/gun/rifle/sniper/antimaterial/proc/laser_on(mob/user) var/obj/item/attachable/scope = LAZYACCESS(attachments_by_slot, ATTACHMENT_SLOT_RAIL) if(!scope.zoom) //Can only use and prime the laser targeter when zoomed. to_chat(user, span_warning("You must be zoomed in to use your target marker!")) return TRUE targetmarker_primed = TRUE //We prime the target laser - RegisterSignal(user, COMSIG_ITEM_UNZOOM, PROC_REF(laser_off)) if(user?.client) user.client.click_intercept = src to_chat(user, span_notice("You activate your target marker and take careful aim.")) @@ -219,8 +206,6 @@ Note that this means that snipers will have a slowdown of 3, due to the scope STOP_PROCESSING(SSobj, src) targetmarker_on = FALSE targetmarker_primed = FALSE - if(user) - UnregisterSignal(user, COMSIG_ITEM_UNZOOM) if(user?.client) user.client.click_intercept = null to_chat(user, span_notice("You deactivate your target marker.")) @@ -233,6 +218,10 @@ Note that this means that snipers will have a slowdown of 3, due to the scope desc = "A high end mag-rail heavy sniper rifle from Nanotrasen chambered in the heaviest ammo available, 10x99mm Caseless." icon_state = "m42c" item_state = "m42c" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_1.dmi', + ) max_shells = 6 //codex caliber = CALIBER_10X99 fire_sound = 'sound/weapons/guns/fire/sniper_heavy.ogg' @@ -244,9 +233,9 @@ Note that this means that snipers will have a slowdown of 3, due to the scope allowed_ammo_types = list(/obj/item/ammo_magazine/sniper/elite) force = 17 attachable_allowed = list() - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_IFF|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_IFF|GUN_SMOKE_PARTICLES attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 18,"rail_x" = 15, "rail_y" = 19, "under_x" = 20, "under_y" = 15, "stock_x" = 20, "stock_y" = 15) - flags_item_map_variant = NONE + item_map_variant_flags = NONE attachable_allowed = list( /obj/item/attachable/foldable/bipod, /obj/item/attachable/lasersight, @@ -268,10 +257,10 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/weapon/gun/rifle/sniper/svd name = "\improper SR-33 Dragunov sniper rifle" desc = "A semiautomatic sniper rifle, famed for it's marksmanship, and is built from the ground up for it. Fires 7.62x54mmR rounds." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/marksman64.dmi' item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_64.dmi', + slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_64.dmi', ) inhand_x_dimension = 64 @@ -297,7 +286,7 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/attachable/scope/slavic, ) - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 17,"rail_x" = 22, "rail_y" = 21, "under_x" = 32, "under_y" = 14, "stock_x" = 20, "stock_y" = 14) starting_attachment_types = list(/obj/item/attachable/scope/slavic) actions_types = list(/datum/action/item_action/aim_mode) @@ -309,7 +298,7 @@ Note that this means that snipers will have a slowdown of 3, due to the scope accuracy_mult = 1 scatter = -5 recoil = -1 - wield_delay = 1.8 SECONDS + wield_delay = 2 SECONDS movement_acc_penalty_mult = 6 @@ -319,9 +308,13 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/weapon/gun/rifle/tx8 name = "\improper BR-8 scout rifle" desc ="The BR-8 is a light specialized scout rifle, mostly used by light infantry and scouts. It's designed to be useable at all ranges by being very adaptable to different situations due to the ability to use different ammo types. Has IFF. Takes specialized overpressured 10x28mm rounds." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/marksman64.dmi' icon_state = "tx8" item_state = "tx8" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_1.dmi', + ) max_shells = 25 //codex muzzleflash_iconstate = "muzzle_flash_medium" caliber = CALIBER_10X28_CASELESS //codex @@ -362,9 +355,9 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/weapon/gun/grenade_launcher/underslung, ) - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_IFF|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_IFF|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) - gun_skill_category = SKILL_FIREARMS + gun_skill_category = SKILL_RIFLES attachable_offset = list("muzzle_x" = 44, "muzzle_y" = 18,"rail_x" = 18, "rail_y" = 24, "under_x" = 31, "under_y" = 15, "stock_x" = 24, "stock_y" = 13) @@ -372,7 +365,6 @@ Note that this means that snipers will have a slowdown of 3, due to the scope burst_amount = 1 accuracy_mult = 1.2 scatter = -3 - recoil = 2 /obj/item/weapon/gun/rifle/tx8/scout starting_attachment_types = list( @@ -387,9 +379,13 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/weapon/gun/minigun name = "\improper MG-100 Vindicator Minigun" desc = "A six barreled rotary machine gun, The ultimate in man-portable firepower, capable of laying down high velocity armor piercing rounds this thing will no doubt pack a punch.. If you don't kill all your friends with it, you can use the stablizing system of the Powerpack to fire aimed fire, but you'll move incredibly slowly." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/special64.dmi' icon_state = "minigun" item_state = "minigun" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/special_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/special_right_1.dmi', + ) fire_animation = "minigun_fire" max_shells = 500 //codex caliber = CALIBER_762X51 //codex @@ -402,10 +398,10 @@ Note that this means that snipers will have a slowdown of 3, due to the scope allowed_ammo_types = list(/obj/item/ammo_magazine/minigun_powerpack) w_class = WEIGHT_CLASS_HUGE force = 20 - wield_delay = 12 - gun_skill_category = SKILL_FIREARMS + wield_delay = 1.2 SECONDS + gun_skill_category = SKILL_HEAVY_WEAPONS aim_slowdown = 0.8 - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) attachable_allowed = list(/obj/item/attachable/flashlight, /obj/item/attachable/magnetic_harness) attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 19,"rail_x" = 10, "rail_y" = 21, "under_x" = 24, "under_y" = 14, "stock_x" = 24, "stock_y" = 12) @@ -417,20 +413,19 @@ Note that this means that snipers will have a slowdown of 3, due to the scope windup_delay = 0.4 SECONDS windup_sound = 'sound/weapons/guns/fire/tank_minigun_start.ogg' scatter = 5 - recoil = 2 recoil_unwielded = 4 damage_falloff_mult = 0.5 movement_acc_penalty_mult = 4 - obj_flags = AUTOBALANCE_CHECK + item_flags = TWOHANDED|AUTOBALANCE_CHECK /obj/item/weapon/gun/minigun/Initialize(mapload) . = ..() - if(obj_flags & AUTOBALANCE_CHECK) + if(item_flags & AUTOBALANCE_CHECK) SSmonitor.stats.miniguns_in_use += src /obj/item/weapon/gun/minigun/Destroy() - if(obj_flags & AUTOBALANCE_CHECK) + if(item_flags & AUTOBALANCE_CHECK) SSmonitor.stats.miniguns_in_use -= src return ..() @@ -438,7 +433,33 @@ Note that this means that snipers will have a slowdown of 3, due to the scope starting_attachment_types = list(/obj/item/attachable/magnetic_harness) /obj/item/weapon/gun/minigun/valhalla - obj_flags = NONE + item_flags = TWOHANDED + +//A minigun that requires only one hand. Meant for use with vehicles +/obj/item/weapon/gun/minigun/one_handed + name = "\improper Modified MG-100 Vindicator Minigun" + desc = "A minigun that's been modified to be used one handed. Intended for use mounted on a vehicle." + + max_shells = 1000 //codex + reload_sound = 'sound/weapons/guns/interact/working_the_bolt.ogg' + default_ammo_type = /obj/item/ammo_magazine/minigun_wheelchair + allowed_ammo_types = list(/obj/item/ammo_magazine/minigun_wheelchair) + item_flags = NONE + equip_slot_flags = NONE + gun_features_flags = GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + reciever_flags = AMMO_RECIEVER_CYCLE_ONLY_BEFORE_FIRE|AMMO_RECIEVER_MAGAZINES + gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) + actions_types = list() + attachable_allowed = list() + + recoil_unwielded = 0 + + windup_delay = 0.7 SECONDS + movement_acc_penalty_mult = 0 + +//So that it displays the minigun on the mob as if always wielded +/obj/item/weapon/gun/minigun/one_handed/update_item_state() + item_state = "[base_gun_icon]_w" // SG minigun @@ -451,8 +472,8 @@ Note that this means that snipers will have a slowdown of 3, due to the scope max_shells = 1000 //codex caliber = CALIBER_10x26_CASELESS //codex allowed_ammo_types = list(/obj/item/ammo_magazine/minigun_powerpack/smartgun) - wield_delay = 1.5 SECONDS - flags_gun_features = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_IFF|GUN_SMOKE_PARTICLES + wield_delay = 1.7 SECONDS + gun_features_flags = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_IFF|GUN_SMOKE_PARTICLES gun_skill_category = SKILL_SMARTGUN attachable_allowed = list(/obj/item/attachable/flashlight, /obj/item/attachable/magnetic_harness, /obj/item/attachable/motiondetector) attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 19,"rail_x" = 19, "rail_y" = 29, "under_x" = 24, "under_y" = 14, "stock_x" = 24, "stock_y" = 12) //Only has rail attachments so only the rail variables are properly aligned @@ -461,10 +482,9 @@ Note that this means that snipers will have a slowdown of 3, due to the scope fire_delay = 0.1 SECONDS scatter = -5 - recoil = 0 recoil_unwielded = 4 - obj_flags = NONE + item_flags = TWOHANDED /obj/item/weapon/gun/minigun/smart_minigun/motion_detector starting_attachment_types = list(/obj/item/attachable/motiondetector) @@ -477,21 +497,23 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/weapon/gun/rifle/pepperball name = "\improper PB-12 pepperball gun" desc = "The PB-12 is ostensibly riot control device used by the TGMC in spiffy colors, working through a SAN ball that sends a short acting neutralizing chemical to knock out it's target, or weaken them. Guranteed to work on just about everything. Uses SAN Ball Holders as magazines." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/special64.dmi' icon_state = "pepperball" item_state = "pepperball" - flags_equip_slot = ITEM_SLOT_BACK|ITEM_SLOT_BELT + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/special_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/special_right_1.dmi', + ) + equip_slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT max_shells = 100 //codex caliber = CALIBER_PEPPERBALL fire_sound = "gun_fb12" // idk why i called it "fb-12", ah too late now default_ammo_type = /obj/item/ammo_magazine/rifle/pepperball allowed_ammo_types = list(/obj/item/ammo_magazine/rifle/pepperball) force = 30 // two shots weeds as it has no bayonet - wield_delay = 0.5 SECONDS // Very fast to put up. + wield_delay = 0.7 SECONDS // Very fast to put up. attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 12, "rail_y" = 20, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) attachable_allowed = list( - /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, /obj/item/attachable/flashlight, /obj/item/weapon/gun/flamer/hydro_cannon/pepperball, /obj/item/attachable/magnetic_harness, @@ -504,12 +526,11 @@ Note that this means that snipers will have a slowdown of 3, due to the scope aim_fire_delay = 0.1 SECONDS aim_speed_modifier = 0.1 - flags_gun_features = GUN_AMMO_COUNTER + gun_features_flags = GUN_AMMO_COUNTER fire_delay = 0.1 SECONDS burst_amount = 1 accuracy_mult = 1 - recoil = 0 accuracy_mult_unwielded = 0.75 scatter = -1 scatter_unwielded = 2 @@ -536,7 +557,7 @@ Note that this means that snipers will have a slowdown of 3, due to the scope starting_attachment_types = list() actions_types = list() gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) - flags_gun_features = GUN_IS_ATTACHMENT | GUN_WIELDED_FIRING_ONLY | GUN_ATTACHMENT_FIRE_ONLY | GUN_AMMO_COUNTER + gun_features_flags = GUN_IS_ATTACHMENT | GUN_WIELDED_FIRING_ONLY | GUN_ATTACHMENT_FIRE_ONLY | GUN_AMMO_COUNTER fire_delay = 0.2 SECONDS attach_delay = 3 SECONDS detach_delay = 3 SECONDS @@ -567,37 +588,40 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/weapon/gun/launcher/rocket name = "\improper RL-5 rocket launcher" desc = "The RL-5 is the primary anti-armor used around the galaxy. Used to take out light-tanks and enemy structures, the RL-5 rocket launcher is a dangerous weapon with a variety of combat uses. Uses a variety of 84mm rockets." + icon = 'icons/obj/items/guns/special.dmi' icon_state = "m5" item_state = "m5" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/special_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/special_right_1.dmi', + ) max_shells = 1 //codex caliber = CALIBER_84MM //codex load_method = SINGLE_CASING //codex default_ammo_type = /obj/item/ammo_magazine/rocket allowed_ammo_types = list(/obj/item/ammo_magazine/rocket) - flags_equip_slot = NONE + equip_slot_flags = NONE w_class = WEIGHT_CLASS_HUGE force = 15 - wield_delay = 12 + wield_delay = 1.2 SECONDS wield_penalty = 1.6 SECONDS aim_slowdown = 1.75 general_codex_key = "explosive weapons" attachable_allowed = list( /obj/item/attachable/magnetic_harness, /obj/item/attachable/scope/mini, - /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, ) - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES reciever_flags = AMMO_RECIEVER_MAGAZINES|AMMO_RECIEVER_AUTO_EJECT|AMMO_RECIEVER_AUTO_EJECT_LOCKED - gun_skill_category = SKILL_FIREARMS + gun_skill_category = SKILL_HEAVY_WEAPONS fire_sound = 'sound/weapons/guns/fire/launcher.ogg' dry_fire_sound = 'sound/weapons/guns/fire/launcher_empty.ogg' reload_sound = 'sound/weapons/guns/interact/launcher_reload.ogg' unload_sound = 'sound/weapons/guns/interact/launcher_reload.ogg' attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 6, "rail_y" = 19, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) fire_delay = 1 SECONDS - recoil = 3 + recoil = 1 scatter = -100 placed_overlay_iconstate = "sadar" windup_delay = 0.4 SECONDS @@ -635,12 +659,12 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/weapon/gun/launcher/rocket/sadar name = "\improper RL-152 sadar rocket launcher" desc = "The RL-152 is the primary anti-armor weapon of the TGMC. Used to take out light-tanks and enemy structures, the RL-152 rocket launcher is a dangerous weapon with a variety of combat uses. Uses a variety of 84mm rockets." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/special64.dmi' icon_state = "sadar" item_state = "sadar" item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_64.dmi', + slot_l_hand_str = 'icons/mob/inhands/guns/special_left_64.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/special_right_64.dmi', slot_s_store_str = 'icons/mob/items_suit_slot_64.dmi', ) inhand_x_dimension = 64 @@ -657,10 +681,10 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/ammo_magazine/rocket/sadar/wp, /obj/item/ammo_magazine/rocket/sadar/wp/unguided, ) - flags_equip_slot = NONE + equip_slot_flags = NONE w_class = WEIGHT_CLASS_HUGE force = 15 - wield_delay = 12 + wield_delay = 1.2 SECONDS wield_penalty = 1.6 SECONDS aim_slowdown = 1.75 general_codex_key = "explosive weapons" @@ -669,27 +693,26 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/attachable/buildasentry, ) - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SHOWS_LOADED|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SHOWS_LOADED|GUN_SMOKE_PARTICLES - gun_skill_category = SKILL_FIREARMS + gun_skill_category = SKILL_HEAVY_WEAPONS dry_fire_sound = 'sound/weapons/guns/fire/launcher_empty.ogg' reload_sound = 'sound/weapons/guns/interact/launcher_reload.ogg' unload_sound = 'sound/weapons/guns/interact/launcher_reload.ogg' attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 14, "rail_y" = 21, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) fire_delay = 1 SECONDS - recoil = 3 scatter = -100 - obj_flags = AUTOBALANCE_CHECK + item_flags = TWOHANDED|AUTOBALANCE_CHECK /obj/item/weapon/gun/launcher/rocket/sadar/Initialize(mapload, spawn_empty) . = ..() - if(obj_flags & AUTOBALANCE_CHECK) + if(item_flags & AUTOBALANCE_CHECK) SSmonitor.stats.sadar_in_use += src /obj/item/weapon/gun/launcher/rocket/sadar/Destroy() - if(obj_flags & AUTOBALANCE_CHECK) + if(item_flags & AUTOBALANCE_CHECK) SSmonitor.stats.sadar_in_use -= src return ..() @@ -700,7 +723,7 @@ Note that this means that snipers will have a slowdown of 3, due to the scope gun_user?.record_war_crime() /obj/item/weapon/gun/launcher/rocket/sadar/valhalla - obj_flags = NONE + item_flags = TWOHANDED //------------------------------------------------------- //M5 RPG'S MEAN FUCKING COUSIN @@ -718,7 +741,6 @@ Note that this means that snipers will have a slowdown of 3, due to the scope aim_slowdown = 2.75 attachable_allowed = list( /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, ) general_codex_key = "explosive weapons" @@ -737,8 +759,6 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/weapon/gun/launcher/rocket/m57a4/deathsquad attachable_allowed = list( - /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, /obj/item/attachable/magnetic_harness, ) starting_attachment_types = list(/obj/item/attachable/magnetic_harness) @@ -760,7 +780,7 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/weapon/gun/launcher/rocket/recoillessrifle name = "\improper RL-160 recoilless rifle" desc = "The RL-160 recoilless rifle is a long range explosive ordanance device used by the TGMC used to fire explosive shells at far distances. Uses a variety of 67mm shells designed for various purposes." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/special64.dmi' icon_state = "t160" item_state = "t160" max_shells = 1 //codex @@ -777,25 +797,21 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/ammo_magazine/rocket/recoilless/heat, /obj/item/ammo_magazine/rocket/recoilless/heam, ) - flags_equip_slot = NONE + equip_slot_flags = NONE w_class = WEIGHT_CLASS_HUGE force = 15 wield_delay = 1 SECONDS - recoil = 1 wield_penalty = 1.6 SECONDS aim_slowdown = 1 general_codex_key = "explosive weapons" attachable_allowed = list( /obj/item/attachable/magnetic_harness, /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, ) - gun_skill_category = SKILL_FIREARMS attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 15, "rail_y" = 19, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) fire_delay = 1 SECONDS - recoil = 3 scatter = -100 /obj/item/weapon/gun/launcher/rocket/recoillessrifle/low_impact @@ -810,7 +826,7 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/weapon/gun/launcher/rocket/oneuse name = "\improper RL-72 disposable rocket launcher" desc = "This is the premier disposable rocket launcher used throughout the galaxy, it cannot be reloaded or unloaded on the field. This one fires an 84mm explosive rocket. Spacebar to shorten or extend it to make it storeable or fireable, respectively." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/special64.dmi' icon_state = "t72" item_state = "t72" max_shells = 1 //codex @@ -820,8 +836,8 @@ Note that this means that snipers will have a slowdown of 3, due to the scope default_ammo_type = /obj/item/ammo_magazine/rocket/oneuse allowed_ammo_types = list(/obj/item/ammo_magazine/rocket/oneuse) reciever_flags = AMMO_RECIEVER_CLOSED|AMMO_RECIEVER_MAGAZINES|AMMO_RECIEVER_AUTO_EJECT_LOCKED - flags_equip_slot = ITEM_SLOT_BELT - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_SMOKE_PARTICLES + equip_slot_flags = ITEM_SLOT_BELT + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_DEPLOYED_FIRE_ONLY|GUN_SMOKE_PARTICLES attachable_allowed = list(/obj/item/attachable/magnetic_harness) /// Indicates extension state of the launcher. True: Fireable and unable to fit in storage. False: Able to fit in storage but must be extended to fire. var/extended = FALSE @@ -831,7 +847,6 @@ Note that this means that snipers will have a slowdown of 3, due to the scope unload_sound = 'sound/weapons/guns/interact/launcher_reload.ogg' attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 6, "rail_y" = 19, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) fire_delay = 1 SECONDS - recoil = 3 scatter = -100 /obj/item/weapon/gun/launcher/rocket/oneuse/Initialize(mapload, spawn_empty) @@ -845,13 +860,14 @@ Note that this means that snipers will have a slowdown of 3, due to the scope extended = !extended if(!extended) w_class = WEIGHT_CLASS_NORMAL - flags_gun_features |= GUN_DEPLOYED_FIRE_ONLY + gun_features_flags |= GUN_DEPLOYED_FIRE_ONLY else w_class = WEIGHT_CLASS_BULKY - flags_gun_features &= ~GUN_DEPLOYED_FIRE_ONLY + gun_features_flags &= ~GUN_DEPLOYED_FIRE_ONLY update_icon() /obj/item/weapon/gun/launcher/rocket/oneuse/update_icon_state() + . = ..() if(extended) icon_state = "[base_gun_icon]_extended" else @@ -860,7 +876,7 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/weapon/gun/launcher/rocket/oneuse/update_item_state() var/current_state = item_state - item_state = "[base_gun_icon][extended ? "_extended" : ""][flags_item & WIELDED ? "_w" : ""]" + item_state = "[base_gun_icon][extended ? "_extended" : ""][item_flags & WIELDED ? "_w" : ""]" if(current_state != item_state && ishuman(gun_user)) var/mob/living/carbon/human/human_user = gun_user @@ -873,10 +889,10 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/weapon/gun/launcher/rocket/som name = "\improper V-71 rocket launcher" desc = "The V-71 is a man portable rocket propelled grenade launcher employed by the SOM. It's design has changed little over centuries and is light weight and cheap to manufacture, while capable of firing a wide variety of 84mm rockets to provide excellent tactical flexibility." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/special64.dmi' icon_state = "rpg" item_state = "rpg" - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SHOWS_LOADED|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SHOWS_LOADED|GUN_SMOKE_PARTICLES caliber = CALIBER_84MM //codex load_method = MAGAZINE //codex default_ammo_type = /obj/item/ammo_magazine/rocket/som @@ -898,7 +914,6 @@ Note that this means that snipers will have a slowdown of 3, due to the scope attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 6, "rail_y" = 19, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) windup_delay = 0.6 SECONDS - recoil = 2 scatter = -1 movement_acc_penalty_mult = 5 //You shouldn't fire this on the move @@ -919,10 +934,10 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/weapon/gun/launcher/rocket/icc name = "\improper MP-IRL rocket launcher" desc = "The Man Portable-Infantry Rocket Launcher is a man portable warhead launcher employed by the ICC. Being capable of firing a wide variety of 83m rear-mounted rockets to provide excellent tactical flexibility in a compact package." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/special64.dmi' icon_state = "iccrpg" item_state = "iccrpg" - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SHOWS_LOADED|GUN_SMOKE_PARTICLES + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SHOWS_LOADED|GUN_SMOKE_PARTICLES caliber = CALIBER_84MM //codex load_method = MAGAZINE //codex default_ammo_type = /obj/item/ammo_magazine/rocket/icc @@ -942,7 +957,6 @@ Note that this means that snipers will have a slowdown of 3, due to the scope attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 6, "rail_y" = 19, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) windup_delay = 0.6 SECONDS - recoil = 2 scatter = -1 movement_acc_penalty_mult = 5 //You shouldn't fire this on the move @@ -959,9 +973,13 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/weapon/gun/rifle/railgun name = "\improper RG-220 railgun" desc = "The RG-220 is a specialized heavy duty railgun made to shred through hard armor to allow for follow up attacks. Uses specialized canisters to reload." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/special64.dmi' icon_state = "railgun" item_state = "railgun" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/special_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/special_right_1.dmi', + ) max_shells = 3 //codex caliber = CALIBER_RAILGUN fire_sound = 'sound/weapons/guns/fire/railgun.ogg' @@ -976,14 +994,14 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/ammo_magazine/railgun/hvap, ) force = 40 - wield_delay = 1 SECONDS //You're not quick drawing this. + wield_delay = 1.2 SECONDS attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 31, "rail_y" = 23, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) attachable_allowed = list( /obj/item/attachable/magnetic_harness, /obj/item/attachable/scope/marine, ) - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_AMMO_COUNTER + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_AMMO_COUNTER reciever_flags = AMMO_RECIEVER_MAGAZINES|AMMO_RECIEVER_AUTO_EJECT|AMMO_RECIEVER_CYCLE_ONLY_BEFORE_FIRE fire_delay = 3 SECONDS @@ -1002,9 +1020,13 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/weapon/gun/rifle/icc_coilgun name = "\improper ML-120 coilgun" desc = "The ML-120 coilgun is the most commonly seen coilgun in ICCAF use, firing magnetic projecitles at a incredibly high velocity. It requires some windup but will penetrate walls, your foes, and your friendlies too. So watch out... Uses specialized canisters to reload." - icon = 'icons/Marine/gun64.dmi' + icon = 'icons/obj/items/guns/special64.dmi' icon_state = "ml120" item_state = "ml120" + item_icons = list( + slot_l_hand_str = 'icons/mob/inhands/guns/special_left_1.dmi', + slot_r_hand_str = 'icons/mob/inhands/guns/special_right_1.dmi', + ) max_shells = 5 //codex caliber = CALIBER_RAILGUN fire_sound = 'sound/weapons/guns/fire/railgun.ogg' @@ -1017,14 +1039,14 @@ Note that this means that snipers will have a slowdown of 3, due to the scope /obj/item/ammo_magazine/rifle/icc_coilgun, ) force = 40 - wield_delay = 1 SECONDS //You're not quick drawing this. + wield_delay = 1.2 SECONDS attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 31, "rail_y" = 23, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) attachable_allowed = list( /obj/item/attachable/magnetic_harness, /obj/item/attachable/reddot, ) - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER reciever_flags = AMMO_RECIEVER_MAGAZINES|AMMO_RECIEVER_AUTO_EJECT|AMMO_RECIEVER_CYCLE_ONLY_BEFORE_FIRE fire_delay = 1 SECONDS diff --git a/code/modules/projectiles/magazines/energy.dm b/code/modules/projectiles/magazines/energy.dm index a05455d7cd64c..46c4b0c7d93ea 100644 --- a/code/modules/projectiles/magazines/energy.dm +++ b/code/modules/projectiles/magazines/energy.dm @@ -16,7 +16,7 @@ charge_overlay = "m43" var/reload_delay = 0 ///Magazine flags. - var/flags_magazine_features = MAGAZINE_REFUND_IN_CHAMBER + var/magazine_features_flags = MAGAZINE_REFUND_IN_CHAMBER ///if the magazine has a special overlay associated with it, i.e. extended mags etc var/bonus_overlay = null @@ -68,38 +68,39 @@ /obj/item/cell/lasgun/fob_sentry/cell maxcharge = INFINITY +/obj/item/cell/lasgun/plasma + name = "\improper WML plasma energy cell" + desc = "A plasma containment cell used by the TerraGov Marine Corps for plasma guns. It doesn't seem to have an expiry date on it." + icon_state = "plasma" + maxcharge = 900 + icon_state_mini = "mag_plasma" + charge_overlay = "plasma" + //volkite /obj/item/cell/lasgun/volkite - name = "\improper volkite energy cell" + name = "volkite energy cell" desc = "A specialized high density battery used to power volkite weaponry." - icon = 'icons/obj/items/ammo.dmi' icon_state = "volkite" maxcharge = 1440 - w_class = WEIGHT_CLASS_NORMAL icon_state_mini = "mag_cell" charge_overlay = "volkite" - reload_delay = 0 /obj/item/cell/lasgun/volkite/small - name = "\improper compact volkite energy cell" + name = "compact volkite energy cell" desc = "A specialized compact battery used to power the smallest volkite weaponry." - icon = 'icons/obj/items/ammo.dmi' icon_state = "volkite_small" maxcharge = 540 w_class = WEIGHT_CLASS_SMALL icon_state_mini = "mag_cell" /obj/item/cell/lasgun/volkite/turret - name = "\improper volkite nuclear energy cell" + name = "volkite nuclear energy cell" desc = "A nuclear powered battery designed for certain heavy SOM machinery like sentries. Slowly charges over time." - icon = 'icons/obj/items/ammo.dmi' icon_state = "volkite_turret" maxcharge = 1800 - w_class = WEIGHT_CLASS_NORMAL icon_state_mini = "mag_cell" charge_overlay = "volkite_big" - reload_delay = 0 self_recharge = TRUE charge_amount = 24 charge_delay = 2 SECONDS @@ -114,9 +115,9 @@ ) icon_state = "volkite_powerpack" charge_overlay = null - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BACK - flags_magazine_features = MAGAZINE_REFUND_IN_CHAMBER|MAGAZINE_WORN + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BACK + magazine_features_flags = MAGAZINE_REFUND_IN_CHAMBER|MAGAZINE_WORN w_class = WEIGHT_CLASS_HUGE slowdown = 0.2 maxcharge = 3000 @@ -126,6 +127,8 @@ light_range = 0.1 light_power = 0.1 light_color = LIGHT_COLOR_ORANGE + ///The kind of cells we like to accept around here to charge from us. + var/cell_type = /obj/item/cell /obj/item/cell/lasgun/volkite/powerpack/Initialize(mapload) . = ..() @@ -162,6 +165,8 @@ /obj/item/cell/lasgun/volkite/powerpack/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/weapon/gun) && loc == user) var/obj/item/weapon/gun/gun = I if(!CHECK_BITFIELD(gun.reciever_flags, AMMO_RECIEVER_MAGAZINES)) @@ -169,7 +174,7 @@ gun.reload(src, user) return - if(!istype(I, /obj/item/cell)) + if(!istype(I, cell_type)) return if(I != user.r_hand && I != user.l_hand) to_chat(user, span_warning("[I] must be in your hand to do that.")) @@ -189,10 +194,11 @@ icon = 'icons/obj/items/storage/storage.dmi' icon_state = "lasgun_pouch" charge_overlay = "lasgun_cell" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_POCKET - flags_magazine_features = MAGAZINE_REFUND_IN_CHAMBER|MAGAZINE_WORN + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_POCKET + magazine_features_flags = MAGAZINE_REFUND_IN_CHAMBER|MAGAZINE_WORN w_class = WEIGHT_CLASS_BULKY slowdown = 0 maxcharge = 2400 + cell_type = /obj/item/cell/lasgun/lasrifle self_recharge = FALSE diff --git a/code/modules/projectiles/magazines/flamer.dm b/code/modules/projectiles/magazines/flamer.dm index 5da294ba2a55b..1aeb777acad41 100644 --- a/code/modules/projectiles/magazines/flamer.dm +++ b/code/modules/projectiles/magazines/flamer.dm @@ -11,7 +11,7 @@ reload_delay = 2 SECONDS w_class = WEIGHT_CLASS_NORMAL //making sure you can't sneak this onto your belt. caliber = CALIBER_FUEL_THICK //Ultra Thick Napthal Fuel, from the lore book. - flags_magazine = NONE + magazine_flags = NONE icon_state_mini = "tank_light" default_ammo = /datum/ammo/flamethrower @@ -54,9 +54,6 @@ to_chat(user, span_notice("You refill [src] with [lowertext(caliber)].")) update_icon() -/obj/item/ammo_magazine/flamer_tank/update_icon() - return - /obj/item/ammo_magazine/flamer_tank/large // Extra thicc tank name = "large flamerthrower tank" desc = "A large fuel tank of ultra thick napthal, a sticky combustable liquid chemical, for use in the FL-84 flamethrower." @@ -83,6 +80,10 @@ icon_state_mini = "tank_blue" dispenser_type = /obj/structure/reagent_dispensers/fueltank/xfuel +/obj/item/ammo_magazine/flamer_tank/large/X/som + desc = "A large fuel tank of ultra thick napthal Fuel type X, a sticky combustable liquid chemical, for use in the V-62 flamethrower." + icon_state = "flametank_som_x" + /obj/item/ammo_magazine/flamer_tank/large/X/deathsquad name = "Gargantuan flamethrower X-tank" desc = "Using Bluespace technology, Nanotrasen has managed to fit in way more x-fuel than you would ever hope to need in a single lifetime into this specialized tank." @@ -94,13 +95,13 @@ name = "back fuel tank" desc = "A specialized fuel tank for use with the FL-84 flamethrower and FL-240 incinerator unit." icon_state = "flamethrower_tank" - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_BULKY max_rounds = 500 current_rounds = 500 reload_delay = 1 SECONDS caliber = CALIBER_FUEL_THICK - flags_magazine = MAGAZINE_WORN + magazine_flags = MAGAZINE_WORN icon_state_mini = "tank" default_ammo = /datum/ammo/flamethrower @@ -121,7 +122,7 @@ reload_delay = 0 SECONDS w_class = WEIGHT_CLASS_NORMAL caliber = CALIBER_WATER //Deep lore - flags_magazine = NONE + magazine_flags = NONE icon_state_mini = "tank_water" default_ammo = /datum/ammo/water diff --git a/code/modules/projectiles/magazines/misc.dm b/code/modules/projectiles/magazines/misc.dm index f0f6a015591ae..e7478bfd1b86d 100644 --- a/code/modules/projectiles/magazines/misc.dm +++ b/code/modules/projectiles/magazines/misc.dm @@ -95,9 +95,18 @@ max_rounds = 500 w_class = WEIGHT_CLASS_NORMAL +/obj/item/ammo_magazine/packet/smart_targetrifle + name = "box of 10x27mm HV" + desc = "A box containing 200 rounds of 10x27mm smart rounds." + icon_state = "box_smarttargetrifle" + default_ammo = /datum/ammo/bullet/smarttargetrifle + caliber = CALIBER_10x27_CASELESS + current_rounds = 200 + max_rounds = 200 + /obj/item/ammo_magazine/packet/scout_rifle name = "Box of A19 high velocity bullets" - desc = "A box containing 150 rounds of A19 overpressuered high velocity." + desc = "A box containing 150 rounds of A19 overpressured high velocity." icon_state = "box_tx8" default_ammo = /datum/ammo/bullet/rifle/tx8 caliber = CALIBER_10X28_CASELESS @@ -158,7 +167,7 @@ max_rounds = 42 /obj/item/ammo_magazine/packet/acp - name = "packet of .45 ACP" + name = "packet of pistol .45 ACP" icon_state = "box_45acp" default_ammo = /datum/ammo/bullet/pistol/heavy w_class = WEIGHT_CLASS_SMALL diff --git a/code/modules/projectiles/magazines/mounted.dm b/code/modules/projectiles/magazines/mounted.dm index f860a37a4dbd0..647176fbeacdc 100644 --- a/code/modules/projectiles/magazines/mounted.dm +++ b/code/modules/projectiles/magazines/mounted.dm @@ -1,11 +1,11 @@ ///Default ammo for the HSG-102. -/obj/item/ammo_magazine/tl102 +/obj/item/ammo_magazine/hsg_102 name = "HSG-102 drum magazine (10x30mm Caseless)" desc = "A box of 300, 10x30mm caseless tungsten rounds for the HSG-102 mounted heavy smartgun." w_class = WEIGHT_CLASS_NORMAL icon = 'icons/Marine/marine-hmg.dmi' icon_state = "mag" - flags_magazine = NONE + magazine_flags = NONE caliber = CALIBER_10X30 max_rounds = 300 default_ammo = /datum/ammo/bullet/machinegun @@ -13,18 +13,18 @@ icon_state_mini = "mag_hmg" ///This is the one that comes in the mapbound and dropship mounted version of the HSG-102, it has a stupid amount of ammo. Even more than the ammo counter can display. -/obj/item/ammo_magazine/tl102/hsg_nest +/obj/item/ammo_magazine/hsg_102/hsg_nest max_rounds = 500 /obj/item/ammo_magazine/heavymachinegun name = "HMG-08 drum magazine (10x30mm Caseless)" desc = "A box of 500, 10x28mm caseless tungsten rounds for the HMG-08 mounted heavy machinegun. Is probably not going to fit in your backpack. Put it on your belt or back." w_class = WEIGHT_CLASS_BULKY - flags_equip_slot = ITEM_SLOT_BACK|ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT icon = 'icons/Marine/marine-hmg.dmi' icon_state = "mg08_mag" icon_state_mini = "mag_drum_big_green" - flags_magazine = NONE + magazine_flags = NONE caliber = CALIBER_10X28 max_rounds = 500 default_ammo = /datum/ammo/bullet/machinegun @@ -34,7 +34,7 @@ name = "HMG-08 box magazine (10x30mm Caseless)" desc = "A box of 250 10x28mm caseless tungsten rounds for the HMG-08 mounted heavy machinegun." w_class = WEIGHT_CLASS_NORMAL - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT icon_state = "mg08_mag_small" icon_state_mini = "mag_hmg" max_rounds = 250 @@ -47,7 +47,7 @@ icon = 'icons/Marine/marine-mmg.dmi' icon_state = "mag" icon_state_mini = "mag_drum_big_armygreen" - flags_magazine = NONE + magazine_flags = NONE caliber = CALIBER_10x27_CASELESS max_rounds = 150 default_ammo = /datum/ammo/bullet/rifle/heavy @@ -59,7 +59,7 @@ w_class = WEIGHT_CLASS_NORMAL icon = 'icons/Marine/marine-hmg.dmi' icon_state = "ags_mag" - flags_magazine = NONE + magazine_flags = NONE caliber = CALIBER_40MM max_rounds = 30 default_ammo = /datum/ammo/grenade_container/ags_grenade @@ -103,7 +103,7 @@ icon = 'icons/Marine/marine-atgun.dmi' icon_state = "tat36_shell" item_state = "tat36" - flags_magazine = MAGAZINE_REFUND_IN_CHAMBER + magazine_flags = MAGAZINE_REFUND_IN_CHAMBER caliber = CALIBER_37MM max_rounds = 1 default_ammo = /datum/ammo/rocket/atgun_shell @@ -143,7 +143,7 @@ w_class = WEIGHT_CLASS_BULKY icon = 'icons/obj/items/ammo.dmi' icon_state = "minigun" - flags_magazine = NONE + magazine_flags = NONE caliber = CALIBER_762X51 max_rounds = 1000 default_ammo = /datum/ammo/bullet/minigun @@ -156,7 +156,7 @@ icon = 'icons/Marine/marine-ac.dmi' icon_state = "ac_mag" item_state = "ac" - flags_magazine = NONE + magazine_flags = NONE caliber = CALIBER_20 max_rounds = 100 default_ammo = /datum/ammo/bullet/auto_cannon @@ -185,7 +185,7 @@ icon_state = "isg_ammo" item_state = "isg_ammo" w_class = WEIGHT_CLASS_BULKY - flags_magazine = MAGAZINE_REFUND_IN_CHAMBER + magazine_flags = MAGAZINE_REFUND_IN_CHAMBER caliber = CALIBER_15CM max_rounds = 1 reload_delay = 8 SECONDS @@ -212,3 +212,17 @@ desc = "A 15cm APFDS shell for the FK-88 mounted flak gun containing a large metal dart fired at hypersonic speeds, will pierce through basically anything and onto the other side with ease. Requires a minimum range before it stabilizes to properly hit anything, will rip a clean hole through basically anything." icon_state = "isg_ammo_sabot" default_ammo = /datum/ammo/bullet/heavy_isg_apfds + +///Default ammo for the ML-91 and its export variants. +/obj/item/ammo_magazine/icc_hmg + name = "KRD-61ES magazine (10x30mm Caseless)" + desc = "A box of 300, 10x30mm caseless tungsten rounds for the KRD-61ESmounted heavy smartgun." + w_class = WEIGHT_CLASS_NORMAL + icon = 'icons/Marine/marine-mmg.dmi' + icon_state = "kord_mag" + magazine_flags = NONE + caliber = CALIBER_10X30 + max_rounds = 300 + default_ammo = /datum/ammo/bullet/machinegun + reload_delay = 5 SECONDS + icon_state_mini = "mag_hmg" diff --git a/code/modules/projectiles/magazines/pistols.dm b/code/modules/projectiles/magazines/pistols.dm index 3b95ebafd4ad5..3010c2c9024d8 100644 --- a/code/modules/projectiles/magazines/pistols.dm +++ b/code/modules/projectiles/magazines/pistols.dm @@ -22,7 +22,7 @@ max_rounds = 10 w_class = WEIGHT_CLASS_SMALL default_ammo = /datum/ammo/energy/plasma_pistol - flags_magazine = NONE + magazine_flags = NONE icon_state_mini = "mag_tx7" //------------------------------------------------------- diff --git a/code/modules/projectiles/magazines/revolvers.dm b/code/modules/projectiles/magazines/revolvers.dm index 4abcdb37b64ac..fd6793c381a1f 100644 --- a/code/modules/projectiles/magazines/revolvers.dm +++ b/code/modules/projectiles/magazines/revolvers.dm @@ -5,7 +5,7 @@ name = "\improper R-44 magnum speed loader (.44)" desc = "A revolver speed loader." default_ammo = /datum/ammo/bullet/revolver - flags_equip_slot = NONE + equip_slot_flags = NONE caliber = CALIBER_44 icon_state = "m44" icon_state_mini = "mag_revolver_bronze" @@ -30,7 +30,7 @@ name = "\improper R-44 magnum speed loader (.44)" desc = "A revolver speed loader." default_ammo = /datum/ammo/bullet/revolver/tp44 - flags_equip_slot = NONE + equip_slot_flags = NONE caliber = CALIBER_44 icon_state = "tp44" icon_state_mini = "mag_revolver" diff --git a/code/modules/projectiles/magazines/rifles.dm b/code/modules/projectiles/magazines/rifles.dm index b5dbbfdf2f7e8..9719c5d49c05a 100644 --- a/code/modules/projectiles/magazines/rifles.dm +++ b/code/modules/projectiles/magazines/rifles.dm @@ -51,6 +51,13 @@ default_ammo = /datum/ammo/bullet/rifle max_rounds = 36 +/obj/item/ammo_magazine/rifle/standard_carbine/ap + name = "\improper AR-18 AP magazine (10x24mm)" + desc = "A 10mm assault carbine magazine, loaded with light armor piercing rounds." + icon_state = "t18_ap" + default_ammo = /datum/ammo/bullet/rifle/hv + bonus_overlay = "t18_ap" + //------------------------------------------------------- //T12 Assault Rifle @@ -64,6 +71,13 @@ default_ammo = /datum/ammo/bullet/rifle max_rounds = 50 +/obj/item/ammo_magazine/rifle/standard_assaultrifle/ap + name = "\improper AR-12 AP magazine (10x24mm)" + desc = "A 10mm assault rifle magazine, loaded with light armor piercing rounds." + icon_state = "t12_ap" + default_ammo = /datum/ammo/bullet/rifle/hv + bonus_overlay = "t12_ap" + //------------------------------------------------------- //T37 DMR @@ -370,7 +384,7 @@ caliber = CALIBER_ALIEN icon_state = "alien_rifle" icon_state_mini = "mag_rifle_purple" - default_ammo = /datum/ammo/energy/plasma + default_ammo = /datum/ammo/energy/sectoid_plasma max_rounds = 20 //------------------------------------------------------- @@ -424,7 +438,7 @@ icon_state = "t21" icon_state_mini = "mag_rifle" default_ammo = /datum/ammo/bullet/rifle/heavy - max_rounds = 30 + max_rounds = 40 //ALF-51B @@ -505,6 +519,14 @@ icon_state_mini = "mag_sniper_purple" greyscale_colors = COLOR_AMMO_TANGLEFOOT +/obj/item/ammo_magazine/rifle/tx54/smoke/acid + name = "\improper 20mm acid smoke grenade magazine" + desc = "A 20mm magazine loaded with acid grenades. For use with the GL-54 or AR-55." + default_ammo = /datum/ammo/tx54/smoke/acid + icon_state = "tx54_airburst" + icon_state_mini = "mag_sniper_purple" + greyscale_colors = COLOR_AMMO_ACID + /obj/item/ammo_magazine/rifle/tx54/razor name = "\improper 20mm razorburn grenade magazine" desc = "A 20mm magazine loaded with razorburn grenades. For use with the GL-54 or AR-55." @@ -637,3 +659,33 @@ /obj/item/ammo_magazine/rifle/icc_assaultcarbine/export name = "\improper EM-88 assault carbine magazine (5.56x45mm)" desc = "A magazine filled with 5.56x45mm rifle rounds for the EM-88 series of firearms." + +//------------------------------------------------------- +//ML-41 Assault Machiengun +/obj/item/ammo_magazine/icc_mg + name = "\improper ML-41 GPMG box magazine (10x26mm)" + desc = "A belt box for the ML-41 assault machinegun." + icon_state = "minimi" + icon_state_mini = "mag_gpmg" + caliber = CALIBER_10x26_CASELESS + default_ammo = /datum/ammo/bullet/rifle/machinegun + w_class = WEIGHT_CLASS_NORMAL + max_rounds = 150 + reload_delay = 2 SECONDS + +// This is a 'belt'. +/obj/item/ammo_magazine/icc_mg/belt + name = "\improper ML-41 GPMG buttpack magazine (10x26mm)" + desc = "A buttpack for the ML-41 which carries the ammo inside." + icon_state = "minimi_belt" + equip_slot_flags = ITEM_SLOT_BELT + magazine_flags = MAGAZINE_WORN + w_class = WEIGHT_CLASS_HUGE + max_rounds = 750 + +/obj/item/ammo_magazine/icc_mg/packet + name = "box of 10x26mm" + desc = "A box containing 500 rounds of 10x26mm caseless." + icon_state = "box_minimi" + current_rounds = 500 + max_rounds = 500 diff --git a/code/modules/projectiles/magazines/sentries.dm b/code/modules/projectiles/magazines/sentries.dm index 904351da6b5e6..d21183d818e34 100644 --- a/code/modules/projectiles/magazines/sentries.dm +++ b/code/modules/projectiles/magazines/sentries.dm @@ -3,7 +3,7 @@ desc = "A drum of 50 10x28mm caseless rounds for the ST-571 sentry gun. Just feed it into the sentry gun's ammo port when its ammo is depleted." w_class = WEIGHT_CLASS_NORMAL icon_state = "ua571c" - flags_magazine = NONE //can't be refilled or emptied by hand + magazine_flags = NONE //can't be refilled or emptied by hand caliber = CALIBER_10X28 max_rounds = 500 default_ammo = /datum/ammo/bullet/turret @@ -13,7 +13,7 @@ desc = "A box of 100 10x20mm caseless rounds for the ST-580 point defense sentry. Just feed it into the sentry gun's ammo port when its ammo is depleted." w_class = WEIGHT_CLASS_NORMAL icon_state = "ua580" - flags_magazine = NONE //can't be refilled or emptied by hand + magazine_flags = NONE //can't be refilled or emptied by hand caliber = CALIBER_10X20 max_rounds = 300 default_ammo = /datum/ammo/bullet/turret/mini @@ -22,10 +22,40 @@ name = "M30 box magazine (10x28mm Caseless)" desc = "A box of 50 10x28mm caseless rounds for the ST-571 Sentry Gun. Just feed it into the sentry gun's ammo port when its ammo is depleted." w_class = WEIGHT_CLASS_NORMAL - flags_magazine = NONE //can't be refilled or emptied by hand + magazine_flags = NONE //can't be refilled or emptied by hand caliber = CALIBER_10X28 max_rounds = 500 default_ammo = /datum/ammo/bullet/turret/dumb /obj/item/ammo_magazine/sentry/fob_sentry max_rounds = INFINITY + +// Sniper Sentry + +/obj/item/ammo_magazine/sentry/sniper + name = "\improper AM-5 box magazine (10x28mm Caseless)" + desc = "A drum of 50 10x28mm caseless rounds for the SST-574 sentry gun. Just feed it into the sentry gun's ammo port when its ammo is depleted." + icon_state = "snipersentry" + max_rounds = 75 + default_ammo = /datum/ammo/bullet/turret/sniper + +// Shotgun Sentry + +/obj/item/ammo_magazine/sentry/shotgun + name = "\improper SM-10 box magazine (12G Caseless)" + desc = "A drum of 200 specialized telescopic 12G rounds for the SST-573 sentry gun. Just feed it into the sentry gun's ammo port when its ammo is depleted." + caliber = CALIBER_12G + icon_state = "shotgunsentry" + max_rounds = 100 + default_ammo = /datum/ammo/bullet/turret/buckshot + +// Flamer Sentry + +/obj/item/ammo_magazine/sentry/flamer + name = "\improper SM-10 box magazine (12G Caseless)" + desc = "A drum of 200 specialized telescopic 12G rounds for the SST-573 sentry gun. Just feed it into the sentry gun's ammo port when its ammo is depleted." + caliber = CALIBER_12G + icon_state = "flamersentry" + max_rounds = 100 + default_ammo = /datum/ammo/flamer + diff --git a/code/modules/projectiles/magazines/smgs.dm b/code/modules/projectiles/magazines/smgs.dm index 03b8f0e2453c0..54a0ddad339fd 100644 --- a/code/modules/projectiles/magazines/smgs.dm +++ b/code/modules/projectiles/magazines/smgs.dm @@ -54,6 +54,27 @@ w_class = WEIGHT_CLASS_SMALL icon_state_mini = "mag_t90" +//------------------------------------------------------- +//SMG-45 SMG ammo + +/obj/item/ammo_magazine/smg/standard_heavysmg + name = "\improper SMG-45 magazine (.45 ACP)" + desc = "A .45 ACP caseless submachinegun magazine." + default_ammo = /datum/ammo/bullet/smg/heavy + caliber = CALIBER_45ACP + icon_state = "t45" + max_rounds = 40 + w_class = WEIGHT_CLASS_SMALL + icon_state_mini = "mag_heavy_smg" + bonus_overlay = "t45_mag" + +/obj/item/ammo_magazine/smg/standard_heavysmg/squashhead + name = "\improper SMG-45 squash-head magazine (.45 ACP)" + desc = "A .45 ACP caseless submachinegun magazine that does a minituare explosion upon contact, will shred the armor off of basically anything." + default_ammo = /datum/ammo/bullet/smg/squash + icon_state = "t45_sh" + bonus_overlay = "t45_mag_sh" + //------------------------------------------------------- //SMG-27, based on the SMG-27, based on the M7. diff --git a/code/modules/projectiles/magazines/specialist.dm b/code/modules/projectiles/magazines/specialist.dm index d27699b2903f4..ccbd0e95fcfff 100644 --- a/code/modules/projectiles/magazines/specialist.dm +++ b/code/modules/projectiles/magazines/specialist.dm @@ -56,7 +56,7 @@ /obj/item/ammo_magazine/rifle/tx8 name = "\improper high velocity magazine (10x28mm)" - desc = "A magazine of overpressuered high velocity rounds for use in the BR-8 battle rifle. The BR-8 battle rifle is the only gun that can chamber these rounds." + desc = "A magazine of overpressured high velocity rounds for use in the BR-8 battle rifle. The BR-8 battle rifle is the only gun that can chamber these rounds." icon_state = "tx8" caliber = CALIBER_10X28_CASELESS default_ammo = /datum/ammo/bullet/rifle/tx8 @@ -65,7 +65,7 @@ /obj/item/ammo_magazine/rifle/tx8/incendiary name = "\improper high velocity incendiary magazine (10x28mm)" - desc = "A magazine of overpressuered high velocity incendiary rounds for use in the BR-8 battle rifle. The BR-8 battle rifle is the only gun that can chamber these rounds." + desc = "A magazine of overpressured high velocity incendiary rounds for use in the BR-8 battle rifle. The BR-8 battle rifle is the only gun that can chamber these rounds." caliber = CALIBER_10X28_CASELESS icon_state = "tx8_incend" default_ammo = /datum/ammo/bullet/rifle/tx8/incendiary @@ -74,7 +74,7 @@ /obj/item/ammo_magazine/rifle/tx8/impact name = "\improper high velocity impact magazine (10x28mm)" - desc = "A magazine of overpressuered high velocity impact rounds for use in the BR-8 battle rifle. The BR-8 battle rifle is the only gun that can chamber these rounds." + desc = "A magazine of overpressured high velocity impact rounds for use in the BR-8 battle rifle. The BR-8 battle rifle is the only gun that can chamber these rounds." icon_state = "tx8_impact" default_ammo = /datum/ammo/bullet/rifle/tx8/impact icon_state_mini = "mag_rifle_big_blue" @@ -90,7 +90,7 @@ caliber = CALIBER_84MM icon_state = "rocket" w_class = WEIGHT_CLASS_NORMAL - flags_magazine = MAGAZINE_REFUND_IN_CHAMBER + magazine_flags = MAGAZINE_REFUND_IN_CHAMBER max_rounds = 1 default_ammo = /datum/ammo/rocket reload_delay = 60 @@ -108,12 +108,22 @@ user.drop_held_item() qdel(src) -/obj/item/ammo_magazine/rocket/update_icon() - overlays.Cut() +/obj/item/ammo_magazine/rocket/update_name(updates) + . = ..() if(current_rounds > 0) return name = "empty rocket frame" + +/obj/item/ammo_magazine/rocket/update_desc(updates) + . = ..() + if(current_rounds > 0) + return desc = "A spent rocket rube. Activate it to deconstruct it and receive some materials." + +/obj/item/ammo_magazine/rocket/update_icon_state() + . = ..() + if(current_rounds > 0) + return icon_state = istype(src, /obj/item/ammo_magazine/rocket/m57a4) ? "quad_rocket_e" : "rocket_e" //------------------------------------------------------- @@ -391,41 +401,55 @@ /obj/item/ammo_magazine/minigun_powerpack name = "\improper MG-100 Vindicator powerpack" - desc = "A heavy reinforced backpack with support equipment, power cells, and spare rounds for the MG-100 Minigun System.\nClick the icon in the top left to reload your M56." + desc = "A heavy reinforced backpack with support equipment, power cells, and spare rounds for the MG-100 Minigun System.\nClick the icon in the top left to reload your MG-100." icon = 'icons/obj/items/storage/storage.dmi' icon_state = "powerpack" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BACK - flags_magazine = MAGAZINE_WORN + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BACK + magazine_flags = MAGAZINE_WORN w_class = WEIGHT_CLASS_HUGE default_ammo = /datum/ammo/bullet/minigun current_rounds = 500 max_rounds = 500 - flags_item_map_variant = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_PRISON_VARIANT) + item_map_variant_flags = (ITEM_JUNGLE_VARIANT|ITEM_ICE_VARIANT|ITEM_PRISON_VARIANT) /obj/item/ammo_magazine/minigun_powerpack/snow icon_state = "s_powerpack" - flags_item_map_variant = null + item_map_variant_flags = null /obj/item/ammo_magazine/minigun_powerpack/fancy icon_state = "powerpackw" - flags_item_map_variant = null + item_map_variant_flags = null /obj/item/ammo_magazine/minigun_powerpack/merc icon_state = "powerpackp" - flags_item_map_variant = null + item_map_variant_flags = null /obj/item/ammo_magazine/minigun_powerpack/smartgun name = "\improper SG-85 powerpack" desc = "A reinforced backpack heavy with the IFF altered ammunition, onboard micro generator, and extensive cooling system which enables the SG-85 gatling gun to operate. \nUse the SG-85 on the backpack itself to connect them." icon_state = "powerpacksg" - flags_magazine = MAGAZINE_WORN|MAGAZINE_REFILLABLE + magazine_flags = MAGAZINE_WORN|MAGAZINE_REFILLABLE default_ammo = /datum/ammo/bullet/smart_minigun current_rounds = 1000 max_rounds = 1000 caliber = CALIBER_10x26_CASELESS - flags_item_map_variant = null - + item_map_variant_flags = null + +//"External magazine" for the wheelchair-mounted minigun +/obj/item/ammo_magazine/minigun_wheelchair + name = "\improper Mounted MG-100 Vindicator ammo rack" + desc = "A case filled to the brim with ammunition. Appears custom made to be slotted into a feeding system." + icon = 'icons/obj/items/ammo.dmi' + icon_state = "minigun" + atom_flags = CONDUCT + magazine_flags = MAGAZINE_REFILLABLE + equip_slot_flags = ITEM_SLOT_BACK + w_class = WEIGHT_CLASS_HUGE + default_ammo = /datum/ammo/bullet/minigun + current_rounds = 1000 + max_rounds = 1000 + reload_delay = 0.75 SECONDS // ICC coilgun diff --git a/code/modules/projectiles/mounted.dm b/code/modules/projectiles/mounted.dm index a025719eb7fb6..e2055942df231 100644 --- a/code/modules/projectiles/mounted.dm +++ b/code/modules/projectiles/mounted.dm @@ -4,10 +4,10 @@ anchored = TRUE resistance_flags = XENO_DAMAGEABLE density = TRUE - layer = TANK_BARREL_LAYER + layer = ABOVE_MOB_PROP_LAYER use_power = FALSE hud_possible = list(MACHINE_HEALTH_HUD, MACHINE_AMMO_HUD) - allow_pass_flags = PASSABLE + allow_pass_flags = PASSABLE|PASS_LOW_STRUCTURE ///Store user old pixel x var/user_old_x = 0 ///Store user old pixel y @@ -18,7 +18,7 @@ var/has_anchored_sprite = FALSE ///generates the icon based on how much ammo it has. -/obj/machinery/deployable/mounted/update_icon_state(mob/user) +/obj/machinery/deployable/mounted/update_icon_state() . = ..() var/obj/item/weapon/gun/gun = get_internal_item() if(gun && (!length(gun.chamber_items) || !gun.chamber_items[gun.current_chamber_position])) @@ -71,6 +71,8 @@ /obj/machinery/deployable/mounted/attackby(obj/item/I, mob/user, params) //This handles reloading the gun, if its in acid cant touch it. . = ..() + if(.) + return if(!ishuman(user)) return @@ -97,10 +99,10 @@ var/obj/item/weapon/gun/gun = get_internal_item() if(length(gun?.chamber_items)) gun.unload(user) - update_icon_state() + update_appearance() gun?.reload(ammo_magazine, user) - update_icon_state() + update_appearance() REMOVE_TRAIT(src, TRAIT_GUN_RELOADING, GUN_TRAIT) @@ -238,18 +240,18 @@ var/obj/item/weapon/gun/gun = get_internal_item() //we can only fire in a 90 degree cone if((dir & angle) && target.loc != loc && target.loc != operator.loc) - if(CHECK_BITFIELD(gun.flags_item, DEPLOYED_ANCHORED_FIRING_ONLY) && !anchored) + if(CHECK_BITFIELD(gun.item_flags, DEPLOYED_ANCHORED_FIRING_ONLY) && !anchored) to_chat(operator, "[src] cannot be fired without it being anchored.") return FALSE operator.setDir(dir) gun?.set_target(target) - update_icon_state() + update_appearance() return TRUE - if(CHECK_BITFIELD(gun?.flags_item, DEPLOYED_NO_ROTATE)) + if(CHECK_BITFIELD(gun?.item_flags, DEPLOYED_NO_ROTATE)) to_chat(operator, "This one is anchored in place and cannot be rotated.") return FALSE - if(CHECK_BITFIELD(gun?.flags_item, DEPLOYED_NO_ROTATE_ANCHORED) && anchored) + if(CHECK_BITFIELD(gun?.item_flags, DEPLOYED_NO_ROTATE_ANCHORED) && anchored) to_chat(operator, "[src] cannot be rotated while anchored.") return FALSE diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 2147dd66ac433..873e7b92287b5 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -30,7 +30,7 @@ resistance_flags = RESIST_ALL anchored = TRUE //You will not have me, space wind! move_resist = INFINITY - flags_atom = NOINTERACT //No real need for this, but whatever. Maybe this flag will do something useful in the future. + atom_flags = NOINTERACT //No real need for this, but whatever. Maybe this flag will do something useful in the future. mouse_opacity = MOUSE_OPACITY_TRANSPARENT invisibility = INVISIBILITY_MAXIMUM // We want this thing to be invisible when it drops on a turf because it will be on the user's turf. We then want to make it visible as it travels. layer = FLY_LAYER @@ -41,59 +41,76 @@ light_color = COLOR_VERY_SOFT_YELLOW ///greyscale support - greyscale_config = null - greyscale_colors = null - + greyscale_config + greyscale_colors ///Any special effects applied to this projectile - var/flags_projectile_behavior = NONE - - var/hitsound = null - var/datum/ammo/ammo //The ammo data which holds most of the actual info. - - var/def_zone = BODY_ZONE_CHEST //So we're not getting empty strings. - + var/projectile_behavior_flags = NONE + ///Hit impact sound + var/hitsound + ///The ammo data which holds most of the actual info + var/datum/ammo/ammo + ///The bodypart you're trying to hit + var/def_zone = BODY_ZONE_CHEST + ///the pixel X location of the tile that the player clicked. Default is the center var/p_x = 16 - var/p_y = 16 // the pixel location of the tile that the player clicked. Default is the center - var/apx //Pixel location in absolute coordinates. This is (((x - 1) * 32) + 16 + pixel_x) - var/apy //These values are floats, not integers. They need to be converted through CEILING or such when translated to relative pixel coordinates. - - var/atom/shot_from = null // the object which shot us - var/turf/starting_turf = null // the projectile's starting turf - var/atom/original_target = null // the original target clicked - var/turf/original_target_turf = null // the original target's starting turf - var/atom/firer = null // Who shot it - - var/list/atom/movable/uncross_scheduled = list() // List of border movable atoms to check for when exiting a turf. - + ///the pixel y location of the tile that the player clicked. Default is the center + var/p_y = 16 + /** + *Pixel location in absolute coordinates. This is (((x - 1) * 32) + 16 + pixel_x) + *These values are floats, not integers. They need to be converted through CEILING or such when translated to relative pixel coordinates. + */ + var/apx + /** + *Pixel location in absolute coordinates. This is (((y - 1) * 32) + 16 + pixel_y) + *These values are floats, not integers. They need to be converted through CEILING or such when translated to relative pixel coordinates. + */ + var/apy + + ///The atom which shot us i.e. a gun or xeno + var/atom/shot_from + ///the projectile's starting turf + var/turf/starting_turf + ///the original target clicked + var/atom/original_target + ///the original target's starting turf + var/turf/original_target_turf + ///The mob responsible for firing this projectile, if any + var/mob/living/firer + ///List of border movable atoms to check for when exiting a turf. + var/list/atom/movable/uncross_scheduled = list() + ///Actual projectile damage var/damage = 0 ///ammo sundering value var/sundering = 0 - var/accuracy = 90 //Base projectile accuracy. Can maybe be later taken from the mob if desired. + ///Base projectile accuracy + var/accuracy = 90 ///how many damage points the projectile loses per tiles travelled var/damage_falloff = 0 ///Modifies projectile damage by a % when a marine gets passed, but not hit var/damage_marine_falloff = 0 - var/scatter = 0 //Chance of scattering, also maximum amount scattered. High variance. - ///damage airburst inflicts, as a multiplier of proj.damage - var/airburst_multiplier = 0 - /// The iff signal that will be compared to the target's one, to apply iff if needed var/iff_signal = NONE - + ///How far the projectile has currently travelled var/distance_travelled = 0 - - var/projectile_speed = 1 //Tiles travelled per full tick. - var/armor_type = null + ///Tiles travelled per full tick + var/projectile_speed = 1 + ///armour type this projectile is checked against + var/armor_type = BULLET //Fired processing vars + ///Last movement time var/last_projectile_move = 0 + ///How many movements it needs to make in the next tick var/stored_moves = 0 - var/dir_angle //0 is north, 90 is east, 180 is south, 270 is west. BYOND angles and all. - var/x_offset //Float, not integer. + //0 is north, 90 is east, 180 is south, 270 is west. BYOND angles and all + var/dir_angle + ///Float X_offset for calculating turf movements + var/x_offset + ///Float Y_offset for calculating turf movements var/y_offset - + ///Max range the projectile can travel var/proj_max_range = 30 ///A damage multiplier applied when a mob from the same faction as the projectile firer is hit var/friendly_fire_multiplier = 0.5 @@ -127,7 +144,7 @@ if(!PROJECTILE_HIT_CHECK(AM, src, get_dir(loc, oldloc), FALSE, hit_atoms)) return AM.do_projectile_hit(src) - if((!(ammo.flags_ammo_behavior & AMMO_PASS_THROUGH_MOVABLE)) || (!(ismob(AM) && CHECK_BITFIELD(ammo.flags_ammo_behavior, AMMO_PASS_THROUGH_MOB))) ) + if((!(ammo.ammo_behavior_flags & AMMO_PASS_THROUGH_MOVABLE)) || (!(ismob(AM) && CHECK_BITFIELD(ammo.ammo_behavior_flags, AMMO_PASS_THROUGH_MOB))) ) qdel(src) return hit_atoms += AM @@ -136,7 +153,7 @@ . = ..() if(!.) return - if(CHECK_BITFIELD(S.smoke_traits, SMOKE_NERF_BEAM) && ammo.flags_ammo_behavior & AMMO_ENERGY) + if(CHECK_BITFIELD(S.smoke_traits, SMOKE_NERF_BEAM) && ammo.ammo_behavior_flags & AMMO_ENERGY) damage -= max(damage - ammo.damage * 0.5, 0) /obj/projectile/proc/generate_bullet(ammo_datum, bonus_damage = 0, reagent_multiplier = 0) @@ -153,15 +170,13 @@ damage = ammo.damage + bonus_damage //Mainly for emitters. penetration = ammo.penetration sundering = ammo.sundering - scatter = ammo.scatter - airburst_multiplier = ammo.airburst_multiplier accuracy += ammo.accuracy accuracy *= rand(95 - ammo.accuracy_var_low, 105 + ammo.accuracy_var_high) * 0.01 //Rand only works with integers. damage_falloff = ammo.damage_falloff armor_type = ammo.armor_type //Target, firer, shot from. Ie the gun -/obj/projectile/proc/fire_at(atom/target, atom/shooter, atom/source, range, speed, angle, recursivity, suppress_light = FALSE, atom/loc_override = shooter) +/obj/projectile/proc/fire_at(atom/target, mob/living/shooter, atom/source, range, speed, angle, recursivity, suppress_light = FALSE, atom/loc_override = source, scan_loc = FALSE) if(!isnull(speed)) projectile_speed = speed @@ -194,11 +209,6 @@ if(target) original_target = target original_target_turf = get_turf(target) - if(original_target_turf == loc) //Shooting from and towards the same tile. Why not? - distance_travelled++ - scan_a_turf(loc) - qdel(src) - return apx = ABS_COOR(x) //Set the absolute coordinates. Center of a tile is assumed to be (16,16) apy = ABS_COOR(y) @@ -285,23 +295,33 @@ apx += pixel_x //Update the absolute pixels with the offset. apy += pixel_y - if(ismob(firer) && !recursivity) - var/mob/mob_firer = firer - record_projectile_fire(mob_firer) - GLOB.round_statistics.total_projectiles_fired[mob_firer.faction]++ - SSblackbox.record_feedback("tally", "round_statistics", 1, "total_projectiles_fired[mob_firer.faction]") + if(firer && !recursivity) + record_projectile_fire(firer) + GLOB.round_statistics.total_projectiles_fired[firer.faction]++ + SSblackbox.record_feedback("tally", "round_statistics", 1, "total_projectiles_fired[firer.faction]") if(ammo.bonus_projectiles_amount) - GLOB.round_statistics.total_projectiles_fired[mob_firer.faction] += ammo.bonus_projectiles_amount - SSblackbox.record_feedback("tally", "round_statistics", ammo.bonus_projectiles_amount, "total_projectiles_fired[mob_firer.faction]") + GLOB.round_statistics.total_projectiles_fired[firer.faction] += ammo.bonus_projectiles_amount + SSblackbox.record_feedback("tally", "round_statistics", ammo.bonus_projectiles_amount, "total_projectiles_fired[firer.faction]") //If we have the the right kind of ammo, we can fire several projectiles at once. if(ammo.bonus_projectiles_amount && !recursivity) //Recursivity check in case the bonus projectiles have bonus projectiles of their own. Let's not loop infinitely. ammo.fire_bonus_projectiles(src, shooter, source, range, speed, dir_angle, target) - //if(shooter.Adjacent(target) && PROJECTILE_HIT_CHECK(target, src, null, FALSE, null)) //todo: doesn't take into account piercing projectiles // RUTGMC DELETION - if(shooter?.Adjacent(target) && PROJECTILE_HIT_CHECK(target, src, null, FALSE, null)) //RUTGMC ADDITION + if(source.Adjacent(target) && PROJECTILE_HIT_CHECK(target, src, null, FALSE, null)) target.do_projectile_hit(src) + if((!ismob(target) || !(ammo.ammo_behavior_flags & AMMO_PASS_THROUGH_MOB)) && !(ammo.ammo_behavior_flags & AMMO_PASS_THROUGH_MOVABLE)) + qdel(src) + return + hit_atoms += target + + if(original_target_turf == loc) //Shooting from and towards the same tile. Why not? + distance_travelled++ + scan_a_turf(loc) + qdel(src) + return + + if(scan_loc && scan_a_turf(loc)) qdel(src) return @@ -313,7 +333,7 @@ var/first_moves = projectile_speed switch(projectile_batch_move(first_move)) if(PROJECTILE_HIT) //Hit on first movement. - if(!(flags_projectile_behavior & PROJECTILE_FROZEN)) + if(!(projectile_behavior_flags & PROJECTILE_FROZEN)) qdel(src) return if(PROJECTILE_FROZEN) @@ -323,7 +343,7 @@ first_moves -= first_move switch(first_moves && projectile_batch_move(first_moves)) if(PROJECTILE_HIT) //First movement batch happens on the same tick. - if(!(flags_projectile_behavior & PROJECTILE_FROZEN)) + if(!(projectile_behavior_flags & PROJECTILE_FROZEN)) qdel(src) return if(PROJECTILE_FROZEN) @@ -349,7 +369,7 @@ switch(projectile_batch_move(required_moves)) if(PROJECTILE_HIT) //Hit on first movement. - if(!(flags_projectile_behavior & PROJECTILE_FROZEN)) + if(!(projectile_behavior_flags & PROJECTILE_FROZEN)) qdel(src) return PROCESS_KILL if(PROJECTILE_FROZEN) @@ -358,7 +378,7 @@ if(QDELETED(src)) return PROCESS_KILL - if(ammo.flags_ammo_behavior & AMMO_SPECIAL_PROCESS) + if(ammo.ammo_behavior_flags & AMMO_SPECIAL_PROCESS) ammo.ammo_process(src, damage) /obj/projectile/proc/required_moves_calc() @@ -461,9 +481,9 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a continue thing_to_uncross.do_projectile_hit(src) /* RUTGMC DELETION START - if((ammo.flags_ammo_behavior & AMMO_PASS_THROUGH_MOVABLE) || (ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.flags_ammo_behavior, AMMO_PASS_THROUGH_MOB)) ) + if((ammo.ammo_behavior_flags & AMMO_PASS_THROUGH_MOVABLE) || (ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.ammo_behavior_flags, AMMO_PASS_THROUGH_MOB)) ) RUTGMC DELETION END */ - if(ammo.flags_ammo_behavior & AMMO_PASS_THROUGH_MOVABLE && !iscontainmentshutter(thing_to_uncross) || ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.flags_ammo_behavior, AMMO_PASS_THROUGH_MOB)) // RUTGMC ADDITION + if(ammo.ammo_behavior_flags & AMMO_PASS_THROUGH_MOVABLE && !iscontainmentshutter(thing_to_uncross) || ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.ammo_behavior_flags, AMMO_PASS_THROUGH_MOB)) // RUTGMC ADDITION hit_atoms += thing_to_uncross continue end_of_movement = i @@ -493,7 +513,7 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a return RegisterSignal(turf_crossed_by, COMSIG_TURF_RESUME_PROJECTILE_MOVE, PROC_REF(resume_move)) return PROJECTILE_FROZEN - if(turf_crossed_by == original_target_turf && ammo.flags_ammo_behavior & AMMO_EXPLOSIVE) + if(turf_crossed_by == original_target_turf && ammo.ammo_behavior_flags & AMMO_TARGET_TURF) last_processed_turf = turf_crossed_by ammo.do_at_max_range(turf_crossed_by, src) if(border_escaped_through & (NORTH|SOUTH)) @@ -513,9 +533,9 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a continue thing_to_uncross.do_projectile_hit(src) /* RUTGMC DELETION START - if( (ammo.flags_ammo_behavior & AMMO_PASS_THROUGH_MOVABLE) || (ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.flags_ammo_behavior, AMMO_PASS_THROUGH_MOB)) ) + if( (ammo.ammo_behavior_flags & AMMO_PASS_THROUGH_MOVABLE) || (ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.ammo_behavior_flags, AMMO_PASS_THROUGH_MOB)) ) RUTGMC DELETION END */ - if(ammo.flags_ammo_behavior & AMMO_PASS_THROUGH_MOVABLE && !iscontainmentshutter(thing_to_uncross) || ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.flags_ammo_behavior, AMMO_PASS_THROUGH_MOB)) // RUTGMC ADDITION + if(ammo.ammo_behavior_flags & AMMO_PASS_THROUGH_MOVABLE && !iscontainmentshutter(thing_to_uncross) || ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.ammo_behavior_flags, AMMO_PASS_THROUGH_MOB)) // RUTGMC ADDITION hit_atoms += thing_to_uncross continue end_of_movement = i @@ -529,8 +549,8 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a x_pixel_dist_travelled += pixel_moves_until_crossing_x_border * x_offset y_pixel_dist_travelled += pixel_moves_until_crossing_x_border * y_offset break - if(ammo.flags_ammo_behavior & AMMO_LEAVE_TURF) - ammo.on_leave_turf(turf_crossed_by, firer, src) + if(ammo.ammo_behavior_flags & AMMO_LEAVE_TURF) + ammo.on_leave_turf(turf_crossed_by, src) if(length(uncross_scheduled)) //Time to exit the last turf entered, if the diagonal movement didn't handle it already. for(var/j in uncross_scheduled) var/atom/movable/thing_to_uncross = j @@ -541,9 +561,9 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a continue //We act as if we were entering the tile through the opposite direction, to check for barricade blockage. thing_to_uncross.do_projectile_hit(src) /* RUTGMC DELETION START - if( (ammo.flags_ammo_behavior & AMMO_PASS_THROUGH_MOVABLE) || (ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.flags_ammo_behavior, AMMO_PASS_THROUGH_MOB)) ) + if( (ammo.ammo_behavior_flags & AMMO_PASS_THROUGH_MOVABLE) || (ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.ammo_behavior_flags, AMMO_PASS_THROUGH_MOB)) ) RUTGMC DELETION END */ - if(ammo.flags_ammo_behavior & AMMO_PASS_THROUGH_MOVABLE && !iscontainmentshutter(thing_to_uncross) || ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.flags_ammo_behavior, AMMO_PASS_THROUGH_MOB)) // RUTGMC ADDITION + if(ammo.ammo_behavior_flags & AMMO_PASS_THROUGH_MOVABLE && !iscontainmentshutter(thing_to_uncross) || ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.ammo_behavior_flags, AMMO_PASS_THROUGH_MOB)) // RUTGMC ADDITION hit_atoms += thing_to_uncross continue end_of_movement = i @@ -551,8 +571,8 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a uncross_scheduled.len = 0 if(end_of_movement) break - if(ammo.flags_ammo_behavior & AMMO_LEAVE_TURF) - ammo.on_leave_turf(last_processed_turf, firer, src) + if(ammo.ammo_behavior_flags & AMMO_LEAVE_TURF) + ammo.on_leave_turf(last_processed_turf, src) x_pixel_dist_travelled += 32 * x_offset y_pixel_dist_travelled += 32 * y_offset last_processed_turf = next_turf @@ -565,7 +585,7 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a return RegisterSignal(next_turf, COMSIG_TURF_RESUME_PROJECTILE_MOVE, PROC_REF(resume_move)) return PROJECTILE_FROZEN - if(next_turf == original_target_turf && ammo.flags_ammo_behavior & AMMO_EXPLOSIVE) + if(next_turf == original_target_turf && ammo.ammo_behavior_flags & AMMO_TARGET_TURF) ammo.do_at_max_range(next_turf, src) end_of_movement = i break @@ -605,15 +625,7 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a if(turf_to_scan.density) //Handle wall hit. ammo.on_hit_turf(turf_to_scan, src) turf_to_scan.bullet_act(src) - return !(ammo.flags_ammo_behavior & AMMO_PASS_THROUGH_TURF) - - if(shot_from) - switch(SEND_SIGNAL(shot_from, COMSIG_PROJ_SCANTURF, turf_to_scan)) - if(COMPONENT_PROJ_SCANTURF_TURFCLEAR) - return FALSE - if(COMPONENT_PROJ_SCANTURF_TARGETFOUND) - original_target.do_projectile_hit(src) - return TRUE + return !(ammo.ammo_behavior_flags & AMMO_PASS_THROUGH_TURF) for(var/atom/movable/thing_to_hit in turf_to_scan) @@ -623,9 +635,9 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a thing_to_hit.do_projectile_hit(src) /* RUTGMC DELETION START - if((ismob(thing_to_hit) && CHECK_BITFIELD(ammo.flags_ammo_behavior, AMMO_PASS_THROUGH_MOB)) || CHECK_BITFIELD(ammo.flags_ammo_behavior, AMMO_PASS_THROUGH_MOVABLE)) + if((ismob(thing_to_hit) && CHECK_BITFIELD(ammo.ammo_behavior_flags, AMMO_PASS_THROUGH_MOB)) || CHECK_BITFIELD(ammo.ammo_behavior_flags, AMMO_PASS_THROUGH_MOVABLE)) RUTGMC DELETION END */ - if(ismob(thing_to_hit) && CHECK_BITFIELD(ammo.flags_ammo_behavior, AMMO_PASS_THROUGH_MOB) || CHECK_BITFIELD(ammo.flags_ammo_behavior, AMMO_PASS_THROUGH_MOVABLE) && !iscontainmentshutter(thing_to_hit)) // RUTGMC ADDITION + if(ismob(thing_to_hit) && CHECK_BITFIELD(ammo.ammo_behavior_flags, AMMO_PASS_THROUGH_MOB) || CHECK_BITFIELD(ammo.ammo_behavior_flags, AMMO_PASS_THROUGH_MOVABLE) && !iscontainmentshutter(thing_to_hit)) // RUTGMC ADDITION hit_atoms += thing_to_hit return FALSE @@ -656,27 +668,28 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a /atom/proc/do_projectile_hit(obj/projectile/proj) return - /obj/projectile_hit(obj/projectile/proj, cardinal_move, uncrossing) + if(proj.shot_from == src) + return FALSE if(!density && !(obj_flags & PROJ_IGNORE_DENSITY)) //structure is passable return FALSE if(src == proj.original_target) //clicking on the structure itself hits the structure return TRUE - if((allow_pass_flags & PASS_GLASS) && (proj.ammo.flags_ammo_behavior & AMMO_ENERGY)) + if((allow_pass_flags & PASS_GLASS) && (proj.ammo.ammo_behavior_flags & AMMO_ENERGY)) return FALSE if(!(allow_pass_flags & PASS_PROJECTILE)) return TRUE if(proj.distance_travelled <= proj.ammo.barricade_clear_distance) return FALSE var/hit_chance = coverage //base chance for the projectile to hit the object instead of bypassing it - if(flags_atom & ON_BORDER) + if(atom_flags & ON_BORDER) if(!(cardinal_move & REVERSE_DIR(dir))) //The bullet will only hit if the barricade and its movement are facing opposite directions. if(!uncrossing) proj.uncross_scheduled += src return FALSE //No effect now, but we save the reference to check on exiting the tile. if (uncrossing) return FALSE //you don't hit the cade from behind. - if(proj.ammo.flags_ammo_behavior & AMMO_SNIPER || proj.iff_signal || proj.ammo.flags_ammo_behavior & AMMO_ROCKET) //sniper, rockets and IFF rounds are better at getting past cover + if(proj.ammo.ammo_behavior_flags & AMMO_SNIPER || proj.iff_signal) //sniper and IFF rounds are better at getting past cover hit_chance *= 0.8 ///50% better protection when shooting from outside accurate range. if(proj.distance_travelled > proj.ammo.accurate_range) @@ -721,7 +734,7 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a return src == proj.original_target /obj/vehicle/unmanned/projectile_hit(obj/projectile/proj, cardinal_move, uncrossing) - if(proj.firer == src) + if(proj.shot_from == src) return FALSE if(iff_signal & proj.iff_signal) proj.damage -= proj.damage*proj.damage_marine_falloff @@ -741,25 +754,23 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a return FALSE if(lying_angle && src != proj.original_target) return FALSE - if((proj.ammo.flags_ammo_behavior & AMMO_XENO) && (isnestedhost(src) || stat == DEAD)) + if((proj.ammo.ammo_behavior_flags & AMMO_XENO) && (isnestedhost(src) || stat == DEAD)) return FALSE if(pass_flags & PASS_PROJECTILE) //he's beginning to believe return FALSE //We want a temporary variable so accuracy doesn't change every time the bullet misses. var/hit_chance = proj.accuracy - BULLET_DEBUG("Base accuracy is [hit_chance]; scatter:[proj.scatter]; distance:[proj.distance_travelled]") + BULLET_DEBUG("Base accuracy is [hit_chance]; distance:[proj.distance_travelled]") hit_chance += (mob_size - 1) * 20 //You're easy to hit when you're swoll, hard to hit when you're a manlet ///Is the shooter a living mob. Defined before the check as used later as well - var/mob/living/shooter_living - if(isliving(proj.firer)) - shooter_living = proj.firer - if(shooter_living.faction == faction) + if(proj.firer) + if(proj.firer.faction == faction) hit_chance = round(hit_chance*0.85) //You (presumably) aren't trying to shoot your friends var/obj/item/shot_source = proj.shot_from - if(!line_of_sight(shooter_living, src, 9) && (!istype(shot_source) || !shot_source.zoom)) //if you can't draw LOS within 9 tiles (to accomodate wide screen), AND the source was either not zoomed or not an item(like a xeno) + if((!istype(shot_source) || !shot_source.zoom) && !line_of_sight(proj.starting_turf, src, 9)) //if you can't draw LOS within 9 tiles (to accomodate wide screen), AND the source was either not zoomed or not an item(like a xeno) BULLET_DEBUG("Can't see target ([round(hit_chance*0.8)]).") hit_chance = round(hit_chance*0.8) //Can't see the target (Opaque thing between shooter and target), or out of view range @@ -790,7 +801,7 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a BULLET_DEBUG("Moving (*[evasion_bonus]).") hit_chance = round(hit_chance * evasion_bonus) - if(proj.ammo.flags_ammo_behavior & AMMO_UNWIELDY) + if(proj.ammo.ammo_behavior_flags & AMMO_UNWIELDY) hit_chance *= 0.5 hit_chance = max(5, hit_chance) //It's never impossible to hit @@ -800,9 +811,6 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a var/hit_roll = rand(0, 99) //Our randomly generated roll if(hit_chance > hit_roll) //Hit - //friendly fire reduces the damage of the projectile, so only applies the multiplier if a hit is confirmed - if(shooter_living?.faction == faction) - proj.damage *= proj.friendly_fire_multiplier if(hit_roll > (hit_chance-25)) //if you hit by a small margin, you hit a random bodypart instead of what you were aiming for proj.def_zone = pick(GLOB.base_miss_chance) return TRUE @@ -811,7 +819,7 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a animatation_displace_reset(src) if(proj.ammo.sound_miss) var/pitch = 0 - if(proj.ammo.flags_ammo_behavior & AMMO_SOUND_PITCH) + if(proj.ammo.ammo_behavior_flags & AMMO_SOUND_PITCH) pitch = 55000 playsound_local(get_turf(src), proj.ammo.sound_miss, 75, 1, frequency = pitch) @@ -824,11 +832,16 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a /mob/living/carbon/do_projectile_hit(obj/projectile/proj) . = ..() - if(!(species?.species_flags & NO_BLOOD) && proj.ammo.flags_ammo_behavior & AMMO_BALLISTIC) + if(!(species?.species_flags & NO_BLOOD) && proj.ammo.ammo_behavior_flags & AMMO_BALLISTIC) var/angle = !isnull(proj.dir_angle) ? proj.dir_angle : round(Get_Angle(proj.starting_turf, src), 1) new /obj/effect/temp_visual/dir_setting/bloodsplatter(loc, angle, get_blood_color()) +/mob/living/carbon/projectile_hit(obj/projectile/proj, cardinal_move, uncrossing) + if(proj.projectile_behavior_flags & PROJECTILE_PRECISE_TARGET) + return proj.original_target == src ? TRUE : FALSE + return ..() + /mob/living/carbon/human/projectile_hit(obj/projectile/proj, cardinal_move, uncrossing) if(wear_id?.iff_signal & proj.iff_signal) proj.damage -= proj.damage*proj.damage_marine_falloff @@ -843,7 +856,7 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a return FALSE if(HAS_TRAIT(src, TRAIT_BURROWED)) return FALSE - if(proj.ammo.flags_ammo_behavior & AMMO_SKIPS_ALIENS) + if(proj.ammo.ammo_behavior_flags & AMMO_SKIPS_ALIENS) return FALSE return ..() */ //RUTGMC EDIT END @@ -879,21 +892,29 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a if(!damage) return + if(proj.projectile_behavior_flags & PROJECTILE_PRECISE_TARGET) + damage *= SNIPER_LASER_DAMAGE_MULTIPLIER + add_slowdown(SNIPER_LASER_SLOWDOWN_STACKS) + + //friendly fire reduces the damage of the projectile, so only applies the multiplier if a hit is confirmed + if(proj.firer) + if(proj.firer?.faction == faction) + damage *= proj.friendly_fire_multiplier + + if(iscarbon(proj.firer)) + var/mob/living/carbon/shooter_carbon = proj.firer + if(shooter_carbon.IsStaggered()) + damage *= STAGGER_DAMAGE_MULTIPLIER //Since we hate RNG, stagger reduces damage by a % instead of reducing accuracy; consider it a 'glancing' hit due to being disoriented. + damage = check_shields(COMBAT_PROJ_ATTACK, damage, proj.ammo.armor_type, FALSE, proj.penetration) if(!damage) proj.ammo.on_shield_block(src, proj) return - if(!damage) - return - flash_weak_pain() var/feedback_flags = NONE - if(proj.shot_from && src == proj.shot_from.sniper_target(src)) - damage *= SNIPER_LASER_DAMAGE_MULTIPLIER - if(iscarbon(proj.firer)) var/mob/living/carbon/shooter_carbon = proj.firer if(shooter_carbon.IsStaggered()) @@ -912,17 +933,17 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a feedback_flags |= BULLET_FEEDBACK_SOAK bullet_soak_effect(proj) - if(proj.ammo.flags_ammo_behavior & AMMO_INCENDIARY) + if(proj.ammo.ammo_behavior_flags & AMMO_INCENDIARY) adjust_fire_stacks(proj.ammo.incendiary_strength) if(IgniteMob()) feedback_flags |= (BULLET_FEEDBACK_FIRE) - if((proj.ammo.flags_ammo_behavior & AMMO_SUNDERING) && proj.sundering >= 20) // RUTGMC EDIT + if(proj.sundering >= 20) // RUTGMC EDIT adjust_sunder(proj.sundering) // RUTGMC EDIT - if(stat != DEAD && ismob(proj.firer)) - record_projectile_damage(proj.firer, damage) //Tally up whoever the shooter was + if(stat != DEAD && proj.firer) + proj.firer.record_projectile_damage(damage, src) //Tally up whoever the shooter was if(damage) if(do_shrapnel_roll(proj, damage)) @@ -956,7 +977,7 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a if(effect_icon) src.effect_icon = effect_icon -/obj/projectile/hitscan/fire_at(atom/target, atom/shooter, atom/source, range, speed, angle, recursivity, suppress_light, atom/loc_override = shooter) +/obj/projectile/hitscan/fire_at(atom/target, mob/living/shooter, atom/source, range, speed, angle, recursivity, suppress_light, atom/loc_override = source, scan_loc = FALSE) if(!isnull(range)) proj_max_range = range if(shooter) @@ -986,16 +1007,26 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a if(ammo.bonus_projectiles_amount) ammo.fire_bonus_projectiles(src, shooter, source, range, speed, dir_angle, target) - if(shooter.Adjacent(target) && ismob(target)) - var/mob/mob_to_hit = target - ammo.on_hit_mob(mob_to_hit, src) - mob_to_hit.bullet_act(src) + if(source.Adjacent(target) && PROJECTILE_HIT_CHECK(target, src, null, FALSE, null)) + target.do_projectile_hit(src) + if((!ismob(target) || !(ammo.ammo_behavior_flags & AMMO_PASS_THROUGH_MOB)) && !(ammo.ammo_behavior_flags & AMMO_PASS_THROUGH_MOVABLE)) + qdel(src) + return + hit_atoms += target + + if(original_target_turf == loc) //Shooting from and towards the same tile. Why not? + distance_travelled++ + scan_a_turf(loc) + qdel(src) + return + + if(scan_loc && scan_a_turf(loc)) qdel(src) return x_offset = round(sin(dir_angle), 0.01) y_offset = round(cos(dir_angle), 0.01) - if(projectile_batch_move(!recursivity) == PROJECTILE_FROZEN || (flags_projectile_behavior & PROJECTILE_FROZEN)) + if(projectile_batch_move(!recursivity) == PROJECTILE_FROZEN || (projectile_behavior_flags & PROJECTILE_FROZEN)) var/atom/movable/hitscan_projectile_effect/laser_effect = new /atom/movable/hitscan_projectile_effect(PROJ_ABS_PIXEL_TO_TURF(apx, apy, z), dir_angle, apx % 32 - 16, apy % 32 - 16, 1.01, effect_icon, ammo.bullet_color) RegisterSignal(loc, COMSIG_TURF_RESUME_PROJECTILE_MOVE, PROC_REF(resume_move)) laser_effect.RegisterSignal(loc, COMSIG_TURF_RESUME_PROJECTILE_MOVE, TYPE_PROC_REF(/atom/movable/hitscan_projectile_effect, remove_effect)) @@ -1080,9 +1111,9 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a continue thing_to_uncross.do_projectile_hit(src) /* RUTGMC DELETION START - if( (ammo.flags_ammo_behavior & AMMO_PASS_THROUGH_MOVABLE) || (ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.flags_ammo_behavior, AMMO_PASS_THROUGH_MOB)) ) + if( (ammo.ammo_behavior_flags & AMMO_PASS_THROUGH_MOVABLE) || (ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.ammo_behavior_flags, AMMO_PASS_THROUGH_MOB)) ) RUTGMC DELETION END */ - if(ammo.flags_ammo_behavior & AMMO_PASS_THROUGH_MOVABLE && !iscontainmentshutter(thing_to_uncross) || ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.flags_ammo_behavior, AMMO_PASS_THROUGH_MOB)) // RUTGMC ADDITION + if(ammo.ammo_behavior_flags & AMMO_PASS_THROUGH_MOVABLE && !iscontainmentshutter(thing_to_uncross) || ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.ammo_behavior_flags, AMMO_PASS_THROUGH_MOB)) // RUTGMC ADDITION hit_atoms += thing_to_uncross continue end_of_movement = TRUE @@ -1092,7 +1123,7 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a break if(scan_a_turf(turf_crossed_by, border_escaped_through)) break - if(turf_crossed_by == original_target_turf && ammo.flags_ammo_behavior & AMMO_EXPLOSIVE) + if(turf_crossed_by == original_target_turf && ammo.ammo_behavior_flags & AMMO_TARGET_TURF) last_processed_turf = turf_crossed_by ammo.do_at_max_range(turf_crossed_by, src) end_of_movement = TRUE @@ -1111,9 +1142,9 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a continue thing_to_uncross.do_projectile_hit(src) /* RUTGMC DELETION START - if( (ammo.flags_ammo_behavior & AMMO_PASS_THROUGH_MOVABLE) || (ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.flags_ammo_behavior, AMMO_PASS_THROUGH_MOB)) ) + if( (ammo.ammo_behavior_flags & AMMO_PASS_THROUGH_MOVABLE) || (ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.ammo_behavior_flags, AMMO_PASS_THROUGH_MOB)) ) RUTGMC DELETION END */ - if(ammo.flags_ammo_behavior & AMMO_PASS_THROUGH_MOVABLE && !iscontainmentshutter(thing_to_uncross) || ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.flags_ammo_behavior, AMMO_PASS_THROUGH_MOB)) // RUTGMC ADDITION + if(ammo.ammo_behavior_flags & AMMO_PASS_THROUGH_MOVABLE && !iscontainmentshutter(thing_to_uncross) || ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.ammo_behavior_flags, AMMO_PASS_THROUGH_MOB)) // RUTGMC ADDITION hit_atoms += thing_to_uncross continue end_of_movement = TRUE @@ -1121,8 +1152,8 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a uncross_scheduled.Cut() if(end_of_movement) break - if(ammo.flags_ammo_behavior & AMMO_LEAVE_TURF) - ammo.on_leave_turf(turf_crossed_by, firer, src) + if(ammo.ammo_behavior_flags & AMMO_LEAVE_TURF) + ammo.on_leave_turf(turf_crossed_by, src) if(length(uncross_scheduled)) //Time to exit the last turf entered, if the diagonal movement didn't handle it already. for(var/atom/movable/thing_to_uncross AS in uncross_scheduled) if(QDELETED(thing_to_uncross)) @@ -1131,9 +1162,9 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a continue //We act as if we were entering the tile through the opposite direction, to check for barricade blockage. thing_to_uncross.do_projectile_hit(src) /* RUTGMC DELETION START - if( (ammo.flags_ammo_behavior & AMMO_PASS_THROUGH_MOVABLE) || (ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.flags_ammo_behavior, AMMO_PASS_THROUGH_MOB)) ) + if( (ammo.ammo_behavior_flags & AMMO_PASS_THROUGH_MOVABLE) || (ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.ammo_behavior_flags, AMMO_PASS_THROUGH_MOB)) ) RUTGMC DELETION END */ - if(ammo.flags_ammo_behavior & AMMO_PASS_THROUGH_MOVABLE && !iscontainmentshutter(thing_to_uncross) || ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.flags_ammo_behavior, AMMO_PASS_THROUGH_MOB)) // RUTGMC ADDITION + if(ammo.ammo_behavior_flags & AMMO_PASS_THROUGH_MOVABLE && !iscontainmentshutter(thing_to_uncross) || ismob(thing_to_uncross) && CHECK_BITFIELD(ammo.ammo_behavior_flags, AMMO_PASS_THROUGH_MOB)) // RUTGMC ADDITION hit_atoms += thing_to_uncross continue end_of_movement = TRUE @@ -1141,13 +1172,13 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a uncross_scheduled.len = 0 if(end_of_movement) break - if(ammo.flags_ammo_behavior & AMMO_LEAVE_TURF) - ammo.on_leave_turf(last_processed_turf, firer, src) + if(ammo.ammo_behavior_flags & AMMO_LEAVE_TURF) + ammo.on_leave_turf(last_processed_turf, src) last_processed_turf = next_turf if(scan_a_turf(next_turf, movement_dir)) end_of_movement = TRUE break - if(next_turf == original_target_turf && ammo.flags_ammo_behavior & AMMO_EXPLOSIVE) + if(next_turf == original_target_turf && ammo.ammo_behavior_flags & AMMO_TARGET_TURF) ammo.do_at_max_range(next_turf, src) end_of_movement = TRUE break @@ -1211,7 +1242,7 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a /mob/living/carbon/human/do_shrapnel_roll(obj/projectile/proj, damage) - return (!(SSticker.mode?.flags_round_type & MODE_NO_PERMANENT_WOUNDS) && proj.ammo.shrapnel_chance && prob(proj.ammo.shrapnel_chance + damage * 0.1)) + return (!(SSticker.mode?.round_type_flags & MODE_NO_PERMANENT_WOUNDS) && proj.ammo.shrapnel_chance && prob(proj.ammo.shrapnel_chance + damage * 0.1)) //Turf handling. @@ -1249,7 +1280,7 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a if(damage < 1) return FALSE - if(proj.ammo.flags_ammo_behavior & AMMO_BALLISTIC) + if(proj.ammo.ammo_behavior_flags & AMMO_BALLISTIC) current_bulletholes++ if(prob(30)) @@ -1283,7 +1314,7 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a /mob/living/carbon/human/bullet_message(obj/projectile/proj, feedback_flags, damage) . = ..() var/list/victim_feedback = list() - if(proj.ammo.flags_ammo_behavior & AMMO_IS_SILENCED) + if(proj.shot_from && HAS_TRAIT(proj.shot_from, TRAIT_GUN_SILENCED)) victim_feedback += "You've been shot in the [parse_zone(proj.def_zone)] by [proj]!" else victim_feedback += "You are hit by [proj] in the [parse_zone(proj.def_zone)]!" @@ -1320,7 +1351,7 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a /mob/living/carbon/xenomorph/bullet_message(obj/projectile/proj, feedback_flags, damage) . = ..() var/list/victim_feedback - if(proj.ammo.flags_ammo_behavior & AMMO_IS_SILENCED) + if(proj.shot_from && HAS_TRAIT(proj.shot_from, TRAIT_GUN_SILENCED)) victim_feedback = list("We've been shot in the [parse_zone(proj.def_zone)] by [proj]!") else victim_feedback = list("We are hit by the [proj] in the [parse_zone(proj.def_zone)]!") @@ -1351,6 +1382,50 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a /mob/living/proc/get_sunder() return 0 + +/** + * Fires a list of projectile objects in a circle around an atom + * Arguments: + * * source: [mandatory] atom the bullets are emitting from + * * bullets: [mandatory] list of bullets (in order, clockwise) to fire + * * firer: atom that "shot" these bullets + * * fire_sound: sound to play while the bullets are firing + * * range: bullet range + * * speed: bullet speed + * * randomized: bool, if true we randomly pick where we're firing instead of evenly seperated + * * rotations: how many times to "spin" the rotation. if 0 or less, instead bursts all the bullets at once + */ +/proc/bullet_burst(atom/source, list/obj/projectile/bullets, mob/living/firer, fire_sound, range, speed, randomized = FALSE, rotations = -1) + var/angle_between_bullets = 0 + var/current_angle = 0 + + //fire in an instant burst, no shrapnel + if(rotations < 1) + angle_between_bullets = 360 / length(bullets) + for(var/obj/projectile/proj in bullets) + if(randomized) + current_angle = rand(1, 360) + else + current_angle += angle_between_bullets + + proj.fire_at(null, firer, source, range, speed, current_angle, scan_loc = TRUE) + if(fire_sound) + playsound(source, fire_sound, 60, TRUE) + return + + angle_between_bullets = 360 / (length(bullets) / rotations) + var/play_sound + for(var/obj/projectile/proj in bullets) + if(randomized) + current_angle = rand(1, 360) + else + current_angle += angle_between_bullets + + proj.fire_at(null, firer, source, range, speed, current_angle, scan_loc = TRUE) + if(play_sound % 3 && fire_sound) + playsound(source, fire_sound, 60, FALSE) + stoplag(1) + #undef BULLET_FEEDBACK_PEN #undef BULLET_FEEDBACK_SOAK #undef BULLET_FEEDBACK_FIRE diff --git a/code/modules/projectiles/sentries.dm b/code/modules/projectiles/sentries.dm index 254023554f049..e067e21adece7 100644 --- a/code/modules/projectiles/sentries.dm +++ b/code/modules/projectiles/sentries.dm @@ -4,6 +4,7 @@ use_power = 0 req_one_access = list(ACCESS_MARINE_ENGINEERING, ACCESS_MARINE_ENGPREP, ACCESS_MARINE_LEADER) hud_possible = list(MACHINE_HEALTH_HUD, MACHINE_AMMO_HUD) + allow_pass_flags = PASSABLE ///Spark system for making sparks var/datum/effect_system/spark_spread/spark_system @@ -301,7 +302,7 @@ set_on(FALSE) update_icon() -/obj/machinery/deployable/mounted/sentry/take_damage(damage_amount, damage_type, damage_flag, effects, attack_dir, armour_penetration) +/obj/machinery/deployable/mounted/sentry/take_damage(damage_amount, damage_type = BRUTE, armor_type = null, effects = TRUE, attack_dir, armour_penetration = 0, mob/living/blame_mob) if(damage_amount <= 0) return if(prob(10)) @@ -374,7 +375,7 @@ var/obj/item/weapon/gun/gun = get_internal_item() potential_targets.Cut() if(!gun) - return length(potential_targets) + return FALSE for(var/mob/living/carbon/human/nearby_human AS in cheap_get_humans_near(src, range)) if(nearby_human.stat == DEAD || CHECK_BITFIELD(nearby_human.status_flags, INCORPOREAL) || (CHECK_BITFIELD(gun.turret_flags, TURRET_SAFETY) || nearby_human.wear_id?.iff_signal & iff_signal) || HAS_TRAIT(nearby_human, TRAIT_TURRET_HIDDEN)) //RU TGMC EDIT continue @@ -400,7 +401,7 @@ return if(CHECK_BITFIELD(internal_gun.reciever_flags, AMMO_RECIEVER_REQUIRES_UNIQUE_ACTION) && length(internal_gun.chamber_items)) INVOKE_ASYNC(internal_gun, TYPE_PROC_REF(/obj/item/weapon/gun, do_unique_action)) - if(!CHECK_BITFIELD(internal_gun.flags_item, IS_DEPLOYED) || get_dist(src, gun_target) > range || (!CHECK_BITFIELD(get_dir(src, gun_target), dir) && !CHECK_BITFIELD(internal_gun.turret_flags, TURRET_RADIAL)) || !check_target_path(gun_target)) + if(!CHECK_BITFIELD(internal_gun.item_flags, IS_DEPLOYED) || get_dist(src, gun_target) > range || (!CHECK_BITFIELD(get_dir(src, gun_target), dir) && !CHECK_BITFIELD(internal_gun.turret_flags, TURRET_RADIAL)) || !check_target_path(gun_target)) internal_gun.stop_fire() firing = FALSE update_minimap_icon() @@ -412,9 +413,10 @@ ///Sees if theres a target to shoot, then handles firing. /obj/machinery/deployable/mounted/sentry/proc/sentry_start_fire() var/obj/item/weapon/gun/gun = get_internal_item() - var/mob/living/target = get_target() + var/atom/target = get_target() + sentry_alert(SENTRY_ALERT_HOSTILE, target) update_icon() - if(!target || get_dist(src, target) > range) + if(!target) gun.stop_fire() firing = FALSE update_minimap_icon() @@ -437,6 +439,8 @@ ///Checks the path to the target for obstructions. Returns TRUE if the path is clear, FALSE if not. /obj/machinery/deployable/mounted/sentry/proc/check_target_path(atom/target) + if(target.loc == loc) + return TRUE var/list/turf/path = getline(src, target) var/turf/starting_turf = get_turf(src) var/turf/target_turf = path[length(path)-1] @@ -452,6 +456,8 @@ break if(i==2) return FALSE + + var/obj/item/weapon/gun/gun = get_internal_item() for(var/turf/T AS in path) var/obj/effect/particle_effect/smoke/smoke = locate() in T if(smoke?.opacity) @@ -460,36 +466,29 @@ if(IS_OPAQUE_TURF(T) || T.density && !(T.allow_pass_flags & PASS_PROJECTILE) && !(T.type in ignored_terrains)) return FALSE - for(var/obj/machinery/MA in T) - if(MA.density && !(MA.allow_pass_flags & PASS_PROJECTILE) && !(MA.type in ignored_terrains)) + for(var/atom/movable/AM AS in T) + if(AM.opacity) return FALSE - - for(var/obj/structure/S in T) - if(S.density && !(S.allow_pass_flags & PASS_PROJECTILE) && !(S.type in ignored_terrains)) + if(!AM.density) + continue + if(ismob(AM)) + continue + if(!(AM.allow_pass_flags & (gun.ammo_datum_type::ammo_behavior_flags & AMMO_ENERGY ? (PASS_GLASS|PASS_PROJECTILE) : PASS_PROJECTILE) && !(AM.type in ignored_terrains))) //todo:accurately populate ignored_terrains return FALSE return TRUE ///Works through potential targets. First checks if they are in range, and if they are friend/foe. Then checks the path to them. Returns the first eligable target. /obj/machinery/deployable/mounted/sentry/proc/get_target() - var/distance = range + 0.5 //we add 0.5 so if a potential target is at range, it is accepted by the system - var/buffer_distance var/obj/item/weapon/gun/gun = get_internal_item() - for (var/atom/nearby_target AS in potential_targets) - if(!(get_dir(src, nearby_target) & dir) && !CHECK_BITFIELD(gun.turret_flags, TURRET_RADIAL)) - continue - - buffer_distance = get_dist(nearby_target, src) + for(var/atom/nearby_target AS in potential_targets) + if(nearby_target.loc == loc) + return nearby_target - if (distance <= buffer_distance) + if(!(get_dir(src, nearby_target) & dir) && !CHECK_BITFIELD(gun.turret_flags, TURRET_RADIAL)) continue - if(!check_target_path(nearby_target)) continue - - sentry_alert(SENTRY_ALERT_HOSTILE, nearby_target) - - distance = buffer_distance return nearby_target /obj/machinery/deployable/mounted/sentry/disassemble(mob/user) @@ -546,8 +545,8 @@ var/obj/item/item = get_internal_item() if(!item) return - if(CHECK_BITFIELD(item.flags_item, DEPLOYED_NO_PICKUP)) - to_chat(user, span_notice("[src] is anchored in place and cannot be disassembled.")) + if(CHECK_BITFIELD(item.item_flags, DEPLOYED_NO_PICKUP)) + balloon_alert(user, "Cannot disassemble") return if(!match_iff(user)) //You can't steal other faction's turrets to_chat(user, span_notice("Access denied.")) @@ -564,7 +563,7 @@ set_on(TRUE) return - DISABLE_BITFIELD(attached_item.flags_item, IS_DEPLOYED) + DISABLE_BITFIELD(attached_item.item_flags, IS_DEPLOYED) attached_item.reset() user.unset_interaction() @@ -576,4 +575,4 @@ internal_item = null QDEL_NULL(src) - attached_item.update_icon_state() + attached_item.update_appearance() diff --git a/code/modules/reagents/machinery/chem_dispenser.dm b/code/modules/reagents/machinery/chem_dispenser.dm index 67114d765de9b..ea850995071f3 100644 --- a/code/modules/reagents/machinery/chem_dispenser.dm +++ b/code/modules/reagents/machinery/chem_dispenser.dm @@ -332,6 +332,8 @@ /obj/machinery/chem_dispenser/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(isreagentcontainer(I)) if(beaker) @@ -408,6 +410,7 @@ . += image(icon, "[initial(icon_state)]_nobat") /obj/machinery/chem_dispenser/update_icon_state() + . = ..() if(machine_stat & NOPOWER) icon_state = "dispenser_nopower" return @@ -470,6 +473,7 @@ /obj/machinery/chem_dispenser/soda/update_icon_state() return + /obj/machinery/chem_dispenser/beer icon_state = "booze_dispenser" name = "booze dispenser" diff --git a/code/modules/reagents/machinery/chem_master.dm b/code/modules/reagents/machinery/chem_master.dm index 8f6b53ccc3ccf..af92541a0658c 100644 --- a/code/modules/reagents/machinery/chem_master.dm +++ b/code/modules/reagents/machinery/chem_master.dm @@ -64,6 +64,8 @@ /obj/machinery/chem_master/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I,/obj/item/reagent_containers) && I.is_open_container()) for(var/datum/reagent/X in I.reagents.reagent_list) @@ -415,7 +417,8 @@ popup.set_content(dat) popup.open() -/obj/machinery/chem_master/update_icon() +/obj/machinery/chem_master/update_icon_state() + . = ..() if(machine_stat & BROKEN) icon_state = (beaker?"mixer1_b":"mixer0_b") else if(machine_stat & NOPOWER) diff --git a/code/modules/reagents/machinery/reagentgrinder.dm b/code/modules/reagents/machinery/reagentgrinder.dm index 8127b8113fb6c..3768c5d20fe7e 100644 --- a/code/modules/reagents/machinery/reagentgrinder.dm +++ b/code/modules/reagents/machinery/reagentgrinder.dm @@ -66,12 +66,15 @@ /obj/machinery/reagentgrinder/update_icon_state() + . = ..() icon_state = "juicer"+num2text(!isnull(beaker)) /obj/machinery/reagentgrinder/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/reagent_containers) && I.is_open_container()) if(beaker) diff --git a/code/modules/reagents/reactions/medical.dm b/code/modules/reagents/reactions/medical.dm index 435ac7e8e7305..399d920e97d4d 100644 --- a/code/modules/reagents/reactions/medical.dm +++ b/code/modules/reagents/reactions/medical.dm @@ -22,7 +22,7 @@ /datum/chemical_reaction/dermalime name = "Dermaline" - results = list(/datum/reagent/medicine/dermaline = 3) + results = list(/datum/reagent/medicine/dermaline = 4) required_reagents = list(/datum/reagent/oxygen = 1, /datum/reagent/phosphorus = 1, /datum/reagent/medicine/kelotane = 1, /datum/reagent/medicine/lemoline = 1) /datum/chemical_reaction/dexalinplus @@ -37,12 +37,12 @@ /datum/chemical_reaction/meralyne name = "Meralyne" - results = list(/datum/reagent/medicine/meralyne = 3) + results = list(/datum/reagent/medicine/meralyne = 4) required_reagents = list(/datum/reagent/medicine/inaprovaline = 1, /datum/reagent/medicine/bicaridine = 1, /datum/reagent/iron = 1, /datum/reagent/medicine/lemoline = 1) /* RU TGMC EDIT /datum/chemical_reaction/ryetalyn name = "Ryetalyn" - results = list(/datum/reagent/medicine/ryetalyn = 2) + results = list(/datum/reagent/medicine/ryetalyn = 3) required_reagents = list(/datum/reagent/medicine/arithrazine = 1, /datum/reagent/carbon = 1, /datum/reagent/medicine/lemoline = 1) RU TGMC EDIT */ /datum/chemical_reaction/cryoxadone @@ -120,7 +120,7 @@ RU TGMC EDIT */ /datum/chemical_reaction/synaptizine name = "Synaptizine" - results = list(/datum/reagent/medicine/synaptizine = 3) + results = list(/datum/reagent/medicine/synaptizine = 4) required_reagents = list(/datum/reagent/consumable/sugar = 1, /datum/reagent/lithium = 1, /datum/reagent/water = 1, /datum/reagent/medicine/lemoline = 1) /datum/chemical_reaction/leporazine @@ -131,7 +131,7 @@ RU TGMC EDIT */ /datum/chemical_reaction/hyronalin name = "Hyronalin" - results = list(/datum/reagent/medicine/hyronalin = 2) + results = list(/datum/reagent/medicine/hyronalin = 3) required_reagents = list(/datum/reagent/radium = 1, /datum/reagent/medicine/dylovene = 1, /datum/reagent/medicine/lemoline = 1) /datum/chemical_reaction/arithrazine @@ -215,9 +215,9 @@ RU TGMC EDIT */ /datum/chemical_reaction/medicalnanites name = "Medical Nanites" - results = list(/datum/reagent/medicine/research/medicalnanites = 9) + results = list(/datum/reagent/medicalnanites = 9) required_reagents = list(/datum/reagent/iron = 10, /datum/reagent/medicine/lemoline = 1) - required_catalysts = list(/datum/reagent/medicine/research/medicalnanites = 1) + required_catalysts = list(/datum/reagent/medicalnanites = 1) /datum/chemical_reaction/stimulum name = "Stimulum" diff --git a/code/modules/reagents/reagents.dm b/code/modules/reagents/reagents.dm index bdfc9d7e5f21b..1b9c22354464e 100644 --- a/code/modules/reagents/reagents.dm +++ b/code/modules/reagents/reagents.dm @@ -48,7 +48,7 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) /// increases as addiction gets worse var/addiction_stage = 0 /// does this show up on health analyzers - var/scannable = FALSE + var/scannable = TRUE /// if false stops metab in liverless mobs var/self_consuming = FALSE /// List of reagents removed by this chemical diff --git a/code/modules/reagents/reagents/alcohol.dm b/code/modules/reagents/reagents/alcohol.dm index 35572bfb82fca..ec99287b8562a 100644 --- a/code/modules/reagents/reagents/alcohol.dm +++ b/code/modules/reagents/reagents/alcohol.dm @@ -400,7 +400,7 @@ All effects don't start immediately, but rather get worse over time; the rate is /datum/reagent/consumable/ethanol/bloody_mary/on_mob_life(mob/living/L, metabolism) if(L.blood_volume < BLOOD_VOLUME_NORMAL) - L.blood_volume += 0.3 //Bloody Mary slowly restores blood loss. + L.adjust_blood_volume(0.3) //Bloody Mary slowly restores blood loss. return ..() /datum/reagent/consumable/ethanol/brave_bull diff --git a/code/modules/reagents/reagents/food.dm b/code/modules/reagents/reagents/food.dm index fe156088ab262..3473b5458b1ad 100644 --- a/code/modules/reagents/reagents/food.dm +++ b/code/modules/reagents/reagents/food.dm @@ -37,7 +37,7 @@ if(iscarbon(L)) var/mob/living/carbon/C = L if(C.blood_volume < BLOOD_VOLUME_NORMAL) - C.blood_volume += blood_gain + C.adjust_blood_volume(blood_gain) return ..() @@ -156,17 +156,17 @@ var/eyes_covered = 0 var/obj/item/safe_thing = null if( victim.wear_mask ) - if( victim.wear_mask.flags_inventory & COVEREYES ) + if( victim.wear_mask.inventory_flags & COVEREYES ) eyes_covered = 1 safe_thing = victim.wear_mask - if( victim.wear_mask.flags_inventory & COVERMOUTH ) + if( victim.wear_mask.inventory_flags & COVERMOUTH ) mouth_covered = 1 safe_thing = victim.wear_mask if( victim.head ) - if( victim.head.flags_inventory & COVEREYES ) + if( victim.head.inventory_flags & COVEREYES ) eyes_covered = 1 safe_thing = victim.head - if( victim.head.flags_inventory & COVERMOUTH ) + if( victim.head.inventory_flags & COVERMOUTH ) mouth_covered = 1 safe_thing = victim.head if(victim.glasses) diff --git a/code/modules/reagents/reagents/medical.dm b/code/modules/reagents/reagents/medical.dm index 7db937e5cd0f5..262f05ebefcf7 100644 --- a/code/modules/reagents/reagents/medical.dm +++ b/code/modules/reagents/reagents/medical.dm @@ -13,7 +13,6 @@ color = COLOR_REAGENT_INAPROVALINE overdose_threshold = REAGENTS_OVERDOSE*2 overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL*2 - scannable = TRUE trait_flags = TACHYCARDIC /datum/reagent/medicine/inaprovaline/on_mob_add(mob/living/L, metabolism) @@ -54,7 +53,6 @@ description = "Ryetalyn is a long-duration shield against toxic chemicals." reagent_state = SOLID color = COLOR_REAGENT_RYETALYN - scannable = TRUE custom_metabolism = REAGENTS_METABOLISM * 0.125 purge_list = list(/datum/reagent/toxin, /datum/reagent/zombium) purge_rate = 5 @@ -87,7 +85,6 @@ name = "Paracetamol" description = "Most probably know this as Tylenol, but this chemical is a mild, simple painkiller, good for enduring heavy labor." color = COLOR_REAGENT_PARACETAMOL - scannable = TRUE custom_metabolism = REAGENTS_METABOLISM * 0.125 purge_list = list(/datum/reagent/medicine/kelotane, /datum/reagent/medicine/bicaridine) purge_rate = 1 @@ -115,7 +112,6 @@ name = "Tramadol" description = "A simple, yet effective painkiller." color = COLOR_REAGENT_TRAMADOL - scannable = TRUE custom_metabolism = REAGENTS_METABOLISM * 0.5 overdose_threshold = REAGENTS_OVERDOSE overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL @@ -141,7 +137,6 @@ custom_metabolism = REAGENTS_METABOLISM * 1.25 overdose_threshold = REAGENTS_OVERDOSE * 0.5 overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL * 0.5 - scannable = TRUE /datum/reagent/medicine/oxycodone/on_mob_add(mob/living/L, metabolism) if(TIMER_COOLDOWN_CHECK(L, name)) @@ -183,7 +178,6 @@ custom_metabolism = REAGENTS_METABOLISM * 2 overdose_threshold = REAGENTS_OVERDOSE*0.6 //You aren't using this out of combat. And only the B18 makes it. overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL*0.5 - scannable = TRUE /datum/reagent/medicine/hydrocodone/on_mob_life(mob/living/L, metabolism) L.reagent_pain_modifier += PAIN_REDUCTION_VERY_HEAVY @@ -202,7 +196,6 @@ name = "Leporazine" description = "Leporazine can be use to stabilize an individuals body temperature." color = COLOR_REAGENT_LEPORAZINE - scannable = TRUE overdose_threshold = REAGENTS_OVERDOSE overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL @@ -225,7 +218,6 @@ name = "Kelotane" description = "Kelotane is a drug used to treat burns." color = COLOR_REAGENT_KELOTANE - scannable = TRUE purge_list = list(/datum/reagent/medicine/ryetalyn) purge_rate = 1 overdose_threshold = REAGENTS_OVERDOSE @@ -255,7 +247,6 @@ color = COLOR_REAGENT_DERMALINE overdose_threshold = REAGENTS_OVERDOSE*0.5 overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL*0.5 - scannable = TRUE purge_list = list(/datum/reagent/medicine/oxycodone) purge_rate = 0.2 @@ -285,11 +276,10 @@ overdose_threshold = REAGENTS_OVERDOSE overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL taste_description = "salty water" - scannable = TRUE /datum/reagent/medicine/saline_glucose/on_mob_life(mob/living/L, metabolism) if(L.blood_volume < BLOOD_VOLUME_NORMAL) - L.blood_volume += 1.2 + L.adjust_blood_volume(1.2) return ..() /datum/reagent/medicine/saline_glucose/overdose_process(mob/living/L, metabolism) @@ -304,7 +294,6 @@ color = COLOR_REAGENT_DEXALIN overdose_threshold = REAGENTS_OVERDOSE overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL - scannable = TRUE /datum/reagent/medicine/dexalin/on_mob_life(mob/living/L,metabolism) L.adjustOxyLoss(-3*effect_str) @@ -325,7 +314,6 @@ color = COLOR_REAGENT_DEXALINPLUS overdose_threshold = REAGENTS_OVERDOSE/2 overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL/2 - scannable = TRUE /datum/reagent/medicine/dexalinplus/on_mob_life(mob/living/L,metabolism) L.adjustOxyLoss(-L.getOxyLoss()) @@ -342,7 +330,6 @@ name = "Tricordrazine" description = "Tricordrazine is a highly potent stimulant, originally derived from cordrazine. Can be used to treat a wide range of injuries." color = COLOR_REAGENT_TRICORDRAZINE - scannable = TRUE purge_list = list(/datum/reagent/medicine/ryetalyn) purge_rate = 1 overdose_threshold = REAGENTS_OVERDOSE @@ -371,7 +358,6 @@ name = "Dylovene" description = "Dylovene is a broad-spectrum antitoxin." color = COLOR_REAGENT_DYLOVENE - scannable = TRUE purge_list = list(/datum/reagent/toxin, /datum/reagent/medicine/research/stimulon, /datum/reagent/consumable/drink/atomiccoffee, /datum/reagent/medicine/paracetamol, /datum/reagent/medicine/larvaway) purge_rate = 1 overdose_threshold = REAGENTS_OVERDOSE @@ -446,7 +432,6 @@ color = COLOR_REAGENT_SYNAPTIZINE overdose_threshold = REAGENTS_OVERDOSE/5 overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL/5 - scannable = TRUE custom_metabolism = REAGENTS_METABOLISM * 0.5 purge_list = list(/datum/reagent/toxin/mindbreaker) purge_rate = 5 @@ -541,7 +526,6 @@ custom_metabolism = REAGENTS_METABOLISM overdose_threshold = REAGENTS_OVERDOSE overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL - scannable = TRUE /datum/reagent/medicine/hyronalin/on_mob_life(mob/living/L) L.adjustToxLoss(-effect_str) @@ -560,7 +544,6 @@ custom_metabolism = REAGENTS_METABOLISM overdose_threshold = REAGENTS_OVERDOSE/2 overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL/2 - scannable = TRUE /datum/reagent/medicine/arithrazine/on_mob_life(mob/living/L) L.adjustToxLoss(-0.5*effect_str) @@ -581,7 +564,6 @@ custom_metabolism = REAGENTS_METABOLISM * 5 overdose_threshold = REAGENTS_OVERDOSE/2 //so it makes the OD threshold effectively 15 so two pills is too much but one is fine overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL/2.5 //and this makes the Critical OD 20 - scannable = TRUE /datum/reagent/medicine/russian_red/on_mob_add(mob/living/L, metabolism) var/mob/living/carbon/human/H = L @@ -617,7 +599,6 @@ custom_metabolism = REAGENTS_METABOLISM * 0.25 overdose_threshold = REAGENTS_OVERDOSE overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL - scannable = TRUE /datum/reagent/medicine/alkysine/on_mob_life(mob/living/L, metabolism) L.reagent_shock_modifier += PAIN_REDUCTION_VERY_LIGHT @@ -637,7 +618,6 @@ color = COLOR_REAGENT_IMIDAZOLINE overdose_threshold = REAGENTS_OVERDOSE overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL - scannable = TRUE taste_description = "dull toxin" /datum/reagent/medicine/imidazoline/on_mob_life(mob/living/L, metabolism) @@ -663,10 +643,9 @@ overdose_threshold = REAGENTS_OVERDOSE/30 overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL/25 custom_metabolism = REAGENTS_METABOLISM * 0.5 - scannable = TRUE /datum/reagent/medicine/peridaxon_plus/on_mob_life(mob/living/L, metabolism) - L.reagents.add_reagent(/datum/reagent/toxin,5) + L.reagents.add_reagent(/datum/reagent/toxin/scannable,5) L.adjustStaminaLoss(10*effect_str) if(!ishuman(L)) return ..() @@ -692,7 +671,6 @@ purge_rate = 1 overdose_threshold = REAGENTS_OVERDOSE overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL - scannable = TRUE /datum/reagent/medicine/bicaridine/on_mob_life(mob/living/L, metabolism) L.heal_overall_damage(effect_str, 0) @@ -716,7 +694,6 @@ color = COLOR_REAGENT_MERALYNE overdose_threshold = REAGENTS_OVERDOSE*0.5 overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL*0.5 - scannable = TRUE purge_list = list(/datum/reagent/medicine/oxycodone) purge_rate = 0.2 @@ -742,11 +719,10 @@ color = COLOR_REAGENT_QUICKCLOT overdose_threshold = REAGENTS_OVERDOSE/2 //Was 4, now 6 //Now 15 overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL/2 - scannable = TRUE //scannable now. HUZZAH. custom_metabolism = REAGENTS_METABOLISM * 0.25 /datum/reagent/medicine/quickclot/on_mob_life(mob/living/L, metabolism) - L.blood_volume += 0.2 + L.adjust_blood_volume(0.2) if(!ishuman(L) || L.bodytemperature > 169) //only heals IB at cryogenic temperatures. return ..() var/mob/living/carbon/human/H = L @@ -769,7 +745,6 @@ color = COLOR_REAGENT_QUICKCLOTPLUS overdose_threshold = REAGENTS_OVERDOSE/5 //6u overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL/5 //12u - scannable = TRUE custom_metabolism = REAGENTS_METABOLISM * 2.5 ///The IB wound this dose of QCP will cure, if it lasts long enough var/datum/wound/internal_bleeding/target_IB @@ -788,7 +763,7 @@ target_IB = null /datum/reagent/medicine/quickclotplus/on_mob_life(mob/living/L, metabolism) - L.reagents.add_reagent(/datum/reagent/toxin,5) + L.reagents.add_reagent(/datum/reagent/toxin/scannable,5) L.reagent_shock_modifier -= PAIN_REDUCTION_VERY_HEAVY L.adjustStaminaLoss(15*effect_str) if(!target_IB) @@ -832,10 +807,10 @@ /datum/reagent/medicine/quickclotplus/overdose_process(mob/living/L, metabolism) L.apply_damage(1.5*effect_str, TOX) - L.blood_volume -= 4 + L.adjust_blood_volume(-4) /datum/reagent/medicine/quickclotplus/overdose_crit_process(mob/living/L, metabolism) - L.blood_volume -= 20 + L.adjust_blood_volume(-20) /datum/reagent/medicine/nanoblood name = "Nanoblood" @@ -843,17 +818,16 @@ color = COLOR_REAGENT_NANOBLOOD overdose_threshold = REAGENTS_OVERDOSE/5 //6u overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL/5 //10u - scannable = TRUE /datum/reagent/medicine/nanoblood/on_mob_life(mob/living/L, metabolism) - L.blood_volume += 2.4 + L.adjust_blood_volume(2.4) L.adjustToxLoss(effect_str) L.adjustStaminaLoss(6*effect_str) if(L.blood_volume < BLOOD_VOLUME_OKAY) - L.blood_volume += 2.4 + L.adjust_blood_volume(2.4) if(L.blood_volume < BLOOD_VOLUME_BAD) - L.blood_volume = (BLOOD_VOLUME_BAD+1) - L.reagents.add_reagent(/datum/reagent/toxin,25) + L.set_blood_volume(BLOOD_VOLUME_BAD+1) + L.reagents.add_reagent(/datum/reagent/toxin/scannable,25) L.AdjustSleeping(10 SECONDS) return ..() @@ -967,7 +941,6 @@ description = "A chemical mixture with almost magical healing powers. Its main limitation is that the targets body temperature must be under 170K for it to metabolise correctly." reagent_state = LIQUID color = COLOR_REAGENT_CRYOXADONE - scannable = TRUE taste_description = "sludge" trait_flags = BRADYCARDICS @@ -983,7 +956,6 @@ name = "Clonexadone" description = "A liquid compound similar to that used in the cloning process. Can be used to 'finish' the cloning process when used in conjunction with a cryo tube." color = COLOR_REAGENT_CLONEXADONE - scannable = TRUE taste_description = "muscle" trait_flags = BRADYCARDICS @@ -1003,7 +975,6 @@ color = COLOR_REAGENT_REZADONE overdose_threshold = REAGENTS_OVERDOSE overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL - scannable = TRUE taste_description = "fish" /datum/reagent/medicine/rezadone/on_mob_life(mob/living/L, metabolism) @@ -1038,7 +1009,6 @@ custom_metabolism = REAGENTS_METABOLISM * 0.05 overdose_threshold = REAGENTS_OVERDOSE overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL - scannable = TRUE /datum/reagent/medicine/spaceacillin/overdose_process(mob/living/L, metabolism) L.apply_damage(effect_str, TOX) @@ -1052,7 +1022,6 @@ color = COLOR_REAGENT_POLYHEXANIDE custom_metabolism = REAGENTS_METABOLISM * 2 overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL - scannable = TRUE /datum/reagent/medicine/polyhexanide/on_mob_life(mob/living/L, metabolism) switch(current_cycle) @@ -1076,7 +1045,6 @@ custom_metabolism = REAGENTS_METABOLISM * 0.5 overdose_threshold = REAGENTS_OVERDOSE * 0.5 overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL * 0.5 - scannable = TRUE /datum/reagent/medicine/larvaway/on_mob_life(mob/living/L, metabolism) switch(current_cycle) @@ -1132,7 +1100,6 @@ custom_metabolism = REAGENTS_METABOLISM * 5 purge_list = list(/datum/reagent/medicine, /datum/reagent/toxin, /datum/reagent/zombium) purge_rate = 5 - scannable = TRUE taste_description = "punishment" taste_multi = 8 @@ -1183,7 +1150,6 @@ description = "Accelerates natural bone repair in a low temperature environment. Causes severe pain." color = COLOR_REAGENT_BIHEXAJULINE taste_description = "skim milk" - scannable = TRUE overdose_threshold = REAGENTS_OVERDOSE /datum/reagent/medicine/bihexajuline/on_mob_life(mob/living/L, metabolism) @@ -1224,7 +1190,6 @@ description = "This is a latent poison, designed to quickly and painlessly kill you in the event that you become unable to fight. Never washes out on it's own, must be purged." color = COLOR_REAGENT_QUIETUS custom_metabolism = 0 - scannable = TRUE taste_description = "Victory" /datum/reagent/medicine/research/quietus/on_mob_add(mob/living/L, metabolism) @@ -1256,7 +1221,6 @@ name = "Somolent" description = "This is a highly potent regenerative drug, designed to heal critically injured personnel. Only functions on unconscious or sleeping people." color = COLOR_REAGENT_SOMOLENT - scannable = TRUE overdose_threshold = REAGENTS_OVERDOSE taste_description = "naptime" @@ -1281,57 +1245,71 @@ /datum/reagent/medicine/research/somolent/overdose_process(mob/living/L, metabolism) holder.remove_reagent(/datum/reagent/medicine/research/somolent, 1) -/datum/reagent/medicine/research/medicalnanites +/datum/reagent/medicalnanites name = "Medical nanites" description = "These are a batch of construction nanites altered for in-vivo replication. They can heal wounds using the iron present in the bloodstream. Medical care is recommended during injection." color = COLOR_REAGENT_MEDICALNANITES custom_metabolism = 0 - scannable = TRUE taste_description = "metal, followed by mild burning" overdose_threshold = REAGENTS_OVERDOSE * 1.2 //slight buffer to keep you safe + purge_list = list( + /datum/reagent/medicine/bicaridine, + /datum/reagent/medicine/kelotane, + /datum/reagent/medicine/tramadol, + /datum/reagent/medicine/oxycodone, + /datum/reagent/medicine/tricordrazine, + /datum/reagent/medicine/meralyne, + /datum/reagent/medicine/dermaline, + /datum/reagent/medicine/paracetamol, + /datum/reagent/medicine/russian_red, + /datum/reagent/consumable/drink/doctor_delight, + ) + purge_rate = 5 -/datum/reagent/medicine/research/medicalnanites/on_mob_add(mob/living/L, metabolism) +/datum/reagent/medicalnanites/on_mob_add(mob/living/L, metabolism) to_chat(L, span_userdanger("You feel like you should stay near medical help until this shot settles in.")) -/datum/reagent/medicine/research/medicalnanites/on_mob_life(mob/living/L, metabolism) +/datum/reagent/medicalnanites/on_mob_life(mob/living/L, metabolism) switch(current_cycle) if(1 to 75) - L.take_limb_damage(0.015*current_cycle*effect_str, 0.015*current_cycle*effect_str) - L.adjustToxLoss(1*effect_str) - L.adjustStaminaLoss((1.5)*effect_str) - L.reagents.add_reagent(/datum/reagent/medicine/research/medicalnanites, 0.40) + L.take_limb_damage(0.015 * current_cycle * effect_str, 0.015 * current_cycle * effect_str) + L.adjustToxLoss(1 * effect_str) + L.adjustStaminaLoss(1.5 * effect_str) + L.reagents.add_reagent(/datum/reagent/medicalnanites, 0.4) if(prob(5)) to_chat(L, span_notice("You feel intense itching!")) if(76) to_chat(L, span_warning("The pain rapidly subsides. Looks like they've adapted to you.")) if(77 to INFINITY) if(volume < 30) //smol injection will self-replicate up to 30u using 240u of blood. - L.reagents.add_reagent(/datum/reagent/medicine/research/medicalnanites, 0.15) - L.blood_volume -= 2 + L.reagents.add_reagent(/datum/reagent/medicalnanites, 0.15) + L.adjust_blood_volume(-2) if(volume < 35) //allows 10 ticks of healing for 20 points of free heal to lower scratch damage bloodloss amounts. - L.reagents.add_reagent(/datum/reagent/medicine/research/medicalnanites, 0.1) + L.reagents.add_reagent(/datum/reagent/medicalnanites, 0.1) + + if(volume > 5) + L.reagent_pain_modifier += PAIN_REDUCTION_VERY_HEAVY + L.adjustToxLoss(-0.15 * effect_str) - if (volume > 5 && L.getBruteLoss(organic_only = TRUE)) - L.heal_overall_damage(2*effect_str, 0) - L.adjustToxLoss(0.1*effect_str) - holder.remove_reagent(/datum/reagent/medicine/research/medicalnanites, 0.5) - if(prob(40)) + if(volume > 5 && L.getBruteLoss(organic_only = TRUE)) + L.heal_overall_damage(3 * effect_str, 0) + holder.remove_reagent(/datum/reagent/medicalnanites, 0.5) + if(prob(10)) to_chat(L, span_notice("Your cuts and bruises begin to scab over rapidly!")) - if (volume > 5 && L.getFireLoss(organic_only = TRUE)) - L.heal_overall_damage(0, 2*effect_str) - L.adjustToxLoss(0.1*effect_str) - holder.remove_reagent(/datum/reagent/medicine/research/medicalnanites, 0.5) - if(prob(40)) + if(volume > 5 && L.getFireLoss(organic_only = TRUE)) + L.heal_overall_damage(0, 3 * effect_str) + holder.remove_reagent(/datum/reagent/medicalnanites, 0.5) + if(prob(10)) to_chat(L, span_notice("Your burns begin to slough off, revealing healthy tissue!")) return ..() -/datum/reagent/medicine/research/medicalnanites/overdose_process(mob/living/L, metabolism) +/datum/reagent/medicalnanites/overdose_process(mob/living/L, metabolism) L.adjustToxLoss(effect_str) //softcap VS injecting massive amounts of medical nanites for the healing factor with no downsides. Still doable if you're clever about it. - holder.remove_reagent(/datum/reagent/medicine/research/medicalnanites, 0.25) + holder.remove_reagent(/datum/reagent/medicalnanites, 0.25) -/datum/reagent/medicine/research/medicalnanites/on_mob_delete(mob/living/L, metabolism) +/datum/reagent/medicalnanites/on_mob_delete(mob/living/L, metabolism) to_chat(L, span_userdanger("Your nanites have been fully purged! They no longer affect you.")) /datum/reagent/medicine/research/stimulon @@ -1339,7 +1317,6 @@ description = "A chemical designed to boost running by driving your body beyond it's normal limits. Can have unpredictable side effects, caution recommended." color = COLOR_REAGENT_STIMULON custom_metabolism = 0 - scannable = TRUE /datum/reagent/medicine/research/stimulon/on_mob_add(mob/living/L, metabolism) to_chat(L, span_userdanger("You feel jittery and fast! Time to MOVE!")) diff --git a/code/modules/reagents/reagents/other.dm b/code/modules/reagents/reagents/other.dm index cb2c42d457a3d..2b2c9dca6d366 100644 --- a/code/modules/reagents/reagents/other.dm +++ b/code/modules/reagents/reagents/other.dm @@ -345,7 +345,6 @@ overdose_threshold = REAGENTS_OVERDOSE overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL taste_description = "iron" - scannable = TRUE /datum/reagent/iron/overdose_process(mob/living/L, metabolism) L.apply_damages(1, 0, 1) @@ -654,4 +653,3 @@ custom_metabolism = REAGENTS_METABOLISM * 0.1 overdose_threshold = REAGENTS_OVERDOSE overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL - scannable = TRUE diff --git a/code/modules/reagents/reagents/toxin.dm b/code/modules/reagents/reagents/toxin.dm index 3c109bf56c122..0434fd4bdeb0e 100644 --- a/code/modules/reagents/reagents/toxin.dm +++ b/code/modules/reagents/reagents/toxin.dm @@ -17,6 +17,9 @@ L.adjustToxLoss(toxpwr*0.5*effect_str) return ..() +///For medicines that generate toxin reagent when metabolized +/datum/reagent/toxin/scannable + /datum/reagent/toxin/hptoxin name = "Toxin" description = "A toxic chemical." @@ -217,7 +220,6 @@ toxpwr = 0 overdose_threshold = REAGENTS_OVERDOSE overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL - scannable = TRUE taste_description = "cough syrup" trait_flags = BRADYCARDICS @@ -425,14 +427,14 @@ /datum/reagent/toxin/nanites/on_mob_add(mob/living/L, metabolism) to_chat(L, span_userdanger("Your body begins to twist and deform! Get out of the razorburn!")) - . = ..() + return ..() /datum/reagent/toxin/nanites/on_mob_life(mob/living/L, metabolism) L.apply_damages(2.5*effect_str, 1.5*effect_str, 1.5*effect_str) //DO NOT DRINK THIS. Seriously! - L.blood_volume -= 5 + L.adjust_blood_volume(-5) if(current_cycle > 5) L.apply_damages(2.5*effect_str, 1.5*effect_str, 1.5*effect_str) - L.blood_volume -= 5 + L.adjust_blood_volume(-5) holder.remove_reagent(/datum/reagent/toxin/nanites, (current_cycle * 0.2) - 1) if(volume > 100) var/turf/location = get_turf(holder.my_atom) @@ -448,7 +450,6 @@ color = COLOR_TOXIN_XENO_NEUROTOXIN custom_metabolism = REAGENTS_METABOLISM * 2 overdose_threshold = 10000 //Overdosing for neuro is what happens when you run out of stamina to avoid its oxy and toxin damage - scannable = TRUE toxpwr = 0 /datum/reagent/toxin/xeno_neurotoxin/on_mob_life(mob/living/L, metabolism) @@ -495,7 +496,6 @@ color = COLOR_TOXIN_XENO_HEMODILE custom_metabolism = 0.4 overdose_threshold = 10000 - scannable = TRUE toxpwr = 0 /datum/reagent/toxin/xeno_hemodile/on_mob_life(mob/living/L, metabolism) @@ -538,7 +538,6 @@ color = COLOR_TOXIN_XENO_TRANSVITOX custom_metabolism = 0.4 overdose_threshold = 10000 - scannable = TRUE toxpwr = 0 /datum/reagent/toxin/xeno_transvitox/on_mob_add(mob/living/L, metabolism, affecting) @@ -606,7 +605,6 @@ color = COLOR_TOXIN_XENO_SANGUINAL custom_metabolism = 0.4 overdose_threshold = 10000 - scannable = TRUE toxpwr = 0 /datum/reagent/toxin/xeno_sanguinal/on_mob_life(mob/living/L, metabolism) @@ -640,7 +638,6 @@ color = COLOR_TOXIN_XENO_OZELOMELYN custom_metabolism = 1.5 // metabolizes decently quickly. A sting does 15 at the same rate as neurotoxin. overdose_threshold = 10000 - scannable = TRUE toxpwr = 0 // This is going to do slightly snowflake tox damage. purge_list = list(/datum/reagent/medicine) purge_rate = 5 @@ -661,7 +658,6 @@ reagent_state = LIQUID color = COLOR_TOXIN_ZOMBIUM custom_metabolism = REAGENTS_METABOLISM * 0.25 - scannable = TRUE overdose_threshold = 20 overdose_crit_threshold = 50 @@ -701,7 +697,6 @@ color = COLOR_TOXIN_SATRAPINE overdose_threshold = 10000 custom_metabolism = REAGENTS_METABOLISM - scannable = TRUE toxpwr = 0 purge_list = list( /datum/reagent/medicine/tramadol, diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index aa3561200a860..268d6f217c206 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -1,52 +1,42 @@ //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. + +///Max amount of items it will try move in one go #define MAX_CONVEYOR_ITEMS_MOVE 30 + +///It don't go +#define CONVEYOR_OFF 0 +///It go forwards +#define CONVEYOR_ON_FORWARDS 1 +///It go back +#define CONVEYOR_ON_REVERSE -1 + +///true if can operate (no broken segments in this belt run) +#define CONVEYOR_OPERABLE (1<<0) +///Inverts the direction the conveyor belt moves, only particularly relevant for diagonals +#define CONVEYOR_INVERTED (1<<1) +///Currently has things scheduled for movement. Required to reduce lag +#define CONVEYOR_IS_CONVEYING (1<<2) + GLOBAL_LIST_EMPTY(conveyors_by_id) /obj/machinery/conveyor icon = 'icons/obj/recycling.dmi' icon_state = "conveyor_map" name = "conveyor belt" - desc = "A conveyor belt. It can be rotated with a wrench. It can be reversed with a screwdriver. The belt can be flipped with a wirecutter." + desc = "A conveyor belt. It can be rotated with a wrench. It can be reversed with a screwdriver." layer = FIREDOOR_OPEN_LAYER max_integrity = 50 resistance_flags = XENO_DAMAGEABLE - var/operating = 0 // 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 - /// Inverts the direction the conveyor belt moves when false. - var/verted = FALSE - /// Is the conveyor's belt flipped? Useful mostly for conveyor belt corners. It makes the belt point in the other direction, rather than just going in reverse. - var/flipped = FALSE - /// Are we currently conveying items? - var/conveying = FALSE - -/obj/machinery/conveyor/centcom_auto - id = "round_end_belt" - -/obj/machinery/conveyor/inverted //Directions inverted so you can use different corner pieces. - icon_state = "conveyor_map_inverted" - verted = -1 - flipped = TRUE - -/obj/machinery/conveyor/inverted/Initialize(mapload) - . = ..() - if(mapload && !(ISDIAGONALDIR(dir))) - stack_trace("[src] at [AREACOORD(src)] spawned without using a diagonal dir. Please replace with a normal version.") - - -/obj/machinery/conveyor/auto/update() - . = ..() - if(.) - operating = TRUE - update_icon() + ///Conveyor specific flags + var/conveyor_flags = CONVEYOR_OPERABLE + ///Operating direction + var/operating = CONVEYOR_OFF + ///Current direction of movement + var/movedir + /// the control ID - must match controller ID + var/id = "" -// create a conveyor /obj/machinery/conveyor/Initialize(mapload, newdir, newid) . = ..() if(newdir) @@ -57,10 +47,6 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) update_move_direction() update_icon() -/obj/machinery/conveyor/auto/Initialize(mapload, newdir) - operating = TRUE - return ..() - /obj/machinery/conveyor/Destroy() LAZYREMOVE(GLOB.conveyors_by_id[id], src) return ..() @@ -74,101 +60,17 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) else return ..() -/obj/machinery/conveyor/setDir(newdir) - . = ..() - update_move_direction() - -/obj/machinery/conveyor/proc/update_move_direction() - switch(dir) - if(NORTH) - forwards = NORTH - backwards = SOUTH - if(SOUTH) - forwards = SOUTH - backwards = NORTH - if(EAST) - forwards = EAST - backwards = WEST - if(WEST) - forwards = WEST - backwards = EAST - if(NORTHEAST) - forwards = EAST - backwards = SOUTH - if(NORTHWEST) - forwards = NORTH - backwards = EAST - if(SOUTHEAST) - forwards = SOUTH - backwards = WEST - if(SOUTHWEST) - forwards = WEST - backwards = NORTH - if(verted) - var/temp = forwards - forwards = backwards - backwards = temp - if(flipped) - var/temp = forwards - forwards = backwards - backwards = temp - if(operating == 1) - movedir = forwards - else - movedir = backwards - update() - /obj/machinery/conveyor/update_icon_state() + . = ..() if(machine_stat & BROKEN) icon_state = "conveyor-broken" - else - icon_state = "conveyor[verted ? -operating : operating ][flipped ? "-flipped" : ""]" -/obj/machinery/conveyor/proc/update() - if(machine_stat & BROKEN || !operable || machine_stat & NOPOWER) - operating = FALSE - update_icon() - return FALSE - return TRUE - -// machine process -// move items to the target location -/obj/machinery/conveyor/process() - if(machine_stat & (BROKEN | NOPOWER)) - return - - //If the conveyor is broken or already moving items - if(!operating || conveying) - return - - //get the first 30 items in contents - var/turf/locturf = loc - var/list/items = locturf.contents - src - if(!LAZYLEN(items))//Dont do anything at all if theres nothing there but the conveyor - return - var/list/affecting - if(length(items) > MAX_CONVEYOR_ITEMS_MOVE) - affecting = items.Copy(1, MAX_CONVEYOR_ITEMS_MOVE + 1)//Lists start at 1 lol else - affecting = items - conveying = TRUE + icon_state = "conveyor[!operating ? "_off" : operating == CONVEYOR_ON_FORWARDS ? "_forwards": "_reverse"][conveyor_flags & CONVEYOR_INVERTED ? "_inverted" : ""]" - INVOKE_NEXT_TICK(src, PROC_REF(convey), affecting)//Movement effect - -/obj/machinery/conveyor/proc/convey(list/affecting) - for(var/am in affecting) - if(!ismovable(am)) //This is like a third faster than for(var/atom/movable in affecting) - continue - var/atom/movable/movable_thing = am - //Give this a chance to yield if the server is busy - stoplag() - if(QDELETED(movable_thing) || (movable_thing.loc != loc)) - continue - if(iseffect(movable_thing) || isdead(movable_thing)) - continue - if(!movable_thing.anchored) - step(movable_thing, movedir) - conveying = FALSE +/obj/machinery/conveyor/setDir(newdir) + . = ..() + update_move_direction() /obj/machinery/conveyor/crowbar_act(mob/living/user, obj/item/I) user.visible_message(span_notice("[user] struggles to pry up \the [src] with \the [I]."), \ @@ -192,16 +94,10 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) /obj/machinery/conveyor/screwdriver_act(mob/living/user, obj/item/I) if(machine_stat & BROKEN) return TRUE - verted = !verted + conveyor_flags ^= CONVEYOR_INVERTED update_move_direction() - to_chat(user, span_notice("You set [src]'s direction [verted ? "backwards" : "back to default"].")) - -/obj/machinery/conveyor/wirecutter_act(mob/living/user, obj/item/I) - if(machine_stat & BROKEN) - return TRUE - flipped = !flipped - update_move_direction() - to_chat(user, span_notice("You flip [src]'s belt [flipped ? "around" : "back to normal"].")) + update_icon() + balloon_alert(user, "[conveyor_flags & CONVEYOR_INVERTED ? "backwards" : "back to default"]") /obj/machinery/conveyor/attackby(obj/item/I, mob/living/user, def_zone) . = ..() @@ -215,52 +111,148 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) return user.Move_Pulled(src) -// make the conveyor broken -// also propagate inoperability to any connected conveyor with the same ID -/obj/machinery/conveyor/proc/broken() - obj_break() +/obj/machinery/conveyor/power_change() + . = ..() update() - var/obj/machinery/conveyor/C = locate() in get_step(src, dir) - if(C) - C.set_operable(dir, id, 0) +/obj/machinery/conveyor/process() + if(conveyor_flags & CONVEYOR_IS_CONVEYING) + return //you've made a lag monster + if(!is_operational()) + return PROCESS_KILL + if(!operating) + return PROCESS_KILL + if(!isturf(loc)) + return PROCESS_KILL //how - C = locate() in get_step(src, REVERSE_DIR(dir)) - if(C) - C.set_operable(REVERSE_DIR(dir), id, 0) + //get the first 30 items in contents + var/list/items_to_move = loc.contents - src + if(length(items_to_move) > MAX_CONVEYOR_ITEMS_MOVE) + items_to_move = items_to_move.Copy(1, MAX_CONVEYOR_ITEMS_MOVE + 1) + conveyor_flags |= CONVEYOR_IS_CONVEYING + INVOKE_NEXT_TICK(src, PROC_REF(convey), items_to_move) -//set the operable var if ID matches, propagating in the given direction +///Attempts to move a batch of AMs +/obj/machinery/conveyor/proc/convey(list/affecting) + conveyor_flags &= ~CONVEYOR_IS_CONVEYING + if(!is_operational()) + return + if(!operating) + return + for(var/am in affecting) + if(!ismovable(am)) //This is like a third faster than for(var/atom/movable in affecting) + continue + var/atom/movable/movable_thing = am + stoplag() //Give this a chance to yield if the server is busy + if(QDELETED(movable_thing)) + continue + if((movable_thing.loc != loc)) + continue + if(iseffect(movable_thing)) + continue + if(isdead(movable_thing)) + continue + if(movable_thing.anchored) + continue + step(movable_thing, movedir) -/obj/machinery/conveyor/proc/set_operable(stepdir, match_id, op) +///Sets the correct movement directions based on dir +/obj/machinery/conveyor/proc/update_move_direction() + var/forwards + var/backwards + switch(dir) + if(NORTH) + forwards = NORTH + backwards = SOUTH + if(SOUTH) + forwards = SOUTH + backwards = NORTH + if(EAST) + forwards = EAST + backwards = WEST + if(WEST) + forwards = WEST + backwards = EAST + if(NORTHEAST) + forwards = EAST + backwards = SOUTH + if(NORTHWEST) + forwards = NORTH + backwards = EAST + if(SOUTHEAST) + forwards = SOUTH + backwards = WEST + if(SOUTHWEST) + forwards = WEST + backwards = NORTH + if(conveyor_flags & CONVEYOR_INVERTED) + var/temp = forwards + forwards = backwards + backwards = temp + if(operating == CONVEYOR_ON_FORWARDS) + movedir = forwards + else + movedir = backwards + update() - if(id != match_id) +///Handles setting its operating status +/obj/machinery/conveyor/proc/set_operating(new_position) + if(operating == new_position) return - operable = op + operating = new_position + update_move_direction() + update_icon() - update() - var/obj/machinery/conveyor/C = locate() in get_step(src, stepdir) - if(C) - C.set_operable(stepdir, id, op) + if(operating) + start_processing() + else + stop_processing() -/obj/machinery/conveyor/power_change() +///Checks to see if the conveyor needs to be switched off +/obj/machinery/conveyor/proc/update() + if(!is_operational() || !(conveyor_flags & CONVEYOR_OPERABLE)) + set_operating(CONVEYOR_OFF) + return FALSE + return TRUE + +/obj/machinery/conveyor/centcom_auto + id = "round_end_belt" + +/obj/machinery/conveyor/inverted //Directions inverted so you can use different corner pieces. + icon_state = "conveyor_map_inverted" + conveyor_flags = CONVEYOR_OPERABLE|CONVEYOR_INVERTED + +/obj/machinery/conveyor/inverted/Initialize(mapload) . = ..() - update() + if(mapload && !(ISDIAGONALDIR(dir))) + stack_trace("[src] at [AREACOORD(src)] spawned without using a diagonal dir. Please replace with a normal version.") -///////// the conveyor control switch +/obj/machinery/conveyor/auto/Initialize(mapload, newdir) + set_operating(CONVEYOR_ON_FORWARDS) + return ..() + +/obj/machinery/conveyor/auto/update() + . = ..() + if(.) + set_operating(CONVEYOR_ON_FORWARDS) +///////// 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/oneway = FALSE // if the switch only operates the conveyor belts in a single direction. - var/invert_icon = FALSE // If the level points the opposite direction when it's turned on. - - var/id = "" // must match conveyor IDs to control them + ///switch position + var/position = CONVEYOR_OFF + ///Previous switch position + var/last_pos = -1 + ///If this only works one way + var/oneway = FALSE + ///If the level points the opposite direction when it's turned on. + var/invert_icon = FALSE + ///ID. Must match conveyor ID's to control them + var/id = "" /obj/machinery/conveyor_switch/Initialize(mapload, newid) . = ..() @@ -285,12 +277,13 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) // update the icon depending on the position /obj/machinery/conveyor_switch/update_icon_state() - if(position<0) + . = ..() + if(position == CONVEYOR_ON_REVERSE) if(invert_icon) icon_state = "switch-fwd" else icon_state = "switch-rev" - else if(position>0) + else if(position == CONVEYOR_ON_FORWARDS) if(invert_icon) icon_state = "switch-rev" else @@ -301,13 +294,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) /// Updates all conveyor belts that are linked to this switch, and tells them to start processing. /obj/machinery/conveyor_switch/proc/update_linked_conveyors() for(var/obj/machinery/conveyor/C in GLOB.conveyors_by_id[id]) - C.operating = position - C.update_move_direction() - C.update_icon() - if(C.operating) - C.start_processing() - else - C.stop_processing() + C.set_operating(position) CHECK_TICK /// Finds any switches with same `id` as this one, and set their position and icon to match us. @@ -325,14 +312,14 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) position = oneway else if(last_pos < 0) - position = 1 - last_pos = 0 + position = CONVEYOR_ON_FORWARDS + last_pos = CONVEYOR_OFF else - position = -1 - last_pos = 0 + position = CONVEYOR_ON_REVERSE + last_pos = CONVEYOR_OFF else last_pos = position - position = 0 + position = CONVEYOR_OFF /// Called when a user clicks on this switch with an open hand. /obj/machinery/conveyor_switch/interact(mob/user) @@ -421,7 +408,9 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) use(1) /obj/item/stack/conveyor/attackby(obj/item/I, mob/user, params) - ..() + . = ..() + if(.) + return if(istype(I, /obj/item/conveyor_switch_construct)) to_chat(user, span_notice("You link the switch to the conveyor belt assembly.")) var/obj/item/conveyor_switch_construct/C = I diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index 4bc6008a21354..14def464574bd 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -247,7 +247,7 @@ if(W.remove_fuel(0,user)) playsound(src.loc, 'sound/items/welder2.ogg', 25, 1) to_chat(user, "Welding the [nicetype] in place.") - if(do_after(user, 20, NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(W, /obj/item/tool/weldingtool/proc/isOn))) + if(do_after(user, 20, NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(W, TYPE_PROC_REF(/obj/item/tool/weldingtool, isOn)))) to_chat(user, "The [nicetype] has been welded in place!") update() // TODO: Make this neat if(ispipe) // Pipe diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index c09dc4c1bf170..d7f631f50a29b 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -67,6 +67,8 @@ //Attack by item places it in to disposal /obj/machinery/disposal/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(machine_stat & BROKEN) return @@ -100,7 +102,7 @@ playsound(loc, 'sound/items/welder2.ogg', 25, 1) to_chat(user, span_notice("You start slicing the floorweld off the disposal unit.")) - if(!do_after(user, 20, NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(W, /obj/item/tool/weldingtool/proc/isOn))) + if(!do_after(user, 20, NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(W, TYPE_PROC_REF(/obj/item/tool/weldingtool, isOn)))) return to_chat(user, span_notice("You sliced the floorweld off the disposal unit.")) @@ -702,6 +704,8 @@ //Attack by item. Weldingtool: unfasten and convert to obj/disposalconstruct /obj/structure/disposalpipe/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return var/turf/T = loc if(T.intact_tile) @@ -1011,6 +1015,8 @@ /obj/structure/disposalpipe/tagger/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/destTagger)) var/obj/item/destTagger/O = I @@ -1082,6 +1088,8 @@ /obj/structure/disposalpipe/sortjunction/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/destTagger)) var/obj/item/destTagger/O = I @@ -1304,6 +1312,8 @@ /obj/structure/disposaloutlet/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(isscrewdriver(I)) mode = !mode @@ -1323,7 +1333,7 @@ playsound(loc, 'sound/items/welder2.ogg', 25, 1) to_chat(user, span_notice("You start slicing the floorweld off the disposal outlet.")) - if(!do_after(user, 20, NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(W, /obj/item/tool/weldingtool/proc/isOn))) + if(!do_after(user, 20, NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(W, TYPE_PROC_REF(/obj/item/tool/weldingtool, isOn)))) return to_chat(user, span_notice("You sliced the floorweld off the disposal outlet.")) diff --git a/code/modules/recycling/recycler.dm b/code/modules/recycling/recycler.dm index d0430626397ca..551b82d21eeef 100644 --- a/code/modules/recycling/recycler.dm +++ b/code/modules/recycling/recycler.dm @@ -9,7 +9,8 @@ //Pointing west because that's the only sprite we got dir = NORTH -/obj/machinery/recycler/update_icon() +/obj/machinery/recycler/update_icon_state() + . = ..() icon_state = "grinder-o[(machine_stat & (BROKEN|NOPOWER)) ? "0":"1"]" /obj/machinery/recycler/Bumped(atom/movable/AM) diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 88e1c34f49bc4..09c839a636791 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -24,8 +24,8 @@ GLOBAL_LIST_EMPTY(tagger_locations) qdel(src) return -/obj/structure/bigDelivery/update_icon() - overlays = new() +/obj/structure/bigDelivery/update_overlays() + . = ..() if(nameset || examtext) var/image/I = new/image('icons/obj/items/storage/storage.dmi',"delivery_label") if(icon_state == "deliverycloset") @@ -38,7 +38,7 @@ GLOBAL_LIST_EMPTY(tagger_locations) label_x = rand(-8, 6) I.pixel_x = label_x I.pixel_y = -3 - overlays += I + . += I if(src.sortTag) var/image/I = new/image('icons/obj/items/storage/storage.dmi',"delivery_tag") if(icon_state == "deliverycloset") @@ -51,7 +51,7 @@ GLOBAL_LIST_EMPTY(tagger_locations) tag_x = rand(-8, 6) I.pixel_x = tag_x I.pixel_y = -3 - overlays += I + . += I /obj/structure/bigDelivery/examine(mob/user) ..() @@ -62,11 +62,13 @@ GLOBAL_LIST_EMPTY(tagger_locations) to_chat(user, span_notice("It has a note attached which reads, \"[examtext]\"")) return -/obj/structure/bigDelivery/attack_alien(mob/living/carbon/xenomorph/X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) - attack_hand(X) +/obj/structure/bigDelivery/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + attack_hand(xeno_attacker) /obj/structure/bigDelivery/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/destTagger)) var/obj/item/destTagger/O = I @@ -139,13 +141,13 @@ GLOBAL_LIST_EMPTY(tagger_locations) qdel(src) return -/obj/item/smallDelivery/update_icon() - overlays = new() +/obj/item/smallDelivery/update_overlays() + . = ..() if((nameset || examtext) && icon_state != "deliverycrate1") var/image/I = new/image('icons/obj/items/storage/storage.dmi',"delivery_label") if(icon_state == "deliverycrate5") I.pixel_y = -1 - overlays += I + . += I if(src.sortTag) var/image/I = new/image('icons/obj/items/storage/storage.dmi',"delivery_tag") switch(icon_state) @@ -162,7 +164,7 @@ GLOBAL_LIST_EMPTY(tagger_locations) I.pixel_y = 3 if("deliverycrate5") I.pixel_y = -3 - overlays += I + . += I /obj/item/smallDelivery/examine(mob/user) ..() @@ -174,6 +176,8 @@ GLOBAL_LIST_EMPTY(tagger_locations) /obj/item/smallDelivery/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/destTagger)) var/obj/item/destTagger/O = I @@ -329,8 +333,8 @@ GLOBAL_LIST_EMPTY(tagger_locations) slot_r_hand_str = 'icons/mob/inhands/equipment/engineering_right.dmi', ) item_state = "electronic" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT /obj/item/destTagger/proc/openwindow(mob/user as mob) var/dat @@ -422,6 +426,8 @@ GLOBAL_LIST_EMPTY(tagger_locations) /obj/machinery/disposal/deliveryChute/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(isscrewdriver(I)) c_mode = !c_mode @@ -442,7 +448,7 @@ GLOBAL_LIST_EMPTY(tagger_locations) playsound(loc, 'sound/items/welder2.ogg', 25, 1) to_chat(user, "You start slicing the floorweld off the delivery chute.") - if(!do_after(user, 20, NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(W, /obj/item/tool/weldingtool/proc/isOn))) + if(!do_after(user, 20, NONE, src, BUSY_ICON_BUILD, extra_checks = CALLBACK(W, TYPE_PROC_REF(/obj/item/tool/weldingtool, isOn)))) return to_chat(user, "You sliced the floorweld off the delivery chute.") diff --git a/code/modules/reqs/supply.dm b/code/modules/reqs/supply.dm index 943813c5b5493..dff2cae509da4 100644 --- a/code/modules/reqs/supply.dm +++ b/code/modules/reqs/supply.dm @@ -211,7 +211,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( icon = 'icons/Marine/marine-navigation.dmi' icon_state = "req_tablet_off" req_access = list(ACCESS_MARINE_CARGO) - flags_equip_slot = ITEM_SLOT_POCKET + equip_slot_flags = ITEM_SLOT_POCKET w_class = WEIGHT_CLASS_NORMAL var/datum/supply_ui/SU ///Id of the shuttle controlled @@ -608,19 +608,14 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( item_state = "radiopack" ///Var for the window pop-up var/datum/supply_ui/requests/supply_interface - /// Reference to the datum used by the supply drop console - var/datum/supply_beacon/beacon_datum -/obj/item/storage/backpack/marine/radiopack/Destroy() - if(beacon_datum) - UnregisterSignal(beacon_datum, COMSIG_QDELETING) - QDEL_NULL(beacon_datum) - return ..() +/obj/item/storage/backpack/marine/radiopack/Initialize(mapload, ...) + . = ..() + AddComponent(/datum/component/beacon) /obj/item/storage/backpack/marine/radiopack/examine(mob/user) . = ..() . += span_notice("Right-Click with empty hand to open requisitions interface.") - . += span_notice("Activate in hand to create a supply beacon signal.") /obj/item/storage/backpack/marine/radiopack/attack_hand_alternate(mob/living/user) if(!allowed(user)) @@ -628,22 +623,3 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( if(!supply_interface) supply_interface = new(src) return supply_interface.interact(user) - -/obj/item/storage/backpack/marine/radiopack/attack_self(mob/living/user) - if(beacon_datum) - UnregisterSignal(beacon_datum, COMSIG_QDELETING) - QDEL_NULL(beacon_datum) - user.show_message(span_warning("The [src] beeps and states, \"Your last position is no longer accessible by the supply console"), EMOTE_AUDIBLE, span_notice("The [src] vibrates but you can not hear it!")) - return - if(!is_ground_level(user.z)) - to_chat(user, span_warning("You have to be on the planet to use this or it won't transmit.")) - return FALSE - var/turf/location = get_turf(src) - beacon_datum = new /datum/supply_beacon(user.name, user.loc, user.faction, 4 MINUTES) - RegisterSignal(beacon_datum, COMSIG_QDELETING, PROC_REF(clean_beacon_datum)) - user.show_message(span_notice("The [src] beeps and states, \"Your current coordinates were registered by the supply console. LONGITUDE [location.x]. LATITUDE [location.y]. Area ID: [get_area(src)]\""), EMOTE_AUDIBLE, span_notice("The [src] vibrates but you can not hear it!")) - -/// Signal handler to nullify beacon datum -/obj/item/storage/backpack/marine/radiopack/proc/clean_beacon_datum() - SIGNAL_HANDLER - beacon_datum = null diff --git a/code/modules/reqs/supplypacks.dm b/code/modules/reqs/supplypacks.dm index c52b9d132f74b..2b86d02196bd0 100644 --- a/code/modules/reqs/supplypacks.dm +++ b/code/modules/reqs/supplypacks.dm @@ -39,7 +39,7 @@ OPERATIONS /datum/supply_packs/operations/beacons_supply name = "Supply beacon" - contains = list(/obj/item/beacon/supply_beacon) + contains = list(/obj/item/supply_beacon) cost = 100 /datum/supply_packs/operations/fulton_extraction_pack @@ -156,6 +156,11 @@ OPERATIONS containertype = null cost = 200 +/datum/supply_packs/operations/supply_tablet + name = "Supply Tablet" + contains = list(/obj/item/supplytablet) + cost = 50 + /******************************************************************************* WEAPONS *******************************************************************************/ @@ -184,6 +189,26 @@ WEAPONS contains = list(/obj/item/ammo_magazine/minisentry) cost = 100 +/datum/supply_packs/weapons/sentry_shotgun + name = "SHT-573 Shotgun Sentry" + contains = list(/obj/item/storage/box/crate/sentry_shotgun) + cost = 400 + +/datum/supply_packs/weapons/sentry_shotgun_ammo + name = "SHT-573 shotgun sentry ammunition" + contains = list(/obj/item/ammo_magazine/sentry/shotgun) + cost = 100 + +/datum/supply_packs/weapons/sentry_sniper + name = "SST-574 Sniper Sentry" + contains = list(/obj/item/storage/box/crate/sentry_sniper) + cost = 600 + +/datum/supply_packs/weapons/sentry_sniper_ammo + name = "SST-571 sniper sentry ammunition" + contains = list(/obj/item/ammo_magazine/sentry/sniper) + cost = 100 + /datum/supply_packs/weapons/buildasentry name = "Build-A-Sentry Attachment System" contains = list( @@ -192,14 +217,14 @@ WEAPONS cost = 250 -/datum/supply_packs/weapons/m56d_emplacement +/datum/supply_packs/weapons/hsg_102_emplacement name = "HSG-102 Mounted Heavy Smartgun" - contains = list(/obj/item/storage/box/tl102) + contains = list(/obj/item/storage/box/hsg_102) cost = 600 -/datum/supply_packs/weapons/m56d +/datum/supply_packs/weapons/hsg_102 name = "HSG-102 mounted heavy smartgun ammo" - contains = list(/obj/item/ammo_magazine/tl102) + contains = list(/obj/item/ammo_magazine/hsg_102) cost = 30 /datum/supply_packs/weapons/minigun_emplacement @@ -315,17 +340,17 @@ WEAPONS /datum/supply_packs/weapons/flak_gun name = "FK-88 Flak Gun" contains = list(/obj/item/weapon/gun/heavy_isg) - cost = 1200 + cost = 1000 /datum/supply_packs/weapons/flak_he - name = "FK-88 HE Shell" + name = "FK-88 Flak HE Shell" contains = list(/obj/item/ammo_magazine/heavy_isg/he) - cost = 100 + cost = 50 /datum/supply_packs/weapons/flak_sabot - name = "FK-88 APFDS Shell" + name = "FK-88 Flak APFDS Shell" contains = list(/obj/item/ammo_magazine/heavy_isg/sabot) - cost = 120 + cost = 50 /datum/supply_packs/weapons/heayvlaser_emplacement name = "Mounted Heavy Laser" @@ -343,6 +368,30 @@ WEAPONS contains = list(/obj/item/weapon/gun/energy/lasgun/lasrifle/tesla) cost = 600 +/datum/supply_packs/weapons/plasma_cells + name = "WML plasma energy cell (x3)" + contains = list( + /obj/item/cell/lasgun/plasma, + /obj/item/cell/lasgun/plasma, + /obj/item/cell/lasgun/plasma, + ) + cost = 100 + +/datum/supply_packs/weapons/plasma_smg + name = "PL-51 Plasma SMG" + contains = list(/obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/smg) + cost = 400 + +/datum/supply_packs/weapons/plasma_rifle + name = "PL-38 Plasma Rifle" + contains = list(/obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/rifle) + cost = 350 + +/datum/supply_packs/weapons/plasma_cannon + name = "PL-96 Plasma Cannon" + contains = list(/obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/cannon) + cost = 400 + /datum/supply_packs/weapons/tx54 name = "GL-54 airburst grenade launcher" contains = list(/obj/item/weapon/gun/rifle/tx54) @@ -373,12 +422,6 @@ WEAPONS contains = list(/obj/item/ammo_magazine/rifle/tx54/smoke/tangle) cost = 48 -/datum/supply_packs/weapons/tx54_he - name = "GL-54 HE grenade magazine" - contains = list(/obj/item/ammo_magazine/rifle/tx54/he) - cost = 50 - available_against_xeno_only = TRUE - /datum/supply_packs/weapons/tx55 name = "AR-55 OICW Rifle" contains = list(/obj/item/weapon/gun/rifle/tx55) @@ -584,13 +627,13 @@ WEAPONS /datum/supply_packs/weapons/antimaterial_incend_ammo name = "SR-26 AMR incendiary magazine" contains = list(/obj/item/ammo_magazine/sniper/incendiary) - cost = 50 + cost = 30 available_against_xeno_only = TRUE /datum/supply_packs/weapons/antimaterial_flak_ammo name = "SR-26 AMR flak magazine" contains = list(/obj/item/ammo_magazine/sniper/flak) - cost = 40 + cost = 30 available_against_xeno_only = TRUE /datum/supply_packs/weapons/specminigun @@ -643,6 +686,11 @@ WEAPONS contains = list(/obj/item/ammo_magazine/packet/smart_minigun) cost = 50 +/datum/supply_packs/weapons/smart_minigun_powerpack + name = "SG-85 powerpack" + contains = list(/obj/item/ammo_magazine/minigun_powerpack/smartgun) + cost = 150 + /datum/supply_packs/weapons/smarttarget_rifle name = "SG-62 Smart Target Rifle" contains = list(/obj/item/weapon/gun/rifle/standard_smarttargetrifle) @@ -653,6 +701,11 @@ WEAPONS contains = list(/obj/item/ammo_magazine/rifle/standard_smarttargetrifle) cost = 35 +/datum/supply_packs/weapons/smarttarget_rifle_ammo_bin + name = "SG-62 smart target rifle ammo bin" + contains = list(/obj/item/ammo_magazine/packet/smart_targetrifle) + cost = 50 + /datum/supply_packs/weapons/spotting_rifle_ammo name = "SG-153 spotting rifle ammo" contains = list(/obj/item/ammo_magazine/rifle/standard_spottingrifle) @@ -782,6 +835,21 @@ WEAPONS contains = list(/obj/item/ammo_magazine/pistol/standard_pistol/smart_pistol) cost = 10 +/datum/supply_packs/weapons/ltb_shells + name = "LTB tank shell" + contains = list(/obj/item/ammo_magazine/tank/ltb_cannon) + cost = 10 + +/datum/supply_packs/weapons/ltaap_rounds + name = "LTAAP tank magazine" + contains = list(/obj/item/ammo_magazine/tank/ltaap_chaingun) + cost = 10 + +/datum/supply_packs/weapons/cupola_rounds + name = "Cupola tank magazine" + contains = list(/obj/item/ammo_magazine/tank/secondary_cupola) + cost = 10 + /******************************************************************************* EXPLOSIVES *******************************************************************************/ @@ -802,7 +870,7 @@ EXPLOSIVES /datum/supply_packs/explosives/explosives_razor name = "Razorburn grenade box crate" - notes = "Contains 15 razor burns" + notes = "Contains 25 razor burns" contains = list(/obj/item/storage/box/visual/grenade/razorburn) cost = 500 @@ -810,31 +878,43 @@ EXPLOSIVES name = "M40 adhesive charge grenade box crate" notes = "Contains 25 grenades" contains = list(/obj/item/storage/box/visual/grenade/sticky) - cost = 310 + cost = 300 /datum/supply_packs/explosives/explosives_smokebomb name = "M40 HSDP smokebomb grenade box crate" notes = "Contains 25 grenades" contains = list(/obj/item/storage/box/visual/grenade/smokebomb) - cost = 310 + cost = 300 /datum/supply_packs/explosives/explosives_hedp name = "M40 HEDP high explosive grenade box crate" notes = "Contains 25 grenades" contains = list(/obj/item/storage/box/visual/grenade/frag) - cost = 310 + cost = 300 /datum/supply_packs/explosives/explosives_cloaker name = "M45 Cloaker grenade box crate" notes = "Contains 25 grenades" contains = list(/obj/item/storage/box/visual/grenade/cloaker) - cost = 310 + cost = 300 + +/datum/supply_packs/explosives/explosives_antigas + name = "M40-AG Anti-Gas grenade box crate" + notes = "Cotains 25 grenades" + contains = list(/obj/item/storage/box/visual/grenade/antigas) + cost = 600 /datum/supply_packs/explosives/explosives_cloak name = "M40-2 SCDP grenade box crate" - notes = "contains 25 grenades" + notes = "Contains 25 grenades" contains = list(/obj/item/storage/box/visual/grenade/cloak) - cost = 310 + cost = 300 + +/datum/supply_packs/explosives/explosives_lasburster + name = "M80 lasburster grenade box crate" + notes = "Contains 25 grenades" + contains = list(/obj/item/storage/box/visual/grenade/lasburster) + cost = 300 /datum/supply_packs/explosives/explosives_hidp name = "M40 HIDP incendiary explosive grenade box crate" @@ -844,7 +924,7 @@ EXPLOSIVES /datum/supply_packs/explosives/explosives_m15 name = "M15 fragmentation grenade box crate" - notes = "Contains 15 grenades" + notes = "Contains 25 grenades" contains = list(/obj/item/storage/box/visual/grenade/M15) cost = 350 @@ -852,20 +932,19 @@ EXPLOSIVES name = "M45 Trailblazer grenade box crate" notes = "Contains 25 grenades" contains = list(/obj/item/storage/box/visual/grenade/trailblazer) - cost = 350 + cost = 500 /datum/supply_packs/explosives/explosives_hsdp name = "M40 HSDP white phosphorous grenade box crate" notes = "Contains 15 grenades" contains = list(/obj/item/storage/box/visual/grenade/phosphorus) - cost = 700 + cost = 1000 -/datum/supply_packs/explosives/explosives_plasmadrain - name = "M40-T gas grenade box crate" +/datum/supply_packs/explosives/explosives_hefa + name = "M25 HEFA grenade box crate" notes = "Contains 25 grenades" - contains = list(/obj/item/storage/box/visual/grenade/drain) - cost = 700 - available_against_xeno_only = TRUE + contains = list(/obj/item/storage/box/visual/grenade/hefa) + cost = 500 /datum/supply_packs/explosives/plastique name = "C4 plastic explosive" @@ -927,7 +1006,17 @@ EXPLOSIVES /datum/supply_packs/explosives/mlrs_rockets_gas name = "TA-40L X-50 MLRS Rocket Pack (x16)" - contains = list(/obj/item/storage/box/mlrs_rockets_gas) + contains = list(/obj/item/storage/box/mlrs_rockets/gas) + cost = 60 + +/datum/supply_packs/explosives/mlrs_rockets_cloak + name = "TA-40L S-2 MLRS Cloak Rocket Pack (x16)" + contains = list(/obj/item/storage/box/mlrs_rockets/cloak) + cost = 50 + +/datum/supply_packs/explosives/mlrs_rockets_incendiary + name = "TA-40L MLRS Incendiary Rocket Pack (x16)" + contains = list(/obj/item/storage/box/mlrs_rockets/incendiary) cost = 60 /* RU TGMC EDIT BEGIN @@ -985,11 +1074,6 @@ ARMOR cost = 120 available_against_xeno_only = TRUE -/datum/supply_packs/armor/marine_shield - name = "TL-172 Defensive Shield" - contains = list(/obj/item/weapon/shield/riot/marine) - cost = 100 - /datum/supply_packs/armor/marine_shield/deployable name = "TL-182 Deployable Shield" contains = list(/obj/item/weapon/shield/riot/marine/deployable) @@ -1014,7 +1098,7 @@ ARMOR /datum/supply_packs/armor/scout_cloak name = "Scout Cloak" - contains = list(/obj/item/storage/backpack/marine/satchel/scout_cloak/scout) + contains = list(/obj/item/storage/backpack/marine/satchel/scout_cloak) cost = 500 /datum/supply_packs/armor/sniper_cloak @@ -1350,7 +1434,7 @@ ENGINEERING /datum/supply_packs/engineering/glass50 name = "50 glass sheets" - contains = list(/obj/item/stack/sheet/glass/large_stack) + contains = list(/obj/item/stack/sheet/glass/glass/large_stack) cost = 100 /datum/supply_packs/engineering/wood50 @@ -1979,7 +2063,7 @@ VEHICLES /datum/supply_packs/vehicles/hsg_ammo name = "Mounted HSG ammo" - contains = list(/obj/item/ammo_magazine/tl102/hsg_nest) + contains = list(/obj/item/ammo_magazine/hsg_102/hsg_nest) cost = 100 containertype = /obj/structure/closet/crate/ammo @@ -2048,15 +2132,55 @@ FACTORY contains = list(/obj/machinery/unboxer) cost = 50 +/datum/supply_packs/factory/bignaderefill + name = "Rounded M15 plates refill" + contains = list(/obj/item/factory_refill/bignade_refill) + cost = 550 + +/datum/supply_packs/factory/incennaderefill + name = "Incendiary grenade refill" + contains = list(/obj/item/factory_refill/incennade_refill) + cost = 550 + +/datum/supply_packs/factory/stickynaderefill + name = "Adhesive grenade refill" + contains = list(/obj/item/factory_refill/stickynade_refill) + cost = 450 + /datum/supply_packs/factory/phosphosrefill name = "Phosphorus-resistant plates refill" contains = list(/obj/item/factory_refill/phosnade_refill) + cost = 1050 + +/datum/supply_packs/factory/cloaknade_refill + name = "Cloak grenade refill" + contains = list(/obj/item/factory_refill/cloaknade_refill) + cost = 450 + +/datum/supply_packs/factory/trailblazerrefill + name = "Trailblazer grenade refill" + contains = list(/obj/item/factory_refill/trailblazer_refill) + cost = 750 + +/datum/supply_packs/factory/lasenaderefill + name = "Laserburster grenade refill" + contains = list(/obj/item/factory_refill/lasenade_refill) + cost = 450 + +/datum/supply_packs/factory/hefanaderefill + name = "HEFA fragmentation grenade refill" + contains = list(/obj/item/factory_refill/hefanade_refill) + cost = 750 + +/datum/supply_packs/factory/antigasrefill + name = "Anti-Gas grenade refill" + contains = list(/obj/item/factory_refill/antigas_refill) cost = 900 -/datum/supply_packs/factory/bignaderefill - name = "Rounded M15 plates refill" - contains = list(/obj/item/factory_refill/bignade_refill) - cost = 500 +/datum/supply_packs/factory/razornade_refill + name = "Razornade assembly refill" + contains = list(/obj/item/factory_refill/razornade_refill) + cost = 750 /datum/supply_packs/factory/sadar_refill_he name = "SADAR HE missile assembly refill" @@ -2123,10 +2247,9 @@ FACTORY contains = list(/obj/item/factory_refill/smartgunner_machinegun_magazine_refill) cost = 250 - /datum/supply_packs/factory/smartgun_targetrifle_refill - name = "SG-62 ammo drum parts refill" - contains = list(/datum/supply_packs/factory/smartgun_magazine_refill) + name = "SG-62 ammo magazine parts refill" + contains = list(/obj/item/factory_refill/smartgunner_targetrifle_magazine_refill) cost = 250 /datum/supply_packs/factory/autosniper_magazine_refill @@ -2154,28 +2277,38 @@ FACTORY contains = list(/obj/item/factory_refill/railgun_magazine_refill) cost = 200 +/datum/supply_packs/factory/railgun_hvap_magazine_refill + name = "Railgun HVAP magazine assembly refill" + contains = list(/obj/item/factory_refill/railgun_hvap_magazine_refill) + cost = 200 + +/datum/supply_packs/factory/railgun_smart_magazine_refill + name = "Railgun magazine assembly refill" + contains = list(/obj/item/factory_refill/railgun_smart_magazine_refill) + cost = 200 + /datum/supply_packs/factory/minigun_powerpack_refill name = "Minigun powerpack assembly refill" contains = list(/obj/item/factory_refill/minigun_powerpack_refill) cost = 250 -/datum/supply_packs/factory/razornade_refill - name = "Razornade assembly refill" - contains = list(/obj/item/factory_refill/razornade_refill) - cost = 500 +/datum/supply_packs/factory/flak_sniper_refill + name = "SR-127 flak magazine assembly refill" + contains = list(/obj/item/factory_refill/sniper_flak_magazine_refill) + cost = 600 /datum/supply_packs/factory/amr_magazine_refill - name = "T-26 AMR magazine assembly refill" + name = "T-26 AMR standard magazine assembly refill" contains = list(/obj/item/factory_refill/amr_magazine_refill) cost = 400 /datum/supply_packs/factory/amr_magazine_incend_refill - name = "T-26 AMR magazine assembly refill" + name = "T-26 AMR incendiary magazine assembly refill" contains = list(/obj/item/factory_refill/amr_magazine_incend_refill) cost = 400 /datum/supply_packs/factory/amr_magazine_flak_refill - name = "T-26 AMR magazine assembly refill" + name = "T-26 AMR flak magazine assembly refill" contains = list(/obj/item/factory_refill/amr_magazine_flak_refill) cost = 400 @@ -2204,10 +2337,6 @@ FACTORY contains = list(/obj/item/factory_refill/swat_mask_refill) cost = 500 -/datum/supply_packs/factory/med_advpack - name = "Advanced medical pack assembly refill" - contains = list(/obj/item/factory_refill/med_advpack_refill) - cost = 500 /* RU TGMC EDIT /datum/supply_packs/factory/module_valk_refill name = "Valkyrie Automedical Armor System assembly refill" @@ -2234,6 +2363,21 @@ FACTORY contains = list(/obj/item/factory_refill/module_surt_refill) cost = 600 RU TGMC EDIT*/ +/datum/supply_packs/factory/plastique_refill + name = "C4 assembly refill" + contains = list(/obj/item/factory_refill/plastique_refill) + cost = 150 + +/datum/supply_packs/factory/plastique_incendiary_refill + name = "EX-62 Genghis incendiary assembly refill" + contains = list(/obj/item/factory_refill/plastique_incendiary_refill) + cost = 500 + +/datum/supply_packs/factory/detpack_refill + name = "Detpack assembly refill" + contains = list(/obj/item/factory_refill/detpack_refill) + cost = 250 + /datum/supply_packs/factory/mortar_shell_he_refill name = "Mortar High Explosive shell assembly refill" contains = list(/obj/item/factory_refill/mortar_shell_he_refill) @@ -2264,6 +2408,96 @@ RU TGMC EDIT*/ contains = list(/obj/item/factory_refill/mlrs_rocket_refill) cost = 240 +/datum/supply_packs/factory/mlrs_rocket_refill_cloak + name = "MLRS 'S-2' Cloak rocket assembly refill" + contains = list(/obj/item/factory_refill/mlrs_rocket_refill_cloak) + cost = 240 + +/datum/supply_packs/factory/mlrs_rocket_refill_gas + name = "MLRS 'X-50' gas rocket assembly refill" + contains = list(/obj/item/factory_refill/mlrs_rocket_refill_gas) + cost = 240 + +/datum/supply_packs/factory/mlrs_rocket_refill_incendiary + name = "MLRS Incendiary rocket assembly refill" + contains = list(/obj/item/factory_refill/mlrs_rocket_refill_incendiary) + cost = 240 + +/datum/supply_packs/factory/agls_he_refill + name = "AGLS HE magazine assembly refill" + contains = list(/obj/item/factory_refill/agls_he_refill) + cost = 300 + +/datum/supply_packs/factory/agls_frag_refill + name = "AGLS FRAG magazine assembly refill" + contains = list(/obj/item/factory_refill/agls_frag_refill) + cost = 300 + +/datum/supply_packs/factory/agls_incendiary_refill + name = "AGLS Incendiary magazine assembly refill" + contains = list(/obj/item/factory_refill/agls_incendiary_refill) + cost = 300 + +/datum/supply_packs/factory/agls_flare_refill + name = "AGLS Flare magazine assembly refill" + contains = list(/obj/item/factory_refill/agls_flare_refill) + cost = 200 + +/datum/supply_packs/factory/agls_cloak_refill + name = "AGLS Cloak magazine assembly refill" + contains = list(/obj/item/factory_refill/agls_cloak_refill) + cost = 200 + +/datum/supply_packs/factory/agls_tanglefoot_refill + name = "AGLS Tanglefoot magazine assembly refill" + contains = list(/obj/item/factory_refill/agls_tanglefoot_refill) + cost = 400 + +/datum/supply_packs/factory/atgun_aphe_refill + name = "AT-36 AP-HE shell assembly refill" + contains = list(/obj/item/factory_refill/atgun_aphe_refill) + cost = 100 + +/datum/supply_packs/factory/atgun_apcr_refill + name = "AT-36 APCR shell assembly refill" + contains = list(/obj/item/factory_refill/atgun_apcr_refill) + cost = 100 + +/datum/supply_packs/factory/atgun_he_refill + name = "AT-36 HE shell assembly refill" + contains = list(/obj/item/factory_refill/atgun_he_refill) + cost = 100 + +/datum/supply_packs/factory/atgun_beehive_refill + name = "AT-36 Beehive shell assembly refill" + contains = list(/obj/item/factory_refill/atgun_beehive_refill) + cost = 100 + +/datum/supply_packs/factory/atgun_incend_refill + name = "AT-36 Napalm shell assembly refill" + contains = list(/obj/item/factory_refill/atgun_incend_refill) + cost = 100 + +/datum/supply_packs/factory/heavy_isg_he_refill + name = "FK-88 Flak HE shell assembly refill" + contains = list(/obj/item/factory_refill/heavy_isg_he_refill) + cost = 300 + +/datum/supply_packs/factory/heavy_isg_sabot_refill + name = "FK-88 Flak APFDS shell assembly refill" + contains = list(/obj/item/factory_refill/heavy_isg_sabot_refill) + cost = 400 + +/datum/supply_packs/factory/ac_hv_refill + name = "ATR-22 High Velocity magazine assembly refill" + contains = list(/obj/item/factory_refill/ac_hv_refill) + cost = 300 + +/datum/supply_packs/factory/ac_flak_refill + name = "ATR-22 Flak magazine assembly refill" + contains = list(/obj/item/factory_refill/ac_flak_refill) + cost = 300 + /datum/supply_packs/factory/thermobaric_wp_refill name = "RL-57 Thermobaric WP rocket array assembly refill" contains = list(/obj/item/factory_refill/thermobaric_wp_refill) @@ -2273,3 +2507,13 @@ RU TGMC EDIT*/ name = "Zeus orbital drop pod assembly refill" contains = list(/obj/item/factory_refill/drop_pod_refill) cost = 250 + +/datum/supply_packs/factory/deployable_floodlight_refill + name = "Deployable floodlight assembly refill" + contains = list(/obj/item/factory_refill/deployable_floodlight_refill) + cost = 150 + +/datum/supply_packs/factory/deployable_camera_refill + name = "Deplyable security camera refill" + contains = list(/obj/item/factory_refill/deployable_camera_refill) + cost = 100 diff --git a/code/modules/requisitions/supply_export.dm b/code/modules/requisitions/supply_export.dm index 420ac4a73869e..2734dd995779c 100644 --- a/code/modules/requisitions/supply_export.dm +++ b/code/modules/requisitions/supply_export.dm @@ -1,56 +1,61 @@ ///Function that sells whatever object this is to the faction_selling; returns a /datum/export_report if successful /atom/movable/proc/supply_export(faction_selling) - var/points = get_export_value() + var/list/points = get_export_value() if(!points) return FALSE - SSpoints.supply_points[faction_selling] += points - SSpoints.dropship_points += points * 0.1 - return new /datum/export_report(points, name, faction_selling) + SSpoints.supply_points[faction_selling] += points[1] + SSpoints.dropship_points += points[2] + return new /datum/export_report(points[1], name, faction_selling) /mob/living/carbon/human/supply_export(faction_selling) if(!can_sell_human_body(src, faction_selling)) return new /datum/export_report(0, name, faction_selling) return ..() -///Getter to obtain the req point value of whatever this is +/** + * Getter proc for the point value of this object + * + * Returns: + * * A list where the first value is the number of req points and the second number is the number of cas points. + */ /atom/movable/proc/get_export_value() - return 0 + . = list(0,0) /mob/living/carbon/human/get_export_value() switch(job.job_category) if(JOB_CAT_ENGINEERING, JOB_CAT_MEDICAL, JOB_CAT_REQUISITIONS) - . = 200 + . = list(200, 20) if(JOB_CAT_MARINE) - . = 300 + . = list(300, 30) if(JOB_CAT_SILICON) - . = 800 + . = list(800, 80) if(JOB_CAT_COMMAND) - . = 1000 + . = list(1000, 100) return /mob/living/carbon/xenomorph/get_export_value() switch(tier) if(XENO_TIER_MINION) - . = 50 + . = list(50, 5) if(XENO_TIER_ZERO) - . = 70 + . = list(70, 7) if(XENO_TIER_ONE) - . = 150 + . = list(150, 15) if(XENO_TIER_TWO) - . = 300 + . = list(350, 30) if(XENO_TIER_THREE) - . = 500 + . = list(600, 50) if(XENO_TIER_FOUR) - . = 1000 + . = list(1100, 100) return //I hate it but it's how it was so I'm not touching it further than this /mob/living/carbon/xenomorph/shrike/get_export_value() - return 500 + return list(600, 50) /obj/item/reagent_containers/food/snacks/req_pizza/get_export_value() - return 10 + return list(10, 0) //RUTGMC EDIT REMOVAL BEGIN - ALLY_SALE - (Moved to modular_RUtgmc\code\modules\requisitions\supply_export.dm) /* diff --git a/code/modules/screen_alert/command_alert.dm b/code/modules/screen_alert/command_alert.dm index 0324201415142..089ccec2f1823 100644 --- a/code/modules/screen_alert/command_alert.dm +++ b/code/modules/screen_alert/command_alert.dm @@ -21,7 +21,7 @@ ///What skill is needed to have this action var/skill_name = SKILL_LEADERSHIP ///What minimum level in that skill is needed to have that action - var/skill_min = SKILL_LEAD_EXPERT + var/skill_min = SKILL_LEAD_TRAINED /datum/action/innate/message_squad/should_show() return owner.skills.getRating(skill_name) >= skill_min @@ -49,16 +49,38 @@ return if(!can_use_action()) return - human_owner.playsound_local(owner, "sound/effects/CIC_order.ogg", 10, 1) + var/sound/S = sound('sound/misc/notice2.ogg') + S.channel = CHANNEL_ANNOUNCEMENTS TIMER_COOLDOWN_START(owner, COOLDOWN_HUD_ORDER, ORDER_COOLDOWN) log_game("[key_name(human_owner)] has broadcasted the hud message [text] at [AREACOORD(human_owner)]") - deadchat_broadcast(" has sent the command order \"[text]\"", human_owner, human_owner) + var/override_color // for squad colors + var/list/alert_receivers = (GLOB.alive_human_list + GLOB.ai_list + GLOB.observer_list) // for full faction alerts, do this so that faction's AI and ghosts can hear aswell if(human_owner.assigned_squad) - for(var/mob/living/carbon/human/marine AS in human_owner.assigned_squad.marines_list) - marine.play_screen_text("SQUAD ORDERS UPDATED:
    " + text, /atom/movable/screen/text/screen_text/command_order) - to_chat(marine, "

    You have received orders to...


    [span_alert(text)]

    ") + switch(human_owner.assigned_squad.id) + if(ALPHA_SQUAD) + override_color = "red" + if(BRAVO_SQUAD) + override_color = "orange" + if(CHARLIE_SQUAD) + override_color = "purple" + if(DELTA_SQUAD) + override_color = "blue" + for(var/mob/living/carbon/human/marine AS in human_owner.assigned_squad.marines_list | GLOB.observer_list) + marine.play_screen_text("SQUAD ANNOUNCEMENT:
    " + text, /atom/movable/screen/text/screen_text/command_order) + to_chat(marine, assemble_alert( + title = "Squad [human_owner.assigned_squad.name] Announcement", + subtitle = "Sent by [human_owner.real_name]", + message = text, + color_override = override_color, + minor = TRUE + )) return - for(var/mob/living/carbon/human/human AS in GLOB.alive_human_list) - if(human.faction == human_owner.faction) - human.play_screen_text("ORDERS UPDATED:
    " + text, /atom/movable/screen/text/screen_text/command_order) - to_chat(human, "

    You have received orders to...


    [span_alert(text)]

    ") + for(var/mob/faction_receiver in alert_receivers) + if(faction_receiver.faction == human_owner.faction || isdead(faction_receiver)) + faction_receiver.play_screen_text("COMMAND ANNOUNCEMENT:
    " + text, /atom/movable/screen/text/screen_text/command_order) + to_chat(faction_receiver, assemble_alert( + title = "Command Announcement", + subtitle = "Sent by [human_owner.real_name]", + message = text + )) + SEND_SOUND(faction_receiver, S) diff --git a/code/modules/screen_alert/misc_alert.dm b/code/modules/screen_alert/misc_alert.dm index 9f206bfbecd3d..cbaebfd87f8c5 100644 --- a/code/modules/screen_alert/misc_alert.dm +++ b/code/modules/screen_alert/misc_alert.dm @@ -17,7 +17,7 @@ ///x offset of image var/image_to_play_offset_x = 0 -/atom/movable/screen/text/screen_text/picture/Initialize(mapload) +/atom/movable/screen/text/screen_text/picture/Initialize(mapload, datum/hud/hud_owner) . = ..() overlays += image('icons/UI_Icons/screen_alert_images.dmi', icon_state = image_to_play, pixel_y = image_to_play_offset_y, pixel_x = image_to_play_offset_x) @@ -43,11 +43,63 @@ maptext_y = 0 letters_per_update = 2 +/atom/movable/screen/text/screen_text/picture/potrait/tgmc_req + image_to_play = "req_tgmc" + +/atom/movable/screen/text/screen_text/picture/potrait/pod_officer + image_to_play = "pod_officer" + +/atom/movable/screen/text/screen_text/picture/potrait/tgmc_mortar + image_to_play = "mortar_team" + +/atom/movable/screen/text/screen_text/picture/potrait/som_mortar + image_to_play = "mortar_team_som" + /atom/movable/screen/text/screen_text/picture/potrait/som_over image_to_play = "overwatch_som" +/atom/movable/screen/text/screen_text/picture/potrait/som_req + image_to_play = "req_som" + +/atom/movable/screen/text/screen_text/picture/potrait/som_scientist + image_to_play = "scientist_som" + /atom/movable/screen/text/screen_text/picture/potrait/unknown image_to_play = "overwatch_unknown" /atom/movable/screen/text/screen_text/picture/potrait/pilot - image_to_play = "po" + image_to_play = "cas" + +/atom/movable/screen/text/screen_text/picture/potrait/som_pilot + image_to_play = "cas_som" + +// +/atom/movable/screen/text/screen_text/picture/potrait/icc_over + image_to_play = "overwatch_icc" + +/atom/movable/screen/text/screen_text/picture/potrait/militia_reinforcement + image_to_play = "reinforcement_clf" + +/atom/movable/screen/text/screen_text/picture/potrait/freelancer_reinforcement + image_to_play = "reinforcement_fre" + +/atom/movable/screen/text/screen_text/picture/potrait/robot_reinforcement + image_to_play = "reinforcement_robot" + +/atom/movable/screen/text/screen_text/picture/potrait/spec_reinforcement + image_to_play = "reinforcement_spec" + +/atom/movable/screen/text/screen_text/picture/potrait/pmc_reinforcement + image_to_play = "reinforcement_pmc" + +/atom/movable/screen/text/screen_text/picture/potrait/icc_reinforcement + image_to_play = "reinforcement_icc" + +/atom/movable/screen/text/screen_text/picture/potrait/som_reinforcement + image_to_play = "reinforcement_som" + +/atom/movable/screen/text/screen_text/picture/potrait/tgmc_distress + image_to_play = "distress_tgmc" + +/atom/movable/screen/text/screen_text/picture/potrait/som_distress + image_to_play = "distress_som" diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm index 438ef05dab523..b99e6d9bb3590 100644 --- a/code/modules/security_levels/keycard_authentication.dm +++ b/code/modules/security_levels/keycard_authentication.dm @@ -25,6 +25,8 @@ /obj/machinery/keycard_auth/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(machine_stat & (NOPOWER|BROKEN)) to_chat(user, "This device is not powered.") @@ -42,7 +44,8 @@ event_triggered_by = user broadcast_request() //This is the device making the initial event request. It needs to broadcast to other devices -/obj/machinery/keycard_auth/update_icon() +/obj/machinery/keycard_auth/update_icon_state() + . = ..() if(machine_stat &NOPOWER) icon_state = "auth_off" diff --git a/code/modules/shuttle/escape_pod.dm b/code/modules/shuttle/escape_pod.dm index e671e9c2f0d5c..4f4117b37fbdb 100644 --- a/code/modules/shuttle/escape_pod.dm +++ b/code/modules/shuttle/escape_pod.dm @@ -210,5 +210,5 @@ /obj/machinery/door/airlock/evacuation/attack_hand(mob/living/user) return TRUE -/obj/machinery/door/airlock/evacuation/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) +/obj/machinery/door/airlock/evacuation/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) return FALSE //Probably a better idea that these cannot be forced open. diff --git a/code/modules/shuttle/marine_dropship.dm b/code/modules/shuttle/marine_dropship.dm index d143112f64232..a940778d89e1c 100644 --- a/code/modules/shuttle/marine_dropship.dm +++ b/code/modules/shuttle/marine_dropship.dm @@ -93,7 +93,7 @@ /obj/docking_port/stationary/marine_dropship/lz1/Initialize(mapload) . = ..() var/area/area = get_area(src) - area.flags_area |= MARINE_BASE + area.area_flags |= MARINE_BASE /obj/docking_port/stationary/marine_dropship/lz1/prison name = "LZ1: Main Hangar" @@ -105,7 +105,7 @@ /obj/docking_port/stationary/marine_dropship/lz2/Initialize(mapload) . = ..() var/area/area = get_area(src) - area.flags_area |= MARINE_BASE + area.area_flags |= MARINE_BASE /obj/docking_port/stationary/marine_dropship/lz2/prison name = "LZ2: Civ Residence Hangar" @@ -255,7 +255,7 @@ if(hijack_state != HIJACK_STATE_NORMAL) return cycle_timer = addtimer(CALLBACK(src, PROC_REF(go_to_previous_destination)), 20 SECONDS, TIMER_STOPPABLE) - priority_announce("Dropship taking off in 20 seconds towards [previous.name]", "Dropship Automatic Departure") + priority_announce("The Alamo will depart towards [previous.name] in 20 seconds.", "Dropship Automatic Departure", color_override = "grey") ///Send the dropship to its previous dock /obj/docking_port/mobile/marine_dropship/proc/go_to_previous_destination() @@ -320,7 +320,7 @@ /obj/docking_port/mobile/marine_dropship/on_prearrival() . = ..() if(hijack_state == HIJACK_STATE_CRASHING) - priority_announce("DROPSHIP ON COLLISION COURSE. CRASH IMMINENT.", "EMERGENCY", sound = 'sound/AI/dropship_emergency.ogg') + priority_announce("DROPSHIP ON COLLISION COURSE. CRASH IMMINENT.", "EMERGENCY", sound = 'sound/AI/dropship_emergency.ogg', color_override = "red") for(var/obj/machinery/landinglight/light AS in GLOB.landing_lights) if(light.linked_port == destination) light.turn_on() @@ -375,7 +375,7 @@ message_admins("[ADMIN_TPMONTY(src)] has summoned the dropship") log_admin("[key_name(src)] has summoned the dropship") hive?.xeno_message("[src] has summoned down the metal bird to [port], gather to her now!") - priority_announce("Unknown interference with dropship control. Shutting down autopilot", "Dropship malfunction") + priority_announce("Unknown external interference with dropship control. Shutting down autopilot.", "Critical Dropship Alert", type = ANNOUNCEMENT_PRIORITY, color_override = "red") #define ALIVE_HUMANS_FOR_CALLDOWN 0.1 @@ -437,7 +437,7 @@ D.silicon_lock_airlocks(TRUE) to_chat(user, span_warning("We have overriden the shuttle lockdown!")) playsound(user, "alien_roar", 50) - priority_announce("Alamo lockdown protocol compromised. Interference preventing remote control", "Dropship Lock Alert") + priority_announce("Alamo lockdown protocol compromised. Interference preventing remote control.", "Dropship Lock Alert", type = ANNOUNCEMENT_PRIORITY, color_override = "red") return FALSE if(D.mode != SHUTTLE_IDLE && D.mode != SHUTTLE_RECHARGING) to_chat(user, span_warning("The bird's mind is currently active. We need to wait until it's more vulnerable...")) @@ -495,46 +495,28 @@ resistance_flags = RESIST_ALL req_one_access = list(ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_LEADER) // TLs can only operate the remote console possible_destinations = "lz1;lz2;alamo" + opacity = FALSE -/obj/machinery/computer/shuttle/marine_dropship/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(!(X.xeno_caste.caste_flags & CASTE_IS_INTELLIGENT)) +/obj/machinery/computer/shuttle/marine_dropship/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + var/datum/game_mode/infestation/infestation_mode = SSticker.mode //Minor QOL, any xeno can check the console after a leader hijacks + if(!(xeno_attacker.xeno_caste.caste_flags & CASTE_IS_INTELLIGENT) && (infestation_mode.round_stage != INFESTATION_MARINE_CRASHING)) return #ifndef TESTING if(SSticker.round_start_time + SHUTTLE_HIJACK_LOCK > world.time) - to_chat(X, span_xenowarning("It's too early to do this!")) + to_chat(xeno_attacker, span_xenowarning("It's too early to do this!")) return #endif - var/obj/docking_port/mobile/marine_dropship/M = SSshuttle.getShuttle(shuttleId) - var/dat = "Status: [M ? M.getStatusText() : "*Missing*"]

    " - if(M) - dat += "Launch to [SSmapping.configs[SHIP_MAP].map_name]
    " - dat += "Capture the [M]
    " - M.unlock_all() - M.silicon_lock_airlocks(TRUE) - if(M.hijack_state != HIJACK_STATE_CALLED_DOWN) - to_chat(X, span_xenowarning("We corrupt the bird's controls, unlocking the doors[(M.mode != SHUTTLE_IGNITING) ? "and preventing it from flying." : ", but we are unable to prevent it from flying as it is already taking off!"]")) - SEND_GLOBAL_SIGNAL(COMSIG_GLOB_DROPSHIP_CONTROLS_CORRUPTED, src) - if(M.mode != SHUTTLE_IGNITING) - M.set_hijack_state(HIJACK_STATE_CALLED_DOWN) - M.do_start_hijack_timer() - - var/datum/browser/popup = new(X, "computer", M ? M.name : "shuttle", 300, 200) - popup.set_content("
    [dat]
    ") - popup.open() - - -/obj/machinery/computer/shuttle/marine_dropship/can_interact(mob/user) - . = ..() - - if(isxeno(user)) - var/mob/living/carbon/xenomorph/X = user - if(!(X.xeno_caste.caste_flags & CASTE_IS_INTELLIGENT)) - return FALSE + var/obj/docking_port/mobile/marine_dropship/shuttle = SSshuttle.getShuttle(shuttleId) + if(shuttle.hijack_state != HIJACK_STATE_CALLED_DOWN && shuttle.hijack_state != HIJACK_STATE_CRASHING) //Process of corrupting the controls + to_chat(xeno_attacker, span_xenowarning("We corrupt the bird's controls, unlocking the doors and preventing it from flying.")) + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_DROPSHIP_CONTROLS_CORRUPTED, src) + shuttle.set_idle() + shuttle.set_hijack_state(HIJACK_STATE_CALLED_DOWN) + shuttle.do_start_hijack_timer() + interact(xeno_attacker) //Open the UI - else if(!allowed(user)) - return FALSE - - return TRUE +/obj/machinery/computer/shuttle/marine_dropship/ui_state(mob/user) + return GLOB.alamo_state /obj/machinery/computer/shuttle/marine_dropship/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -543,19 +525,31 @@ ui = new(user, src, "MarineDropship", name) ui.open() +/obj/machinery/computer/shuttle/marine_dropship/ui_static_data(mob/user) + var/obj/docking_port/mobile/marine_dropship/shuttle = SSshuttle.getShuttle(shuttleId) + var/list/static_data = list() + static_data["current_map"] = SSmapping.configs[SHIP_MAP].map_name + static_data["ship_name"] = shuttle + + return static_data + /obj/machinery/computer/shuttle/marine_dropship/ui_data(mob/user) var/obj/docking_port/mobile/marine_dropship/shuttle = SSshuttle.getShuttle(shuttleId) if(!shuttle) WARNING("[src] could not find shuttle [shuttleId] from SSshuttle") return - . = list() - .["on_flyby"] = shuttle.mode == SHUTTLE_CALL - .["dest_select"] = !(shuttle.mode == SHUTTLE_CALL || shuttle.mode == SHUTTLE_IDLE) - .["hijack_state"] = shuttle.hijack_state != HIJACK_STATE_CALLED_DOWN - .["ship_status"] = shuttle.getStatusText() - .["automatic_cycle_on"] = shuttle.automatic_cycle_on - .["time_between_cycle"] = shuttle.time_between_cycle + var/list/data = list() + data["is_xeno"] = isxeno(user) + data["on_flyby"] = shuttle.mode == SHUTTLE_CALL + data["dest_select"] = !(shuttle.mode == SHUTTLE_CALL || shuttle.mode == SHUTTLE_IDLE) + data["hijack_state"] = shuttle.hijack_state != HIJACK_STATE_CALLED_DOWN + data["ship_status"] = shuttle.getStatusText() + data["automatic_cycle_on"] = shuttle.automatic_cycle_on + data["time_between_cycle"] = shuttle.time_between_cycle + + var/datum/game_mode/infestation/infestation_mode = SSticker.mode + data["shuttle_hijacked"] = (infestation_mode.round_stage == INFESTATION_MARINE_CRASHING) //If we hijacked, our capture button greys out var/locked = 0 var/reardoor = 0 @@ -564,12 +558,12 @@ if(A.locked && A.density) reardoor++ if(!reardoor) - .["rear"] = 0 + data["rear"] = 0 else if(reardoor==length(shuttle.rear_airlocks)) - .["rear"] = 2 + data["rear"] = 2 locked++ else - .["rear"] = 1 + data["rear"] = 1 var/leftdoor = 0 for(var/i in shuttle.left_airlocks) @@ -577,12 +571,12 @@ if(A.locked && A.density) leftdoor++ if(!leftdoor) - .["left"] = 0 + data["left"] = 0 else if(leftdoor==length(shuttle.left_airlocks)) - .["left"] = 2 + data["left"] = 2 locked++ else - .["left"] = 1 + data["left"] = 1 var/rightdoor = 0 for(var/i in shuttle.right_airlocks) @@ -590,19 +584,19 @@ if(A.locked && A.density) rightdoor++ if(!rightdoor) - .["right"] = 0 + data["right"] = 0 else if(rightdoor==length(shuttle.right_airlocks)) - .["right"] = 2 + data["right"] = 2 locked++ else - .["right"] = 1 + data["right"] = 1 if(locked == 3) - .["lockdown"] = 2 + data["lockdown"] = 2 else if(!locked) - .["lockdown"] = 0 + data["lockdown"] = 0 else - .["lockdown"] = 1 + data["lockdown"] = 1 var/list/options = valid_destinations() var/list/valid_destinations = list() @@ -612,17 +606,19 @@ if(!shuttle.check_dock(S, silent=TRUE)) continue valid_destinations += list(list("name" = S.name, "id" = S.id)) - .["destinations"] = valid_destinations + data["destinations"] = valid_destinations -/obj/machinery/computer/shuttle/marine_dropship/ui_act(action, list/params) + return data + +/obj/machinery/computer/shuttle/marine_dropship/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return - var/obj/docking_port/mobile/marine_dropship/M = SSshuttle.getShuttle(shuttleId) - if(!M) + var/obj/docking_port/mobile/marine_dropship/shuttle = SSshuttle.getShuttle(shuttleId) + if(!shuttle) return - if(M.hijack_state == HIJACK_STATE_CALLED_DOWN) + if(shuttle.hijack_state == HIJACK_STATE_CALLED_DOWN && ishuman(usr)) return switch(action) @@ -630,115 +626,79 @@ Topic(null, list("move" = params["move"])) return if("lockdown") - M.lockdown_all() + shuttle.lockdown_all() . = TRUE if("release") - M.unlock_all() + shuttle.unlock_all() . = TRUE if("lock") - M.lockdown_airlocks(params["lock"]) + shuttle.lockdown_airlocks(params["lock"]) . = TRUE if("unlock") - M.unlock_airlocks(params["unlock"]) + shuttle.unlock_airlocks(params["unlock"]) . = TRUE if("automation_on") - M.automatic_cycle_on = params["automation_on"] - if(!M.automatic_cycle_on) - deltimer(M.cycle_timer) + shuttle.automatic_cycle_on = params["automation_on"] + if(!shuttle.automatic_cycle_on) + deltimer(shuttle.cycle_timer) if("cycle_time_change") - M.time_between_cycle = params["cycle_time_change"] - -/* RUTGMC DELETION -/obj/machinery/computer/shuttle/marine_dropship/Topic(href, href_list) - var/obj/docking_port/mobile/marine_dropship/M = SSshuttle.getShuttle(shuttleId) - if(!M) - return - if(!isxeno(usr) && M.hijack_state == HIJACK_STATE_CALLED_DOWN) - to_chat(usr, span_warning("The shuttle isn't responding to commands.")) - return - . = ..() - if(.) - return - if(M.hijack_state == HIJACK_STATE_CRASHING) - return - - if(ishuman(usr) || isAI(usr)) - if(!allowed(usr)) - return - if(href_list["lockdown"]) - - else if(href_list["release"]) - - else if(href_list["lock"]) - M.lockdown_airlocks(href_list["lock"]) - else if(href_list["unlock"]) - M.unlock_airlocks(href_list["unlock"]) - return - - if(!is_ground_level(M.z)) - return - - if(!isxeno(usr)) - return - - var/mob/living/carbon/xenomorph/X = usr - - if(href_list["hijack"]) - if(!(X.hive.hive_flags & HIVE_CAN_HIJACK)) - to_chat(X, span_warning("Our hive lacks the psychic prowess to hijack the bird.")) - return - switch(M.mode) - if(SHUTTLE_RECHARGING) - to_chat(X, span_xenowarning("The bird is still cooling down.")) + shuttle.time_between_cycle = params["cycle_time_change"] + //These are actions for the Xeno dropship UI + if("hijack") + var/mob/living/carbon/xenomorph/xeno = usr + if(!(xeno.hive.hive_flags & HIVE_CAN_HIJACK)) + to_chat(xeno, span_warning("Our hive lacks the psychic prowess to hijack the bird.")) return - if(SHUTTLE_IDLE) //Continue. - else - to_chat(X, span_xenowarning("We can't do that right now.")) + if(shuttle.mode == SHUTTLE_RECHARGING) + to_chat(xeno, span_xenowarning("The bird is still cooling down.")) + return + if(shuttle.mode != SHUTTLE_IDLE) + to_chat(xeno, span_xenowarning("We can't do that right now.")) + return + var/confirm = tgui_alert(usr, "Would you like to hijack the metal bird?", "Hijack the bird?", list("Yes", "No")) + if(confirm != "Yes") + return + var/obj/docking_port/stationary/marine_dropship/crash_target/CT = pick(SSshuttle.crash_targets) + if(!CT) + return + do_hijack(shuttle, CT, xeno) + if("abduct") + var/datum/game_mode/infestation/infestation_mode = SSticker.mode + if(infestation_mode.round_stage == INFESTATION_MARINE_CRASHING) + message_admins("[usr] tried to capture the shuttle after it was already hijacked, possible use of exploits.") + return + var/groundside_humans = length(GLOB.humans_by_zlevel["[z]"]) + if(groundside_humans > 5) + to_chat(usr, span_xenowarning("There is still prey left to hunt!")) + return + var/confirm = tgui_alert(usr, "Would you like to capture the metal bird?\n THIS WILL END THE ROUND", "Capture the ship?", list( "Yes", "No")) + if(confirm != "Yes") + return + groundside_humans = length(GLOB.humans_by_zlevel["[z]"]) + if(groundside_humans > 5) + to_chat(usr, span_xenowarning("There is still prey left to hunt!")) return - var/confirm = tgui_alert(usr, "Would you like to hijack the metal bird?", "Hijack the bird?", list("Yes", "No")) - if(confirm != "Yes") - return - var/obj/docking_port/stationary/marine_dropship/crash_target/CT = pick(SSshuttle.crash_targets) - if(!CT) - return - do_hijack(M, CT, X) - - if(href_list["abduct"]) - var/groundside_humans - for(var/N in GLOB.alive_human_list) - var/mob/H = N - if(H.z != X.z) - continue - groundside_humans++ - - if(groundside_humans > 5) - to_chat(X, span_xenowarning("There is still prey left to hunt!")) - return - var/confirm = tgui_alert(usr, "Would you like to capture the metal bird?\n THIS WILL END THE ROUND", "Capture the ship?", list( "Yes", "No")) - if(confirm != "Yes") + priority_announce("The Normandy has been captured! Losing their main mean of accessing the ground, the marines have no choice but to retreat.", title = "Alamo Captured", color_override = "orange") + infestation_mode.round_stage = INFESTATION_DROPSHIP_CAPTURED_XENOS return - priority_announce("The Alamo has been captured! Losing their main mean of accessing the ground, the marines have no choice but to retreat.", title = "ALAMO CAPTURED") - var/datum/game_mode/infestation/infestation_mode = SSticker.mode - infestation_mode.round_stage = INFESTATION_DROPSHIP_CAPTURED_XENOS - return -*/ /obj/machinery/computer/shuttle/marine_dropship/proc/do_hijack(obj/docking_port/mobile/marine_dropship/crashing_dropship, obj/docking_port/stationary/marine_dropship/crash_target/crash_target, mob/living/carbon/xenomorph/user) crashing_dropship.set_hijack_state(HIJACK_STATE_CRASHING) - if(SSticker.mode?.flags_round_type & MODE_HIJACK_POSSIBLE) + if(SSticker.mode?.round_type_flags & MODE_HIJACK_POSSIBLE) var/datum/game_mode/infestation/infestation_mode = SSticker.mode infestation_mode.round_stage = INFESTATION_MARINE_CRASHING crashing_dropship.callTime = 120 * (GLOB.current_orbit/3) SECONDS crashing_dropship.crashing = TRUE crashing_dropship.unlock_all() SEND_GLOBAL_SIGNAL(COMSIG_GLOB_DROPSHIP_HIJACKED) - priority_announce("Unscheduled dropship departure detected from operational area. Hijack likely.", "Dropship Alert", sound = 'sound/AI/hijack.ogg') + priority_announce("Unscheduled dropship departure detected from operational area. Hijack likely.", title = "Critical Dropship Alert", type = ANNOUNCEMENT_PRIORITY, sound = 'sound/AI/hijack.ogg', color_override = "red") to_chat(user, span_danger("A loud alarm erupts from [src]! The fleshy hosts must know that you can access it!")) + GLOB.hive_datums[XENO_HIVE_NORMAL].special_build_points = 25 //resets special build points user.hive.on_shuttle_hijack(crashing_dropship) playsound(src, 'sound/misc/queen_alarm.ogg') crashing_dropship.silicon_lock_airlocks(TRUE) - SSevacuation.flags_scuttle &= ~FLAGS_SDEVAC_TIMELOCK + SSevacuation.scuttle_flags &= ~FLAGS_SDEVAC_TIMELOCK switch(SSshuttle.moveShuttleToDock(shuttleId, crash_target, TRUE)) if(0) visible_message("Shuttle departing. Please stand away from the doors.") @@ -754,7 +714,6 @@ name = "\improper 'Alamo' flight controls" desc = "The flight controls for the 'Alamo' Dropship. Named after the Alamo Mission, stage of the Battle of the Alamo in the United States' state of Texas in the Spring of 1836. The defenders held to the last, encouraging other Texians to rally to the flag." possible_destinations = "lz1;lz2;alamo" - opacity = FALSE /* RUTGMC DELETION /obj/machinery/computer/shuttle/marine_dropship/one/Initialize(mapload) @@ -786,6 +745,12 @@ /turf/open/shuttle/dropship/floor/alt icon_state = "rasputin14" +/turf/open/shuttle/dropship/floor/corners + icon_state = "rasputin16" + +/turf/open/shuttle/dropship/floor/out + icon_state = "rasputin17" + /obj/machinery/door/airlock/multi_tile/mainship/dropshiprear/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override) . = ..() if(!istype(port, /obj/docking_port/mobile/marine_dropship)) @@ -1311,13 +1276,13 @@ if(action != "selectDestination") return FALSE - var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId) + var/obj/docking_port/mobile/shuttle = SSshuttle.getShuttle(shuttleId) #ifndef TESTING - if(!(M.shuttle_flags & GAMEMODE_IMMUNE) && world.time < SSticker.round_start_time + SSticker.mode.deploy_time_lock) + if(!(shuttle.shuttle_flags & GAMEMODE_IMMUNE) && world.time < SSticker.round_start_time + SSticker.mode.deploy_time_lock) to_chat(usr, span_warning("The engines are still refueling.")) return TRUE #endif - if(!M.can_move_topic(usr)) + if(!shuttle.can_move_topic(usr)) return TRUE if(!params["destination"]) @@ -1328,8 +1293,8 @@ message_admins("[ADMIN_TPMONTY(usr)] may be attempting a href dock exploit on [src] with target location \"[html_encode(params["destination"])]\"") return TRUE - var/previous_status = M.mode - log_game("[key_name(usr)] has sent the shuttle [M] to [params["destination"]]") + var/previous_status = shuttle.mode + log_game("[key_name(usr)] has sent the shuttle [shuttle] to [params["destination"]]") switch(SSshuttle.moveShuttle(shuttleId, params["destination"], 1)) if(0) @@ -1352,12 +1317,12 @@ /obj/machinery/computer/shuttle/shuttle_control/ui_data(mob/user) var/list/data = list() var/list/options = valid_destinations() - var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId) - if(!M) + var/obj/docking_port/mobile/shuttle = SSshuttle.getShuttle(shuttleId) + if(!shuttle) return data //empty but oh well - data["linked_shuttle_name"] = M.name - data["shuttle_status"] = M.getStatusText() + data["linked_shuttle_name"] = shuttle.name + data["shuttle_status"] = shuttle.getStatusText() for(var/option in options) for(var/obj/docking_port/stationary/S AS in SSshuttle.stationary) if(option != S.id) @@ -1365,7 +1330,7 @@ var/list/dataset = list() dataset["id"] = S.id dataset["name"] = S.name - dataset["locked"] = !M.check_dock(S, silent=TRUE) + dataset["locked"] = !shuttle.check_dock(S, silent=TRUE) data["destinations"] += list(dataset) return data diff --git a/code/modules/shuttle/mini_dropship.dm b/code/modules/shuttle/mini_dropship.dm index 73ee62729ee0a..dc017a3f28ee7 100644 --- a/code/modules/shuttle/mini_dropship.dm +++ b/code/modules/shuttle/mini_dropship.dm @@ -17,7 +17,7 @@ desc = "Used to designate a precise transit location for the Tadpole." icon_state = "shuttlecomputer" screen_overlay = "shuttlecomputer_screen" - req_one_access = list(ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_LEADER) + req_access = list(ACCESS_MARINE_TADPOLE) density = FALSE interaction_flags = INTERACT_OBJ_UI resistance_flags = RESIST_ALL @@ -160,23 +160,23 @@ return nvg_vision_mode = !nvg_vision_mode -/obj/machinery/computer/camera_advanced/shuttle_docker/minidropship/attack_alien(mob/living/carbon/xenomorph/X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) +/obj/machinery/computer/camera_advanced/shuttle_docker/minidropship/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) . = ..() if(machine_stat & BROKEN) return - if(X.status_flags & INCORPOREAL) + if(xeno_attacker.status_flags & INCORPOREAL) return - X.visible_message("[X] begins to slash delicately at the computer", + xeno_attacker.visible_message("[xeno_attacker] begins to slash delicately at the computer", "We start slashing delicately at the computer. This will take a while.") - if(!do_after(X, 10 SECONDS, NONE, src, BUSY_ICON_DANGER, BUSY_ICON_HOSTILE)) + if(!do_after(xeno_attacker, 10 SECONDS, NONE, src, BUSY_ICON_DANGER, BUSY_ICON_HOSTILE)) return visible_message("The inner wiring is visible, it can be slashed!") - X.visible_message("[X] continue to slash at the computer", + xeno_attacker.visible_message("[xeno_attacker] continue to slash at the computer", "We continue slashing at the computer. If we stop now we will have to start all over again.") var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread s.set_up(3, 1, src) s.start() - if(!do_after(X, 10 SECONDS, NONE, src, BUSY_ICON_DANGER, BUSY_ICON_HOSTILE)) + if(!do_after(xeno_attacker, 10 SECONDS, NONE, src, BUSY_ICON_DANGER, BUSY_ICON_HOSTILE)) return visible_message("The wiring is destroyed, nobody will be able to repair this computer!") SEND_GLOBAL_SIGNAL(COMSIG_GLOB_MINI_DROPSHIP_DESTROYED, src) diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm index 1b659ea65cdcd..2f287d18e597d 100644 --- a/code/modules/shuttle/navigation_computer.dm +++ b/code/modules/shuttle/navigation_computer.dm @@ -161,7 +161,7 @@ if(designate_time && (landing_clear != SHUTTLE_DOCKER_BLOCKED)) to_chat(current_user, span_warning("Targeting transit location, please wait [DisplayTimeText(designate_time)]...")) designating_target_loc = the_eye.loc - var/wait_completed = do_after(current_user, designate_time, NONE, designating_target_loc, extra_checks = CALLBACK(src, /obj/machinery/computer/camera_advanced/shuttle_docker/proc/canDesignateTarget)) + var/wait_completed = do_after(current_user, designate_time, NONE, designating_target_loc, extra_checks = CALLBACK(src, PROC_REF(canDesignateTarget))) designating_target_loc = null if(!current_user) return diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index b0f256cfd42e4..f3ea3f6d61e46 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -38,7 +38,7 @@ All ShuttleMove procs go here continue if(ismovable(thing)) var/atom/movable/movable_thing = thing - if(movable_thing.flags_atom & SHUTTLE_IMMUNE) + if(movable_thing.atom_flags & SHUTTLE_IMMUNE) var/old_dir = movable_thing.dir movable_thing.abstract_move(src) movable_thing.setDir(old_dir) @@ -98,7 +98,7 @@ All ShuttleMove procs go here if(loc != oldT) // This is for multi tile objects return - if(flags_atom & SHUTTLE_IMMUNE) + if(atom_flags & SHUTTLE_IMMUNE) return abstract_move(newT) diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index b443bb58d6676..d02847188cd0e 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -315,7 +315,7 @@ /obj/docking_port/stationary/proc/on_crash() return -//returns first-found touching shuttleport +///returns first-found touching shuttleport /obj/docking_port/stationary/get_docked() . = locate(/obj/docking_port/mobile) in loc @@ -355,14 +355,20 @@ var/list/shuttle_areas - var/timer //used as a timer (if you want time left to complete move, use timeLeft proc) + ///used as a timer (if you want time left to complete move, use timeLeft proc) + var/timer var/last_timer_length - var/mode = SHUTTLE_IDLE //current shuttle mode - var/callTime = 100 //time spent in transit (deciseconds). Should not be lower then 10 seconds without editing the animation of the hyperspace ripples. - var/ignitionTime = 55 // time spent "starting the engines". Also rate limits how often we try to reserve transit space if its ever full of transiting shuttles. - var/rechargeTime = 0 //time spent after arrival before being able to launch again - var/prearrivalTime = 0 //delay after call time finishes for sound effects, explosions, etc. + ///current shuttle mode + var/mode = SHUTTLE_IDLE + ///time spent in transit (deciseconds). Should not be lower then 10 seconds without editing the animation of the hyperspace ripples. + var/callTime = 100 + /// time spent "starting the engines". Also rate limits how often we try to reserve transit space if its ever full of transiting shuttles. + var/ignitionTime = 55 + ///time spent after arrival before being able to launch again + var/rechargeTime = 0 + ///delay after call time finishes for sound effects, explosions, etc. + var/prearrivalTime = 0 var/landing_sound = 'sound/effects/engine_landing.ogg' var/ignition_sound = 'sound/effects/engine_startup.ogg' diff --git a/code/modules/surgery/eye.dm b/code/modules/surgery/eye.dm index 1bad750d5e0ef..fb5c5625cca84 100644 --- a/code/modules/surgery/eye.dm +++ b/code/modules/surgery/eye.dm @@ -40,7 +40,7 @@ /datum/surgery_step/eye/cut_open/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/limb/affected) user.visible_message(span_notice("[user] has separated the cornea on [target]'s eyes with \the [tool].") , \ - span_notice("You have separated the cornea on [target]'s eyes with \the [tool]."),) + span_notice("You have separated the cornea on [target]'s eyes with \the [tool].")) target.balloon_alert_to_viewers("Success") var/datum/internal_organ/eyes/E = target.internal_organs_by_name["eyes"] E.eye_surgery_stage = 1 diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index 8539fc54e9fc3..e4003d8f5e95e 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -44,7 +44,7 @@ /datum/surgery_step/generic/incision_manager/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/limb/affected) user.visible_message(span_notice("[user] has constructed a prepared incision on and within [target]'s [affected.display_name] with \the [tool]."), \ - span_notice("You have constructed a prepared incision on and within [target]'s [affected.display_name] with \the [tool]."),) + span_notice("You have constructed a prepared incision on and within [target]'s [affected.display_name] with \the [tool].")) target.balloon_alert_to_viewers("Success") affected.surgery_open_stage = 1 @@ -143,7 +143,7 @@ /datum/surgery_step/generic/cut_open/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/limb/affected) user.visible_message(span_notice("[user] has made an incision on [target]'s [affected.display_name] with \the [tool]."), \ - span_notice("You have made an incision on [target]'s [affected.display_name] with \the [tool]."),) + span_notice("You have made an incision on [target]'s [affected.display_name] with \the [tool].")) target.balloon_alert_to_viewers("Success") affected.surgery_open_stage = 1 @@ -200,7 +200,7 @@ /datum/surgery_step/generic/clamp_bleeders/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/limb/affected) user.visible_message(span_warning("[user]'s hand slips, tearing blood vessals and causing massive bleeding in [target]'s [affected.display_name] with \the [tool]!"), \ - span_warning("Your hand slips, tearing blood vessels and causing massive bleeding in [target]'s [affected.display_name] with \the [tool]!"),) + span_warning("Your hand slips, tearing blood vessels and causing massive bleeding in [target]'s [affected.display_name] with \the [tool]!")) target.balloon_alert_to_viewers("Slipped!") affected.createwound(CUT, 10) affected.update_wounds() diff --git a/code/modules/tgchat/README.md b/code/modules/tgchat/README.md new file mode 100644 index 0000000000000..95f28ae0e8cf9 --- /dev/null +++ b/code/modules/tgchat/README.md @@ -0,0 +1,30 @@ +## /TG/ Chat + +/TG/ Chat, which will be referred to as TgChat from this point onwards, is a system in which we can send messages to clients in a controlled and semi-reliable manner. The standard way of sending messages to BYOND clients simply dumps whatever you output to them directly into their chat window, however BYOND allows us to load our own code on the client to change this behaviour in a way that allows us to do some pretty neat things. + +### Message Format + +TgChat handles sending messages from the server to the client through the use of JSON payloads, of which the format will change depending on the type of message and the intended client endpoint. An example of the payload for chat messages is as follows: +```json +{ + "sequence": 0, + "content": { + "type": ". . .", // ?optional + "text": ". . .", // ?optional !atleast-one + "html": ". . .", // ?optional !atleast-one + "avoidHighlighting": 0 // ?optional + }, +} +``` + +### Reliability + +In the past there have been issues where BYOND will silently and without reason lose a message we sent to the client, to detect this and recover from it seamlessly TgChat also has a baked in reliability layer. This reliability layer is very primitive, and simply keeps track of recieved sequence numbers. Should the client recieve an unexpected sequence number TgChat asks the server to resend any missing packets. + +### Ping System + +TgChat supports a round trip time ping measurement, which is displayed to the client so they can know how long it takes for their commands and inputs to reach the server. This is done by sending the client a ping request, `ping/soft`, which tells the client to send a ping to the server. When the server recieves said ping it sends a reply, `ping/reply`, to the client with a payload containing the current DateTime which the client can reference against the initial ping request. + +### Chat Tabs, Local Storage, and Highlighting + +To make organizing and managing chat easier and more functional for both players and admins, TgChat has the ability to filter out messages based on their primary tag, such as individual departmental radios, to a dedicated chat tab for easier reading and comprehension. These tabs can also be configured to highlist messages based on a simple keyword search. You can set a multitude of different keywords to search for and they will be highlighting for instant alerting of the client. Said tabs, highlighting rules, and your chat history will persist thanks to use of local storage on the client. Using local storage TgChat can ensure that your preferences are saved and maintained between client restarts and switching between other /TG/ servers. Local Storage is also used to keep your chat history aswell, should you need to scroll through your chat logs. diff --git a/code/modules/tgchat/to_chat.dm b/code/modules/tgchat/to_chat.dm index 6ee122c719414..fda50b66dc69d 100644 --- a/code/modules/tgchat/to_chat.dm +++ b/code/modules/tgchat/to_chat.dm @@ -25,23 +25,9 @@ if(text) message["text"] = text if(html) message["html"] = html if(avoid_highlighting) message["avoidHighlighting"] = avoid_highlighting - var/message_blob = TGUI_CREATE_MESSAGE("chat/message", message) - var/message_html = message_to_html(message) - if(islist(target)) - for(var/_target in target) - var/client/client = CLIENT_FROM_VAR(_target) - if(client) - // Send to tgchat - client.tgui_panel?.window.send_raw_message(message_blob) - // Send to old chat - SEND_TEXT(client, message_html) - return - var/client/client = CLIENT_FROM_VAR(target) - if(client) - // Send to tgchat - client.tgui_panel?.window.send_raw_message(message_blob) - // Send to old chat - SEND_TEXT(client, message_html) + + // send it immediately + SSchat.send_immediate(target, message) /** * Sends the message to the recipient (target). diff --git a/code/modules/tgs/LICENSE b/code/modules/tgs/LICENSE index 2bedf9a63aa0e..324c48e993e13 100644 --- a/code/modules/tgs/LICENSE +++ b/code/modules/tgs/LICENSE @@ -1,6 +1,6 @@ The MIT License -Copyright (c) 2017-2023 Jordan Brown +Copyright (c) 2017-2024 Jordan Brown Permission is hereby granted, free of charge, to any person obtaining a copy of this software and diff --git a/code/modules/tgs/core/core.dm b/code/modules/tgs/core/core.dm index b9a9f27a28ae8..15622228e91fe 100644 --- a/code/modules/tgs/core/core.dm +++ b/code/modules/tgs/core/core.dm @@ -42,11 +42,11 @@ var/datum/tgs_version/max_api_version = TgsMaximumApiVersion(); if(version.suite != null && version.minor != null && version.patch != null && version.deprecated_patch != null && version.deprefixed_parameter > max_api_version.deprefixed_parameter) - TGS_ERROR_LOG("Detected unknown API version! Defaulting to latest. Update the DMAPI to fix this problem.") + TGS_ERROR_LOG("Detected unknown Interop API version! Defaulting to latest. Update the DMAPI to fix this problem.") api_datum = /datum/tgs_api/latest if(!api_datum) - TGS_ERROR_LOG("Found unsupported API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.") + TGS_ERROR_LOG("Found unsupported Interop API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.") return TGS_INFO_LOG("Activating API for version [version.deprefixed_parameter]") @@ -107,6 +107,13 @@ if(api) return api.ApiVersion() +/world/TgsEngine() +#ifdef OPENDREAM + return TGS_ENGINE_TYPE_OPENDREAM +#else + return TGS_ENGINE_TYPE_BYOND +#endif + /world/TgsInstanceName() var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) if(api) @@ -159,3 +166,11 @@ var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) if(api) return api.Visibility() + +/world/TgsTriggerEvent(event_name, list/parameters, wait_for_completion = FALSE) + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + if(!istype(parameters, /list)) + parameters = list() + + return api.TriggerEvent(event_name, parameters, wait_for_completion) diff --git a/code/modules/tgs/core/datum.dm b/code/modules/tgs/core/datum.dm index 07ce3b684584e..f734fd0527f0e 100644 --- a/code/modules/tgs/core/datum.dm +++ b/code/modules/tgs/core/datum.dm @@ -7,7 +7,7 @@ TGS_DEFINE_AND_SET_GLOBAL(tgs, null) var/list/warned_deprecated_command_runs /datum/tgs_api/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version) - . = ..() + ..() src.event_handler = event_handler src.version = version @@ -17,7 +17,7 @@ TGS_DEFINE_AND_SET_GLOBAL(tgs, null) world.sleep_offline = FALSE // https://www.byond.com/forum/post/2894866 del(world) world.sleep_offline = FALSE // just in case, this is BYOND after all... - sleep(1) + sleep(world.tick_lag) TGS_DEBUG_LOG("BYOND DIDN'T TERMINATE THE WORLD!!! TICK IS: [world.time], sleep_offline: [world.sleep_offline]") /datum/tgs_api/latest @@ -69,3 +69,6 @@ TGS_PROTECT_DATUM(/datum/tgs_api) /datum/tgs_api/proc/Visibility() return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/TriggerEvent(event_name, list/parameters, wait_for_completion) + return FALSE diff --git a/code/modules/tgs/core/tgs_version.dm b/code/modules/tgs/core/tgs_version.dm index a5dae1241a306..bc561e67487a2 100644 --- a/code/modules/tgs/core/tgs_version.dm +++ b/code/modules/tgs/core/tgs_version.dm @@ -1,4 +1,5 @@ /datum/tgs_version/New(raw_parameter) + ..() src.raw_parameter = raw_parameter deprefixed_parameter = replacetext(raw_parameter, "/tg/station 13 Server v", "") var/list/version_bits = splittext(deprefixed_parameter, ".") diff --git a/code/modules/tgs/v4/api.dm b/code/modules/tgs/v4/api.dm index 945e2e4117671..7c87922750b9b 100644 --- a/code/modules/tgs/v4/api.dm +++ b/code/modules/tgs/v4/api.dm @@ -181,7 +181,7 @@ var/json = json_encode(data) while(requesting_new_port && !override_requesting_new_port) - sleep(1) + sleep(world.tick_lag) //we need some port open at this point to facilitate return communication if(!world.port) @@ -209,7 +209,7 @@ requesting_new_port = FALSE while(export_lock) - sleep(1) + sleep(world.tick_lag) export_lock = TRUE last_interop_response = null @@ -217,7 +217,7 @@ text2file(json, server_commands_json_path) for(var/I = 0; I < EXPORT_TIMEOUT_DS && !last_interop_response; ++I) - sleep(1) + sleep(world.tick_lag) if(!last_interop_response) TGS_ERROR_LOG("Failed to get export result for: [json]") diff --git a/code/modules/tgs/v5/__interop_version.dm b/code/modules/tgs/v5/__interop_version.dm index 83420d130a747..f4806f7adb97c 100644 --- a/code/modules/tgs/v5/__interop_version.dm +++ b/code/modules/tgs/v5/__interop_version.dm @@ -1 +1 @@ -"5.7.0" +"5.9.0" diff --git a/code/modules/tgs/v5/_defines.dm b/code/modules/tgs/v5/_defines.dm index 48969c0c7d561..92c7a8388a711 100644 --- a/code/modules/tgs/v5/_defines.dm +++ b/code/modules/tgs/v5/_defines.dm @@ -8,16 +8,17 @@ #define DMAPI5_TOPIC_REQUEST_LIMIT 65528 #define DMAPI5_TOPIC_RESPONSE_LIMIT 65529 -#define DMAPI5_BRIDGE_COMMAND_PORT_UPDATE 0 #define DMAPI5_BRIDGE_COMMAND_STARTUP 1 #define DMAPI5_BRIDGE_COMMAND_PRIME 2 #define DMAPI5_BRIDGE_COMMAND_REBOOT 3 #define DMAPI5_BRIDGE_COMMAND_KILL 4 #define DMAPI5_BRIDGE_COMMAND_CHAT_SEND 5 #define DMAPI5_BRIDGE_COMMAND_CHUNK 6 +#define DMAPI5_BRIDGE_COMMAND_EVENT 7 #define DMAPI5_PARAMETER_ACCESS_IDENTIFIER "accessIdentifier" #define DMAPI5_PARAMETER_CUSTOM_COMMANDS "customCommands" +#define DMAPI5_PARAMETER_TOPIC_PORT "topicPort" #define DMAPI5_CHUNK "chunk" #define DMAPI5_CHUNK_PAYLOAD "payload" @@ -34,6 +35,7 @@ #define DMAPI5_BRIDGE_PARAMETER_VERSION "version" #define DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE "chatMessage" #define DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL "minimumSecurityLevel" +#define DMAPI5_BRIDGE_PARAMETER_EVENT_INVOCATION "eventInvocation" #define DMAPI5_BRIDGE_RESPONSE_NEW_PORT "newPort" #define DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION "runtimeInformation" @@ -81,6 +83,7 @@ #define DMAPI5_TOPIC_COMMAND_SEND_CHUNK 9 #define DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK 10 #define DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST 11 +#define DMAPI5_TOPIC_COMMAND_COMPLETE_EVENT 12 #define DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE "commandType" #define DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND "chatCommand" @@ -116,3 +119,9 @@ #define DMAPI5_CUSTOM_CHAT_COMMAND_NAME "name" #define DMAPI5_CUSTOM_CHAT_COMMAND_HELP_TEXT "helpText" #define DMAPI5_CUSTOM_CHAT_COMMAND_ADMIN_ONLY "adminOnly" + +#define DMAPI5_EVENT_ID "eventId" + +#define DMAPI5_EVENT_INVOCATION_NAME "eventName" +#define DMAPI5_EVENT_INVOCATION_PARAMETERS "parameters" +#define DMAPI5_EVENT_INVOCATION_NOTIFY_COMPLETION "notifyCompletion" diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm index 7226f29bba603..95b8edd3ee5c2 100644 --- a/code/modules/tgs/v5/api.dm +++ b/code/modules/tgs/v5/api.dm @@ -8,8 +8,12 @@ var/reboot_mode = TGS_REBOOT_MODE_NORMAL + /// List of chat messages list()s that attempted to be sent during a topic call. To be bundled in the result of the call var/list/intercepted_message_queue + /// List of chat messages list()s that attempted to be sent during a topic call. To be bundled in the result of the call + var/list/offline_message_queue + var/list/custom_commands var/list/test_merges @@ -17,15 +21,20 @@ var/list/chat_channels var/initialized = FALSE + var/initial_bridge_request_received = FALSE + var/datum/tgs_version/interop_version var/chunked_requests = 0 var/list/chunked_topics = list() + var/list/pending_events = list() + var/detached = FALSE /datum/tgs_api/v5/New() . = ..() - TGS_DEBUG_LOG("V5 API created") + interop_version = version + TGS_DEBUG_LOG("V5 API created: [json_encode(args)]") /datum/tgs_api/v5/ApiVersion() return new /datum/tgs_version( @@ -38,8 +47,12 @@ access_identifier = world.params[DMAPI5_PARAM_ACCESS_IDENTIFIER] var/datum/tgs_version/api_version = ApiVersion() - version = null - var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands())) + version = null // we want this to be the TGS version, not the interop version + + // sleep once to prevent an issue where world.Export on the first tick can hang indefinitely + sleep(world.tick_lag) + + var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands(), DMAPI5_PARAMETER_TOPIC_PORT = GetTopicPort())) if(!istype(bridge_response)) TGS_ERROR_LOG("Failed initial bridge request!") return FALSE @@ -53,7 +66,8 @@ TGS_INFO_LOG("DMAPI validation, exiting...") TerminateWorld() - version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION]) + initial_bridge_request_received = TRUE + version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION]) // reassigning this because it can change if TGS updates security_level = runtime_information[DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL] visibility = runtime_information[DMAPI5_RUNTIME_INFORMATION_VISIBILITY] instance_name = runtime_information[DMAPI5_RUNTIME_INFORMATION_INSTANCE_NAME] @@ -102,15 +116,22 @@ initialized = TRUE return TRUE +/datum/tgs_api/v5/proc/GetTopicPort() +#if defined(OPENDREAM) && defined(OPENDREAM_TOPIC_PORT_EXISTS) + return "[world.opendream_topic_port]" +#else + return null +#endif + /datum/tgs_api/v5/proc/RequireInitialBridgeResponse() TGS_DEBUG_LOG("RequireInitialBridgeResponse()") var/logged = FALSE - while(!version) + while(!initial_bridge_request_received) if(!logged) TGS_DEBUG_LOG("RequireInitialBridgeResponse: Starting sleep") logged = TRUE - sleep(1) + sleep(world.tick_lag) TGS_DEBUG_LOG("RequireInitialBridgeResponse: Passed") @@ -183,17 +204,7 @@ var/datum/tgs_chat_channel/channel = I ids += channel.id - message2 = UpgradeDeprecatedChatMessage(message2) - - if (!length(channels)) - return - - var/list/data = message2._interop_serialize() - data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = ids - if(intercepted_message_queue) - intercepted_message_queue += list(data) - else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) + SendChatMessageRaw(message2, ids) /datum/tgs_api/v5/ChatTargetedBroadcast(datum/tgs_message_content/message2, admin_only) var/list/channels = list() @@ -202,32 +213,82 @@ if (!channel.is_private_channel && ((channel.is_admin_channel && admin_only) || (!channel.is_admin_channel && !admin_only))) channels += channel.id + SendChatMessageRaw(message2, channels) + +/datum/tgs_api/v5/ChatPrivateMessage(datum/tgs_message_content/message2, datum/tgs_chat_user/user) + SendChatMessageRaw(message2, list(user.channel.id)) + +/datum/tgs_api/v5/proc/SendChatMessageRaw(datum/tgs_message_content/message2, list/channel_ids) message2 = UpgradeDeprecatedChatMessage(message2) - if (!length(channels)) + if (!length(channel_ids)) return var/list/data = message2._interop_serialize() - data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channels + data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channel_ids if(intercepted_message_queue) intercepted_message_queue += list(data) - else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) + return -/datum/tgs_api/v5/ChatPrivateMessage(datum/tgs_message_content/message2, datum/tgs_chat_user/user) - message2 = UpgradeDeprecatedChatMessage(message2) - var/list/data = message2._interop_serialize() - data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = list(user.channel.id) - if(intercepted_message_queue) - intercepted_message_queue += list(data) + if(offline_message_queue) + offline_message_queue += list(data) + return + + if(detached) + offline_message_queue = list(data) + + WaitForReattach(FALSE) + + data = offline_message_queue + offline_message_queue = null + + for(var/queued_message in data) + SendChatDataRaw(queued_message) else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) + SendChatDataRaw(data) + +/datum/tgs_api/v5/proc/SendChatDataRaw(list/data) + Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) /datum/tgs_api/v5/ChatChannelInfo() RequireInitialBridgeResponse() WaitForReattach(TRUE) return chat_channels.Copy() +/datum/tgs_api/v5/TriggerEvent(event_name, list/parameters, wait_for_completion) + RequireInitialBridgeResponse() + WaitForReattach(TRUE) + + if(interop_version.minor < 9) + TGS_WARNING_LOG("Interop version too low for custom events!") + return FALSE + + var/str_parameters = list() + for(var/i in parameters) + str_parameters += "[i]" + + var/list/response = Bridge(DMAPI5_BRIDGE_COMMAND_EVENT, list(DMAPI5_BRIDGE_PARAMETER_EVENT_INVOCATION = list(DMAPI5_EVENT_INVOCATION_NAME = event_name, DMAPI5_EVENT_INVOCATION_PARAMETERS = str_parameters, DMAPI5_EVENT_INVOCATION_NOTIFY_COMPLETION = wait_for_completion))) + if(!response) + return FALSE + + var/event_id = response[DMAPI5_EVENT_ID] + if(!event_id) + return FALSE + + TGS_DEBUG_LOG("Created event ID: [event_id]") + if(!wait_for_completion) + return TRUE + + TGS_DEBUG_LOG("Waiting for completion of event ID: [event_id]") + + while(!pending_events[event_id]) + sleep(world.tick_lag) + + TGS_DEBUG_LOG("Completed wait on event ID: [event_id]") + pending_events -= event_id + + return TRUE + /datum/tgs_api/v5/proc/DecodeChannels(chat_update_json) TGS_DEBUG_LOG("DecodeChannels()") var/list/chat_channels_json = chat_update_json[DMAPI5_CHAT_UPDATE_CHANNELS] diff --git a/code/modules/tgs/v5/bridge.dm b/code/modules/tgs/v5/bridge.dm index 37f58bcdf632e..0c5e701a32b60 100644 --- a/code/modules/tgs/v5/bridge.dm +++ b/code/modules/tgs/v5/bridge.dm @@ -48,7 +48,9 @@ var/json = CreateBridgeData(command, data, TRUE) var/encoded_json = url_encode(json) - var/url = "http://127.0.0.1:[server_port]/Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]" + var/api_prefix = interop_version.minor >= 8 ? "api/" : "" + + var/url = "http://127.0.0.1:[server_port]/[api_prefix]Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]" return url /datum/tgs_api/v5/proc/CreateBridgeData(command, list/data, needs_auth) @@ -63,7 +65,7 @@ if(detached) // Wait up to one minute for(var/i in 1 to 600) - sleep(1) + sleep(world.tick_lag) if(!detached && (!require_channels || length(chat_channels))) break @@ -75,17 +77,25 @@ /datum/tgs_api/v5/proc/PerformBridgeRequest(bridge_request) WaitForReattach(FALSE) + TGS_DEBUG_LOG("Bridge request start") // This is an infinite sleep until we get a response var/export_response = world.Export(bridge_request) + TGS_DEBUG_LOG("Bridge request complete") + if(!export_response) TGS_ERROR_LOG("Failed bridge request: [bridge_request]") return - var/response_json = file2text(export_response["CONTENT"]) - if(!response_json) + var/content = export_response["CONTENT"] + if(!content) TGS_ERROR_LOG("Failed bridge request, missing content!") return + var/response_json = TGS_FILE2TEXT_NATIVE(content) + if(!response_json) + TGS_ERROR_LOG("Failed bridge request, failed to load content!") + return + var/list/bridge_response = json_decode(response_json) if(!bridge_response) TGS_ERROR_LOG("Failed bridge request, bad json: [response_json]") diff --git a/code/modules/tgs/v5/topic.dm b/code/modules/tgs/v5/topic.dm index 2ef0c70a97fa0..e1f2cb6385789 100644 --- a/code/modules/tgs/v5/topic.dm +++ b/code/modules/tgs/v5/topic.dm @@ -175,6 +175,11 @@ var/list/reattach_response = TopicResponse(error_message) reattach_response[DMAPI5_PARAMETER_CUSTOM_COMMANDS] = ListCustomCommands() + reattach_response[DMAPI5_PARAMETER_TOPIC_PORT] = GetTopicPort() + + for(var/eventId in pending_events) + pending_events[eventId] = TRUE + return reattach_response if(DMAPI5_TOPIC_COMMAND_SEND_CHUNK) @@ -275,6 +280,15 @@ TGS_WORLD_ANNOUNCE(message) return TopicResponse() + if(DMAPI5_TOPIC_COMMAND_COMPLETE_EVENT) + var/event_id = topic_parameters[DMAPI5_EVENT_ID] + if (!istext(event_id)) + return TopicResponse("Invalid or missing [DMAPI5_EVENT_ID]") + + TGS_DEBUG_LOG("Completing event ID [event_id]...") + pending_events[event_id] = TRUE + return TopicResponse() + return TopicResponse("Unknown command: [command]") /datum/tgs_api/v5/proc/WorldBroadcast(message) diff --git a/code/modules/tgs/v5/undefs.dm b/code/modules/tgs/v5/undefs.dm index fd1ed7e4cf54f..237207fdfd056 100644 --- a/code/modules/tgs/v5/undefs.dm +++ b/code/modules/tgs/v5/undefs.dm @@ -8,16 +8,17 @@ #undef DMAPI5_TOPIC_REQUEST_LIMIT #undef DMAPI5_TOPIC_RESPONSE_LIMIT -#undef DMAPI5_BRIDGE_COMMAND_PORT_UPDATE #undef DMAPI5_BRIDGE_COMMAND_STARTUP #undef DMAPI5_BRIDGE_COMMAND_PRIME #undef DMAPI5_BRIDGE_COMMAND_REBOOT #undef DMAPI5_BRIDGE_COMMAND_KILL #undef DMAPI5_BRIDGE_COMMAND_CHAT_SEND #undef DMAPI5_BRIDGE_COMMAND_CHUNK +#undef DMAPI5_BRIDGE_COMMAND_EVENT #undef DMAPI5_PARAMETER_ACCESS_IDENTIFIER #undef DMAPI5_PARAMETER_CUSTOM_COMMANDS +#undef DMAPI5_PARAMETER_TOPIC_PORT #undef DMAPI5_CHUNK #undef DMAPI5_CHUNK_PAYLOAD @@ -34,6 +35,7 @@ #undef DMAPI5_BRIDGE_PARAMETER_VERSION #undef DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE #undef DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL +#undef DMAPI5_BRIDGE_PARAMETER_EVENT_INVOCATION #undef DMAPI5_BRIDGE_RESPONSE_NEW_PORT #undef DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION @@ -81,6 +83,7 @@ #undef DMAPI5_TOPIC_COMMAND_SEND_CHUNK #undef DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK #undef DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST +#undef DMAPI5_TOPIC_COMMAND_COMPLETE_EVENT #undef DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE #undef DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND @@ -116,3 +119,9 @@ #undef DMAPI5_CUSTOM_CHAT_COMMAND_NAME #undef DMAPI5_CUSTOM_CHAT_COMMAND_HELP_TEXT #undef DMAPI5_CUSTOM_CHAT_COMMAND_ADMIN_ONLY + +#undef DMAPI5_EVENT_ID + +#undef DMAPI5_EVENT_INVOCATION_NAME +#undef DMAPI5_EVENT_INVOCATION_PARAMETERS +#undef DMAPI5_EVENT_INVOCATION_NOTIFY_COMPLETION diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm index 1f80f5e869757..bcd97a9124516 100644 --- a/code/modules/tgui/external.dm +++ b/code/modules/tgui/external.dm @@ -70,7 +70,7 @@ * change static data. */ /datum/proc/update_static_data_for_all_viewers() - for (var/datum/tgui/window AS in SStgui.open_uis_by_src[REF(src)]) + for (var/datum/tgui/window as anything in open_uis) window.send_full_update() /** diff --git a/code/modules/tgui/states/alamo.dm b/code/modules/tgui/states/alamo.dm new file mode 100644 index 0000000000000..3e4dd98ad6b40 --- /dev/null +++ b/code/modules/tgui/states/alamo.dm @@ -0,0 +1,35 @@ +/** + * tgui state: access_state + * + * Humans need to have access and be adjacent to use it. + * Silicons and other lifeforms get their default ui_state pass. + * Xenomorphs need to be intelligent + */ + +GLOBAL_DATUM_INIT(alamo_state, /datum/ui_state/alamo_state, new) + +/datum/ui_state/alamo_state/can_use_topic(src_object, mob/user) + return user.alamo_can_use_topic(src_object) + +/mob/proc/alamo_can_use_topic(src_object) + return default_can_use_topic(src_object) + +/mob/living/alamo_can_use_topic(src_object) + . = human_adjacent_can_use_topic(src_object) + + var/obj/O = src_object + if(!O?.allowed(src)) //No access? No ui! + to_chat(src, span_warning("Access Denied!")) + return UI_CLOSE + . = min(., UI_INTERACTIVE) + +/mob/living/silicon/alamo_can_use_topic(src_object) + return default_can_use_topic(src_object) + +/mob/living/carbon/xenomorph/alamo_can_use_topic(src_object) + var/datum/game_mode/infestation/infestation_mode = SSticker.mode + if(infestation_mode.round_stage == INFESTATION_MARINE_CRASHING) //Minor QOL, any xeno can check the console after a leader hijacks + return GLOB.xeno_state.can_use_topic(src_object, src) + if(!(xeno_caste.caste_flags & CASTE_IS_INTELLIGENT)) + return default_can_use_topic(src_object) + return GLOB.xeno_state.can_use_topic(src_object, src) diff --git a/code/modules/tgui/tgui_window.dm b/code/modules/tgui/tgui_window.dm index 674016bcafac3..aec20f0f3a354 100644 --- a/code/modules/tgui/tgui_window.dm +++ b/code/modules/tgui/tgui_window.dm @@ -372,6 +372,8 @@ client << link(href_list["url"]) if("cacheReloaded") reinitialize() + if("chat/resend") + SSchat.handle_resend(client, payload) /datum/tgui_window/vv_edit_var(var_name, var_value) return var_name != NAMEOF(src, id) && ..() diff --git a/code/modules/tgui_input/say_modal/modal.dm b/code/modules/tgui_input/say_modal/modal.dm index 88814a434c2ac..239888d91c40f 100644 --- a/code/modules/tgui_input/say_modal/modal.dm +++ b/code/modules/tgui_input/say_modal/modal.dm @@ -36,6 +36,7 @@ /datum/tgui_say/New(client/client, id) src.client = client window = new(client, id) + winset(client, "tgui_say", "size=1,1;is-visible=0;") window.subscribe(src, PROC_REF(on_message)) window.is_browser = TRUE @@ -62,11 +63,14 @@ */ /datum/tgui_say/proc/load() window_open = FALSE - winshow(client, "tgui_say", FALSE) + + winset(client, "tgui_say", "pos=848,500;size=231,30;is-visible=0;") + window.send_message("props", list( lightMode = FALSE, //client.prefs?.read_preference(/datum/preference/toggle/tgui_say_light_mode), maxLength = max_length, )) + stop_thinking() return TRUE diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 73da6d9826422..29b0991748b84 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -68,6 +68,7 @@ #include "weed_spread.dm" #include "xeno_logical_scaling.dm" #include "item_variant_test.dm" +#include "xenoaccuracy.dm" #ifdef REFERENCE_TRACKING //Don't try and parse this file if ref tracking isn't turned on. IE: don't parse ref tracking please mr linter #include "find_reference_sanity.dm" diff --git a/code/modules/unit_tests/create_and_destroy.dm b/code/modules/unit_tests/create_and_destroy.dm index be40f64df1192..b8b9bc011f2ad 100644 --- a/code/modules/unit_tests/create_and_destroy.dm +++ b/code/modules/unit_tests/create_and_destroy.dm @@ -47,6 +47,8 @@ GLOBAL_VAR_INIT(running_create_and_destroy, FALSE) ignore += typesof(/obj/effect/temp_visual) ignore += typesof(/obj/effect/landmark) ignore += typesof(/obj/effect/baseturf_helper) + ///forcespawned abstract type for vehicles, will never spawn outside of it + ignore += typesof(/obj/hitbox) //Screen objects don't play nicely when spawned manually. ignore += typesof(/atom/movable/screen) diff --git a/code/modules/unit_tests/map_templates.dm b/code/modules/unit_tests/map_templates.dm index f79919bad70d9..907ef824dc00f 100644 --- a/code/modules/unit_tests/map_templates.dm +++ b/code/modules/unit_tests/map_templates.dm @@ -7,6 +7,7 @@ /datum/map_template/modular/prison, /datum/map_template/modular/bigred, /datum/map_template/modular/end_of_round, + /datum/map_template/interior, ) /datum/unit_test/map_templates/Run() diff --git a/code/modules/unit_tests/xenoaccuracy.dm b/code/modules/unit_tests/xenoaccuracy.dm new file mode 100644 index 0000000000000..033aa88b5a43c --- /dev/null +++ b/code/modules/unit_tests/xenoaccuracy.dm @@ -0,0 +1,6 @@ +/datum/unit_test/xenoaccuracy + +/datum/unit_test/xenoaccuracy/Run() + for(var/datum/xeno_caste/caste AS in subtypesof(/datum/xeno_caste)) + if(initial(caste.accuracy_malus) >= XENO_DEFAULT_ACCURACY) + Fail("A xeno accuracy malus of 70 or over was detected, negatives cannot be used in accuracy calculations.") diff --git a/code/modules/vehicles/_vehicle.dm b/code/modules/vehicles/__vehicle.dm similarity index 94% rename from code/modules/vehicles/_vehicle.dm rename to code/modules/vehicles/__vehicle.dm index 64236ebe0e9c4..58950fb0a47c4 100644 --- a/code/modules/vehicles/_vehicle.dm +++ b/code/modules/vehicles/__vehicle.dm @@ -20,6 +20,8 @@ var/max_drivers = 1 var/move_delay = 2 var/lastmove = 0 + ///multitile hitbox, set to a hitbox type to make this vehicle multitile. + var/obj/hitbox/hitbox /** * If the driver needs a certain item in hand (or inserted, for vehicles) to drive this. For vehicles, this must be duplicated on their riding component subtype * [/datum/component/riding/var/keytype] variable because only a few specific checks are handled here with this var, and the majority of it is on the riding component @@ -42,6 +44,8 @@ /obj/vehicle/Initialize(mapload) . = ..() + if(hitbox) + hitbox = new hitbox(loc, src) occupants = list() autogrant_actions_passenger = list() autogrant_actions_controller = list() @@ -92,6 +96,10 @@ /obj/vehicle/proc/is_driver(mob/M) return is_occupant(M) && occupants[M] & VEHICLE_CONTROL_DRIVE +///Is the passed mob an equipment controller? +/obj/vehicle/proc/is_equipment_controller(mob/M) + return is_occupant(M) && occupants[M] & VEHICLE_CONTROL_EQUIPMENT + /obj/vehicle/proc/is_occupant(mob/M) return !isnull(LAZYACCESS(occupants, M)) diff --git a/code/modules/vehicles/_hitbox.dm b/code/modules/vehicles/_hitbox.dm new file mode 100644 index 0000000000000..7f0362d68c10e --- /dev/null +++ b/code/modules/vehicles/_hitbox.dm @@ -0,0 +1,223 @@ +/** + * HITBOX + * The core of multitile. Acts as a relay for damage and stops people from walking onto the multitle sprite + * has changed bounds and as thus must always be forcemoved so it doesnt break everything + * I would use pixel movement but the maptick caused by it is way too high and a fake tile based movement might work? but I want this to at least pretend to be generic + * Thus we just use this relay. it's an obj so we can make sure all the damage procs that work on root also work on the hitbox + */ +/obj/hitbox + density = TRUE + anchored = TRUE + invisibility = INVISIBILITY_MAXIMUM + bound_width = 96 + bound_height = 96 + bound_x = -32 + bound_y = -32 + max_integrity = INFINITY + move_resist = INFINITY // non forcemoving this could break gliding so lets just say no + ///people riding on this hitbox that we want to move with us + var/list/atom/movable/tank_desants + ///The "parent" that this hitbox is attached to and to whom it will relay damage + var/obj/vehicle/root = null + +/obj/hitbox/Initialize(mapload, obj/vehicle/new_root) + . = ..() + root = new_root + allow_pass_flags = root.allow_pass_flags + atom_flags = root.atom_flags + resistance_flags = root.resistance_flags + RegisterSignal(new_root, COMSIG_MOVABLE_MOVED, PROC_REF(root_move)) + RegisterSignal(new_root, COMSIG_QDELETING, PROC_REF(root_delete)) + RegisterSignals(new_root, list(COMSIG_RIDDEN_DRIVER_MOVE, COMSIG_VEHICLE_MOVE), PROC_REF(on_attempt_drive)) + RegisterSignal(new_root, COMSIG_ATOM_DIR_CHANGE, PROC_REF(owner_turned)) + + var/static/list/connections = list( + COMSIG_OBJ_TRY_ALLOW_THROUGH = PROC_REF(can_cross_hitbox), + COMSIG_TURF_JUMP_ENDED_HERE = PROC_REF(on_jump_landed), + COMSIG_ATOM_EXITED = PROC_REF(on_exited), + ) + AddElement(/datum/element/connect_loc, connections) + +/obj/hitbox/Destroy(force) + if(!force) // only when the parent is deleted + return QDEL_HINT_LETMELIVE + root?.hitbox = null + root = null + return ..() + +///signal handler for handling PASS_WALKOVER +/obj/hitbox/proc/can_cross_hitbox(datum/source, atom/mover) + SIGNAL_HANDLER + if(locate(src) in mover.loc) + return TRUE + +///Signal handler to spin the desants as well when the tank turns +/obj/hitbox/proc/owner_turned(datum/source, old_dir, new_dir) + SIGNAL_HANDLER + if(!new_dir || new_dir == old_dir) + return + for(var/mob/living/desant AS in tank_desants) + if(desant.loc == root.loc) + continue + var/turf/new_pos + //doesnt work with diags, but that shouldnt happen, right? + if(REVERSE_DIR(old_dir) == new_dir) + new_pos = get_step(root, REVERSE_DIR(get_dir(desant, root))) + else if(turn(old_dir, 90) == new_dir) + new_pos = get_step(root, turn(get_dir(desant, root), -90)) + else + new_pos = get_step(root, turn(get_dir(desant, root), 90)) + desant.forceMove(new_pos) + +///signal handler when someone jumping lands on us +/obj/hitbox/proc/on_jump_landed(datum/source, atom/lander) + SIGNAL_HANDLER + if(HAS_TRAIT(lander, TRAIT_TANK_DESANT)) + return + ADD_TRAIT(lander, TRAIT_TANK_DESANT, VEHICLE_TRAIT) + LAZYSET(tank_desants, lander, lander.layer) + RegisterSignal(lander, COMSIG_QDELETING, PROC_REF(on_desant_del)) + lander.layer = ABOVE_MOB_PLATFORM_LAYER + +///signal handler when we leave a turf under the hitbox +/obj/hitbox/proc/on_exited(atom/source, atom/movable/AM, direction) + SIGNAL_HANDLER + if(!HAS_TRAIT(AM, TRAIT_TANK_DESANT)) + return + if(locate(src) in AM.loc) //Î'd cut the locate but for some reason it wdoesnt work lol + return + REMOVE_TRAIT(AM, TRAIT_TANK_DESANT, VEHICLE_TRAIT) + AM.layer = LAZYACCESS(tank_desants, AM) + LAZYREMOVE(tank_desants, AM) + UnregisterSignal(AM, COMSIG_QDELETING) + +///cleanup riders on deletion +/obj/hitbox/proc/on_desant_del(datum/source) + SIGNAL_HANDLER + LAZYREMOVE(tank_desants, source) + +///when root deletes is the only time we want to be deleting +/obj/hitbox/proc/root_delete() + SIGNAL_HANDLER + qdel(src, TRUE) + +///when the owner moves, let's move with them! +/obj/hitbox/proc/root_move(atom/movable/mover, atom/oldloc, direction) + SIGNAL_HANDLER + //direction is null here, so we improvise + direction = get_dir(oldloc, mover) + var/move_dist = get_dist(oldloc, mover) + forceMove(mover.loc) + for(var/mob/living/tank_desant AS in tank_desants) + step(tank_desant, direction, root.step_size) + if(isxeno(tank_desant) || move_dist > 1) //skips xenos, and + return + var/away_dir = get_dir(tank_desant, root) + if(!away_dir) + away_dir = pick(GLOB.alldirs) + away_dir = REVERSE_DIR(away_dir) + var/turf/target = get_step(get_step(root, away_dir), away_dir) + tank_desant.throw_at(target, 3, 3, root) + +///called when the tank is off movement cooldown and someone tries to move it +/obj/hitbox/proc/on_attempt_drive(atom/movable/movable_parent, mob/living/user, direction) + SIGNAL_HANDLER + if(ISDIAGONALDIR(direction)) + return COMPONENT_DRIVER_BLOCK_MOVE + if((root.dir != direction) && (root.dir != REVERSE_DIR(direction))) + root.setDir(direction) + if(isarmoredvehicle(root)) + var/obj/vehicle/sealed/armored/armor = root + playsound(armor, armor.engine_sound, 100, TRUE, 20) + return COMPONENT_DRIVER_BLOCK_MOVE + //Due to this being a hot proc this part here is inlined and set on a by-hitbox-size basis + ///////////////////////////// + var/turf/centerturf = get_step(get_step(root, direction), direction) + var/list/enteringturfs = list(centerturf) + enteringturfs += get_step(centerturf, turn(direction, 90)) + enteringturfs += get_step(centerturf, turn(direction, -90)) + ///////////////////////////// + var/canstep = TRUE + for(var/turf/T AS in enteringturfs) //No break because we want to crush all the turfs before we start trying to move + if(!T.Enter(root, direction)) //Check if we can cross the turf first/bump the turf + canstep = FALSE + + for(var/atom/movable/O AS in T.contents) // this is checked in turf/enter but it doesnt return false so lmao + if(O.CanPass(root)) // Then check for obstacles to crush + continue + root.Bump(O) //manually call bump on everything + canstep = FALSE + + if(canstep) + return NONE + return COMPONENT_DRIVER_BLOCK_MOVE + +/obj/hitbox/CanAllowThrough(atom/movable/mover, turf/target) + . = ..() + if(.) + return + if((allow_pass_flags & PASS_TANK) && (mover.pass_flags & PASS_TANK)) + return TRUE + +/obj/hitbox/projectile_hit(obj/projectile/proj) + if(proj.shot_from == root) + return FALSE + return root.projectile_hit(arglist(args)) + +/obj/hitbox/bullet_act(obj/projectile/proj) + SHOULD_CALL_PARENT(FALSE) // this is an abstract object: we have to avoid everything on parent + SEND_SIGNAL(src, COMSIG_ATOM_BULLET_ACT, proj) + return root.bullet_act(proj) + +/obj/hitbox/take_damage(damage_amount, damage_type = BRUTE, armor_type = null, effects = TRUE, attack_dir, armour_penetration = 0, mob/living/blame_mob) + return root.take_damage(arglist(args)) + +/obj/hitbox/ex_act(severity) + return + +///2x2 hitbox version +/obj/hitbox/medium + bound_width = 64 + bound_height = 64 + bound_x = 0 + bound_y = -32 + +/obj/hitbox/medium/on_attempt_drive(atom/movable/movable_parent, mob/living/user, direction) + if(ISDIAGONALDIR(direction)) + return COMPONENT_DRIVER_BLOCK_MOVE + if((root.dir != direction) && (root.dir != REVERSE_DIR(direction))) + root.setDir(direction) + if(isarmoredvehicle(root)) + var/obj/vehicle/sealed/armored/armor = root + playsound(armor, armor.engine_sound, 100, TRUE, 20) + return COMPONENT_DRIVER_BLOCK_MOVE + /////////////////////////// + var/turf/centerturf = get_step(root, direction) + var/list/enteringturfs = list() + switch(direction) + if(NORTH) + enteringturfs += get_step(centerturf, turn(direction, -90)) + if(SOUTH) + centerturf = get_step(centerturf, direction) + enteringturfs += get_step(centerturf, turn(direction, 90)) + if(EAST) + centerturf = get_step(centerturf, direction) + enteringturfs += get_step(centerturf, turn(direction, -90)) + if(WEST) + enteringturfs += get_step(centerturf, turn(direction, 90)) + enteringturfs += centerturf + //////////////////////////////////// + var/canstep = TRUE + for(var/turf/T AS in enteringturfs) //No break because we want to crush all the turfs before we start trying to move + if(!T.Enter(root, direction)) //Check if we can cross the turf first/bump the turf + canstep = FALSE + + for(var/atom/movable/O AS in T.contents) // this is checked in turf/enter but it doesnt return false so lmao + if(O.CanPass(root)) // Then check for obstacles to crush + continue + root.Bump(O) //manually call bump on everything + canstep = FALSE + + if(canstep) + return NONE + return COMPONENT_DRIVER_BLOCK_MOVE diff --git a/code/modules/vehicles/armored/__armored.dm b/code/modules/vehicles/armored/__armored.dm new file mode 100644 index 0000000000000..37dd51543c87f --- /dev/null +++ b/code/modules/vehicles/armored/__armored.dm @@ -0,0 +1,619 @@ + +/obj/vehicle/sealed/armored + name = "\improper MT - Shortstreet MK4" + desc = "An adorable chunk of metal with an alarming amount of firepower designed to crush, immolate, destroy and maim anything that Nanotrasen wants it to. This model contains advanced Bluespace technology which allows a TARDIS-like amount of room on the inside." + icon = 'icons/obj/armored/1x1/tinytank.dmi' + icon_state = "tank" + pixel_x = -16 + pixel_y = -8 + layer = ABOVE_MOB_LAYER + max_drivers = 1 + move_resist = INFINITY + atom_flags = BUMP_ATTACKABLE|PREVENT_CONTENTS_EXPLOSION + allow_pass_flags = PASS_TANK|PASS_AIR|PASS_WALKOVER + resistance_flags = XENO_DAMAGEABLE|UNACIDABLE|PLASMACUTTER_IMMUNE|PORTAL_IMMUNE + + // placeholder, make skill check or similar later + req_access = list(ACCESS_MARINE_MECH) + move_delay = 0.7 SECONDS + max_integrity = 600 + light_range = 10 + ///Tank bitflags + var/armored_flags = ARMORED_HAS_PRIMARY_WEAPON|ARMORED_HAS_HEADLIGHTS + ///Sound file(s) to play when we drive around + var/engine_sound = 'sound/ambience/tank_driving.ogg' + ///frequency to play the sound with + var/engine_sound_length = 2 SECONDS + /// How long it takes to rev (vrrm vrrm!) TODO: merge this up to /vehicle here and on tg because of cars + COOLDOWN_DECLARE(enginesound_cooldown) + + ///Cool and good turret overlay that allows independently swiveling guns + var/atom/movable/vis_obj/turret_overlay/turret_overlay + ///Icon for the rotating turret icon. also should hold the icons for the weapon icons + var/turret_icon = 'icons/obj/armored/1x1/tinytank_gun.dmi' + ///Iconstate for the rotating main turret + var/turret_icon_state = "turret" + ///secondary independently rotating overlay, if we only have a secondary weapon + var/image/secondary_weapon_overlay + ///Icon for the secondary rotating turret, should contain all possible icons. iconstate is fetched from the attached weapon + var/secondary_turret_icon + ///Damage overlay for when the vehicle gets damaged + var/atom/movable/vis_obj/tank_damage/damage_overlay + ///Icon file path for the damage overlay + var/damage_icon_path + ///Overlay for larger vehicles that need under parts + var/image/underlay + + ///reference to our interior datum if set, uses the typepath its set to + var/datum/interior/armored/interior + ///Skill required to enter this vehicle + var/required_entry_skill = SKILL_LARGE_VEHICLE_DEFAULT + ///What weapon we have in our primary slot + var/obj/item/armored_weapon/primary_weapon + ///What weapon we have in our secondary slot + var/obj/item/armored_weapon/secondary_weapon + ///Our driver utility module + var/obj/item/tank_module/driver_utility_module + ///Our driver utility module + var/obj/item/tank_module/gunner_utility_module + //What kind of primary tank weaponry we start with. Defaults to a tank gun. + var/primary_weapon_type = /obj/item/armored_weapon + //What kind of secondary tank weaponry we start with. Default minigun as standard. + var/secondary_weapon_type = /obj/item/armored_weapon/secondary_weapon + ///Minimap flags to use for this vehcile + var/minimap_flags = MINIMAP_FLAG_MARINE + ///minimap iconstate to use for this vehicle + var/minimap_icon_state + ///if true disables stops users from being able to shoot weapons + var/weapons_safety = FALSE + //Bool for zoom on/off + var/zoom_mode = FALSE + /// damage done by rams + var/ram_damage = 20 + +/obj/vehicle/sealed/armored/Initialize(mapload) + if(interior) + interior = new interior(src, CALLBACK(src, PROC_REF(interior_exit))) + . = ..() + if(armored_flags & ARMORED_HAS_UNDERLAY) + underlay = new(icon, icon_state + "_underlay", layer = layer-0.1) + add_overlay(underlay) + if(damage_icon_path) + damage_overlay = new() + damage_overlay.icon = damage_icon_path + damage_overlay.layer = layer+0.001 + vis_contents += damage_overlay + if(armored_flags & ARMORED_HAS_PRIMARY_WEAPON) + turret_overlay = new() + turret_overlay.icon = turret_icon + turret_overlay.icon_state = turret_icon_state + turret_overlay.setDir(dir) + turret_overlay.layer = layer+0.002 + if(armored_flags & ARMORED_HAS_MAP_VARIANTS) + switch(SSmapping.configs[GROUND_MAP].armor_style) + if(MAP_ARMOR_STYLE_JUNGLE) + turret_overlay.icon_state += "_jungle" + if(MAP_ARMOR_STYLE_ICE) + turret_overlay.icon_state += "_snow" + if(MAP_ARMOR_STYLE_PRISON) + turret_overlay.icon_state += "_urban" + if(MAP_ARMOR_STYLE_DESERT) + turret_overlay.icon_state += "_desert" + vis_contents += turret_overlay + if(primary_weapon_type) + var/obj/item/armored_weapon/primary = new primary_weapon_type(src) + primary.attach(src, TRUE) + if(armored_flags & ARMORED_HAS_SECONDARY_WEAPON) + if(secondary_weapon_type) + var/obj/item/armored_weapon/secondary = new secondary_weapon_type(src) + secondary.attach(src, FALSE) + if(armored_flags & ARMORED_HAS_MAP_VARIANTS) + switch(SSmapping.configs[GROUND_MAP].armor_style) + if(MAP_ARMOR_STYLE_JUNGLE) + icon_state += "_jungle" + if(MAP_ARMOR_STYLE_ICE) + icon_state += "_snow" + if(MAP_ARMOR_STYLE_PRISON) + icon_state += "_urban" + if(MAP_ARMOR_STYLE_DESERT) + icon_state += "_desert" + if(minimap_icon_state) + SSminimaps.add_marker(src, minimap_flags, image('icons/UI_icons/map_blips_large.dmi', null, minimap_icon_state, HIGH_FLOAT_LAYER)) + GLOB.tank_list += src + +/obj/vehicle/sealed/armored/Destroy() + QDEL_NULL(primary_weapon) + QDEL_NULL(secondary_weapon) + QDEL_NULL(driver_utility_module) + QDEL_NULL(gunner_utility_module) + QDEL_NULL(damage_overlay) + QDEL_NULL(turret_overlay) + QDEL_NULL(interior) + underlay = null + GLOB.tank_list -= src + return ..() + +/obj/vehicle/sealed/armored/generate_actions() + if(armored_flags & ARMORED_HAS_HEADLIGHTS) + initialize_controller_action_type(/datum/action/vehicle/sealed/armored/toggle_lights, VEHICLE_CONTROL_SETTINGS) + if(interior) + return + initialize_passenger_action_type(/datum/action/vehicle/sealed/armored/eject) + if(max_occupants > 1) + initialize_passenger_action_type(/datum/action/vehicle/sealed/armored/swap_seat) + +/obj/vehicle/sealed/armored/obj_destruction(damage_amount, damage_type, damage_flag) + . = ..() + playsound(get_turf(src), 'sound/weapons/guns/fire/tank_cannon1.ogg', 100, TRUE) + +/obj/vehicle/sealed/armored/update_icon() + . = ..() + if(!damage_overlay) + return + switch(PERCENT(obj_integrity / max_integrity)) + if(0 to 29) + damage_overlay.icon_state = "damage_veryhigh" + if(29 to 59) + damage_overlay.icon_state = "damage_high" + if(59 to 70) + damage_overlay.icon_state = "damage_medium" + if(70 to 90) + damage_overlay.icon_state = "damage_small" + else + damage_overlay.icon_state = "null" + +/obj/vehicle/sealed/armored/update_overlays() + . = ..() + if(secondary_weapon_overlay) + . += secondary_weapon_overlay + +/obj/vehicle/sealed/armored/setDir(newdir) + . = ..() + if(secondary_weapon_overlay) + cut_overlay(secondary_weapon_overlay) + secondary_weapon_overlay.icon_state = secondary_weapon.icon_state + "_" + "[newdir]" + add_overlay(secondary_weapon_overlay) + +/obj/vehicle/sealed/armored/examine(mob/user) + . = ..() + if(!isxeno(user)) + . += "To fire its main cannon, left click a tile." + . += "To fire its secondary weapon, right click a tile." + . += "Middle click to toggle weapon safety." + . += "It's currently holding [LAZYLEN(occupants)]/[max_occupants] crew." + . += span_notice("There is [isnull(primary_weapon) ? "nothing" : "[primary_weapon]"] in the primary attachment point, [isnull(secondary_weapon) ? "nothing" : "[secondary_weapon]"] installed in the secondary slot, [isnull(driver_utility_module) ? "nothing" : "[driver_utility_module]"] in the driver utility slot and [isnull(gunner_utility_module) ? "nothing" : "[gunner_utility_module]"] in the gunner utility slot.") + if(!isxeno(user)) + . += "It is currently at [PERCENT(obj_integrity / max_integrity)]% integrity." + +/obj/vehicle/sealed/armored/vehicle_move(mob/living/user, direction) + . = ..() + if(!.) + return + if(COOLDOWN_CHECK(src, enginesound_cooldown)) + COOLDOWN_START(src, enginesound_cooldown, engine_sound_length) + playsound(get_turf(src), engine_sound, 100, TRUE, 20) + after_move(direction) + forceMove(get_step(src, direction)) // still animates and calls moved() and all that stuff BUT we skip checks + +/obj/vehicle/sealed/armored/resisted_against(mob/living/user) + balloon_alert(user, "exiting...") + if(do_after(user, enter_delay, NONE, src)) + balloon_alert(user, "exited") + mob_exit(user, TRUE) + +/obj/vehicle/sealed/armored/CanAllowThrough(atom/movable/mover, turf/target) + . = ..() + if(.) + return + if((allow_pass_flags & PASS_TANK) && (mover.pass_flags & PASS_TANK)) + return TRUE + +/obj/vehicle/sealed/armored/Bump(atom/A) + . = ..() + if(HAS_TRAIT(A, TRAIT_STOPS_TANK_COLLISION)) + if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_VEHICLE_CRUSHSOUND)) + visible_message(span_danger("[src] is stopped by [A]!")) + playsound(src, 'sound/effects/metal_crash.ogg', 45) + TIMER_COOLDOWN_START(src, COOLDOWN_VEHICLE_CRUSHSOUND, 1 SECONDS) + return + var/pilot + var/list/drivers = return_drivers() + if(length(drivers)) + pilot = drivers[1] + A.vehicle_collision(src, get_dir(src, A), get_turf(loc), get_turf(loc), pilot) + +/obj/vehicle/sealed/armored/auto_assign_occupant_flags(mob/new_occupant) + if(interior) //handled by interior seats + return + if(max_occupants == 1) + add_control_flags(new_occupant, VEHICLE_CONTROL_DRIVE|VEHICLE_CONTROL_SETTINGS|VEHICLE_CONTROL_MELEE|VEHICLE_CONTROL_EQUIPMENT) + return + + if(driver_amount() < max_drivers) //movement controllers + add_control_flags(new_occupant, VEHICLE_CONTROL_DRIVE|VEHICLE_CONTROL_SETTINGS) + else if(length(return_controllers_with_flag(VEHICLE_CONTROL_EQUIPMENT)) < 1) + add_control_flags(new_occupant, VEHICLE_CONTROL_MELEE|VEHICLE_CONTROL_EQUIPMENT) + +/obj/vehicle/sealed/armored/exit_location(mob/M) + return get_step(src, REVERSE_DIR(dir)) + +///called when a mob tried to leave our interior +/obj/vehicle/sealed/armored/proc/interior_exit(mob/leaver, datum/interior/inside, teleport) + if(!teleport) + remove_occupant(leaver) + return + mob_exit(leaver, TRUE) + +/obj/vehicle/sealed/armored/mob_try_enter(mob/M) + if(isobserver(M)) + interior?.mob_enter(M) + return FALSE + if(!ishuman(M)) + return FALSE + if(M.skills.getRating(SKILL_LARGE_VEHICLE) < required_entry_skill) + return FALSE + return ..() + +/obj/vehicle/sealed/armored/enter_checks(mob/M) + . = ..() + if(!.) + return + if(LAZYLEN(M.buckled_mobs)) + balloon_alert(M, "remove riders first") + return FALSE + +/obj/vehicle/sealed/armored/add_occupant(mob/M, control_flags) + if(!interior) + RegisterSignal(M, COMSIG_MOB_DEATH, PROC_REF(mob_exit), TRUE) + RegisterSignal(M, COMSIG_LIVING_DO_RESIST, TYPE_PROC_REF(/atom/movable, resisted_against), TRUE) + . = ..() + if(primary_weapon) + var/list/primary_icons + if(primary_weapon.ammo) + primary_icons = list(primary_weapon.ammo.default_ammo.hud_state, primary_weapon.ammo.default_ammo.hud_state_empty) + else + primary_icons = list(primary_weapon.hud_state_empty, primary_weapon.hud_state_empty) + M.hud_used.add_ammo_hud(primary_weapon, primary_icons, primary_weapon.ammo.current_rounds) + if(secondary_weapon) + var/list/secondary_icons + if(secondary_weapon.ammo) + secondary_icons = list(secondary_weapon.ammo.default_ammo.hud_state, secondary_weapon.ammo.default_ammo.hud_state_empty) + else + secondary_icons = list(secondary_weapon.hud_state_empty, secondary_weapon.hud_state_empty) + M.hud_used.add_ammo_hud(secondary_weapon, secondary_icons, secondary_weapon.ammo.current_rounds) + +/obj/vehicle/sealed/armored/after_add_occupant(mob/M) + . = ..() + if(interior) + REMOVE_TRAIT(M, TRAIT_HANDS_BLOCKED, VEHICLE_TRAIT) + +/obj/vehicle/sealed/armored/grant_controller_actions_by_flag(mob/M, flag) + . = ..() + if(. && (flag & VEHICLE_CONTROL_EQUIPMENT)) + RegisterSignal(M, COMSIG_MOB_MOUSEDOWN, PROC_REF(on_mouseclick), TRUE) + +/obj/vehicle/sealed/armored/remove_controller_actions_by_flag(mob/M, flag) + . = ..() + if(. && (flag & VEHICLE_CONTROL_EQUIPMENT)) + UnregisterSignal(M, COMSIG_MOB_MOUSEDOWN) + +/obj/vehicle/sealed/armored/remove_occupant(mob/M) + M.hud_used.remove_ammo_hud(primary_weapon) + M.hud_used.remove_ammo_hud(secondary_weapon) + UnregisterSignal(M, COMSIG_MOB_DEATH) + UnregisterSignal(M, COMSIG_LIVING_DO_RESIST) + return ..() + +/obj/vehicle/sealed/armored/relaymove(mob/living/user, direction) + . = ..() + if(!is_driver(user) && is_equipment_controller(user)) + swivel_turret(null, direction) + +/obj/vehicle/sealed/armored/projectile_hit(obj/projectile/proj, cardinal_move, uncrossing) + for(var/mob/living/carbon/human/crew AS in occupants) + if(crew.wear_id?.iff_signal & proj.iff_signal) + return FALSE + return ..() + +/obj/vehicle/sealed/armored/attack_hand(mob/living/user) + . = ..() + if(interior) // handled by gun breech + return + if(user.skills.getRating(SKILL_LARGE_VEHICLE) < required_entry_skill) + balloon_alert(user, "not enough skill") + return + if(!primary_weapon) + balloon_alert(user, "no primary") + return + if(!length(primary_weapon.ammo_magazine)) + balloon_alert(user, "magazine empty") + return + var/choice + if(length(primary_weapon.ammo_magazine) == 1) + choice = primary_weapon.ammo_magazine[1] + else + choice = tgui_input_list(user, "Select a magazine to take out", primary_weapon.name, primary_weapon.ammo_magazine) + if(!choice) + return + if(!do_after(user, 1 SECONDS, NONE, src)) + return + balloon_alert(user, "magazine removed") + primary_weapon.ammo_magazine -= choice + user.put_in_hands(choice) + +/obj/vehicle/sealed/armored/attack_hand_alternate(mob/living/user) + . = ..() + if(interior) // handled by gun breech + return + if(user.skills.getRating(SKILL_LARGE_VEHICLE) < required_entry_skill) + balloon_alert(user, "not enough skill") + return + if(!secondary_weapon) + balloon_alert(user, "no secondary") + return + if(!length(secondary_weapon.ammo_magazine)) + balloon_alert(user, "magazine empty") + return + var/choice + if(length(secondary_weapon.ammo_magazine) == 1) + choice = secondary_weapon.ammo_magazine[1] + else + choice = tgui_input_list(user, "Select a magazine to take out", secondary_weapon.name, secondary_weapon.ammo_magazine) + if(!choice) + return + if(!do_after(user, 1 SECONDS, NONE, src)) + return + balloon_alert(user, "magazine removed") + secondary_weapon.ammo_magazine -= choice + user.put_in_hands(choice) + +/obj/vehicle/sealed/armored/attackby(obj/item/I, mob/user, params) + . = ..() + if(istype(I, /obj/item/armored_weapon)) + var/obj/item/armored_weapon/gun = I + if(!(gun.weapon_slot & MODULE_PRIMARY)) + balloon_alert(user, "not a primary weapon") + return + if(!do_after(user, 2 SECONDS, NONE, src)) + return + user.temporarilyRemoveItemFromInventory(I) + gun.attach(src, TRUE) + return + if(istype(I, /obj/item/tank_module)) + var/obj/item/tank_module/mod = I + mod.on_equip(src, user) + return + if(interior) // if interior handle by gun breech + return + if(istype(I, /obj/item/ammo_magazine)) + if(!primary_weapon) + balloon_alert(user, "no primary weapon") + return + if(!(I.type in primary_weapon.accepted_ammo)) + balloon_alert(user, "not accepted ammo") + return + if(length(primary_weapon.ammo_magazine) >= primary_weapon.maximum_magazines) + balloon_alert(user, "magazine already full") + return + user.temporarilyRemoveItemFromInventory(I) + I.forceMove(primary_weapon) + if(!primary_weapon.ammo) + primary_weapon.ammo = I + balloon_alert(user, "primary gun loaded") + for(var/mob/occupant AS in occupants) + occupant.hud_used.update_ammo_hud(primary_weapon, list(primary_weapon.ammo.default_ammo.hud_state, primary_weapon.ammo.default_ammo.hud_state_empty), primary_weapon.ammo.current_rounds) + else + primary_weapon.ammo_magazine += I + balloon_alert(user, "magazines [length(primary_weapon.ammo_magazine)]/[primary_weapon.maximum_magazines]") + +/obj/vehicle/sealed/armored/attackby_alternate(obj/item/I, mob/user, params) + . = ..() + if(user.skills.getRating(SKILL_LARGE_VEHICLE) < required_entry_skill) + balloon_alert(user, "not enough skill") + return + if(istype(I, /obj/item/armored_weapon)) + var/obj/item/armored_weapon/gun = I + if(!(gun.weapon_slot & MODULE_SECONDARY)) + balloon_alert(user, "not a secondary weapon") + return + if(!do_after(user, 2 SECONDS, NONE, src)) + return + user.temporarilyRemoveItemFromInventory(I) + gun.attach(src, FALSE) + return + if(isscrewdriver(I)) + if(!gunner_utility_module) + balloon_alert(user, "no gunner utility module") + return + balloon_alert(user, "detaching gunner utility") + if(!do_after(user, 2 SECONDS, NONE, src)) + return + gunner_utility_module.on_unequip(user) + balloon_alert(user, "detached") + return + if(interior) // if interior handle by gun breech + return + if(istype(I, /obj/item/ammo_magazine)) + if(!secondary_weapon) + balloon_alert(user, "no primary weapon") + return + if(!(I.type in secondary_weapon.accepted_ammo)) + balloon_alert(user, "not accepted ammo") + return + if(length(secondary_weapon.ammo_magazine) >= secondary_weapon.maximum_magazines) + balloon_alert(user, "magazine already full") + return + user.temporarilyRemoveItemFromInventory(I) + I.forceMove(secondary_weapon) + if(!secondary_weapon.ammo) + secondary_weapon.ammo = I + balloon_alert(user, "secondary gun loaded") + for(var/mob/occupant AS in occupants) + occupant.hud_used.update_ammo_hud(secondary_weapon, list(secondary_weapon.ammo.default_ammo.hud_state, secondary_weapon.ammo.default_ammo.hud_state_empty), secondary_weapon.ammo.current_rounds) + else + secondary_weapon.ammo_magazine += I + balloon_alert(user, "magazines [length(secondary_weapon.ammo_magazine)]/[secondary_weapon.maximum_magazines]") + + +/obj/vehicle/sealed/armored/welder_act(mob/living/user, obj/item/I) + return welder_repair_act(user, I, 50, 5 SECONDS, 0, SKILL_ENGINEER_METAL, 5, 2 SECONDS) + +/obj/vehicle/sealed/armored/crowbar_act(mob/living/user, obj/item/I) + . = ..() + if(user.skills.getRating(SKILL_LARGE_VEHICLE) < required_entry_skill) + balloon_alert(user, "not enough skill") + return + if(!primary_weapon) + balloon_alert(user, "no primary weapon") + return + balloon_alert(user, "detaching primary") + if(!do_after(user, 2 SECONDS, NONE, src)) + return + var/obj/item/armored_weapon/gun = primary_weapon + primary_weapon.detach(loc) + user.put_in_hands(gun) + balloon_alert(user, "detached") + +/obj/vehicle/sealed/armored/wrench_act(mob/living/user, obj/item/I) + . = ..() + if(user.skills.getRating(SKILL_LARGE_VEHICLE) < required_entry_skill) + balloon_alert(user, "not enough skill") + return + if(!secondary_weapon) + balloon_alert(user, "no secondary weapon") + return + balloon_alert(user, "detaching secondary") + if(!do_after(user, 2 SECONDS, NONE, src)) + return + var/obj/item/armored_weapon/gun = secondary_weapon + secondary_weapon.detach(loc) + user.put_in_hands(gun) + balloon_alert(user, "detached") + +/obj/vehicle/sealed/armored/screwdriver_act(mob/living/user, obj/item/I) + . = ..() + if(user.skills.getRating(SKILL_LARGE_VEHICLE) < required_entry_skill) + balloon_alert(user, "not enough skill") + return + if(!driver_utility_module) + balloon_alert(user, "no driver utility module") + return + balloon_alert(user, "detaching driver utility") + if(!do_after(user, 2 SECONDS, NONE, src)) + return + driver_utility_module.on_unequip(user) + balloon_alert(user, "detached") + +/obj/vehicle/sealed/armored/plastique_act(mob/living/plastique_user) + ex_act(EXPLODE_LIGHT) + +/** + * Toggles Weapons Safety + * + * Handles enabling or disabling the safety function. + */ +/obj/vehicle/sealed/armored/proc/set_safety(mob/user) + weapons_safety = !weapons_safety + SEND_SOUND(user, sound('sound/machines/beep.ogg', volume = 25)) + balloon_alert(user, "equipment [weapons_safety ? "safe" : "ready"]") + // todo maybe make tanks also update the mouse icon? + +///Rotates the cannon overlay +/obj/vehicle/sealed/armored/proc/swivel_turret(atom/A, new_weapon_dir) + if(!new_weapon_dir) + new_weapon_dir = angle_to_cardinal_dir(Get_Angle(get_turf(src), get_turf(A))) + if(turret_overlay.dir == new_weapon_dir) + return FALSE + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_TANK_SWIVEL)) //Slight cooldown to avoid spam + return FALSE + playsound(src, 'sound/effects/tankswivel.ogg', 80,1) + TIMER_COOLDOWN_START(src, COOLDOWN_TANK_SWIVEL, 3 SECONDS) + turret_overlay.setDir(new_weapon_dir) + return TRUE + +///handles mouseclicks by a user in the vehicle +/obj/vehicle/sealed/armored/proc/on_mouseclick(mob/user, atom/target, turf/location, control, list/modifiers) + SIGNAL_HANDLER + modifiers = params2list(modifiers) + if(isnull(location) && target.plane == CLICKCATCHER_PLANE) //Checks if the intended target is in deep darkness and adjusts target based on params. + target = params2turf(modifiers["screen-loc"], get_turf(user), user.client) + modifiers["icon-x"] = num2text(ABS_PIXEL_TO_REL(text2num(modifiers["icon-x"]))) + modifiers["icon-y"] = num2text(ABS_PIXEL_TO_REL(text2num(modifiers["icon-y"]))) + if(modifiers[SHIFT_CLICK]) //Allows things to be examined. + return + if(!isturf(target) && !isturf(target.loc)) // Prevents inventory from being drilled + return + if(HAS_TRAIT(user, TRAIT_INCAPACITATED)) + return + if(src == target) + return + if(!is_equipment_controller(user)) + balloon_alert(user, "wrong seat for equipment!") + return COMSIG_MOB_CLICK_CANCELED + if(LAZYACCESS(modifiers, MIDDLE_CLICK)) + set_safety(user) + return COMSIG_MOB_CLICK_CANCELED + var/dir_to_target = get_cardinal_dir(src, target) + var/obj/item/armored_weapon/selected + if(modifiers[BUTTON] == RIGHT_CLICK) + selected = secondary_weapon + else + if(!turret_overlay) + return COMSIG_MOB_CLICK_CANCELED + if(turret_overlay.dir != dir_to_target) + swivel_turret(target) + return COMSIG_MOB_CLICK_CANCELED + selected = primary_weapon + if(!selected) + return + if(weapons_safety || zoom_mode) + return + INVOKE_ASYNC(selected, TYPE_PROC_REF(/obj/item/armored_weapon, begin_fire), user, target, modifiers) + +/atom/movable/vis_obj/turret_overlay + name = "Tank gun turret" + desc = "The shooty bit on a tank." + icon = 'icons/obj/armored/3x3/tank_gun.dmi' //set by owner + icon_state = "turret" + layer = ABOVE_ALL_MOB_LAYER + ///overlay for the attached gun + var/image/gun_overlay + ///overlay for the shooting version of that gun + var/image/flash_overlay + ///currently using the flashing overlay + var/flashing = FALSE + ///icon state for the secondary + var/image/secondary_overlay + +/atom/movable/vis_obj/turret_overlay/proc/update_gun_overlay(gun_icon_state) + cut_overlays() + if(!gun_icon_state) + flash_overlay = null + gun_overlay = null + return + flashing = FALSE + flash_overlay = image(icon, gun_icon_state + "_fire", pixel_x = -70, pixel_y = -69) + gun_overlay = image(icon, gun_icon_state, pixel_x = -40, pixel_y = -48) + update_appearance(UPDATE_OVERLAYS) + +/atom/movable/vis_obj/turret_overlay/proc/set_flashing(new_flashing) + flashing = new_flashing + update_appearance(UPDATE_OVERLAYS) + +/atom/movable/vis_obj/turret_overlay/update_overlays() + . = ..() + . += (flashing ? flash_overlay : gun_overlay) + +/atom/movable/vis_obj/turret_overlay/setDir(newdir) + . = ..() + if(secondary_overlay) + cut_overlay(secondary_overlay) + secondary_overlay.icon_state = copytext(secondary_overlay.icon_state, 1, length(secondary_overlay.icon_state)) + "[dir]" + add_overlay(secondary_overlay) + +/atom/movable/vis_obj/tank_damage + name = "Tank damage overlay" + desc = "ow." + icon = 'icons/obj/armored/3x3/tank_damage.dmi' //set by owner + icon_state = "null" // set on demand + vis_flags = VIS_INHERIT_DIR diff --git a/code/modules/vehicles/armored/_multitile.dm b/code/modules/vehicles/armored/_multitile.dm new file mode 100644 index 0000000000000..15130efacd889 --- /dev/null +++ b/code/modules/vehicles/armored/_multitile.dm @@ -0,0 +1,41 @@ +/obj/vehicle/sealed/armored/multitile + name = "\improper MT - Ares" + desc = "A gigantic wall of metal designed for maximum Xeno destruction. Drag yourself onto it at an entrance to get inside." + icon = 'icons/obj/armored/3x3/tank.dmi' + turret_icon = 'icons/obj/armored/3x3/tank_gun.dmi' + secondary_turret_icon = 'icons/obj/armored/3x3/tank_secondary_gun.dmi' + damage_icon_path = 'icons/obj/armored/3x3/tank_damage.dmi' + icon_state = "tank" + hitbox = /obj/hitbox + interior = /datum/interior/armored + minimap_icon_state = "tank" + required_entry_skill = SKILL_LARGE_VEHICLE_TRAINED + atom_flags = DIRLOCK|BUMP_ATTACKABLE|PREVENT_CONTENTS_EXPLOSION + armored_flags = ARMORED_HAS_PRIMARY_WEAPON|ARMORED_HAS_SECONDARY_WEAPON|ARMORED_HAS_UNDERLAY|ARMORED_HAS_MAP_VARIANTS|ARMORED_HAS_HEADLIGHTS + pixel_x = -48 + pixel_y = -48 + max_integrity = 900 + soft_armor = list(MELEE = 50, BULLET = 100 , LASER = 90, ENERGY = 60, BOMB = 60, BIO = 60, FIRE = 50, ACID = 50) + hard_armor = list(MELEE = 0, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0) + max_occupants = 4 + move_delay = 0.9 SECONDS + ram_damage = 100 + +///returns a list of possible locations that this vehicle may be entered from +/obj/vehicle/sealed/armored/multitile/proc/enter_locations(mob/M) + return list(get_step_away(get_step(src, REVERSE_DIR(dir)), src, 2)) + +/obj/vehicle/sealed/armored/multitile/exit_location(mob/M) + return pick(enter_locations(M)) + +/obj/vehicle/sealed/armored/multitile/mob_try_enter(mob/M) + if(!isobserver(M) && !(M.loc in enter_locations(M))) + balloon_alert(M, "Not at entrance") + return FALSE + return ..() + +/obj/vehicle/sealed/armored/multitile/enter_checks(mob/M) + . = ..() + if(!.) + return + return (M.loc in enter_locations(M)) diff --git a/code/modules/vehicles/armored/ammo_magazine.dm b/code/modules/vehicles/armored/ammo_magazine.dm new file mode 100644 index 0000000000000..b8037f3112763 --- /dev/null +++ b/code/modules/vehicles/armored/ammo_magazine.dm @@ -0,0 +1,84 @@ +//FEB 2024 NOTE: some of these are missing loading_sounds, fix it before using these ingame +//Special ammo magazines for hardpoint modules. Some may not be here since you can use normal magazines on them +/obj/item/ammo_magazine/tank + magazine_flags = NONE + ///loading sound to play when + var/loading_sound + +/obj/item/ammo_magazine/tank/ltb_cannon + name = "high explosive LTB round" + desc = "A primary armament cannon magazine" + caliber = CALIBER_84MM + icon_state = "ltbammo" + w_class = WEIGHT_CLASS_GIGANTIC + default_ammo = /datum/ammo/rocket/ltb + max_rounds = 1 + loading_sound = 'sound/vehicles/weapons/ltb_reload.ogg' + +/obj/item/ammo_magazine/tank/ltaap_chaingun + name = "\improper LTA-AP chaingun Magazine" + desc = "A primary armament chaingun magazine." + caliber = CALIBER_762X51 + icon_state = "ltaap" + w_class = WEIGHT_CLASS_GIGANTIC + default_ammo = /datum/ammo/bullet/minigun/ltaap + max_rounds = 150 + loading_sound = 'sound/weapons/guns/interact/working_the_bolt.ogg' + + +/obj/item/ammo_magazine/tank/flamer + name = "Flamer Magazine" + desc = "A secondary armament flamethrower magazine" + caliber = CALIBER_FUEL_THICK + icon_state = "flametank_large" + w_class = WEIGHT_CLASS_GIGANTIC + default_ammo = /datum/ammo/flamethrower/tank_flamer + max_rounds = 120 + +/obj/item/ammo_magazine/tank/towlauncher + name = "TOW Launcher Magazine" + desc = "A secondary armament rocket magazine" + caliber = CALIBER_68MM + icon_state = "quad_rocket" + w_class = WEIGHT_CLASS_GIGANTIC + default_ammo = /datum/ammo/rocket/ap //Fun fact, AP rockets seem to be a straight downgrade from normal rockets. Maybe I'm missing something... + max_rounds = 5 + +/obj/item/ammo_magazine/tank/secondary_cupola + name = "HSG-102 Cupola Magazine" + desc = "A secondary armament MG magazine" + caliber = CALIBER_10X28 + icon_state = "cupolaammo" + loading_sound = 'sound/weapons/guns/interact/working_the_bolt.ogg' + w_class = WEIGHT_CLASS_GIGANTIC + default_ammo = /datum/ammo/bullet/cupola + max_rounds = 75 + +/obj/item/ammo_magazine/tank/tank_glauncher + name = "Grenade Launcher Magazine" + desc = "A secondary armament grenade magazine" + caliber = CALIBER_40MM + icon_state = "glauncher_2" + w_class = WEIGHT_CLASS_GIGANTIC + default_ammo = /datum/ammo/grenade_container + max_rounds = 10 + +/obj/item/ammo_magazine/tank/tank_glauncher/update_icon_state() + if(current_rounds >= max_rounds) + icon_state = "glauncher_2" + else if(current_rounds <= 0) + icon_state = "glauncher_0" + else + icon_state = "glauncher_1" + +/obj/item/ammo_magazine/tank/tank_slauncher + name = "Smoke Launcher Magazine" + desc = "A support armament grenade magazine" + caliber = CALIBER_40MM + icon_state = "slauncher_1" + w_class = WEIGHT_CLASS_GIGANTIC + default_ammo = /datum/ammo/grenade_container/smoke + max_rounds = 6 + +/obj/item/ammo_magazine/tank/tank_slauncher/update_icon_state() + icon_state = "slauncher_[current_rounds <= 0 ? "0" : "1"]" diff --git a/code/modules/vehicles/armored/apc.dm b/code/modules/vehicles/armored/apc.dm new file mode 100644 index 0000000000000..2400c6db6fd87 --- /dev/null +++ b/code/modules/vehicles/armored/apc.dm @@ -0,0 +1,21 @@ +/obj/vehicle/sealed/armored/multitile/apc + name = "\improper APC - Athena" + desc = "An unarmed command APC designed to command and transport troops in the battlefield." + icon = 'icons/obj/armored/3x3/apc.dmi' + icon_state = "apc" + damage_icon_path = 'icons/obj/armored/3x3/apc_damage_overlay.dmi' + armored_flags = ARMORED_HAS_HEADLIGHTS + required_entry_skill = SKILL_LARGE_VEHICLE_DEFAULT + minimap_icon_state = null + turret_icon = null + interior = null + secondary_turret_icon = null + primary_weapon_type = null + secondary_weapon_type = null + armored_flags = NONE + pixel_x = -48 + pixel_y = -40 + obj_integrity = 2000 + max_integrity = 2000 + max_occupants = 10 //Clown car? Clown car. + move_delay = 0.5 SECONDS diff --git a/code/modules/vehicles/armored/armored_actions.dm b/code/modules/vehicles/armored/armored_actions.dm new file mode 100644 index 0000000000000..d369b442f3006 --- /dev/null +++ b/code/modules/vehicles/armored/armored_actions.dm @@ -0,0 +1,134 @@ +/obj/vehicle/sealed/armored/generate_action_type() + . = ..() + if(istype(., /datum/action/vehicle/sealed/armored)) + var/datum/action/vehicle/sealed/armored/armor = . + armor.chassis = src + +///yes this is a blatant mech copypaste +/datum/action/vehicle/sealed/armored + action_icon = 'icons/mob/actions/actions_mecha.dmi' + ///mech owner of this action + var/obj/vehicle/sealed/armored/chassis + +/datum/action/vehicle/sealed/armored/Destroy() + chassis = null + return ..() + +/datum/action/vehicle/sealed/armored/eject + name = "Eject From Mech" + action_icon_state = "mech_eject" + +/datum/action/vehicle/sealed/armored/eject/action_activate(trigger_flags) + if(!owner) + return + if(!chassis || !(owner in chassis.occupants)) + return + chassis.resisted_against(owner) + +/datum/action/vehicle/sealed/armored/swap_seat + name = "Switch Seats" + action_icon_state = "mech_seat_swap" + +#define ARMOR_DRIVER "Driver" +#define ARMOR_GUNNER "Gunner" +#define ARMOR_PASSENGER "Passenger" + +/datum/action/vehicle/sealed/armored/swap_seat/action_activate(trigger_flags) + if(!transfer_checks()) + return + var/list/choices = list() + if(!chassis.is_driver(owner)) + choices += ARMOR_DRIVER + if(!chassis.is_equipment_controller(owner)) + choices += ARMOR_GUNNER + choices += ARMOR_PASSENGER + var/choice = tgui_input_list(owner, "Select a seat", chassis.name, choices) + if(!choice) + return + if(!transfer_checks(choice)) + return + chassis.balloon_alert(owner, "moving to other seat...") + if(!do_after(owner, chassis.enter_delay, target = chassis, extra_checks=CALLBACK(src, PROC_REF(transfer_checks), choice))) + chassis.balloon_alert(owner, "interrupted!") + return + chassis.remove_control_flags(owner, VEHICLE_CONTROL_MELEE|VEHICLE_CONTROL_EQUIPMENT|VEHICLE_CONTROL_DRIVE|VEHICLE_CONTROL_SETTINGS) + switch(choice) + if(ARMOR_GUNNER) + chassis.balloon_alert(owner, "controlling gunner seat") + chassis.add_control_flags(owner, VEHICLE_CONTROL_MELEE|VEHICLE_CONTROL_EQUIPMENT) + if(ARMOR_DRIVER) + chassis.balloon_alert(owner, "controlling pilot seat") + chassis.add_control_flags(owner, VEHICLE_CONTROL_DRIVE|VEHICLE_CONTROL_SETTINGS) + if(ARMOR_PASSENGER) + chassis.balloon_alert(owner, "entered passenger seat") + +///checks if owner can still transfer +/datum/action/vehicle/sealed/armored/swap_seat/proc/transfer_checks(choice) + if(!owner || !chassis || !(owner in chassis.occupants)) + return FALSE + if(length(chassis.occupants) >= chassis.max_occupants) + chassis.balloon_alert(owner, "other seats occupied!") + return FALSE + switch(choice) + if(ARMOR_GUNNER) + if(length(chassis.return_controllers_with_flag(VEHICLE_CONTROL_EQUIPMENT)) >= 1) + chassis.balloon_alert(owner, "gunner occupied!") + return FALSE + if(ARMOR_DRIVER) + if(chassis.driver_amount() >= chassis.max_drivers) + chassis.balloon_alert(owner, "driver occupied!") + return FALSE + return TRUE + +#undef ARMOR_DRIVER +#undef ARMOR_GUNNER +#undef ARMOR_PASSENGER + +/datum/action/vehicle/sealed/armored/toggle_lights + name = "Toggle Lights" + action_icon_state = "mech_lights_off" + +/datum/action/vehicle/sealed/armored/toggle_lights/action_activate(trigger_flags) + if(!owner || !chassis || !(owner in chassis.occupants)) + return + + if(!(chassis.armored_flags & ARMORED_HAS_HEADLIGHTS)) + chassis.balloon_alert(owner, "the vehicle's lights are broken!") + return + chassis.armored_flags ^= ARMORED_LIGHTS_ON + if(chassis.armored_flags & ARMORED_LIGHTS_ON) + action_icon_state = "mech_lights_on" + else + action_icon_state = "mech_lights_off" + chassis.set_light_on(chassis.armored_flags & ARMORED_LIGHTS_ON) + chassis.balloon_alert(owner, "toggled lights [chassis.armored_flags & ARMORED_LIGHTS_ON ? "on":"off"]") + playsound(chassis,'sound/mecha/brass_skewer.ogg', 40, TRUE) + chassis.log_message("Toggled lights [(chassis.armored_flags & ARMORED_LIGHTS_ON)?"on":"off"].", LOG_MECHA) + update_button_icon() + +/datum/action/vehicle/sealed/armored/zoom + name = "Zoom" + action_icon_state = "mech_zoom_off" + keybinding_signals = list( + KEYBINDING_NORMAL = COMSIG_MECHABILITY_TOGGLE_ZOOM, + ) + +/datum/action/vehicle/sealed/armored/zoom/action_activate(trigger_flags) + if(!owner?.client || !chassis || !(owner in chassis.occupants)) + return + chassis.zoom_mode = !chassis.zoom_mode + action_icon_state = "mech_zoom_[chassis.zoom_mode ? "on" : "off"]" + chassis.log_message("Toggled zoom mode.", LOG_MECHA) + to_chat(owner, "Zoom mode [chassis.zoom_mode?"en":"dis"]abled.") + if(chassis.zoom_mode) + owner.client.view_size.set_view_radius_to(4.5) + SEND_SOUND(owner, sound('sound/mecha/imag_enh.ogg', volume=50)) + else + owner.client.view_size.reset_to_default() + update_button_icon() + +/datum/action/vehicle/sealed/armored/zoom/remove_action(mob/M) + if(chassis.zoom_mode) + M.client.view_size.reset_to_default() + chassis.zoom_mode = FALSE + return ..() diff --git a/code/modules/vehicles/armored/armored_modules.dm b/code/modules/vehicles/armored/armored_modules.dm new file mode 100644 index 0000000000000..79209699cc326 --- /dev/null +++ b/code/modules/vehicles/armored/armored_modules.dm @@ -0,0 +1,127 @@ +/** + *TANK MODULES + * + * Attached to the tank and provide abilities/ passive upgrades + */ +/obj/item/tank_module + name = "Tank Module" + desc = "Yell at the admin that spawned this in please." + icon = 'icons/obj/armored/hardpoint_modules.dmi' + icon_state = "ltb_cannon" + ///reference to current overlay added to owner + var/image/overlay + ///vehicle this overlay is attached to + var/obj/vehicle/sealed/armored/owner + ///Bool whether this module is a driver module or not + var/is_driver_module = TRUE + +///Called to apply modules to a vehicle +/obj/item/tank_module/proc/on_equip(obj/vehicle/sealed/armored/vehicle, mob/living/user) + SHOULD_CALL_PARENT(TRUE) + if(!istype(vehicle)) + return FALSE + var/slot = is_driver_module ? vehicle.driver_utility_module : vehicle.gunner_utility_module + if(slot) + user?.balloon_alert(user, "module slot full") + return FALSE + user?.temporarilyRemoveItemFromInventory(src) + forceMove(vehicle) + if(is_driver_module) + vehicle.driver_utility_module = src + else + vehicle.gunner_utility_module = src + if(!vehicle.turret_overlay) + overlay = image(vehicle.icon, null, icon_state) + vehicle.add_overlay(overlay) + else + overlay = image(vehicle.turret_overlay.icon, null, icon_state) + vehicle.turret_overlay.add_overlay(overlay) + owner = vehicle + return TRUE + +///called to remove this module from its vehicle +/obj/item/tank_module/proc/on_unequip(mob/user) + SHOULD_CALL_PARENT(TRUE) + if(owner.driver_utility_module == src) + owner.driver_utility_module = null + else + owner.gunner_utility_module = null + forceMove(owner.drop_location()) + owner.cut_overlay(overlay) + owner.turret_overlay?.cut_overlay(overlay) + owner = null + overlay = null + user?.put_in_hands(src) + return TRUE + +/obj/item/tank_module/Destroy() + if(owner) + on_unequip() + return ..() + + +/obj/item/tank_module/overdrive + name = "overdrive module" + desc = "A module that enhances the speed of armored combat vehicles by increasing fuel efficiency." + icon_state = "overdrive" + +/obj/item/tank_module/overdrive/on_equip(target) + . = ..() + if(!.) + return + var/obj/vehicle/sealed/armored/vehicle = target + vehicle.move_delay -= 0.15 SECONDS + +/obj/item/tank_module/overdrive/on_unequip() + owner.move_delay += 0.15 SECONDS + return ..() + +/obj/item/tank_module/passenger + name = "passenger module" + desc = "A module that increases the carrying capacity of a vehicle with extra seats." + icon_state = "uninstalled APC frieght carriage" + +/obj/item/tank_module/passenger/on_equip(target) + . = ..() + if(!.) + return + var/obj/vehicle/sealed/armored/vehicle = target + vehicle.max_occupants += 4 + +/obj/item/tank_module/passenger/on_unequip(target) + owner.max_occupants -= 4 + return ..() + + +/obj/item/tank_module/ability + name = "Ability Module" + desc = "You shouldnt be seeing this." + icon_state = "overdrive" + ///typepaths for the ability we want to grant + var/ability_to_grant + ///if given, a single flag of who we want this ability to be granted to + var/flag_controller = NONE + +/obj/item/tank_module/ability/on_equip(obj/vehicle/sealed/armored/vehicle, attach_right) + . = ..() + if(!.) + return + if(flag_controller) + vehicle.initialize_controller_action_type(ability_to_grant, flag_controller) + else + vehicle.initialize_passenger_action_type(ability_to_grant) + +/obj/item/tank_module/ability/on_unequip(atom/moveto) + if(flag_controller) + owner.destroy_controller_action_type(ability_to_grant, flag_controller) + else + owner.destroy_passenger_action_type(ability_to_grant) + return ..() + +/obj/item/tank_module/ability/zoom + name = "zoom module" + desc = "Allows gunners to see further while looking through it. Weapons cannot be used while looking through it." + icon_state = "zoom" + is_driver_module = FALSE + flag_controller = VEHICLE_CONTROL_EQUIPMENT + ability_to_grant = /datum/action/vehicle/sealed/armored/zoom diff --git a/code/modules/vehicles/armored/armored_weapons.dm b/code/modules/vehicles/armored/armored_weapons.dm new file mode 100644 index 0000000000000..f64f3886855d0 --- /dev/null +++ b/code/modules/vehicles/armored/armored_weapons.dm @@ -0,0 +1,341 @@ +/obj/item/armored_weapon + name = "\improper LTB main battle tank cannon" + desc = "A TGMC vehicle's main turret cannon. It fires 86mm rocket propelled shells" + icon = 'icons/obj/armored/hardpoint_modules.dmi' + icon_state = "ltb_cannon" + ///owner this is attached to + var/obj/vehicle/sealed/armored/chassis + ///The turret icon if we equip the weapon in a secondary slot, you should null this if its unequippable as such + var/secondary_equipped_icon + ///Weapon slot this weapon fits in + var/weapon_slot = MODULE_PRIMARY + + ///currently loaded ammo. initial value is ammo we start with + var/obj/item/ammo_magazine/ammo = /obj/item/ammo_magazine/tank/ltb_cannon + ///Current loaded magazines: top one empties into ammo + var/list/obj/item/ammo_magazine/ammo_magazine = list() + ///maximum magazines ammo_magazine can hold + var/maximum_magazines = 5 + ///ammo types we'll be able to accept + var/list/accepted_ammo = list( + /obj/item/ammo_magazine/tank/tank_glauncher, + /obj/item/ammo_magazine/tank/ltb_cannon, + ) + ///current tracked target for fire(), updated when user drags + var/atom/current_target + ///current mob firing this weapon. used for tracking for iff and etc in fire() + var/mob/current_firer + + ///sound file to play when this weapon you know, fires + var/fire_sound = list('sound/weapons/guns/fire/tank_cannon1.ogg', 'sound/weapons/guns/fire/tank_cannon2.ogg') + ///Tracks windups + var/windup_checked = WEAPON_WINDUP_NOT_CHECKED + ///windup sound played during windup + var/windup_sound + ///windup delay for this object + var/windup_delay = 0 + ///scatter of this weapon. in degrees and modified by arm this is attached to + var/variance = 0 + /// since mech guns only get one firemode this is for all types of shots + var/projectile_delay = 5 SECONDS + /// time between shots in a burst + var/projectile_burst_delay = 2 + ///bullets per burst if firemode is set to burst + var/burst_amount = 0 + ///fire mode to use for autofire + var/fire_mode = GUN_FIREMODE_SEMIAUTO + ///how many seconds automatic, and manual, reloading takes + var/rearm_time = 4 SECONDS + ///ammo hud icon to display when no ammo is loaded + var/hud_state_empty = "shell_empty" + +/obj/item/armored_weapon/Initialize(mapload) + . = ..() + if(ammo) + ammo = new ammo(src) + AddComponent(/datum/component/automatedfire/autofire, projectile_delay, projectile_delay, projectile_burst_delay, burst_amount, fire_mode, CALLBACK(src, PROC_REF(set_bursting)), CALLBACK(src, PROC_REF(reset_fire)), CALLBACK(src, PROC_REF(fire))) + +/obj/item/armored_weapon/Destroy() + if(chassis) + detach(get_turf(chassis)) + QDEL_NULL(ammo) + QDEL_LIST(ammo_magazine) + return ..() + +///called by the chassis: begins firing, yes this is stolen from mech but I made both so bite me +/obj/item/armored_weapon/proc/begin_fire(mob/source, atom/target, list/modifiers) + if(!ammo || ammo.current_rounds < 0) + playsound(source, 'sound/weapons/guns/fire/empty.ogg', 15, 1) + return + if(TIMER_COOLDOWN_CHECK(chassis, COOLDOWN_MECHA_EQUIPMENT(type))) + return + TIMER_COOLDOWN_START(chassis, COOLDOWN_MECHA_EQUIPMENT(type), projectile_delay) + + set_target(get_turf_on_clickcatcher(target, source, list2params(modifiers))) + if(!current_target) + return + RegisterSignal(source, COMSIG_MOB_MOUSEUP, PROC_REF(stop_fire)) + RegisterSignal(source, COMSIG_MOB_MOUSEDRAG, PROC_REF(change_target)) + if(windup_delay && windup_checked == WEAPON_WINDUP_NOT_CHECKED) + windup_checked = WEAPON_WINDUP_CHECKING + playsound(chassis.loc, windup_sound, 30, TRUE) + if(!do_after(source, windup_delay, IGNORE_TARGET_LOC_CHANGE, chassis, BUSY_ICON_DANGER, BUSY_ICON_DANGER, extra_checks = CALLBACK(src, PROC_REF(do_after_checks), current_target))) + windup_checked = WEAPON_WINDUP_NOT_CHECKED + return + windup_checked = WEAPON_WINDUP_CHECKED + if(QDELETED(current_target)) + windup_checked = WEAPON_WINDUP_NOT_CHECKED + return + current_firer = source + if(fire_mode == GUN_FIREMODE_SEMIAUTO) + var/fire_return // todo fix: code expecting return values from async + ASYNC + fire_return = fire() + if(!fire_return || windup_checked == WEAPON_WINDUP_CHECKING) + return + reset_fire() + return + SEND_SIGNAL(src, COMSIG_ARMORED_FIRE) + source?.client?.mouse_pointer_icon = 'icons/effects/supplypod_target.dmi' + +/// do after checks for the mecha equipment do afters +/obj/item/armored_weapon/proc/do_after_checks(atom/target) + if(!chassis) + return FALSE + if(QDELETED(current_target)) + return FALSE + if(chassis.primary_weapon == src) + var/dir_target_diff = get_between_angles(Get_Angle(chassis, current_target), dir2angle(chassis.turret_overlay.dir)) + if(dir_target_diff > (ARMORED_FIRE_CONE_ALLOWED / 2)) + if(!chassis.swivel_turret(current_target)) + return FALSE + dir_target_diff = get_between_angles(Get_Angle(chassis, current_target), dir2angle(chassis.turret_overlay.dir)) + if(dir_target_diff > (ARMORED_FIRE_CONE_ALLOWED / 2)) + return FALSE + return TRUE + +///callback wrapper for adding/removing trait +/obj/item/armored_weapon/proc/set_bursting(bursting) + if(bursting) + ADD_TRAIT(src, TRAIT_GUN_BURST_FIRING, VEHICLE_TRAIT) + return + REMOVE_TRAIT(src, TRAIT_GUN_BURST_FIRING, VEHICLE_TRAIT) + +///Changes the current target. +/obj/item/armored_weapon/proc/change_target(datum/source, atom/src_object, atom/over_object, turf/src_location, turf/over_location, src_control, over_control, params) + SIGNAL_HANDLER + set_target(get_turf_on_clickcatcher(over_object, source, params)) + +///Sets the current target and registers for qdel to prevent hardels +/obj/item/armored_weapon/proc/set_target(atom/object) + if(object == current_target || object == chassis) + return + if(current_target) + UnregisterSignal(current_target, COMSIG_QDELETING) + current_target = object + if(current_target) + RegisterSignal(current_target, COMSIG_QDELETING, PROC_REF(clean_target)) + +///Stops the Autofire component and resets the current cursor. +/obj/item/armored_weapon/proc/stop_fire(mob/living/source, atom/object, location, control, params) + SIGNAL_HANDLER + var/list/modifiers = params2list(params) + if(!((modifiers[BUTTON] == RIGHT_CLICK) && chassis.secondary_weapon == src) && !((modifiers[BUTTON] == LEFT_CLICK) && chassis.primary_weapon == src)) + return + SEND_SIGNAL(src, COMSIG_ARMORED_STOP_FIRE) + if(!HAS_TRAIT(src, TRAIT_GUN_BURST_FIRING)) + reset_fire() + UnregisterSignal(source, list(COMSIG_MOB_MOUSEDRAG, COMSIG_MOB_MOUSEUP)) + +///Cleans the current target in case of Hardel +/obj/item/armored_weapon/proc/clean_target() + SIGNAL_HANDLER + current_target = get_turf(current_target) + +///Resets the autofire component. +/obj/item/armored_weapon/proc/reset_fire() + windup_checked = WEAPON_WINDUP_NOT_CHECKED + current_firer?.client?.mouse_pointer_icon = chassis.mouse_pointer + set_target(null) + current_firer = null + +///does any effects and changes to the projectile when it is fired +/obj/item/armored_weapon/proc/apply_weapon_modifiers(obj/projectile/projectile_to_fire, mob/firer) + projectile_to_fire.shot_from = src + projectile_to_fire.projectile_speed = projectile_to_fire.ammo.shell_speed + if(chassis.hitbox?.tank_desants) + projectile_to_fire.hit_atoms += chassis.hitbox.tank_desants + if((projectile_to_fire.ammo.ammo_behavior_flags & AMMO_IFF) && ishuman(firer)) + var/mob/living/carbon/human/human_firer = firer + var/obj/item/card/id/id = human_firer.get_idcard() + projectile_to_fire.iff_signal = id?.iff_signal + if(firer) + projectile_to_fire.def_zone = firer.zone_selected + +///actually executes firing when autofire asks for it, returns TRUE to keep firing FALSE to stop +/obj/item/armored_weapon/proc/fire() + if(chassis.primary_weapon == src) + var/dir_target_diff = get_between_angles(Get_Angle(chassis, current_target), dir2angle(chassis.turret_overlay.dir)) + if(dir_target_diff > (ARMORED_FIRE_CONE_ALLOWED / 2)) + chassis.swivel_turret(current_target) + return AUTOFIRE_CONTINUE + else if(chassis.turret_overlay) + chassis.turret_overlay.cut_overlay(chassis.turret_overlay.secondary_overlay) + chassis.turret_overlay.secondary_overlay.dir = get_cardinal_dir(chassis, current_target) + chassis.turret_overlay.add_overlay(chassis.turret_overlay.secondary_overlay) + else + chassis.cut_overlay(chassis.secondary_weapon_overlay) + chassis.secondary_weapon_overlay.dir = get_cardinal_dir(chassis, current_target) + chassis.add_overlay(chassis.secondary_weapon_overlay) + + + var/type_to_spawn = CHECK_BITFIELD(initial(ammo.default_ammo.ammo_behavior_flags), AMMO_HITSCAN) ? /obj/projectile/hitscan : /obj/projectile + var/obj/projectile/projectile_to_fire = new type_to_spawn(get_turf(src), initial(ammo.default_ammo.hitscan_effect_icon)) + projectile_to_fire.generate_bullet(GLOB.ammo_list[ammo.default_ammo]) + + apply_weapon_modifiers(projectile_to_fire, current_firer) + var/firing_angle = get_angle_with_scatter(chassis, current_target, variance, projectile_to_fire.p_x, projectile_to_fire.p_y) + + playsound(chassis, islist(fire_sound) ? pick(fire_sound):fire_sound, 20, TRUE) + projectile_to_fire.fire_at(current_target, current_firer, chassis, projectile_to_fire.ammo.max_range, projectile_to_fire.projectile_speed, firing_angle, suppress_light = HAS_TRAIT(src, TRAIT_GUN_SILENCED)) + + chassis.log_message("Fired from [name], targeting [current_target] at [AREACOORD(current_target)].", LOG_ATTACK) + + if(chassis.primary_weapon == src && !chassis.turret_overlay.flashing) + chassis.turret_overlay.set_flashing(TRUE) + addtimer(CALLBACK(chassis.turret_overlay, TYPE_PROC_REF(/atom/movable/vis_obj/turret_overlay, set_flashing), FALSE), 7, TIMER_CLIENT_TIME) + chassis.interior?.breech.on_main_fire(ammo) + + ammo.current_rounds-- + for(var/mob/occupant AS in chassis.occupants) + occupant.hud_used.update_ammo_hud(src, list(ammo.default_ammo.hud_state, ammo.default_ammo.hud_state_empty), ammo.current_rounds) + if(ammo.current_rounds > 0) + return AUTOFIRE_CONTINUE|AUTOFIRE_SUCCESS + playsound(src, 'sound/weapons/guns/misc/empty_alarm.ogg', 25, 1) + eject_ammo() + if(LAZYACCESS(current_firer.do_actions, src) || length(ammo_magazine) < 1) + return AUTOFIRE_SUCCESS + var/obj/item/ammo_magazine/tank/new_mag = ammo_magazine[1] + if(istype(new_mag) && new_mag.loading_sound) + // .5 sec delay to let other sounds play out + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), src, new_mag.loading_sound, 40), 5) + if(!do_after(current_firer, rearm_time, IGNORE_HELD_ITEM|IGNORE_LOC_CHANGE, chassis, BUSY_ICON_GENERIC)) + return AUTOFIRE_SUCCESS + reload() + return AUTOFIRE_CONTINUE|AUTOFIRE_SUCCESS + +///eject current ammo from tank +/obj/item/armored_weapon/proc/eject_ammo() + for(var/mob/occupant AS in chassis.occupants) + occupant.hud_used.update_ammo_hud(src, list(hud_state_empty, hud_state_empty), 0) + ammo.update_appearance() + var/obj/item/ammo_magazine/old_ammo = ammo + ammo = null + if(chassis.interior) + if(chassis.primary_weapon == src) + chassis.interior.breech.do_eject_ammo(old_ammo) + else + chassis.interior.secondary_breech.do_eject_ammo(old_ammo) + return + old_ammo.forceMove(chassis.exit_location()) + +///load topmost ammo magazine, if there is any +/obj/item/armored_weapon/proc/reload() + if(ammo) + eject_ammo() + ammo = popleft(ammo_magazine) + for(var/mob/occupant AS in chassis.occupants) + occupant.hud_used.update_ammo_hud(src, list(ammo.default_ammo.hud_state, ammo.default_ammo.hud_state_empty), ammo.current_rounds) + +///attach this weapon to a chassis +/obj/item/armored_weapon/proc/attach(obj/vehicle/sealed/armored/tank, attach_primary) + if(attach_primary) + tank.primary_weapon?.detach(tank.exit_location()) + tank.primary_weapon = src + tank.turret_overlay.update_gun_overlay(icon_state) + else + tank.secondary_weapon?.detach(tank.exit_location()) + tank.secondary_weapon = src + if(tank.turret_overlay) + // do not remove the dir = SOUTH becuase otherwise byond flips an internal flag so the dir is inherited from the turret + tank.turret_overlay.secondary_overlay = image(tank.turret_icon, icon_state = icon_state + "_" + "[tank.turret_overlay.dir]", dir = SOUTH) + tank.turret_overlay.add_overlay(tank.turret_overlay.secondary_overlay) + else + tank.secondary_weapon_overlay = image(tank.turret_icon, icon_state = icon_state + "_" + "[tank.dir]") + tank.update_appearance(UPDATE_OVERLAYS) + chassis = tank + forceMove(tank) + var/icon_list + if(ammo?.default_ammo) + icon_list = list(ammo.default_ammo.hud_state, ammo.default_ammo.hud_state_empty) + else + icon_list = list(hud_state_empty, hud_state_empty) + for(var/mob/occupant AS in chassis.occupants) + occupant.hud_used.add_ammo_hud(src, icon_list, ammo ? ammo.current_rounds : 0) + +///detach this weapon to a chassis +/obj/item/armored_weapon/proc/detach(atom/moveto) + if(chassis.primary_weapon == src) + chassis.primary_weapon = null + chassis.turret_overlay.update_gun_overlay() + else + chassis.secondary_weapon = null + if(chassis.turret_overlay) + chassis.turret_overlay.cut_overlay(chassis.turret_overlay.secondary_overlay) + chassis.turret_overlay.secondary_overlay = null + else + chassis.secondary_weapon_overlay = null + chassis.update_appearance(UPDATE_OVERLAYS) + for(var/mob/occupant AS in chassis.occupants) + occupant.hud_used.remove_ammo_hud(src) + chassis = null + forceMove(moveto) + +/obj/item/armored_weapon/secondary_weapon + name = "secondary cupola minigun" + desc = "A robotically controlled minigun that spews lead." + icon_state = "cupola" + fire_sound = 'sound/weapons/guns/fire/tank_minigun_loop.ogg' + windup_delay = 5 + windup_sound = 'sound/weapons/guns/fire/tank_minigun_start.ogg' + weapon_slot = MODULE_SECONDARY + secondary_equipped_icon = 'icons/obj/armored/3x3/tank_secondary_gun.dmi' + ammo = /obj/item/ammo_magazine/tank/secondary_cupola + accepted_ammo = list(/obj/item/ammo_magazine/tank/secondary_cupola) + fire_mode = GUN_FIREMODE_AUTOMATIC + projectile_delay = 2 + variance = 5 + rearm_time = 1 SECONDS + maximum_magazines = 5 + hud_state_empty = "rifle_empty" + +/obj/item/armored_weapon/ltaap + name = "\improper LTA-AP chaingun" + desc = "A hefty, large caliber chaingun" + icon_state = "ltaap_chaingun" + fire_sound = 'sound/weapons/guns/fire/tank_minigun_loop.ogg' + windup_delay = 5 + windup_sound = 'sound/weapons/guns/fire/tank_minigun_start.ogg' + weapon_slot = MODULE_PRIMARY + secondary_equipped_icon = 'icons/obj/armored/3x3/tank_secondary_gun.dmi' + ammo = /obj/item/ammo_magazine/tank/ltaap_chaingun + accepted_ammo = list(/obj/item/ammo_magazine/tank/ltaap_chaingun) + fire_mode = GUN_FIREMODE_AUTOMATIC + variance = 15 + projectile_delay = 0.1 SECONDS + rearm_time = 3 SECONDS + maximum_magazines = 5 + hud_state_empty = "rifle_empty" + +/obj/item/armored_weapon/apc_cannon + name = "MKV-7 utility payload launcher" + desc = "A double barrelled cannon which can rapidly deploy utility packages to the battlefield." + icon_state = "APC uninstalled dualcannon" + fire_sound = 'sound/weapons/guns/fire/tank_smokelauncher.ogg' + ammo = /obj/item/ammo_magazine/tank/tank_slauncher + accepted_ammo = list( + /obj/item/ammo_magazine/tank/tank_slauncher, + /obj/item/ammo_magazine/tank/tank_glauncher, + ) + projectile_delay = 0.7 SECONDS + hud_state_empty = "grenade_empty" diff --git a/code/modules/vehicles/armored/interiors/ammo_rack.dm b/code/modules/vehicles/armored/interiors/ammo_rack.dm new file mode 100644 index 0000000000000..2a00fd06db84a --- /dev/null +++ b/code/modules/vehicles/armored/interiors/ammo_rack.dm @@ -0,0 +1,76 @@ + +/obj/structure/ammo_rack + icon = 'icons/obj/armored/3x3/tank_interior.dmi' + ///ref to the actual internal storage + var/obj/item/storage/internal/storage = /obj/item/storage/internal + +/obj/structure/ammo_rack/Initialize(mapload) + . = ..() + storage = new storage(src) + update_appearance(UPDATE_OVERLAYS) + +/obj/structure/ammo_rack/examine(mob/user) + . = ..() + . += "Right click to remove the topmost object." + +/obj/structure/ammo_rack/attack_hand(mob/living/user) + return storage.open(user) + +/obj/structure/ammo_rack/MouseDrop(obj/over_object) + if(storage.handle_mousedrop(usr, over_object)) + return ..() + +/obj/structure/ammo_rack/attackby(obj/item/I, mob/user, params) + ..() + return storage.attackby(I, user, params) + +/obj/structure/ammo_rack/attack_hand_alternate(mob/user) + ..() + return storage.attack_hand_alternate(user) + +/obj/structure/ammo_rack/update_overlays() + . = ..() + if(length(storage.contents)) + var/atom/bottommost = storage.contents[1] + var/total_w = 0 + for(var/obj/item/I AS in storage) + total_w += I.w_class + var/thirds = clamp(round(3 * (total_w / storage.max_storage_space)), 1, 3) + . += image(icon, src, bottommost.icon_state + "_" + "[thirds]") // "ltb_3"/"ltb_2"/"ltb_1" + +/obj/structure/ammo_rack/on_pocket_insertion() + update_appearance() + +/obj/structure/ammo_rack/on_pocket_removal() + update_appearance() + +/obj/structure/ammo_rack/primary + name = "primary ammo rack" + icon_state = "primaryrack" + storage = /obj/item/storage/internal/ammorack_primary + +/obj/structure/ammo_rack/primary/update_overlays() + . = ..() + . += image(icon, src, "primaryrack_overlay") + +/obj/structure/ammo_rack/secondary + name = "secondary ammo rack" + icon_state = "secondaryrack" + storage = /obj/item/storage/internal/ammorack_secondary + +/obj/item/storage/internal/ammorack_primary + max_storage_space = 120 //they're all WEIGHT_CLASS_GIGANTIC which is 6 + storage_slots = 20 + max_w_class = WEIGHT_CLASS_GIGANTIC + can_hold = list( + /obj/item/ammo_magazine/tank/ltb_cannon, + /obj/item/ammo_magazine/tank/ltaap_chaingun, + ) + +/obj/item/storage/internal/ammorack_secondary + max_storage_space = 120 + storage_slots = 20 + max_w_class = WEIGHT_CLASS_GIGANTIC + can_hold = list( + /obj/item/ammo_magazine/tank/secondary_cupola, + ) diff --git a/code/modules/vehicles/armored/interiors/breech.dm b/code/modules/vehicles/armored/interiors/breech.dm new file mode 100644 index 0000000000000..8bf620e31dd1f --- /dev/null +++ b/code/modules/vehicles/armored/interiors/breech.dm @@ -0,0 +1,157 @@ + +/obj/structure/gun_breech + name = "gun breech" + desc = "A gun breech used for loading large caliber rounds into the main gun." + icon = 'icons/obj/armored/3x3/tank_interior.dmi' + icon_state = "breech" + resistance_flags = RESIST_ALL + ///bool if this laods the secondary gun + var/is_secondary = FALSE + ///owner of this object, assigned during interior linkage + var/obj/vehicle/sealed/armored/owner + +/obj/structure/gun_breech/Destroy() + owner = null + return ..() + +/obj/structure/gun_breech/link_interior(datum/interior/link) + if(!istype(link, /datum/interior/armored)) + CRASH("invalid interior [link.type] passed to [name]") + var/datum/interior/armored/inside = link + if(!is_secondary) + inside.breech = src + else + inside.secondary_breech = src + owner = inside.container + +/obj/structure/gun_breech/attack_hand(mob/living/user) + . = ..() + var/obj/item/armored_weapon/weapon = is_secondary ? owner.secondary_weapon : owner.primary_weapon + if(!weapon) + balloon_alert(user, "no weapon") + return + if(!weapon.ammo) + balloon_alert(user, "breech empty") + return + if(user.do_actions) + balloon_alert(user, "busy") + return + if(!do_after(user, 1 SECONDS, NONE, src)) + return + owner.balloon_alert(user, "breech unloaded") + user.put_in_hands(weapon.ammo) + weapon.ammo.update_appearance() + weapon.ammo = null + +/obj/structure/gun_breech/attackby(obj/item/I, mob/user, params) + . = ..() + if(!istype(I, /obj/item/ammo_magazine)) + return + var/obj/item/ammo_magazine/mag = I + var/obj/item/armored_weapon/weapon = is_secondary ? owner.secondary_weapon : owner.primary_weapon + if(!reload_checks(user)) + return + if(!(mag.type in weapon.accepted_ammo)) + balloon_alert(user, "not accepted ammo") + return + if(user.do_actions) + balloon_alert(user, "busy") + return + var/channel = SSsounds.random_available_channel() + var/sound = 'sound/weapons/guns/interact/working_the_bolt.ogg' + if(istype(mag, /obj/item/ammo_magazine/tank)) + var/obj/item/ammo_magazine/tank/t_mag = mag + sound = islist(t_mag.loading_sound)? pick(t_mag.loading_sound):t_mag.loading_sound + playsound(src, sound, 20, channel = channel) + if(!do_after(user, weapon.rearm_time, NONE, src, extra_checks=CALLBACK(src, PROC_REF(reload_checks), user))) + for(var/mob/crew AS in owner.interior.occupants) + crew.stop_sound_channel(channel) + return + user.temporarilyRemoveItemFromInventory(mag) + mag.forceMove(weapon) + weapon.ammo = mag + user.say(is_secondary ? "Loaded!" : "Up!") + for(var/mob/occupant AS in owner.interior.occupants) + occupant.hud_used.update_ammo_hud(weapon, list( + mag.default_ammo.hud_state, + mag.default_ammo.hud_state_empty), + mag.current_rounds + ) + +///checks to perform while reloading +/obj/structure/gun_breech/proc/reload_checks(mob/user) + var/obj/item/armored_weapon/weapon = is_secondary ? owner.secondary_weapon : owner.primary_weapon + if(!weapon) + balloon_alert(user, "no weapon") + return FALSE + if(weapon.ammo) + balloon_alert(user, "already loaded") + return FALSE + return TRUE + +///called every time the firing animation is refreshed, not every actual fire +/obj/structure/gun_breech/proc/on_main_fire(obj/item/ammo_magazine/owner_ammo) + if(owner_ammo.default_ammo.ammo_behavior_flags & AMMO_ENERGY) // todo add puffs of smoke that fly out + return + if(owner_ammo.max_rounds == 1) + return + //todo get an animation for bullets flying out + var/turf/eject_loc = get_step(src, WEST) + var/obj/item/ammo_casing/cartridge/pile = locate(/obj/item/ammo_casing/cartridge) in eject_loc + if(!pile) + pile = new(eject_loc) + return + pile.current_casings += 1 + pile.update_appearance() + +///when we run out of ammo; how do we eject the magazine? +/obj/structure/gun_breech/proc/do_eject_ammo(obj/item/ammo_magazine/old_ammo) + old_ammo.forceMove(get_step(src, WEST)) + if(old_ammo.max_rounds != 1) + //todo make non shell and energy ejection anim? + return + old_ammo.pixel_x = 20 + old_ammo.pixel_y = 4 + var/matrix/hit_back_transform = matrix() + var/rand_spin = rand(-90, 90) + hit_back_transform.Turn(rand_spin) + var/hit_back_x = 6 + rand(-1, 1) + var/hit_back_y = -4 + rand(-1, 1) + + var/matrix/rest_transform = matrix() + rest_transform.Turn(rand_spin + rand(-45, 45)) + var/rest_x = 3 + rand(0, 10) + var/rest_y = -17 + rand(-2, 2) + + animate(old_ammo, time=3, easing=CUBIC_EASING|EASE_OUT, transform = hit_back_transform, pixel_x = hit_back_x, pixel_y = hit_back_y) + animate(time=3, easing=CUBIC_EASING|EASE_IN, transform = rest_transform, pixel_x = rest_x, pixel_y = rest_y) + var/obj/effect/abstract/particle_holder/smoke_visuals = new(src, /particles/breech_smoke) + QDEL_IN(smoke_visuals, 0.7 SECONDS) + +/particles/breech_smoke + icon = 'icons/effects/effects.dmi' + icon_state = "smoke" + width = 300 + height = 300 + count = 20 + spawning = 20 + lifespan = 1 SECONDS + fade = 8 SECONDS + grow = 0.1 + scale = 0.2 + spin = generator(GEN_NUM, -20, 20) + velocity = list(-4, 0) + position = list(-2, 2) + gravity = list(0, 2) + friction = generator(GEN_NUM, 0.1, 0.5) + +/obj/structure/gun_breech/secondary + name = "secondary loading mechanism" + desc = "A feeding mechanism for loading ammo into the secondary weapon." + icon_state = "secondary_breech" + is_secondary = TRUE + +/obj/structure/gun_breech/secondary/do_eject_ammo(obj/item/ammo_magazine/old_ammo) + old_ammo.forceMove(get_turf(src)) + old_ammo.pixel_x = rand(-10, 10) + old_ammo.pixel_y = rand(-10, 10) diff --git a/code/modules/vehicles/armored/interiors/chairs.dm b/code/modules/vehicles/armored/interiors/chairs.dm new file mode 100644 index 0000000000000..61fb317dbcb0f --- /dev/null +++ b/code/modules/vehicles/armored/interiors/chairs.dm @@ -0,0 +1,89 @@ + +/obj/structure/bed/chair/loader_seat + name = "loader seat" + icon = 'icons/obj/armored/3x3/tank_interior.dmi' + icon_state = "vehicle_chair" + resistance_flags = RESIST_ALL + dir = EAST + + +/obj/structure/bed/chair/vehicle_driver_seat + name = "driver seat" + icon = 'icons/obj/armored/3x3/tank_interior.dmi' + icon_state = "vehicle_chair" + resistance_flags = RESIST_ALL + dir = EAST + ///owner of this object, assigned during interior linkage + var/obj/vehicle/sealed/armored/owner + +/obj/structure/bed/chair/vehicle_driver_seat/Destroy() + owner = null + return ..() + +/obj/structure/bed/chair/vehicle_driver_seat/link_interior(datum/interior/link) + if(!istype(link, /datum/interior/armored)) + CRASH("invalid interior [link.type] passed to [name]") + var/datum/interior/armored/inside = link + inside.drive_seat = src + owner = inside.container + +/obj/structure/bed/chair/vehicle_driver_seat/buckle_mob(mob/living/buckling_mob, force, check_loc, lying_buckle, hands_needed, target_hands_needed, silent) + if(buckling_mob.skills.getRating(SKILL_LARGE_VEHICLE) < SKILL_LARGE_VEHICLE_VETERAN) + return FALSE + return ..() + +/obj/structure/bed/chair/vehicle_driver_seat/post_buckle_mob(mob/buckling_mob) + . = ..() + owner.add_control_flags(buckling_mob, VEHICLE_CONTROL_DRIVE|VEHICLE_CONTROL_SETTINGS) + buckling_mob.reset_perspective(owner) + buckling_mob.pixel_x = pixel_x + buckling_mob.pixel_y = pixel_y + +/obj/structure/bed/chair/vehicle_driver_seat/post_unbuckle_mob(mob/buckled_mob) + . = ..() + owner.remove_control_flags(buckled_mob, VEHICLE_CONTROL_DRIVE|VEHICLE_CONTROL_SETTINGS) + buckled_mob.reset_perspective() + buckled_mob.pixel_x = initial(buckled_mob.pixel_x) + buckled_mob.pixel_y = initial(buckled_mob.pixel_y) + +/obj/structure/bed/chair/vehicle_driver_seat/relaymove(mob/living/user, direct) + return owner.relaymove(arglist(args)) + + +/obj/structure/bed/chair/vehicle_gunner_seat + name = "gunner seat" + icon = 'icons/obj/armored/3x3/tank_interior.dmi' + icon_state = "vehicle_chair" + resistance_flags = RESIST_ALL + dir = EAST + ///owner of this object, assigned during interior linkage + var/obj/vehicle/sealed/armored/owner + +/obj/structure/bed/chair/vehicle_gunner_seat/link_interior(datum/interior/link) + if(!istype(link, /datum/interior/armored)) + CRASH("invalid interior [link.type] passed to [name]") + var/datum/interior/armored/inside = link + inside.gun_seat = src + owner = inside.container + +/obj/structure/bed/chair/vehicle_gunner_seat/buckle_mob(mob/living/buckling_mob, force, check_loc, lying_buckle, hands_needed, target_hands_needed, silent) + if(buckling_mob.skills.getRating(SKILL_LARGE_VEHICLE) < SKILL_LARGE_VEHICLE_VETERAN) + return FALSE + return ..() + +/obj/structure/bed/chair/vehicle_gunner_seat/post_buckle_mob(mob/buckling_mob) + . = ..() + owner.add_control_flags(buckling_mob, VEHICLE_CONTROL_MELEE|VEHICLE_CONTROL_EQUIPMENT) + buckling_mob.reset_perspective(owner) + buckling_mob.pixel_x = pixel_x + buckling_mob.pixel_y = pixel_y + +/obj/structure/bed/chair/vehicle_gunner_seat/post_unbuckle_mob(mob/buckled_mob) + . = ..() + owner.remove_control_flags(buckled_mob, VEHICLE_CONTROL_MELEE|VEHICLE_CONTROL_EQUIPMENT) + buckled_mob.reset_perspective() + buckled_mob.pixel_x = initial(buckled_mob.pixel_x) + buckled_mob.pixel_y = initial(buckled_mob.pixel_y) + +/obj/structure/bed/chair/vehicle_gunner_seat/relaymove(mob/living/user, direct) + return owner.relaymove(arglist(args)) diff --git a/code/modules/vehicles/armored/interiors/periscope.dm b/code/modules/vehicles/armored/interiors/periscope.dm new file mode 100644 index 0000000000000..169c8e3befd24 --- /dev/null +++ b/code/modules/vehicles/armored/interiors/periscope.dm @@ -0,0 +1,34 @@ + +/obj/structure/periscope + name = "tank periscope" + desc = "A periscope for viewing the outside of the vehicle. Resist or move to stop looking through it." + icon = 'icons/obj/armored/3x3/tank_interior.dmi' + icon_state = "periscope" + density = FALSE + resistance_flags = RESIST_ALL + ///owner of this object, assigned during interior linkage + var/obj/vehicle/sealed/armored/owner + +/obj/structure/periscope/Destroy() + owner = null + return ..() + +/obj/structure/periscope/link_interior(datum/interior/link) + owner = link.container + +/obj/structure/periscope/attack_hand(mob/living/user) + . = ..() + user.reset_perspective(owner) + ADD_TRAIT(user, TRAIT_SEE_IN_DARK, VEHICLE_TRAIT) + user.update_sight() + user.client.view_size.set_view_radius_to(4.5) + RegisterSignals(user, list(COMSIG_MOVABLE_MOVED, COMSIG_LIVING_DO_RESIST, COMSIG_MOB_LOGOUT), PROC_REF(stop_looking)) + +///signal handler for canceling the looking +/obj/structure/periscope/proc/stop_looking(mob/source) + SIGNAL_HANDLER + UnregisterSignal(source, list(COMSIG_MOVABLE_MOVED, COMSIG_LIVING_DO_RESIST, COMSIG_MOB_LOGOUT)) + source.reset_perspective() + REMOVE_TRAIT(source, TRAIT_SEE_IN_DARK, VEHICLE_TRAIT) + source.client.view_size.reset_to_default() + source.update_sight() diff --git a/code/modules/vehicles/armored/medium_apc.dm b/code/modules/vehicles/armored/medium_apc.dm new file mode 100644 index 0000000000000..ec0996a2b5279 --- /dev/null +++ b/code/modules/vehicles/armored/medium_apc.dm @@ -0,0 +1,16 @@ +/obj/vehicle/sealed/armored/multitile/medium/apc + name = "TAV - Nike" + desc = "A heavily armoured vehicle with light armaments designed to ferry troops around the battlefield, or assist with search and rescue (SAR) operations." + icon = 'icons/obj/armored/2x2/medium_vehicles.dmi' + turret_icon = 'icons/obj/armored/2x2/medium_vehicles.dmi' + turret_icon_state = "apc_turret" + damage_icon_path = null + interior = null + required_entry_skill = SKILL_LARGE_VEHICLE_DEFAULT + minimap_icon_state = null + armored_flags = ARMORED_HAS_PRIMARY_WEAPON|ARMORED_HAS_SECONDARY_WEAPON|ARMORED_HAS_UNDERLAY + icon_state = "apc" + move_delay = 0.25 SECONDS + max_occupants = 5 + primary_weapon_type = /obj/item/armored_weapon/apc_cannon //Only has a utility launcher, no offense as standard. + secondary_weapon_type = null diff --git a/code/modules/vehicles/armored/medium_tank.dm b/code/modules/vehicles/armored/medium_tank.dm new file mode 100644 index 0000000000000..d6e8b85ddf5d1 --- /dev/null +++ b/code/modules/vehicles/armored/medium_tank.dm @@ -0,0 +1,20 @@ +/obj/vehicle/sealed/armored/multitile/medium //Its a smaller tank, we had sprites for it so whoo + name = "THV - Hades" + desc = "A metal behemoth which is designed to cleave through enemy lines. It comes pre installed with a main tank cannon capable of deploying heavy payloads, as well as a minigun which can tear through multiple targets in quick succession." + icon = 'icons/obj/armored/2x2/medium_vehicles.dmi' + turret_icon = 'icons/obj/armored/2x2/medium_vehicles.dmi' + turret_icon_state = "tank_turret" + hitbox = /obj/hitbox/medium + secondary_turret_icon = null + damage_icon_path = null + interior = null + icon_state = "tank" + armored_flags = ARMORED_HAS_PRIMARY_WEAPON|ARMORED_HAS_UNDERLAY + pixel_x = -16 + pixel_y = -32 + obj_integrity = 1300 + max_integrity = 1300 + max_occupants = 3 + +/obj/vehicle/sealed/armored/multitile/medium/enter_locations(mob/M) + return list(get_step(src, REVERSE_DIR(dir))) diff --git a/code/modules/vehicles/armored/small_apc.dm b/code/modules/vehicles/armored/small_apc.dm new file mode 100644 index 0000000000000..27c8c1bc17756 --- /dev/null +++ b/code/modules/vehicles/armored/small_apc.dm @@ -0,0 +1,15 @@ +/obj/vehicle/sealed/armored/apc + name = "TAV - Nike" + desc = "A miniaturized replica of a popular personnel carrier. For ages 5 and up." + icon = 'icons/obj/armored/1x1/tinytank.dmi' + turret_icon = 'icons/obj/armored/1x1/tinytank_gun.dmi' + turret_icon_state = "apc_turret" + icon_state = "apc" + armored_flags = NONE + move_delay = 0.3 SECONDS + armored_flags = NONE + pixel_x = -16 + pixel_y = -8 + max_occupants = 3 + primary_weapon_type = null + secondary_weapon_type = null diff --git a/code/modules/vehicles/armored/tank_fabricator.dm b/code/modules/vehicles/armored/tank_fabricator.dm new file mode 100644 index 0000000000000..d15bec0c721a7 --- /dev/null +++ b/code/modules/vehicles/armored/tank_fabricator.dm @@ -0,0 +1,9 @@ +/obj/machinery/tank_part_fabricator + name = "vehicle part fabricator" + desc = "A large automated 3D printer for producing new vehicle parts and maintaining old ones." + density = TRUE + anchored = TRUE + use_power = IDLE_POWER_USE + idle_power_usage = 20 + icon = 'icons/obj/machines/drone_fab.dmi' + icon_state = "drone_fab_idle" diff --git a/code/modules/vehicles/armored/vehicle_collision.dm b/code/modules/vehicles/armored/vehicle_collision.dm new file mode 100644 index 0000000000000..37692e63868fb --- /dev/null +++ b/code/modules/vehicles/armored/vehicle_collision.dm @@ -0,0 +1,64 @@ +/** + *This proc is called when a atom is crashed into by a [armored vehicle][/obj/vehicle/sealed/armored]. Damage is then dealt to both the vehicle and atom + * + * * Arguments: + * * veh is the vehicle that is ramming + * * facing is the direction the vehicle is facing for when we ram it + * * T is the turf where the vehicle is used with- + * * temp to check whether a mob is squished + */ +/atom/proc/vehicle_collision(obj/vehicle/sealed/armored/veh, facing, turf/T, turf/temp) + var/damage = veh.ram_damage // Each vehicle gets its own damage, you can modify it with snowplows and such ideally + + if(!TIMER_COOLDOWN_CHECK(veh, COOLDOWN_VEHICLE_CRUSHSOUND)) + visible_message(span_danger("[veh] rams [src]!")) + playsound(src, 'sound/effects/metal_crash.ogg', 45) + TIMER_COOLDOWN_START(veh, COOLDOWN_VEHICLE_CRUSHSOUND, 1 SECONDS) + return damage + +/obj/structure/vehicle_collision(obj/vehicle/sealed/armored/veh, facing, turf/T, turf/temp) + . = ..() + take_damage(., BRUTE, MELEE, TRUE, facing, 0) + +/obj/structure/barricade/plasteel/vehicle_collision(obj/vehicle/sealed/armored/veh, facing, turf/T, turf/temp) + . = ..() + toggle_open(FALSE) + +/obj/vehicle/vehicle_collision(obj/vehicle/sealed/armored/veh, facing, turf/T, turf/temp) //MONSTER TRUCKS + . = ..() + take_damage(., BRUTE, MELEE, TRUE, facing, 0) + +/obj/machinery/vehicle_collision(obj/vehicle/sealed/armored/veh, facing, turf/T, turf/temp) + . = ..() + take_damage(., BRUTE, MELEE, TRUE, facing, 0) + +/turf/closed/wall/vehicle_collision(obj/vehicle/sealed/armored/veh, facing, turf/T, turf/temp) + . = ..() + take_damage(., BRUTE, MELEE, TRUE, facing, 0) + +/mob/living/vehicle_collision(obj/vehicle/sealed/armored/veh, facing, turf/T, turf/temp, mob/pilot) + . = ..() + if(stat == DEAD) + return 0 + if(lying_angle) + return 0 + log_attack("[key_name(pilot)] drove into [key_name(src)] with [veh]") + temp = get_step(veh.loc, facing) + T = temp + T = get_step(T, facing) + T = get_step(T, facing) + T = get_step(T, facing) + face_atom(T) + throw_at(T, 3, 2, veh, 1) + return take_overall_damage(., BRUTE, MELEE, FALSE, FALSE, TRUE, 0, 4) + + +/mob/living/carbon/xenomorph/larva/vehicle_collision(obj/vehicle/sealed/armored/veh, facing, turf/T, turf/temp) + gib() //fuck you + +/obj/effect/alien/vehicle_collision(obj/vehicle/sealed/armored/veh, facing, turf/T, turf/temp) + . = ..() + take_damage(., BRUTE, MELEE, TRUE, facing, 0) + +/obj/effect/alien/weeds/vehicle_collision(obj/vehicle/sealed/armored/veh, facing, turf/T, turf/temp) + return diff --git a/code/modules/vehicles/atv.dm b/code/modules/vehicles/atv.dm index a697f30646575..5328827da2f79 100644 --- a/code/modules/vehicles/atv.dm +++ b/code/modules/vehicles/atv.dm @@ -47,7 +47,7 @@ buckled_mob.bullet_act(P) return TRUE -/obj/vehicle/ridden/atv/obj_destruction() +/obj/vehicle/ridden/atv/obj_destruction(damage_amount, damage_type, damage_flag, mob/living/blame_mob) explosion(src, devastation_range = -1, light_impact_range = 2, flame_range = 3, flash_range = 4) return ..() diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm index 4997d33549848..cb9a009bdd437 100644 --- a/code/modules/vehicles/cargo_train.dm +++ b/code/modules/vehicles/cargo_train.dm @@ -55,6 +55,8 @@ /obj/vehicle/train/cargo/engine/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/key/cargo_train)) if(key) @@ -65,7 +67,8 @@ verbs += /obj/vehicle/train/cargo/engine/verb/remove_key -/obj/vehicle/train/cargo/update_icon() +/obj/vehicle/train/cargo/update_icon_state() + . = ..() if(open) icon_state = initial(icon_state) + "_open" else diff --git a/code/modules/vehicles/cars/car.dm b/code/modules/vehicles/cars/car.dm index 42efcee22e8e2..52460f0fa2222 100644 --- a/code/modules/vehicles/cars/car.dm +++ b/code/modules/vehicles/cars/car.dm @@ -1,6 +1,7 @@ /obj/vehicle/sealed/car layer = ABOVE_MOB_LAYER move_resist = MOVE_FORCE_VERY_STRONG + move_delay = 1 ///Bitflags for special behavior such as kidnapping var/car_traits = NONE ///Sound file(s) to play when we drive around @@ -9,8 +10,6 @@ var/engine_sound_length = 2 SECONDS ///Time it takes to break out of the car. var/escape_time = 6 SECONDS - /// How long it takes to move, cars don't use the riding component similar to mechs so we handle it ourselves - var/vehicle_move_delay = 1 /// How long it takes to rev (vrrm vrrm!) COOLDOWN_DECLARE(enginesound_cooldown) @@ -72,20 +71,20 @@ kidnapped.forceMove(src) add_occupant(kidnapped, VEHICLE_CONTROL_KIDNAPPED) -/obj/vehicle/sealed/car/obj_destruction(damage_flag) +/obj/vehicle/sealed/car/obj_destruction(damage_amount, damage_type, damage_flag, mob/living/blame_mob) explosion(src, heavy_impact_range = 1, light_impact_range = 2, flash_range = 3, adminlog = FALSE) log_message("[src] exploded due to destruction", LOG_ATTACK) return ..() /obj/vehicle/sealed/car/relaymove(mob/living/user, direction) if(is_driver(user) && canmove && (!key_type || istype(inserted_key, key_type))) - vehicle_move(direction) + vehicle_move(user, direction) return TRUE -/obj/vehicle/sealed/car/vehicle_move(direction) - if(!COOLDOWN_CHECK(src, cooldown_vehicle_move)) - return FALSE - COOLDOWN_START(src, cooldown_vehicle_move, vehicle_move_delay) +/obj/vehicle/sealed/car/vehicle_move(mob/living/user, direction) + . = ..() + if(!.) + return if(COOLDOWN_CHECK(src, enginesound_cooldown)) COOLDOWN_START(src, enginesound_cooldown, engine_sound_length) diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm index 0883f6de7c386..b398ab8d1ac87 100644 --- a/code/modules/vehicles/mecha/_mecha.dm +++ b/code/modules/vehicles/mecha/_mecha.dm @@ -22,9 +22,9 @@ desc = "Exosuit" icon = 'icons/mecha/mecha.dmi' move_force = MOVE_FORCE_VERY_STRONG - move_resist = MOVE_FORCE_OVERPOWERING + move_resist = MOVE_FORCE_EXCEPTIONALLY_STRONG resistance_flags = UNACIDABLE|XENO_DAMAGEABLE|PORTAL_IMMUNE|PLASMACUTTER_IMMUNE - flags_atom = BUMP_ATTACKABLE|PREVENT_CONTENTS_EXPLOSION + atom_flags = BUMP_ATTACKABLE|PREVENT_CONTENTS_EXPLOSION max_integrity = 300 soft_armor = list(MELEE = 20, BULLET = 10, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, FIRE = 100, ACID = 100) force = 5 @@ -190,13 +190,15 @@ var/ui_y = 600 /// ref to screen object that displays in the middle of the UI var/atom/movable/screen/mech_view/ui_view + ///Current owning faction + var/faction /obj/item/radio/mech //this has to go somewhere subspace_transmission = TRUE /obj/vehicle/sealed/mecha/Initialize(mapload) . = ..() - ui_view = new(null, src) + ui_view = new(null, null, src) if(enclosed) internal_tank = new (src) RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(play_stepsound)) @@ -266,7 +268,16 @@ mech_status_hud.remove_from_hud(src) return ..() -/obj/vehicle/sealed/mecha/obj_destruction(damage_amount, damage_type, damage_flag) +/obj/vehicle/sealed/mecha/obj_destruction(damage_amount, damage_type, damage_flag, mob/living/blame_mob) + if(istype(blame_mob) && blame_mob.ckey) + var/datum/personal_statistics/personal_statistics = GLOB.personal_statistics_list[blame_mob.ckey] + if(faction == blame_mob.faction) + personal_statistics.mechs_destroyed -- //bruh + personal_statistics.mission_mechs_destroyed -- + else + personal_statistics.mechs_destroyed ++ + personal_statistics.mission_mechs_destroyed ++ + spark_system?.start() var/mob/living/silicon/ai/unlucky_ais @@ -368,6 +379,7 @@ initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_lights, VEHICLE_CONTROL_SETTINGS) initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/mech_view_stats, VEHICLE_CONTROL_SETTINGS) initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/strafe, VEHICLE_CONTROL_DRIVE) + initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/reload, VEHICLE_CONTROL_EQUIPMENT) /obj/vehicle/sealed/mecha/proc/get_mecha_occupancy_state() if((mecha_flags & SILICON_PILOT) && silicon_icon_state) @@ -532,7 +544,7 @@ if(internal_damage & MECHA_INT_CONTROL_LOST) target = pick(view(3,target)) var/mob/living/livinguser = user - if(!(livinguser in return_controllers_with_flag(VEHICLE_CONTROL_EQUIPMENT))) + if(!is_equipment_controller(user)) balloon_alert(user, "wrong seat for equipment!") return var/obj/item/mecha_parts/mecha_equipment/selected diff --git a/code/modules/vehicles/mecha/combat/greyscale/greyscale.dm b/code/modules/vehicles/mecha/combat/greyscale/greyscale.dm index 1d2a6d4aac35a..c94d6c6d5c8ea 100644 --- a/code/modules/vehicles/mecha/combat/greyscale/greyscale.dm +++ b/code/modules/vehicles/mecha/combat/greyscale/greyscale.dm @@ -66,7 +66,7 @@ /obj/vehicle/sealed/mecha/combat/greyscale/mob_try_enter(mob/M) - if((mecha_flags & MECHA_SKILL_LOCKED) && M.skills.getRating(SKILL_LARGE_VEHICLE) < SKILL_LARGE_VEHICLE_TRAINED) + if((mecha_flags & MECHA_SKILL_LOCKED) && M.skills.getRating(SKILL_LARGE_VEHICLE) < SKILL_LARGE_VEHICLE_VETERAN) balloon_alert(M, "You don't know how to pilot this") return FALSE return ..() diff --git a/code/modules/vehicles/mecha/combat/greyscale/greyscale_constructor.dm b/code/modules/vehicles/mecha/combat/greyscale/greyscale_constructor.dm index cb8067cda5551..f1d1f76b3608f 100644 --- a/code/modules/vehicles/mecha/combat/greyscale/greyscale_constructor.dm +++ b/code/modules/vehicles/mecha/combat/greyscale/greyscale_constructor.dm @@ -71,7 +71,7 @@ GLOBAL_LIST_INIT(greyscale_weapons_data, generate_greyscale_weapons_data()) ///list of plane masters to apply to owners var/list/plane_masters = list() -/atom/movable/screen/mech_builder_view/Initialize(mapload) +/atom/movable/screen/mech_builder_view/Initialize(mapload, datum/hud/hud_owner) . = ..() assigned_map = "mech_preview_[REF(src)]" set_position(1, 1) @@ -89,6 +89,7 @@ GLOBAL_LIST_INIT(greyscale_weapons_data, generate_greyscale_weapons_data()) screen_overlay = "mech_computer" dir = EAST // determines where the mech will pop out, NOT where the computer faces interaction_flags = INTERACT_OBJ_UI + req_access = list(ACCESS_MARINE_MECH) ///current selected name for the mech var/selected_name = "TGMC Combat Mech" @@ -175,7 +176,7 @@ GLOBAL_LIST_INIT(greyscale_weapons_data, generate_greyscale_weapons_data()) . = ..() if(!.) return - if(user.skills.getRating(SKILL_LARGE_VEHICLE) < SKILL_LARGE_VEHICLE_TRAINED) + if(user.skills.getRating(SKILL_LARGE_VEHICLE) < SKILL_LARGE_VEHICLE_VETERAN) return FALSE /obj/machinery/computer/mech_builder/ui_interact(mob/user, datum/tgui/ui) diff --git a/code/modules/vehicles/mecha/combat/gygax.dm b/code/modules/vehicles/mecha/combat/gygax.dm index e3599e6ba811e..0cf17b017e182 100644 --- a/code/modules/vehicles/mecha/combat/gygax.dm +++ b/code/modules/vehicles/mecha/combat/gygax.dm @@ -27,6 +27,9 @@ /datum/action/vehicle/sealed/mecha/mech_overload_mode name = "Toggle leg actuators overload" action_icon_state = "mech_overload_off" + keybinding_signals = list( + KEYBINDING_NORMAL = COMSIG_MECHABILITY_TOGGLE_ACTUATORS, + ) /datum/action/vehicle/sealed/mecha/mech_overload_mode/action_activate(trigger_flags, forced_state = null) if(!owner || !chassis || !(owner in chassis.occupants)) diff --git a/code/modules/vehicles/mecha/equipment/mecha_equipment.dm b/code/modules/vehicles/mecha/equipment/mecha_equipment.dm index 9335569769c4a..282ab096fa4f4 100644 --- a/code/modules/vehicles/mecha/equipment/mecha_equipment.dm +++ b/code/modules/vehicles/mecha/equipment/mecha_equipment.dm @@ -193,13 +193,14 @@ /obj/item/mecha_parts/mecha_equipment/proc/get_snowflake_data() return list() -/** - * Proc for reloading weapons from HTML UI or by AI - * note that this is old and likely broken code - */ +///Tries to rearm the module +/obj/item/mecha_parts/mecha_equipment/proc/attempt_rearm() + return FALSE + +///Rearms the module /obj/item/mecha_parts/mecha_equipment/proc/rearm() return FALSE -/// AI mech pilot: returns TRUE if the Ai should try to reload the mecha +///Checks if the module actually need rearming /obj/item/mecha_parts/mecha_equipment/proc/needs_rearm() return FALSE diff --git a/code/modules/vehicles/mecha/equipment/tools/greyscale_tools.dm b/code/modules/vehicles/mecha/equipment/tools/greyscale_tools.dm index 3fb57b3eefcf8..fe3e1de6ecf83 100644 --- a/code/modules/vehicles/mecha/equipment/tools/greyscale_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/greyscale_tools.dm @@ -20,13 +20,13 @@ /obj/item/mecha_parts/mecha_equipment/armor/explosive name = "explosive armor booster" - desc = "Increases armor against explosions by 50%." + desc = "Increases armor against explosions by 25%." icon_state = "armor_explosive" iconstate_name = "armor_explosive" protect_name = "Explosive Armor" mech_flags = EXOSUIT_MODULE_GREYSCALE slowdown = 0.3 - armor_mod = list(BOMB = 50) + armor_mod = list(BOMB = 25) /obj/item/mecha_parts/mecha_equipment/generator/greyscale diff --git a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm index 81e2d39142bf9..209c9cadea4e4 100644 --- a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm @@ -168,6 +168,8 @@ /obj/item/mecha_parts/mecha_equipment/generator/attackby(weapon, mob/user, params) . = ..() + if(.) + return load_fuel(weapon, user) /obj/item/mecha_parts/mecha_equipment/generator/proc/load_fuel(obj/item/stack/sheet/P, mob/user) diff --git a/code/modules/vehicles/mecha/equipment/weapons/greyscale_weapons.dm b/code/modules/vehicles/mecha/equipment/weapons/greyscale_weapons.dm index 30de54780b408..ff3981a506622 100644 --- a/code/modules/vehicles/mecha/equipment/weapons/greyscale_weapons.dm +++ b/code/modules/vehicles/mecha/equipment/weapons/greyscale_weapons.dm @@ -473,7 +473,7 @@ new /obj/effect/temp_visual/xenomorph/afterimage(chassis.loc, chassis) RegisterSignal(chassis, COMSIG_MOVABLE_POST_THROW, PROC_REF(end_dash)) cutter = source - chassis.flags_atom |= DIRLOCK + chassis.atom_flags |= DIRLOCK RegisterSignal(chassis, COMSIG_MOVABLE_MOVED, PROC_REF(drop_afterimage)) chassis.throw_at(target, laser_dash_range, 1, flying = TRUE) return ..() @@ -492,7 +492,7 @@ chassis.update_icon() execute_melee(cutter) cutter = null - chassis.flags_atom &= ~DIRLOCK + chassis.atom_flags &= ~DIRLOCK ///executes a melee attack in the direction that the mech is facing /obj/item/mecha_parts/mecha_equipment/laser_sword/proc/execute_melee(mob/source, list/modifiers) diff --git a/code/modules/vehicles/mecha/equipment/weapons/mecha_ammo.dm b/code/modules/vehicles/mecha/equipment/weapons/mecha_ammo.dm index 10bbd2b5b4d6e..713df84d38521 100644 --- a/code/modules/vehicles/mecha/equipment/weapons/mecha_ammo.dm +++ b/code/modules/vehicles/mecha/equipment/weapons/mecha_ammo.dm @@ -97,7 +97,7 @@ //greyscale mech stuff /obj/item/mecha_ammo/vendable w_class = WEIGHT_CLASS_BULKY - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK /obj/item/mecha_ammo/vendable/lmg name = "box of LMG bullets" diff --git a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm index 7e9f9a41c528e..f551f511acbc3 100644 --- a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm +++ b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm @@ -143,21 +143,14 @@ var/obj/vehicle/sealed/mecha/combat/greyscale/grey = chassis var/datum/mech_limb/head/head = grey.limbs[MECH_GREY_HEAD] if(head) - projectile_to_fire.accuracy *= head.accuracy_mod - var/datum/mech_limb/arm/holding - if(grey.equip_by_category[MECHA_R_ARM] == src) - holding = grey.limbs[MECH_GREY_R_ARM] - else - holding = grey.limbs[MECH_GREY_L_ARM] - projectile_to_fire.scatter = max(variance + holding?.scatter_mod, 0) + projectile_to_fire.accuracy *= head.accuracy_mod //todo: we can probably just make the accuracy_mod apply directly to the gun like attachments do projectile_to_fire.projectile_speed = projectile_to_fire.ammo.shell_speed - if(projectile_to_fire.ammo.flags_ammo_behavior & AMMO_IFF) - var/iff_signal - if(ishuman(firer)) - var/mob/living/carbon/human/human_firer = firer - var/obj/item/card/id/id = human_firer.get_idcard() - iff_signal = id?.iff_signal - projectile_to_fire.iff_signal = iff_signal + if((projectile_to_fire.ammo.ammo_behavior_flags & AMMO_IFF) && ishuman(firer)) + var/mob/living/carbon/human/human_firer = firer + var/obj/item/card/id/id = human_firer.get_idcard() + projectile_to_fire.iff_signal = id?.iff_signal + if(firer) + projectile_to_fire.def_zone = firer.zone_selected ///actually executes firing when autofire asks for it, returns TRUE to keep firing FALSE to stop /obj/item/mecha_parts/mecha_equipment/weapon/proc/fire() @@ -167,15 +160,24 @@ if(dir_target_diff > (MECH_FIRE_CONE_ALLOWED / 2)) return AUTOFIRE_CONTINUE - var/type_to_spawn = CHECK_BITFIELD(initial(ammotype.flags_ammo_behavior), AMMO_HITSCAN) ? /obj/projectile/hitscan : /obj/projectile + var/type_to_spawn = CHECK_BITFIELD(initial(ammotype.ammo_behavior_flags), AMMO_HITSCAN) ? /obj/projectile/hitscan : /obj/projectile var/obj/projectile/projectile_to_fire = new type_to_spawn(get_turf(src), initial(ammotype.hitscan_effect_icon)) projectile_to_fire.generate_bullet(GLOB.ammo_list[ammotype]) apply_weapon_modifiers(projectile_to_fire, current_firer) - var/firing_angle = get_angle_with_scatter(chassis, current_target, projectile_to_fire.scatter, projectile_to_fire.p_x, projectile_to_fire.p_y) + var/proj_scatter = variance + if(istype(chassis, /obj/vehicle/sealed/mecha/combat/greyscale)) + var/obj/vehicle/sealed/mecha/combat/greyscale/grey = chassis + var/datum/mech_limb/arm/holding + if(grey.equip_by_category[MECHA_R_ARM] == src) + holding = grey.limbs[MECH_GREY_R_ARM] + else + holding = grey.limbs[MECH_GREY_L_ARM] + proj_scatter += holding.scatter_mod //todo: we can probably just make the scatter_modmod apply directly to the gun like attachments do + var/firing_angle = get_angle_with_scatter(chassis, current_target, max(proj_scatter, 0), projectile_to_fire.p_x, projectile_to_fire.p_y) playsound(chassis, fire_sound, 25, TRUE) - projectile_to_fire.fire_at(current_target, chassis, null, projectile_to_fire.ammo.max_range, projectile_to_fire.projectile_speed, firing_angle, suppress_light = HAS_TRAIT(src, TRAIT_GUN_SILENCED)) + projectile_to_fire.fire_at(current_target, current_firer, chassis, projectile_to_fire.ammo.max_range, projectile_to_fire.projectile_speed, firing_angle, suppress_light = HAS_TRAIT(src, TRAIT_GUN_SILENCED)) chassis.use_power(energy_drain) chassis.log_message("Fired from [name], targeting [current_target] at [AREACOORD(current_target)].", LOG_ATTACK) @@ -270,11 +272,16 @@ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(action == "reload") - var/mob/occupant = usr - if(occupant && !do_after(occupant, rearm_time, IGNORE_HELD_ITEM, chassis, BUSY_ICON_GENERIC)) - return FALSE - rearm() - return TRUE + return attempt_rearm(usr) + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/attempt_rearm(mob/living/user) + if(!needs_rearm()) + return FALSE + if(!projectiles_cache) + return FALSE + if(user && !do_after(user, rearm_time, IGNORE_HELD_ITEM, chassis, BUSY_ICON_GENERIC)) + return FALSE + return rearm() /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/rearm() if(projectiles >= initial(projectiles)) @@ -294,7 +301,7 @@ return TRUE /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/needs_rearm() - return projectiles <= 0 + return projectiles < initial(projectiles) /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/fire() . = ..() @@ -306,11 +313,7 @@ if(projectiles > 0) return playsound(src, 'sound/weapons/guns/misc/empty_alarm.ogg', 25, 1) - if(LAZYACCESS(current_firer.do_actions, src) || projectiles_cache < 1) - return - if(!do_after(current_firer, rearm_time, IGNORE_HELD_ITEM, chassis, BUSY_ICON_GENERIC)) - return - rearm() + attempt_rearm(current_firer) /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine name = "\improper FNX-99 \"Hades\" Carbine" diff --git a/code/modules/vehicles/mecha/mech_bay.dm b/code/modules/vehicles/mecha/mech_bay.dm index de5f7577e829d..c96fc83b39e5c 100644 --- a/code/modules/vehicles/mecha/mech_bay.dm +++ b/code/modules/vehicles/mecha/mech_bay.dm @@ -117,7 +117,7 @@ if(!recharging_mech) return data - data["recharge_port"]["mech"] = list("health" = recharging_mech.obj_integrity, "maxhealth" = recharging_mech.max_integrity, "cell" = null, "name" = recharging_mech.name,) + data["recharge_port"]["mech"] = list("health" = recharging_mech.obj_integrity, "maxhealth" = recharging_mech.max_integrity, "cell" = null, "name" = recharging_mech.name) if(QDELETED(recharging_mech.cell)) return data diff --git a/code/modules/vehicles/mecha/mecha_actions.dm b/code/modules/vehicles/mecha/mecha_actions.dm index 8b791b96f0d8c..0799ec056b739 100644 --- a/code/modules/vehicles/mecha/mecha_actions.dm +++ b/code/modules/vehicles/mecha/mecha_actions.dm @@ -83,7 +83,6 @@ chassis.ui_interact(owner) - /datum/action/vehicle/sealed/mecha/strafe name = "Toggle Strafing. Disabled when Alt is held." action_icon_state = "strafe" @@ -147,4 +146,20 @@ chassis.balloon_alert(owner, "controlling pilot seat") chassis.remove_control_flags(owner, VEHICLE_CONTROL_MELEE|VEHICLE_CONTROL_EQUIPMENT) chassis.add_control_flags(owner, VEHICLE_CONTROL_DRIVE|VEHICLE_CONTROL_SETTINGS) - chassis.update_icon_state() + chassis.update_appearance() + +/datum/action/vehicle/sealed/mecha/reload + name = "Reload equipped weapons" + action_icon_state = "reload" + keybinding_signals = list( + KEYBINDING_NORMAL = COMSIG_MECHABILITY_RELOAD, + ) + +/datum/action/vehicle/sealed/mecha/reload/action_activate(trigger_flags) + if(!owner || !chassis || !(owner in chassis.occupants)) + return + + for(var/i in chassis.equip_by_category) + if(!istype(chassis.equip_by_category[i], /obj/item/mecha_parts/mecha_equipment)) + continue + INVOKE_ASYNC(chassis.equip_by_category[i], TYPE_PROC_REF(/obj/item/mecha_parts/mecha_equipment, attempt_rearm), owner) diff --git a/code/modules/vehicles/mecha/mecha_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm index eb551fe667ddc..bb534774dff39 100644 --- a/code/modules/vehicles/mecha/mecha_defense.dm +++ b/code/modules/vehicles/mecha/mecha_defense.dm @@ -36,7 +36,7 @@ to_chat(occupants, "[icon2html(src, occupants)][span_danger("[gear] is critically damaged!")]") playsound(src, gear.destroy_sound, 50) -/obj/vehicle/sealed/mecha/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = TRUE, attack_dir, armour_penetration) +/obj/vehicle/sealed/mecha/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = TRUE, attack_dir, armour_penetration, mob/living/blame_mob) var/damage_taken = ..() if(damage_taken <= 0 || obj_integrity < 0) return damage_taken @@ -81,20 +81,29 @@ log_message("Affected by explosion of severity: [severity].", LOG_MECHA, color="red") if(CHECK_BITFIELD(resistance_flags, INDESTRUCTIBLE)) return - if(!(flags_atom & PREVENT_CONTENTS_EXPLOSION)) + if(!(atom_flags & PREVENT_CONTENTS_EXPLOSION)) contents_explosion(severity) if(QDELETED(src)) return + var/stagger_duration switch(severity) if(EXPLODE_DEVASTATE) take_damage(rand(1200, 1800), BRUTE, BOMB, 0) + stagger_duration = 7 SECONDS if(EXPLODE_HEAVY) take_damage(rand(400, 600), BRUTE, BOMB, 0) + stagger_duration = 5 SECONDS if(EXPLODE_LIGHT) take_damage(rand(150, 300), BRUTE, BOMB, 0) + stagger_duration = 2 SECONDS if(EXPLODE_WEAK) take_damage(rand(50, 100), BRUTE, BOMB, 0) + if(!stagger_duration) + return + for(var/mob/living/living_occupant AS in occupants) + living_occupant.Stagger(stagger_duration) + /* RUTGMC DELETION, moved to modular /obj/vehicle/sealed/mecha/contents_explosion(severity) severity-- @@ -150,6 +159,12 @@ cookedalive.adjust_fire_stacks(1) cookedalive.IgniteMob() +/obj/vehicle/sealed/mecha/lava_act() + if(resistance_flags & INDESTRUCTIBLE) + return FALSE + take_damage(80, BURN, FIRE, armour_penetration = 30) + return TRUE + /obj/vehicle/sealed/mecha/attackby_alternate(obj/item/weapon, mob/user, params) if(istype(weapon, /obj/item/mecha_parts)) var/obj/item/mecha_parts/parts = weapon @@ -224,7 +239,7 @@ if(!attacking_item.force) return - var/damage_taken = take_damage(attacking_item.force, attacking_item.damtype, MELEE, 1) + var/damage_taken = take_damage(attacking_item.force, attacking_item.damtype, MELEE, attack_dir = get_dir(src, attacking_item), blame_mob = user) try_damage_component(damage_taken, user.zone_selected) var/hit_verb = length(attacking_item.attack_verb) ? "[pick(attacking_item.attack_verb)]" : "hit" @@ -238,7 +253,7 @@ log_combat(user, src, "attacked", attacking_item) log_message("Attacked by [user]. Item - [attacking_item], Damage - [damage_taken]", LOG_MECHA) -/obj/vehicle/sealed/mecha/attack_generic(mob/user, damage_amount, damage_type, damage_flag, effects, armor_penetration) +/obj/vehicle/sealed/mecha/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = 0) . = ..() if(.) try_damage_component(., user.zone_selected) diff --git a/code/modules/vehicles/mecha/mecha_mob_interaction.dm b/code/modules/vehicles/mecha/mecha_mob_interaction.dm index 513217edafad3..1daff10bd295b 100644 --- a/code/modules/vehicles/mecha/mecha_mob_interaction.dm +++ b/code/modules/vehicles/mecha/mecha_mob_interaction.dm @@ -56,6 +56,7 @@ hud_type.add_to_hud(src) else hud_type.remove_from_hud(src) + faction = newoccupant.faction //we do not unset when exiting, last occupant is the owner if(!internal_damage) SEND_SOUND(newoccupant, sound('sound/mecha/nominal.ogg',volume=50)) diff --git a/code/modules/vehicles/mecha/mecha_movement.dm b/code/modules/vehicles/mecha/mecha_movement.dm index d2f2e03730cd4..928323d6ac0e6 100644 --- a/code/modules/vehicles/mecha/mecha_movement.dm +++ b/code/modules/vehicles/mecha/mecha_movement.dm @@ -22,12 +22,12 @@ . = TRUE if(!canmove || !(user in return_drivers())) return - vehicle_move(direction) + vehicle_move(user, direction) -/obj/vehicle/sealed/mecha/vehicle_move(direction, forcerotate = FALSE) - if(!COOLDOWN_CHECK(src, cooldown_vehicle_move)) - return FALSE - COOLDOWN_START(src, cooldown_vehicle_move, move_delay) +/obj/vehicle/sealed/mecha/vehicle_move(mob/living/user, direction, forcerotate = FALSE) + . = ..() + if(!.) + return if(completely_disabled) return FALSE if(!direction) diff --git a/code/modules/vehicles/mecha/mecha_ui.dm b/code/modules/vehicles/mecha/mecha_ui.dm index c3b44719b8311..5091dbc93f09b 100644 --- a/code/modules/vehicles/mecha/mecha_ui.dm +++ b/code/modules/vehicles/mecha/mecha_ui.dm @@ -10,7 +10,7 @@ ///list of plane masters to apply to owners var/list/plane_masters = list() -/atom/movable/screen/mech_view/Initialize(mapload, obj/vehicle/sealed/mecha/newowner) +/atom/movable/screen/mech_view/Initialize(mapload, datum/hud/hud_owner, obj/vehicle/sealed/mecha/newowner) . = ..() owner = newowner assigned_map = "mech_view_[REF(owner)]" diff --git a/code/modules/vehicles/motorbike.dm b/code/modules/vehicles/motorbike.dm index e95fbd25887a5..614312a406afe 100644 --- a/code/modules/vehicles/motorbike.dm +++ b/code/modules/vehicles/motorbike.dm @@ -8,7 +8,7 @@ max_integrity = 300 soft_armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 0, BOMB = 30, FIRE = 60, ACID = 60) resistance_flags = XENO_DAMAGEABLE - flags_atom = PREVENT_CONTENTS_EXPLOSION + atom_flags = PREVENT_CONTENTS_EXPLOSION key_type = null integrity_failure = 0.5 allow_pass_flags = PASSABLE @@ -82,6 +82,8 @@ /obj/vehicle/ridden/motorbike/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/reagent_containers/jerrycan)) var/obj/item/reagent_containers/jerrycan/gascan = I if(gascan.reagents.total_volume == 0) @@ -176,7 +178,7 @@ smoke.set_up(0, src) smoke.start() -/obj/vehicle/ridden/motorbike/obj_destruction() +/obj/vehicle/ridden/motorbike/obj_destruction(damage_amount, damage_type, damage_flag, mob/living/blame_mob) explosion(src, light_impact_range = 2, flash_range = 0) return ..() @@ -197,9 +199,6 @@ if(user.lying_angle || user.incapacitated()) //Can't use your inventory when lying return FALSE - if(istype(user.loc, /obj/vehicle/multitile/root/cm_armored)) //Stops inventory actions in a mech/tank - return FALSE - if(over_object == user && Adjacent(user)) //This must come before the screen objects only block open(user) return FALSE diff --git a/code/modules/vehicles/multitile/cm_armored.dm b/code/modules/vehicles/multitile/cm_armored.dm deleted file mode 100644 index ded3f67384960..0000000000000 --- a/code/modules/vehicles/multitile/cm_armored.dm +++ /dev/null @@ -1,809 +0,0 @@ - -//NOT bitflags, just global constant values -#define HDPT_PRIMARY "primary" -#define HDPT_SECDGUN "secondary" -#define HDPT_SUPPORT "support" -#define HDPT_ARMOR "armor" -#define HDPT_TREADS "treads" - -//Percentages of what hardpoints take what damage, e.g. armor takes 37.5% of the damage -GLOBAL_LIST_INIT(armorvic_dmg_distributions, list( - HDPT_PRIMARY = 0.15, - HDPT_SECDGUN = 0.125, - HDPT_SUPPORT = 0.075, - HDPT_ARMOR = 0.5, - HDPT_TREADS = 0.15)) - -//The main object, should be an abstract class // todo delete me -/obj/vehicle/multitile/root/cm_armored - name = "Armored Vehicle" - desc = "Get inside to operate the vehicle." - hitbox_type = /obj/vehicle/multitile/hitbox/cm_armored //Used for emergencies and respawning hitboxes - - //What slots the vehicle can have - var/list/hardpoints = list(HDPT_ARMOR, HDPT_TREADS, HDPT_SECDGUN, HDPT_SUPPORT, HDPT_PRIMARY) - - //The next world.time when the tank can move - var/next_move = 0 - - //Below are vars that can be affected by hardpoints, generally used as ratios or decisecond timers - - move_delay = 30 //default 3 seconds per tile - - var/active_hp - - var/list/dmg_distribs = list() - - //Changes cooldowns and accuracies - var/list/misc_ratios = list( - "move" = 1.0, - "prim_acc" = 1.0, - "secd_acc" = 1.0, - "supp_acc" = 1.0, - "prim_cool" = 1.0, - "secd_cool" = 1.0, - "supp_cool" = 1.0) - - //Changes how much damage the tank takes - var/list/dmg_multipliers = list( - "all" = 1.0, //for when you want to make it invincible - "acid" = 1.0, - "slash" = 1.0, - "bullet" = 1.0, - "explosive" = 1.0, - "blunt" = 1.0, - "abstract" = 1.0) //abstract for when you just want to hurt it - - //Decisecond cooldowns for the slots - var/list/internal_cooldowns = list( - "primary" = 300, - "secondary" = 200, - "support" = 150) - - //Percentage accuracies for slot - var/list/accuracies = list( - "primary" = 0.97, - "secondary" = 0.67, - "support" = 0.5) - - //Placeholders - icon = 'icons/obj/vehicles.dmi' - icon_state = "cargo_engine" - - -/obj/vehicle/multitile/root/cm_armored/Initialize(mapload) - . = ..() - GLOB.tank_list += src - set_light(0.01) - - -/obj/vehicle/multitile/root/cm_armored/Destroy() - for(var/i in linked_objs) - var/obj/O = linked_objs[i] - if(O == src) - continue - qdel(O, TRUE) //Delete all of the hitboxes etc - GLOB.tank_list -= src - return ..() - -//What to do if all ofthe installed modules have been broken -/obj/vehicle/multitile/root/cm_armored/proc/handle_all_modules_broken() - return - -/obj/vehicle/multitile/root/cm_armored/proc/deactivate_all_hardpoints() - var/list/slots = get_activatable_hardpoints() - for(var/slot in slots) - var/obj/item/hardpoint/HP = hardpoints[slot] - HP?.deactivate() - -/obj/vehicle/multitile/root/cm_armored/proc/remove_all_players() - return - -//The basic vehicle code that moves the tank, with movement delay implemented -/obj/vehicle/multitile/root/cm_armored/relaymove(mob/user, direction) - if(world.time < next_move) - return - next_move = world.time + move_delay * misc_ratios["move"] - - return ..() - -//Same thing but for rotations -/obj/vehicle/multitile/root/cm_armored/try_rotate(deg, mob/user, force = FALSE) - if(world.time < next_move && !force) - return - next_move = world.time + move_delay * misc_ratios["move"] * (force ? 2 : 3) //3 for a 3 point turn, idk - return ..() - -/obj/vehicle/multitile/root/cm_armored/proc/can_use_hp(mob/M) - return TRUE - -//Used by the gunner to swap which module they are using -//e.g. from the minigun to the smoke launcher -//Only the active hardpoint module can be used -/obj/vehicle/multitile/root/cm_armored/verb/switch_active_hp() - set name = "Change Active Weapon" - set category = "Vehicle" - set src in view(0) - - if(!can_use_hp(usr)) - return - - var/list/slots = get_activatable_hardpoints() - - if(!length(slots)) - to_chat(usr, span_warning("All of the modules can't be activated or are broken.")) - return - - var/slot = tgui_input_list(usr, "Select a slot.", null, slots) - - var/obj/item/hardpoint/HP = hardpoints[slot] - if(!(HP?.obj_integrity)) - to_chat(usr, span_warning("That module is either missing or broken.")) - return - - active_hp = slot - to_chat(usr, span_notice("You select the [slot] slot.")) - if(isliving(usr)) - var/mob/living/M = usr - M.set_interaction(src) - -/obj/vehicle/multitile/root/cm_armored/verb/reload_hp() - set name = "Reload Active Weapon" - set category = "Vehicle" - set src in view(0) - - if(!can_use_hp(usr)) - return - - //TODO: make this a proc so I don't keep repeating this code - var/list/slots = get_activatable_hardpoints() - - if(!length(slots)) - to_chat(usr, span_warning("All of the modules can't be reloaded or are broken.")) - return - - var/slot = tgui_input_list(usr, "Select a slot.", null, slots) - - var/obj/item/hardpoint/HP = hardpoints[slot] - if(!length(HP?.backup_clips)) - to_chat(usr, span_warning("That module is either missing or has no remaining backup clips.")) - return - - var/obj/item/ammo_magazine/A = HP.backup_clips[1] //LISTS START AT 1 REEEEEEEEEEEE - if(!A) - to_chat(usr, span_danger("Something went wrong! PM a staff member! Code: T_RHPN")) - return - - to_chat(usr, span_notice("You begin reloading the [slot] module.")) - - addtimer(CALLBACK(src, PROC_REF(finish_reloading_hp), usr, HP, A, slot), 2 SECONDS) - -/obj/vehicle/multitile/root/cm_armored/proc/finish_reloading_hp(mob/living/user, obj/item/hardpoint/HP, obj/item/ammo_magazine/A, slot) - if(!can_use_hp(usr)) - return - - HP.ammo.forceMove(get_turf(entrance)) - HP.ammo.update_icon() - HP.ammo = A - HP.backup_clips.Remove(A) - - to_chat(usr, span_notice("You reload the [slot] module.")) - - -/obj/vehicle/multitile/root/cm_armored/proc/get_activatable_hardpoints() - var/list/slots = list() - for(var/slot in hardpoints) - var/obj/item/hardpoint/HP = hardpoints[slot] - if(!(HP?.obj_integrity)) - continue - if(!HP.is_activatable) - continue - slots += slot - - return slots - - - -//Special armored vic healthcheck that mainly updates the hardpoint states -/obj/vehicle/multitile/root/cm_armored/proc/healthcheck() - repair_damage(max_integrity) //The tank itself doesn't take damage - var/i - var/remove_person = TRUE //Whether or not to call handle_all_modules_broken() - for(i in hardpoints) - var/obj/item/hardpoint/H = hardpoints[i] - if(!H) - continue - if(!H.obj_integrity) - H.remove_buff() - else - remove_person = FALSE //if something exists but isnt broken - - if(remove_person) - handle_all_modules_broken() - - update_icon() - -//Since the vics are 3x4 we need to swap between the two files with different dimensions -//Also need to offset to center the tank about the root object -/obj/vehicle/multitile/root/cm_armored/update_icon() - - overlays.Cut() - - //Assuming 3x3 with half block overlaps in the tank's direction - if(dir in list(NORTH, SOUTH)) - pixel_x = -32 - pixel_y = -48 - icon = 'icons/obj/vehicles/tank_NS.dmi' - - else if(dir in list(EAST, WEST)) - pixel_x = -48 - pixel_y = -32 - icon = 'icons/obj/vehicles/tank_EW.dmi' - - //Basic iteration that snags the overlay from the hardpoint module object - for(var/i in hardpoints) - var/obj/item/hardpoint/H = hardpoints[i] - - if((i == HDPT_TREADS && !H) || (H && !H.obj_integrity)) //Treads not installed or broken - var/image/I = image(icon, icon_state = "damaged_hardpt_[i]") - overlays += I - - if(H) - var/image/I = H.get_icon_image(0, 0, dir) - overlays += I - -//Hitboxes but with new names -/obj/vehicle/multitile/hitbox/cm_armored - name = "Armored Vehicle" - desc = "Get inside to operate the vehicle." - allow_pass_flags = PASSABLE - var/lastsound = 0 - -//If something want to delete this, it's probably either an admin or the shuttle -//If it's an admin, they want to disable this -//If it's the shuttle, it should do damage -//If fully repaired and moves at least once, the broken hitboxes will respawn according to multitile.dm -/obj/vehicle/multitile/hitbox/cm_armored/Destroy() - var/obj/vehicle/multitile/root/cm_armored/C = root - C?.take_damage_type(1000000, "abstract") - return ..() - -//Tramplin' time, but other than that identical -/obj/vehicle/multitile/hitbox/cm_armored/Bump(atom/A) - . = ..() - var/facing = get_dir(src, A) - var/turf/temp = loc - var/turf/T = loc - A.tank_collision(src, facing, T, temp) - if(isliving(A)) - log_attack("[get_driver()] drove over [A] with [root]") - - -/obj/vehicle/multitile/hitbox/cm_armored/proc/get_driver() - return "Someone" - -/atom/proc/tank_collision(obj/vehicle/multitile/hitbox/cm_armored/C, facing, turf/T, turf/temp) - return - -/mob/living/tank_collision(obj/vehicle/multitile/hitbox/cm_armored/C, facing, turf/T, turf/temp) - if(stat == DEAD) //We don't care about the dead - return - if(loc == C.loc) // treaded over. - ParalyzeNoChain(2 SECONDS) - var/target_dir = REVERSE_DIR(C.dir) - temp = get_step(C.loc, target_dir) - T = temp - target_dir = REVERSE_DIR(C.dir) - T = get_step(T, target_dir) - face_atom(T) - throw_at(T, 3, 2, C, 1) - apply_damage(randfloat(5, 7.5), BRUTE, blocked = MELEE) - return - if(!lying_angle) - temp = get_step(T, facing) - T = temp - T = get_step(T, pick(GLOB.cardinals)) - if(mob_size == MOB_SIZE_BIG) - throw_at(T, 3, 2, C, 0) - else - throw_at(T, 3, 2, C, 1) - ParalyzeNoChain(2 SECONDS) - apply_damage(rand(10, 15), BRUTE, blocked = MELEE) - visible_message(span_danger("[C] bumps into [src], throwing [p_them()] away!"), span_danger("[C] violently bumps into you!")) - var/obj/vehicle/multitile/root/cm_armored/CA = C.root - var/list/slots = CA.get_activatable_hardpoints() - for(var/slot in slots) - var/obj/item/hardpoint/H = CA.hardpoints[slot] - H?.livingmob_interact(src) - -/mob/living/carbon/xenomorph/queen/tank_collision(obj/vehicle/multitile/hitbox/cm_armored/C, facing, turf/T, turf/temp) - if(lying_angle || loc == C.loc) - return ..() - temp = get_step(T, facing) - T = temp - T = get_step(T, pick(GLOB.cardinals)) - throw_at(T, 2, 2, C, 0) - visible_message(span_danger("[C] bumps into [src], pushing [p_them()] away!"), span_danger("[C] bumps into you!")) - -/mob/living/carbon/xenomorph/crusher/tank_collision(obj/vehicle/multitile/hitbox/cm_armored/C, facing, turf/T, turf/temp) - if(lying_angle || loc == C.loc) - return ..() - temp = get_step(T, facing) - T = temp - T = get_step(T, pick(GLOB.cardinals)) - throw_at(T, 2, 2, C, 0) - visible_message(span_danger("[C] bumps into [src], pushing [p_them()] away!"), span_danger("[C] bumps into you!")) - -/mob/living/carbon/xenomorph/larva/tank_collision(obj/vehicle/multitile/hitbox/cm_armored/C, facing, turf/T, turf/temp) - if(loc == C.loc) // treaded over. - ParalyzeNoChain(2 SECONDS) - apply_damage(randfloat(5, 7.5), BRUTE, blocked = MELEE) - return - var/obj/vehicle/multitile/root/cm_armored/CA = C.root - var/list/slots = CA.get_activatable_hardpoints() - for(var/slot in slots) - var/obj/item/hardpoint/H = CA.hardpoints[slot] - H?.livingmob_interact(src) - -/turf/closed/wall/tank_collision(obj/vehicle/multitile/hitbox/cm_armored/C, facing, turf/T, turf/temp) - var/obj/vehicle/multitile/root/cm_armored/tank/CA = C.root - var/damage = 30 - var/tank_damage = 2 - - if(facing == CA.old_dir && istype(CA.hardpoints[HDPT_ARMOR], /obj/item/hardpoint/armor/snowplow) ) //Snowplow eliminates collision damage, and doubles damage dealt if we're facing the thing we're crushing - var/obj/item/hardpoint/armor/snowplow/SP = CA.hardpoints[HDPT_ARMOR] - if(SP.obj_integrity) - damage = 45 - tank_damage = 1 - - take_damage(damage) - CA.take_damage_type(tank_damage, "blunt", src) - if(world.time > C.lastsound + 1 SECONDS) - playsound(src, 'sound/effects/metal_crash.ogg', 35) - C.lastsound = world.time - -/obj/machinery/tank_collision(obj/vehicle/multitile/hitbox/cm_armored/C, facing, turf/T, turf/temp) - var/obj/vehicle/multitile/root/cm_armored/tank/CA = C.root - var/damage = 30 - var/tank_damage = 2 - - if(facing == CA.old_dir && istype(CA.hardpoints[HDPT_ARMOR], /obj/item/hardpoint/armor/snowplow) ) //Snowplow eliminates collision damage, and doubles damage dealt if we're facing the thing we're crushing - var/obj/item/hardpoint/armor/snowplow/SP = CA.hardpoints[HDPT_ARMOR] - if(SP.obj_integrity) - damage = 60 - tank_damage = 0 - - take_damage(damage) - CA.take_damage_type(tank_damage, "blunt", src) - if(world.time > C.lastsound + 1 SECONDS) - visible_message(span_danger("[CA] rams into \the [src]!")) - playsound(src, 'sound/effects/metal_crash.ogg', 35) - C.lastsound = world.time - -/obj/structure/tank_collision(obj/vehicle/multitile/hitbox/cm_armored/C, facing, turf/T, turf/temp) - var/obj/vehicle/multitile/root/cm_armored/tank/CA = C.root - var/damage = 30 - var/tank_damage = 2 - - if(facing == CA.old_dir && istype(CA.hardpoints[HDPT_ARMOR], /obj/item/hardpoint/armor/snowplow) ) //Snowplow eliminates collision damage, and doubles damage dealt if we're facing the thing we're crushing - var/obj/item/hardpoint/armor/snowplow/SP = CA.hardpoints[HDPT_ARMOR] - if(SP.obj_integrity) - damage = 60 - tank_damage = 0 - - take_damage(damage) - CA.take_damage_type(tank_damage, "blunt", src) - if(world.time > C.lastsound + 1 SECONDS) - visible_message(span_danger("[CA] crushes \the [src]!")) - playsound(src, 'sound/effects/metal_crash.ogg', 35) - C.lastsound = world.time - -/obj/alien/tank_collision(obj/vehicle/multitile/hitbox/cm_armored/C, facing, turf/T, turf/temp) - take_damage(40) - -/obj/alien/weeds/tank_collision(obj/vehicle/multitile/hitbox/cm_armored/C, facing, turf/T, turf/temp) - return - -/obj/vehicle/multitile/hitbox/cm_armored/Move(atom/A, direction) - - for(var/mob/living/M in get_turf(src)) - M.tank_collision(src) - - . = ..() - - if(.) - for(var/mob/living/M in get_turf(A)) - M.tank_collision(src) - -//Can't hit yourself with your own bullet -/obj/vehicle/multitile/hitbox/cm_armored/projectile_hit(obj/projectile/proj) - if(proj.firer == root) //Don't hit our own hitboxes - return FALSE - - return ..() - -/obj/vehicle/multitile/hitbox/cm_armored/ex_act(severity) - return root.ex_act(severity) - -/obj/vehicle/multitile/hitbox/cm_armored/attackby(obj/item/I, mob/user, params) - return root.attackby(I, user, params) - -/obj/vehicle/multitile/hitbox/cm_armored/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - return root.attack_alien(X, damage_amount) - -/obj/vehicle/multitile/hitbox/cm_armored/effect_smoke(obj/effect/particle_effect/smoke/S) - . = ..() - if(!.) - return - if(CHECK_BITFIELD(S.smoke_traits, SMOKE_XENO_ACID)) - var/obj/vehicle/multitile/root/cm_armored/T = root - T.take_damage_type(30, "acid") - -//A bit icky, but basically if you're adjacent to the tank hitbox, you are then adjacent to the root object -/obj/vehicle/multitile/root/cm_armored/Adjacent(atom/A) - for(var/i in linked_objs) - var/obj/vehicle/multitile/hitbox/cm_armored/H = linked_objs[i] - if(!H) - continue - if(get_dist(H, A) <= 1) - return TRUE //Using get_dist() to avoid hidden code that recurs infinitely here - return ..() - -//Returns the ratio of damage to take, just a housekeeping thing -/obj/vehicle/multitile/root/cm_armored/proc/get_dmg_multi(type) - if(!dmg_multipliers.Find(type)) - return 0 - return dmg_multipliers[type] * dmg_multipliers["all"] - -//Generic proc for taking damage -//ALWAYS USE THIS WHEN INFLICTING DAMAGE TO THE VEHICLES -/obj/vehicle/multitile/root/cm_armored/proc/take_damage_type(damage, type, atom/attacker) - for(var/i in hardpoints) - var/obj/item/hardpoint/HP = hardpoints[i] - if(HP) - HP.take_damage(HP.obj_integrity - damage * dmg_distribs[i] * get_dmg_multi(type)) - - healthcheck() - - if(istype(attacker, /mob)) - var/mob/M = attacker - log_attack("[src] took [damage] [type] damage from [M] ([M.client ? M.client.ckey : "disconnected"]).") - else - log_attack("[src] took [damage] [type] damage from [attacker].") - -/obj/vehicle/multitile/root/cm_armored/projectile_hit(obj/projectile/proj) - if(proj.firer == src) //Don't hit ourself. - return FALSE - - return ..() - - -//severity 1.0 explosions never really happen so we're gonna follow everyone else's example -/obj/vehicle/multitile/root/cm_armored/ex_act(severity) - - switch(severity) - if(EXPLODE_DEVASTATE) - take_damage(rand(250, 350)) //Devastation level explosives are anti-tank and do real damage. - - if(EXPLODE_HEAVY) - take_damage(rand(30, 40)) //Heavy explosions do some damage, but are largely deferred by the armour/bulk. - -//Honestly copies some code from the Xeno files, just handling some special cases -/obj/vehicle/multitile/root/cm_armored/attack_alien(mob/living/carbon/xenomorph/M, damage_amount = M.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - - if(M.loc == entrance.loc && M.a_intent == INTENT_HELP) - handle_player_entrance(M) //will call the get out of tank proc on its own - return - - var/damage = damage_amount - - //Somehow we will deal no damage on this attack - if(!damage) - playsound(M.loc, 'sound/weapons/alien_claw_swipe.ogg', 25, 1) - M.do_attack_animation(src) - M.visible_message(span_danger("\The [M] lunges at [src]!"), \ - span_danger("We lunge at [src]!")) - return FALSE - - M.do_attack_animation(src, ATTACK_EFFECT_CLAW) - playsound(loc, "alien_claw_metal", 25, 1) - - M.visible_message(span_danger("\The [M] slashes [src]!"), \ - span_danger("We slash [src]!")) - - take_damage_type(damage * ( (isxenoravager(M)) ? 2 : 1 ), "slash", M) //Ravs do a bitchin double damage - return ..() - -//Special case for entering the vehicle without using the verb -/obj/vehicle/multitile/root/cm_armored/attack_hand(mob/living/user) - . = ..() - if(.) - return - if(user.loc == entrance.loc) - handle_player_entrance(user) - return - - -/obj/vehicle/multitile/root/cm_armored/Entered(atom/movable/A) - if(istype(A, /obj) && !istype(A, /obj/item/ammo_magazine/tank) && !istype(A, /obj/item/hardpoint)) - A.forceMove(loc) - return - - return ..() - - -//Redistributes damage ratios based off of what things are attached (no armor means the armor doesn't mitigate any damage) -/obj/vehicle/multitile/root/cm_armored/proc/update_damage_distribs() - dmg_distribs = GLOB.armorvic_dmg_distributions.Copy() //Assume full installs - for(var/slot in hardpoints) - var/obj/item/hardpoint/HP = hardpoints[slot] - if(!HP) - dmg_distribs[slot] = 0.0 //Remove empty slots' damage mitigation - var/acc = 0 - for(var/slot in dmg_distribs) - var/ratio = dmg_distribs[slot] - acc += ratio //Get total current ratio applications - if(acc == 0) - return - for(var/slot in dmg_distribs) - var/ratio = dmg_distribs[slot] - dmg_distribs[slot] = ratio/acc //Redistribute according to previous ratios for full damage taking, but ignoring empty slots - -//Special cases abound, handled below or in subclasses -/obj/vehicle/multitile/root/cm_armored/attackby(obj/item/O, mob/user) - - if(istype(O, /obj/item/hardpoint)) //Are we trying to install stuff? - var/obj/item/hardpoint/HP = O - install_hardpoint(HP, user) - - else if(istype(O, /obj/item/ammo_magazine)) //Are we trying to reload? - var/obj/item/ammo_magazine/AM = O - handle_ammomag_attackby(AM, user) - - else if(iswelder(O) || iswrench(O)) //Are we trying to repair stuff? - handle_hardpoint_repair(O, user) - update_damage_distribs() - - else if(iscrowbar(O)) //Are we trying to remove stuff? - uninstall_hardpoint(O, user) - - else - . = ..() - if(!(O.flags_item & NOBLUDGEON)) - take_damage_type(O.force * 0.05, "blunt", user) //Melee weapons from people do very little damage - - -/obj/vehicle/multitile/root/cm_armored/proc/handle_hardpoint_repair(obj/item/O, mob/user) - - //Need to the what the hell you're doing - if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_MASTER) - user.visible_message(span_notice("[user] fumbles around figuring out what to do with [O] on the [src]."), - span_notice("You fumble around figuring out what to do with [O] on the [src].")) - var/fumbling_time = 5 SECONDS * (SKILL_ENGINEER_MASTER - user.skills.getRating(SKILL_ENGINEER)) - if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED)) - return - - //Pick what to repair - var/slot = tgui_input_list(user, "Select a slot to try and repair", null, hardpoints) //maybe tgui alert ? - var/obj/item/I = user.get_active_held_item() - if(!Adjacent(user) || (!iswelder(I) && !iswrench(I))) - return - - var/obj/item/hardpoint/old = hardpoints[slot] //Is there something there already? - - if(!old) - to_chat(user, span_warning("There is nothing installed on that slot.")) - return - - if(old.obj_integrity >= old.max_integrity) - to_chat(user, span_notice("\the [old] is already in perfect conditions.")) - return - - //Determine how many 3 second intervals to wait and if you have the right tool - var/num_delays = 6 - switch(slot) - if(HDPT_PRIMARY) - num_delays = 5 - if(!iswelder(I)) - to_chat(user, span_warning("That's the wrong tool. Use a welder.")) - return - var/obj/item/tool/weldingtool/WT = I - if(!WT.isOn()) - to_chat(user, span_warning("You need to light your [WT] first.")) - return - - if(HDPT_SECDGUN) - num_delays = 3 - if(!iswrench(I)) - to_chat(user, span_warning("That's the wrong tool. Use a wrench.")) - return - - if(HDPT_SUPPORT) - num_delays = 2 - if(!iswrench(I)) - to_chat(user, span_warning("That's the wrong tool. Use a wrench.")) - return - - if(HDPT_ARMOR) - num_delays = 10 - if(!iswelder(I)) - to_chat(user, span_warning("That's the wrong tool. Use a welder.")) - return - var/obj/item/tool/weldingtool/WT = I - if(!WT.isOn()) - to_chat(user, span_warning("You need to light your [WT] first.")) - return - - if(HDPT_TREADS) - if(!iswelder(I)) - to_chat(user, span_warning("That's the wrong tool. Use a welder.")) - return - var/obj/item/tool/weldingtool/WT = I - if(!WT.isOn()) - to_chat(user, span_warning("You need to light your [WT] first.")) - return - WT.remove_fuel(num_delays, user) - - user.visible_message(span_notice("[user] starts repairing the [slot] slot on [src]."), - span_notice("You start repairing the [slot] slot on the [src].")) - - if(!do_after(user, 30 * num_delays, NONE, src, BUSY_ICON_BUILD, extra_checks = iswelder(O) ? CALLBACK(O, /obj/item/tool/weldingtool/proc/isOn) : null)) - user.visible_message(span_notice("[user] stops repairing the [slot] slot on [src]."), - span_notice("You stop repairing the [slot] slot on the [src].")) - return - - if(iswelder(O)) - var/obj/item/tool/weldingtool/WT = O - WT.remove_fuel(num_delays, user) - - user.visible_message(span_notice("[user] repairs the [slot] slot on the [src]."), - span_notice("You repair the [slot] slot on [src].")) - - old.repair_damage(old.max_integrity) //We repaired it, good job - old.apply_buff() - - update_icon() - -//Relaoding stuff, pretty bare-bones and basic -/obj/vehicle/multitile/root/cm_armored/proc/handle_ammomag_attackby(obj/item/ammo_magazine/AM, mob/user) - - //No skill checks for reloading - //Maybe I should delineate levels of skill for reloading, installation, and repairs? - //That would make it easier to differentiate between the two for skills - //Instead of using MT skills for these procs and TC skills for operation - //Oh but wait then the MTs would be able to drive fuck that - var/slot = tgui_input_list(user, "Select a slot to try and refill", null, hardpoints) - if(!Adjacent(user) || user.get_active_held_item() != AM) - return - var/obj/item/hardpoint/HP = hardpoints[slot] - - if(!HP) - to_chat(user, span_warning("There is nothing installed on that slot.")) - return - - HP.try_add_clip(AM, user) - -//Putting on hardpoints -//Similar to repairing stuff, down to the time delay -/obj/vehicle/multitile/root/cm_armored/proc/install_hardpoint(obj/item/hardpoint/HP, mob/user) - - if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_MASTER) - user.visible_message(span_notice("[user] fumbles around figuring out what to do with [HP] on the [src]."), - span_notice("You fumble around figuring out what to do with [HP] on the [src].")) - var/fumbling_time = 5 SECONDS * ( SKILL_ENGINEER_MASTER - user.skills.getRating(SKILL_ENGINEER) ) - if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED)) - return - - var/obj/item/hardpoint/occupied = hardpoints[HP.slot] - - if(occupied) - to_chat(user, span_warning("Remove the previous hardpoint module first.")) - return - - user.visible_message(span_notice("[user] begins installing [HP] on the [HP.slot] hardpoint slot on the [src]."), - span_notice("You begin installing [HP] on the [HP.slot] hardpoint slot on the [src].")) - - var/num_delays = 1 - - switch(HP.slot) - if(HDPT_PRIMARY) - num_delays = 5 - if(HDPT_SECDGUN) - num_delays = 3 - if(HDPT_SUPPORT) - num_delays = 2 - if(HDPT_ARMOR) - num_delays = 10 - if(HDPT_TREADS) - num_delays = 7 - - if(!do_after(user, 30 * num_delays, NONE, src, BUSY_ICON_BUILD)) - user.visible_message(span_warning("[user] stops installing \the [HP] on [src]."), span_warning("You stop installing \the [HP] on [src].")) - return - - if(occupied) - return - - user.visible_message(span_notice("[user] installs \the [HP] on [src]."), span_notice("You install \the [HP] on [src].")) - - user.temporarilyRemoveItemFromInventory(HP, 0) - - add_hardpoint(HP, user) - -//User-orientated proc for taking of hardpoints -//Again, similar to the above ones -/obj/vehicle/multitile/root/cm_armored/proc/uninstall_hardpoint(obj/item/O, mob/user) - - if(user.skills.getRating(SKILL_ENGINEER) < SKILL_ENGINEER_MASTER) - user.visible_message(span_notice("[user] fumbles around figuring out what to do with [O] on the [src]."), - span_notice("You fumble around figuring out what to do with [O] on the [src].")) - var/fumbling_time = 5 SECONDS * ( SKILL_ENGINEER_MASTER - user.skills.getRating(SKILL_ENGINEER) ) - if(!do_after(user, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED)) - return - - var/slot = tgui_input_list(user, "Select a slot to try and remove", null, hardpoints) - if(!Adjacent(user) || !iscrowbar(user.get_active_held_item())) - return - - var/obj/item/hardpoint/old = hardpoints[slot] - - if(!old) - to_chat(user, span_warning("There is nothing installed there.")) - return - - user.visible_message(span_notice("[user] begins removing [old] on the [old.slot] hardpoint slot on [src]."), - span_notice("You begin removing [old] on the [old.slot] hardpoint slot on [src].")) - - var/num_delays = 1 - - switch(old.slot) - if(HDPT_PRIMARY) - num_delays = 5 - if(HDPT_SECDGUN) - num_delays = 3 - if(HDPT_SUPPORT) - num_delays = 2 - if(HDPT_ARMOR) - num_delays = 10 - if(HDPT_TREADS) - num_delays = 7 - - if(!do_after(user, 30 * num_delays, NONE, src, BUSY_ICON_BUILD)) - user.visible_message(span_warning("[user] stops removing \the [old] on [src]."), span_warning("You stop removing \the [old] on [src].")) - return - if(QDELETED(old) || old != hardpoints[slot]) - return - - user.visible_message(span_notice("[user] removes \the [old] on [src]."), span_notice("You remove \the [old] on [src].")) - - remove_hardpoint(old, user) - -//General proc for putting on hardpoints -//ALWAYS CALL THIS WHEN ATTACHING HARDPOINTS -/obj/vehicle/multitile/root/cm_armored/proc/add_hardpoint(obj/item/hardpoint/HP, mob/user) - if(!istype(HP)) - return - HP.owner = src - if(HP.obj_integrity) - HP.apply_buff() - HP.forceMove(src) - - hardpoints[HP.slot] = HP - update_damage_distribs() - update_icon() - -//General proc for taking off hardpoints -//ALWAYS CALL THIS WHEN REMOVING HARDPOINTS -/obj/vehicle/multitile/root/cm_armored/proc/remove_hardpoint(obj/item/hardpoint/old, mob/user) - old.forceMove(user ? user.loc : entrance.loc) - old.remove_buff() - old.owner = null - - hardpoints[old.slot] = null - update_damage_distribs() - update_icon() - - - -/obj/vehicle/multitile/root/cm_armored/contents_explosion(severity) - return diff --git a/code/modules/vehicles/multitile/hardpoints.dm b/code/modules/vehicles/multitile/hardpoints.dm deleted file mode 100644 index a238093cc6d4c..0000000000000 --- a/code/modules/vehicles/multitile/hardpoints.dm +++ /dev/null @@ -1,996 +0,0 @@ -/* -All of the hardpoints, for the tank or other -Currently only has the tank hardpoints -*/ - -/obj/item/hardpoint - - var/slot //What slot do we attach to? - var/obj/vehicle/multitile/root/cm_armored/owner //Who do we work for? - - icon = 'icons/obj/vehicles/hardpoint_modules.dmi' - icon_state = "tires" //Placeholder - - max_integrity = 100 - w_class = WEIGHT_CLASS_GIGANTIC - - var/obj/item/ammo_magazine/tank/ammo - //If we use ammo, put it here - var/obj/item/ammo_magazine/tank/starter_ammo - - //Strings, used to get the overlay for the armored vic - var/disp_icon //This also differentiates tank vs apc vs other - var/disp_icon_state - - var/next_use = 0 - var/is_activatable = FALSE - var/max_angle = 180 - var/point_cost = 0 - - var/list/backup_clips = list() - var/max_clips = 1 //1 so they can reload their backups and actually reload once - var/buyable = TRUE - -/obj/item/hardpoint/Initialize(mapload) - . = ..() - if(starter_ammo) - ammo = new starter_ammo - -/obj/item/hardpoint/examine(mob/user) - . = ..() - var/status = obj_integrity <= 0.1 ? "broken" : "functional" - var/span_class = obj_integrity <= 0.1 ? "" : "" - if((user.skills.getRating(SKILL_ENGINEER) >= SKILL_ENGINEER_METAL) || isobserver(user)) - switch(PERCENT(obj_integrity / max_integrity)) - if(0.1 to 33) - status = "heavily damaged" - span_class = "" - if(33.1 to 66) - status = "damaged" - span_class = "" - if(66.1 to 90) - status = "slighty damaged" - if(90.1 to 100) - status = "intact" - to_chat(user, "[span_class]It's [status].") - -/obj/item/hardpoint/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/ammo_magazine/tank)) - try_add_clip(W, user) - return - if(!iswelder(W) && !iswrench(W)) - return ..() - if(obj_integrity >= max_integrity) - to_chat(user, span_notice("[src] is already in perfect conditions.")) - return - var/repair_delays = 6 - var/obj/item/tool/repair_tool = /obj/item/tool/weldingtool - switch(slot) - if(HDPT_PRIMARY) - repair_delays = 5 - if(HDPT_SECDGUN) - repair_tool = /obj/item/tool/wrench - repair_delays = 3 - if(HDPT_SUPPORT) - repair_tool = /obj/item/tool/wrench - repair_delays = 2 - if(HDPT_ARMOR) - repair_delays = 10 - var/obj/item/tool/weldingtool/WT = iswelder(W) ? W : null - if(!istype(W, repair_tool)) - to_chat(user, span_warning("That's the wrong tool. Use a [WT ? "wrench" : "welder"].")) - return - if(WT && !WT.isOn()) - to_chat(user, span_warning("You need to light your [WT] first.")) - return - user.visible_message(span_notice("[user] starts repairing [src]."), - span_notice("You start repairing [src].")) - if(!do_after(user, 3 SECONDS * repair_delays, NONE, src, BUSY_ICON_BUILD)) - user.visible_message(span_notice("[user] stops repairing [src]."), - span_notice("You stop repairing [src].")) - return - if(WT) - if(!WT.isOn()) - return - WT.remove_fuel(repair_delays, user) - user.visible_message(span_notice("[user] finishes repairing [src]."), - span_notice("You finish repairing [src].")) - repair_damage(max_integrity) - -//Called on attaching, for weapons sets the actual cooldowns -/obj/item/hardpoint/proc/apply_buff() - return - -//Called when removing, resets cooldown lengths, move delay, etc -/obj/item/hardpoint/proc/remove_buff() - return - -//Called when you want to activate the hardpoint, such as a gun -//This can also be used for some type of temporary buff, up to you -/obj/item/hardpoint/proc/active_effect(atom/A) - return - -/obj/item/hardpoint/proc/deactivate() - return - -/obj/item/hardpoint/proc/livingmob_interact(mob/living/M) - return - -//If our cooldown has elapsed -/obj/item/hardpoint/proc/is_ready() - if(world.time < next_use) - to_chat(usr, span_warning("This module is not ready to be used yet.")) - return FALSE - if(!obj_integrity) - to_chat(usr, span_warning("This module is too broken to be used.")) - return FALSE - return TRUE - -/obj/item/hardpoint/proc/try_add_clip(obj/item/ammo_magazine/tank/A, mob/user) - - if(!max_clips) - to_chat(user, span_warning("This module does not have room for additional ammo.")) - return FALSE - else if(length(backup_clips) >= max_clips) - to_chat(user, span_warning("The reloader is full.")) - return FALSE - else if(!istype(A, starter_ammo)) - to_chat(user, span_warning("That is the wrong ammo type.")) - return FALSE - - to_chat(user, span_notice("You start loading [A] in [src].")) - - var/atom/target = owner ? owner : src - - if(!do_after(user, 10, NONE, target) || QDELETED(src)) - to_chat(user, span_warning("Something interrupted you while loading [src].")) - return FALSE - - user.temporarilyRemoveItemFromInventory(A, FALSE) - user.visible_message(span_notice("[user] loads [A] in [src]"), - span_notice("You finish loading [A] in \the [src]."), null, 3) - backup_clips += A - playsound(user.loc, 'sound/weapons/guns/interact/minigun_cocked.ogg', 25) - return TRUE - -//Returns the image object to overlay onto the root object -/obj/item/hardpoint/proc/get_icon_image(x_offset, y_offset, new_dir) - - var/icon_suffix = "NS" - var/icon_state_suffix = "0" - - if(new_dir in list(NORTH, SOUTH)) - icon_suffix = "NS" - else if(new_dir in list(EAST, WEST)) - icon_suffix = "EW" - - if(!obj_integrity) - icon_state_suffix = "1" - - return image(icon = "[disp_icon]_[icon_suffix]", icon_state = "[disp_icon_state]_[icon_state_suffix]", pixel_x = x_offset, pixel_y = y_offset) - -/obj/item/hardpoint/proc/firing_arc(atom/A) - var/turf/T = get_turf(A) - if(!T || !owner) - return FALSE - var/dx = T.x - owner.x - var/dy = T.y - owner.y - var/deg = 0 - switch(owner.dir) - if(EAST) deg = 0 - if(NORTH) deg = -90 - if(WEST) deg = -180 - if(SOUTH) deg = -270 - - var/nx = dx * cos(deg) - dy * sin(deg) - var/ny = dx * sin(deg) + dy * cos(deg) - if(nx == 0) - return max_angle >= 90 - var/angle = arctan(ny/nx) - if(nx < 0) - angle += 180 - return abs(angle) <= max_angle - -//Delineating between slots -/obj/item/hardpoint/primary - slot = HDPT_PRIMARY - is_activatable = TRUE - -/obj/item/hardpoint/secondary - slot = HDPT_SECDGUN - is_activatable = TRUE - -/obj/item/hardpoint/support - slot = HDPT_SUPPORT - -/obj/item/hardpoint/armor - slot = HDPT_ARMOR - max_clips = 0 - -/obj/item/hardpoint/treads - slot = HDPT_TREADS - max_clips = 0 - gender = PLURAL - -//////////////////// -// PRIMARY SLOTS // START -//////////////////// - -/obj/item/hardpoint/primary/cannon - name = "LTB Cannon" - desc = "A primary cannon for tanks that shoots explosive rounds" - - max_integrity = 500 - point_cost = 100 - - icon_state = "ltb_cannon" - - disp_icon = "tank" - disp_icon_state = "ltb_cannon" - - starter_ammo = /obj/item/ammo_magazine/tank/ltb_cannon - max_clips = 3 - max_angle = 45 - -/obj/item/hardpoint/primary/cannon/broken - obj_integrity = 0 - buyable = FALSE - -/obj/item/hardpoint/primary/cannon/apply_buff() - owner.internal_cooldowns["primary"] = 200 - owner.accuracies["primary"] = 0.97 - -/obj/item/hardpoint/primary/cannon/active_effect(atom/A) - - if(!(ammo?.current_rounds > 0)) - to_chat(usr, span_warning("This module does not have any ammo.")) - return - - next_use = world.time + owner.internal_cooldowns["primary"] * owner.misc_ratios["prim_cool"] - var/obj/item/hardpoint/secondary/towlauncher/HP = owner.hardpoints[HDPT_SECDGUN] - if(istype(HP)) - HP.next_use = world.time + owner.internal_cooldowns["secondary"] * owner.misc_ratios["secd_cool"] - - var/delay = 5 - var/turf/T = get_turf(A) - if(!T) - return - var/obj/vehicle/multitile/root/cm_armored/tank/C = owner - var/obj/effect/overlay/temp/tank_laser/TL - if(C.is_zoomed) - delay = 20 - TL = new /obj/effect/overlay/temp/tank_laser (T) - - to_chat(usr, span_warning("Preparing to fire... keep the tank still for [delay * 0.1] seconds.")) - - if(!do_after(usr, delay, IGNORE_HELD_ITEM, src) || QDELETED(owner)) - to_chat(usr, span_warning("The [name]'s firing was interrupted.")) - qdel(TL) - - return - - qdel(TL) - - if(!prob(owner.accuracies["primary"] * 100 * owner.misc_ratios["prim_acc"])) - T = get_step(T, pick(GLOB.cardinals)) - var/obj/projectile/P = new - P.generate_bullet(new ammo.default_ammo) - log_bomber(usr, "fired", src) - P.fire_at(T, owner, src, P.ammo.max_range, P.ammo.shell_speed) - playsound(get_turf(src), pick('sound/weapons/guns/fire/tank_cannon1.ogg', 'sound/weapons/guns/fire/tank_cannon2.ogg'), 60, 1) - ammo.current_rounds-- - -/obj/item/hardpoint/primary/minigun - name = "LTAA-AP Minigun" - desc = "A primary weapon for tanks that spews bullets" - - max_integrity = 350 - point_cost = 100 - - icon_state = "ltaaap_minigun" - - disp_icon = "tank" - disp_icon_state = "ltaaap_minigun" - - starter_ammo = /obj/item/ammo_magazine/tank/ltaaap_minigun - max_angle = 45 - - //Miniguns don't use a conventional cooldown - //If you fire quickly enough, the cooldown decreases according to chain_delays - //If you fire too slowly, you slowly slow back down - //Also, different sounds play and it sounds sick, thanks Rahlzel - var/chained = 0 //how many quick succession shots we've fired - var/list/chain_delays = list(4, 4, 3, 3, 2, 2, 2, 1, 1) //the different cooldowns in deciseconds, sequentially - - //MAIN PROBLEM WITH THIS IMPLEMENTATION OF DELAYS: - //If you spin all the way up and then stop firing, your chained shots will only decrease by 1 - //TODO: Implement a rolling average for seconds per shot that determines chain length without being slow or buggy - //You'd probably have to normalize it between the length of the list and the actual ROF - //But you don't want to map it below a certain point probably since seconds per shot would go to infinity - - //So, I came back to this and changed it by adding a fixed reset at 1.5 seconds or later, which seems reasonable - //Now the cutoff is a little abrupt, but at least it exists. --MadSnailDisease - -/obj/item/hardpoint/primary/minigun/apply_buff() - owner.internal_cooldowns["primary"] = 2 //will be overridden, please ignore - owner.accuracies["primary"] = 0.33 - -/obj/item/hardpoint/primary/minigun/active_effect(atom/A) - if(!(ammo?.current_rounds > 0)) - to_chat(usr, span_warning("This module does not have any ammo.")) - return - var/S = 'sound/weapons/guns/fire/tank_minigun_start.ogg' - if(world.time - next_use <= 5) - chained++ //minigun spins up, minigun spins down - S = 'sound/weapons/guns/fire/tank_minigun_loop.ogg' - else if(world.time - next_use >= 15) //Too long of a delay, they restart the chain - chained = 1 - else //In between 5 and 15 it slows down but doesn't stop - chained-- - S = 'sound/weapons/guns/fire/tank_minigun_stop.ogg' - if(chained <= 0) - chained = 1 - - next_use = world.time + (chained > length(chain_delays) ? 0.5 : chain_delays[chained]) * owner.misc_ratios["prim_cool"] - if(!prob(owner.accuracies["primary"] * 100 * owner.misc_ratios["prim_acc"])) - A = get_step(A, pick(GLOB.cardinals)) - var/obj/projectile/P = new - P.generate_bullet(new ammo.default_ammo) - P.fire_at(A, owner, src, P.ammo.max_range, P.ammo.shell_speed) - - playsound(get_turf(src), S, 60) - ammo.current_rounds-- - -//////////////////// -// PRIMARY SLOTS // END -//////////////////// - -///////////////////// -// SECONDARY SLOTS // START -///////////////////// - -/obj/item/hardpoint/secondary/flamer - name = "Secondary Flamer Unit" - desc = "A secondary weapon for tanks that shoots flames" - - max_integrity = 300 - point_cost = 100 - - icon_state = "flamer" - - disp_icon = "tank" - disp_icon_state = "flamer" - - starter_ammo = /obj/item/ammo_magazine/tank/flamer - max_angle = 90 - -/obj/item/hardpoint/secondary/flamer/apply_buff() - owner.internal_cooldowns["secondary"] = 20 - owner.accuracies["secondary"] = 0.5 - -/obj/item/hardpoint/secondary/flamer/active_effect(atom/A) - - if(!(ammo?.current_rounds > 0)) - to_chat(usr, span_warning("This module does not have any ammo.")) - return - - next_use = world.time + owner.internal_cooldowns["secondary"] * owner.misc_ratios["secd_cool"] - if(!prob(owner.accuracies["secondary"] * 100 * owner.misc_ratios["secd_acc"])) - A = get_step(A, pick(GLOB.cardinals)) - var/obj/projectile/P = new - P.generate_bullet(new ammo.default_ammo) - P.fire_at(A, owner, src, P.ammo.max_range, P.ammo.shell_speed) - playsound(get_turf(src), 'sound/weapons/guns/fire/tank_flamethrower.ogg', 60, 1) - ammo.current_rounds-- - -/obj/item/hardpoint/secondary/towlauncher - name = "TOW Launcher" - desc = "A secondary weapon for tanks that shoots rockets" - - max_integrity = 500 - point_cost = 100 - - icon_state = "tow_launcher" - - disp_icon = "tank" - disp_icon_state = "towlauncher" - - starter_ammo = /obj/item/ammo_magazine/tank/towlauncher - max_clips = 1 - max_angle = 90 - -/obj/item/hardpoint/secondary/towlauncher/apply_buff() - owner.internal_cooldowns["secondary"] = 150 - owner.accuracies["secondary"] = 0.8 - -/obj/item/hardpoint/secondary/towlauncher/active_effect(atom/A) - - if(!(ammo?.current_rounds > 0)) - to_chat(usr, span_warning("This module does not have any ammo.")) - return - - var/delay = 3 - var/turf/T = get_turf(A) - if(!T) - return - var/obj/vehicle/multitile/root/cm_armored/tank/C = owner - var/obj/effect/overlay/temp/tank_laser/TL - if(C.is_zoomed) - delay = 15 - TL = new /obj/effect/overlay/temp/tank_laser (T) - - to_chat(usr, span_warning("Preparing to fire... keep the tank still for [delay * 0.1] seconds.")) - - if(!do_after(usr, delay, IGNORE_HELD_ITEM, src) || QDELETED(owner)) - to_chat(usr, span_warning("The [name]'s firing was interrupted.")) - qdel(TL) - return - - qdel(TL) - - next_use = world.time + owner.internal_cooldowns["secondary"] * owner.misc_ratios["secd_cool"] - var/obj/item/hardpoint/primary/cannon/HP = owner.hardpoints[HDPT_PRIMARY] - if(istype(HP)) - HP.next_use = world.time + owner.internal_cooldowns["primary"] * owner.misc_ratios["prim_cool"] - - if(!prob(owner.accuracies["secondary"] * 100 * owner.misc_ratios["secd_acc"])) - T = get_step(T, pick(GLOB.cardinals)) - var/obj/projectile/P = new - P.generate_bullet(new ammo.default_ammo) - log_bomber(usr, "fired", src) - P.fire_at(T, owner, src, P.ammo.max_range, P.ammo.shell_speed) - ammo.current_rounds-- - -/obj/item/hardpoint/secondary/m56cupola/broken - obj_integrity = 0 - buyable = FALSE - -/obj/item/hardpoint/secondary/m56cupola/apply_buff() - owner.internal_cooldowns["secondary"] = 3 - owner.accuracies["secondary"] = 0.7 - -/obj/item/hardpoint/secondary/m56cupola/active_effect(atom/A) - - if(!(ammo?.current_rounds > 0)) - to_chat(usr, span_warning("This module does not have any ammo.")) - return - - next_use = world.time + owner.internal_cooldowns["secondary"] * owner.misc_ratios["secd_cool"] - if(!prob(owner.accuracies["secondary"] * 100 * owner.misc_ratios["secd_acc"])) - A = get_step(A, pick(GLOB.cardinals)) - var/obj/projectile/P = new - P.generate_bullet(new ammo.default_ammo) - P.fire_at(A, owner, src, P.ammo.max_range, P.ammo.shell_speed) - playsound(get_turf(src), pick(list('sound/weapons/guns/fire/smartgun1.ogg', 'sound/weapons/guns/fire/smartgun2.ogg', 'sound/weapons/guns/fire/smartgun3.ogg')), 60, 1) - ammo.current_rounds-- - -/obj/item/hardpoint/secondary/grenade_launcher - name = "Grenade Launcher" - desc = "A secondary weapon for tanks that shoots grenades" - - max_integrity = 500 - point_cost = 25 - - icon_state = "glauncher" - - disp_icon = "tank" - disp_icon_state = "glauncher" - - starter_ammo = /obj/item/ammo_magazine/tank/tank_glauncher - max_clips = 3 - max_angle = 90 - -/obj/item/hardpoint/secondary/grenade_launcher/apply_buff() - owner.internal_cooldowns["secondary"] = 30 - owner.accuracies["secondary"] = 0.4 - -/obj/item/hardpoint/secondary/grenade_launcher/active_effect(atom/A) - - if(!(ammo?.current_rounds > 0)) - to_chat(usr, span_warning("This module does not have any ammo.")) - return - - next_use = world.time + owner.internal_cooldowns["secondary"] * owner.misc_ratios["secd_cool"] - if(!prob(owner.accuracies["secondary"] * 100 * owner.misc_ratios["secd_acc"])) - A = get_step(A, pick(GLOB.cardinals)) - var/obj/projectile/P = new - P.generate_bullet(new ammo.default_ammo) - log_bomber(usr, "fired", src) - P.fire_at(A, owner, src, P.ammo.max_range, P.ammo.shell_speed) - playsound(get_turf(src), 'sound/weapons/guns/fire/grenadelauncher.ogg', 60, 1) - ammo.current_rounds-- -///////////////////// -// SECONDARY SLOTS // END -///////////////////// - -/////////////////// -// SUPPORT SLOTS // START -/////////////////// - -/obj/item/hardpoint/support/smoke_launcher - name = "Smoke Launcher" - desc = "Launches smoke forward to obscure vision" - - max_integrity = 300 - point_cost = 10 - - icon_state = "slauncher_0" - - disp_icon = "tank" - disp_icon_state = "slauncher" - - starter_ammo = /obj/item/ammo_magazine/tank/tank_slauncher - max_clips = 4 - is_activatable = TRUE - -/obj/item/hardpoint/support/smoke_launcher/broken - obj_integrity = 0 - buyable = FALSE - -/obj/item/hardpoint/support/smoke_launcher/apply_buff() - owner.internal_cooldowns["support"] = 30 - owner.accuracies["support"] = 0.8 - -/obj/item/hardpoint/support/smoke_launcher/active_effect(atom/A) - - if(!(ammo?.current_rounds > 0)) - to_chat(usr, span_warning("This module does not have any ammo.")) - return - - next_use = world.time + owner.internal_cooldowns["support"] * owner.misc_ratios["supp_cool"] - if(!prob(owner.accuracies["support"] * 100 * owner.misc_ratios["supp_acc"])) - A = get_step(A, pick(GLOB.cardinals)) - var/obj/projectile/P = new - P.generate_bullet(new ammo.default_ammo) - P.fire_at(A, owner, src, P.ammo.max_range, P.ammo.shell_speed) - playsound(get_turf(src), 'sound/weapons/guns/fire/tank_smokelauncher.ogg', 60, 1) - ammo.current_rounds-- - -/obj/item/hardpoint/support/smoke_launcher/get_icon_image(x_offset, y_offset, new_dir) - - var/icon_suffix = "NS" - var/icon_state_suffix = "0" - - if(new_dir in list(NORTH, SOUTH)) - icon_suffix = "NS" - else if(new_dir in list(EAST, WEST)) - icon_suffix = "EW" - - if(!obj_integrity) - icon_state_suffix = "1" - else if(!(ammo?.current_rounds > 0)) - icon_state_suffix = "2" - - return image(icon = "[disp_icon]_[icon_suffix]", icon_state = "[disp_icon_state]_[icon_state_suffix]", pixel_x = x_offset, pixel_y = y_offset) - -/obj/item/hardpoint/support/weapons_sensor - name = "Integrated Weapons Sensor Array" - desc = "Improves the accuracy and fire rate of all onboard weapons" - - max_integrity = 250 - point_cost = 100 - max_clips = 0 - - icon_state = "warray" - - disp_icon = "tank" - disp_icon_state = "warray" - -/obj/item/hardpoint/support/weapons_sensor/apply_buff() - owner.misc_ratios["prim_cool"] = 0.67 - owner.misc_ratios["secd_cool"] = 0.67 - owner.misc_ratios["supp_cool"] = 0.67 - - owner.misc_ratios["prim_acc"] = 1.67 - owner.misc_ratios["secd_acc"] = 1.67 - owner.misc_ratios["supp_acc"] = 1.67 - -/obj/item/hardpoint/support/weapons_sensor/remove_buff() - owner.misc_ratios["prim_cool"] = 1 - owner.misc_ratios["secd_cool"] = 1 - owner.misc_ratios["supp_cool"] = 1 - - owner.misc_ratios["prim_acc"] = 1 - owner.misc_ratios["secd_acc"] = 1 - owner.misc_ratios["supp_acc"] = 1 - -/obj/item/hardpoint/support/overdrive_enhancer - name = "Overdrive Enhancer" - desc = "Increases the movement speed of the vehicle it's atached to" - - max_integrity = 250 - point_cost = 100 - max_clips = 0 - - icon_state = "odrive_enhancer" - is_activatable = TRUE - - disp_icon = "tank" - disp_icon_state = "odrive_enhancer" - - var/last_boost - -/obj/item/hardpoint/support/overdrive_enhancer/proc/nitros_on(mob/M) - owner.misc_ratios["move"] = 0.2 - if(M) - to_chat(M, span_danger("You hit the nitros! RRRRRRRMMMM!!")) - playsound(M, 'sound/mecha/hydraulic.ogg', 60, 1, vary = 0) - addtimer(CALLBACK(src, PROC_REF(boost_off)), TANK_OVERDRIVE_BOOST_DURATION) - addtimer(CALLBACK(src, PROC_REF(boost_ready_notice)), TANK_OVERDRIVE_BOOST_COOLDOWN) - -/obj/item/hardpoint/support/overdrive_enhancer/remove_buff() - var/obj/vehicle/multitile/root/cm_armored/tank/C = owner - C.verbs -= /obj/vehicle/multitile/root/cm_armored/tank/verb/overdrive_multitile - boost_off() - -/obj/item/hardpoint/support/overdrive_enhancer/apply_buff() - var/obj/vehicle/multitile/root/cm_armored/tank/C = owner - C.verbs += /obj/vehicle/multitile/root/cm_armored/tank/verb/overdrive_multitile - -/obj/item/hardpoint/support/overdrive_enhancer/proc/boost_off() - owner.misc_ratios["move"] = 1 - -/obj/item/hardpoint/support/overdrive_enhancer/proc/boost_ready_notice() - var/obj/vehicle/multitile/root/cm_armored/tank/C = owner - if(C.driver) - to_chat(C.driver, span_danger("The overdrive nitros are ready for use.")) - -/obj/item/hardpoint/support/overdrive_enhancer/proc/activate_overdrive() - var/obj/vehicle/multitile/root/cm_armored/tank/C = owner - if(!C.driver) - return - if(world.time < last_boost + TANK_OVERDRIVE_BOOST_COOLDOWN) - to_chat(C.driver, span_warning("Your nitro overdrive isn't yet ready. It will be available again in [(last_boost + TANK_OVERDRIVE_BOOST_COOLDOWN - world.time) * 0.1] seconds.")) - return - last_boost = world.time - nitros_on(C.driver) - -//How to get out, via verb -/obj/vehicle/multitile/root/cm_armored/tank/verb/overdrive_multitile() - set category = "Vehicle" - set name = "Activate Overdrive" - set src in view(0) - - if(usr.incapacitated(TRUE)) - return - - if(usr != driver) - to_chat(usr, span_warning("You need to be in the driver seat to use this!")) - return - - var/obj/item/hardpoint/support/overdrive_enhancer/OE = hardpoints[HDPT_SUPPORT] - if(!istype(OE, /obj/item/hardpoint/support/overdrive_enhancer) || OE.obj_integrity <= 0) - to_chat(usr, span_warning("The overdrive engine is missing or too badly damaged!")) - return - OE.activate_overdrive(usr) - -/obj/item/hardpoint/support/artillery_module - name = "Artillery Module" - desc = "Allows the gunner to look far into the distance." - - max_integrity = 250 - point_cost = 100 - max_clips = 0 - - is_activatable = TRUE - var/is_active = FALSE - - var/view_buff = "25x25" //This way you can VV for more or less fun - var/view_tile_offset = 5 - - icon_state = "artillery" - - disp_icon = "tank" - disp_icon_state = "artillerymod" - -/obj/item/hardpoint/support/artillery_module/active_effect(atom/A) - var/obj/vehicle/multitile/root/cm_armored/tank/C = owner - if(!C.gunner) - return - var/mob/M = C.gunner - if(!M.client) - return - if(is_active) - M.client.view_size.reset_to_default() - M.client.pixel_x = 0 - M.client.pixel_y = 0 - is_active = FALSE - C.is_zoomed = FALSE - return - M.client.view_size.reset_to_default() - is_active = TRUE - C.is_zoomed = TRUE - switch(C.dir) - if(NORTH) - M.client.pixel_x = 0 - M.client.pixel_y = view_tile_offset * 32 - if(SOUTH) - M.client.pixel_x = 0 - M.client.pixel_y = -1 * view_tile_offset * 32 - if(EAST) - M.client.pixel_x = view_tile_offset * 32 - M.client.pixel_y = 0 - if(WEST) - M.client.pixel_x = -1 * view_tile_offset * 32 - M.client.pixel_y = 0 - -/obj/item/hardpoint/support/artillery_module/deactivate() - var/obj/vehicle/multitile/root/cm_armored/tank/C = owner - if(!ismob(C.gunner)) - return - var/mob/M = C.gunner - if(!M.client) - return - is_active = FALSE - M.client.view_size.reset_to_default() - M.client.pixel_x = 0 - M.client.pixel_y = 0 - -/obj/item/hardpoint/support/artillery_module/remove_buff() - deactivate() - -/obj/item/hardpoint/support/artillery_module/is_ready() - if(!obj_integrity) - to_chat(usr, span_warning("This module is too broken to be used.")) - return FALSE - return TRUE - -/////////////////// -// SUPPORT SLOTS // END -/////////////////// - -///////////////// -// ARMOR SLOTS // START -///////////////// - -/obj/item/hardpoint/armor/ballistic - name = "Ballistic Armor" - desc = "Protects the vehicle from high-penetration weapons. Provides some protection against slashing and high impact attacks." - - max_integrity = 1000 - point_cost = 100 - - icon_state = "ballistic_armor" - - disp_icon = "tank" - disp_icon_state = "ballistic_armor" - -/obj/item/hardpoint/armor/ballistic/broken - obj_integrity = 0 - buyable = FALSE - -/obj/item/hardpoint/armor/ballistic/apply_buff() - owner.dmg_multipliers["bullet"] = 0.5 - owner.dmg_multipliers["slash"] = 0.75 - owner.dmg_multipliers["blunt"] = 0.75 - owner.dmg_multipliers["all"] = 0.9 - -/obj/item/hardpoint/armor/ballistic/remove_buff() - owner.dmg_multipliers["bullet"] = 1 - owner.dmg_multipliers["slash"] = 1 - owner.dmg_multipliers["blunt"] = 1 - owner.dmg_multipliers["all"] = 1 - -/obj/item/hardpoint/armor/caustic - name = "Caustic Armor" - desc = "Protects vehicles from most types of acid. Provides some protection against slashing and high impact attacks." - - max_integrity = 1000 - point_cost = 100 - - icon_state = "caustic_armor" - - disp_icon = "tank" - disp_icon_state = "caustic_armor" - -/obj/item/hardpoint/armor/caustic/apply_buff() - owner.dmg_multipliers["acid"] = 0.5 - owner.dmg_multipliers["slash"] = 0.75 - owner.dmg_multipliers["blunt"] = 0.75 - owner.dmg_multipliers["all"] = 0.9 - -/obj/item/hardpoint/armor/caustic/remove_buff() - owner.dmg_multipliers["acid"] = 1 - owner.dmg_multipliers["slash"] = 1 - owner.dmg_multipliers["blunt"] = 1 - owner.dmg_multipliers["all"] = 1 - -/obj/item/hardpoint/armor/concussive - name = "Concussive Armor" - desc = "Protects the vehicle from high-impact weapons. Provides some protection against ballistic and explosive attacks." - - max_integrity = 1000 - point_cost = 100 - - icon_state = "concussive_armor" - - disp_icon = "tank" - disp_icon_state = "concussive_armor" - -/obj/item/hardpoint/armor/concussive/apply_buff() - owner.dmg_multipliers["blunt"] = 0.5 - owner.dmg_multipliers["explosive"] = 0.75 - owner.dmg_multipliers["ballistic"] = 0.75 - owner.dmg_multipliers["all"] = 0.9 - -/obj/item/hardpoint/armor/concussive/remove_buff() - owner.dmg_multipliers["blunt"] = 1 - owner.dmg_multipliers["explosive"] = 1 - owner.dmg_multipliers["ballistic"] = 1 - owner.dmg_multipliers["all"] = 1 - -/obj/item/hardpoint/armor/paladin - name = "Paladin Armor" - desc = "Protects the vehicle from large incoming explosive projectiles. Provides some protection against slashing and high impact attacks." - - max_integrity = 1000 - point_cost = 100 - - icon_state = "paladin_armor" - - disp_icon = "tank" - disp_icon_state = "paladin_armor" - -/obj/item/hardpoint/armor/paladin/apply_buff() - owner.dmg_multipliers["explosive"] = 0.5 - owner.dmg_multipliers["blunt"] = 0.75 - owner.dmg_multipliers["slash"] = 0.75 - owner.dmg_multipliers["all"] = 0.9 - -/obj/item/hardpoint/armor/paladin/remove_buff() - owner.dmg_multipliers["explosive"] = 1 - owner.dmg_multipliers["blunt"] = 1 - owner.dmg_multipliers["slash"] = 1 - owner.dmg_multipliers["all"] = 1 - -/obj/item/hardpoint/armor/snowplow - name = "Snowplow" - desc = "Clears a path in the snow for friendlies" - - max_integrity = 700 - is_activatable = TRUE - point_cost = 50 - - icon_state = "snowplow" - - disp_icon = "tank" - disp_icon_state = "snowplow" - -/obj/item/hardpoint/armor/snowplow/livingmob_interact(mob/living/M) - var/turf/targ = get_step(M, owner.dir) - targ = get_step(M, owner.dir) - targ = get_step(M, owner.dir) - M.throw_at(targ, 4, 2, src, 1) - M.apply_damage(7 + rand(0, 3), BRUTE, blocked = MELEE) - -///////////////// -// ARMOR SLOTS // END -///////////////// - -///////////////// -// TREAD SLOTS // START -///////////////// - -/obj/item/hardpoint/treads/standard - name = "Treads" - desc = "Integral to the movement of the vehicle" - - max_integrity = 500 - point_cost = 25 - - icon_state = "treads" - - disp_icon = "tank" - disp_icon_state = "treads" - -/obj/item/hardpoint/treads/standard/broken - obj_integrity = 0 - buyable = FALSE - -/obj/item/hardpoint/treads/standard/get_icon_image(x_offset, y_offset, new_dir) - return null //Handled in update_icon() - -/obj/item/hardpoint/treads/standard/apply_buff() - owner.move_delay = 7 - -/obj/item/hardpoint/treads/standard/remove_buff() - owner.move_delay = 30 - -///////////////// -// TREAD SLOTS // END -///////////////// - - -/////////////// -// AMMO MAGS // START -/////////////// - -//Special ammo magazines for hardpoint modules. Some aren't here since you can use normal magazines on them -/obj/item/ammo_magazine/tank - flags_magazine = NONE //No refilling - var/point_cost = 0 - -/obj/item/ammo_magazine/tank/ltb_cannon - name = "LTB Cannon Magazine" - desc = "A primary armament cannon magazine" - caliber = CALIBER_86 //Making this unique on purpose - icon_state = "ltbcannon_4" - w_class = WEIGHT_CLASS_GIGANTIC - default_ammo = /datum/ammo/rocket/ltb - max_rounds = 4 - point_cost = 50 - -/obj/item/ammo_magazine/tank/ltb_cannon/update_icon() - icon_state = "ltbcannon_[current_rounds]" - - -/obj/item/ammo_magazine/tank/ltaaap_minigun - name = "LTAA-AP Minigun Magazine" - desc = "A primary armament minigun magazine" - caliber = CALIBER_762X51 //Correlates to miniguns - icon_state = "painless" - w_class = WEIGHT_CLASS_GIGANTIC - default_ammo = /datum/ammo/bullet/minigun - max_rounds = 500 - point_cost = 25 - - - -/obj/item/ammo_magazine/tank/flamer - name = "Flamer Magazine" - desc = "A secondary armament flamethrower magazine" - caliber = CALIBER_FUEL_THICK //correlates to flamer mags - icon_state = "flametank_large" - w_class = WEIGHT_CLASS_GIGANTIC - default_ammo = /datum/ammo/flamethrower/tank_flamer - max_rounds = 120 - point_cost = 50 - - - -/obj/item/ammo_magazine/tank/towlauncher - name = "TOW Launcher Magazine" - desc = "A secondary armament rocket magazine" - caliber = CALIBER_84MM //correlates to any rocket mags - icon_state = "quad_rocket" - w_class = WEIGHT_CLASS_GIGANTIC - default_ammo = /datum/ammo/rocket/ap //Fun fact, AP rockets seem to be a straight downgrade from normal rockets. Maybe I'm missing something... - max_rounds = 5 - point_cost = 100 - -/obj/item/ammo_magazine/tank/tank_glauncher - name = "Grenade Launcher Magazine" - desc = "A secondary armament grenade magazine" - caliber = CALIBER_40MM - icon_state = "glauncher_2" - w_class = WEIGHT_CLASS_GIGANTIC - default_ammo = /datum/ammo/grenade_container - max_rounds = 10 - point_cost = 25 - - -/obj/item/ammo_magazine/tank/tank_glauncher/update_icon() - if(current_rounds >= max_rounds) - icon_state = "glauncher_2" - else if(current_rounds <= 0) - icon_state = "glauncher_0" - else - icon_state = "glauncher_1" - - -/obj/item/ammo_magazine/tank/tank_slauncher - name = "Smoke Launcher Magazine" - desc = "A support armament grenade magazine" - caliber = CALIBER_40MM - icon_state = "slauncher_1" - w_class = WEIGHT_CLASS_GIGANTIC - default_ammo = /datum/ammo/grenade_container/smoke - max_rounds = 6 - point_cost = 5 - -/obj/item/ammo_magazine/tank/tank_slauncher/update_icon() - icon_state = "slauncher_[current_rounds <= 0 ? "0" : "1"]" - -/////////////// -// AMMO MAGS // END -/////////////// diff --git a/code/modules/vehicles/multitile/multitile.dm b/code/modules/vehicles/multitile/multitile.dm deleted file mode 100644 index 784a98157affb..0000000000000 --- a/code/modules/vehicles/multitile/multitile.dm +++ /dev/null @@ -1,246 +0,0 @@ - -/* -A multitile vehicle is made up of 2 types of objects, root and hitbox -relaymove() only does something for root -You can inherit and do special stuff for either, but only one will let you move -Rotations treat root as x = 0, y = 0 -All of the backend for movement will be under root - -Vehicles are placed on the map by a spawner or admin verb -*/ - -//This was part of an old plan to have a dynamic number of vehicle interiors -//Turns out that's incredibly fucking dificult, so a fixed number is gonna be the ideal choice -/* -/obj/effect/landmark/multitile_starter - name = "Landmark" - desc = "Where the interiors for multitiles start spawning" -*/ - -/obj/effect/multitile_spawner - - var/width = 2 - var/height = 3 - var/spawn_dir = SOUTH - -//A hidden marker for where you mount and dismount the vehicle -//You could have multiple if you wanted -/obj/effect/multitile_entrance - name = "Entrance marker" - desc = "Marker for the entrance of a multitile vehicle." - - var/obj/vehicle/multitile/root/master - invisibility = INVISIBILITY_MAXIMUM - -/obj/effect/multitile_entrance/Destroy(force = FALSE) - if(!force) - return QDEL_HINT_LETMELIVE - return ..() - -//Always moves where you want it to, no matter what -/obj/effect/multitile_entrance/Move(atom/A) - loc = get_turf(A) - return TRUE - -//A basic handoff to the root object to actually deal with attempted player entrance -/obj/effect/multitile_entrance/verb/enter_multitile() - set category = "Vehicle" - set name = "Enter Vehicle" - set src in view(0) - - master.handle_player_entrance(usr) - -//Remnant of vehicle interiors -/* -/obj/effect/landmark/multitile_exit - name = "Landmark" - desc = "Marker for the exit of the interior" - - invisibility = INVISIBILITY_MAXIMUM - - var/obj/vehicle/multitile/root/master -*/ - -/* -/obj/effect/landmark/multitile_exit/verb/exit_multitile(mob/M) - set category = "Vehicle" - set name = "Exit Vehicle" - set src in master - - master.handle_player_exit(M) -*/ - -//Super super generic, doesn't really need to exist -/obj/vehicle/multitile - name = "multitile vehicle" - desc = "You shouldn't see this" - -/obj/vehicle/multitile/relaymove(mob/user, direction) - return - -//Hitboxes, do notthing but move with the root object and take up space -//All interactions like bullets or whatever should be passed up to the root object -/obj/vehicle/multitile/hitbox - name = "hitbox" - desc = "Generic multitile vehicle hitbox" - - var/obj/vehicle/multitile/root/root - invisibility = INVISIBILITY_MAXIMUM - -/obj/vehicle/multitile/root - name = "root" - desc = "Root tile for multitile vehicles" - - var/old_dir - - var/obj/effect/multitile_entrance/entrance - //var/obj/effect/landmark/multitile_exit/exit - - //Objects that move in accordance with this one - //Objects indexed by /datum/coords - //Does not include the root obj - var/list/linked_objs = list() - - //list of turfs that the vehicle was in before - var/list/old_locs = list() - - //list of idle passengers in the vehicle - //used for any type of APC - var/list/idle_passengers = list() - var/max_idle_passengers = 0 - - //Another remnant of vehicle interiors - //var/list/interior_data = list() - - var/base_icon_type = "" //e.g. "tank" or "apc", used to assign icons to the hitboxes - - var/hitbox_type = /obj/vehicle/multitile/hitbox - -//How to get out, via verb -/obj/vehicle/multitile/root/verb/exit_multitile() - set category = "Vehicle" - set name = "Exit Vehicle" - set src in view(0) - - if(!usr.incapacitated(TRUE)) - handle_player_exit(usr) - -/obj/vehicle/multitile/root/proc/handle_player_exit(mob/M) - return - -/obj/vehicle/multitile/root/proc/handle_player_entrance(mob/living/M) - if(M.resting || M.buckled || M.incapacitated()) - return FALSE - return TRUE - -/obj/vehicle/multitile/root/proc/handle_harm_attack(mob/living/M) - if(M.resting || M.buckled || M.incapacitated()) - return FALSE - return TRUE - -//Vebrs for rotations, set up a macro and get turnin -/obj/vehicle/multitile/root/verb/clockwise_rotate_multitile() - set category = "Vehicle" - set name = "Rotate Vehicle Clockwise" - set src in view(0) - - var/mob/M = usr - try_rotate(-90, M) - -/obj/vehicle/multitile/root/verb/counterclockwise_rotate_multitile() - set category = "Vehicle" - set name = "Rotate Vehicle Counterclockwise" - set src in view(0) - - var/mob/M = usr - try_rotate(90, M) - -//A wrapper for try_move() that rotates -/obj/vehicle/multitile/root/proc/try_rotate(deg, mob/user, force = FALSE) - save_locs() - rotate_coords(deg) - if(!try_move(linked_objs, null, TRUE)) - rotate_coords(-1*deg) - revert_locs() - return FALSE - - update_icon() - return TRUE - -//Called when players try to move from inside the vehicle -//Another wrapper for try_move() -/obj/vehicle/multitile/root/relaymove(mob/user, direction) - if(dir in list(EAST, WEST)) - if(direction == SOUTH) - return try_rotate( (dir == WEST ? 90 : -90), user, 1) - else if(direction == NORTH) - return try_rotate( (dir == EAST ? 90 : -90), user, 1) - - else if(dir in list(SOUTH, NORTH)) - if(direction == EAST) - return try_rotate( (dir == SOUTH ? 90 : -90), user, 1) - else if(direction == WEST) - return try_rotate( (dir == NORTH ? 90 : -90), user, 1) - - old_dir = dir - save_locs() - if(!try_move(linked_objs, direction)) - revert_locs() - setDir(old_dir) - return FALSE //Failed movement - - setDir(old_dir) //Preserve the direction you're facing when moving backwards - return TRUE - - -/obj/vehicle/multitile/root/proc/load_hitboxes() - return - -/obj/vehicle/multitile/root/proc/load_entrance_marker() - return - -//Saves where everything is so we can revert -/obj/vehicle/multitile/root/proc/save_locs() - - - -//We were unable to move, so revert everything we may have done so far -/obj/vehicle/multitile/root/proc/revert_locs() - - -//Forces the root object to move so everything can update relative to it -/obj/vehicle/multitile/root/proc/move_root(direction) - - var/turf/T = get_step(loc, direction) - loc = T - -//The REAL guts of multitile movement -//Here's how this shit works: - -//Step 1: Iterate over every associated object and move what can be moved in the right dir -//Step 2: Save everything that couldn't move in a list -//Step 3: Recursively try to move those after everything else that can move has done so -// This is so if one hitbox is blocking another, eventually they will both move -//Step 4: If on this level of recursion, we couldn't move any more things, we've failed -//Step 5: Continue steps 1 through 4 until we fail or succeed -/obj/vehicle/multitile/root/proc/try_move(list/objs, direction, is_rotation = FALSE) - - var/list/blocked = list() //What couldn't move this time - - - if(length(blocked) == length(objs)) - return FALSE //No more things can move, return false - - else if(length(blocked)) - return try_move(blocked, direction, is_rotation) //Some things moved, retry the others - - else if(!length(blocked)) - return TRUE //Everything finished moving, return true - - else - return FALSE //Shouldn't even be possible, so say we failed anyways - -//Applies the 2D transformation matrix to the saved coords -/obj/vehicle/multitile/root/proc/rotate_coords(deg) - - diff --git a/code/modules/vehicles/multitile/tank.dm b/code/modules/vehicles/multitile/tank.dm deleted file mode 100644 index d7ca9e8d39af2..0000000000000 --- a/code/modules/vehicles/multitile/tank.dm +++ /dev/null @@ -1,308 +0,0 @@ - -//TANKS, HURRAY -//Read the documentation in cm_armored.dm and multitile.dm before trying to decipher this stuff - - -/obj/vehicle/multitile/root/cm_armored/tank - name = "\improper M34A2 Longstreet Light Tank" - desc = "A giant piece of armor with a big gun, you know what to do. Entrance in the back." - - icon = 'icons/obj/vehicles/tank_NS.dmi' - icon_state = "tank_base" - pixel_x = -32 - pixel_y = -32 - - var/mob/gunner - var/mob/driver - - var/mob/occupant_exiting - var/next_sound_play = 0 - - var/is_zoomed = FALSE - - req_access = list() - -/obj/effect/multitile_spawner/cm_armored/tank - - width = 3 - height = 3 - spawn_dir = EAST - var/list/spawn_hardpoints = list() - -/obj/effect/multitile_spawner/cm_armored/tank/Initialize(mapload) - . = ..() - return INITIALIZE_HINT_QDEL - -//Spawns a tank that has a bunch of broken hardpoints -/obj/effect/multitile_spawner/cm_armored/tank/decrepit - spawn_hardpoints = list(HDPT_PRIMARY = /obj/item/hardpoint/primary/cannon/broken, - HDPT_SECDGUN = /obj/item/hardpoint/secondary/m56cupola/broken, - HDPT_SUPPORT = /obj/item/hardpoint/support/smoke_launcher/broken, - HDPT_ARMOR = /obj/item/hardpoint/armor/ballistic/broken, - HDPT_TREADS = /obj/item/hardpoint/treads/standard/broken) - -/obj/effect/multitile_spawner/cm_armored/tank/fixed - spawn_hardpoints = list(HDPT_PRIMARY = /obj/item/hardpoint/primary/cannon, - HDPT_SECDGUN = /obj/item/hardpoint/secondary/m56cupola, - HDPT_SUPPORT = /obj/item/hardpoint/support/smoke_launcher, - HDPT_ARMOR = /obj/item/hardpoint/armor/ballistic, - HDPT_TREADS = /obj/item/hardpoint/treads/standard) - -//For the tank, start forcing people out if everything is broken -/obj/vehicle/multitile/root/cm_armored/tank/handle_all_modules_broken() - deactivate_all_hardpoints() - - if(driver) - to_chat(driver, span_danger("You dismount to as the smoke and flames start to choke you!")) - driver.Move(entrance.loc) - driver.unset_interaction() - driver = null - else if(gunner) - to_chat(gunner, span_danger("You dismount to as the smoke and flames start to choke you!")) - gunner.Move(entrance.loc) - gunner.unset_interaction() - gunner = null - -/obj/vehicle/multitile/root/cm_armored/tank/remove_all_players() - deactivate_all_hardpoints() - for(var/mob/living/L in (contents + loc.contents)) - if(!entrance) //Something broke, uh oh - forceMove(get_turf(src)) - else - forceMove(get_turf(entrance)) - gunner = null - driver = null - -//Let's you switch into the other seat, doesn't work if it's occupied -/obj/vehicle/multitile/root/cm_armored/tank/verb/switch_seats() - set name = "Swap Seats" - set category = "Vehicle" - set src in view(0) - - if(usr.incapacitated()) - return - - var/wannabe_trucker = (usr == gunner) ? TRUE : FALSE - var/neighbour = wannabe_trucker ? driver : gunner - if(neighbour) - to_chat(usr, span_notice("There's already someone in the other seat.")) - return - - to_chat(usr, span_notice("You start getting into the other seat.")) - addtimer(CALLBACK(src, PROC_REF(seat_switched), wannabe_trucker, usr), 3 SECONDS) - -/obj/vehicle/multitile/root/cm_armored/tank/proc/seat_switched(wannabe_trucker, mob/living/user) - - var/player = wannabe_trucker ? gunner : driver - var/challenger = wannabe_trucker ? driver : gunner - if(QDELETED(user) || user.incapacitated() || player != user) - return - - if(challenger) - to_chat(usr, span_notice("Someone beat you to the other seat!")) - return - - to_chat(usr, span_notice("You man up the [wannabe_trucker ? "driver" : "gunner"]'s seat.")) - - if(wannabe_trucker) - deactivate_all_hardpoints() - driver = wannabe_trucker ? user : null - gunner = wannabe_trucker ? null : user - -/obj/vehicle/multitile/root/cm_armored/tank/can_use_hp(mob/M) - if(!M || M != gunner) - return FALSE - if(!M.dextrous) - to_chat(M, span_warning("You don't have the dexterity to do this!")) - return FALSE - return !M.incapacitated() - -/obj/vehicle/multitile/root/cm_armored/tank/handle_harm_attack(mob/M, mob/occupant) - . = ..() - if(!.) - return - if(!occupant) - to_chat(M, span_warning("There is no one on that seat.")) - return - M.visible_message(span_warning("[M] starts pulling [occupant] out of \the [src]."), - span_warning("You start pulling [occupant] out of \the [src]. (this will take a while...)"), null, 6) - var/fumbling_time = 20 SECONDS - 2 SECONDS * M.skills.getRating(SKILL_POLICE) - 2 SECONDS * M.skills.getRating(SKILL_LARGE_VEHICLE) - if(!do_after(M, fumbling_time, NONE, src, BUSY_ICON_HOSTILE)) - return - exit_tank(occupant, TRUE, TRUE) - M.visible_message(span_warning("[M] forcibly pulls [occupant] out of [src]."), - span_notice("you forcibly pull [occupant] out of [src]."), null, 6) - if(!isliving(occupant)) - return - var/mob/living/L = occupant - L.Paralyze(8 SECONDS) - -//Two seats, gunner and driver -//Must have the skills to do so -/obj/vehicle/multitile/root/cm_armored/tank/handle_player_entrance(mob/living/carbon/M) - . = ..() - if(!. || !istype(M) || M.do_actions) - return - - var/slot = tgui_alert(M, "Select a seat", null, list("Driver", "Gunner")) - if(!Adjacent(M)) - return - - var/occupant = (slot == "Driver") ? driver : gunner - if((M.a_intent == INTENT_HARM || isxeno(M)) && occupant) - handle_harm_attack(M, occupant) - return - - if(!M.dextrous) - to_chat(M, span_warning("You don't have the dexterity to drive [src]!")) - return - if(!allowed(M)) - to_chat(M, span_warning("Access denied.")) - return - if(occupant) - to_chat(M, span_warning("That seat is already taken.")) - return - var/obj/item/offhand = M.get_inactive_held_item() - if(offhand && !(HAS_TRAIT(offhand, TRAIT_NODROP) || (offhand.flags_item & (DELONDROP|ITEM_ABSTRACT)))) - to_chat(M, span_warning("You need your hands free to climb on [src].")) - return - - if(M.skills.getRating(SKILL_LARGE_VEHICLE) < SKILL_LARGE_VEHICLE_TRAINED) - M.visible_message(span_notice("[M] fumbles around figuring out how to get into the [src]."), - span_notice("You fumble around figuring out how to get into [src].")) - var/fumbling_time = 10 SECONDS - 2 SECONDS * M.skills.getRating(SKILL_LARGE_VEHICLE) - if(!do_after(M, fumbling_time, NONE, src, BUSY_ICON_UNSKILLED) || \ - (offhand && !(HAS_TRAIT(offhand, TRAIT_NODROP) || (offhand.flags_item & DELONDROP)))) - return - - to_chat(M, span_notice("You start climbing into [src].")) - if(!do_after(M, 10 SECONDS, NONE, src, BUSY_ICON_GENERIC) || \ - (offhand && !(HAS_TRAIT(offhand, TRAIT_NODROP) || (offhand.flags_item & DELONDROP)))) - return - if(occupant) - to_chat(M, span_warning("Someone got into the [lowertext(slot)]'s seat before you could.")) - return - - if(slot == "Driver") - driver = M - else - gunner = M - M.forceMove(src) - to_chat(M, span_notice("You enter into the [lowertext(slot)]'s seat.")) - M.set_interaction(src) - -//Deposits you onto the exit marker -/obj/vehicle/multitile/root/cm_armored/tank/handle_player_exit(mob/M) - - if(!(M in list(gunner, driver))) //someone whom isn't supposed to be here to begin with. - exit_tank(M, TRUE) - return - - if(!M.do_actions) - if(occupant_exiting) - to_chat(M, span_notice("Someone is already getting out of [src].")) - return - occupant_exiting = M - - to_chat(M, span_notice("You start climbing out of [src].")) - - addtimer(CALLBACK(src, PROC_REF(exit_tank), M), 5 SECONDS) - -/obj/vehicle/multitile/root/cm_armored/tank/proc/exit_tank(mob/M, forced = FALSE, silent = FALSE) - if(!forced) - occupant_exiting = null - - if(!M || get_turf(M) != get_turf(src) || (M.incapacitated() && !forced)) - return - - var/turf/T = get_turf(entrance) - if(!forced) - if(!T.CanPass(M, T)) - if(!silent) - to_chat(M, span_notice("Something is blocking you from exiting.")) - return - for(var/atom/A in T) - if(A.CanPass(M, T)) - continue - if(!silent) - to_chat(M, span_notice("Something is blocking you from exiting.")) - return - M.forceMove(T) - - if(M == gunner) - deactivate_all_hardpoints() - gunner = null - else if(M == driver) - driver = null - M.unset_interaction() - if(!silent) - to_chat(M, span_notice("You climb out of [src].")) - -//No one but the driver can drive -/obj/vehicle/multitile/root/cm_armored/tank/relaymove(mob/user, direction) - if(user != driver || user.incapacitated()) - return - - . = ..(user, direction) - - - - if(next_sound_play < world.time) - playsound(src, 'sound/ambience/tank_driving.ogg', vol = 20, sound_range = 30) - next_sound_play = world.time + 21 - -//No one but the driver can turn -/obj/vehicle/multitile/root/cm_armored/tank/try_rotate(deg, mob/user, force = FALSE) - - if(user != driver || user.incapacitated()) - return - - . = ..(deg, user, force) - - if(. && istype(hardpoints[HDPT_SUPPORT], /obj/item/hardpoint/support/artillery_module) && gunner?.client) - var/client/C = gunner.client - var/old_x = C.pixel_x - var/old_y = C.pixel_y - C.pixel_x = old_x*cos(deg) - old_y*sin(deg) - C.pixel_y = old_x*sin(deg) + old_y*cos(deg) - -/obj/vehicle/multitile/hitbox/cm_armored/tank/get_driver() - var/obj/vehicle/multitile/root/cm_armored/tank/T = root - return T?.driver - - -/obj/vehicle/multitile/root/cm_armored/tank/take_damage_type(damage, type, atom/attacker) - . = ..() - - if(istype(attacker, /mob)) - var/mob/M = attacker - log_combat(M, src, "damaged [src] with [damage] [type] damage.") - - if(gunner) - log_combat(gunner, null, "[src] took [damage] [type] damage [ismob(attacker) ? "from [key_name(attacker)]" : ""].") - if(driver) - log_combat(driver, null, "[src] took [damage] [type] damage [ismob(attacker) ? "from [key_name(attacker)]" : ""].") - - -/obj/vehicle/multitile/root/cm_armored/proc/click_action(A, mob/user, params) - if(istype(A, /atom/movable/screen) || A == src) - return FALSE - - if(!can_use_hp(user)) - return TRUE - - if(!hardpoints.Find(active_hp)) - to_chat(user, span_warning("Please select an active hardpoint first.")) - return TRUE - - var/obj/item/hardpoint/HP = hardpoints[active_hp] - - if(!HP?.is_ready()) - return TRUE - - if(!HP.firing_arc(A)) - to_chat(user, span_warning("The target is not within your firing arc.")) - return TRUE - - HP.active_effect(A) - return TRUE diff --git a/code/modules/vehicles/multitile/tankvendor.dm b/code/modules/vehicles/multitile/tankvendor.dm deleted file mode 100644 index 2aee8558ff5ba..0000000000000 --- a/code/modules/vehicles/multitile/tankvendor.dm +++ /dev/null @@ -1,290 +0,0 @@ -#define TANKFAB_MAIN_MENU 0 -#define TANKFAB_MOD_MAINT 1 -#define TANKFAB_PRINTER 2 -#define TANKFAB_BUSY 3 - - -/obj/machinery/tank_part_fabricator - name = "tank part fabricator" - desc = "A large automated 3D printer for producing new tank parts and maintaining old ones." - density = TRUE - anchored = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 20 - icon = 'icons/obj/machines/drone_fab.dmi' - icon_state = "drone_fab_idle" - var/obj/item/loaded_mod - var/tank_points = 625 - var/busy = FALSE - var/screen = TANKFAB_MAIN_MENU - -/obj/machinery/tank_part_fabricator/proc/set_busy(business = TRUE, timer) - busy = business - if(timer) - addtimer(CALLBACK(src, PROC_REF(set_busy), !business), timer) - update_icon() - updateUsrDialog() - -/obj/machinery/tank_part_fabricator/update_icon() - if(machine_stat & NOPOWER) - icon_state = "drone_fab_nopower" - return - if(busy) - icon_state = "drone_fab_active" - return - else - icon_state = "drone_fab_idle" - -/obj/machinery/tank_part_fabricator/interact(mob/user) - . = ..() - if(.) - return - var/dat - if(screen == TANKFAB_BUSY) - dat += "[src] is busy. Please wait for completion of the current operation..." - else - dat += "

    Points Available: [tank_points]

    " - var/slot = loaded_mod ? "[icon2html(loaded_mod, usr)] [loaded_mod]" : "None" - dat += "

    Loaded Hardpoint/Ammo Clip: [slot]

    " - - var/screen_menu = screen != TANKFAB_MAIN_MENU ? "Main Menu" : "Main Menu" - var/screen_maint = screen != TANKFAB_MOD_MAINT ? "Hardpoint Maintenance" : "Hardpoint Maintenance" - var/screen_fab = screen != TANKFAB_PRINTER ? "Hardpoint Printer" : "Hardpoint Printer" - dat += "
    [screen_fab]
    [screen_menu]
    [screen_maint]
    " - - - switch(screen) - - if(TANKFAB_MOD_MAINT) - if(!loaded_mod) - dat += "No hardpoint or clip loaded. Please stand-by..." - else - var/price = calculate_mod_value(loaded_mod) - var/restore = istype(loaded_mod, /obj/item/hardpoint) ? "Repair" : "Refill" - var/cost = calculate_repair_price(loaded_mod) - dat += "
    [restore] ([cost])
    Refund ([price])

    " - dat += "

    Hardpoint/Ammo Clip infos:

    " - dat += "Brief description: [loaded_mod.desc]
    " - if(istype(loaded_mod, /obj/item/hardpoint)) - var/obj/item/hardpoint/H = loaded_mod - dat += "Hardpoint integrity: [PERCENT(H.obj_integrity/H.max_integrity)]%
    " - if(H.starter_ammo) - var/ammo_count = H.ammo ? "[H.ammo] ([H.ammo.current_rounds]/[H.ammo.max_rounds])" : "No clip loaded" - dat += "Current clip: [ammo_count]
    " - if(H.max_clips) - dat += "Backup clips:
    " - for(var/I in H.backup_clips) - var/obj/item/ammo_magazine/tank/A = I - dat += "[A] ([A.current_rounds]/[A.max_rounds])
    " - else if(istype(loaded_mod, /obj/item/ammo_magazine)) - var/obj/item/ammo_magazine/A = loaded_mod - dat += "Current rounds: [A] [A.current_rounds]/[A.max_rounds]
    " - dat += "Caliber: [A.caliber]
    " - //var/obj/item/hardpoint/H = A.gun_type //Ima break this. - //dat += "Supported Hardpoint: [initial(H.name)]
    " - - if(TANKFAB_PRINTER) - dat += "

    Armor:

    " - for(var/build_type in subtypesof(/obj/item/hardpoint/armor)) - var/obj/item/hardpoint/armor/AR = build_type - if(!initial(AR.buyable)) - continue - var/build_name = initial(AR.name) - var/build_cost = initial(AR.point_cost) - dat += "[build_name] ([build_cost])
    " - - dat += "

    Primary Weapon:

    " - for(var/build_type in subtypesof(/obj/item/hardpoint/primary)) - var/obj/item/hardpoint/primary/PR = build_type - if(!initial(PR.buyable)) - continue - var/build_name = initial(PR.name) - var/build_cost = initial(PR.point_cost) - dat += "[build_name] ([build_cost])
    " - - dat += "

    Secondary Weapon:

    " - for(var/build_type in subtypesof(/obj/item/hardpoint/secondary)) - var/obj/item/hardpoint/secondary/SE = build_type - if(!initial(SE.buyable)) - continue - var/build_name = initial(SE.name) - var/build_cost = initial(SE.point_cost) - dat += "[build_name] ([build_cost])
    " - - dat += "

    Support Module:

    " - for(var/build_type in subtypesof(/obj/item/hardpoint/support)) - var/obj/item/hardpoint/support/SP = build_type - if(!initial(SP.buyable)) - continue - var/build_name = initial(SP.name) - var/build_cost = initial(SP.point_cost) - dat += "[build_name] ([build_cost])
    " - - dat += "

    Treads:

    " - for(var/build_type in subtypesof(/obj/item/hardpoint/treads)) - var/obj/item/hardpoint/treads/TR = build_type - if(!initial(TR.buyable)) - continue - var/build_name = initial(TR.name) - var/build_cost = initial(TR.point_cost) - dat += "[build_name] ([build_cost])
    " - - dat += "

    Weapon Ammo:

    " - for(var/build_type in subtypesof(/obj/item/ammo_magazine/tank)) - var/obj/item/ammo_magazine/tank/AM = build_type - var/build_name = initial(AM.name) - var/build_cost = initial(AM.point_cost) - dat += "[build_name] ([build_cost])
    " - - var/datum/browser/popup = new(user, "dropship_part_fab", "
    Tank Part Fabricator
    ") - popup.set_content(dat) - popup.open(TRUE) - - -/obj/machinery/tank_part_fabricator/attackby(obj/item/W, mob/user) - if((istype(W, /obj/item/hardpoint) || istype(W, /obj/item/ammo_magazine/tank)) && user.a_intent != INTENT_HARM) - if(machine_stat & (NOPOWER|BROKEN)) - return - if(busy) - to_chat(usr, span_warning("[src] is busy. Please wait for completion of previous operation.")) - else if(user.transferItemToLoc(W, src)) - user.visible_message(span_notice("[user] loads [W] into [src]'s maintenance slot."), span_notice("You load [W] into [src]'s maintenance slot."), null, 4) - loaded_mod = W - else - to_chat(user, span_warning("[W] appears to be stuck to your hands.")) - else if(iscrowbar(W) && machine_stat & (NOPOWER|BROKEN) && !QDELETED(loaded_mod)) - user.visible_message(span_warning("[user] starts to pry [src]'s maintenance slot open."), span_notice("You start to pry [loaded_mod] out of [src]'s maintenance slot...")) - if(!do_after(user, 4 SECONDS, NONE, src, BUSY_ICON_GENERIC) || QDELETED(loaded_mod)) - return - user.visible_message("[user] pries [loaded_mod] out of [src].", span_notice("You retrieve [loaded_mod] from [src].")) - eject_tank_part() - else - return ..() - -/obj/machinery/tank_part_fabricator/proc/build_tank_part(part_type, cost, mob/user) - if(machine_stat & (NOPOWER|BROKEN) || busy) - return - if(tank_points < cost) - to_chat(user, span_warning("You don't have enough points to build that.")) - return - visible_message(span_notice("[src] starts printing something.")) - tank_points -= cost - set_busy() - addtimer(CALLBACK(src, PROC_REF(dispense_tank_part), part_type), 10 SECONDS) - -/obj/machinery/tank_part_fabricator/proc/dispense_tank_part(part_type) - set_busy(FALSE) - var/turf/T = get_step(src, SOUTHEAST) - playsound(src, 'sound/machines/hydraulics_1.ogg', 40, 1) - new part_type(T) - -/obj/machinery/tank_part_fabricator/proc/calculate_mod_value() - if(istype(loaded_mod, /obj/item/hardpoint)) - var/obj/item/hardpoint/mod = loaded_mod - . = (mod.point_cost - mod.point_cost * (1 - (mod.obj_integrity/mod.max_integrity)) * 0.5) * 0.5 - if(mod.starter_ammo) - if(mod.ammo) - . += (mod.ammo.point_cost - mod.ammo.point_cost * (1 - (mod.ammo.current_rounds/mod.ammo.max_rounds)) * 0.5) * 0.5 - else - . -= initial(mod.starter_ammo.point_cost) * 0.5 - for(var/O in mod.backup_clips) - var/obj/item/ammo_magazine/tank/A = O - . = (A.point_cost - A.point_cost * (1 - (A.current_rounds/A.max_rounds)) * 0.5) * 0.5 - else if(istype(loaded_mod, /obj/item/ammo_magazine/tank)) - var/obj/item/ammo_magazine/tank/A = loaded_mod - . = (A.point_cost - A.point_cost * (1 - (A.current_rounds/A.max_rounds)) * 0.5) * 0.5 - . = max(round(.), 0) - -/obj/machinery/tank_part_fabricator/proc/calculate_repair_price() - if(istype(loaded_mod, /obj/item/hardpoint)) - var/obj/item/hardpoint/mod = loaded_mod - . = ((mod.point_cost - mod.point_cost * (mod.obj_integrity/mod.max_integrity)) * 0.1) - if(mod.starter_ammo) - if(mod.ammo) - . += ((mod.ammo.point_cost - mod.ammo.point_cost * (mod.ammo.current_rounds/mod.ammo.max_rounds)) * 0.9) - else - . += initial(mod.starter_ammo.point_cost) * 0.9 - else if(istype(loaded_mod, /obj/item/ammo_magazine/tank)) - var/obj/item/ammo_magazine/tank/A = loaded_mod - . = ((A.point_cost - A.point_cost * (A.current_rounds/A.max_rounds)) * 0.9) - - . = max(round(.), 0) - -/obj/machinery/tank_part_fabricator/proc/eject_tank_part(mob/user) - if(busy || QDELETED(loaded_mod)) - return - var/turf/T = get_step(src, SOUTHEAST) - if(user) - to_chat(user, span_notice("You retrieve [loaded_mod] from [src].")) - loaded_mod.forceMove(T) - loaded_mod = null - -/obj/machinery/tank_part_fabricator/proc/refund_tank_part() - if(machine_stat & (NOPOWER|BROKEN) || busy || QDELETED(loaded_mod)) - return - tank_points += calculate_mod_value() - visible_message(span_notice("[src] starts disassembling [loaded_mod].")) - QDEL_NULL(loaded_mod) - set_busy(TRUE, 10 SECONDS) - -/obj/machinery/tank_part_fabricator/proc/restore_tank_part(mob/user) - if(machine_stat & (NOPOWER|BROKEN) || busy || QDELETED(loaded_mod)) - return - var/cost = calculate_repair_price() - if(tank_points < cost) - to_chat(user, span_warning("You don't have enough points to repair that.")) - tank_points -= cost - if(istype(loaded_mod, /obj/item/hardpoint)) - var/obj/item/hardpoint/H = loaded_mod - H.repair_damage(H.max_integrity) - if(H.ammo) - H.ammo.current_rounds = H.ammo.max_rounds - H.ammo.update_icon() - else if(H.starter_ammo) - H.ammo = new H.starter_ammo - else if(istype(loaded_mod, /obj/item/ammo_magazine/tank)) - var/obj/item/ammo_magazine/tank/A = loaded_mod - A.current_rounds = A.max_rounds - set_busy(TRUE, 6 SECONDS) - -/obj/machinery/tank_part_fabricator/Topic(href, href_list) - . =..() - if(.) - return - - if(busy) - to_chat(usr, span_warning("[src] is busy. Please wait for completion of previous operation.")) - return - - if(href_list["produce"]) - var/produce = text2path(href_list["produce"]) - var/cost - if(ispath(produce, /obj/item/hardpoint)) - var/obj/item/hardpoint/H = produce - cost = initial(H.point_cost) - else if(ispath(produce, /obj/item/ammo_magazine/tank)) - var/obj/item/ammo_magazine/tank/A = produce - cost = initial(A.point_cost) - if(isnull(cost)) - updateUsrDialog() - return - build_tank_part(produce, cost, usr) - - if(href_list["eject"]) - eject_tank_part(usr) - - if(href_list["refund"]) - refund_tank_part() - - if(href_list["restore"]) - restore_tank_part(usr) - - if(href_list["screen"]) - screen = text2num(href_list["screen"]) - - updateUsrDialog() - -#undef TANKFAB_MAIN_MENU -#undef TANKFAB_MOD_MAINT -#undef TANKFAB_PRINTER -#undef TANKFAB_BUSY diff --git a/code/modules/vehicles/powerloader.dm b/code/modules/vehicles/powerloader.dm index a5bb786c0cb59..c439aa56be5b7 100644 --- a/code/modules/vehicles/powerloader.dm +++ b/code/modules/vehicles/powerloader.dm @@ -46,6 +46,8 @@ /obj/vehicle/ridden/powerloader/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(!isscrewdriver(I)) return @@ -139,7 +141,7 @@ force = 20 // ITEM_ABSTRACT to prevent placing the item on a table/closet. // DELONDROP to prevent giving the clamp to others. - flags_item = ITEM_ABSTRACT|DELONDROP + item_flags = ITEM_ABSTRACT|DELONDROP var/obj/vehicle/ridden/powerloader/linked_powerloader var/obj/loaded @@ -176,7 +178,8 @@ return target.attack_powerloader(user, src) -/obj/item/powerloader_clamp/update_icon() +/obj/item/powerloader_clamp/update_icon_state() + . = ..() if(loaded) icon_state = "loader_clamp_full" else diff --git a/code/modules/vehicles/ridden.dm b/code/modules/vehicles/ridden.dm index f3f6bc0f2ad80..d5cb0bfc4820a 100644 --- a/code/modules/vehicles/ridden.dm +++ b/code/modules/vehicles/ridden.dm @@ -8,12 +8,11 @@ /obj/vehicle/ridden/examine(mob/user) . = ..() - if(!key_type) - return - if(!inserted_key) - . += span_notice("Put a key inside it by clicking it with the key.") - else - . += span_notice("Alt-click [src] to remove the key.") + if(key_type) + if(!inserted_key) + . += span_notice("Put a key inside it by clicking it with the key.") + else + . += span_notice("Alt-click [src] to remove the key.") /obj/vehicle/ridden/generate_action_type(actiontype) var/datum/action/vehicle/ridden/A = ..() diff --git a/code/modules/vehicles/sealed.dm b/code/modules/vehicles/sealed.dm index 3413ae5ea1d60..11e6101907a44 100644 --- a/code/modules/vehicles/sealed.dm +++ b/code/modules/vehicles/sealed.dm @@ -1,5 +1,5 @@ /obj/vehicle/sealed - flags_atom = PREVENT_CONTENTS_EXPLOSION + atom_flags = PREVENT_CONTENTS_EXPLOSION var/enter_delay = 2 SECONDS var/mouse_pointer var/headlights_toggle = FALSE @@ -88,7 +88,7 @@ M.visible_message(span_notice("[M] drops out of \the [src]!")) return TRUE -/obj/vehicle/sealed/proc/exit_location(M) +/obj/vehicle/sealed/proc/exit_location(mob/M) return drop_location() /obj/vehicle/sealed/attackby(obj/item/I, mob/user, params) @@ -141,10 +141,14 @@ return FALSE /obj/vehicle/sealed/relaymove(mob/living/user, direction) - if(canmove) - vehicle_move(direction) + if(is_driver(user) && canmove) + vehicle_move(user, direction) return TRUE /// Sinced sealed vehicles (cars and mechs) don't have riding components, the actual movement is handled here from [/obj/vehicle/sealed/proc/relaymove] -/obj/vehicle/sealed/proc/vehicle_move(direction) - return FALSE +/obj/vehicle/sealed/proc/vehicle_move(mob/living/user, direction) + SHOULD_CALL_PARENT(TRUE) + if(!COOLDOWN_CHECK(src, cooldown_vehicle_move)) + return FALSE + COOLDOWN_START(src, cooldown_vehicle_move, move_delay) + return !(SEND_SIGNAL(src, COMSIG_VEHICLE_MOVE, user, direction) & COMPONENT_DRIVER_BLOCK_MOVE) diff --git a/code/modules/vehicles/unmanned/deployable_vehicles.dm b/code/modules/vehicles/unmanned/deployable_vehicles.dm index 3266df466441a..23fda43b69fd7 100644 --- a/code/modules/vehicles/unmanned/deployable_vehicles.dm +++ b/code/modules/vehicles/unmanned/deployable_vehicles.dm @@ -6,7 +6,7 @@ icon_state = "light_uv_folded" w_class = WEIGHT_CLASS_NORMAL slowdown = 0.3 - flags_item = IS_DEPLOYABLE + item_flags = IS_DEPLOYABLE ///The vehicle this deploys into var/deployable_item = /obj/vehicle/unmanned/deployable ///The equipped turret @@ -26,7 +26,7 @@ name = "UV-L Iguana" desc = "A small remote-controllable vehicle, usually owned by the TGMC and other major armies. This one is configured to be foldable for portability." ///Whether this item can be deployed or undeployed - var/flags_item = IS_DEPLOYABLE + var/item_flags = IS_DEPLOYABLE ///What it deploys into. typecast version of internal_item var/obj/item/deployable_vehicle/internal_item @@ -59,8 +59,8 @@ ///Dissassembles the device /obj/vehicle/unmanned/deployable/proc/disassemble(mob/user) - if(CHECK_BITFIELD(internal_item.flags_item, DEPLOYED_NO_PICKUP)) - balloon_alert(user, "cannot be disassembled") + if(CHECK_BITFIELD(internal_item.item_flags, DEPLOYED_NO_PICKUP)) + balloon_alert(user, "Cannot disassemble") return if(turret_path) internal_item.stored_turret_type = turret_path diff --git a/code/modules/vehicles/unmanned/unmanned_droid.dm b/code/modules/vehicles/unmanned/unmanned_droid.dm index 0d4a72297c0fd..9020fa2e29feb 100644 --- a/code/modules/vehicles/unmanned/unmanned_droid.dm +++ b/code/modules/vehicles/unmanned/unmanned_droid.dm @@ -10,8 +10,6 @@ spawn_equipped_type = /obj/item/uav_turret/droid allow_pass_flags = PASS_AIR unmanned_flags = HAS_LIGHTS|OVERLAY_TURRET - /// Existing signal for Supply console. - var/datum/supply_beacon/beacon_datum /// Action to activate suppply antenna. var/datum/action/antenna/antenna /// The mob controlling the droid remotely @@ -20,6 +18,7 @@ /obj/vehicle/unmanned/droid/Initialize(mapload) . = ..() antenna = new + AddComponent(/datum/component/beacon/ai_droid) /obj/vehicle/unmanned/droid/process() //play beepy noise every 5 seconds for effect while active if(prob(90)) @@ -38,19 +37,16 @@ START_PROCESSING(SSslowprocess, src) user.overlay_fullscreen("machine", /atom/movable/screen/fullscreen/machine) antenna.give_action(user) - RegisterSignal(user, COMSIG_UNMANNED_COORDINATES, PROC_REF(activate_antenna)) + antenna.ai_droid = src else remote_user = null playsound(src, 'sound/machines/drone/droneoff.ogg', 70) STOP_PROCESSING(SSslowprocess, src) user.clear_fullscreen("machine", 5) antenna.remove_action(user) - UnregisterSignal(user, COMSIG_UNMANNED_COORDINATES) + antenna.ai_droid = null /obj/vehicle/unmanned/droid/Destroy() - if(beacon_datum) - UnregisterSignal(beacon_datum, COMSIG_QDELETING) - QDEL_NULL(beacon_datum) if(!remote_user) //No remote user, no need to do this. return ..() var/mob/living/living_user = remote_user.resolve() @@ -58,7 +54,6 @@ return living_user.clear_fullscreen("machine", 5) antenna.remove_action(living_user) - UnregisterSignal(living_user, COMSIG_UNMANNED_COORDINATES) if(isAI(living_user)) var/mob/living/silicon/ai/AI = living_user AI.eyeobj?.forceMove(get_turf(src)) @@ -117,35 +112,19 @@ alpha = initial(alpha) TIMER_COOLDOWN_START(src, COOLDOWN_DRONE_CLOAK, 12 SECONDS) -///Proc used for the supply link feature, activate to appear as an antenna -/obj/vehicle/unmanned/droid/proc/activate_antenna(datum/source, mob/user) - SIGNAL_HANDLER - - user = source - - if(beacon_datum) - UnregisterSignal(beacon_datum, COMSIG_QDELETING) - QDEL_NULL(beacon_datum) - to_chat(source, (span_warning("The [src] beeps and states, \"Your last position is no longer accessible by the supply console"))) - return - if(!is_ground_level(z)) - to_chat(source, span_warning("You have to be on the planet to use this or it won't transmit.")) - return FALSE - beacon_datum = new /datum/supply_beacon(user.name, src.loc, user.faction, 4 MINUTES) - RegisterSignal(beacon_datum, COMSIG_QDELETING, PROC_REF(clean_beacon_datum)) - user.show_message(span_notice("The [src] beeps and states, \"Your current coordinates were registered by the supply console. LONGITUDE [loc.x]. LATITUDE [loc.y]. Area ID: [get_area(src)]\"")) - -///removes the beacon when we delete the droid -/obj/vehicle/unmanned/droid/proc/clean_beacon_datum() - SIGNAL_HANDLER - beacon_datum = null - /datum/action/antenna name = "Use Antenna" action_icon_state = "signal_transmit" + ///The droid linked to this ability + var/obj/vehicle/unmanned/droid/ai_droid + +/datum/action/antenna/Destroy() + ai_droid = null + return ..() /datum/action/antenna/action_activate() - SEND_SIGNAL(owner, COMSIG_UNMANNED_COORDINATES) + if(ai_droid) + SEND_SIGNAL(ai_droid, COMSIG_UNMANNED_COORDINATES, owner) /obj/vehicle/unmanned/droid/ripley name = "XN-27-C cargo droid" diff --git a/code/modules/vehicles/unmanned/unmanned_vehicle.dm b/code/modules/vehicles/unmanned/unmanned_vehicle.dm index 459a7a3a7360f..27986490bfcd5 100644 --- a/code/modules/vehicles/unmanned/unmanned_vehicle.dm +++ b/code/modules/vehicles/unmanned/unmanned_vehicle.dm @@ -12,7 +12,7 @@ move_delay = 2.5 //set this to limit the speed of the vehicle max_integrity = 150 hud_possible = list(MACHINE_HEALTH_HUD, MACHINE_AMMO_HUD) - flags_atom = BUMP_ATTACKABLE + atom_flags = BUMP_ATTACKABLE soft_armor = list(MELEE = 25, BULLET = 85, LASER = 50, ENERGY = 100, BOMB = 50, BIO = 100, FIRE = 25, ACID = 25) allow_pass_flags = PASS_AIR|PASS_LOW_STRUCTURE|PASS_THROW /// Needed to keep track of any slowdowns and/or diagonal movement @@ -79,11 +79,11 @@ QDEL_NULL(in_chamber) return ..() -/obj/vehicle/unmanned/obj_destruction() +/obj/vehicle/unmanned/obj_destruction(damage_amount, damage_type, damage_flag, mob/living/blame_mob) robogibs(src) return ..() -/obj/vehicle/unmanned/take_damage(damage_amount, damage_type, damage_flag, effects, attack_dir, armour_penetration) +/obj/vehicle/unmanned/take_damage(damage_amount, damage_type = BRUTE, armor_type = null, effects = TRUE, attack_dir, armour_penetration = 0, mob/living/blame_mob) . = ..() hud_set_machine_health() @@ -121,6 +121,8 @@ /obj/vehicle/unmanned/attackby(obj/item/I, mob/user, params) . = ..() + if(.) + return if(istype(I, /obj/item/uav_turret) || istype(I, /obj/item/explosive/plastique)) return equip_turret(I, user) if(istype(I, /obj/item/ammo_magazine)) @@ -267,7 +269,7 @@ //Shoot at the thing var/angle = Get_Angle(src, target) playsound(loc, gunnoise, 65, 1) - in_chamber.fire_at(target, src, null, ammo.max_range, ammo.shell_speed) + in_chamber.fire_at(target, user, src, ammo.max_range, ammo.shell_speed) in_chamber = null COOLDOWN_START(src, fire_cooldown, fire_delay) current_rounds-- diff --git a/code/modules/vehicles/wheelchair.dm b/code/modules/vehicles/wheelchair.dm index de096081200ef..b9e3653eed098 100644 --- a/code/modules/vehicles/wheelchair.dm +++ b/code/modules/vehicles/wheelchair.dm @@ -7,6 +7,7 @@ max_integrity = 100 soft_armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 30, FIRE = 60, ACID = 60) //Wheelchairs aren't super tough yo density = FALSE //Thought I couldn't fix this one easily, phew + drag_delay = 1 //pulling something on wheels is easy /// Run speed delay is multiplied with this for vehicle move delay. var/delay_multiplier = 6.7 /// This variable is used to specify which overlay icon is used for the wheelchair, ensures wheelchair can cover your legs @@ -19,7 +20,7 @@ wheels_overlay = image(icon, overlay_icon, FLY_LAYER) AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE, CALLBACK(src, PROC_REF(can_user_rotate)),CALLBACK(src, PROC_REF(can_be_rotated)),null) -/obj/vehicle/ridden/wheelchair/obj_destruction(damage_flag) +/obj/vehicle/ridden/wheelchair/obj_destruction(damage_amount, damage_type, damage_flag, mob/living/blame_mob) new /obj/item/stack/rods(drop_location(), 1) return ..() @@ -32,10 +33,23 @@ . = ..() update_icon() -/obj/vehicle/ridden/wheelchair/post_unbuckle_mob() +/obj/vehicle/ridden/wheelchair/post_unbuckle_mob(mob/living/M) . = ..() update_icon() +/obj/vehicle/ridden/wheelchair/after_add_occupant(mob/M) + . = ..() + if(isliving(M)) //Properly update whether we're lying or not; no more people lying on chairs; ridiculous + var/mob/living/buckled_target = M + buckled_target.set_lying_angle(0) + +/obj/vehicle/ridden/wheelchair/after_remove_occupant(mob/M) + . = ..() + if(isliving(M)) //Properly update whether we're lying or not + var/mob/living/unbuckled_target = M + if(HAS_TRAIT(unbuckled_target, TRAIT_FLOORED)) + unbuckled_target.set_lying_angle(pick(90, 270)) + /obj/vehicle/ridden/wheelchair/wrench_act(mob/living/user, obj/item/I) //Attackby should stop it attacking the wheelchair after moving away during decon ..() to_chat(user, span_notice("You begin to detach the wheels...")) @@ -67,3 +81,16 @@ /obj/vehicle/ridden/wheelchair/proc/make_ridable() AddElement(/datum/element/ridable, /datum/component/riding/vehicle/wheelchair) +// Battlechair - A wheelchair with a mounted minigun +/obj/vehicle/ridden/wheelchair/weaponized + name = "\improper Battlechair" + desc = "A sturdy wheelchair fitted with a minigun. Your legs may have failed you, but your weapon won't." + max_integrity = 400 + +/obj/vehicle/ridden/wheelchair/weaponized/Initialize(mapload) + . = ..() + AddComponent(/datum/component/vehicle_mounted_weapon, /obj/item/weapon/gun/minigun/one_handed) + +/obj/vehicle/ridden/wheelchair/weaponized/auto_assign_occupant_flags(mob/M) + . = ..() + add_control_flags(M, VEHICLE_CONTROL_EQUIPMENT) diff --git a/code/modules/xenomorph/_xeno_structure.dm b/code/modules/xenomorph/_xeno_structure.dm new file mode 100644 index 0000000000000..1f417945829cf --- /dev/null +++ b/code/modules/xenomorph/_xeno_structure.dm @@ -0,0 +1,63 @@ +/obj/structure/xeno + hit_sound = "alien_resin_break" + layer = RESIN_STRUCTURE_LAYER + resistance_flags = UNACIDABLE + ///Bitflags specific to xeno structures + var/xeno_structure_flags + ///Which hive(number) do we belong to? + var/hivenumber = XENO_HIVE_NORMAL + +/obj/structure/xeno/Initialize(mapload, _hivenumber) + . = ..() + if(!(xeno_structure_flags & IGNORE_WEED_REMOVAL)) + RegisterSignal(loc, COMSIG_TURF_WEED_REMOVED, PROC_REF(weed_removed)) + if(_hivenumber) ///because admins can spawn them + hivenumber = _hivenumber + LAZYADDASSOC(GLOB.xeno_structures_by_hive, hivenumber, src) + if(xeno_structure_flags & CRITICAL_STRUCTURE) + LAZYADDASSOC(GLOB.xeno_critical_structures_by_hive, hivenumber, src) + +/obj/structure/xeno/Destroy() + if(!locate(src) in GLOB.xeno_structures_by_hive[hivenumber]+GLOB.xeno_critical_structures_by_hive[hivenumber]) //The rest of the proc is pointless to look through if its not in the lists + stack_trace("[src] not found in the list of (potentially critical) xeno structures!") //We dont want to CRASH because that'd block deletion completely. Just trace it and continue. + return ..() + GLOB.xeno_structures_by_hive[hivenumber] -= src + if(xeno_structure_flags & CRITICAL_STRUCTURE) + GLOB.xeno_critical_structures_by_hive[hivenumber] -= src + return ..() + +/obj/structure/xeno/ex_act(severity) + switch(severity) + if(EXPLODE_DEVASTATE) + take_damage(210, BRUTE, BOMB) + if(EXPLODE_HEAVY) + take_damage(140, BRUTE, BOMB) + if(EXPLODE_LIGHT) + take_damage(70, BRUTE, BOMB) + if(EXPLODE_WEAK) + take_damage(35, BRUTE, BOMB) + +/obj/structure/xeno/attack_hand(mob/living/user) + balloon_alert(user, "You only scrape at it") + return TRUE + +/obj/structure/xeno/flamer_fire_act(burnlevel) + take_damage(burnlevel / 3, BURN, FIRE) + +/obj/structure/xeno/fire_act() + take_damage(10, BURN, FIRE) +/* RUTGMC Moved to modular +/// Destroy the xeno structure when the weed it was on is destroyed +/obj/structure/xeno/proc/weed_removed() + SIGNAL_HANDLER + obj_destruction(damage_flag = MELEE) +*/ +/obj/structure/xeno/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(!(HAS_TRAIT(xeno_attacker, TRAIT_VALHALLA_XENO) && xeno_attacker.a_intent == INTENT_HARM && (tgui_alert(xeno_attacker, "Are you sure you want to tear down [src]?", "Tear down [src]?", list("Yes","No"))) == "Yes")) + return ..() + if(!do_after(xeno_attacker, 3 SECONDS, NONE, src)) + return + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_CLAW) + balloon_alert_to_viewers("\The [xeno_attacker] tears down \the [src]!", "We tear down \the [src].") + playsound(src, "alien_resin_break", 25) + take_damage(max_integrity) // Ensure its destroyed diff --git a/code/modules/xenomorph/acid_pools.dm b/code/modules/xenomorph/acid_pools.dm new file mode 100644 index 0000000000000..b7afa6f49d1ef --- /dev/null +++ b/code/modules/xenomorph/acid_pools.dm @@ -0,0 +1,29 @@ + +/obj/structure/xeno/acid_pool + name = "acid pool" + desc = "A pool of weak viscous acid that solidifies quickly when removed from the pool. Swimming is not recommended due to the lack of a lifeguard." + icon = 'icons/Xeno/3x3building.dmi' + icon_state = "pool" + bound_width = 96 + bound_height = 64 + max_integrity = 400 + +/obj/structure/xeno/acid_pool/Initialize(mapload, _hivenumber) + . = ..() + START_PROCESSING(SSprocessing, src) + update_icon() + +/obj/structure/xeno/acid_pool/update_overlays() + . = ..() + . += emissive_appearance(icon, "pool_emissive") + +/obj/structure/xeno/acid_pool/process() + for(var/atom/location AS in locs) + for(var/mob/living/carbon/xenomorph/xeno in location) + if(xeno.stat == DEAD) + continue + if(!xeno.lying_angle) + continue + if(GLOB.hive_datums[hivenumber] != xeno.hive) + continue + xeno.adjust_sunder(-1) diff --git a/code/modules/xenomorph/acidwell.dm b/code/modules/xenomorph/acidwell.dm new file mode 100644 index 0000000000000..628f7e687bb57 --- /dev/null +++ b/code/modules/xenomorph/acidwell.dm @@ -0,0 +1,197 @@ + +//Resin Water Well +/obj/structure/xeno/acidwell + name = "acid well" + desc = "An acid well. It stores acid to put out fires." + icon = 'icons/Xeno/acid_well.dmi' + icon_state = "well" + density = FALSE + opacity = FALSE + anchored = TRUE + max_integrity = 5 + + hit_sound = "alien_resin_move" + destroy_sound = "alien_resin_move" + ///How many charges of acid this well contains + var/charges = 1 + ///If a xeno is charging this well + var/charging = FALSE + ///What xeno created this well + var/mob/living/carbon/xenomorph/creator = null + +/obj/structure/xeno/acidwell/Initialize(mapload, _creator) + . = ..() + creator = _creator + RegisterSignal(creator, COMSIG_QDELETING, PROC_REF(clear_creator)) + update_icon() + var/static/list/connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_cross), + ) + AddElement(/datum/element/connect_loc, connections) + +/obj/structure/xeno/acidwell/Destroy() + creator = null + return ..() + +///Signal handler for creator destruction to clear reference +/obj/structure/xeno/acidwell/proc/clear_creator() + SIGNAL_HANDLER + creator = null + +///Ensures that no acid gas will be released when the well is crushed by a shuttle +/obj/structure/xeno/acidwell/proc/shuttle_crush() + SIGNAL_HANDLER + qdel(src) + + +/obj/structure/xeno/acidwell/obj_destruction(damage_amount, damage_type, damage_flag, mob/living/blame_mob) + if(!QDELETED(creator) && creator.stat == CONSCIOUS && creator.z == z) + var/area/A = get_area(src) + if(A) + to_chat(creator, span_xenoannounce("You sense your acid well at [A.name] has been destroyed!") ) + + if(damage_amount || damage_flag) //Spawn the gas only if we actually get destroyed by damage + var/datum/effect_system/smoke_spread/xeno/acid/A = new(get_turf(src)) + A.set_up(clamp(CEILING(charges*0.5, 1),0,3),src) //smoke scales with charges + A.start() + return ..() + +/obj/structure/xeno/acidwell/examine(mob/user) + . = ..() + if(!isxeno(user) && !isobserver(user)) + return + . += span_xenonotice("An acid well made by [creator]. It currently has [charges]/[XENO_ACID_WELL_MAX_CHARGES] charges.") + +/obj/structure/xeno/acidwell/deconstruct(disassembled = TRUE) + visible_message(span_danger("[src] suddenly collapses!") ) + return ..() + +/obj/structure/xeno/acidwell/update_icon() + . = ..() + set_light(charges , charges / 2, LIGHT_COLOR_GREEN) + +/obj/structure/xeno/acidwell/update_overlays() + . = ..() + if(!charges) + return + . += mutable_appearance(icon, "[charges]", alpha = src.alpha) + . += emissive_appearance(icon, "[charges]", alpha = src.alpha) + +/obj/structure/xeno/acidwell/flamer_fire_act(burnlevel) //Removes a charge of acid, but fire is extinguished + acid_well_fire_interaction() + +/obj/structure/xeno/acidwell/fire_act() //Removes a charge of acid, but fire is extinguished + acid_well_fire_interaction() + +///Handles fire based interactions with the acid well. Depletes 1 charge if there are any to extinguish all fires in the turf while producing acid smoke. +/obj/structure/xeno/acidwell/proc/acid_well_fire_interaction() + if(!charges) + take_damage(50, BURN, FIRE) + return + + charges-- + update_icon() + var/turf/T = get_turf(src) + var/datum/effect_system/smoke_spread/xeno/acid/acid_smoke = new(T) //spawn acid smoke when charges are actually used + acid_smoke.set_up(0, src) //acid smoke in the immediate vicinity + acid_smoke.start() + + for(var/obj/flamer_fire/F in T) //Extinguish all flames in turf + qdel(F) + +/obj/structure/xeno/acidwell/attackby(obj/item/I, mob/user, params) + if(!isxeno(user)) + return ..() + attack_alien(user) + +/obj/structure/xeno/acidwell/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.a_intent == INTENT_HARM && (CHECK_BITFIELD(xeno_attacker.xeno_caste.caste_flags, CASTE_IS_BUILDER) || xeno_attacker == creator) ) //If we're a builder caste or the creator and we're on harm intent, deconstruct it. + balloon_alert(xeno_attacker, "Removing...") + if(!do_after(xeno_attacker, XENO_ACID_WELL_FILL_TIME, IGNORE_HELD_ITEM, src, BUSY_ICON_HOSTILE)) + balloon_alert(xeno_attacker, "Stopped removing") + return + playsound(src, "alien_resin_break", 25) + deconstruct(TRUE, xeno_attacker) + return + + if(charges >= 5) + balloon_alert(xeno_attacker, "Already full") + return + if(charging) + balloon_alert(xeno_attacker, "Already being filled") + return + + if(xeno_attacker.plasma_stored < XENO_ACID_WELL_FILL_COST) //You need to have enough plasma to attempt to fill the well + balloon_alert(xeno_attacker, "Need [XENO_ACID_WELL_FILL_COST - xeno_attacker.plasma_stored] more plasma") + return + + charging = TRUE + + balloon_alert(xeno_attacker, "Refilling...") + if(!do_after(xeno_attacker, XENO_ACID_WELL_FILL_TIME, IGNORE_HELD_ITEM, src, BUSY_ICON_BUILD)) + charging = FALSE + balloon_alert(xeno_attacker, "Aborted refilling") + return + + if(xeno_attacker.plasma_stored < XENO_ACID_WELL_FILL_COST) + charging = FALSE + balloon_alert(xeno_attacker, "Need [XENO_ACID_WELL_FILL_COST - xeno_attacker.plasma_stored] more plasma") + return + + xeno_attacker.plasma_stored -= XENO_ACID_WELL_FILL_COST + charges++ + charging = FALSE + update_icon() + balloon_alert(xeno_attacker, "Now has [charges] / [XENO_ACID_WELL_MAX_CHARGES] charges") + to_chat(xeno_attacker,span_xenonotice("We add acid to [src]. It is currently has [charges] / [XENO_ACID_WELL_MAX_CHARGES] charges.") ) + +/obj/structure/xeno/acidwell/proc/on_cross(datum/source, atom/movable/A, oldloc, oldlocs) + SIGNAL_HANDLER + if(CHECK_MULTIPLE_BITFIELDS(A.allow_pass_flags, HOVERING)) + return + if(iscarbon(A)) + HasProximity(A) + +/obj/structure/xeno/acidwell/HasProximity(atom/movable/AM) + if(!charges) + return + if(!isliving(AM)) + return + var/mob/living/stepper = AM + if(stepper.stat == DEAD) + return + + var/charges_used = 0 + + for(var/obj/item/explosive/grenade/sticky/sticky_bomb in stepper.contents) + if(charges_used >= charges) + break + if(sticky_bomb.stuck_to == stepper) + sticky_bomb.clean_refs() + sticky_bomb.forceMove(loc) + charges_used ++ + + if(stepper.on_fire && (charges_used < charges)) + stepper.ExtinguishMob() + charges_used ++ + + if(!isxeno(stepper)) + stepper.next_move_slowdown += charges * 2 //Acid spray has slow down so this should too; scales with charges, Min 2 slowdown, Max 10 + stepper.apply_damage(charges * 10, BURN, BODY_ZONE_PRECISE_L_FOOT, ACID, penetration = 33) + stepper.apply_damage(charges * 10, BURN, BODY_ZONE_PRECISE_R_FOOT, ACID, penetration = 33) + stepper.visible_message(span_danger("[stepper] is immersed in [src]'s acid!") , \ + span_danger("We are immersed in [src]'s acid!") , null, 5) + playsound(stepper, "sound/bullets/acid_impact1.ogg", 10 * charges) + new /obj/effect/temp_visual/acid_bath(get_turf(stepper)) + charges_used = charges //humans stepping on it empties it out + + if(!charges_used) + return + + var/datum/effect_system/smoke_spread/xeno/acid/acid_smoke + acid_smoke = new(get_turf(stepper)) //spawn acid smoke when charges are actually used + acid_smoke.set_up(0, src) //acid smoke in the immediate vicinity + acid_smoke.start() + + charges -= charges_used + update_icon() diff --git a/code/modules/xenomorph/jellypod.dm b/code/modules/xenomorph/jellypod.dm new file mode 100644 index 0000000000000..af26fa5b2cab6 --- /dev/null +++ b/code/modules/xenomorph/jellypod.dm @@ -0,0 +1,68 @@ + +/obj/structure/xeno/resin_jelly_pod + name = "Resin jelly pod" + desc = "A large resin pod. Inside is a thick, viscous fluid that looks like it doesnt burn easily." + icon = 'icons/Xeno/resin_pod.dmi' + icon_state = "resinpod" + density = FALSE + opacity = FALSE + anchored = TRUE + max_integrity = 250 + layer = RESIN_STRUCTURE_LAYER + pixel_x = -16 + pixel_y = -16 + xeno_structure_flags = IGNORE_WEED_REMOVAL + + hit_sound = "alien_resin_move" + destroy_sound = "alien_resin_move" + ///How many actual jellies the pod has stored + var/chargesleft = 0 + ///Max amount of jellies the pod can hold + var/maxcharges = 10 + ///Every 5 times this number seconds we will create a jelly + var/recharge_rate = 10 + ///Countdown to the next time we generate a jelly + var/nextjelly = 0 + +/obj/structure/xeno/resin_jelly_pod/Initialize(mapload, _hivenumber) + . = ..() + add_overlay(image(icon, "resinpod_inside", layer + 0.01, dir)) + START_PROCESSING(SSslowprocess, src) + +/obj/structure/xeno/resin_jelly_pod/Destroy() + STOP_PROCESSING(SSslowprocess, src) + return ..() + +/obj/structure/xeno/resin_jelly_pod/examine(mob/user, distance, infix, suffix) + . = ..() + if(isxeno(user)) + . += "It has [chargesleft] jelly globules remaining[datum_flags & DF_ISPROCESSING ? ", and will create a new jelly in [(recharge_rate-nextjelly)*5] seconds": " and seems latent"]." + +/obj/structure/xeno/resin_jelly_pod/process() + if(nextjelly <= recharge_rate) + nextjelly++ + return + nextjelly = 0 + chargesleft++ + if(chargesleft >= maxcharges) + return PROCESS_KILL + +/obj/structure/xeno/resin_jelly_pod/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) + return FALSE + + if((xeno_attacker.a_intent == INTENT_HARM && isxenohivelord(xeno_attacker)) || xeno_attacker.hivenumber != hivenumber) + balloon_alert(xeno_attacker, "Destroying...") + if(do_after(xeno_attacker, HIVELORD_TUNNEL_DISMANTLE_TIME, IGNORE_HELD_ITEM, src, BUSY_ICON_BUILD)) + deconstruct(FALSE) + return + + if(!chargesleft) + balloon_alert(xeno_attacker, "No jelly remaining") + to_chat(xeno_attacker, span_xenonotice("We reach into \the [src], but only find dregs of resin. We should wait some more.") ) + return + balloon_alert(xeno_attacker, "Retrieved jelly") + new /obj/item/resin_jelly(loc) + chargesleft-- + if(!(datum_flags & DF_ISPROCESSING) && (chargesleft < maxcharges)) + START_PROCESSING(SSslowprocess, src) diff --git a/code/modules/xenomorph/pherotower.dm b/code/modules/xenomorph/pherotower.dm new file mode 100644 index 0000000000000..0d61a0caa8213 --- /dev/null +++ b/code/modules/xenomorph/pherotower.dm @@ -0,0 +1,67 @@ + +/obj/structure/xeno/pherotower + name = "pheromone tower" + desc = "A resin formation that looks like a small pillar. A faint, weird smell can be perceived from it." + icon = 'icons/Xeno/1x1building.dmi' + icon_state = "recoverytower" + bound_width = 32 + bound_height = 32 + obj_integrity = 400 + max_integrity = 400 + xeno_structure_flags = CRITICAL_STRUCTURE|IGNORE_WEED_REMOVAL + ///The type of pheromone currently being emitted. + var/datum/aura_bearer/current_aura + ///Strength of pheromones given by this tower. + var/aura_strength = 5 + ///Radius (in tiles) of the pheromones given by this tower. + var/aura_radius = 32 + +/obj/structure/xeno/pherotower/Initialize(mapload, _hivenumber) + . = ..() + SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "phero", ABOVE_FLOAT_LAYER)) + GLOB.hive_datums[hivenumber].pherotowers += src + +//Pheromone towers start off with recovery. + current_aura = SSaura.add_emitter(src, AURA_XENO_RECOVERY, aura_radius, aura_strength, -1, FACTION_XENO, hivenumber) + playsound(src, "alien_drool", 25) + update_icon() + +/obj/structure/xeno/pherotower/ex_act(severity) + switch(severity) + if(EXPLODE_DEVASTATE) + take_damage(700, BRUTE, BOMB) + if(EXPLODE_HEAVY) + take_damage(500, BRUTE, BOMB) + if(EXPLODE_LIGHT) + take_damage(300, BRUTE, BOMB) + if(EXPLODE_WEAK) + take_damage(100, BRUTE, BOMB) + +/obj/structure/xeno/pherotower/Destroy() + GLOB.hive_datums[hivenumber].pherotowers -= src + return ..() + +// Clicking on the tower brings up a radial menu that allows you to select the type of pheromone that this tower will emit. +/obj/structure/xeno/pherotower/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + var/phero_choice = show_radial_menu(xeno_attacker, src, GLOB.pheromone_images_list, radius = 35, require_near = TRUE) + + if(!phero_choice) + return + + QDEL_NULL(current_aura) + current_aura = SSaura.add_emitter(src, phero_choice, aura_radius, aura_strength, -1, FACTION_XENO, hivenumber) + balloon_alert(xeno_attacker, "[phero_choice]") + playsound(src, "alien_drool", 25) + update_icon() + +/obj/structure/xeno/pherotower/update_icon_state() + switch(current_aura.aura_types[1]) + if(AURA_XENO_RECOVERY) + icon_state = "recoverytower" + set_light(2, 2, LIGHT_COLOR_BLUE) + if(AURA_XENO_WARDING) + icon_state = "wardingtower" + set_light(2, 2, LIGHT_COLOR_GREEN) + if(AURA_XENO_FRENZY) + icon_state = "frenzytower" + set_light(2, 2, LIGHT_COLOR_RED) diff --git a/code/modules/xenomorph/resin_gargoyle.dm b/code/modules/xenomorph/resin_gargoyle.dm new file mode 100644 index 0000000000000..96b1f33494e02 --- /dev/null +++ b/code/modules/xenomorph/resin_gargoyle.dm @@ -0,0 +1,62 @@ +/obj/structure/xeno/resin_gargoyle + name = "resin gargoyle" + desc = "A resin monument to your tresspass. Alerts the xenomorph hive when an enemy approaches." + icon = 'icons/Xeno/2x2building.dmi' + icon_state = "gargoyle" + max_integrity = 100 + xeno_structure_flags = CRITICAL_STRUCTURE|IGNORE_WEED_REMOVAL + ///Bool if we're currently alerting + var/is_alerting = FALSE + //cd tracking for the alert + COOLDOWN_DECLARE(proxy_alert_cooldown) + +/obj/structure/xeno/resin_gargoyle/Initialize(mapload, _hivenumber, mob/living/carbon/xenomorph/creator) + . = ..() + for(var/turfs in RANGE_TURFS(XENO_GARGOYLE_DETECTION_RANGE, src)) + RegisterSignal(turfs, COMSIG_ATOM_ENTERED, PROC_REF(gargoyle_alarm)) + add_overlay(emissive_appearance(icon, "[icon_state]_emissive")) + INVOKE_ASYNC(src, PROC_REF(set_name), creator) + +/obj/structure/xeno/resin_gargoyle/proc/set_name(mob/living/carbon/xenomorph/creator) + name = initial(name) + " (" + tgui_input_text(creator, "Add a gargoyle name", "Naming") + ")" + +/// Checks performed every time an atom moves in a turf watched by the gargoyle +/obj/structure/xeno/resin_gargoyle/proc/gargoyle_alarm(datum/source, atom/movable/hostile, direction) + SIGNAL_HANDLER + + if(!COOLDOWN_CHECK(src, proxy_alert_cooldown)) + return + + if(!isliving(hostile)) + return + + var/mob/living/living_triggerer = hostile + if(living_triggerer.stat == DEAD) + return + + if(isxeno(hostile)) + var/mob/living/carbon/xenomorph/X = hostile + if(X.hive == GLOB.hive_datums[hivenumber]) //Trigger proxy alert only for hostile xenos + return + + is_alerting = TRUE + GLOB.hive_datums[hivenumber].xeno_message("Our [name] has detected a hostile [hostile] at [get_area(hostile)].", "xenoannounce", 5, FALSE, hostile, 'sound/voice/alien_talk2.ogg', FALSE, null, /atom/movable/screen/arrow/leader_tracker_arrow) + COOLDOWN_START(src, proxy_alert_cooldown, XENO_GARGOYLE_DETECTION_COOLDOWN) + addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_GARGOYLE_DETECTION_COOLDOWN, TIMER_STOPPABLE) + update_minimap_icon() + update_appearance() + +///resets gargoyle to normal state after yelling +/obj/structure/xeno/resin_gargoyle/proc/clear_warning() + is_alerting = FALSE + update_minimap_icon() + update_appearance() + +/obj/structure/xeno/resin_gargoyle/update_icon_state() + . = ..() + icon_state = is_alerting ? "gargoyle_alarm" : "gargoyle" + +///resets minimap icon for the gargoyle +/obj/structure/xeno/resin_gargoyle/proc/update_minimap_icon() + SSminimaps.remove_marker(src) + SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "gargoyle[is_alerting ? "_alarm" : ""]", ABOVE_FLOAT_LAYER)) diff --git a/code/modules/xenomorph/silo.dm b/code/modules/xenomorph/silo.dm new file mode 100644 index 0000000000000..ed69c258628e8 --- /dev/null +++ b/code/modules/xenomorph/silo.dm @@ -0,0 +1,155 @@ + +/obj/structure/xeno/silo + name = "Resin silo" + icon = 'icons/Xeno/resin_silo.dmi' + icon_state = "weed_silo" + desc = "A slimy, oozy resin bed filled with foul-looking egg-like ...things." + bound_width = 96 + bound_height = 96 + max_integrity = 1000 + resistance_flags = UNACIDABLE | DROPSHIP_IMMUNE | PLASMACUTTER_IMMUNE + xeno_structure_flags = IGNORE_WEED_REMOVAL|CRITICAL_STRUCTURE + ///How many larva points one silo produce in one minute + var/larva_spawn_rate = 0.5 + var/turf/center_turf + var/number_silo + ///For minimap icon change if silo takes damage or nearby hostile + var/warning + COOLDOWN_DECLARE(silo_damage_alert_cooldown) + COOLDOWN_DECLARE(silo_proxy_alert_cooldown) + +/obj/structure/xeno/silo/Initialize(mapload, _hivenumber) + . = ..() + center_turf = get_step(src, NORTHEAST) + if(!istype(center_turf)) + center_turf = loc + + if(SSticker.mode?.round_type_flags & MODE_SILO_RESPAWN) + for(var/turfs in RANGE_TURFS(XENO_SILO_DETECTION_RANGE, src)) + RegisterSignal(turfs, COMSIG_ATOM_ENTERED, PROC_REF(resin_silo_proxy_alert)) + + if(SSticker.mode?.round_type_flags & MODE_SILOS_SPAWN_MINIONS) + SSspawning.registerspawner(src, INFINITY, GLOB.xeno_ai_spawnable, 0, 0, null) + SSspawning.spawnerdata[src].required_increment = 2 * max(45 SECONDS, 3 MINUTES - SSmonitor.maximum_connected_players_count * SPAWN_RATE_PER_PLAYER)/SSspawning.wait + SSspawning.spawnerdata[src].max_allowed_mobs = max(1, MAX_SPAWNABLE_MOB_PER_PLAYER * SSmonitor.maximum_connected_players_count * 0.5) + update_minimap_icon() + + return INITIALIZE_HINT_LATELOAD + + +/obj/structure/xeno/silo/LateInitialize() + . = ..() + var/siloprefix = GLOB.hive_datums[hivenumber].name + number_silo = length(GLOB.xeno_resin_silos_by_hive[hivenumber]) + 1 + name = "[siloprefix == "Normal" ? "" : "[siloprefix] "][name] [number_silo]" + LAZYADDASSOC(GLOB.xeno_resin_silos_by_hive, hivenumber, src) + + if(!locate(/obj/alien/weeds) in center_turf) + new /obj/alien/weeds/node(center_turf) + if(GLOB.hive_datums[hivenumber]) + RegisterSignals(GLOB.hive_datums[hivenumber], list(COMSIG_HIVE_XENO_MOTHER_PRE_CHECK, COMSIG_HIVE_XENO_MOTHER_CHECK), PROC_REF(is_burrowed_larva_host)) + if(length(GLOB.xeno_resin_silos_by_hive[hivenumber]) == 1) + GLOB.hive_datums[hivenumber].give_larva_to_next_in_queue() + var/turf/tunnel_turf = get_step(center_turf, NORTH) + if(tunnel_turf.can_dig_xeno_tunnel()) + var/obj/structure/xeno/tunnel/newt = new(tunnel_turf, hivenumber) + newt.tunnel_desc = "[AREACOORD_NO_Z(newt)]" + newt.name += " [name]" + +/obj/structure/xeno/silo/obj_destruction(damage_amount, damage_type, damage_flag, mob/living/blame_mob) + if(GLOB.hive_datums[hivenumber]) + UnregisterSignal(GLOB.hive_datums[hivenumber], list(COMSIG_HIVE_XENO_MOTHER_PRE_CHECK, COMSIG_HIVE_XENO_MOTHER_CHECK)) + GLOB.hive_datums[hivenumber].xeno_message("A resin silo has been destroyed at [AREACOORD_NO_Z(src)]!", "xenoannounce", 5, FALSE,src.loc, 'sound/voice/alien_help2.ogg',FALSE , null, /atom/movable/screen/arrow/silo_damaged_arrow) + notify_ghosts("\ A resin silo has been destroyed at [AREACOORD_NO_Z(src)]!", source = get_turf(src), action = NOTIFY_JUMP) + playsound(loc,'sound/effects/alien_egg_burst.ogg', 75) + return ..() + +/obj/structure/xeno/silo/Destroy() + GLOB.xeno_resin_silos_by_hive[hivenumber] -= src + + for(var/i in contents) + var/atom/movable/AM = i + AM.forceMove(get_step(center_turf, pick(CARDINAL_ALL_DIRS))) + center_turf = null + + STOP_PROCESSING(SSslowprocess, src) + return ..() + +/obj/structure/xeno/silo/examine(mob/user) + . = ..() + var/current_integrity = (obj_integrity / max_integrity) * 100 + switch(current_integrity) + if(0 to 20) + . += span_warning("It's barely holding, there's leaking oozes all around, and most eggs are broken. Yet it is not inert.") + if(20 to 40) + . += span_warning("It looks severely damaged, its movements slow.") + if(40 to 60) + . += span_warning("It's quite beat up, but it seems alive.") + if(60 to 80) + . += span_warning("It's slightly damaged, but still seems healthy.") + if(80 to 100) + . += span_info("It appears in good shape, pulsating healthily.") + + +/obj/structure/xeno/silo/take_damage(damage_amount, damage_type = BRUTE, armor_type = null, effects = TRUE, attack_dir, armour_penetration = 0, mob/living/blame_mob) + . = ..() + + //We took damage, so it's time to start regenerating if we're not already processing + if(!CHECK_BITFIELD(datum_flags, DF_ISPROCESSING)) + START_PROCESSING(SSslowprocess, src) + + resin_silo_damage_alert() + +/obj/structure/xeno/silo/proc/resin_silo_damage_alert() + if(!COOLDOWN_CHECK(src, silo_damage_alert_cooldown)) + return + warning = TRUE + update_minimap_icon() + GLOB.hive_datums[hivenumber].xeno_message("Our [name] at [AREACOORD_NO_Z(src)] is under attack! It has [obj_integrity]/[max_integrity] Health remaining.", "xenoannounce", 5, FALSE, src, 'sound/voice/alien_help1.ogg',FALSE, null, /atom/movable/screen/arrow/silo_damaged_arrow) + COOLDOWN_START(src, silo_damage_alert_cooldown, XENO_SILO_HEALTH_ALERT_COOLDOWN) //set the cooldown. + addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_HEALTH_ALERT_COOLDOWN) //clear warning + +///Alerts the Hive when hostiles get too close to their resin silo +/obj/structure/xeno/silo/proc/resin_silo_proxy_alert(datum/source, atom/movable/hostile, direction) + SIGNAL_HANDLER + + if(!COOLDOWN_CHECK(src, silo_proxy_alert_cooldown)) //Proxy alert triggered too recently; abort + return + + if(!isliving(hostile)) + return + + var/mob/living/living_triggerer = hostile + if(living_triggerer.stat == DEAD) //We don't care about the dead + return + + if(isxeno(hostile)) + var/mob/living/carbon/xenomorph/X = hostile + if(X.hive == GLOB.hive_datums[hivenumber]) //Trigger proxy alert only for hostile xenos + return + + warning = TRUE + update_minimap_icon() + GLOB.hive_datums[hivenumber].xeno_message("Our [name] has detected a nearby hostile [hostile] at [get_area(hostile)] (X: [hostile.x], Y: [hostile.y]).", "xenoannounce", 5, FALSE, hostile, 'sound/voice/alien_help1.ogg', FALSE, null, /atom/movable/screen/arrow/leader_tracker_arrow) + COOLDOWN_START(src, silo_proxy_alert_cooldown, XENO_SILO_DETECTION_COOLDOWN) //set the cooldown. + addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_DETECTION_COOLDOWN) //clear warning + +///Clears the warning for minimap if its warning for hostiles +/obj/structure/xeno/silo/proc/clear_warning() + warning = FALSE + update_minimap_icon() + +/obj/structure/xeno/silo/process() + //Regenerate if we're at less than max integrity + if(obj_integrity < max_integrity) + obj_integrity = min(obj_integrity + 25, max_integrity) //Regen 5 HP per sec + +/obj/structure/xeno/silo/proc/is_burrowed_larva_host(datum/source, list/mothers, list/silos) + SIGNAL_HANDLER + if(GLOB.hive_datums[hivenumber]) + silos += src + +///Change minimap icon if silo is under attack or not +/obj/structure/xeno/silo/proc/update_minimap_icon() + SSminimaps.remove_marker(src) + SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "silo[warning ? "_warn" : "_passive"]", HIGH_FLOAT_LAYER)) diff --git a/code/modules/xenomorph/spawner.dm b/code/modules/xenomorph/spawner.dm new file mode 100644 index 0000000000000..464a928ce44a8 --- /dev/null +++ b/code/modules/xenomorph/spawner.dm @@ -0,0 +1,111 @@ + +/obj/structure/xeno/spawner + name = "spawner" + desc = "A slimy, oozy resin bed filled with foul-looking egg-like ...things." + icon = 'icons/Xeno/3x3building.dmi' + icon_state = "spawner" + bound_width = 96 + bound_height = 96 + max_integrity = 500 + resistance_flags = UNACIDABLE | DROPSHIP_IMMUNE + xeno_structure_flags = IGNORE_WEED_REMOVAL | CRITICAL_STRUCTURE + ///For minimap icon change if silo takes damage or nearby hostile + var/warning + COOLDOWN_DECLARE(spawner_damage_alert_cooldown) + COOLDOWN_DECLARE(spawner_proxy_alert_cooldown) + var/linked_minions = list() + +/obj/structure/xeno/spawner/Initialize(mapload, _hivenumber) + . = ..() + LAZYADDASSOC(GLOB.xeno_spawners_by_hive, hivenumber, src) + SSspawning.registerspawner(src, INFINITY, GLOB.xeno_ai_spawnable, 0, 0, CALLBACK(src, PROC_REF(on_spawn))) + SSspawning.spawnerdata[src].required_increment = max(45 SECONDS, 3 MINUTES - SSmonitor.maximum_connected_players_count * SPAWN_RATE_PER_PLAYER)/SSspawning.wait + SSspawning.spawnerdata[src].max_allowed_mobs = max(2, MAX_SPAWNABLE_MOB_PER_PLAYER * SSmonitor.maximum_connected_players_count) + for(var/turfs in RANGE_TURFS(XENO_SILO_DETECTION_RANGE, src)) + RegisterSignal(turfs, COMSIG_ATOM_ENTERED, PROC_REF(spawner_proxy_alert)) + update_minimap_icon() + +/obj/structure/xeno/spawner/examine(mob/user) + . = ..() + var/current_integrity = (obj_integrity / max_integrity) * 100 + switch(current_integrity) + if(0 to 20) + . += span_warning("It's barely holding, there's leaking oozes all around, and most eggs are broken. Yet it is not inert.") + if(20 to 40) + . += span_warning("It looks severely damaged, its movements slow.") + if(40 to 60) + . += span_warning("It's quite beat up, but it seems alive.") + if(60 to 80) + . += span_warning("It's slightly damaged, but still seems healthy.") + if(80 to 100) + . += span_info("It appears in good shape, pulsating healthily.") + + +/obj/structure/xeno/spawner/take_damage(damage_amount, damage_type = BRUTE, armor_type = null, effects = TRUE, attack_dir, armour_penetration = 0, mob/living/blame_mob) + . = ..() + spawner_damage_alert() + +///Alert if spawner is receiving damage +/obj/structure/xeno/spawner/proc/spawner_damage_alert() + if(!COOLDOWN_CHECK(src, spawner_damage_alert_cooldown)) + warning = FALSE + return + warning = TRUE + update_minimap_icon() + GLOB.hive_datums[hivenumber].xeno_message("Our [name] at [AREACOORD_NO_Z(src)] is under attack! It has [obj_integrity]/[max_integrity] Health remaining.", "xenoannounce", 5, FALSE, src, 'sound/voice/alien_help1.ogg',FALSE, null, /atom/movable/screen/arrow/silo_damaged_arrow) + COOLDOWN_START(src, spawner_damage_alert_cooldown, XENO_SILO_HEALTH_ALERT_COOLDOWN) //set the cooldown. + addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_DETECTION_COOLDOWN) //clear warning + +///Alerts the Hive when hostiles get too close to their spawner +/obj/structure/xeno/spawner/proc/spawner_proxy_alert(datum/source, atom/movable/hostile, direction) + SIGNAL_HANDLER + + if(!COOLDOWN_CHECK(src, spawner_proxy_alert_cooldown)) //Proxy alert triggered too recently; abort + warning = FALSE + return + + if(!isliving(hostile)) + return + + var/mob/living/living_triggerer = hostile + if(living_triggerer.stat == DEAD) //We don't care about the dead + return + + if(isxeno(hostile)) + var/mob/living/carbon/xenomorph/X = hostile + if(X.hivenumber == hivenumber) //Trigger proxy alert only for hostile xenos + return + + warning = TRUE + update_minimap_icon() + GLOB.hive_datums[hivenumber].xeno_message("Our [name] has detected a nearby hostile [hostile] at [get_area(hostile)] (X: [hostile.x], Y: [hostile.y]).", "xenoannounce", 5, FALSE, hostile, 'sound/voice/alien_help1.ogg', FALSE, null, /atom/movable/screen/arrow/leader_tracker_arrow) + COOLDOWN_START(src, spawner_proxy_alert_cooldown, XENO_SILO_DETECTION_COOLDOWN) //set the cooldown. + addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_DETECTION_COOLDOWN) //clear warning + +///Clears the warning for minimap if its warning for hostiles +/obj/structure/xeno/spawner/proc/clear_warning() + warning = FALSE + update_minimap_icon() + +/obj/structure/xeno/spawner/Destroy() + GLOB.xeno_spawners_by_hive[hivenumber] -= src + return ..() + +///Change minimap icon if spawner is under attack or not +/obj/structure/xeno/spawner/proc/update_minimap_icon() + SSminimaps.remove_marker(src) + SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "spawner[warning ? "_warn" : "_passive"]", ABOVE_FLOAT_LAYER)) + +/obj/structure/xeno/spawner/proc/on_spawn(list/squad) + if(!isxeno(squad[length(squad)])) + CRASH("Xeno spawner somehow tried to spawn a non xeno (tried to spawn [squad[length(squad)]])") + var/mob/living/carbon/xenomorph/X = squad[length(squad)] + X.transfer_to_hive(hivenumber) + linked_minions = squad + if(hivenumber == XENO_HIVE_FALLEN) //snowflake so valhalla isnt filled with minions after you're done + RegisterSignal(src, COMSIG_QDELETING, PROC_REF(kill_linked_minions)) + +/obj/structure/xeno/spawner/proc/kill_linked_minions() + for(var/mob/living/carbon/xenomorph/linked in linked_minions) + linked.death(TRUE) + UnregisterSignal(src, COMSIG_QDELETING) diff --git a/code/modules/xenomorph/trap.dm b/code/modules/xenomorph/trap.dm new file mode 100644 index 0000000000000..87379b809495f --- /dev/null +++ b/code/modules/xenomorph/trap.dm @@ -0,0 +1,208 @@ +//Carrier trap +/obj/structure/xeno/trap + desc = "It looks like a hiding hole." + name = "resin hole" + icon = 'icons/Xeno/Effects.dmi' + icon_state = "trap" + density = FALSE + opacity = FALSE + anchored = TRUE + max_integrity = 5 + layer = RESIN_STRUCTURE_LAYER + destroy_sound = "alien_resin_break" + ///defines for trap type to trigger on activation + var/trap_type + ///The hugger inside our trap + var/obj/item/clothing/mask/facehugger/hugger = null + ///smoke effect to create when the trap is triggered + var/datum/effect_system/smoke_spread/smoke + ///connection list for huggers + var/static/list/listen_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(trigger_trap), + ) + +/obj/structure/xeno/trap/Initialize(mapload, _hivenumber) + . = ..() + RegisterSignal(src, COMSIG_MOVABLE_SHUTTLE_CRUSH, PROC_REF(shuttle_crush)) + AddElement(/datum/element/connect_loc, listen_connections) + +/obj/structure/xeno/trap/ex_act(severity) + switch(severity) + if(EXPLODE_DEVASTATE) + take_damage(400, BRUTE, BOMB) + if(EXPLODE_HEAVY) + take_damage(200, BRUTE, BOMB) + if(EXPLODE_LIGHT) + take_damage(100, BRUTE, BOMB) + if(EXPLODE_WEAK) + take_damage(50, BRUTE, BOMB) + +/obj/structure/xeno/trap/update_icon_state() + . = ..() + switch(trap_type) + if(TRAP_HUGGER) + icon_state = "traphugger" + if(TRAP_SMOKE_NEURO) + icon_state = "trapneurogas" + if(TRAP_SMOKE_ACID) + icon_state = "trapacidgas" + if(TRAP_ACID_WEAK) + icon_state = "trapacidweak" + if(TRAP_ACID_NORMAL) + icon_state = "trapacid" + if(TRAP_ACID_STRONG) + icon_state = "trapacidstrong" + else + icon_state = "trap" + +/obj/structure/xeno/trap/obj_destruction(damage_amount, damage_type, damage_flag, mob/living/blame_mob) + if((damage_amount || damage_flag) && hugger && loc) + trigger_trap() + return ..() + +/obj/structure/xeno/trap/proc/set_trap_type(new_trap_type) + if(new_trap_type == trap_type) + return + trap_type = new_trap_type + update_icon() + +///Ensures that no huggies will be released when the trap is crushed by a shuttle; no more trapping shuttles with huggies +/obj/structure/xeno/trap/proc/shuttle_crush() + SIGNAL_HANDLER + qdel(src) + +/obj/structure/xeno/trap/examine(mob/user) + . = ..() + if(!isxeno(user)) + return + . += "A hole for a little one to hide in ambush for or for spewing acid." + switch(trap_type) + if(TRAP_HUGGER) + . += "There's a little one inside." + if(TRAP_SMOKE_NEURO) + . += "There's pressurized neurotoxin inside." + if(TRAP_SMOKE_ACID) + . += "There's pressurized acid gas inside." + if(TRAP_ACID_WEAK) + . += "There's pressurized weak acid inside." + if(TRAP_ACID_NORMAL) + . += "There's pressurized normal acid inside." + if(TRAP_ACID_STRONG) + . += "There's strong pressurized acid inside." + else + . += "It's empty." + +/obj/structure/xeno/trap/flamer_fire_act(burnlevel) + hugger?.kill_hugger() + trigger_trap() + set_trap_type(null) + +/obj/structure/xeno/trap/fire_act() + hugger?.kill_hugger() + trigger_trap() + set_trap_type(null) + +///Triggers the hugger trap +/obj/structure/xeno/trap/proc/trigger_trap(datum/source, atom/movable/AM, oldloc, oldlocs) + SIGNAL_HANDLER + if(!trap_type) + return + if(AM && (hivenumber == AM.get_xeno_hivenumber())) + return + playsound(src, "alien_resin_break", 25) + if(iscarbon(AM)) + var/mob/living/carbon/crosser = AM + crosser.visible_message(span_warning("[crosser] trips on [src]!"), span_danger("You trip on [src]!")) + crosser.ParalyzeNoChain(4 SECONDS) + switch(trap_type) + if(TRAP_HUGGER) + if(!AM) + drop_hugger() + return + if(!iscarbon(AM)) + return + var/mob/living/carbon/crosser = AM + if(!crosser.can_be_facehugged(hugger)) + return + drop_hugger() + if(TRAP_SMOKE_NEURO, TRAP_SMOKE_ACID) + smoke.start() + if(TRAP_ACID_WEAK) + for(var/turf/acided AS in RANGE_TURFS(1, src)) + new /obj/effect/xenomorph/spray/weak(acided, 8 SECONDS, XENO_WEAK_ACID_PUDDLE_DAMAGE) + if(TRAP_ACID_NORMAL) + for(var/turf/acided AS in RANGE_TURFS(1, src)) + new /obj/effect/xenomorph/spray(acided, 10 SECONDS, XENO_DEFAULT_ACID_PUDDLE_DAMAGE) + if(TRAP_ACID_STRONG) + for(var/turf/acided AS in RANGE_TURFS(1, src)) + new /obj/effect/xenomorph/spray/strong(acided, 12 SECONDS, XENO_HIGH_ACID_PUDDLE_DAMAGE) + xeno_message("A [trap_type] trap at [AREACOORD_NO_Z(src)] has been triggered!", "xenoannounce", 5, hivenumber, FALSE, get_turf(src), 'sound/voice/alien_talk2.ogg', FALSE, null, /atom/movable/screen/arrow/attack_order_arrow, COLOR_ORANGE, TRUE) + set_trap_type(null) + +/// Move the hugger out of the trap +/obj/structure/xeno/trap/proc/drop_hugger() + hugger.forceMove(loc) + hugger.go_active(TRUE, TRUE) //Removes stasis + visible_message(span_warning("[hugger] gets out of [src]!") ) + hugger = null + set_trap_type(null) + +/obj/structure/xeno/trap/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) + return FALSE + + if(xeno_attacker.a_intent == INTENT_HARM) + return ..() + if(trap_type == TRAP_HUGGER) + if(!(xeno_attacker.xeno_caste.can_flags & CASTE_CAN_HOLD_FACEHUGGERS)) + return + if(!hugger) + balloon_alert(xeno_attacker, "It is empty") + return + xeno_attacker.put_in_active_hand(hugger) + hugger.go_active(TRUE) + hugger = null + set_trap_type(null) + balloon_alert(xeno_attacker, "Removed facehugger") + return + var/datum/action/ability/activable/xeno/corrosive_acid/acid_action = locate(/datum/action/ability/activable/xeno/corrosive_acid) in xeno_attacker.actions + if(istype(xeno_attacker.ammo, /datum/ammo/xeno/boiler_gas)) + var/datum/ammo/xeno/boiler_gas/boiler_glob = xeno_attacker.ammo + if(!boiler_glob.enhance_trap(src, xeno_attacker)) + return + else if(acid_action) + if(!do_after(xeno_attacker, 2 SECONDS, NONE, src)) + return + switch(acid_action.acid_type) + if(/obj/effect/xenomorph/acid/weak) + set_trap_type(TRAP_ACID_WEAK) + if(/obj/effect/xenomorph/acid) + set_trap_type(TRAP_ACID_NORMAL) + if(/obj/effect/xenomorph/acid/strong) + set_trap_type(TRAP_ACID_STRONG) + else + return // nothing happened! + playsound(xeno_attacker.loc, 'sound/effects/refill.ogg', 25, 1) + balloon_alert(xeno_attacker, "Filled with [trap_type]") + +/obj/structure/xeno/trap/attackby(obj/item/I, mob/user, params) + . = ..() + if(.) + return + + if(!istype(I, /obj/item/clothing/mask/facehugger) || !isxeno(user)) + return + var/obj/item/clothing/mask/facehugger/FH = I + if(trap_type) + balloon_alert(user, "Already occupied") + return + + if(FH.stat == DEAD) + balloon_alert(user, "Cannot insert facehugger") + return + + user.transferItemToLoc(FH, src) + FH.go_idle(TRUE) + hugger = FH + set_trap_type(TRAP_HUGGER) + balloon_alert(user, "Inserted facehugger") diff --git a/code/modules/xenomorph/tunnel.dm b/code/modules/xenomorph/tunnel.dm new file mode 100644 index 0000000000000..1e8e05df15af0 --- /dev/null +++ b/code/modules/xenomorph/tunnel.dm @@ -0,0 +1,196 @@ + +/* +TUNNEL +*/ +/obj/structure/xeno/tunnel + name = "tunnel" + desc = "A tunnel entrance. Looks like it was dug by some kind of clawed beast." + icon = 'icons/Xeno/Effects.dmi' + icon_state = "hole" + + density = FALSE + opacity = FALSE + anchored = TRUE + resistance_flags = UNACIDABLE|BANISH_IMMUNE + layer = RESIN_STRUCTURE_LAYER + + max_integrity = 140 + + hud_possible = list(XENO_TACTICAL_HUD) + xeno_structure_flags = IGNORE_WEED_REMOVAL + ///Description added by the hivelord. + var/tunnel_desc = "" + ///What hivelord created that tunnel. Can be null + var/mob/living/carbon/xenomorph/hivelord/creator = null + +/obj/structure/xeno/tunnel/Initialize(mapload, _hivenumber) + . = ..() + LAZYADDASSOC(GLOB.xeno_tunnels_by_hive, hivenumber, src) + prepare_huds() + for(var/datum/atom_hud/xeno_tactical/xeno_tac_hud in GLOB.huds) //Add to the xeno tachud + xeno_tac_hud.add_to_hud(src) + hud_set_xeno_tunnel() + SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "xenotunnel", VERY_HIGH_FLOAT_LAYER)) + +/obj/structure/xeno/tunnel/Destroy() + var/turf/drop_loc = get_turf(src) + for(var/atom/movable/thing AS in contents) //Empty the tunnel of contents + thing.forceMove(drop_loc) + + if(!QDELETED(creator)) + to_chat(creator, span_xenoannounce("You sense your [name] at [tunnel_desc] has been destroyed!") ) //Alert creator + + xeno_message("Hive tunnel [name] at [tunnel_desc] has been destroyed!", "xenoannounce", 5, hivenumber) //Also alert hive because tunnels matter. + + LAZYREMOVE(GLOB.xeno_tunnels_by_hive[hivenumber], src) + if(creator) + creator.tunnels -= src + creator = null + + for(var/datum/atom_hud/xeno_tactical/xeno_tac_hud in GLOB.huds) //HUD clean up + xeno_tac_hud.remove_from_hud(src) + SSminimaps.remove_marker(src) + + return ..() + +///Signal handler for creator destruction to clear reference +/obj/structure/xeno/tunnel/proc/clear_creator() + SIGNAL_HANDLER + creator = null + +/obj/structure/xeno/tunnel/examine(mob/user) + . = ..() + if(!isxeno(user) && !isobserver(user)) + return + if(tunnel_desc) + . += span_info("The Hivelord scent reads: \'[tunnel_desc]\'") + +/obj/structure/xeno/tunnel/deconstruct(disassembled = TRUE) + visible_message(span_danger("[src] suddenly collapses!") ) + return ..() + +/obj/structure/xeno/tunnel/attackby(obj/item/I, mob/user, params) + if(!isxeno(user)) + return ..() + attack_alien(user) + +/obj/structure/xeno/tunnel/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(!istype(xeno_attacker) || xeno_attacker.stat || xeno_attacker.lying_angle || xeno_attacker.status_flags & INCORPOREAL) + return + + if(xeno_attacker.a_intent == INTENT_HARM && xeno_attacker == creator) + balloon_alert(xeno_attacker, "Filling in tunnel...") + if(do_after(xeno_attacker, HIVELORD_TUNNEL_DISMANTLE_TIME, IGNORE_HELD_ITEM, src, BUSY_ICON_BUILD)) + deconstruct(FALSE) + return + + if(xeno_attacker.anchored) + balloon_alert(xeno_attacker, "Cannot enter while immobile") + return FALSE + + if(length(GLOB.xeno_tunnels_by_hive[hivenumber]) < 2) + balloon_alert(xeno_attacker, "No exit tunnel") + return FALSE + + pick_a_tunnel(xeno_attacker) + +/obj/structure/xeno/tunnel/attack_larva(mob/living/carbon/xenomorph/larva/L) //So larvas can actually use tunnels + attack_alien(L) + +/obj/structure/xeno/tunnel/attack_ghost(mob/dead/observer/user) + . = ..() + + var/list/obj/destinations = GLOB.xeno_tunnels_by_hive[hivenumber] + var/obj/structure/xeno/tunnel/targettunnel + if(LAZYLEN(destinations) > 2) + var/list/tunnel_assoc = list() + for(var/obj/D in destinations) + tunnel_assoc["X:[D.x], Y:[D.y] - \[[get_area(D)]\]"] = D + destinations = list() + for(var/d in tunnel_assoc) + destinations += d + var/input = tgui_input_list(user ,"Choose a tunnel to teleport to:" ,"Ghost Tunnel teleport" ,destinations ,null, 0) + if(!input) + return + targettunnel = tunnel_assoc[input] + if(!input) + return + else + //There are only 2 tunnels. Pick the other one. + for(var/P in destinations) + if(P != src) + targettunnel = P + if(!targettunnel || QDELETED(targettunnel) || !targettunnel.loc) + return + user.forceMove(get_turf(targettunnel)) + +///Here we pick a tunnel to go to, then travel to that tunnel and peep out, confirming whether or not we want to emerge or go to another tunnel. +/obj/structure/xeno/tunnel/proc/pick_a_tunnel(mob/living/carbon/xenomorph/M) + to_chat(M, span_notice("Select a tunnel to go to.")) + + var/atom/movable/screen/minimap/map = SSminimaps.fetch_minimap_object(z, MINIMAP_FLAG_XENO) + M.client.screen += map + var/list/polled_coords = map.get_coords_from_click(M) + M.client.screen -= map + var/turf/clicked_turf = locate(polled_coords[1], polled_coords[2], z) + + ///We find the tunnel, looking within 10 tiles of where the user clicked, excluding src + var/obj/structure/xeno/tunnel/targettunnel = cheap_get_atom(clicked_turf, /obj/structure/xeno/tunnel, 10, GLOB.xeno_tunnels_by_hive[hivenumber] - src) + + if(QDELETED(src)) //Make sure we still exist in the event the player keeps the interface open + return + if(!M.Adjacent(src) && M.loc != src) //Make sure we're close enough to our tunnel; either adjacent to or in one + return + if(QDELETED(targettunnel)) //Make sure our target destination still exists in the event the player keeps the interface open + balloon_alert(M, "Tunnel no longer exists") + if(M.loc == src) //If we're in the tunnel and cancelling out, spit us out. + M.forceMove(loc) + return + if(targettunnel == src) + balloon_alert(M, "We're already here") + if(M.loc == src) //If we're in the tunnel and cancelling out, spit us out. + M.forceMove(loc) + return + if(targettunnel.z != z) + balloon_alert(M, "Tunnel not connected") + if(M.loc == src) //If we're in the tunnel and cancelling out, spit us out. + M.forceMove(loc) + return + var/distance = get_dist(get_turf(src), get_turf(targettunnel)) + var/tunnel_time = clamp(distance, HIVELORD_TUNNEL_MIN_TRAVEL_TIME, HIVELORD_TUNNEL_SMALL_MAX_TRAVEL_TIME) + + if(M.mob_size == MOB_SIZE_BIG) //Big xenos take longer + tunnel_time = clamp(distance * 1.5, HIVELORD_TUNNEL_MIN_TRAVEL_TIME, HIVELORD_TUNNEL_LARGE_MAX_TRAVEL_TIME) + M.visible_message(span_xenonotice("[M] begins heaving their huge bulk down into \the [src].") , \ + span_xenonotice("We begin heaving our monstrous bulk into \the [src] to [targettunnel.tunnel_desc].") ) + else + M.visible_message(span_xenonotice("\The [M] begins crawling down into \the [src].") , \ + span_xenonotice("We begin crawling down into \the [src] to [targettunnel.tunnel_desc].") ) + + if(isxenolarva(M)) //Larva can zip through near-instantly, they are wormlike after all + tunnel_time = 5 + + if(!do_after(M, tunnel_time, IGNORE_HELD_ITEM, src, BUSY_ICON_GENERIC)) + balloon_alert(M, "Crawling interrupted") + return + if(!targettunnel || !isturf(targettunnel.loc)) //Make sure the end tunnel is still there + balloon_alert(M, "Tunnel ended unexpectedly") + return + M.forceMove(targettunnel) + var/double_check = tgui_alert(M, "Emerge here?", "Tunnel: [targettunnel]", list("Yes","Pick another tunnel"), 0) + if(M.loc != targettunnel) //double check that we're still in the tunnel in the event it gets destroyed while we still have the interface open + return + if(double_check == "Pick another tunnel") + return targettunnel.pick_a_tunnel(M) + M.forceMove(targettunnel.loc) + M.visible_message(span_xenonotice("\The [M] pops out of \the [src].") , \ + span_xenonotice("We pop out through the other side!") ) + +///Makes sure the tunnel is visible to other xenos even through obscuration. +/obj/structure/xeno/tunnel/proc/hud_set_xeno_tunnel() + var/image/holder = hud_list[XENO_TACTICAL_HUD] + if(!holder) + return + holder.icon = 'icons/mob/hud.dmi' + holder.icon_state = "hudtraitor" + hud_list[XENO_TACTICAL_HUD] = holder diff --git a/code/modules/xenomorph/xeno_structures.dm b/code/modules/xenomorph/xeno_structures.dm deleted file mode 100644 index 80bb255436b34..0000000000000 --- a/code/modules/xenomorph/xeno_structures.dm +++ /dev/null @@ -1,1656 +0,0 @@ -/obj/structure/xeno - hit_sound = "alien_resin_break" - layer = RESIN_STRUCTURE_LAYER - resistance_flags = UNACIDABLE - ///Bitflags specific to xeno structures - var/xeno_structure_flags - ///Which hive(number) do we belong to? - var/hivenumber = XENO_HIVE_NORMAL - -/obj/structure/xeno/Initialize(mapload, _hivenumber) - . = ..() - if(!(xeno_structure_flags & IGNORE_WEED_REMOVAL)) - RegisterSignal(loc, COMSIG_TURF_WEED_REMOVED, PROC_REF(weed_removed)) - if(_hivenumber) ///because admins can spawn them - hivenumber = _hivenumber - LAZYADDASSOC(GLOB.xeno_structures_by_hive, hivenumber, src) - if(xeno_structure_flags & CRITICAL_STRUCTURE) - LAZYADDASSOC(GLOB.xeno_critical_structures_by_hive, hivenumber, src) - -/obj/structure/xeno/Destroy() - if(!locate(src) in GLOB.xeno_structures_by_hive[hivenumber]+GLOB.xeno_critical_structures_by_hive[hivenumber]) //The rest of the proc is pointless to look through if its not in the lists - stack_trace("[src] not found in the list of (potentially critical) xeno structures!") //We dont want to CRASH because that'd block deletion completely. Just trace it and continue. - return ..() - GLOB.xeno_structures_by_hive[hivenumber] -= src - if(xeno_structure_flags & CRITICAL_STRUCTURE) - GLOB.xeno_critical_structures_by_hive[hivenumber] -= src - return ..() - -/obj/structure/xeno/ex_act(severity) - switch(severity) - if(EXPLODE_DEVASTATE) - take_damage(210, BRUTE, BOMB) - if(EXPLODE_HEAVY) - take_damage(140, BRUTE, BOMB) - if(EXPLODE_LIGHT) - take_damage(70, BRUTE, BOMB) - if(EXPLODE_WEAK) - take_damage(35, BRUTE, BOMB) - -/obj/structure/xeno/attack_hand(mob/living/user) - balloon_alert(user, "You only scrape at it") - return TRUE - -/obj/structure/xeno/flamer_fire_act(burnlevel) - take_damage(burnlevel / 3, BURN, FIRE) - -/obj/structure/xeno/fire_act() - take_damage(10, BURN, FIRE) - -/* RUTGMC DELETION, moved to modular -/// Destroy the xeno structure when the weed it was on is destroyed -/obj/structure/xeno/proc/weed_removed() - SIGNAL_HANDLER - obj_destruction(damage_flag = MELEE) -*/ - -/obj/structure/xeno/attack_alien(mob/living/carbon/xenomorph/X, damage_amount, damage_type, damage_flag, effects, armor_penetration, isrightclick) - if(!(HAS_TRAIT(X, TRAIT_VALHALLA_XENO) && X.a_intent == INTENT_HARM && (tgui_alert(X, "Are you sure you want to tear down [src]?", "Tear down [src]?", list("Yes","No"))) == "Yes")) - return ..() - if(!do_after(X, 3 SECONDS, NONE, src)) - return - X.do_attack_animation(src, ATTACK_EFFECT_CLAW) - balloon_alert_to_viewers("\The [X] tears down \the [src]!", "We tear down \the [src].") - playsound(src, "alien_resin_break", 25) - take_damage(max_integrity) // Ensure its destroyed - - -//Carrier trap -/obj/structure/xeno/trap - desc = "It looks like a hiding hole." - name = "resin hole" - icon = 'icons/Xeno/Effects.dmi' - icon_state = "trap" - density = FALSE - opacity = FALSE - anchored = TRUE - max_integrity = 5 - layer = RESIN_STRUCTURE_LAYER - destroy_sound = "alien_resin_break" - ///defines for trap type to trigger on activation - var/trap_type - ///The hugger inside our trap - var/obj/item/clothing/mask/facehugger/hugger = null - ///smoke effect to create when the trap is triggered - var/datum/effect_system/smoke_spread/smoke - ///connection list for huggers - var/static/list/listen_connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(trigger_trap), - ) - -/obj/structure/xeno/trap/Initialize(mapload, _hivenumber) - . = ..() - RegisterSignal(src, COMSIG_MOVABLE_SHUTTLE_CRUSH, PROC_REF(shuttle_crush)) - AddElement(/datum/element/connect_loc, listen_connections) - -/obj/structure/xeno/trap/ex_act(severity) - switch(severity) - if(EXPLODE_DEVASTATE) - take_damage(400, BRUTE, BOMB) - if(EXPLODE_HEAVY) - take_damage(200, BRUTE, BOMB) - if(EXPLODE_LIGHT) - take_damage(100, BRUTE, BOMB) - if(EXPLODE_WEAK) - take_damage(50, BRUTE, BOMB) - -/obj/structure/xeno/trap/update_icon_state() - switch(trap_type) - if(TRAP_HUGGER) - icon_state = "traphugger" - if(TRAP_SMOKE_NEURO) - icon_state = "trapneurogas" - if(TRAP_SMOKE_ACID) - icon_state = "trapacidgas" - if(TRAP_ACID_WEAK) - icon_state = "trapacidweak" - if(TRAP_ACID_NORMAL) - icon_state = "trapacid" - if(TRAP_ACID_STRONG) - icon_state = "trapacidstrong" - else - icon_state = "trap" - -/obj/structure/xeno/trap/obj_destruction(damage_amount, damage_type, damage_flag) - if((damage_amount || damage_flag) && hugger && loc) - trigger_trap() - return ..() - -/obj/structure/xeno/trap/proc/set_trap_type(new_trap_type) - if(new_trap_type == trap_type) - return - trap_type = new_trap_type - update_icon() - -///Ensures that no huggies will be released when the trap is crushed by a shuttle; no more trapping shuttles with huggies -/obj/structure/xeno/trap/proc/shuttle_crush() - SIGNAL_HANDLER - qdel(src) - -/obj/structure/xeno/trap/examine(mob/user) - . = ..() - if(!isxeno(user)) - return - . += "A hole for a little one to hide in ambush for or for spewing acid." - switch(trap_type) - if(TRAP_HUGGER) - . += "There's a little one inside." - if(TRAP_SMOKE_NEURO) - . += "There's pressurized neurotoxin inside." - if(TRAP_SMOKE_ACID) - . += "There's pressurized acid gas inside." - if(TRAP_ACID_WEAK) - . += "There's pressurized weak acid inside." - if(TRAP_ACID_NORMAL) - . += "There's pressurized normal acid inside." - if(TRAP_ACID_STRONG) - . += "There's strong pressurized acid inside." - else - . += "It's empty." - -/obj/structure/xeno/trap/flamer_fire_act(burnlevel) - hugger?.kill_hugger() - trigger_trap() - set_trap_type(null) - -/obj/structure/xeno/trap/fire_act() - hugger?.kill_hugger() - trigger_trap() - set_trap_type(null) - -///Triggers the hugger trap -/obj/structure/xeno/trap/proc/trigger_trap(datum/source, atom/movable/AM, oldloc, oldlocs) - SIGNAL_HANDLER - if(!trap_type) - return - if(AM && (hivenumber == AM.get_xeno_hivenumber())) - return - playsound(src, "alien_resin_break", 25) - if(iscarbon(AM)) - var/mob/living/carbon/crosser = AM - crosser.visible_message(span_warning("[crosser] trips on [src]!"), span_danger("You trip on [src]!")) - crosser.ParalyzeNoChain(4 SECONDS) - switch(trap_type) - if(TRAP_HUGGER) - if(!AM) - drop_hugger() - return - if(!iscarbon(AM)) - return - var/mob/living/carbon/crosser = AM - if(!crosser.can_be_facehugged(hugger)) - return - drop_hugger() - if(TRAP_SMOKE_NEURO, TRAP_SMOKE_ACID) - smoke.start() -//RUTGMC EDIT START -/* //RUTGMC edit - sprite and stats changes - if(TRAP_ACID_WEAK) - for(var/turf/acided AS in RANGE_TURFS(1, src)) - new /obj/effect/xenomorph/spray(acided, 7 SECONDS, XENO_DEFAULT_ACID_PUDDLE_DAMAGE) - if(TRAP_ACID_NORMAL) - for(var/turf/acided AS in RANGE_TURFS(1, src)) - new /obj/effect/xenomorph/spray(acided, 10 SECONDS, XENO_DEFAULT_ACID_PUDDLE_DAMAGE) - if(TRAP_ACID_STRONG) - for(var/turf/acided AS in RANGE_TURFS(1, src)) - new /obj/effect/xenomorph/spray(acided, 12 SECONDS, XENO_DEFAULT_ACID_PUDDLE_DAMAGE) -*/ - if(TRAP_ACID_WEAK) - for(var/turf/acided AS in RANGE_TURFS(1, src)) - new /obj/effect/xenomorph/spray/weak(acided, 8 SECONDS, XENO_WEAK_ACID_PUDDLE_DAMAGE) - if(TRAP_ACID_NORMAL) - for(var/turf/acided AS in RANGE_TURFS(1, src)) - new /obj/effect/xenomorph/spray(acided, 10 SECONDS, XENO_DEFAULT_ACID_PUDDLE_DAMAGE) - if(TRAP_ACID_STRONG) - for(var/turf/acided AS in RANGE_TURFS(1, src)) - new /obj/effect/xenomorph/spray/strong(acided, 12 SECONDS, XENO_HIGH_ACID_PUDDLE_DAMAGE) -//RUTGMC EDIT END - xeno_message("A [trap_type] trap at [AREACOORD_NO_Z(src)] has been triggered!", "xenoannounce", 5, hivenumber, FALSE, get_turf(src), 'sound/voice/alien_talk2.ogg', FALSE, null, /atom/movable/screen/arrow/attack_order_arrow, COLOR_ORANGE, TRUE) - set_trap_type(null) - -/// Move the hugger out of the trap -/obj/structure/xeno/trap/proc/drop_hugger() - hugger.forceMove(loc) - hugger.go_active(TRUE, TRUE) //Removes stasis - visible_message(span_warning("[hugger] gets out of [src]!") ) - hugger = null - set_trap_type(null) - -/obj/structure/xeno/trap/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) - return FALSE - - if(X.a_intent == INTENT_HARM) - return ..() - if(trap_type == TRAP_HUGGER) - if(!(X.xeno_caste.can_flags & CASTE_CAN_HOLD_FACEHUGGERS)) - return - if(!hugger) - balloon_alert(X, "It is empty") - return - X.put_in_active_hand(hugger) - hugger.go_active(TRUE) - hugger = null - set_trap_type(null) - balloon_alert(X, "Removed facehugger") - return - var/datum/action/ability/activable/xeno/corrosive_acid/acid_action = locate(/datum/action/ability/activable/xeno/corrosive_acid) in X.actions - if(istype(X.ammo, /datum/ammo/xeno/boiler_gas)) - var/datum/ammo/xeno/boiler_gas/boiler_glob = X.ammo - if(!boiler_glob.enhance_trap(src, X)) - return - else if(acid_action) - if(!do_after(X, 2 SECONDS, NONE, src)) - return - switch(acid_action.acid_type) - if(/obj/effect/xenomorph/acid/weak) - set_trap_type(TRAP_ACID_WEAK) - if(/obj/effect/xenomorph/acid) - set_trap_type(TRAP_ACID_NORMAL) - if(/obj/effect/xenomorph/acid/strong) - set_trap_type(TRAP_ACID_STRONG) - else - return // nothing happened! - playsound(X.loc, 'sound/effects/refill.ogg', 25, 1) - balloon_alert(X, "Filled with [trap_type]") - -/obj/structure/xeno/trap/attackby(obj/item/I, mob/user, params) - . = ..() - - if(!istype(I, /obj/item/clothing/mask/facehugger) || !isxeno(user)) - return - var/obj/item/clothing/mask/facehugger/FH = I - if(trap_type) - balloon_alert(user, "Already occupied") - return - - if(FH.stat == DEAD) - balloon_alert(user, "Cannot insert facehugger") - return - - user.transferItemToLoc(FH, src) - FH.go_idle(TRUE) - hugger = FH - set_trap_type(TRAP_HUGGER) - balloon_alert(user, "Inserted facehugger") - -/* -TUNNEL -*/ -/obj/structure/xeno/tunnel - name = "tunnel" - desc = "A tunnel entrance. Looks like it was dug by some kind of clawed beast." - icon = 'icons/Xeno/Effects.dmi' - icon_state = "hole" - - density = FALSE - opacity = FALSE - anchored = TRUE - resistance_flags = UNACIDABLE|BANISH_IMMUNE - layer = RESIN_STRUCTURE_LAYER - - max_integrity = 140 - - hud_possible = list(XENO_TACTICAL_HUD) - xeno_structure_flags = IGNORE_WEED_REMOVAL - ///Description added by the hivelord. - var/tunnel_desc = "" - ///What hivelord created that tunnel. Can be null - var/mob/living/carbon/xenomorph/hivelord/creator = null - -/obj/structure/xeno/tunnel/Initialize(mapload, _hivenumber) - . = ..() - LAZYADDASSOC(GLOB.xeno_tunnels_by_hive, hivenumber, src) - prepare_huds() - for(var/datum/atom_hud/xeno_tactical/xeno_tac_hud in GLOB.huds) //Add to the xeno tachud - xeno_tac_hud.add_to_hud(src) - hud_set_xeno_tunnel() - SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('modular_RUtgmc/icons/UI_icons/map_blips.dmi', null, "xenotunnel", HIGH_FLOAT_LAYER)) // RU TGMC edit - map blips - -/obj/structure/xeno/tunnel/Destroy() - var/turf/drop_loc = get_turf(src) - for(var/atom/movable/thing AS in contents) //Empty the tunnel of contents - thing.forceMove(drop_loc) - - if(!QDELETED(creator)) - to_chat(creator, span_xenoannounce("You sense your [name] at [tunnel_desc] has been destroyed!") ) //Alert creator - - xeno_message("Hive tunnel [name] at [tunnel_desc] has been destroyed!", "xenoannounce", 5, hivenumber) //Also alert hive because tunnels matter. - - LAZYREMOVE(GLOB.xeno_tunnels_by_hive[hivenumber], src) - if(creator) - creator.tunnels -= src - creator = null - - for(var/datum/atom_hud/xeno_tactical/xeno_tac_hud in GLOB.huds) //HUD clean up - xeno_tac_hud.remove_from_hud(src) - SSminimaps.remove_marker(src) - - return ..() - -///Signal handler for creator destruction to clear reference -/obj/structure/xeno/tunnel/proc/clear_creator() - SIGNAL_HANDLER - creator = null - -/obj/structure/xeno/tunnel/examine(mob/user) - . = ..() - if(!isxeno(user) && !isobserver(user)) - return - if(tunnel_desc) - . += span_info("The Hivelord scent reads: \'[tunnel_desc]\'") - -/obj/structure/xeno/tunnel/deconstruct(disassembled = TRUE) - visible_message(span_danger("[src] suddenly collapses!") ) - return ..() - -/obj/structure/xeno/tunnel/attackby(obj/item/I, mob/user, params) - if(!isxeno(user)) - return ..() - attack_alien(user) - -/obj/structure/xeno/tunnel/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(!istype(X) || X.stat || X.lying_angle || X.status_flags & INCORPOREAL) - return - - if(X.a_intent == INTENT_HARM && X == creator) - balloon_alert(X, "Filling in tunnel...") - if(do_after(X, HIVELORD_TUNNEL_DISMANTLE_TIME, IGNORE_HELD_ITEM, src, BUSY_ICON_BUILD)) - deconstruct(FALSE) - return - - if(X.anchored) - balloon_alert(X, "Cannot enter while immobile") - return FALSE - - if(length(GLOB.xeno_tunnels_by_hive[hivenumber]) < 2) - balloon_alert(X, "No exit tunnel") - return FALSE - - pick_a_tunnel(X) - -/obj/structure/xeno/tunnel/attack_larva(mob/living/carbon/xenomorph/larva/L) //So larvas can actually use tunnels - attack_alien(L) - -/obj/structure/xeno/tunnel/attack_ghost(mob/dead/observer/user) - . = ..() - - var/list/obj/destinations = GLOB.xeno_tunnels_by_hive[hivenumber] - var/obj/structure/xeno/tunnel/targettunnel - if(LAZYLEN(destinations) > 2) - var/list/tunnel_assoc = list() - for(var/obj/D in destinations) - tunnel_assoc["X:[D.x], Y:[D.y] - \[[get_area(D)]\]"] = D - destinations = list() - for(var/d in tunnel_assoc) - destinations += d - var/input = tgui_input_list(user ,"Choose a tunnel to teleport to:" ,"Ghost Tunnel teleport" ,destinations ,null, 0) - if(!input) - return - targettunnel = tunnel_assoc[input] - if(!input) - return - else - //There are only 2 tunnels. Pick the other one. - for(var/P in destinations) - if(P != src) - targettunnel = P - if(!targettunnel || QDELETED(targettunnel) || !targettunnel.loc) - return - user.forceMove(get_turf(targettunnel)) - -///Here we pick a tunnel to go to, then travel to that tunnel and peep out, confirming whether or not we want to emerge or go to another tunnel. -/obj/structure/xeno/tunnel/proc/pick_a_tunnel(mob/living/carbon/xenomorph/M) - var/obj/structure/xeno/tunnel/targettunnel = tgui_input_list(M, "Choose a tunnel to crawl to", "Tunnel", GLOB.xeno_tunnels_by_hive[hivenumber]) - if(QDELETED(src)) //Make sure we still exist in the event the player keeps the interface open - return - if(!M.Adjacent(src) && M.loc != src) //Make sure we're close enough to our tunnel; either adjacent to or in one - return - if(QDELETED(targettunnel)) //Make sure our target destination still exists in the event the player keeps the interface open - balloon_alert(M, "Tunnel no longer exists") - if(M.loc == src) //If we're in the tunnel and cancelling out, spit us out. - M.forceMove(loc) - return - if(targettunnel == src) - balloon_alert(M, "We're already here") - if(M.loc == src) //If we're in the tunnel and cancelling out, spit us out. - M.forceMove(loc) - return - if(targettunnel.z != z) - balloon_alert(M, "Tunnel not connected") - if(M.loc == src) //If we're in the tunnel and cancelling out, spit us out. - M.forceMove(loc) - return - var/distance = get_dist(get_turf(src), get_turf(targettunnel)) - var/tunnel_time = clamp(distance, HIVELORD_TUNNEL_MIN_TRAVEL_TIME, HIVELORD_TUNNEL_SMALL_MAX_TRAVEL_TIME) - - if(M.mob_size == MOB_SIZE_BIG) //Big xenos take longer - tunnel_time = clamp(distance * 1.5, HIVELORD_TUNNEL_MIN_TRAVEL_TIME, HIVELORD_TUNNEL_LARGE_MAX_TRAVEL_TIME) - M.visible_message(span_xenonotice("[M] begins heaving their huge bulk down into \the [src].") , \ - span_xenonotice("We begin heaving our monstrous bulk into \the [src] to [targettunnel.tunnel_desc].") ) - else - M.visible_message(span_xenonotice("\The [M] begins crawling down into \the [src].") , \ - span_xenonotice("We begin crawling down into \the [src] to [targettunnel.tunnel_desc].") ) - - if(isxenolarva(M)) //Larva can zip through near-instantly, they are wormlike after all - tunnel_time = 5 - - if(!do_after(M, tunnel_time, IGNORE_HELD_ITEM, src, BUSY_ICON_GENERIC)) - balloon_alert(M, "Crawling interrupted") - return - if(!targettunnel || !isturf(targettunnel.loc)) //Make sure the end tunnel is still there - balloon_alert(M, "Tunnel ended unexpectedly") - return - M.forceMove(targettunnel) - var/double_check = tgui_alert(M, "Emerge here?", "Tunnel: [targettunnel]", list("Yes","Pick another tunnel"), 0) - if(M.loc != targettunnel) //double check that we're still in the tunnel in the event it gets destroyed while we still have the interface open - return - if(double_check == "Pick another tunnel") - return targettunnel.pick_a_tunnel(M) - M.forceMove(targettunnel.loc) - M.visible_message(span_xenonotice("\The [M] pops out of \the [src].") , \ - span_xenonotice("We pop out through the other side!") ) - -///Makes sure the tunnel is visible to other xenos even through obscuration. -/obj/structure/xeno/tunnel/proc/hud_set_xeno_tunnel() - var/image/holder = hud_list[XENO_TACTICAL_HUD] - if(!holder) - return - holder.icon = 'icons/mob/hud.dmi' - holder.icon_state = "hudtraitor" - hud_list[XENO_TACTICAL_HUD] = holder - -//Resin Water Well -/obj/structure/xeno/acidwell - name = "acid well" - desc = "An acid well. It stores acid to put out fires." - icon = 'icons/Xeno/acid_pool.dmi' - icon_state = "well" - density = FALSE - opacity = FALSE - anchored = TRUE - max_integrity = 5 - - hit_sound = "alien_resin_move" - destroy_sound = "alien_resin_move" - ///How many charges of acid this well contains - var/charges = 1 - ///If a xeno is charging this well - var/charging = FALSE - ///What xeno created this well - var/mob/living/carbon/xenomorph/creator = null - -/obj/structure/xeno/acidwell/Initialize(mapload, _creator) - . = ..() - creator = _creator - RegisterSignal(creator, COMSIG_QDELETING, PROC_REF(clear_creator)) - update_icon() - var/static/list/connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(on_cross), - ) - AddElement(/datum/element/connect_loc, connections) - -/obj/structure/xeno/acidwell/Destroy() - creator = null - return ..() - -///Signal handler for creator destruction to clear reference -/obj/structure/xeno/acidwell/proc/clear_creator() - SIGNAL_HANDLER - creator = null - -///Ensures that no acid gas will be released when the well is crushed by a shuttle -/obj/structure/xeno/acidwell/proc/shuttle_crush() - SIGNAL_HANDLER - qdel(src) - - -/obj/structure/xeno/acidwell/obj_destruction(damage_amount, damage_type, damage_flag) - if(!QDELETED(creator) && creator.stat == CONSCIOUS && creator.z == z) - var/area/A = get_area(src) - if(A) - to_chat(creator, span_xenoannounce("You sense your acid well at [A.name] has been destroyed!") ) - - if(damage_amount || damage_flag) //Spawn the gas only if we actually get destroyed by damage - var/datum/effect_system/smoke_spread/xeno/acid/A = new(get_turf(src)) - A.set_up(clamp(CEILING(charges*0.5, 1),0,3),src) //smoke scales with charges - A.start() - return ..() - -/obj/structure/xeno/acidwell/examine(mob/user) - . = ..() - if(!isxeno(user) && !isobserver(user)) - return - . += span_xenonotice("An acid well made by [creator]. It currently has [charges]/[XENO_ACID_WELL_MAX_CHARGES] charges.") - -/obj/structure/xeno/acidwell/deconstruct(disassembled = TRUE) - visible_message(span_danger("[src] suddenly collapses!") ) - return ..() - -/obj/structure/xeno/acidwell/update_icon() - . = ..() - set_light(charges , charges / 2, LIGHT_COLOR_GREEN) - -/obj/structure/xeno/acidwell/update_overlays() - . = ..() - if(!charges) - return - . += mutable_appearance(icon, "[charges]", alpha = src.alpha) - . += emissive_appearance(icon, "[charges]", alpha = src.alpha) - -/obj/structure/xeno/acidwell/flamer_fire_act(burnlevel) //Removes a charge of acid, but fire is extinguished - acid_well_fire_interaction() - -/obj/structure/xeno/acidwell/fire_act() //Removes a charge of acid, but fire is extinguished - acid_well_fire_interaction() - -///Handles fire based interactions with the acid well. Depletes 1 charge if there are any to extinguish all fires in the turf while producing acid smoke. -/obj/structure/xeno/acidwell/proc/acid_well_fire_interaction() - if(!charges) - take_damage(50, BURN, FIRE) - return - - charges-- - update_icon() - var/turf/T = get_turf(src) - var/datum/effect_system/smoke_spread/xeno/acid/acid_smoke = new(T) //spawn acid smoke when charges are actually used - acid_smoke.set_up(0, src) //acid smoke in the immediate vicinity - acid_smoke.start() - - for(var/obj/flamer_fire/F in T) //Extinguish all flames in turf - qdel(F) - -/obj/structure/xeno/acidwell/attackby(obj/item/I, mob/user, params) - if(!isxeno(user)) - return ..() - attack_alien(user) - -/obj/structure/xeno/acidwell/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.a_intent == INTENT_HARM && (CHECK_BITFIELD(X.xeno_caste.caste_flags, CASTE_IS_BUILDER) || X == creator) ) //If we're a builder caste or the creator and we're on harm intent, deconstruct it. - balloon_alert(X, "Removing...") - if(!do_after(X, XENO_ACID_WELL_FILL_TIME, IGNORE_HELD_ITEM, src, BUSY_ICON_HOSTILE)) - balloon_alert(X, "Stopped removing") - return - playsound(src, "alien_resin_break", 25) - deconstruct(TRUE, X) - return - - if(charges >= 5) - balloon_alert(X, "Already full") - return - if(charging) - balloon_alert(X, "Already being filled") - return - - if(X.plasma_stored < XENO_ACID_WELL_FILL_COST) //You need to have enough plasma to attempt to fill the well - balloon_alert(X, "Need [XENO_ACID_WELL_FILL_COST - X.plasma_stored] more plasma") - return - - charging = TRUE - - balloon_alert(X, "Refilling...") - if(!do_after(X, XENO_ACID_WELL_FILL_TIME, IGNORE_HELD_ITEM, src, BUSY_ICON_BUILD)) - charging = FALSE - balloon_alert(X, "Aborted refilling") - return - - if(X.plasma_stored < XENO_ACID_WELL_FILL_COST) - charging = FALSE - balloon_alert(X, "Need [XENO_ACID_WELL_FILL_COST - X.plasma_stored] more plasma") - return - - X.plasma_stored -= XENO_ACID_WELL_FILL_COST - charges++ - charging = FALSE - update_icon() - balloon_alert(X, "Now has [charges] / [XENO_ACID_WELL_MAX_CHARGES] charges") - to_chat(X,span_xenonotice("We add acid to [src]. It is currently has [charges] / [XENO_ACID_WELL_MAX_CHARGES] charges.") ) - -/obj/structure/xeno/acidwell/proc/on_cross(datum/source, atom/movable/A, oldloc, oldlocs) - SIGNAL_HANDLER - if(CHECK_MULTIPLE_BITFIELDS(A.allow_pass_flags, HOVERING)) - return - if(iscarbon(A)) - HasProximity(A) - -/obj/structure/xeno/acidwell/HasProximity(atom/movable/AM) - if(!charges) - return - if(!isliving(AM)) - return - var/mob/living/stepper = AM - if(stepper.stat == DEAD) - return - - var/charges_used = 0 - - for(var/obj/item/explosive/grenade/sticky/sticky_bomb in stepper.contents) - if(charges_used >= charges) - break - if(sticky_bomb.stuck_to == stepper) - sticky_bomb.clean_refs() - sticky_bomb.forceMove(loc) - charges_used ++ - - if(stepper.on_fire && (charges_used < charges)) - stepper.ExtinguishMob() - charges_used ++ - - if(!isxeno(stepper)) - stepper.next_move_slowdown += charges * 2 //Acid spray has slow down so this should too; scales with charges, Min 2 slowdown, Max 10 - stepper.apply_damage(charges * 10, BURN, BODY_ZONE_PRECISE_L_FOOT, ACID, penetration = 33) - stepper.apply_damage(charges * 10, BURN, BODY_ZONE_PRECISE_R_FOOT, ACID, penetration = 33) - stepper.visible_message(span_danger("[stepper] is immersed in [src]'s acid!") , \ - span_danger("We are immersed in [src]'s acid!") , null, 5) - playsound(stepper, "sound/bullets/acid_impact1.ogg", 10 * charges) - new /obj/effect/temp_visual/acid_bath(get_turf(stepper)) - charges_used = charges //humans stepping on it empties it out - - if(!charges_used) - return - - var/datum/effect_system/smoke_spread/xeno/acid/acid_smoke - acid_smoke = new(get_turf(stepper)) //spawn acid smoke when charges are actually used - acid_smoke.set_up(0, src) //acid smoke in the immediate vicinity - acid_smoke.start() - - charges -= charges_used - update_icon() - -/obj/structure/xeno/resin_jelly_pod - name = "Resin jelly pod" - desc = "A large resin pod. Inside is a thick, viscous fluid that looks like it doesnt burn easily." - icon = 'icons/Xeno/resinpod.dmi' - icon_state = "resinpod" - density = FALSE - opacity = FALSE - anchored = TRUE - max_integrity = 250 - layer = RESIN_STRUCTURE_LAYER - pixel_x = -16 - pixel_y = -16 - xeno_structure_flags = IGNORE_WEED_REMOVAL - - hit_sound = "alien_resin_move" - destroy_sound = "alien_resin_move" - ///How many actual jellies the pod has stored - var/chargesleft = 0 - ///Max amount of jellies the pod can hold - var/maxcharges = 10 - ///Every 5 times this number seconds we will create a jelly - var/recharge_rate = 10 - ///Countdown to the next time we generate a jelly - var/nextjelly = 0 - -/obj/structure/xeno/resin_jelly_pod/Initialize(mapload, _hivenumber) - . = ..() - add_overlay(image(icon, "resinpod_inside", layer + 0.01, dir)) - START_PROCESSING(SSslowprocess, src) - -/obj/structure/xeno/resin_jelly_pod/Destroy() - STOP_PROCESSING(SSslowprocess, src) - return ..() - -/obj/structure/xeno/resin_jelly_pod/examine(mob/user, distance, infix, suffix) - . = ..() - if(isxeno(user)) - . += "It has [chargesleft] jelly globules remaining[datum_flags & DF_ISPROCESSING ? ", and will create a new jelly in [(recharge_rate-nextjelly)*5] seconds": " and seems latent"]." - -/obj/structure/xeno/resin_jelly_pod/process() - if(nextjelly <= recharge_rate) - nextjelly++ - return - nextjelly = 0 - chargesleft++ - if(chargesleft >= maxcharges) - return PROCESS_KILL - -/obj/structure/xeno/resin_jelly_pod/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) - return FALSE - - if((X.a_intent == INTENT_HARM && isxenohivelord(X)) || X.hivenumber != hivenumber) - balloon_alert(X, "Destroying...") - if(do_after(X, HIVELORD_TUNNEL_DISMANTLE_TIME, IGNORE_HELD_ITEM, src, BUSY_ICON_BUILD)) - deconstruct(FALSE) - return - - if(!chargesleft) - balloon_alert(X, "No jelly remaining") - to_chat(X, span_xenonotice("We reach into \the [src], but only find dregs of resin. We should wait some more.") ) - return - balloon_alert(X, "Retrieved jelly") - new /obj/item/resin_jelly(loc) - chargesleft-- - if(!(datum_flags & DF_ISPROCESSING) && (chargesleft < maxcharges)) - START_PROCESSING(SSslowprocess, src) - -/obj/structure/xeno/silo - name = "Resin silo" - icon = 'icons/Xeno/resin_silo.dmi' - icon_state = "weed_silo" - desc = "A slimy, oozy resin bed filled with foul-looking egg-like ...things." - bound_width = 96 - bound_height = 96 - max_integrity = 1000 - resistance_flags = UNACIDABLE | DROPSHIP_IMMUNE | PLASMACUTTER_IMMUNE - xeno_structure_flags = IGNORE_WEED_REMOVAL|CRITICAL_STRUCTURE - ///How many larva points one silo produce in one minute - var/larva_spawn_rate = 0.5 - var/turf/center_turf - var/number_silo - ///For minimap icon change if silo takes damage or nearby hostile - var/warning - COOLDOWN_DECLARE(silo_damage_alert_cooldown) - COOLDOWN_DECLARE(silo_proxy_alert_cooldown) - -/obj/structure/xeno/silo/Initialize(mapload, _hivenumber) - . = ..() - center_turf = get_step(src, NORTHEAST) - if(!istype(center_turf)) - center_turf = loc - - if(SSticker.mode?.flags_round_type & MODE_SILO_RESPAWN) - for(var/turfs in RANGE_TURFS(XENO_SILO_DETECTION_RANGE, src)) - RegisterSignal(turfs, COMSIG_ATOM_ENTERED, PROC_REF(resin_silo_proxy_alert)) - - if(SSticker.mode?.flags_round_type & MODE_SILOS_SPAWN_MINIONS) - SSspawning.registerspawner(src, INFINITY, GLOB.xeno_ai_spawnable, 0, 0, null) - SSspawning.spawnerdata[src].required_increment = 2 * max(45 SECONDS, 3 MINUTES - SSmonitor.maximum_connected_players_count * SPAWN_RATE_PER_PLAYER)/SSspawning.wait - SSspawning.spawnerdata[src].max_allowed_mobs = max(1, MAX_SPAWNABLE_MOB_PER_PLAYER * SSmonitor.maximum_connected_players_count * 0.5) - update_minimap_icon() - - return INITIALIZE_HINT_LATELOAD - - -/obj/structure/xeno/silo/LateInitialize() - . = ..() - var/siloprefix = GLOB.hive_datums[hivenumber].name - number_silo = length(GLOB.xeno_resin_silos_by_hive[hivenumber]) + 1 - name = "[siloprefix == "Normal" ? "" : "[siloprefix] "][name] [number_silo]" - LAZYADDASSOC(GLOB.xeno_resin_silos_by_hive, hivenumber, src) - - if(!locate(/obj/alien/weeds) in center_turf) - new /obj/alien/weeds/node(center_turf) - if(GLOB.hive_datums[hivenumber]) - RegisterSignals(GLOB.hive_datums[hivenumber], list(COMSIG_HIVE_XENO_MOTHER_PRE_CHECK, COMSIG_HIVE_XENO_MOTHER_CHECK), PROC_REF(is_burrowed_larva_host)) - if(length(GLOB.xeno_resin_silos_by_hive[hivenumber]) == 1) - GLOB.hive_datums[hivenumber].give_larva_to_next_in_queue() - var/turf/tunnel_turf = get_step(center_turf, NORTH) - if(tunnel_turf.can_dig_xeno_tunnel()) - var/obj/structure/xeno/tunnel/newt = new(tunnel_turf, hivenumber) - newt.tunnel_desc = "[AREACOORD_NO_Z(newt)]" - newt.name += " [name]" - -/obj/structure/xeno/silo/obj_destruction(damage_amount, damage_type, damage_flag) - if(GLOB.hive_datums[hivenumber]) - UnregisterSignal(GLOB.hive_datums[hivenumber], list(COMSIG_HIVE_XENO_MOTHER_PRE_CHECK, COMSIG_HIVE_XENO_MOTHER_CHECK)) - GLOB.hive_datums[hivenumber].xeno_message("A resin silo has been destroyed at [AREACOORD_NO_Z(src)]!", "xenoannounce", 5, FALSE,src.loc, 'sound/voice/alien_help2.ogg',FALSE , null, /atom/movable/screen/arrow/silo_damaged_arrow) - notify_ghosts("\ A resin silo has been destroyed at [AREACOORD_NO_Z(src)]!", source = get_turf(src), action = NOTIFY_JUMP) - playsound(loc,'sound/effects/alien_egg_burst.ogg', 75) - return ..() - -/obj/structure/xeno/silo/Destroy() - GLOB.xeno_resin_silos_by_hive[hivenumber] -= src - - for(var/i in contents) - var/atom/movable/AM = i - AM.forceMove(get_step(center_turf, pick(CARDINAL_ALL_DIRS))) - center_turf = null - - STOP_PROCESSING(SSslowprocess, src) - return ..() - -/obj/structure/xeno/silo/examine(mob/user) - . = ..() - var/current_integrity = (obj_integrity / max_integrity) * 100 - switch(current_integrity) - if(0 to 20) - . += span_warning("It's barely holding, there's leaking oozes all around, and most eggs are broken. Yet it is not inert.") - if(20 to 40) - . += span_warning("It looks severely damaged, its movements slow.") - if(40 to 60) - . += span_warning("It's quite beat up, but it seems alive.") - if(60 to 80) - . += span_warning("It's slightly damaged, but still seems healthy.") - if(80 to 100) - . += span_info("It appears in good shape, pulsating healthily.") - - -/obj/structure/xeno/silo/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir, armour_penetration) - . = ..() - - //We took damage, so it's time to start regenerating if we're not already processing - if(!CHECK_BITFIELD(datum_flags, DF_ISPROCESSING)) - START_PROCESSING(SSslowprocess, src) - - resin_silo_damage_alert() - -/obj/structure/xeno/silo/proc/resin_silo_damage_alert() - if(!COOLDOWN_CHECK(src, silo_damage_alert_cooldown)) - return - warning = TRUE - update_minimap_icon() - GLOB.hive_datums[hivenumber].xeno_message("Our [name] at [AREACOORD_NO_Z(src)] is under attack! It has [obj_integrity]/[max_integrity] Health remaining.", "xenoannounce", 5, FALSE, src, 'sound/voice/alien_help1.ogg',FALSE, null, /atom/movable/screen/arrow/silo_damaged_arrow) - COOLDOWN_START(src, silo_damage_alert_cooldown, XENO_SILO_HEALTH_ALERT_COOLDOWN) //set the cooldown. - addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_HEALTH_ALERT_COOLDOWN) //clear warning - -///Alerts the Hive when hostiles get too close to their resin silo -/obj/structure/xeno/silo/proc/resin_silo_proxy_alert(datum/source, atom/movable/hostile, direction) - SIGNAL_HANDLER - - if(!COOLDOWN_CHECK(src, silo_proxy_alert_cooldown)) //Proxy alert triggered too recently; abort - return - - if(!isliving(hostile)) - return - - var/mob/living/living_triggerer = hostile - if(living_triggerer.stat == DEAD) //We don't care about the dead - return - - if(isxeno(hostile)) - var/mob/living/carbon/xenomorph/X = hostile - if(X.hive == GLOB.hive_datums[hivenumber]) //Trigger proxy alert only for hostile xenos - return - - warning = TRUE - update_minimap_icon() - GLOB.hive_datums[hivenumber].xeno_message("Our [name] has detected a nearby hostile [hostile] at [get_area(hostile)] (X: [hostile.x], Y: [hostile.y]).", "xenoannounce", 5, FALSE, hostile, 'sound/voice/alien_help1.ogg', FALSE, null, /atom/movable/screen/arrow/leader_tracker_arrow) - COOLDOWN_START(src, silo_proxy_alert_cooldown, XENO_SILO_DETECTION_COOLDOWN) //set the cooldown. - addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_DETECTION_COOLDOWN) //clear warning - -///Clears the warning for minimap if its warning for hostiles -/obj/structure/xeno/silo/proc/clear_warning() - warning = FALSE - update_minimap_icon() - -/obj/structure/xeno/silo/process() - //Regenerate if we're at less than max integrity - if(obj_integrity < max_integrity) - obj_integrity = min(obj_integrity + 25, max_integrity) //Regen 5 HP per sec - -/obj/structure/xeno/silo/proc/is_burrowed_larva_host(datum/source, list/mothers, list/silos) - SIGNAL_HANDLER - if(GLOB.hive_datums[hivenumber]) - silos += src - -///Change minimap icon if silo is under attack or not -/obj/structure/xeno/silo/proc/update_minimap_icon() - SSminimaps.remove_marker(src) - SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('modular_RUtgmc/icons/UI_icons/map_blips.dmi', null, "silo[warning ? "_warn" : "_passive"]", VERY_HIGH_FLOAT_LAYER)) // RU TGMC edit - map blips - -/obj/structure/xeno/xeno_turret - icon = 'icons/Xeno/acidturret.dmi' - icon_state = XENO_TURRET_ACID_ICONSTATE - name = "acid turret" - desc = "A menacing looking construct of resin, it seems to be alive. It fires acid against intruders." - bound_width = 32 - bound_height = 32 - obj_integrity = 600 - max_integrity = 1500 - layer = ABOVE_MOB_LAYER - density = TRUE - resistance_flags = UNACIDABLE | DROPSHIP_IMMUNE |PORTAL_IMMUNE - xeno_structure_flags = IGNORE_WEED_REMOVAL|HAS_OVERLAY - allow_pass_flags = PASS_AIR|PASS_THROW - ///What kind of spit it uses - var/datum/ammo/ammo = /datum/ammo/xeno/acid/heavy/turret - ///Range of the turret - var/range = 7 - ///Target of the turret - var/atom/hostile - ///Last target of the turret - var/atom/last_hostile - ///Potential list of targets found by scan - var/list/atom/potential_hostiles - ///Fire rate of the target in ticks - var/firerate = 5 - ///The last time the sentry did a scan - var/last_scan_time - ///light color that gets set in initialize - var/light_initial_color = LIGHT_COLOR_GREEN - ///For minimap icon change if sentry is firing - var/firing - -///Change minimap icon if its firing or not firing -/obj/structure/xeno/xeno_turret/proc/update_minimap_icon() - SSminimaps.remove_marker(src) - SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('modular_RUtgmc/icons/UI_icons/map_blips.dmi', null, "xeno_turret[firing ? "_firing" : "_passive"]")) // RU TGMC edit - map blips - -/obj/structure/xeno/xeno_turret/Initialize(mapload, _hivenumber) - . = ..() - ammo = GLOB.ammo_list[ammo] - potential_hostiles = list() - LAZYADDASSOC(GLOB.xeno_resin_turrets_by_hive, hivenumber, src) - START_PROCESSING(SSobj, src) - AddComponent(/datum/component/automatedfire/xeno_turret_autofire, firerate) - RegisterSignal(src, COMSIG_AUTOMATIC_SHOOTER_SHOOT, PROC_REF(shoot)) - RegisterSignal(SSdcs, COMSIG_GLOB_DROPSHIP_HIJACKED, PROC_REF(destroy_on_hijack)) - if(light_initial_color) - set_light(2, 2, light_initial_color) - update_minimap_icon() - update_icon() - -///Signal handler to delete the turret when the alamo is hijacked -/obj/structure/xeno/xeno_turret/proc/destroy_on_hijack() - SIGNAL_HANDLER - qdel(src) - -/* RUTGMC DELETION, remade in modular -/obj/structure/xeno/xeno_turret/obj_destruction(damage_amount, damage_type, damage_flag) - if(damage_amount) //Spawn the gas only if we actually get destroyed by damage - var/datum/effect_system/smoke_spread/xeno/smoke = new /datum/effect_system/smoke_spread/xeno/acid(src) - smoke.set_up(1, get_turf(src)) - smoke.start() - return ..() -*/ - -/obj/structure/xeno/xeno_turret/Destroy() - GLOB.xeno_resin_turrets_by_hive[hivenumber] -= src - set_hostile(null) - set_last_hostile(null) - STOP_PROCESSING(SSobj, src) - playsound(loc,'sound/effects/xeno_turret_death.ogg', 70) - return ..() - -/obj/structure/xeno/xeno_turret/ex_act(severity) - switch(severity) - if(EXPLODE_DEVASTATE) - take_damage(1500, BRUTE, BOMB) - if(EXPLODE_HEAVY) - take_damage(750, BRUTE, BOMB) - if(EXPLODE_LIGHT) - take_damage(300, BRUTE, BOMB) - -/obj/structure/xeno/xeno_turret/flamer_fire_act(burnlevel) - take_damage(burnlevel * 2, BURN, FIRE) - ENABLE_BITFIELD(resistance_flags, ON_FIRE) - -/obj/structure/xeno/xeno_turret/fire_act() - take_damage(60, BURN, FIRE) - ENABLE_BITFIELD(resistance_flags, ON_FIRE) - -/obj/structure/xeno/xeno_turret/update_overlays() - . = ..() - if(!(xeno_structure_flags & HAS_OVERLAY)) - return - if(obj_integrity <= max_integrity / 2) - . += image('icons/Xeno/acidturret.dmi', src, "+turret_damage") - if(CHECK_BITFIELD(resistance_flags, ON_FIRE)) - . += image('icons/Xeno/acidturret.dmi', src, "+turret_on_fire") - -/obj/structure/xeno/xeno_turret/process() - //Turrets regen some HP, every 2 sec - if(obj_integrity < max_integrity) - obj_integrity = min(obj_integrity + TURRET_HEALTH_REGEN, max_integrity) - update_icon() - DISABLE_BITFIELD(resistance_flags, ON_FIRE) - if(world.time > last_scan_time + TURRET_SCAN_FREQUENCY) - scan() - last_scan_time = world.time - if(!length(potential_hostiles)) - return - set_hostile(get_target()) - if (!hostile) - if(last_hostile) - set_last_hostile(null) - return - if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_XENO_TURRETS_ALERT)) - GLOB.hive_datums[hivenumber].xeno_message("Our [name] is attacking a nearby hostile [hostile] at [get_area(hostile)] (X: [hostile.x], Y: [hostile.y]).", "xenoannounce", 5, FALSE, hostile, 'sound/voice/alien_help1.ogg', FALSE, null, /atom/movable/screen/arrow/turret_attacking_arrow) - TIMER_COOLDOWN_START(src, COOLDOWN_XENO_TURRETS_ALERT, 20 SECONDS) - if(hostile != last_hostile) - set_last_hostile(hostile) - SEND_SIGNAL(src, COMSIG_AUTOMATIC_SHOOTER_START_SHOOTING_AT) - -/obj/structure/xeno/xeno_turret/attackby(obj/item/I, mob/living/user, params) - if(I.flags_item & NOBLUDGEON || !isliving(user)) - return attack_hand(user) - - user.changeNext_move(I.attack_speed) - user.do_attack_animation(src, used_item = I) - - var/damage = I.force - var/multiplier = 1 - if(I.damtype == BURN) //Burn damage deals extra vs resin structures (mostly welders). - multiplier += 1 - - if(istype(I, /obj/item/tool/pickaxe/plasmacutter) && !user.do_actions) - var/obj/item/tool/pickaxe/plasmacutter/P = I - if(P.start_cut(user, name, src, PLASMACUTTER_BASE_COST * PLASMACUTTER_VLOW_MOD)) - multiplier += PLASMACUTTER_RESIN_MULTIPLIER - P.cut_apart(user, name, src, PLASMACUTTER_BASE_COST * PLASMACUTTER_VLOW_MOD) - - damage *= max(0, multiplier) - take_damage(damage, BRUTE, MELEE) - playsound(src, "alien_resin_break", 25) - -///Signal handler for hard del of hostile -/obj/structure/xeno/xeno_turret/proc/unset_hostile() - SIGNAL_HANDLER - hostile = null - -///Signal handler for hard del of last_hostile -/obj/structure/xeno/xeno_turret/proc/unset_last_hostile() - SIGNAL_HANDLER - last_hostile = null - -///Setter for hostile with hard del in mind -/obj/structure/xeno/xeno_turret/proc/set_hostile(_hostile) - if(hostile != _hostile) - hostile = _hostile - RegisterSignal(hostile, COMSIG_QDELETING, PROC_REF(unset_hostile)) - -///Setter for last_hostile with hard del in mind -/obj/structure/xeno/xeno_turret/proc/set_last_hostile(_last_hostile) - if(last_hostile) - UnregisterSignal(last_hostile, COMSIG_QDELETING) - last_hostile = _last_hostile - -///Look for the closest human in range and in light of sight. If no human is in range, will look for xenos of other hives -/obj/structure/xeno/xeno_turret/proc/get_target() - var/distance = range + 0.5 //we add 0.5 so if a potential target is at range, it is accepted by the system - var/buffer_distance - var/list/turf/path = list() - for (var/atom/nearby_hostile AS in potential_hostiles) - if(isliving(nearby_hostile)) - var/mob/living/nearby_living_hostile = nearby_hostile - if(nearby_living_hostile.stat == DEAD) - continue - if(HAS_TRAIT(nearby_hostile, TRAIT_TURRET_HIDDEN)) - continue - buffer_distance = get_dist(nearby_hostile, src) - if (distance <= buffer_distance) //If we already found a target that's closer - continue - path = getline(src, nearby_hostile) - path -= get_turf(src) - if(!length(path)) //Can't shoot if it's on the same turf - continue - var/blocked = FALSE - for(var/turf/T AS in path) - if(IS_OPAQUE_TURF(T) || T.density && !(T.allow_pass_flags & PASS_PROJECTILE)) - blocked = TRUE - break //LoF Broken; stop checking; we can't proceed further. - - for(var/obj/machinery/MA in T) - if(MA.opacity || MA.density && !(MA.allow_pass_flags & PASS_PROJECTILE)) - blocked = TRUE - break //LoF Broken; stop checking; we can't proceed further. - - for(var/obj/structure/S in T) - if(S.opacity || S.density && !(S.allow_pass_flags & PASS_PROJECTILE)) - blocked = TRUE - break //LoF Broken; stop checking; we can't proceed further. - if(!blocked) - distance = buffer_distance - . = nearby_hostile - -///Return TRUE if a possible target is near -/obj/structure/xeno/xeno_turret/proc/scan() - potential_hostiles.Cut() - for (var/mob/living/carbon/human/nearby_human AS in cheap_get_humans_near(src, TURRET_SCAN_RANGE)) - if(nearby_human.stat == DEAD) - continue - if(nearby_human.get_xeno_hivenumber() == hivenumber) - continue - potential_hostiles += nearby_human - for (var/mob/living/carbon/xenomorph/nearby_xeno AS in cheap_get_xenos_near(src, range)) - if(GLOB.hive_datums[hivenumber] == nearby_xeno.hive) - continue - if(nearby_xeno.stat == DEAD) - continue - potential_hostiles += nearby_xeno - for(var/obj/vehicle/unmanned/vehicle AS in GLOB.unmanned_vehicles) - if(vehicle.z == z && get_dist(vehicle, src) <= range) - potential_hostiles += vehicle - for(var/obj/vehicle/sealed/mecha/mech AS in GLOB.mechas_list) - if(mech.z == z && get_dist(mech, src) <= range) - potential_hostiles += mech - -///Signal handler to make the turret shoot at its target -/obj/structure/xeno/xeno_turret/proc/shoot() - SIGNAL_HANDLER - if(!hostile) - SEND_SIGNAL(src, COMSIG_AUTOMATIC_SHOOTER_STOP_SHOOTING_AT) - firing = FALSE - update_minimap_icon() - return - face_atom(hostile) - var/obj/projectile/newshot = new(loc) - newshot.generate_bullet(ammo) - newshot.def_zone = pick(GLOB.base_miss_chance) - newshot.fire_at(hostile, src, null, ammo.max_range, ammo.shell_speed) - if(istype(ammo, /datum/ammo/xeno/hugger)) - var/datum/ammo/xeno/hugger/hugger_ammo = ammo - newshot.color = initial(hugger_ammo.hugger_type.color) - hugger_ammo.hivenumber = hivenumber - firing = TRUE - update_minimap_icon() - -/obj/structure/xeno/xeno_turret/sticky - name = "Sticky resin turret" - icon = 'icons/Xeno/acidturret.dmi' - icon_state = XENO_TURRET_STICKY_ICONSTATE - desc = "A menacing looking construct of resin, it seems to be alive. It fires resin against intruders." - light_initial_color = LIGHT_COLOR_PURPLE - ammo = /datum/ammo/xeno/sticky/turret - firerate = 5 - -/obj/structure/xeno/xeno_turret/hugger_turret - name = "hugger turret" - icon_state = "hugger_turret" - desc = "A menacing looking construct of resin, it seems to be alive. It fires huggers against intruders." - obj_integrity = 400 - max_integrity = 400 - light_initial_color = LIGHT_COLOR_BROWN - ammo = /datum/ammo/xeno/hugger - firerate = 5 SECONDS - -/obj/structure/xeno/evotower - name = "evolution tower" - desc = "A sickly outcrop from the ground. It seems to ooze a strange chemical that shimmers and warps the ground around it." - icon = 'icons/Xeno/2x2building.dmi' - icon_state = "evotower" - bound_width = 64 - bound_height = 64 - obj_integrity = 600 - max_integrity = 600 - xeno_structure_flags = CRITICAL_STRUCTURE - ///boost amt to be added per tower per cycle - var/boost_amount = 0.2 - -/obj/structure/xeno/evotower/Initialize(mapload, _hivenumber) - . = ..() - GLOB.hive_datums[hivenumber].evotowers += src - set_light(2, 2, LIGHT_COLOR_GREEN) - -/obj/structure/xeno/evotower/Destroy() - GLOB.hive_datums[hivenumber].evotowers -= src - return ..() - -/obj/structure/xeno/evotower/ex_act(severity) - switch(severity) - if(EXPLODE_DEVASTATE) - take_damage(700, BRUTE, BOMB) - if(EXPLODE_HEAVY) - take_damage(500, BRUTE, BOMB) - if(EXPLODE_LIGHT) - take_damage(300, BRUTE, BOMB) - if(EXPLODE_WEAK) - take_damage(100, BRUTE, BOMB) - -/obj/structure/xeno/psychictower - name = "Psychic Relay" - desc = "A sickly outcrop from the ground. It seems to allow for more advanced growth of the Xenomorphs." - icon = 'icons/Xeno/2x2building.dmi' - icon_state = "maturitytower" - bound_width = 64 - bound_height = 64 - obj_integrity = 400 - max_integrity = 400 - xeno_structure_flags = CRITICAL_STRUCTURE - -/obj/structure/xeno/psychictower/Initialize(mapload, _hivenumber) - . = ..() - GLOB.hive_datums[hivenumber].psychictowers += src - set_light(2, 2, LIGHT_COLOR_GREEN) - -/obj/structure/xeno/psychictower/Destroy() - GLOB.hive_datums[hivenumber].psychictowers -= src - return ..() - -/obj/structure/xeno/psychictower/ex_act(severity) - switch(severity) - if(EXPLODE_DEVASTATE) - take_damage(700, BRUTE, BOMB) - if(EXPLODE_HEAVY) - take_damage(500, BRUTE, BOMB) - if(EXPLODE_LIGHT) - take_damage(300, BRUTE, BOMB) - if(EXPLODE_WEAK) - take_damage(100, BRUTE, BOMB) - -/obj/structure/xeno/pherotower - name = "Pheromone tower" - desc = "A resin formation that looks like a small pillar. A faint, weird smell can be perceived from it." - icon = 'icons/Xeno/1x1building.dmi' - icon_state = "recoverytower" - bound_width = 32 - bound_height = 32 - obj_integrity = 400 - max_integrity = 400 - xeno_structure_flags = CRITICAL_STRUCTURE - ///The type of pheromone currently being emitted. - var/datum/aura_bearer/current_aura - ///Strength of pheromones given by this tower. - var/aura_strength = 5 - ///Radius (in tiles) of the pheromones given by this tower. - var/aura_radius = 32 - -/obj/structure/xeno/pherotower/Initialize(mapload, _hivenumber) - . = ..() - SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('modular_RUtgmc/icons/UI_icons/map_blips.dmi', null, "phero", ABOVE_FLOAT_LAYER)) // RU TGMC edit - map blips - GLOB.hive_datums[hivenumber].pherotowers += src - -//Pheromone towers start off with recovery. - current_aura = SSaura.add_emitter(src, AURA_XENO_RECOVERY, aura_radius, aura_strength, -1, FACTION_XENO, hivenumber) - playsound(src, "alien_drool", 25) - update_icon() - -/obj/structure/xeno/pherotower/ex_act(severity) - switch(severity) - if(EXPLODE_DEVASTATE) - take_damage(700, BRUTE, BOMB) - if(EXPLODE_HEAVY) - take_damage(500, BRUTE, BOMB) - if(EXPLODE_LIGHT) - take_damage(300, BRUTE, BOMB) - if(EXPLODE_WEAK) - take_damage(100, BRUTE, BOMB) - -/obj/structure/xeno/pherotower/Destroy() - GLOB.hive_datums[hivenumber].pherotowers -= src - return ..() - -// Clicking on the tower brings up a radial menu that allows you to select the type of pheromone that this tower will emit. -/obj/structure/xeno/pherotower/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - var/phero_choice = show_radial_menu(X, src, GLOB.pheromone_images_list, radius = 35, require_near = TRUE) - - if(!phero_choice) - return - - QDEL_NULL(current_aura) - current_aura = SSaura.add_emitter(src, phero_choice, aura_radius, aura_strength, -1, FACTION_XENO, hivenumber) - balloon_alert(X, "[phero_choice]") - playsound(src, "alien_drool", 25) - update_icon() - -/obj/structure/xeno/pherotower/update_icon_state() - switch(current_aura.aura_types[1]) - if(AURA_XENO_RECOVERY) - icon_state = "recoverytower" - set_light(2, 2, LIGHT_COLOR_BLUE) - if(AURA_XENO_WARDING) - icon_state = "wardingtower" - set_light(2, 2, LIGHT_COLOR_GREEN) - if(AURA_XENO_FRENZY) - icon_state = "frenzytower" - set_light(2, 2, LIGHT_COLOR_RED) - -/obj/structure/xeno/spawner - name = "spawner" - desc = "A slimy, oozy resin bed filled with foul-looking egg-like ...things." - icon = 'icons/Xeno/3x3building.dmi' - icon_state = "spawner" - bound_width = 96 - bound_height = 96 - max_integrity = 500 - resistance_flags = UNACIDABLE | DROPSHIP_IMMUNE - xeno_structure_flags = IGNORE_WEED_REMOVAL | CRITICAL_STRUCTURE - ///For minimap icon change if silo takes damage or nearby hostile - var/warning - COOLDOWN_DECLARE(spawner_damage_alert_cooldown) - COOLDOWN_DECLARE(spawner_proxy_alert_cooldown) - var/linked_minions = list() - -/obj/structure/xeno/spawner/Initialize(mapload, _hivenumber) - . = ..() - LAZYADDASSOC(GLOB.xeno_spawners_by_hive, hivenumber, src) - SSspawning.registerspawner(src, INFINITY, GLOB.xeno_ai_spawnable, 0, 0, CALLBACK(src, PROC_REF(on_spawn))) - SSspawning.spawnerdata[src].required_increment = max(45 SECONDS, 3 MINUTES - SSmonitor.maximum_connected_players_count * SPAWN_RATE_PER_PLAYER)/SSspawning.wait - SSspawning.spawnerdata[src].max_allowed_mobs = max(2, MAX_SPAWNABLE_MOB_PER_PLAYER * SSmonitor.maximum_connected_players_count) - for(var/turfs in RANGE_TURFS(XENO_SILO_DETECTION_RANGE, src)) - RegisterSignal(turfs, COMSIG_ATOM_ENTERED, PROC_REF(spawner_proxy_alert)) - update_minimap_icon() - -/obj/structure/xeno/spawner/examine(mob/user) - . = ..() - var/current_integrity = (obj_integrity / max_integrity) * 100 - switch(current_integrity) - if(0 to 20) - . += span_warning("It's barely holding, there's leaking oozes all around, and most eggs are broken. Yet it is not inert.") - if(20 to 40) - . += span_warning("It looks severely damaged, its movements slow.") - if(40 to 60) - . += span_warning("It's quite beat up, but it seems alive.") - if(60 to 80) - . += span_warning("It's slightly damaged, but still seems healthy.") - if(80 to 100) - . += span_info("It appears in good shape, pulsating healthily.") - - -/obj/structure/xeno/spawner/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir, armour_penetration) - . = ..() - spawner_damage_alert() - -///Alert if spawner is receiving damage -/obj/structure/xeno/spawner/proc/spawner_damage_alert() - if(!COOLDOWN_CHECK(src, spawner_damage_alert_cooldown)) - warning = FALSE - return - warning = TRUE - update_minimap_icon() - GLOB.hive_datums[hivenumber].xeno_message("Our [name] at [AREACOORD_NO_Z(src)] is under attack! It has [obj_integrity]/[max_integrity] Health remaining.", "xenoannounce", 5, FALSE, src, 'sound/voice/alien_help1.ogg',FALSE, null, /atom/movable/screen/arrow/silo_damaged_arrow) - COOLDOWN_START(src, spawner_damage_alert_cooldown, XENO_SILO_HEALTH_ALERT_COOLDOWN) //set the cooldown. - addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_DETECTION_COOLDOWN) //clear warning - -///Alerts the Hive when hostiles get too close to their spawner -/obj/structure/xeno/spawner/proc/spawner_proxy_alert(datum/source, atom/movable/hostile, direction) - SIGNAL_HANDLER - - if(!COOLDOWN_CHECK(src, spawner_proxy_alert_cooldown)) //Proxy alert triggered too recently; abort - warning = FALSE - return - - if(!isliving(hostile)) - return - - var/mob/living/living_triggerer = hostile - if(living_triggerer.stat == DEAD) //We don't care about the dead - return - - if(isxeno(hostile)) - var/mob/living/carbon/xenomorph/X = hostile - if(X.hivenumber == hivenumber) //Trigger proxy alert only for hostile xenos - return - - warning = TRUE - update_minimap_icon() - GLOB.hive_datums[hivenumber].xeno_message("Our [name] has detected a nearby hostile [hostile] at [get_area(hostile)] (X: [hostile.x], Y: [hostile.y]).", "xenoannounce", 5, FALSE, hostile, 'sound/voice/alien_help1.ogg', FALSE, null, /atom/movable/screen/arrow/leader_tracker_arrow) - COOLDOWN_START(src, spawner_proxy_alert_cooldown, XENO_SILO_DETECTION_COOLDOWN) //set the cooldown. - addtimer(CALLBACK(src, PROC_REF(clear_warning)), XENO_SILO_DETECTION_COOLDOWN) //clear warning - -///Clears the warning for minimap if its warning for hostiles -/obj/structure/xeno/spawner/proc/clear_warning() - warning = FALSE - update_minimap_icon() - -/obj/structure/xeno/spawner/Destroy() - GLOB.xeno_spawners_by_hive[hivenumber] -= src - return ..() - -///Change minimap icon if spawner is under attack or not -/obj/structure/xeno/spawner/proc/update_minimap_icon() - SSminimaps.remove_marker(src) - SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('modular_RUtgmc/icons/UI_icons/map_blips.dmi', null, "spawner[warning ? "_warn" : "_passive"]", , ABOVE_FLOAT_LAYER)) // RU TGMC edit - map blips - -/obj/structure/xeno/spawner/proc/on_spawn(list/squad) - if(!isxeno(squad[length(squad)])) - CRASH("Xeno spawner somehow tried to spawn a non xeno (tried to spawn [squad[length(squad)]])") - var/mob/living/carbon/xenomorph/X = squad[length(squad)] - X.transfer_to_hive(hivenumber) - linked_minions = squad - if(hivenumber == XENO_HIVE_FALLEN) //snowflake so valhalla isnt filled with minions after you're done - RegisterSignal(src, COMSIG_QDELETING, PROC_REF(kill_linked_minions)) - -/obj/structure/xeno/spawner/proc/kill_linked_minions() - for(var/mob/living/carbon/xenomorph/linked in linked_minions) - linked.death(TRUE) - UnregisterSignal(src, COMSIG_QDELETING) - -///Those structures need time to grow and are supposed to be extremely weak healh-wise -/obj/structure/xeno/plant - name = "Xeno Plant" - max_integrity = 5 - icon = 'icons/Xeno/plants.dmi' - interaction_flags = INTERACT_CHECK_INCAPACITATED - ///The plant's icon once it's fully grown - var/mature_icon_state - ///Is the plant ready to be used ? - var/mature = FALSE - ///How long does it take for the plant to be useable - var/maturation_time = 2 MINUTES - -/obj/structure/xeno/plant/Initialize(mapload, _hivenumber) - . = ..() - addtimer(CALLBACK(src, PROC_REF(on_mature)), maturation_time) - -/obj/structure/xeno/plant/can_interact(mob/user) - . = ..() - if(!.) - return FALSE - if(!mature && isxeno(user)) - balloon_alert(user, "Not fully grown") - return FALSE - -/obj/structure/xeno/plant/update_icon_state() - . = ..() - icon_state = (mature) ? mature_icon_state : initial(icon_state) - -///Called whenever someone uses the plant, xeno or marine -/obj/structure/xeno/plant/proc/on_use(mob/user) - mature = FALSE - update_icon() - addtimer(CALLBACK(src, PROC_REF(on_mature)), maturation_time) - return TRUE - -///Called when the plant reaches maturity -/obj/structure/xeno/plant/proc/on_mature(mob/user) - playsound(src, "alien_resin_build", 25) - mature = TRUE - update_icon() - -/obj/structure/xeno/plant/attack_hand(mob/living/user) - if(!can_interact(user)) - return ..() - return on_use(user) - -/obj/structure/xeno/plant/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if((X.status_flags & INCORPOREAL)) - return FALSE - - if(X.a_intent == INTENT_HARM && isxenodrone(X)) - balloon_alert(X, "Uprooted the plant") - X.do_attack_animation(src) - deconstruct(FALSE) - return FALSE - if(can_interact(X)) - return on_use(X) - return TRUE - -/obj/structure/xeno/plant/heal_fruit - name = "life fruit" - desc = "It would almost be appetizing wasn't it for the green colour and the shifting fluids inside..." - icon_state = "heal_fruit_immature" - mature_icon_state = "heal_fruit" - ///Minimum amount of health recovered - var/healing_amount_min = 125 - ///Maximum amount of health recovered, depends on the xeno's max health - var/healing_amount_max_health_scaling = 0.5 - -/obj/structure/xeno/plant/heal_fruit/on_use(mob/user) - balloon_alert(user, "Consuming...") - if(!do_after(user, 2 SECONDS, IGNORE_HELD_ITEM, src)) - return FALSE - if(!isxeno(user)) - var/datum/effect_system/smoke_spread/xeno/acid/plant_explosion = new(get_turf(src)) - plant_explosion.set_up(3,src) - plant_explosion.start() - visible_message(span_danger("[src] bursts, releasing toxic gas!")) - qdel(src) - return TRUE - - var/mob/living/carbon/xenomorph/X = user - var/heal_amount = max(healing_amount_min, healing_amount_max_health_scaling * X.xeno_caste.max_health) - HEAL_XENO_DAMAGE(X, heal_amount, FALSE) - playsound(user, "alien_drool", 25) - balloon_alert(X, "Health restored") - to_chat(X, span_xenowarning("We feel a sudden soothing chill as [src] tends to our wounds.")) - - return ..() - -/obj/structure/xeno/plant/armor_fruit - name = "hard fruit" - desc = "The contents of this fruit are protected by a tough outer shell." - icon_state = "armor_fruit_immature" - mature_icon_state = "armor_fruit" - ///How much total sunder should we remove - var/sunder_removal = 30 - -/obj/structure/xeno/plant/armor_fruit/on_use(mob/user) - balloon_alert(user, "Consuming...") - if(!do_after(user, 2 SECONDS, IGNORE_HELD_ITEM, src)) - return FALSE - if(!isxeno(user)) - var/turf/far_away_lands = get_turf(user) - for(var/x in 1 to 20) - var/turf/next_turf = get_step(far_away_lands, REVERSE_DIR(user.dir)) - if(!next_turf) - break - far_away_lands = next_turf - - user.throw_at(far_away_lands, 20, spin = TRUE) - to_chat(user, span_warning("[src] bursts, releasing a strong gust of pressurised gas!")) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.adjust_stagger(3 SECONDS) - H.apply_damage(30, BRUTE, "chest", BOMB) - qdel(src) - return TRUE - - balloon_alert(user, "Armor restored") - to_chat(user, span_xenowarning("We shed our shattered scales as new ones grow to replace them!")) - var/mob/living/carbon/xenomorph/X = user - X.adjust_sunder(-sunder_removal) - playsound(user, "alien_drool", 25) - return ..() - -/obj/structure/xeno/plant/plasma_fruit - name = "power fruit" - desc = "A cyan fruit, beating like a creature's heart" - icon_state = "plasma_fruit_immature" - mature_icon_state = "plasma_fruit" - ///How much bonus plasma should we restore during the duration, 1 being 100% from base regen - var/bonus_regen = 1 - ///How long should the buff last - var/duration = 1 MINUTES - -/obj/structure/xeno/plant/plasma_fruit/can_interact(mob/user) - . = ..() - if(!.) - return FALSE - if(!isxeno(user)) - return - var/mob/living/carbon/xenomorph/X = user - if(X.has_status_effect(STATUS_EFFECT_PLASMA_SURGE)) - balloon_alert(X, "Already increased plasma regen") - return FALSE - -/obj/structure/xeno/plant/plasma_fruit/on_use(mob/user) - balloon_alert(user, "Consuming...") - if(!do_after(user, 2 SECONDS, IGNORE_HELD_ITEM, src)) - return FALSE - if(!isxeno(user)) - visible_message(span_warning("[src] releases a sticky substance before spontaneously bursting into flames!")) - flame_radius(3, get_turf(src), colour = "green") - qdel(src) - return TRUE - - var/mob/living/carbon/xenomorph/X = user - if(!(X.xeno_caste.can_flags & CASTE_CAN_BE_GIVEN_PLASMA)) - to_chat(X, span_xenowarning("But our body rejects the fruit, we do not share the same plasma type!")) - return FALSE - X.apply_status_effect(/datum/status_effect/plasma_surge, X.xeno_caste.plasma_max, bonus_regen, duration) - balloon_alert(X, "Plasma restored") - to_chat(X, span_xenowarning("[src] Restores our plasma reserves, our organism is on overdrive!")) - playsound(user, "alien_drool", 25) - return ..() - - -/obj/structure/xeno/plant/stealth_plant - name = "night shade" - desc = "A beautiful flower, what purpose it could serve to the alien hive is beyond you however..." - icon_state = "stealth_plant_immature" - mature_icon_state = "stealth_plant" - maturation_time = 4 MINUTES - ///The radius of the passive structure camouflage, requires line of sight - var/camouflage_range = 7 - ///The range of the active stealth ability, does not require line of sight - var/active_camouflage_pulse_range = 10 - ///How long should veil last - var/active_camouflage_duration = 20 SECONDS - ///How long until the plant can be activated again - var/cooldown = 2 MINUTES - ///Is the active ability veil on cooldown ? - var/on_cooldown = FALSE - ///The list of passively camouflaged structures - var/list/obj/structure/xeno/camouflaged_structures = list() - ////The list of actively camouflaged xenos by veil - var/list/mob/living/carbon/xenomorph/camouflaged_xenos = list() - -/obj/structure/xeno/plant/stealth_plant/on_mature(mob/user) - . = ..() - START_PROCESSING(SSslowprocess, src) - -/obj/structure/xeno/plant/stealth_plant/Destroy() - for(var/obj/structure/xeno/xeno_struct AS in camouflaged_structures) - xeno_struct.alpha = initial(xeno_struct.alpha) - unveil() - STOP_PROCESSING(SSslowprocess, src) - return ..() - -/obj/structure/xeno/plant/stealth_plant/process() - for(var/turf/tile AS in RANGE_TURFS(camouflage_range, loc)) - for(var/obj/structure/xeno/xeno_struct in tile) - if(istype(xeno_struct, /obj/structure/xeno/plant) || !line_of_sight(src, xeno_struct)) //We don't hide plants - continue - camouflaged_structures.Add(xeno_struct) - xeno_struct.alpha = STEALTH_PLANT_PASSIVE_CAMOUFLAGE_ALPHA - -/obj/structure/xeno/plant/stealth_plant/can_interact(mob/user) - . = ..() - if(!.) - return FALSE - if(ishuman(user)) - balloon_alert(user, "Nothing happens") - to_chat(user, span_notice("You caress [src]'s petals, nothing happens.")) - return FALSE - if(on_cooldown) - balloon_alert(user, "Not ready yet") - to_chat(user, span_xenowarning("[src] soft light shimmers, we should give it more time to recover!")) - return FALSE - -/obj/structure/xeno/plant/stealth_plant/on_use(mob/user) - balloon_alert(user, "Shaking...") - if(!do_after(user, 2 SECONDS, IGNORE_HELD_ITEM, src)) - return FALSE - visible_message(span_danger("[src] releases a burst of glowing pollen!")) - veil() - return TRUE - -///Hides all nearby xenos -/obj/structure/xeno/plant/stealth_plant/proc/veil() - for(var/turf/tile in RANGE_TURFS(camouflage_range, loc)) - for(var/mob/living/carbon/xenomorph/X in tile) - if(X.stat == DEAD || isxenohunter(X) || X.alpha != 255) //We don't mess with xenos capable of going stealth by themselves - continue - X.alpha = HUNTER_STEALTH_RUN_ALPHA - new /obj/effect/temp_visual/alien_fruit_eaten(get_turf(X)) - balloon_alert(X, "We now blend in") - to_chat(X, span_xenowarning("The pollen from [src] reacts with our scales, we are blending with our surroundings!")) - camouflaged_xenos.Add(X) - on_cooldown = TRUE - addtimer(CALLBACK(src, PROC_REF(unveil)), active_camouflage_duration) - addtimer(CALLBACK(src, PROC_REF(ready)), cooldown) - -///Called when veil() can be used once again -/obj/structure/xeno/plant/stealth_plant/proc/ready() - visible_message(span_danger("[src] petals shift in hue, it is ready to release more pollen.")) - on_cooldown = FALSE - -///Reveals all xenos hidden by veil() -/obj/structure/xeno/plant/stealth_plant/proc/unveil() - for(var/mob/living/carbon/xenomorph/X AS in camouflaged_xenos) - X.alpha = initial(X.alpha) - balloon_alert(X, "Effect wears off") - to_chat(X, span_xenowarning("The effect of [src] wears off!")) diff --git a/code/modules/xenomorph/xeno_turret.dm b/code/modules/xenomorph/xeno_turret.dm new file mode 100644 index 0000000000000..cfa12a4c6be7c --- /dev/null +++ b/code/modules/xenomorph/xeno_turret.dm @@ -0,0 +1,264 @@ + +/obj/structure/xeno/xeno_turret + icon = 'icons/Xeno/acid_turret.dmi' + icon_state = XENO_TURRET_ACID_ICONSTATE + name = "acid turret" + desc = "A menacing looking construct of resin, it seems to be alive. It fires acid against intruders." + bound_width = 32 + bound_height = 32 + obj_integrity = 600 + max_integrity = 1500 + layer = ABOVE_MOB_LAYER + density = TRUE + resistance_flags = UNACIDABLE | DROPSHIP_IMMUNE |PORTAL_IMMUNE + xeno_structure_flags = IGNORE_WEED_REMOVAL|HAS_OVERLAY + allow_pass_flags = PASS_AIR|PASS_THROW + ///What kind of spit it uses + var/datum/ammo/ammo = /datum/ammo/xeno/acid/heavy/turret + ///Range of the turret + var/range = 7 + ///Target of the turret + var/atom/hostile + ///Last target of the turret + var/atom/last_hostile + ///Potential list of targets found by scan + var/list/atom/potential_hostiles + ///Fire rate of the target in ticks + var/firerate = 5 + ///The last time the sentry did a scan + var/last_scan_time + ///light color that gets set in initialize + var/light_initial_color = LIGHT_COLOR_GREEN + ///For minimap icon change if sentry is firing + var/firing + +///Change minimap icon if its firing or not firing +/obj/structure/xeno/xeno_turret/proc/update_minimap_icon() + SSminimaps.remove_marker(src) + SSminimaps.add_marker(src, MINIMAP_FLAG_XENO, image('icons/UI_icons/map_blips.dmi', null, "xeno_turret[firing ? "_firing" : "_passive"]")) + +/obj/structure/xeno/xeno_turret/Initialize(mapload, _hivenumber) + . = ..() + ammo = GLOB.ammo_list[ammo] + potential_hostiles = list() + LAZYADDASSOC(GLOB.xeno_resin_turrets_by_hive, hivenumber, src) + START_PROCESSING(SSobj, src) + AddComponent(/datum/component/automatedfire/xeno_turret_autofire, firerate) + RegisterSignal(src, COMSIG_AUTOMATIC_SHOOTER_SHOOT, PROC_REF(shoot)) + RegisterSignal(SSdcs, COMSIG_GLOB_DROPSHIP_HIJACKED, PROC_REF(destroy_on_hijack)) + if(light_initial_color) + set_light(2, 2, light_initial_color) + update_minimap_icon() + update_icon() + +///Signal handler to delete the turret when the alamo is hijacked +/obj/structure/xeno/xeno_turret/proc/destroy_on_hijack() + SIGNAL_HANDLER + qdel(src) + +/obj/structure/xeno/xeno_turret/obj_destruction(damage_amount, damage_type, damage_flag, mob/living/blame_mob) + if(damage_amount) //Spawn the gas only if we actually get destroyed by damage + var/datum/effect_system/smoke_spread/xeno/smoke = new /datum/effect_system/smoke_spread/xeno/acid(src) + smoke.set_up(1, get_turf(src)) + smoke.start() + return ..() + +/obj/structure/xeno/xeno_turret/Destroy() + GLOB.xeno_resin_turrets_by_hive[hivenumber] -= src + set_hostile(null) + set_last_hostile(null) + STOP_PROCESSING(SSobj, src) + playsound(loc,'sound/effects/xeno_turret_death.ogg', 70) + return ..() + +/obj/structure/xeno/xeno_turret/ex_act(severity) + switch(severity) + if(EXPLODE_DEVASTATE) + take_damage(1500, BRUTE, BOMB) + if(EXPLODE_HEAVY) + take_damage(750, BRUTE, BOMB) + if(EXPLODE_LIGHT) + take_damage(300, BRUTE, BOMB) + +/obj/structure/xeno/xeno_turret/flamer_fire_act(burnlevel) + take_damage(burnlevel * 2, BURN, FIRE) + ENABLE_BITFIELD(resistance_flags, ON_FIRE) + +/obj/structure/xeno/xeno_turret/fire_act() + take_damage(60, BURN, FIRE) + ENABLE_BITFIELD(resistance_flags, ON_FIRE) + +/obj/structure/xeno/xeno_turret/update_overlays() + . = ..() + if(!(xeno_structure_flags & HAS_OVERLAY)) + return + if(obj_integrity <= max_integrity / 2) + . += image('icons/Xeno/acid_turret.dmi', src, "+turret_damage") + if(CHECK_BITFIELD(resistance_flags, ON_FIRE)) + . += image('icons/Xeno/acid_turret.dmi', src, "+turret_on_fire") + +/obj/structure/xeno/xeno_turret/process() + //Turrets regen some HP, every 2 sec + if(obj_integrity < max_integrity) + obj_integrity = min(obj_integrity + TURRET_HEALTH_REGEN, max_integrity) + update_icon() + DISABLE_BITFIELD(resistance_flags, ON_FIRE) + if(world.time > last_scan_time + TURRET_SCAN_FREQUENCY) + scan() + last_scan_time = world.time + if(!length(potential_hostiles)) + return + set_hostile(get_target()) + if (!hostile) + if(last_hostile) + set_last_hostile(null) + return + if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_XENO_TURRETS_ALERT)) + GLOB.hive_datums[hivenumber].xeno_message("Our [name] is attacking a nearby hostile [hostile] at [get_area(hostile)] (X: [hostile.x], Y: [hostile.y]).", "xenoannounce", 5, FALSE, hostile, 'sound/voice/alien_help1.ogg', FALSE, null, /atom/movable/screen/arrow/turret_attacking_arrow) + TIMER_COOLDOWN_START(src, COOLDOWN_XENO_TURRETS_ALERT, 20 SECONDS) + if(hostile != last_hostile) + set_last_hostile(hostile) + SEND_SIGNAL(src, COMSIG_AUTOMATIC_SHOOTER_START_SHOOTING_AT) + +/obj/structure/xeno/xeno_turret/attackby(obj/item/I, mob/living/user, params) + if(I.item_flags & NOBLUDGEON || !isliving(user)) + return attack_hand(user) + + user.changeNext_move(I.attack_speed) + user.do_attack_animation(src, used_item = I) + + var/damage = I.force + var/multiplier = 1 + if(I.damtype == BURN) //Burn damage deals extra vs resin structures (mostly welders). + multiplier += 1 + + if(isplasmacutter(I) && !user.do_actions) + var/obj/item/tool/pickaxe/plasmacutter/P = I + if(P.start_cut(user, name, src, PLASMACUTTER_BASE_COST * PLASMACUTTER_VLOW_MOD)) + multiplier += PLASMACUTTER_RESIN_MULTIPLIER + P.cut_apart(user, name, src, PLASMACUTTER_BASE_COST * PLASMACUTTER_VLOW_MOD) + + damage *= max(0, multiplier) + take_damage(damage, BRUTE, MELEE) + playsound(src, "alien_resin_break", 25) + +///Signal handler for hard del of hostile +/obj/structure/xeno/xeno_turret/proc/unset_hostile() + SIGNAL_HANDLER + hostile = null + +///Signal handler for hard del of last_hostile +/obj/structure/xeno/xeno_turret/proc/unset_last_hostile() + SIGNAL_HANDLER + last_hostile = null + +///Setter for hostile with hard del in mind +/obj/structure/xeno/xeno_turret/proc/set_hostile(_hostile) + if(hostile != _hostile) + hostile = _hostile + RegisterSignal(hostile, COMSIG_QDELETING, PROC_REF(unset_hostile)) + +///Setter for last_hostile with hard del in mind +/obj/structure/xeno/xeno_turret/proc/set_last_hostile(_last_hostile) + if(last_hostile) + UnregisterSignal(last_hostile, COMSIG_QDELETING) + last_hostile = _last_hostile + +///Look for the closest human in range and in light of sight. If no human is in range, will look for xenos of other hives +/obj/structure/xeno/xeno_turret/proc/get_target() + var/distance = range + 0.5 //we add 0.5 so if a potential target is at range, it is accepted by the system + var/buffer_distance + var/list/turf/path = list() + for (var/atom/nearby_hostile AS in potential_hostiles) + if(isliving(nearby_hostile)) + var/mob/living/nearby_living_hostile = nearby_hostile + if(nearby_living_hostile.stat == DEAD) + continue + if(HAS_TRAIT(nearby_hostile, TRAIT_TURRET_HIDDEN)) + continue + buffer_distance = get_dist(nearby_hostile, src) + if (distance <= buffer_distance) //If we already found a target that's closer + continue + path = getline(src, nearby_hostile) + path -= get_turf(src) + if(!length(path)) //Can't shoot if it's on the same turf + continue + var/blocked = FALSE + for(var/turf/T AS in path) + if(IS_OPAQUE_TURF(T) || T.density && !(T.allow_pass_flags & PASS_PROJECTILE)) + blocked = TRUE + break //LoF Broken; stop checking; we can't proceed further. + + for(var/obj/machinery/MA in T) + if(MA.opacity || MA.density && !(MA.allow_pass_flags & PASS_PROJECTILE)) + blocked = TRUE + break //LoF Broken; stop checking; we can't proceed further. + + for(var/obj/structure/S in T) + if(S.opacity || S.density && !(S.allow_pass_flags & PASS_PROJECTILE)) + blocked = TRUE + break //LoF Broken; stop checking; we can't proceed further. + if(!blocked) + distance = buffer_distance + . = nearby_hostile + +///Return TRUE if a possible target is near +/obj/structure/xeno/xeno_turret/proc/scan() + potential_hostiles.Cut() + for (var/mob/living/carbon/human/nearby_human AS in cheap_get_humans_near(src, TURRET_SCAN_RANGE)) + if(nearby_human.stat == DEAD) + continue + if(nearby_human.get_xeno_hivenumber() == hivenumber) + continue + potential_hostiles += nearby_human + for (var/mob/living/carbon/xenomorph/nearby_xeno AS in cheap_get_xenos_near(src, range)) + if(GLOB.hive_datums[hivenumber] == nearby_xeno.hive) + continue + if(nearby_xeno.stat == DEAD) + continue + potential_hostiles += nearby_xeno + for(var/obj/vehicle/unmanned/vehicle AS in GLOB.unmanned_vehicles) + if(vehicle.z == z && get_dist(vehicle, src) <= range) + potential_hostiles += vehicle + for(var/obj/vehicle/sealed/mecha/mech AS in GLOB.mechas_list) + if(mech.z == z && get_dist(mech, src) <= range) + potential_hostiles += mech + +///Signal handler to make the turret shoot at its target +/obj/structure/xeno/xeno_turret/proc/shoot() + SIGNAL_HANDLER + if(!hostile) + SEND_SIGNAL(src, COMSIG_AUTOMATIC_SHOOTER_STOP_SHOOTING_AT) + firing = FALSE + update_minimap_icon() + return + face_atom(hostile) + var/obj/projectile/newshot = new(loc) + newshot.generate_bullet(ammo) + newshot.def_zone = pick(GLOB.base_miss_chance) + newshot.fire_at(hostile, null, src, ammo.max_range, ammo.shell_speed) + if(istype(ammo, /datum/ammo/xeno/hugger)) + var/datum/ammo/xeno/hugger/hugger_ammo = ammo + newshot.color = initial(hugger_ammo.hugger_type.color) + hugger_ammo.hivenumber = hivenumber + firing = TRUE + update_minimap_icon() + +/obj/structure/xeno/xeno_turret/sticky + name = "Sticky resin turret" + icon = 'icons/Xeno/acid_turret.dmi' + icon_state = XENO_TURRET_STICKY_ICONSTATE + desc = "A menacing looking construct of resin, it seems to be alive. It fires resin against intruders." + light_initial_color = LIGHT_COLOR_PURPLE + ammo = /datum/ammo/xeno/sticky/turret + firerate = 5 + +/obj/structure/xeno/xeno_turret/hugger_turret + name = "hugger turret" + icon_state = "hugger_turret" + desc = "A menacing looking construct of resin, it seems to be alive. It fires huggers against intruders." + obj_integrity = 400 + max_integrity = 400 + light_initial_color = LIGHT_COLOR_BROWN + ammo = /datum/ammo/xeno/hugger + firerate = 5 SECONDS diff --git a/code/modules/xenomorph/xenoplant.dm b/code/modules/xenomorph/xenoplant.dm new file mode 100644 index 0000000000000..f331fb85d9298 --- /dev/null +++ b/code/modules/xenomorph/xenoplant.dm @@ -0,0 +1,257 @@ + +///Those structures need time to grow and are supposed to be extremely weak healh-wise +/obj/structure/xeno/plant + name = "Xeno Plant" + max_integrity = 5 + icon = 'icons/Xeno/plants.dmi' + interaction_flags = INTERACT_CHECK_INCAPACITATED + ///The plant's icon once it's fully grown + var/mature_icon_state + ///Is the plant ready to be used ? + var/mature = FALSE + ///How long does it take for the plant to be useable + var/maturation_time = 2 MINUTES + +/obj/structure/xeno/plant/Initialize(mapload, _hivenumber) + . = ..() + addtimer(CALLBACK(src, PROC_REF(on_mature)), maturation_time) + +/obj/structure/xeno/plant/can_interact(mob/user) + . = ..() + if(!.) + return FALSE + if(!mature && isxeno(user)) + balloon_alert(user, "Not fully grown") + return FALSE + +/obj/structure/xeno/plant/update_icon_state() + . = ..() + icon_state = (mature) ? mature_icon_state : initial(icon_state) + +///Called whenever someone uses the plant, xeno or marine +/obj/structure/xeno/plant/proc/on_use(mob/user) + mature = FALSE + update_icon() + addtimer(CALLBACK(src, PROC_REF(on_mature)), maturation_time) + return TRUE + +///Called when the plant reaches maturity +/obj/structure/xeno/plant/proc/on_mature(mob/user) + playsound(src, "alien_resin_build", 25) + mature = TRUE + update_icon() + +/obj/structure/xeno/plant/attack_hand(mob/living/user) + if(!can_interact(user)) + return ..() + return on_use(user) + +/obj/structure/xeno/plant/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if((xeno_attacker.status_flags & INCORPOREAL)) + return FALSE + + if(xeno_attacker.a_intent == INTENT_HARM && isxenodrone(xeno_attacker)) + balloon_alert(xeno_attacker, "Uprooted the plant") + xeno_attacker.do_attack_animation(src) + deconstruct(FALSE) + return FALSE + if(can_interact(xeno_attacker)) + return on_use(xeno_attacker) + return TRUE + +/obj/structure/xeno/plant/heal_fruit + name = "life fruit" + desc = "It would almost be appetizing wasn't it for the green colour and the shifting fluids inside..." + icon_state = "heal_fruit_immature" + mature_icon_state = "heal_fruit" + ///Minimum amount of health recovered + var/healing_amount_min = 125 + ///Maximum amount of health recovered, depends on the xeno's max health + var/healing_amount_max_health_scaling = 0.5 + +/obj/structure/xeno/plant/heal_fruit/on_use(mob/user) + balloon_alert(user, "Consuming...") + if(!do_after(user, 2 SECONDS, IGNORE_HELD_ITEM, src)) + return FALSE + if(!isxeno(user)) + var/datum/effect_system/smoke_spread/xeno/acid/plant_explosion = new(get_turf(src)) + plant_explosion.set_up(3,src) + plant_explosion.start() + visible_message(span_danger("[src] bursts, releasing toxic gas!")) + qdel(src) + return TRUE + + var/mob/living/carbon/xenomorph/X = user + var/heal_amount = max(healing_amount_min, healing_amount_max_health_scaling * X.xeno_caste.max_health) + HEAL_XENO_DAMAGE(X, heal_amount, FALSE) + playsound(user, "alien_drool", 25) + balloon_alert(X, "Health restored") + to_chat(X, span_xenowarning("We feel a sudden soothing chill as [src] tends to our wounds.")) + + return ..() + +/obj/structure/xeno/plant/armor_fruit + name = "hard fruit" + desc = "The contents of this fruit are protected by a tough outer shell." + icon_state = "armor_fruit_immature" + mature_icon_state = "armor_fruit" + ///How much total sunder should we remove + var/sunder_removal = 30 + +/obj/structure/xeno/plant/armor_fruit/on_use(mob/user) + balloon_alert(user, "Consuming...") + if(!do_after(user, 2 SECONDS, IGNORE_HELD_ITEM, src)) + return FALSE + if(!isxeno(user)) + var/turf/far_away_lands = get_turf(user) + for(var/x in 1 to 20) + var/turf/next_turf = get_step(far_away_lands, REVERSE_DIR(user.dir)) + if(!next_turf) + break + far_away_lands = next_turf + + user.throw_at(far_away_lands, 20, spin = TRUE) + to_chat(user, span_warning("[src] bursts, releasing a strong gust of pressurised gas!")) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.adjust_stagger(3 SECONDS) + H.apply_damage(30, BRUTE, "chest", BOMB) + qdel(src) + return TRUE + + balloon_alert(user, "Armor restored") + to_chat(user, span_xenowarning("We shed our shattered scales as new ones grow to replace them!")) + var/mob/living/carbon/xenomorph/X = user + X.adjust_sunder(-sunder_removal) + playsound(user, "alien_drool", 25) + return ..() + +/obj/structure/xeno/plant/plasma_fruit + name = "power fruit" + desc = "A cyan fruit, beating like a creature's heart" + icon_state = "plasma_fruit_immature" + mature_icon_state = "plasma_fruit" + ///How much bonus plasma should we restore during the duration, 1 being 100% from base regen + var/bonus_regen = 1 + ///How long should the buff last + var/duration = 1 MINUTES + +/obj/structure/xeno/plant/plasma_fruit/can_interact(mob/user) + . = ..() + if(!.) + return FALSE + if(!isxeno(user)) + return + var/mob/living/carbon/xenomorph/X = user + if(X.has_status_effect(STATUS_EFFECT_PLASMA_SURGE)) + balloon_alert(X, "Already increased plasma regen") + return FALSE + +/obj/structure/xeno/plant/plasma_fruit/on_use(mob/user) + balloon_alert(user, "Consuming...") + if(!do_after(user, 2 SECONDS, IGNORE_HELD_ITEM, src)) + return FALSE + if(!isxeno(user)) + visible_message(span_warning("[src] releases a sticky substance before spontaneously bursting into flames!")) + flame_radius(3, get_turf(src), colour = "green") + qdel(src) + return TRUE + + var/mob/living/carbon/xenomorph/X = user + if(!(X.xeno_caste.can_flags & CASTE_CAN_BE_GIVEN_PLASMA)) + to_chat(X, span_xenowarning("But our body rejects the fruit, we do not share the same plasma type!")) + return FALSE + X.apply_status_effect(/datum/status_effect/plasma_surge, X.xeno_caste.plasma_max, bonus_regen, duration) + balloon_alert(X, "Plasma restored") + to_chat(X, span_xenowarning("[src] Restores our plasma reserves, our organism is on overdrive!")) + playsound(user, "alien_drool", 25) + return ..() + + +/obj/structure/xeno/plant/stealth_plant + name = "night shade" + desc = "A beautiful flower, what purpose it could serve to the alien hive is beyond you however..." + icon_state = "stealth_plant_immature" + mature_icon_state = "stealth_plant" + maturation_time = 4 MINUTES + ///The radius of the passive structure camouflage, requires line of sight + var/camouflage_range = 7 + ///The range of the active stealth ability, does not require line of sight + var/active_camouflage_pulse_range = 10 + ///How long should veil last + var/active_camouflage_duration = 20 SECONDS + ///How long until the plant can be activated again + var/cooldown = 2 MINUTES + ///Is the active ability veil on cooldown ? + var/on_cooldown = FALSE + ///The list of passively camouflaged structures + var/list/obj/structure/xeno/camouflaged_structures = list() + ////The list of actively camouflaged xenos by veil + var/list/mob/living/carbon/xenomorph/camouflaged_xenos = list() + +/obj/structure/xeno/plant/stealth_plant/on_mature(mob/user) + . = ..() + START_PROCESSING(SSslowprocess, src) + +/obj/structure/xeno/plant/stealth_plant/Destroy() + for(var/obj/structure/xeno/xeno_struct AS in camouflaged_structures) + xeno_struct.alpha = initial(xeno_struct.alpha) + unveil() + STOP_PROCESSING(SSslowprocess, src) + return ..() + +/obj/structure/xeno/plant/stealth_plant/process() + for(var/turf/tile AS in RANGE_TURFS(camouflage_range, loc)) + for(var/obj/structure/xeno/xeno_struct in tile) + if(istype(xeno_struct, /obj/structure/xeno/plant) || !line_of_sight(src, xeno_struct)) //We don't hide plants + continue + camouflaged_structures.Add(xeno_struct) + xeno_struct.alpha = STEALTH_PLANT_PASSIVE_CAMOUFLAGE_ALPHA + +/obj/structure/xeno/plant/stealth_plant/can_interact(mob/user) + . = ..() + if(!.) + return FALSE + if(ishuman(user)) + balloon_alert(user, "Nothing happens") + to_chat(user, span_notice("You caress [src]'s petals, nothing happens.")) + return FALSE + if(on_cooldown) + balloon_alert(user, "Not ready yet") + to_chat(user, span_xenowarning("[src] soft light shimmers, we should give it more time to recover!")) + return FALSE + +/obj/structure/xeno/plant/stealth_plant/on_use(mob/user) + balloon_alert(user, "Shaking...") + if(!do_after(user, 2 SECONDS, IGNORE_HELD_ITEM, src)) + return FALSE + visible_message(span_danger("[src] releases a burst of glowing pollen!")) + veil() + return TRUE + +///Hides all nearby xenos +/obj/structure/xeno/plant/stealth_plant/proc/veil() + for(var/turf/tile in RANGE_TURFS(camouflage_range, loc)) + for(var/mob/living/carbon/xenomorph/X in tile) + if(X.stat == DEAD || isxenohunter(X) || X.alpha != 255) //We don't mess with xenos capable of going stealth by themselves + continue + X.alpha = HUNTER_STEALTH_RUN_ALPHA + new /obj/effect/temp_visual/alien_fruit_eaten(get_turf(X)) + balloon_alert(X, "We now blend in") + to_chat(X, span_xenowarning("The pollen from [src] reacts with our scales, we are blending with our surroundings!")) + camouflaged_xenos.Add(X) + on_cooldown = TRUE + addtimer(CALLBACK(src, PROC_REF(unveil)), active_camouflage_duration) + addtimer(CALLBACK(src, PROC_REF(ready)), cooldown) + +///Called when veil() can be used once again +/obj/structure/xeno/plant/stealth_plant/proc/ready() + visible_message(span_danger("[src] petals shift in hue, it is ready to release more pollen.")) + on_cooldown = FALSE + +///Reveals all xenos hidden by veil() +/obj/structure/xeno/plant/stealth_plant/proc/unveil() + for(var/mob/living/carbon/xenomorph/X AS in camouflaged_xenos) + X.alpha = initial(X.alpha) + balloon_alert(X, "Effect wears off") + to_chat(X, span_xenowarning("The effect of [src] wears off!")) diff --git a/code/modules/xenomorph/xenotowers.dm b/code/modules/xenomorph/xenotowers.dm new file mode 100644 index 0000000000000..6247b3d6dd08a --- /dev/null +++ b/code/modules/xenomorph/xenotowers.dm @@ -0,0 +1,66 @@ + +/obj/structure/xeno/evotower + name = "evolution tower" + desc = "A sickly outcrop from the ground. It seems to ooze a strange chemical that shimmers and warps the ground around it." + icon = 'icons/Xeno/2x2building.dmi' + icon_state = "evotower" + bound_width = 64 + bound_height = 64 + obj_integrity = 600 + max_integrity = 600 + xeno_structure_flags = CRITICAL_STRUCTURE|IGNORE_WEED_REMOVAL + ///boost amt to be added per tower per cycle + var/boost_amount = 0.2 + ///maturity boost amt to be added per tower per cycle + var/maturty_boost_amount = 0.8 + +/obj/structure/xeno/evotower/Initialize(mapload, _hivenumber) + . = ..() + GLOB.hive_datums[hivenumber].evotowers += src + set_light(2, 2, LIGHT_COLOR_GREEN) + +/obj/structure/xeno/evotower/Destroy() + GLOB.hive_datums[hivenumber].evotowers -= src + return ..() + +/obj/structure/xeno/evotower/ex_act(severity) + switch(severity) + if(EXPLODE_DEVASTATE) + take_damage(700, BRUTE, BOMB) + if(EXPLODE_HEAVY) + take_damage(500, BRUTE, BOMB) + if(EXPLODE_LIGHT) + take_damage(300, BRUTE, BOMB) + if(EXPLODE_WEAK) + take_damage(100, BRUTE, BOMB) + +/obj/structure/xeno/psychictower + name = "Psychic Relay" + desc = "A sickly outcrop from the ground. It seems to allow for more advanced growth of the Xenomorphs." + icon = 'icons/Xeno/2x2building.dmi' + icon_state = "maturitytower" + bound_width = 64 + bound_height = 64 + obj_integrity = 400 + max_integrity = 400 + xeno_structure_flags = CRITICAL_STRUCTURE|IGNORE_WEED_REMOVAL + +/obj/structure/xeno/psychictower/Initialize(mapload, _hivenumber) + . = ..() + GLOB.hive_datums[hivenumber].psychictowers += src + set_light(2, 2, LIGHT_COLOR_GREEN) + +/obj/structure/xeno/psychictower/Destroy() + GLOB.hive_datums[hivenumber].psychictowers -= src + return ..() + +/obj/structure/xeno/psychictower/ex_act(severity) + switch(severity) + if(EXPLODE_DEVASTATE) + take_damage(700, BRUTE, BOMB) + if(EXPLODE_HEAVY) + take_damage(500, BRUTE, BOMB) + if(EXPLODE_LIGHT) + take_damage(300, BRUTE, BOMB) + if(EXPLODE_WEAK) + take_damage(100, BRUTE, BOMB) diff --git a/config/config.txt b/config/config.txt index 8b30b7b1ab067..6566fdb2e8bdd 100644 --- a/config/config.txt +++ b/config/config.txt @@ -232,9 +232,9 @@ DEFAULT_VIEW_SQUARE 15x15 AI_ANTI_STUCK_LAG_TIME_DILATION_THRESHOLD 20 -## Assets can opt-in to caching their results into `tmp`. +## Assets can opt-in to caching their results into `cache/`. ## This is important, as preferences assets take upwards of 30 seconds (without sleeps) to collect. -## The cache is assumed to be cleared by TGS recompiling, which deletes `tmp`. +## The cache is assumed to be cleared by TGS recompiling, which deletes `cache/`. ## This should be disabled (through `CACHE_ASSETS 0`) on development, ## but enabled on production (the default). CACHE_ASSETS 0 diff --git a/config/maps.txt b/config/maps.txt index 25410b37e7134..947845aba9749 100644 --- a/config/maps.txt +++ b/config/maps.txt @@ -76,4 +76,9 @@ endmap map slumbridge minplayers 35 -endmap \ No newline at end of file +endmap + + +map daedalusprison + minplayers 50 +endmap diff --git a/dependencies.sh b/dependencies.sh index 24990cd52eb8a..88464050d2a5a 100644 --- a/dependencies.sh +++ b/dependencies.sh @@ -5,10 +5,10 @@ # byond version export BYOND_MAJOR=515 -export BYOND_MINOR=1620 +export BYOND_MINOR=1626 #rust_g git tag -export RUST_G_VERSION=3.0.0 +export RUST_G_VERSION=3.1.0 #node version export NODE_VERSION=14 diff --git a/html/admin/view_variables.css b/html/admin/view_variables.css new file mode 100644 index 0000000000000..b646e4ced161a --- /dev/null +++ b/html/admin/view_variables.css @@ -0,0 +1,37 @@ +body { + font-family: Verdana, sans-serif; + font-size: 9pt; +} +.value { + font-family: "Courier New", monospace; + font-size: 8pt; + display: inline-block; +} + +table.matrix { + border-collapse: collapse; border-spacing: 0; + font-size: 7pt; +} +.matrix td{ + text-align: center; + padding: 0 1ex 0ex 1ex; +} +table.matrixbrak { + border-collapse: collapse; border-spacing: 0; +} +table.matrixbrak td.lbrak { + width: 0.8ex; + font-size: 50%; + border-top: solid 0.25ex black; + border-bottom: solid 0.25ex black; + border-left: solid 0.5ex black; + border-right: none; +} +table.matrixbrak td.rbrak { + width: 0.8ex; + font-size: 50%; + border-top: solid 0.25ex black; + border-bottom: solid 0.25ex black; + border-right: solid 0.5ex black; + border-left: none; +} diff --git a/html/changelogs/AutoChangeLog-pr-15532.yml b/html/changelogs/AutoChangeLog-pr-15532.yml new file mode 100644 index 0000000000000..946cc68633239 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15532.yml @@ -0,0 +1,4 @@ +author: "TiviPlus" +delete-after: True +changes: + - bugfix: "Probably fixed AI roaming and that one startup runtime" \ No newline at end of file diff --git a/html/changelogs/archive/2023-11.yml b/html/changelogs/archive/2023-11.yml index db6045776a58b..005b63fc01e52 100644 --- a/html/changelogs/archive/2023-11.yml +++ b/html/changelogs/archive/2023-11.yml @@ -258,7 +258,7 @@ - qol: Flamethrower backtank can be refilled from welding kits - imageadd: Ports deathsquad sprites from TG psykzz: - - admin: add flags_area to bitfields for VV. + - admin: add area_flags to bitfields for VV. 2023-11-17: Lumipharon: - imageadd: drop pods are now emissive diff --git a/html/changelogs/archive/2023-12.yml b/html/changelogs/archive/2023-12.yml index e5ffbec7bf31c..762d659235d3f 100644 --- a/html/changelogs/archive/2023-12.yml +++ b/html/changelogs/archive/2023-12.yml @@ -79,3 +79,200 @@ - bugfix: 'mountbatten being inverted :cl:' +2023-12-07: + MiniMeatwad: + - balance: Queen egg laying added +2023-12-08: + Lumipharon: + - bugfix: fixed detpacks not working on structures, and being weaker than expected + on solid turfs + Wisemonster: + - balance: C4 (Plastique explosives) no longer requires a multitool to disarm. + coldironwarrior: + - balance: the SG153 spotting rifle's maximum bullet range has been increased to + match the range of the SG62 it's attached to + ivanmixo: + - code_imp: Deleted some rogue commas +2023-12-09: + DeltaFire15: + - balance: Antenna helmet modules have exchanged their ability to project a req + drop beacon for improving caves communications (once configured) +2023-12-10: + DeltaFire15: + - balance: Banished solid objects now push out any living beings on their return + tile (if possible) before returning. + Lumipharon: + - balance: Psycrush now only targets turfs + - balance: Psylance and Psyblast will now fail to cast if their target moves off + screen + Wisemonster: + - spellcheck: Changed the acronym for the hypervene hypo to Hy + ivanmixo: + - code_imp: Killed get_contents +2023-12-11: + Arturlang: + - bugfix: Widow's spiderlings will no longer just constantly stop attacking their + target, now the widow will have to move away from the spiderlings and only then + they will stop + Pariah919: + - rscadd: Added new deployable HMG to CLF Specialist. + Wisemonster: + - rscadd: Orders will now show what job sent them in the orders' header. + Xander3359: + - imagedel: deleted cyborg.dmi + - code_imp: Delete unused ui defines + coldironwarrior: + - bugfix: fixes mountbatten pink again (maybe for real) +2023-12-12: + Helg2: + - bugfix: Snatch now spends plasma only on success. + Lumipharon: + - rscadd: Sectoids have been reported displaying powerful new psionic abilities + in this sector + - balance: Sectoid base hp reduced to 80 +2023-12-14: + Lumipharon: + - balance: Drop pod drop time varies with orbit level + - balance: Drop pod landing location now scatters slightly, based on orbit level + - balance: Mass launch for drop pods has a slightly wider radius, based on orbit + level +2023-12-15: + Helg2: + - rscadd: Time Shift now rewinds fire stacks. + - bugfix: Wraith's Time Shift now properly rewinds sander. +2023-12-16: + Pariah919: + - balance: Skirmish Rifle has been buffed to 40 magazine capacity instead of 30. +2023-12-17: + DeltaFire15: + - bugfix: The antenna module now actually does what it says it does. + ivanmixo: + - qol: Rebound unique action to C by default (instead of space) + - rscdel: Pizza doesn't net cas points anymore +2023-12-18: + ivanmixo: + - code_imp: Fix more 515 regex fuckup + - bugfix: Miners, gens and other stuff should actually show up on minimap now +2023-12-19: + Helg2: + - rscadd: You can now ping the baneling pod as AI. + Lumipharon: + - balance: Made the timings for the base rescue mission easier for SOM + - balance: 'Campaign: All players are ghosted at the end of a mission' + ivanmixo: + - bugfix: Fixed export denied personal stat + - bugfix: Fixed a supply beacon runtime +2023-12-20: + Lumipharon: + - bugfix: Fixes an uncommon BSOD on the campaign status screen + - qol: 'Campaign: Players still on their home z-level will be teleported to spawn + instead of ghosted at mission end' +2023-12-21: + Lumipharon: + - bugfix: Corrected the type of gun skill associated with some energy weapons + - balance: Small changes to combat robot loadouts in campaign + - balance: Made fire support and ASAT capture missions in campaign easier for the + defending team + Wisemonster: + - bugfix: Harvester weapons will no longer allow chems to be inserted into them + while they are full. + ivanmixo: + - balance: Added a delay to throwing +2023-12-22: + yyzsong: + - balance: Emplaced guns (such as the mg27) may now be jumped over. +2023-12-23: + Helg2: + - bugfix: deleted some garbage on Big Red. + ivanmixo: + - bugfix: You cannot melt sticky resin anymore +2023-12-25: + Pariah919: + - rscadd: Added new SG-62 Ammo Boxes to refill mags with. 200 rounds per box. + TiviPlus: + - rscadd: Added some voicelines to CAS + yyzsong: + - code_imp: shrike code comment now says 3x3 instead of 2x3 +2023-12-26: + Barnet2: + - bugfix: Fixes the Magnum being available in Crash outside of the SL vendor. + - rscadd: Added a new map, Daedalus Prison. Requires 35 people to play. + Pariah919: + - rscdel: A few cape styles have been removed. (Overlord+Variants, Jacket, Star) + - rscdel: Style line jaeger has been removed. (Kabuto, Overlord, Hotaru) + Wisemonster: + - qol: The rear attach points will now layer under items, rather than over them. + - spellcheck: Updated the description of Doctor's Delight in the Nanotrasen Medplus + to describe it's effects. + - balance: Moves the Doctor's Delight reagent bottle to the Valhalla tab of the + vendor + ivanmixo: + - rscadd: Adds an ozelomelyn hugger + - bugfix: Stun batons should not ominously float above everything in the game after + someone without access tries to pick it up anymore + vvvv-vvvv: + - bugfix: Fix emote spam when losing grasp of NODROP items + yyzsong: + - bugfix: SG-62 reqtorio should work properly now. +2023-12-27: + Lumipharon: + - bugfix: 'Campaign: Fixes the drop pod refresh asset not correctly replacing the + specialty pods' + Xander3359: + - rscadd: Beginner loadout vendor + - rscadd: 8 Beginner loadouts + - rscadd: 3 Engineer Loudouts + - rscadd: 2 Corpsman Loadouts + - rscadd: 2 Smartgunner Loadouts + ivanmixo: + - qol: Misc fixes to both crash ships + - balance: The HSG nest has been removed from crash ships + yyzsong: + - balance: Standardizes shipmap OB and solid fuel count +2023-12-29: + Barnet2: + - balance: FC is now worth one marine in terms of larva points. + ClosetedSkeletonGH: + - balance: mantis swipe no longer has a huge delay, mantis has slightly less plasma + - qol: mantis can now be given plasma by teammtes + - qol: Scorpions can now be given plasma + - rscadd: Scorpions can put weak acid on obj's + Helg2: + - bugfix: Imperial Commissar now has a proper coat. But you probably won't even + see it somewhere except eord. + Lewdcifer: + - rscdel: Reverted all changes related to Hyperscale 3. + RipGrayson: + - bugfix: Fixed mineral doors not showing correct coloring in map preview + ivanmixo: + - rscadd: Added the SG-85 powerpack to req + - bugfix: Fixes SG-85 ammo bins not being in req + - bugfix: You don't fall over from a broken leg if buckled anymore + - bugfix: You dont sell things for /list points anymore +2023-12-30: + Artur Lang: + - bugfix: 'Hardsuit secondary colours not being saved by loadout vendor + + :cl:' + Barnet2: + - rscadd: Firing the OB will play an alarm for those outside of hearing distance + of the cannon and on ship, shake the ship, and send out a flavor message. + DeltaFire15: + - bugfix: Health analyzer SSD information is no longer wrong. + Lumipharon: + - code_imp: cleaned up an unneeded crash message + - bugfix: fixed a couple of issues with mindmeld + - bugfix: fixed a incorrect define + - bugfix: fixed some freelancer loadouts in campaign + - bugfix: fixed campaign mission end ghostise not working correctly + RipGrayson: + - bugfix: Fixed being able to hold a nodrop inventory item by click-dragging it. + Wisemonster: + - bugfix: Synths/Robots no longer can be injected with hypos. + Xander3359: + - code_imp: Port VV Stuff from TG + - admin: osay + - admin: VV Panel should be fully functional with new options in the dropdown menu + - admin: Added tagging/marking datums from TG + blackdav123: + - balance: Swapped claymore and machete sounds. diff --git a/html/changelogs/archive/2024-01.yml b/html/changelogs/archive/2024-01.yml new file mode 100644 index 0000000000000..2d37ac78ee05e --- /dev/null +++ b/html/changelogs/archive/2024-01.yml @@ -0,0 +1,348 @@ +2024-01-01: + DeltaFire15: + - bugfix: Injectors can inject (valid) non-carbon things again. + Wisemonster: + - balance: Weeds and xenos can no longer hide under rear attach points + - spellcheck: Renamed rear attach points to interior attach points + ivanmixo: + - code_imp: Refactored wheelchairs + - balance: Some minor wheelchair balance, check the PR for more details +2024-01-02: + Helg2: + - qol: AI can now click maptable again to close it if it's open. + Lumipharon: + - bugfix: fixed unrelenting force causing shuffle issues in certain directions + - bugfix: fixed some storage exploits + - qol: The campaign status screen is now accessible via action button instead of + verb + - qol: The campaign status screen is now accessible to ghosts of the right faction +2024-01-03: + Barnet2: + - rscadd: Marine Food Vendors are now present in all requisition areas. + - qol: All ships now have cigarette vendors guaranteed to spawn in + Helg2: + - bugfix: '[Magmoor] Canterbury now won''t crash directly into the xeno''s silo.' + - rscadd: '[Arachne] Added more shutters here and there.' + - bugfix: Cleaned some parts of Sulaco. Like levitating button to droppods and transparent + telecomms shutters. + ivanmixo: + - bugfix: VV topic fix +2024-01-05: + AusarAtkin: + - qol: Add larva to valhalla vendor + Lumipharon: + - admin: Only headmins and above can delete clients + - code_imp: Some backend improvements to campaign overview UI + Wisemonster: + - qol: The chameleon badge, cape, kama, and reflective belt can be attached to uniforms + that are being worn. + Xander3359: + - admin: move osay to admin category and view tags to debug category + - code_imp: Lowercasify "Vars" +2024-01-06: + Lumipharon: + - code_imp: Fix icon2base64 for real + Pariah919: + - balance: Readds AMR lase hit slowdown. + ivanmixo: + - bugfix: The "Alt-click to rotate" bit should pop up properly when examining now + - code_imp: Fixed some weird implementations of the examine signal + - qol: AI eyes can hear stuff the camera eye hears + - qol: AI eyes can see runechat from mobs (and objects) talking around them +2024-01-08: + Helg2: + - qol: Overheal is now located after the main health in status tab. + Pariah919: + - rscadd: Two new type of missiles, the Swansong and Monarch. + - rscadd: CAS bombs and bomblets. 200, 400, and 1000lb bombs. 50lb and 75lb bombs. + - balance: CAS Missiles have been entirely rebalanced into classes. + - balance: The classes are ATGM (3s/AGM), Heavy(6s/PGHM), Normal (4s/PGLM). + - balance: You can no longer attach lasguns nor tesla to lasgun pouches for magazine + use. + - balance: Marines can no longer access handheld tanglefoot grenades, all other + forms of tangle (AGLS, Mortar, etc) are untouched. + ivanmixo: + - refactor: Cleaned up hud icons and overlays + yyzsong: + - balance: Ravager, Gorger, and puppeteer will no longer be affected by pepperball +2024-01-09: + Helg2: + - bugfix: '[Icy Caves] Added missing pipe for the second landing zone.' + Lumipharon: + - balance: CQC skill now does +5 max damage instead of +1 + SplinterGP: + - bugfix: glass can't turn into other glass types by merging it into a reinforced/phoron + glass stack + ivanmixo: + - bugfix: Various fixes to the strip menu, check the PR + - rscdel: Removes the HE GL54 nades from req +2024-01-10: + DeltaFire15: + - bugfix: It should be less likely for you to go DNR in cases where you shouldn't + be DNR. + Dikozda: + - spellcheck: fix typo in jelly message + Pariah919: + - bugfix: Some CAS bombs were broken in the CAS update icon wise, this should fix + them. + XElectricX, ivanmixo: + - rscadd: Added a TGMC retired veteran ERT +2024-01-11: + Barnet2: + - spellcheck: Hatchling xeno rank is replaced with young, prime is now the top xeno + rank + ivanmixo: + - qol: Spatial agent glasses have all huds now + yyzsong: + - rscdel: Removes Big Red office variant 4 +2024-01-12: + Barnet2: + - balance: 'Daedalus Prison: Removed two miners, more preweed, medical cannot be + landed in by tad, and outskirt cave walls are actually pcable' + - spellcheck: Darkfrost hull walls are now named "tough rock" + Helg2: + - bugfix: fixed balloon alert for king's primo laser, which you probably won't even + see. + Lumipharon: + - bugfix: fixed abilities not updating their icon correctly on use in some cases + - bugfix: Fixed some instances where throw bounces would behave funnily + - bugfix: Harvester bicard no longer heals dead bodies or robots + - bugfix: fixed a couple of uncommon throw bugs + - balance: Adds weapon skill functionality, for a future campaign release + TiviPlus: + - rscadd: Psy points have been split into tactical and strategic psy points + ivanmixo: + - qol: Defiler egg injection has more feedback now + - bugfix: Opening the defiler egg mid progress bar makes the injection fail + yyzsong: + - rscadd: 'New Gorger primordial: Oppose. Staggers and slows nearby marines while + healing nearby xenomorphs, at a cost. Replaces current primordial ability, Rejuvenate' + - rscdel: Rejuvenate +2024-01-13: + Barnet2: + - rscdel: Research Outpost is no longer votable when Nuclear War is selected. + ivanmixo: + - code_imp: Ported update_appearance, alternative_appearance and ssvisoverlays + - refactor: Refactored almost every instance of update_icon, update_icon_state and + update_overlays +2024-01-14: + RipGrayson: + - bugfix: Fixed some improper stairs on the EORG maps. + Wisemonster: + - balance: The Minion Spawner now uses tactical points instead of strategic. + Xander3359: + - rscdel: Removes the NVG-only smartgunner option. + - qol: Adds a "Smartguns/IFF" to the valhalla vendor + ivanmixo: + - bugfix: Fixed an exploit related to hudglasses +2024-01-15: + Lumipharon: + - rscadd: Added a new perk system for Campaign mode + - rscadd: Added a new customisable loadout system for Campaign mode + - qol: Jetpacks and blinkdrives now use activable actions, so have bindable hotkeys + - code_imp: Reworked some action code + - bugfix: fixed an issue with AMR lase continuously trying to turn off + - qol: Ability type actions now display their cooldown remaining + ivanmixo: + - bugfix: Punching an APC as warrior should update the icon properly now +2024-01-16: + Barnet2: + - balance: Xenos can build further into LZ 2 Engineering roundstart on Big Red, + APCs for the outdoor areas on Big Red are now outside instead of inside. + Pariah919: + - rscadd: Plasma guns, cannon and rifle, alongside the backpack used to power them, + and the chargepacks used to power that. + - rscadd: Added a variable to powerpacks to only allow charging certain cell types, + currently only applied to plasma chargepacks however. + - balance: TE Powerpacks only charge TE lasgun cells. + ivanmixo: + - code_imp: Readded bullet holes and made the code less bad +2024-01-17: + Lumipharon: + - qol: Campaign loadouts have default options selected + - balance: adjusted a few campaign loadout and perk things + - qol: Maptables with draw functionality are accessible to all users, but the draw + features remain leadership locked + - bugfix: fixed some actions interacting with other actions incorrectly + - code_imp: cleaned up some more action code + - bugfix: Added some missing campaign landmarks to BR + Pariah919: + - balance: Runner can no longer slash in invasion. + TiviPlus: + - rscadd: Added acid pools, a sunder healing structure for xenos purchasable with + tactical psychic points + - rscdel: Removed split second delay on magharness + - bugfix: Fix flamer back tank disconnecting with magharness + - rscadd: Added resin gargoyles, a xeno structure that alerts xenos to nearby enemies + ivanmixo: + - qol: You can now click the tunnel you want to go to on the minimap instead of + picking from a list + - balance: The basic scout rifle ammo now deals 5 sunder down from 12, but has double + the armor penetration (30, up from 20) + - balance: The impact scout rifle ammo now deals 6.5 sunder (down from 12.5), but + has double the armor penetration (20, up from 10) + - rscdel: Removed longtad + - bugfix: Various runtime fixes, see the PR +2024-01-18: + Lumipharon: + - bugfix: fixed an issue with ghost actions when observing before gamestart + - bugfix: fixed missing light armour for SOM squaddies in campaign + Pariah919: + - bugfix: You can no longer get plasma guns on crash. + - bugfix: You can find plasma guns in valhalla. + Wisemonster: + - balance: Reduced the price of the minion spawner from 600 to 400 tac points + Xander3359: + - qol: MarineMed pill bottles can be restocked. + - qol: Defibbing a dead marine will turn on their camera + ivanmixo: + - bugfix: Fixes the AMR for real now + - admin: Added a prompt to the reload admins verb + novaepee: + - imageadd: porting health analyzer from Paradise + the TGMC community: + - spellcheck: 2024 tips update +2024-01-19: + Lumipharon: + - bugfix: fixed defaults in campaign loadouts + - qol: Campaign loadout UI defaults to the job tab for your current job + RipGrayson: + - rscadd: Added more map helpers. + - imageadd: Added icons for the new map helpers. + novaepee: + - bugfix: east facing mob sprite for sg-62 +2024-01-20: + Pariah919: + - balance: Removes vertical grip off SG-29. + SomrNetwork: + - rscadd: Crasher body armor in marine_armor.dmi + - rscadd: New swat mask for SpecOps + - rscadd: "SpecOps Medic\n/ \U0001F191" + ivanmixo: + - qol: Widened the hive status tgui window + - balance: Marines cannot skip past xenos diagonally if there's an obstacle between + them, check the PR for a more clear explanation + - balance: Radiopack and AI drone beacon don't work in deep caves anymore +2024-01-21: + DeltaFire15: + - bugfix: Xenomorph pounce abilities no longer bypass shields. + - bugfix: Runner Savage only triggers if the pounce didn't fail. + - bugfix: Thrown objects should now behave more reasonable after passing a portal, + for cases such as bouncing. + Xander3359: + - refactor: Click code is now somewhat cleaner and more standardized + - code_imp: Adds attack_self_alternate(), this gets called when an item in-hand + is right-clicked + - bugfix: You can now right click any hypospray in-hand to change the injection + size + coldironwarrior: + - rscadd: three new helmet cosmetics, selectable as trinkets in character setup + ivanmixo: + - bugfix: Fix acid pools having bad flags + - bugfix: Ghosts actually bob up and down now +2024-01-22: + ivanmixo: + - bugfix: Fixed magharness keeping the item in your suit slot after you take the + suit off + - code_imp: Split up the fullscreen overlay dmi file, this may help with lag when + they get loaded + - balance: Gave DBs a 0.7 damage multiplier, like the SH-39 +2024-01-23: + Lewdcifer: + - rscdel: Removed Russian Red from standard access in HvX. + Xander3359: + - bugfix: fixed a few click-related issues + ivanmixo: + - bugfix: Your ghost keeps bobbing even after you stop orbiting stuff now +2024-01-24: + SomrNetwork: + - rscadd: "suitlight to crasher body armor\n/ \U0001F191" + XElectricX: + - bugfix: Toggle Weather Sound verb has correct message. + - bugfix: Toggle Ambience verb stops ambience that is currently playing. + - bugfix: Hide statpanel scroll bar when not needed. +2024-01-25: + SomrNetwork: + - rscdel: "Flak armor\n/ \U0001F191" + ivanmixo: + - balance: Xenomorph resting now blocks you from unresting for 2 seconds, instead + of it being a 2 second progress bar to get up + usnpeepoo: + - bugfix: Puppeteers radial menu for blessings now have the correct icon in place +2024-01-26: + DeltaFire15: + - bugfix: Various HUD elements now display revivability more accurately. + - bugfix: Another case that would randomly DNR you has been fixed. + - bugfix: Defib messages & failures should be less likely to display in incorrect + situations. + - bugfix: Minimap icons should no longer display as DNR for now fixed cases. + Xander3359: + - bugfix: Spit slash RMB works again + ivanmixo: + - qol: Xenomorphs can now see their current regenerative power in their status panel + - balance: Nanites have been rebalanced to be a sidegrade to BKTT, check the PR + for more details +2024-01-27: + SomrNetwork: + - rscadd: "flak stats to crasher\n/ \U0001F191" + novaepee: + - balance: remove TL-172 Defensive Shield from crash and nuclear war +2024-01-28: + Barnet2: + - balance: All xenomorphs with acid now have strong acid during prep (Nuclear War) + - balance: Xenomorphs can now evolve to any caste above their tier and T4, with + exceptions made for the T4's and larva + - balance: Magmoor disks are now sorted into 3 preset sets. + Helg2: + - bugfix: '[Big Red] connected the pipes on few atmos variants.' + Pariah919: + - rscadd: Added new ML-14 MG to ICC, and backpack. + - rscadd: ICC Heavy armor 'Cuirassier'. + ivanmixo: + - balance: MBX is now two handed only + - refactor: Refactored beacons into a component +2024-01-29: + Aporhtonoma: + - balance: squad order skill require from 3 to 2 + Barnet2: + - bugfix: Fixes various bugs with evolution + Lewdcifer: + - rscdel: 'Reverted all click changes in #14896, #14880, and #14747.' + Lumipharon: + - balance: SOM armour no longer has superior bullet armour compared to marines. + Still retains a slight weakness to lasers + - bugfix: Lorica armour has equal slowdown to tyr 2 + - rscadd: Added some more loadout choices for marines in campaign + - bugfix: fixed miniguns and SADAR being unwieldable + - balance: 'Campaign: Medical skill perk now gives access to improved first aid + pouches for roles that don''t already have it' + - rscadd: New shield overclock perk for improved shield module performance and availability + - balance: Removed some RR from campaign + - bugfix: 'Campaign: Base SMG-25 loadout has its missing gear added' + - balance: Campaign has an autobalance check at the start of every mission to try + balance team numbers + - balance: Weapon X in campaign mode heals faster + - balance: Campaign VP target reduced to 7 from 12 until round ending missions are + added + Neocloudy: + - rscadd: chat styles from tgstation + - rscadd: brighter channel, ooc and deadchat colors on dark mode + - rscadd: announcement blocks/dividers with striped effects, used for priority/minor + announcements and sending command orders + SomrNetwork: + - rscadd: 'medskill to speccops + + /:cl' + coldironwarrior: + - rscadd: Any plushies (or gnomes) now help heal cloneloss a little faster while + you sleep; share the bed with them and make sure you bring a blanket! +2024-01-30: + Lumipharon: + - bugfix: fixed stagger blocking blink drive and jetpack + Pariah919: + - rscadd: Added new SMG-45, heavy submachinegun for marines. +2024-01-31: + Lumipharon: + - balance: Ravager, Hunter and Mantis now have some AP on their melee attacks + efzapa: + - imageadd: Energy Sword sprite changed. diff --git a/html/changelogs/archive/2024-02.yml b/html/changelogs/archive/2024-02.yml new file mode 100644 index 0000000000000..1cc4fb0c994cc --- /dev/null +++ b/html/changelogs/archive/2024-02.yml @@ -0,0 +1,491 @@ +2024-02-01: + Lumipharon: + - bugfix: fixed beacon layers + - bugfix: fixed supply beacon weight class + - bugfix: Visible suit lights now correctly update on the mob sprite when turning + on and off + - bugfix: You can actually turn off your motion sensor now + - balance: Volkite deflagrate chance reduced by 10% and stagger reduced from 1 sec + to 0.5 sec + - qol: Left pocket option is before the right pocket in the campaign loadout screen + - bugfix: fixed some campaign loadout bugs with overclocked shields and TGMC FC + options + - bugfix: fixed a BSOD in campaign + - imageadd: Updated a few loadout item icons in campaign + - balance: V-34 has its slowdown increased from 0.3 to 0.4 + - balance: Adjusted the points cost of some items in campaign + - balance: Reduced the power of radiation weaponry + - balance: 'Campaign: Attacking teams on defensive missions can no longer call in + CAS' + - rscadd: 'Campaign: Esword now benefits from the sword master perk' + - code_imp: Improves some code relating to loadout items in campaign + - bugfix: Sensor towers on BR will show up correctly during Mech War missions + - bugfix: fixed some visuals with hud icons + - rscadd: Added the GL-54 to normal marines in campaign + - bugfix: fixed some minor skill issues on some weapons + - qol: Only some gas masks such as the tactical or swat masks have TTS filters + - balance: PMC standard armour has improved energy armour in line with other pmc + suits + SomrNetwork: + - rscadd: one word "drone" to "support" + usnpeepoo: + - balance: Puppeteers organic bombs base timer reduced, now uses a windup +2024-02-02: + AzonStarfall: + - qol: Adjusted Arachne CAS bay. + - qol: Made the front of the Arachne symmetrical. + Pariah919: + - balance: MP-19 now has burst fire again instead of auto burst, has insanely high + akimbo penalties. + ivanmixo: + - bugfix: You can no longer go over the blood limit, or go below 0 blood + yyzsong: + - bugfix: readds tx54 razor nades to valhalla + - rscadd: adds tx54 acid grenades to valhalla +2024-02-03: + Barnet2: + - balance: 'Caste Swap: Every 15 minutes a Xenomorph can change to another caste + inside of their tier' + - code_imp: Regress uses evo UI + Dikozda: + - rscdel: Remove 3 pointless lights from orion outpost + Helg2: + - bugfix: '[Magmoor] Cryopods are now visible again.' + Lumipharon: + - balance: Minor tweaks to asat + - rscadd: Added X-fuel to campaign + - balance: Antitank mines are harder to spot when deployed + - balance: Constition perks now also give some pain resist + - balance: Stamina perks now also increase max stamina + - balance: Adjusted the cost of a few perks + XElectricX: + - qol: Runners can manually cancel evasion. + - balance: Runners no longer disarmed for the entire duration of evasion if they + cancel it. +2024-02-04: + Lumipharon: + - rscdel: Removed the jump emote +2024-02-05: + '?': + - rscdel: Deletes "specialclick" keybind + Barnet2: + - balance: Evolution now gives an extra 0.8 maturity instead of 0.2 + Lumipharon: + - bugfix: Fixed tac sensor turning off when you holster a different weapon + - bugfix: shift click will work for human abilities such as jetpack, if you have + toggled your pref from middle mouse button + - bugfix: fixed b18 glove sprites + - bugfix: fixed the recoil on some weapons such as the BR-8 + - balance: Psylance stagger reduced to 1 second + Pariah919: + - rscadd: Added new seasonal with flak cannon and plasma guns. + Xander3359: + - rscdel: Deletes "Examinate" Keybind +2024-02-06: + Lewdcifer: + - balance: Psydrain plasma cost reduced from 100 to 50. + Lumipharon: + - bugfix: fixed bodies not being cleaned up after a campaign mission + Xander3359: + - code_imp: add proc attack_self_alternate() + ivanmixo: + - bugfix: Vali necro overlay should show up again + - code_imp: The fullscreen overlays now all actually share the proper plane + - bugfix: Readded span_debuginfo + - bugfix: Beacons now go back to their inactive icon state when undeployed + - bugfix: Beacons now deactivate themselves when they change Z level to a Z level + that isn't groundside (instead of leaving the beacon datum on the tile they + were at just before they changed Z level) +2024-02-07: + Aporhtonoma: + - bugfix: squad rally skill requirement from 3 to 2 + Lumipharon: + - qol: 'Campaign: SSD''s will no longer be eligable for faction leader' + - qol: 'Campaign: SSD shipside players are cleaned up at the end of each mission' + - bugfix: fixed normal claymores being sneakier than intended + - balance: 'Campaign: Switching team for autobalance rewards you with addition credits' + - balance: 'Campaign: If teams are still not balanced, the weaker team is given + light mechs based on how outnumbered they are' + - bugfix: 'Campaign: fixed attrition sometimes being lost if several people were + setting it at the same time' + - bugfix: 'Campaign: Marines will no longer be able to steal their own ASAT objectives' + - bugfix: 'Campaign: Fixed some errors in the ASAT mission win conditions' + - balance: 'Campaign: credits are additionally awarded at the end of a mission based + on individual performance' + - balance: 'Campaign: Base credit reward for ending a mission reduced by 150' + - imageadd: Fixed some visuals with train props and large map tables + Xander3359: + - bugfix: SG-162 high impact and heavy impact now apply their CC for 1 second instead + of 1 decisecond + coldironwarrior: + - rscadd: removes xeno probing + - balance: point adjustments to xeno caste values for req exports +2024-02-08: + Lumipharon: + - balance: Tfoot OB's duration is reduced by 4 seconds per level of fuel inaccuracy + Naaanii: + - rscadd: Adds Baneling to admin player panel tab. + Xander3359: + - code_imp: extra_checks use PROC_REF() for their callbacks +2024-02-09: + Barnet2: + - rscadd: 'New role: Transport Officer' + - balance: Reduces PO slot to one + - bugfix: Tadpole cameras use the proper network + Lumipharon: + - bugfix: fixed SG loadouts often not spawning everything they should + - qol: Cancelling delta alert explicitly tells you that this controls both evac + and SD + - bugfix: fixed deployable shields being climbable when barbed after redeploying + - qol: Suit lights no longer mismatch their actual state and action state if spammed + - balance: 'Campaign: Made NT base rescue a bit easier for SOM' + Wisemonster: + - qol: The alert for resin gargoyles have been changed to use the growl sound effect + instead of the screech. + XElectricX: + - rscadd: 'Interactive emotes: you can high-five, fist bump, headbutt, or tail slap + other players' +2024-02-10: + AusarAtkin: + - qol: Supply Beacon now Auto Update if Tad are moving across Z-level. + Barnet2: + - bugfix: Fixes a certain exploit with caste swap and regress + - admin: Expert timelock increased to 25 hours + Lewdcifer: + - rscadd: 'Behemoth 2: Now with more caffeine! Check the relevant PR for the full + detailed changelog.' + - rscadd: Completely revamped Earth Riser's primo. Meteors rain from above! + - balance: Behemoth melee damage reduced from 26 to 23. This also affects all ability + damage. + - balance: Maximum health reduced from 750 to 650, maximum wrath adjusted accordingly. + - balance: Movement speed increased from -0.2 to -0.5, weed speed modifier increased + from -0.1 to -0.2. + - balance: Behemoth roll wind up increased from 1.8s to 2s. + - balance: Behemoth roll speed gain reduced from 0.4 to 0.35. + - balance: Landslide movement speed increased from 1.7 to 1.5. This is much faster + than it sounds! + - balance: Earth Riser plasma cost reduced from 30 to 20. + - balance: Earth Riser cooldown reduced from 15s to 10s. + - balance: Seismic Fracture is no longer ranged, but rather an AoE around the Behemoth. + - balance: Seismic Fracture attack radius increased from 2 to 3. + - bugfix: Fixed a bug where Primal Wrath would no longer replace plasma costs with + wrath. + - bugfix: Fixed a bug where Landslide couldn't be cancelled sometimes. Now it's + responsive and reliable. + - spellcheck: Behemoth cooldown messages no longer include the ability's plasma + cost. + - sounddel: Removed an unused Behemoth sound file. + - imageadd: Added an icon for the primordial version of Earth Riser + - refactor: Refactored Behemoth AoE attacks. + Lumipharon: + - rscadd: Improved rappel effects in HvH + - bugfix: fixed various exploits with capturing the alamo + Pariah919: + - rscdel: You can no loner acquire long or wide nozzle in HvX. + Xander3359: + - bugfix: Chicken protein bars no longer runtime + ivanmixo: + - balance: Stagger doesn't stack in duration anymore +2024-02-11: + Dikozda: + - bugfix: SG prep on cantabury no longer has its only door blocked + Helg2: + - bugfix: '[Big Red] fixed pipes in medbay variants 4 and 5.' + Neocloudy: + - rscadd: new announcement design- announcements can be recolored, have a subtitle, + and pop out easier. + - code_imp: priority announcements can now have a color override and subtitle + - admin: added subtitle and color option to command reports + novaepee: + - imageadd: port TG surgery tool sprites +2024-02-12: + AzonStarfall: + - bugfix: Fixed Arachne's Medbay Disposal. + Helg2: + - bugfix: Xenos now show their wound in their special states. + Lumipharon: + - balance: Unarmed damage against humans is no longer rng if your victim is prone + - balance: CQC skill lowers grab upgrade time + - balance: Unarmed attacks against humans uses the same zone targeting as melee + weapons + - bugfix: Choking someone to death once again actually causes oxyloss + - bugfix: Melee attack can now actually miss some times as intended (only for humans + attacking humans) + Naaanii: + - rscadd: Added HVAP and smart railgun rounds to reqtorio. + - rscadd: Added SR-127 flak ammo to reqtorio. + - rscadd: Added deployable floodlights to reqtorio. + - rscadd: Added both plastiques to reqtorio. + - rscadd: Added detpacks to reqtorio. + - spellcheck: Added a missing period to drop pod factory description. + - balance: All AMR mags cost the same. + Pariah919: + - rscadd: Added new cloak and incendiary rockets for MLRS. + TiviPlus: + - code_imp: razorburns have been removed from loadouts due to an internal code change + Xander3359: + - refactor: Alamo console for xenos is TGUI now + Xander3359 Naaanii: + - admin: Admins can cancel king summon +2024-02-13: + Barnet2: + - balance: If autobalance is on or if you are a tier four, the xeno respawn timer + is not applied + - balance: Sentinel gas nade is now transparent (you can see through it) + Lumipharon: + - bugfix: fixed a couple of minor edge case bugs with jumping + - code_imp: connect_loc now works properly for multitile atoms +2024-02-14: + Cpol-CzHa: + - rscadd: Adds a number of missing items to valhalla. + Naaanii: + - rscadd: Added all AGLS ammo to reqtorio. + - rscadd: Added all TAT ammo to reqtorio. + - rscadd: Added all FK-88 ammo to reqtorio. + - rscadd: Added all ATR-22 ammo to reqtorio. + - bugfix: Actually adds the camera refill to req. + TiviPlus: + - rscadd: Added new "lasburster" grenade + - code_imp: added the ability to shoot bullets in a circle + Xander3359: + - bugfix: fix typo in martini belt causing broken sprite + efzapa: + - spellcheck: Bicaridine is now universally spelt correctly. +2024-02-15: + Helg2: + - balance: Psychic Relays, Evolution Towers and Pheromonone Towers now ignore weed + removal. + Pariah919: + - rscadd: New squashhead bullets for SMG-45 + - rscdel: SMG-45 HP + - soundadd: New firesound for SMG-45 + Xander3359: + - bugfix: Fix not being able to click martini belt + yyzsong: + - qol: Adds a cooldown between unresting and then resting again for xenomorphs +2024-02-16: + Lumipharon: + - bugfix: fixed some throw bugs involving buckled mobs, and added a failsafe to + catch any other edge cases + - bugfix: 'Campaign: Fixed a bug in destroy mission victory checks' + - bugfix: fixed some campaign autobalance logic + ivanmixo: + - bugfix: Xenos abilities shouldn't go through missing corners anymore +2024-02-17: + Barnet2: + - rscadd: 'New limited grenade: M40-AG "Anti Gas" grenades. Purges gas inside of + it''s smoke radius. 10 in vendor roundstart, 700 points for 25 nades, fairly + expensive' + Lumipharon: + - qol: 'Campaign: Updated weapon descriptions in the loadout UI' + Xander3359: + - bugfix: Fixes a bug allowing you to have tac sensor active permanently +2024-02-18: + AzonStarfall: + - bugfix: Removed duplicated bomb ammo placements on Arachne. + Barnet2: + - bugfix: Transport Officer icon should show in orbit menu + Lumipharon: + - bugfix: 'Campaign: Fixed some guns not working with upgraded shield light armour + as expected' + - balance: 'Campaign: Light and medium explosions have a chance to detonate armed + AT mines' + - bugfix: fixed some wonky shield behavior + - code_imp: Cleaned up some shield code + Pariah919: + - balance: FK-88 Ammo changes. APFDS no longer has a minimum range, does 275 damage, + has 20 less pen. HE does 100 damage, matching SADAR. + Scarlet-Oduko: + - code_imp: merged overlay defines into one layer list + Xander3359: + - bugfix: Loadouts work in Valhalla now + - bugfix: Xeno alamo console is functional once more + - refactor: Converts Autoinjectors + Hyposprays into TGUI + - code_imp: reagent_containers use attack_self_alternate + attack_hand_alternate + to open the reagent change UI (Also applies to hypos) + - bugfix: Fix not being able to use the beginner loadout in valhalla + - bugfix: Martini belt no longer has an error sprite when its full + exdal: + - bugfix: Requisitions status at round end stats is now properly formated. + ivanmixo: + - bugfix: Fixed the xeno ability going thru wall bug fix +2024-02-19: + AusarAtkin: + - balance: Synth & Early Synth can fix Groundside Gens faster now. + Barnet2: + - balance: Ice colony now has 2100 quickbuild points instead of 1600. + - balance: Xeno spit is unstaggerable + - balance: Big Red now has 2300 quickbuild points instead of 1800 + Lewdcifer: + - balance: Earth Riser maximum pillars increased from 1 to 3. Primordial version + now uncapped but limited by a 2s. cooldown. + - balance: Earth Riser displacement is now a knockback, meaning it throws people. + - bugfix: Fixed an issue where footstep changes on Landslide were setup incorrectly, + which could lead to wacky behavior in certain cases. + - bugfix: Fixed an unintended result where the primordial version of Earth Riser + would have a much shorter cooldown than intended. + - bugfix: Fixed an issue where hitting Earth Pillars with Seismic Fracture wouldn't + begin Earth Riser's cooldown. + - code_imp: If the owner of an Earth Pillar is somehow deleted while it is active, + it will now clean away the reference. + - code_imp: Changed the name of a Behemoth proc. + Xander3359: + - rscdel: Medics and SLs no longer get a firstaid box + - bugfix: The ship AI can no longer hijack/capture the Alamo + blackdav123: + - balance: Reinforced the external walls of two buildings on Magmoor. + - balance: Preweeded Gelida IV and added a tunnel. +2024-02-20: + blackdav123: + - rscadd: A set of vendors near the Alamo on Sulaco. +2024-02-21: + TiviPlus: + - bugfix: Fixes custom squad tablets not working + - bugfix: Fix Main console not being able to overwatch custom squads + - bugfix: fixed headsets being invisible if you spawned them while in a custom squad + - bugfix: 'Custom squads will now automatically pick the first most unused letter + in the name: (e.g cool squad will be .o because .c is taken by charlie by default) + the key can be found by examining your headset. people in the squad still have + to use ; because im lazy and didnt fix it' + XElectricX: + - bugfix: Fix interactive emotes + ivanmixo: + - bugfix: Nulls in the global client list shouldnt be as common anymore +2024-02-22: + Lumipharon: + - bugfix: fixed heightened stamina skill not properly lowering the stam regen delay + - bugfix: 'Campaign: Fixed an issue with some perks unlocking items incorrectly' + - balance: 'Campaign: Advanced firearm training perk reduced to 400 credits' + - balance: 'Campaign: Advanced construction and medical training reduced to 300 + credits and increase skill by 2' + Naaanii: + - balance: Increases hunter speed to -1.5 + - balance: Essence link (Drone), Create Jelly (Drone and Hivelord), Place Jelly + Pod (Hivelord), Place Resin trap (Carrier), Create Spiderling (Widow), Acid + well placement (several castes) can be used while resting. + blackdav123: + - balance: ' Removed 7 phoron miners from Ice Colony, Added 1.' +2024-02-23: + Barnet2: + - balance: Resin walls take 1.75x from melee, but have highly increased bullet and + laser armor + Lewdcifer: + - rscadd: Various Warrior changes, as part of a minor rework and rebalancing! + - rscadd: 'Added a new Primordial Warrior ability: Flurry!' + - rscadd: 'FLURRY: 10 plasma, 7 CD, three charges.' + - rscadd: 'FLURRY: Each attack deals 25% of the Warrior''s melee damage, and counts + towards the Empower combo count.' + - rscadd: 'FLURRY: Empowered version is the same as Jab''s. Inflicts 3 stacks of + blind, 6 of blur, and confuses for 3s.' + - rscdel: Primordial Warrior's Jab ability removed. + - balance: Melee damage reduced from 23 to 20. + - balance: Maximum plasma reduced from 120 to 100. + - balance: Plasma gain reduced from 12 to 10. + - balance: 'AGILITY: Cooldown reduced from 0.5s to 0.4s.' + - balance: 'LUNGE: Plasma cost increased from 18 to 20.' + - balance: 'GRAPPLE TOSS: Plasma cost increased from 18 to 20.' + - balance: 'FLING + GRAPPLE TOSS: Distance penalty on big mobs changed. Instead + of halving it, it now reduces it by one.' + - balance: 'FLING + GRAPPLE TOSS: Throwing impact effect added.' + - balance: 'PUNCH: Plasma cost increased from 12 to 15.' + - balance: 'PUNCH: Will no longer push targets if they''re against a wall.' + - qol: 'ALL ABILITIES: Abilities will now inform the player via a balloon message + when their cooldown is finished.' + - qol: 'AGILITY: No longer disallows using abilities while active. However, using + any ability will automatically disable Agility.' + - imageadd: Visual effects for throwing impacts, and punching. + - refactor: Refactored most of Warrior's coding, with the intention of better quality + and containment. + Pariah919: + - balance: Reinforced Walls have 75 laser/bullet armor and 5000 HP. +2024-02-24: + 74delta: + - rscadd: hefa grenades to req for 550 a box and 10 in roundstart vendors + Lumipharon: + - qol: Xeno plasma levels will update on the hud as soon as plasma levels change, + instead of waiting for life ticks + - bugfix: fixed pheros not using plasma if you were on full plasma, even off weeds + - code_imp: Improved some xeno plasma hud code + - balance: 'Campaign: Added individual stats to track shrapnel removed, mines placed + and mechs destroyed' + - balance: 'Campaign: Boosted the cash rewards for performing non combat actions' + - bugfix: fixed some wrong/misleading wield time stats + - bugfix: 'Campaign: Fixed an incorrect objective desc for ASAT Capture' + - code_imp: Cleaned up some conveyor code + - bugfix: 'Campaign: Fixed not being properly despawned at the end of a mission + in some cases' + MiniMeatwad: + - admin: Added message for recipient when a ticket is (un)marked, closed, or tiered. + XElectricX: + - code_imp: Interactive emotes can be bound to a key instead of using right clicking. + Xander3359: + - bugfix: Fix robotic cradle sprite + ivanmixo: + - rscadd: Added directional attacks, you can enable them in the preference menu + for all living mobs. +2024-02-25: + RipGrayson: + - rscadd: Added some barricade mapping helpers for mapper use. + TiviPlus: + - rscadd: added some admin-only vehicles + - code_imp: added multitile, multicrew vehicle support + Wisemonster: + - balance: ERT ships will now have plasteel cades protecting their doors. + - code_imp: Added a plasteel child that spawns in closed +2024-02-26: + Barnet2: + - balance: Daedalus Prison has weaker tables and pre-broken fences for a better + prep experience + - bugfix: Snows shows up as a proper texture in SDMM +2024-02-27: + Barnet2: + - balance: Boiler no longer has to root to fire + - spellcheck: New groundside marine ranks + - balance: Antigas nade req price reduced to 600, 20 nades in vendor instead of + 10 + - balance: Widow and Puppeteer minions have a 5% chance to hit their selected limb + (chest) instead of a 70% chance. + - rscadd: Xeno manifest on lobby screen + - balance: Queen has a sunder multiplier of 0.8 (takes 80% sunder), Crusher has + a sunder multiplier of 0.5 (takes 50% sunder) + DeltaFire15: + - bugfix: The new larva queue check should no longer be broken. + Helg2: + - code_imp: Weather danger messages now can be filtered by chat settings. + Lumipharon: + - balance: 'Campaign: Improved HP, shield and stamina perks' + - bugfix: fixed a larva queue issue + - bugfix: fixed xeno plasma hud getting stuck on death + - balance: Meleeing humans can no longer embed the item + - balance: 'Campaign: Slightly increased some credit reward values, and loss bonus + now applies to mission credit rewards' + Pariah919: + - balance: AC has significantly more wall damage to keep up with wall resistance + buffs. + Wisemonster: + - qol: The tadpole surgery dispenser now layers over objects + exdal: + - rscadd: AI VOX announcements are now visible on chat +2024-02-28: + Lumipharon: + - bugfix: Fixed a new issue with the larva queue + - balance: 'Campaign: Shotgun perk unlocks shotgun in the backslot for SL''s and + veterans' + - bugfix: fixed conveyors not working in some cases + Xander3359: + - code_imp: add emp signal + exdal: + - code_imp: Observers and AI now receive VOX announcement message +2024-02-29: + Barnet2: + - rscadd: Bulletproof, Hardy and Fireproof walls + - bugfix: Landmark resin walls now properly function + Lumipharon: + - balance: 'Campaign: Delimbing no longer provides additional credits' + - bugfix: 'Campaign: Fixed the tactical reserve asset' + - imageadd: Added some new portraits to some campaign assets + - bugfix: fixed the sectoid gun sprite + TiviPlus: + - rscadd: Custom squad UIs will now open during the round automatically + - rscadd: Added interiors that can be attached to any object + - rscadd: Tank now has an interior diff --git a/html/changelogs/archive/2024-03.yml b/html/changelogs/archive/2024-03.yml new file mode 100644 index 0000000000000..12b512c0d8ad5 --- /dev/null +++ b/html/changelogs/archive/2024-03.yml @@ -0,0 +1,519 @@ +2024-03-01: + Lumipharon: + - code_imp: Tiny tweak to directional attack code + - balance: Blowing up a wraith portal kills both ends of the portal now + - bugfix: fixed a runtime with adjacency checks + tyeagg: + - bugfix: rust-g not compiled with pathfinder feature +2024-03-02: + 2whatever2: + - rscadd: Gargoyles are now act the same as other structures, and can be tracked + with Structure pinpointers and hive tracker. + - balance: 2x damage on Genghis charge flames, 0.5x on it's timer. (17, 31) --> + (9, 62) (Time rounded up.) + AzonStarfall: + - rscdel: Removed references to high-tier xenomorph research samples. + - bugfix: Simplified the name of spawnable xenomorph research samples. + Barnet2: + - spellcheck: Changed "View Hive" lobby button to "View Hive Leaders" + Kapu1178: + - bugfix: Primordial crusher doesn't crash the server anymore. + Lumipharon: + - qol: Mecha controls can now be correctly hotkeyed + - bugfix: fixed various bugs with xeno charge abilities + - refactor: Refactored xeno charge abilities + Naaanii: + - rscadd: Adds Incendiary, Sticky, Cloak, Tfoot, Trailblazer, Lasernade, HEFA and + Antigas grenades to reqtorio. + - balance: Adjusted the price and yield of M15, WP and razor nades in reqtorio. + - rscadd: Added Hefa nades to Valhalla vendors. + - rscdel: Removed tfoot nades from Valhalla weapon vendors. + - rscadd: Added tfoot nades to Valhalla req vendors. + Xander3359: + - balance: Some lemolocked chems have a bit more generous reactions. + Yttriums: + - balance: Squad Engineers can now purchase supply beacons in their roundstart vendor + - balance: Mortar kit now includes a bag. + blackdav123: + - balance: Increases crusher sunder multiplier + ivanmixo: + - bugfix: The server should no longer die if you try to directional attack diagonally + thru a wall +2024-03-03: + Barnet2: + - balance: Antigas nades are now in the crash weapons vendor + Lumipharon: + - bugfix: fixed a gunfire runtime when firing the last bullet of some guns + TiviPlus: + - bugfix: tanks and mechs have correct bullet movement speed now + ivanmixo: + - bugfix: Retired ERT leader doesn't have legs anymore as was intended + - qol: Disabled directional attacks for mobs of the same faction as you +2024-03-04: + Dikozda: + - spellcheck: Blessing menu no long has two strategic point values + Lumipharon: + - bugfix: fixes a crash with rapid advance + - rscadd: You can now slam grabbed mobs into most objects, walls and mobs for varying + results + - refactor: Refactored grab interactions with objects + TiviPlus: + - rscadd: Tank periscope has night vision and zoom + - balance: buffed tank + - bugfix: Fixes tank reload not updating UI + Wisemonster: + - qol: Fire-safety cabinets now layer above objects + - qol: Moved the fire cabinet on the standard tad model to the other side of the + pilot computer. + blackdav123: + - bugfix: Moved a silo on orion out of marines reach. +2024-03-05: + Neocloudy: + - rscadd: new plain chat style + - balance: late synths have a 20% burn reduction instead of 30% + - balance: synths/early synths will no longer be unconscious at -50 health + - balance: synths/early synths take rapid burn damage at -30 health + TiviPlus: + - rscadd: Added Assault Crewman and Transport Crewman roles +2024-03-06: + Lumipharon: + - code_imp: Repathed defib gloves to actually be gloves + - imageadd: added new and improved portrait sprites for campaign + - bugfix: fixed a minor bug with the overclock shield perk for some SOM roles + - bugfix: fixed admin pods + - bugfix: fixed some ability runtimes + - code_imp: Cleaned up some xeno code + - balance: 'Campaign: Some loadout additions and tweaks' + - bugfix: fixed gorgon armour being unable to equip overclocked shield modules + - bugfix: fixed the squad management pop up opening for SL's on non nukewar modes + Pariah919: + - balance: RWalls have 3000 hp again rather than 5000, slightly higher armor. + - balance: Focus order no longer gives a firerate increase while aiming. + - rscadd: Added new Sniper and Shotgun sentry to the marine arsenal, as well as + new sentry sprites. + - balance: rds now gives bonus speed while aiming instead of increased firerate. + XElectricX: + - rscadd: Night vision goggles and night vision helmet module. + - balance: Night vision headsets can be purchased via requisitions. + - refactor: Glasses activation code optimized. + - imageadd: Night vision item sprites created by an artist commissioned by Bonkai + Xander3359: + - bugfix: Xenos can no longer corrupt the alamo controls mid-transit + - bugfix: Xenos can no longer capture the alamo mid-transit + - qol: All xenos can look at the alamo console while in hijack transit + - bugfix: Tad can no longer land on itself + - bugfix: Tad can no longer perform instant transmission + blackdav123: + - bugfix: Mag harness now functions properly for belt guns. + coldironwarrior: + - bugfix: new category for other trinkets available in "gear preferences" under + the "preferences" window + - spellcheck: fixed AGLS description +2024-03-07: + Barnet2: + - rscdel: Removed Baneling + - balance: Warrior slash increase from 20 to 22 + Lumipharon: + - code_imp: Cleaned up akimbo scatter mod code + Xander3359: + - bugfix: Trying to un-deploy some things no longer gives a misleading message + ivanmixo: + - code_imp: Cleaned up code related to humans +2024-03-08: + 2whatever2: + - balance: 'You now have to resist 1 more time for each time grabs are upgraded + on you. (Old values: Agrab 1, neckgrab 2, strangle 3.) (New: Agrab 2, neckgrab + 4(WARRIOR GRAB UNAFFECTED.) strangle 6.' + - balance: 'Punch stun and Shove stun no longer get lowered by more armor, and increased + with less armor, and will now always stun for 4 seconds. (Old values: 6 second + stun base, lowered by armor rating.)' + Lumipharon: + - bugfix: Fixed hold orders rounding certain incoming damage down to 0, such as + weather + - code_imp: Cleaned up some scout cloak related code + MLGTASTICa: + - bugfix: Fixed xenormophs being unable to choose any other special resin wall other + than the bulletproof one. + TiviPlus: + - bugfix: fixed tank sound for ghosts, and may have fixed it being offset + - bugfix: Fixes tank turret (literally) rotating randomly, as well as a series of + other things that use cardinal directions + - bugfix: you can no longer load the tank external magazines + blackdav123: + - balance: Lowers warlock HP from 375 to 325. + coldironwarrior: + - bugfix: fix scout droids not having nightvision + - bugfix: fixes AIs getting permanent nightvision after deploying to their scout + droid + - balance: researchers spawn with isotonic pill bottles instead of dexalin bottles + in their belts + ivanmixo: + - spellcheck: Fixed a typo in bulwark description +2024-03-09: + Lumipharon: + - bugfix: Fixed some issues with mech armour facings against melee attacks + - bugfix: Fixed xeno melee attacks ignoring all armour on objects + - rscdel: Removed a nonexistant item + - bugfix: AMR lase mode will no longer completely ignore solid objects + - code_imp: Cleaned up a bunch of projectile code + Naaanii: + - rscadd: Adds AMR incen and flak ammo to valhalla. + - rscadd: Adds TL Flak rounds to valhalla. + - rscadd: Adds cleaner nades to valhalla. + TiviPlus: + - qol: Tank gunner can now rotate turret using movement keys + - code_imp: kotahi uses proper shuffling in backend + - bugfix: Fix kotahi always spitting out 4 +4s in a row + - rscadd: Minimaps now work in the tank + - rscadd: restricted things like removing tank gun to tank crew only + - rscadd: Added tank LTA-AP minigun + ivanmixo: + - rscdel: Resting is no longer a verb in the IC tab +2024-03-10: + Lumipharon: + - bugfix: fixed scout cloaks + - qol: Xeno side UI plasma/health icons now also update instantly on change +2024-03-11: + 74delta: + - balance: Changes light armor slowdown from .3 to .2 and vlarmor from .2 to .15 + Barnet2: + - balance: Cluster OB now has 1 more tile of devastation per hit + Lumipharon: + - bugfix: Projectiles more accurately have a firing mob (such as vehicles) so mob + modifiers now apply correctly + - bugfix: fixed HEFA nades not hitting their own turf + - code_imp: More projectile code improvements and minor fixes + - bugfix: fixed bemo rock throwing + - balance: Explosions stagger the occupants of mechs, applying stagger damage penalties + to their weapons + - balance: Explosion throws are now tied to severity + - balance: Large xenos will not be thrown by light or weak explosions + - balance: Mechs will only be thrown by devastating explosions + - balance: Weak explosions will now only throw loose items +2024-03-12: + 00ze-cyclone: + - balance: laspistol and serpenta are now full auto + Barnet2: + - balance: Explosives using flame_radius (phos nades, incen nades) no longer have + damage RNG, and less duration RNG + - balance: Incendiary OB now has the same burn level as xfuel + Lumipharon: + - qol: 'Campaign: Added some extra crates to the home bases and other minor adjustments' + blackdav123: + - balance: Preweeded Magmoor + coldironwarrior: + - bugfix: POS, Arachne, and Theseus have one set of sandbags for synths; Theseus + and Sulaco now have a few guaranteed pairs of insuls in engineering + - bugfix: adds two more 30mm GAU ammo crates to Sulaco CAS bay to keep it in parity + with other ships' CAS bays + - balance: all shipmaps now start with two combat droids + - bugfix: reorganizes CAS weapons bay on Pillar of Spring so POs can now get at + their weapons easier + - bugfix: 'PoS minor changes: removes a duplicate rack; fixes decaling by the alamo; + moves a vent that was covered by a photocopier in engineering' +2024-03-13: + Barnet2: + - balance: Restores pre-root boiler dig mechanic, have to sit still and wait 3 seconds + before firing a glob (you can still move, but cancels the channel) + lbnesquik: + - bugfix: The AI can interact with the nuke again +2024-03-14: + Barnet2: + - balance: Boiler gas is now translucent, AP on direct hit for all glob types increased + by 10 + - balance: Normal boiler gas (non-lance) has 1 more tile of radius + ClosetedSkeletonGH: + - rscadd: Alamo has been revamped to be more RP friendly and efficient + - bugfix: fixes soder machines costing money + - bugfix: fixes not being able to see out of the front of the almamo + Dikozda: + - rscadd: Drones can now place acid wells. + Naaanii: + - rscdel: Removes shoulder mount from research gacha. + Neocloudy: + - balance: The overheating damage for Normal Synthetics is now 5-16 + - balance: The overheating damage for Early Synthetics is now 7-19 + - rscadd: Synthetics may spark when overheating from severe damage. They will also + stammer when overheating. + coldironwarrior: + - balance: antigas grenade sets in FC and SL vendors; 24 points for a set of four + grenades + - bugfix: beginner tutorial sheets updated + lbnesquik: + - imageadd: added pump animation for trench gun + - imageadd: added firing animation for M412LI, and Minimi + - bugfix: fixed ICC mg mags not having the right name + - bugfix: fixed ICC mg mags not having the right caliber + - bugfix: water is now scannable by medical scanners +2024-03-15: + Lumipharon: + - code_imp: Cleaned up some object and flare code + - qol: Certain minimap blips such as important structures or defibbable marines + layer over other blips + - bugfix: Queen screech will no longer go through z-levels + - balance: 'Campaign: SOM medics now always have 2 RR injectors in their helmets' + - bugfix: 'Campaign: Fixed a few mismatched portraits when calling in firesupport' + - qol: 'Campaign: Loadout screen automatically opens on spawn where required' + - qol: 'Campaign: Respawn window automatically opens when your respawn timer is + up, or when the rapid reserve asset is used' + Notamaniac: + - rscadd: Adds say tech hints + coldironwarrior: + - qol: re-organizes theseus hangar and staff officer quarters + - qol: style hats now mask hairs behind them so they look like they're layered on + your head properly + - imageadd: resprites mimir module worn sprite +2024-03-16: + Barnet2: + - bugfix: Campaign mortar acid smoke is opaque + DeltaFire15: + - bugfix: Certain xenomorphs can no longer regenerate past their plasma cap under + specific circumstances. + - bugfix: Railgun factory parts now give you their respective ammunition types instead + of only standard canisters. + - spellcheck: AMR factory parts now can be differentiated by name as opposed to + by feeling. + Kapu1178: + - bugfix: Facehuggers will now prioritize the nearest marine, preferring cardinal + directions. + Lumipharon: + - balance: 'Campaign: reduced mission time for ASAT and both fire support missions' + - balance: 'Campaign: Increased number of objectives required for minor victory + for fire support missions' + - balance: 'Campaign: Killing mechs in mech war awards a small number of capture + points' + - balance: 'Campaign: Fire support binos require line of sight, but can now target + any atom' + - bugfix: fixed flak guns being vended incorrectly + - qol: Antigas smoke is more visible + blackdav123: + - balance: GL-81 can now fit magnetic harness and rail flashlight. + lbnesquik: + - qol: Added a little description to the medivac bed in the corpsman vendor. + - spellcheck: Corrected a typo of patiant to patient + - code_imp: Removed a now useless verb +2024-03-17: + AzonStarfall: + - rscadd: Expanded the Arachne vehicle bay. + - rscdel: Removed the Arachne flight control station, to make room for the vehicle + bay. +2024-03-18: + Lumipharon: + - bugfix: fixed an issue with airburst type projectiles + - bugfix: Fix hefa nades + - bugfix: Fix piercing ammo not piercing if your main target is adjacent to you + - bugfix: Fix tank blowing itself up with the main cannon +2024-03-19: + Lumipharon: + - balance: 'Campaign: Reduced game and pregame delays on most missions' + - balance: 'Campaign: NT Base Rescue no longer allows firesupport for TGMC' + - balance: 'Campaign: NT Base Rescue provides SOM with automatic militia support' + - balance: 'Campaign: NT Base Rescue reduced SOM mech count to 4' + - balance: 'Campaign: SOM have to destroy 6 objectives to win on Supply Raid' +2024-03-20: + Kapu1178: + - bugfix: Huggers *actually* prioritize orthogonal marines over diagonal marines. + Notamaniac: + - bugfix: Iguana ammo boxes now properly delete themselves when they perform a reload + that uses up all their ammo + lbnesquik: + - code_imp: Nukes all references to the M56D + - qol: Add the evac timer to the AI status tab + - qol: Added the word flak to fk-88 in req +2024-03-21: + Lumipharon: + - bugfix: 'Campaign: Fixed some loot tables being wrong from SOM initiated combat + patrol/mech war missions' + Notamaniac: + - bugfix: Spamming the Iguana remote will no longer cause massive chat spam when + people speak to the Iguana +2024-03-22: + Lumipharon: + - balance: Increased volkite charger deflag chance slightly + - balance: 'Campaign: Reduced the loadout cost of some volkite weapons' + - balance: 'Campaign: Melee special attacks use less stamina, and can be used at + 0 stamina loss' + - balance: 'Campaign: Axe sweep steps towards you target before sweeping' + - bugfix: Fixed a few minor bugs with melee special attacks + - balance: Mech explosive armour modules increased bomb armour by 25 instead of + 50 + - qol: 'Campaign: fixed the timing of the autobalance prompt' + - balance: Very slight increase in time for ASAT and firesupport missions + Xander3359: + - code_imp: cleans species.dm + - qol: Roomba tries to restock elligible items +2024-03-23: + AusarAtkin: + - spellcheck: fixed BR-8 mag typos and clarify some bullet with same caliber. + - spellcheck: fixed typo on Shield module in SL loadout. + Barnet2: + - code_imp: Jungle walls spawn weedable grass when hit with a devastating explosion + - balance: Tank's LTB cannon no longer has devastation. + - balance: Tank's integrity reduced from 1250 to 900 due to armor working again + - rscdel: Removed duplicate intel computers on Gelida IV + Lumipharon: + - bugfix: fixed mech UI size + - qol: Gun codex entries now state what weapon skill applies to them + - balance: 'Campaign: Updated a few job slot limits for consistancy' + - bugfix: fixed job slots not being closed correctly in some cases + - balance: Lava will actually melt objects now + - qol: Mech actuator overload has a hotkey + - qol: Added a mech reload hotkey + - bugfix: 'Campaign: Fixed an issue with towers on Orion Outpost and Patrick''s + Rest' + - bugfix: 'Campaign: Fixed the sword lunge ability not properly doing damage' + - bugfix: fixed sentries being unable to shoot targets on their own turf + - bugfix: Fixed energy sentries not shooting through glass + Notamaniac: + - bugfix: Fixes view getting bugged if you regress/caste swap while zoomed in + XElectricX: + - bugfix: Welding goggles and HUD glasses work again. Night vision module req order + spawns the actual module. + Xander3359: + - bugfix: Plasma cutter is no longer spammed by unreadable balloon alerts + - code_imp: adds isplasmacutter(I) + coldironwarrior: + - balance: gave more jackets storage slots + lbnesquik: + - qol: Add a button for the AI to open the req console directly + - rscadd: Added FC vendor to valhalla + - qol: Added the ASRS supply tablet to req + - qol: added categories to the hypersleep bay console +2024-03-24: + Lumipharon: + - balance: 'Campaign: Gun perks now unlock certain weapon and ammo options in addition + to their existing effects' + - bugfix: 'Campaign: Fixed a missing overclocked option for heavy shielded armour + for SOM standards' + - rscadd: Reworked plasma weapons in addition to a new plasma SMG + - balance: 'Campaign: Plasma weapons are available via unlock or perk' + blackdav123: + - rscadd: Added modulars to Jungle Outpost + coldironwarrior: + - rscadd: sulaco vehicle bay, next to the TAD and mech workshop +2024-03-25: + XElectricX: + - bugfix: Welding goggles no longer work in reverse. + coldironwarrior: + - imagedel: deletes unused sprites from the "obj" folder + - imagedel: deleted the "unused" folder of dmis +2024-03-26: + Lumipharon: + - bugfix: fixed lava trying to burn indestructable things forever + blackdav123: + - balance: Removed outdoor plat miner from Icy Caves +2024-03-27: + DeltaFire15: + - qol: Pheromone strength in the statpanel now shows the actual value next to the + approximate category. + - spellcheck: Corrected a code comment about phero brackets which was quite outdated. + Lumipharon: + - bugfix: fixed IFF shrap on airburst weapons + - bugfix: AMR/fire support bino lase no longer layers under clothing and such + - balance: M40 HSDP smoke grenade smoke radius reduced to 6 from 7 + - bugfix: fixed a few instances where object damage was incorrectly applying armour + multipliers when it shouldn't + - bugfix: Mechs and tanks properly respect target def zone + blackdav123: + - balance: Adds disk sets to Gelida IV + lbnesquik: + - bugfix: fix the hypersleep dispense all not working + - bugfix: fix the drug category not displaying + - rscadd: Added the cradle to valhala and debugabus + - qol: Changed the cradle sprites + - qol: helmets, armor and suits show their equipped modules on examine +2024-03-28: + Xander3359: + - code_imp: flags now all follow the formatting of flagname_flags +2024-03-29: + Barnet2: + - qol: The toxin reagent from QC+, Peri+ and Nanoblood now shows on medical scanners. + Lumipharon: + - code_imp: Some performance improvements to campaign loadout UI + Pariah919: + - rscadd: Added new Sniper and Shotgun sentry to the marine arsenal, as well as + new sentry sprites. + blackdav123: + - bugfix: Fills in space tile on Theseus +2024-03-30: + Aporhtonoma: + - rscadd: Puppets have now the ability to rest and unrest when puppeter does + - rscadd: puppets have now the ability to sleep and resist when puppeter does + - rscadd: Puppets have now the ability to jump when puppeter does + Barnet2: + - rscdel: Removes the ability to vote for the current map during groundmap vote + - admin: R_POLLS rank used for Server Poll Management + Lumipharon: + - qol: 'Campaign: Improved loadout UI and new icons' + Xander3359: + - bugfix: fix the HSG_102 that spawn on maps having the wrong item path + blackdav123: + - bugfix: Fixed a few misplaced area tiles on Gelida caves + lbnesquik: + - code_imp: Removes some redundant code + - rscdel: Removed factory medpacks +2024-03-31: + Barnet2: + - balance: Boiler glob CD increased by 5 + - balance: Boiler lance has a range of 25, the same distance as it's horizontal + zoom range. + - rscadd: Whistle makes every human in range do the *warcry emote + - balance: Bull now has Boiler's zoom ability + - balance: Bull is now has a mob size of big + - qol: Sulaco generators and SMES are now preset + - balance: Warlock psy blast AOE no longer damages barricades and their subtypes + - balance: Warlock psy blast no longer has knockback + - balance: Warlock psy blast now has IFF, going through teammates + Lumipharon: + - balance: Made SMG and rifle more expensive + - bugfix: Fixed plasma cannon starting with an incorrect ammo type set + - bugfix: 'Campaign: Fixed a missing whitelist requirement for Surt' + Naaanii: + - rscdel: Removed RR launcher, AT gun and it's ammo from regular Valhalla vendors. + - rscadd: Added the RR launcher, AT gun and it's ammo to the Valhalla req vendors. + - rscadd: Added the small HMG magazines to the regular Valhalla vendors. + Notamaniac: + - refactor: Robotic Cradle was refactored + - qol: You can now eject people just by clicking + - balance: There are no more skill requirements to putting yourself or someone into + the cradle + - bugfix: Synths can now place themselves into the cradle + - bugfix: Moths can no longer use the cradle by getting grabbed and put in (or other + creatures like sectoids) + - bugfix: Robot and synth medical records don't get updated anymore when using the + cradle. + - bugfix: You can no longer start a repair, get ejected, then hop back in and get + repaired from the earlier unfinished operation. + PestoVerde322: + - qol: The TE powerpack is now available in the default, Crash and Valhalla Automated + weapon rack + RipGrayson: + - bugfix: Fixed a few incorrect icons in our walls. + - bugfix: You can no longer perma trap people inside hull walls on some BR modulars + as wraith. + - bugfix: Corrected an incorrect icon for mounted lasers on Oscar Outpost. + - bugfix: Removed an incorrect merge conflict marker on Jungle Outpost. + - bugfix: Fixed the tank being unable to leave the dropship on Delta. + - bugfix: Fixed a situation on Sulaco where transport officers could be stuck in + mech crew headquarters. + - bugfix: Adjusted some IDs on the tank vehicle bay so that they were no longer + bugged. + - imageadd: Ported some carpets from TG for mapper use. + - imageadd: Ported some glass floors from TG for mapper use. + - imageadd: Ported the chasm sprites from TG. + - imageadd: Created a new set of walls for basalt terrain. + - imageadd: Created two new autosmoothing variations for asphalt. + - imageadd: Added error signs to many icon files, for easier debugging. + - imagedel: Deleted some unused carpet icons that have been obsolete since the new + smoothing system. + Xander3359: + - bugfix: Touching the alamo console as a xeno stops takeoff + lbnesquik: + - rscadd: Add OB shots to round end statistics + novaepee: + - rscadd: Pillar of Spring's Vehicle Bay + - rscadd: Change POS's TO and PO's bunk + - rscadd: expand PoS' req + - rscadd: Move PoS' OB to be closer to CIC. Also add brig. + - rscadd: move PoS' droppod to where mech is and vice versa + - rscadd: move PoS' tadpole to where briefing is and vice versa diff --git a/html/changelogs/archive/2024-04.yml b/html/changelogs/archive/2024-04.yml new file mode 100644 index 0000000000000..e4177056160ce --- /dev/null +++ b/html/changelogs/archive/2024-04.yml @@ -0,0 +1,76 @@ +2024-04-01: + Lumipharon: + - rscadd: 'Campaign: Added a new mission - Raiding Base for TGMC' + Notamaniac: + - bugfix: R76 icon no longer shows up as an error icon in holster + Xander3359: + - qol: Gives xenos "Toggle Seethrough" ability, making their sprite translucent, + allowing you to click through yourself +2024-04-02: + RipGrayson: + - bugfix: Fixed posters displaying error signs instead of their valid icon. +2024-04-03: + AusarAtkin: + - balance: Welder repair amount scale off Engi skill. + Barnet2: + - balance: Warding pheros have near half effectiveness, from 2.5 armor per aura + level to 1.5 + Lumipharon: + - rscadd: 'Campaign: Added a few new loadout options and tweaked a few existing + ones' + - bugfix: 'Campaign: Fixed a few incorrect gun sprites in the loadout menu' + - qol: 'Campaign: Updated mech colours to distinguish the different weight classes + better' + - bugfix: 'Campaign: fixed a few minor issues on Raiding Base' + - qol: 'Campaign: Mech pods and deploy point descriptions explain how mechs can + use them' + MLGTASTICa: + - balance: Veteran ERT now starts with their firearms and rifles skills at trained + instead of the default(+1) + - balance: Special Ops ERT now starts with their smg skill set to trained instead + of the default(+1) + Naaanii: + - rscadd: Actually adds the cloak nade refill to req. + - balance: rebalances grenade pricing and reqtorio yield. + TiviPlus: + - bugfix: ACs can no longer use mech console + blackdav123: + - bugfix: Tanks will now be able to leave the Alamo on Slumbridge + - code_imp: Standardized dark frost walls with other wall types. + coldironwarrior: + - balance: CSE now has 5 in engineering and construction skills + - balance: SOs have higher engineering and powerloader skill now (shouldn't fumble + with OB) + - balance: ' CSEs now have leadership level 2, down from leadership 3' + lbnesquik: + - balance: Increase bulletproof vests armor bullet resistance. Slight energy/laser + increase. + novaepee: + - bugfix: PoS req and tc +2024-04-04: + AusarAtkin: + - qol: Examining stasis bag while wearing med hud now show defib status (DNR, Almost + departed) and DNR timer + Lumipharon: + - bugfix: fixed conveyors breaking in certain scenarios + - code_imp: Fixed a minor runtime and removed an unneeded stack trace + - balance: 'Campaign: Deploying an OB beacon in the Raiding Base mission pauses + the game timer' + - balance: 'Campaign: Running a code computer on NT Base Rescue pauses the game + timer' + TiviPlus: + - balance: Doubled AI xeno spawnrate + - bugfix: Fixed tank ammo rack LTA-AP Overlay + Xander3359: + - qol: All chems (except neuraline) are scannable by a health scanner + coldironwarrior: + - rscadd: adds the paramedic labcoat + homexp13: + - balance: Silo larva gene now decreases more depending on the marine to xenos ratio. + lbnesquik: + - qol: Activating supply beacons notify the shipside console with a noise + - rscadd: Add alternate ammo MLRS ammo to the req factory + - bugfix: Fix the MLRS gas and cloaking gas sharing the same path and likely bugging + out + - code_imp: Renames the MLRS ammo to a more consistent schema + - bugfix: Fix the MLRS having free ammo thanks to init mapload :( diff --git a/html/statbrowser.css b/html/statbrowser.css index dc693f42f756b..89c162cba97a6 100644 --- a/html/statbrowser.css +++ b/html/statbrowser.css @@ -4,7 +4,7 @@ body { margin: 0 !important; padding: 0 !important; overflow-x: hidden; - overflow-y: scroll; + overflow-y: auto; } body.dark { diff --git a/icons/Marine/attachments_64.dmi b/icons/Marine/attachments_64.dmi index f1b89362b2276..6fc3b1d7d11e7 100644 Binary files a/icons/Marine/attachments_64.dmi and b/icons/Marine/attachments_64.dmi differ diff --git a/icons/Marine/barricades.dmi b/icons/Marine/barricades.dmi index 353e7ad7707a4..f0eb6ce31f771 100644 Binary files a/icons/Marine/barricades.dmi and b/icons/Marine/barricades.dmi differ diff --git a/icons/Marine/greyscale_gun/attachments.dmi b/icons/Marine/greyscale_gun/attachments.dmi deleted file mode 100644 index 20c5c275c73f9..0000000000000 Binary files a/icons/Marine/greyscale_gun/attachments.dmi and /dev/null differ diff --git a/icons/Marine/greyscale_gun/attachments_64.dmi b/icons/Marine/greyscale_gun/attachments_64.dmi deleted file mode 100644 index 8ad9d16400c39..0000000000000 Binary files a/icons/Marine/greyscale_gun/attachments_64.dmi and /dev/null differ diff --git a/icons/Marine/greyscale_gun/back.dmi b/icons/Marine/greyscale_gun/back.dmi deleted file mode 100644 index ea589cb4febb8..0000000000000 Binary files a/icons/Marine/greyscale_gun/back.dmi and /dev/null differ diff --git a/icons/Marine/greyscale_gun/gun.dmi b/icons/Marine/greyscale_gun/gun.dmi deleted file mode 100644 index 6578b8a69749f..0000000000000 Binary files a/icons/Marine/greyscale_gun/gun.dmi and /dev/null differ diff --git a/icons/Marine/greyscale_gun/gun_64.dmi b/icons/Marine/greyscale_gun/gun_64.dmi deleted file mode 100644 index 77b30cb1e4946..0000000000000 Binary files a/icons/Marine/greyscale_gun/gun_64.dmi and /dev/null differ diff --git a/icons/Marine/greyscale_gun/l_hand.dmi b/icons/Marine/greyscale_gun/l_hand.dmi deleted file mode 100644 index 5b0901857df08..0000000000000 Binary files a/icons/Marine/greyscale_gun/l_hand.dmi and /dev/null differ diff --git a/icons/Marine/greyscale_gun/l_hand_64.dmi b/icons/Marine/greyscale_gun/l_hand_64.dmi deleted file mode 100644 index 6c1730748ec98..0000000000000 Binary files a/icons/Marine/greyscale_gun/l_hand_64.dmi and /dev/null differ diff --git a/icons/Marine/greyscale_gun/r_hand.dmi b/icons/Marine/greyscale_gun/r_hand.dmi deleted file mode 100644 index 94c2588f98483..0000000000000 Binary files a/icons/Marine/greyscale_gun/r_hand.dmi and /dev/null differ diff --git a/icons/Marine/greyscale_gun/r_hand_64.dmi b/icons/Marine/greyscale_gun/r_hand_64.dmi deleted file mode 100644 index ba204b46eb28a..0000000000000 Binary files a/icons/Marine/greyscale_gun/r_hand_64.dmi and /dev/null differ diff --git a/icons/Marine/greyscale_gun/suit.dmi b/icons/Marine/greyscale_gun/suit.dmi deleted file mode 100644 index 87e1aacfe0590..0000000000000 Binary files a/icons/Marine/greyscale_gun/suit.dmi and /dev/null differ diff --git a/icons/Marine/gun64.dmi b/icons/Marine/gun64.dmi deleted file mode 100644 index 2f3f5bcfce6c8..0000000000000 Binary files a/icons/Marine/gun64.dmi and /dev/null differ diff --git a/icons/Marine/mainship_props.dmi b/icons/Marine/mainship_props.dmi index 9e91a22f01bed..5e25dc4eb507a 100644 Binary files a/icons/Marine/mainship_props.dmi and b/icons/Marine/mainship_props.dmi differ diff --git a/icons/Marine/mainship_props64.dmi b/icons/Marine/mainship_props64.dmi index 427b1d9dbe9e8..0b2338a706839 100644 Binary files a/icons/Marine/mainship_props64.dmi and b/icons/Marine/mainship_props64.dmi differ diff --git a/icons/Marine/marine-hmg.dmi b/icons/Marine/marine-hmg.dmi index 48c4465e41252..7920acd0305bf 100644 Binary files a/icons/Marine/marine-hmg.dmi and b/icons/Marine/marine-hmg.dmi differ diff --git a/icons/Marine/marine-mmg.dmi b/icons/Marine/marine-mmg.dmi index ee35855259207..0adc89644b160 100644 Binary files a/icons/Marine/marine-mmg.dmi and b/icons/Marine/marine-mmg.dmi differ diff --git a/icons/Marine/marine-weapons.dmi b/icons/Marine/marine-weapons.dmi index 018e011e52942..5d05b179478ce 100644 Binary files a/icons/Marine/marine-weapons.dmi and b/icons/Marine/marine-weapons.dmi differ diff --git a/icons/Marine/mortar.dmi b/icons/Marine/mortar.dmi index a24983bc90ce5..887876c3b2a02 100644 Binary files a/icons/Marine/mortar.dmi and b/icons/Marine/mortar.dmi differ diff --git a/icons/Marine/sentry.dmi b/icons/Marine/sentry.dmi index 3d7eb7cf0935b..260bf342e740e 100644 Binary files a/icons/Marine/sentry.dmi and b/icons/Marine/sentry.dmi differ diff --git a/icons/Marine/spear.dmi b/icons/Marine/spear.dmi new file mode 100644 index 0000000000000..0b1c0f5d41df7 Binary files /dev/null and b/icons/Marine/spear.dmi differ diff --git a/icons/Marine/tank_propew.dmi b/icons/Marine/tank_propew.dmi index ea66a72ec0a17..6473481039182 100644 Binary files a/icons/Marine/tank_propew.dmi and b/icons/Marine/tank_propew.dmi differ diff --git a/icons/Marine/tank_propns.dmi b/icons/Marine/tank_propns.dmi index 54a8baecda29a..7c4e214aaf123 100644 Binary files a/icons/Marine/tank_propns.dmi and b/icons/Marine/tank_propns.dmi differ diff --git a/icons/UI_Icons/buyable_icons.dmi b/icons/UI_Icons/buyable_icons.dmi index 7f8c05210020f..9b4f6092d868d 100644 Binary files a/icons/UI_Icons/buyable_icons.dmi and b/icons/UI_Icons/buyable_icons.dmi differ diff --git a/icons/UI_Icons/campaign_icons.dmi b/icons/UI_Icons/campaign/asset_icons.dmi similarity index 100% rename from icons/UI_Icons/campaign_icons.dmi rename to icons/UI_Icons/campaign/asset_icons.dmi diff --git a/icons/UI_Icons/campaign/loadout_item_icons.dmi b/icons/UI_Icons/campaign/loadout_item_icons.dmi new file mode 100644 index 0000000000000..ba9bba0cc8c7f Binary files /dev/null and b/icons/UI_Icons/campaign/loadout_item_icons.dmi differ diff --git a/icons/UI_Icons/mission_icons.dmi b/icons/UI_Icons/campaign/mission_icons.dmi similarity index 100% rename from icons/UI_Icons/mission_icons.dmi rename to icons/UI_Icons/campaign/mission_icons.dmi diff --git a/icons/UI_Icons/campaign/perk_icons.dmi b/icons/UI_Icons/campaign/perk_icons.dmi new file mode 100644 index 0000000000000..a76fcedd06812 Binary files /dev/null and b/icons/UI_Icons/campaign/perk_icons.dmi differ diff --git a/icons/UI_Icons/map_blips.dmi b/icons/UI_Icons/map_blips.dmi index ca03e1e015fc0..2cf7ef616a11f 100644 Binary files a/icons/UI_Icons/map_blips.dmi and b/icons/UI_Icons/map_blips.dmi differ diff --git a/icons/UI_Icons/map_blips_large.dmi b/icons/UI_Icons/map_blips_large.dmi index b12759f1ed32c..aeb50782d31c4 100644 Binary files a/icons/UI_Icons/map_blips_large.dmi and b/icons/UI_Icons/map_blips_large.dmi differ diff --git a/icons/UI_Icons/screen_alert_images.dmi b/icons/UI_Icons/screen_alert_images.dmi index f9c791fbdf7f6..d93ab892d83c8 100644 Binary files a/icons/UI_Icons/screen_alert_images.dmi and b/icons/UI_Icons/screen_alert_images.dmi differ diff --git a/icons/Xeno/2x2building.dmi b/icons/Xeno/2x2building.dmi index 6a421184defb0..d5e905b5bdc1c 100644 Binary files a/icons/Xeno/2x2building.dmi and b/icons/Xeno/2x2building.dmi differ diff --git a/icons/Xeno/3x3building.dmi b/icons/Xeno/3x3building.dmi index 594c7deae3a74..d826610c6a4f5 100644 Binary files a/icons/Xeno/3x3building.dmi and b/icons/Xeno/3x3building.dmi differ diff --git a/icons/Xeno/acidturret.dmi b/icons/Xeno/acid_turret.dmi similarity index 100% rename from icons/Xeno/acidturret.dmi rename to icons/Xeno/acid_turret.dmi diff --git a/icons/Xeno/acid_pool.dmi b/icons/Xeno/acid_well.dmi similarity index 100% rename from icons/Xeno/acid_pool.dmi rename to icons/Xeno/acid_well.dmi diff --git a/icons/Xeno/actions.dmi b/icons/Xeno/actions.dmi index 3268e27c2c677..aa3c9e1e098a4 100644 Binary files a/icons/Xeno/actions.dmi and b/icons/Xeno/actions.dmi differ diff --git a/icons/Xeno/resinpod.dmi b/icons/Xeno/resin_pod.dmi similarity index 100% rename from icons/Xeno/resinpod.dmi rename to icons/Xeno/resin_pod.dmi diff --git a/icons/Xeno/xeno_materials.dmi b/icons/Xeno/xeno_materials.dmi new file mode 100644 index 0000000000000..a367645cd8cb8 Binary files /dev/null and b/icons/Xeno/xeno_materials.dmi differ diff --git a/icons/effects/64x64.dmi b/icons/effects/64x64.dmi index 5a898091ac8e1..56633729a51f7 100644 Binary files a/icons/effects/64x64.dmi and b/icons/effects/64x64.dmi differ diff --git a/icons/effects/bulletholes.dmi b/icons/effects/bulletholes.dmi index 1166c0f20a19a..bc464d95fdcde 100644 Binary files a/icons/effects/bulletholes.dmi and b/icons/effects/bulletholes.dmi differ diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index cce2a0a4c3e6c..ddee44ea03833 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/effects/lases.dmi b/icons/effects/lases.dmi index 99c929c7dfd23..0e346016fdd61 100644 Binary files a/icons/effects/lases.dmi and b/icons/effects/lases.dmi differ diff --git a/icons/effects/mapping_helpers.dmi b/icons/effects/mapping_helpers.dmi index 19a3fc6f4d045..9d1d541a3d0f1 100644 Binary files a/icons/effects/mapping_helpers.dmi and b/icons/effects/mapping_helpers.dmi differ diff --git a/icons/effects/overheat.dmi b/icons/effects/overheat.dmi new file mode 100644 index 0000000000000..721fec3d5963e Binary files /dev/null and b/icons/effects/overheat.dmi differ diff --git a/icons/misc/colortest.dmi b/icons/misc/colortest.dmi new file mode 100644 index 0000000000000..0f74685ebc24d Binary files /dev/null and b/icons/misc/colortest.dmi differ diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index fedac4867e3ab..8ad8dd26371f0 100644 Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.dmi differ diff --git a/icons/mob/actions/actions_mecha.dmi b/icons/mob/actions/actions_mecha.dmi index 19c6a3176054d..678064a519edb 100644 Binary files a/icons/mob/actions/actions_mecha.dmi and b/icons/mob/actions/actions_mecha.dmi differ diff --git a/icons/mob/ammoHUD.dmi b/icons/mob/ammoHUD.dmi index 2357f09203393..26fb5e0ef8e87 100644 Binary files a/icons/mob/ammoHUD.dmi and b/icons/mob/ammoHUD.dmi differ diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index e1c691ea084ef..7e157f1f10fab 100644 Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ diff --git a/icons/mob/clothing/hands.dmi b/icons/mob/clothing/hands.dmi index 4a55b4db8687a..71fead3bc4c92 100644 Binary files a/icons/mob/clothing/hands.dmi and b/icons/mob/clothing/hands.dmi differ diff --git a/icons/mob/clothing/headwear/ert_headwear.dmi b/icons/mob/clothing/headwear/ert_headwear.dmi index 7336c44399d01..46a8deceb981e 100644 Binary files a/icons/mob/clothing/headwear/ert_headwear.dmi and b/icons/mob/clothing/headwear/ert_headwear.dmi differ diff --git a/icons/mob/clothing/headwear/marine_helmets.dmi b/icons/mob/clothing/headwear/marine_helmets.dmi index 55e1300eb28c9..0e3bc3cdbde21 100644 Binary files a/icons/mob/clothing/headwear/marine_helmets.dmi and b/icons/mob/clothing/headwear/marine_helmets.dmi differ diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi index 906001b964388..0a3dfedb73d1b 100644 Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ diff --git a/icons/mob/clothing/suits/ert_suits.dmi b/icons/mob/clothing/suits/ert_suits.dmi index d604cd5b4aeae..510edec86f31c 100644 Binary files a/icons/mob/clothing/suits/ert_suits.dmi and b/icons/mob/clothing/suits/ert_suits.dmi differ diff --git a/icons/mob/clothing/suits/marine_armor.dmi b/icons/mob/clothing/suits/marine_armor.dmi index 15b13b67be572..897ed99315e8c 100644 Binary files a/icons/mob/clothing/suits/marine_armor.dmi and b/icons/mob/clothing/suits/marine_armor.dmi differ diff --git a/icons/mob/clothing/uniforms/ert_uniforms.dmi b/icons/mob/clothing/uniforms/ert_uniforms.dmi index 044195d238a47..b511334602751 100644 Binary files a/icons/mob/clothing/uniforms/ert_uniforms.dmi and b/icons/mob/clothing/uniforms/ert_uniforms.dmi differ diff --git a/icons/mob/clothing/uniforms/marine_uniforms.dmi b/icons/mob/clothing/uniforms/marine_uniforms.dmi index 92e7e935b09ae..567c3c0d98eca 100644 Binary files a/icons/mob/clothing/uniforms/marine_uniforms.dmi and b/icons/mob/clothing/uniforms/marine_uniforms.dmi differ diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 75a734a659da8..b7ec969d3a8a0 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 2436238d98f9f..30241d98b2513 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/inhands/equipment/surgery_left.dmi b/icons/mob/inhands/equipment/surgery_left.dmi index 09f78f9a86813..53845029b5649 100644 Binary files a/icons/mob/inhands/equipment/surgery_left.dmi and b/icons/mob/inhands/equipment/surgery_left.dmi differ diff --git a/icons/mob/inhands/equipment/surgery_right.dmi b/icons/mob/inhands/equipment/surgery_right.dmi index e1a101d434918..ea1be3efbcfd0 100644 Binary files a/icons/mob/inhands/equipment/surgery_right.dmi and b/icons/mob/inhands/equipment/surgery_right.dmi differ diff --git a/icons/mob/inhands/guns/energy_left_1.dmi b/icons/mob/inhands/guns/energy_left_1.dmi new file mode 100644 index 0000000000000..34fbd36f2dbe9 Binary files /dev/null and b/icons/mob/inhands/guns/energy_left_1.dmi differ diff --git a/icons/mob/inhands/guns/energy_left_64.dmi b/icons/mob/inhands/guns/energy_left_64.dmi new file mode 100644 index 0000000000000..a831da4c82eb4 Binary files /dev/null and b/icons/mob/inhands/guns/energy_left_64.dmi differ diff --git a/icons/mob/inhands/guns/energy_right_1.dmi b/icons/mob/inhands/guns/energy_right_1.dmi new file mode 100644 index 0000000000000..80bc462d2ee0b Binary files /dev/null and b/icons/mob/inhands/guns/energy_right_1.dmi differ diff --git a/icons/mob/inhands/guns/energy_right_64.dmi b/icons/mob/inhands/guns/energy_right_64.dmi new file mode 100644 index 0000000000000..9aa5ce4523336 Binary files /dev/null and b/icons/mob/inhands/guns/energy_right_64.dmi differ diff --git a/icons/mob/inhands/guns/machineguns_left_1.dmi b/icons/mob/inhands/guns/machineguns_left_1.dmi new file mode 100644 index 0000000000000..e7bff9b2f654b Binary files /dev/null and b/icons/mob/inhands/guns/machineguns_left_1.dmi differ diff --git a/icons/mob/inhands/guns/machineguns_left_64.dmi b/icons/mob/inhands/guns/machineguns_left_64.dmi new file mode 100644 index 0000000000000..f1d65bc0f4190 Binary files /dev/null and b/icons/mob/inhands/guns/machineguns_left_64.dmi differ diff --git a/icons/mob/inhands/guns/machineguns_right_1.dmi b/icons/mob/inhands/guns/machineguns_right_1.dmi new file mode 100644 index 0000000000000..3b9529351dfc7 Binary files /dev/null and b/icons/mob/inhands/guns/machineguns_right_1.dmi differ diff --git a/icons/mob/inhands/guns/machineguns_right_64.dmi b/icons/mob/inhands/guns/machineguns_right_64.dmi new file mode 100644 index 0000000000000..b9f9148ba6cc0 Binary files /dev/null and b/icons/mob/inhands/guns/machineguns_right_64.dmi differ diff --git a/icons/mob/inhands/guns/marksman_left_1.dmi b/icons/mob/inhands/guns/marksman_left_1.dmi new file mode 100644 index 0000000000000..68ec057a0f0e1 Binary files /dev/null and b/icons/mob/inhands/guns/marksman_left_1.dmi differ diff --git a/icons/mob/inhands/guns/marksman_left_64.dmi b/icons/mob/inhands/guns/marksman_left_64.dmi new file mode 100644 index 0000000000000..101221e26a73f Binary files /dev/null and b/icons/mob/inhands/guns/marksman_left_64.dmi differ diff --git a/icons/mob/inhands/guns/marksman_right_1.dmi b/icons/mob/inhands/guns/marksman_right_1.dmi new file mode 100644 index 0000000000000..71352003e6c39 Binary files /dev/null and b/icons/mob/inhands/guns/marksman_right_1.dmi differ diff --git a/icons/mob/inhands/guns/marksman_right_64.dmi b/icons/mob/inhands/guns/marksman_right_64.dmi new file mode 100644 index 0000000000000..7df069eee7a30 Binary files /dev/null and b/icons/mob/inhands/guns/marksman_right_64.dmi differ diff --git a/icons/mob/inhands/guns/misc_left_1.dmi b/icons/mob/inhands/guns/misc_left_1.dmi new file mode 100644 index 0000000000000..732c221feeca9 Binary files /dev/null and b/icons/mob/inhands/guns/misc_left_1.dmi differ diff --git a/icons/mob/inhands/guns/misc_right_1.dmi b/icons/mob/inhands/guns/misc_right_1.dmi new file mode 100644 index 0000000000000..0b59749f80baa Binary files /dev/null and b/icons/mob/inhands/guns/misc_right_1.dmi differ diff --git a/icons/mob/inhands/guns/pistols_left_1.dmi b/icons/mob/inhands/guns/pistols_left_1.dmi new file mode 100644 index 0000000000000..287d47636a96b Binary files /dev/null and b/icons/mob/inhands/guns/pistols_left_1.dmi differ diff --git a/icons/mob/inhands/guns/pistols_right_1.dmi b/icons/mob/inhands/guns/pistols_right_1.dmi new file mode 100644 index 0000000000000..861a569973ca4 Binary files /dev/null and b/icons/mob/inhands/guns/pistols_right_1.dmi differ diff --git a/icons/mob/inhands/guns/plasma_left_1.dmi b/icons/mob/inhands/guns/plasma_left_1.dmi new file mode 100644 index 0000000000000..b4f0bc7c5b06a Binary files /dev/null and b/icons/mob/inhands/guns/plasma_left_1.dmi differ diff --git a/icons/mob/inhands/guns/plasma_right_1.dmi b/icons/mob/inhands/guns/plasma_right_1.dmi new file mode 100644 index 0000000000000..28c5a59726964 Binary files /dev/null and b/icons/mob/inhands/guns/plasma_right_1.dmi differ diff --git a/icons/mob/inhands/guns/rifles_left_1.dmi b/icons/mob/inhands/guns/rifles_left_1.dmi new file mode 100644 index 0000000000000..26d5d5832dd3d Binary files /dev/null and b/icons/mob/inhands/guns/rifles_left_1.dmi differ diff --git a/icons/mob/inhands/guns/rifles_left_64.dmi b/icons/mob/inhands/guns/rifles_left_64.dmi new file mode 100644 index 0000000000000..6ab248480cf64 Binary files /dev/null and b/icons/mob/inhands/guns/rifles_left_64.dmi differ diff --git a/icons/mob/inhands/guns/rifles_right_1.dmi b/icons/mob/inhands/guns/rifles_right_1.dmi new file mode 100644 index 0000000000000..45a36ddda3ac1 Binary files /dev/null and b/icons/mob/inhands/guns/rifles_right_1.dmi differ diff --git a/icons/mob/inhands/guns/rifles_right_64.dmi b/icons/mob/inhands/guns/rifles_right_64.dmi new file mode 100644 index 0000000000000..69c8f8fd025cc Binary files /dev/null and b/icons/mob/inhands/guns/rifles_right_64.dmi differ diff --git a/icons/mob/inhands/guns/shotguns_left_1.dmi b/icons/mob/inhands/guns/shotguns_left_1.dmi new file mode 100644 index 0000000000000..5bd6a38abef1c Binary files /dev/null and b/icons/mob/inhands/guns/shotguns_left_1.dmi differ diff --git a/icons/mob/inhands/guns/shotguns_right_1.dmi b/icons/mob/inhands/guns/shotguns_right_1.dmi new file mode 100644 index 0000000000000..061566b15e233 Binary files /dev/null and b/icons/mob/inhands/guns/shotguns_right_1.dmi differ diff --git a/icons/mob/inhands/guns/special_left_1.dmi b/icons/mob/inhands/guns/special_left_1.dmi new file mode 100644 index 0000000000000..af6a5c97f8571 Binary files /dev/null and b/icons/mob/inhands/guns/special_left_1.dmi differ diff --git a/icons/mob/inhands/guns/special_left_64.dmi b/icons/mob/inhands/guns/special_left_64.dmi new file mode 100644 index 0000000000000..1338e360d6514 Binary files /dev/null and b/icons/mob/inhands/guns/special_left_64.dmi differ diff --git a/icons/mob/inhands/guns/special_right_1.dmi b/icons/mob/inhands/guns/special_right_1.dmi new file mode 100644 index 0000000000000..2d9e4ac81c970 Binary files /dev/null and b/icons/mob/inhands/guns/special_right_1.dmi differ diff --git a/icons/mob/inhands/guns/special_right_64.dmi b/icons/mob/inhands/guns/special_right_64.dmi new file mode 100644 index 0000000000000..54d8ad8ffe54f Binary files /dev/null and b/icons/mob/inhands/guns/special_right_64.dmi differ diff --git a/icons/mob/inhands/guns/submachineguns_left_1.dmi b/icons/mob/inhands/guns/submachineguns_left_1.dmi new file mode 100644 index 0000000000000..404426f847eb2 Binary files /dev/null and b/icons/mob/inhands/guns/submachineguns_left_1.dmi differ diff --git a/icons/mob/inhands/guns/submachineguns_left_64.dmi b/icons/mob/inhands/guns/submachineguns_left_64.dmi new file mode 100644 index 0000000000000..e76ab7df6db70 Binary files /dev/null and b/icons/mob/inhands/guns/submachineguns_left_64.dmi differ diff --git a/icons/mob/inhands/guns/submachineguns_right_1.dmi b/icons/mob/inhands/guns/submachineguns_right_1.dmi new file mode 100644 index 0000000000000..e0f21d2326878 Binary files /dev/null and b/icons/mob/inhands/guns/submachineguns_right_1.dmi differ diff --git a/icons/mob/inhands/guns/submachineguns_right_64.dmi b/icons/mob/inhands/guns/submachineguns_right_64.dmi new file mode 100644 index 0000000000000..69d8bdbe2d44a Binary files /dev/null and b/icons/mob/inhands/guns/submachineguns_right_64.dmi differ diff --git a/icons/mob/inhands/items/items_left.dmi b/icons/mob/inhands/items/items_left.dmi new file mode 100644 index 0000000000000..5f50ac05e6d67 Binary files /dev/null and b/icons/mob/inhands/items/items_left.dmi differ diff --git a/icons/mob/inhands/items/items_right.dmi b/icons/mob/inhands/items/items_right.dmi new file mode 100644 index 0000000000000..d12197ddde0eb Binary files /dev/null and b/icons/mob/inhands/items/items_right.dmi differ diff --git a/icons/mob/inhands/weapons/grenades_left.dmi b/icons/mob/inhands/weapons/grenades_left.dmi index 74da406e9da36..9829b2acfdf3f 100644 Binary files a/icons/mob/inhands/weapons/grenades_left.dmi and b/icons/mob/inhands/weapons/grenades_left.dmi differ diff --git a/icons/mob/inhands/weapons/grenades_right.dmi b/icons/mob/inhands/weapons/grenades_right.dmi index ad2fc4be6c8d7..73c5aac4ca89d 100644 Binary files a/icons/mob/inhands/weapons/grenades_right.dmi and b/icons/mob/inhands/weapons/grenades_right.dmi differ diff --git a/icons/mob/inhands/weapons/melee_left.dmi b/icons/mob/inhands/weapons/melee_left.dmi index 60cc52873605f..15c08d431fa5d 100644 Binary files a/icons/mob/inhands/weapons/melee_left.dmi and b/icons/mob/inhands/weapons/melee_left.dmi differ diff --git a/icons/mob/inhands/weapons/melee_right.dmi b/icons/mob/inhands/weapons/melee_right.dmi index 833c267927eda..e86f615e721e6 100644 Binary files a/icons/mob/inhands/weapons/melee_right.dmi and b/icons/mob/inhands/weapons/melee_right.dmi differ diff --git a/icons/mob/inhands/weapons/twohanded_left.dmi b/icons/mob/inhands/weapons/twohanded_left.dmi index 7d783cc001ff0..ff16925d03193 100644 Binary files a/icons/mob/inhands/weapons/twohanded_left.dmi and b/icons/mob/inhands/weapons/twohanded_left.dmi differ diff --git a/icons/mob/inhands/weapons/twohanded_right.dmi b/icons/mob/inhands/weapons/twohanded_right.dmi index 2c064018dbc22..60df58b8c01b4 100644 Binary files a/icons/mob/inhands/weapons/twohanded_right.dmi and b/icons/mob/inhands/weapons/twohanded_right.dmi differ diff --git a/icons/mob/items_lefthand_1.dmi b/icons/mob/items_lefthand_1.dmi deleted file mode 100644 index b12cd4688ac9f..0000000000000 Binary files a/icons/mob/items_lefthand_1.dmi and /dev/null differ diff --git a/icons/mob/items_lefthand_64.dmi b/icons/mob/items_lefthand_64.dmi deleted file mode 100644 index dfaf2fa71618b..0000000000000 Binary files a/icons/mob/items_lefthand_64.dmi and /dev/null differ diff --git a/icons/mob/items_righthand_1.dmi b/icons/mob/items_righthand_1.dmi deleted file mode 100644 index 90807694c80da..0000000000000 Binary files a/icons/mob/items_righthand_1.dmi and /dev/null differ diff --git a/icons/mob/items_righthand_64.dmi b/icons/mob/items_righthand_64.dmi deleted file mode 100644 index 1acb91c80e9b5..0000000000000 Binary files a/icons/mob/items_righthand_64.dmi and /dev/null differ diff --git a/icons/mob/landmarks.dmi b/icons/mob/landmarks.dmi index f8bf54231bad9..6d1bc9c5f45a9 100644 Binary files a/icons/mob/landmarks.dmi and b/icons/mob/landmarks.dmi differ diff --git a/icons/mob/modular/capes.dmi b/icons/mob/modular/capes.dmi index ade9cd65208f3..afd2f6df4ca8a 100644 Binary files a/icons/mob/modular/capes.dmi and b/icons/mob/modular/capes.dmi differ diff --git a/icons/mob/modular/capes_highlight.dmi b/icons/mob/modular/capes_highlight.dmi index 40f7fb4de5b25..ab9a2f22ce06d 100644 Binary files a/icons/mob/modular/capes_highlight.dmi and b/icons/mob/modular/capes_highlight.dmi differ diff --git a/icons/mob/modular/mark_one/dashe.dmi b/icons/mob/modular/mark_one/dashe.dmi deleted file mode 100644 index 3b5e3f51d5c23..0000000000000 Binary files a/icons/mob/modular/mark_one/dashe.dmi and /dev/null differ diff --git a/icons/mob/modular/mark_one/hotaru.dmi b/icons/mob/modular/mark_one/hotaru.dmi deleted file mode 100644 index 810e95f308c58..0000000000000 Binary files a/icons/mob/modular/mark_one/hotaru.dmi and /dev/null differ diff --git a/icons/mob/modular/mark_one/kabuto.dmi b/icons/mob/modular/mark_one/kabuto.dmi deleted file mode 100644 index 356335f2d2f40..0000000000000 Binary files a/icons/mob/modular/mark_one/kabuto.dmi and /dev/null differ diff --git a/icons/mob/modular/mark_two/hotaru.dmi b/icons/mob/modular/mark_two/hotaru.dmi deleted file mode 100644 index 0d55f7d22b32f..0000000000000 Binary files a/icons/mob/modular/mark_two/hotaru.dmi and /dev/null differ diff --git a/icons/mob/modular/modular_armor_modules.dmi b/icons/mob/modular/modular_armor_modules.dmi index 4e05bd48d8c1d..84b446822432d 100644 Binary files a/icons/mob/modular/modular_armor_modules.dmi and b/icons/mob/modular/modular_armor_modules.dmi differ diff --git a/icons/mob/modular/modular_helmet_storage.dmi b/icons/mob/modular/modular_helmet_storage.dmi index 7791972761df2..68040937be5ff 100644 Binary files a/icons/mob/modular/modular_helmet_storage.dmi and b/icons/mob/modular/modular_helmet_storage.dmi differ diff --git a/icons/mob/modular/xenonauten.dmi b/icons/mob/modular/xenonauten.dmi index e48968f2d5a4a..f6e4c5566b474 100644 Binary files a/icons/mob/modular/xenonauten.dmi and b/icons/mob/modular/xenonauten.dmi differ diff --git a/icons/mob/psionic_icons.dmi b/icons/mob/psionic_icons.dmi new file mode 100644 index 0000000000000..75b5853dad030 Binary files /dev/null and b/icons/mob/psionic_icons.dmi differ diff --git a/icons/mob/radial.dmi b/icons/mob/radial.dmi index 684d40ff524c6..84577881705d3 100644 Binary files a/icons/mob/radial.dmi and b/icons/mob/radial.dmi differ diff --git a/icons/mob/suit_slot.dmi b/icons/mob/suit_slot.dmi index 9210d66a7597f..27189111f34da 100644 Binary files a/icons/mob/suit_slot.dmi and b/icons/mob/suit_slot.dmi differ diff --git a/icons/obj/aibots.dmi b/icons/obj/aibots.dmi index adfc00d7d12c7..3dbfaae8ecf5a 100644 Binary files a/icons/obj/aibots.dmi and b/icons/obj/aibots.dmi differ diff --git a/icons/obj/airlock_machines.dmi b/icons/obj/airlock_machines.dmi index 52e482dfcf9de..9eb4201e06ca2 100644 Binary files a/icons/obj/airlock_machines.dmi and b/icons/obj/airlock_machines.dmi differ diff --git a/icons/obj/alien_autopsy.dmi b/icons/obj/alien_autopsy.dmi index b8c9a73831d59..59564dab411c0 100644 Binary files a/icons/obj/alien_autopsy.dmi and b/icons/obj/alien_autopsy.dmi differ diff --git a/icons/obj/armored/1x1/tinytank.dmi b/icons/obj/armored/1x1/tinytank.dmi new file mode 100644 index 0000000000000..8f45e78adefee Binary files /dev/null and b/icons/obj/armored/1x1/tinytank.dmi differ diff --git a/icons/obj/armored/1x1/tinytank_gun.dmi b/icons/obj/armored/1x1/tinytank_gun.dmi new file mode 100644 index 0000000000000..83176645615a9 Binary files /dev/null and b/icons/obj/armored/1x1/tinytank_gun.dmi differ diff --git a/icons/obj/armored/2x2/medium_vehicles.dmi b/icons/obj/armored/2x2/medium_vehicles.dmi new file mode 100644 index 0000000000000..f8234bb6c9c23 Binary files /dev/null and b/icons/obj/armored/2x2/medium_vehicles.dmi differ diff --git a/icons/obj/armored/3x3/apc.dmi b/icons/obj/armored/3x3/apc.dmi new file mode 100644 index 0000000000000..536eb9c856a6c Binary files /dev/null and b/icons/obj/armored/3x3/apc.dmi differ diff --git a/icons/obj/armored/3x3/apc_damage_overlay.dmi b/icons/obj/armored/3x3/apc_damage_overlay.dmi new file mode 100644 index 0000000000000..e3da1e1f15f7d Binary files /dev/null and b/icons/obj/armored/3x3/apc_damage_overlay.dmi differ diff --git a/icons/obj/armored/3x3/tank.dmi b/icons/obj/armored/3x3/tank.dmi new file mode 100644 index 0000000000000..07453c2693a3c Binary files /dev/null and b/icons/obj/armored/3x3/tank.dmi differ diff --git a/icons/obj/armored/3x3/tank_damage.dmi b/icons/obj/armored/3x3/tank_damage.dmi new file mode 100644 index 0000000000000..b3e72ab3651dd Binary files /dev/null and b/icons/obj/armored/3x3/tank_damage.dmi differ diff --git a/icons/obj/armored/3x3/tank_gun.dmi b/icons/obj/armored/3x3/tank_gun.dmi new file mode 100644 index 0000000000000..ea90b395d0f37 Binary files /dev/null and b/icons/obj/armored/3x3/tank_gun.dmi differ diff --git a/icons/obj/armored/3x3/tank_interior.dmi b/icons/obj/armored/3x3/tank_interior.dmi new file mode 100644 index 0000000000000..3e3fceb36156d Binary files /dev/null and b/icons/obj/armored/3x3/tank_interior.dmi differ diff --git a/icons/obj/armored/3x3/tank_secondary_gun.dmi b/icons/obj/armored/3x3/tank_secondary_gun.dmi new file mode 100644 index 0000000000000..b4f739db1d735 Binary files /dev/null and b/icons/obj/armored/3x3/tank_secondary_gun.dmi differ diff --git a/icons/obj/armored/hardpoint_modules.dmi b/icons/obj/armored/hardpoint_modules.dmi new file mode 100644 index 0000000000000..46ea9700aebc1 Binary files /dev/null and b/icons/obj/armored/hardpoint_modules.dmi differ diff --git a/icons/obj/bodybag.dmi b/icons/obj/bodybag.dmi index 1649427cee582..dd3f040882f97 100644 Binary files a/icons/obj/bodybag.dmi and b/icons/obj/bodybag.dmi differ diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index 333934ded88f0..c46d88d372c53 100644 Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index eec4a84ca95ee..8e21314a32a6f 100644 Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ diff --git a/icons/obj/clothing/headwear/ert_headwear.dmi b/icons/obj/clothing/headwear/ert_headwear.dmi index 47083844073a0..bc088487a2130 100644 Binary files a/icons/obj/clothing/headwear/ert_headwear.dmi and b/icons/obj/clothing/headwear/ert_headwear.dmi differ diff --git a/icons/obj/clothing/headwear/marine_helmets.dmi b/icons/obj/clothing/headwear/marine_helmets.dmi index 9c9d6958a1a57..6ada7495cddab 100644 Binary files a/icons/obj/clothing/headwear/marine_helmets.dmi and b/icons/obj/clothing/headwear/marine_helmets.dmi differ diff --git a/icons/obj/clothing/suits/ert_suits.dmi b/icons/obj/clothing/suits/ert_suits.dmi index 6db0c53154ca3..01015de8984eb 100644 Binary files a/icons/obj/clothing/suits/ert_suits.dmi and b/icons/obj/clothing/suits/ert_suits.dmi differ diff --git a/icons/obj/clothing/suits/marine_armor.dmi b/icons/obj/clothing/suits/marine_armor.dmi index 86d9611aca718..d06e58edfcff5 100644 Binary files a/icons/obj/clothing/suits/marine_armor.dmi and b/icons/obj/clothing/suits/marine_armor.dmi differ diff --git a/icons/obj/clothing/uniforms/marine_uniforms.dmi b/icons/obj/clothing/uniforms/marine_uniforms.dmi index 6de49e13aea85..fa9501f972f0c 100644 Binary files a/icons/obj/clothing/uniforms/marine_uniforms.dmi and b/icons/obj/clothing/uniforms/marine_uniforms.dmi differ diff --git a/icons/obj/contraband.dmi b/icons/obj/contraband.dmi index cfa1b8301ae57..03c9902fa26be 100644 Binary files a/icons/obj/contraband.dmi and b/icons/obj/contraband.dmi differ diff --git a/icons/obj/cryobag.dmi b/icons/obj/cryobag.dmi index b6f6f2fb84f55..8154f75e53924 100644 Binary files a/icons/obj/cryobag.dmi and b/icons/obj/cryobag.dmi differ diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi index fa65d40f30172..38ea1433dd190 100644 Binary files a/icons/obj/decals.dmi and b/icons/obj/decals.dmi differ diff --git a/icons/obj/decals_arrow.dmi b/icons/obj/decals_arrow.dmi index a09fcc9396851..ebd16f9d42cc4 100644 Binary files a/icons/obj/decals_arrow.dmi and b/icons/obj/decals_arrow.dmi differ diff --git a/icons/obj/det.dmi b/icons/obj/det.dmi index fb6635eeaedb0..04015e4c52004 100644 Binary files a/icons/obj/det.dmi and b/icons/obj/det.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 68f9d281fde01..6c66dc78b93f7 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/doors/overlays.dmi b/icons/obj/doors/overlays.dmi new file mode 100755 index 0000000000000..55ae45e787c71 Binary files /dev/null and b/icons/obj/doors/overlays.dmi differ diff --git a/icons/obj/factory_refill.dmi b/icons/obj/factory_refill.dmi deleted file mode 100644 index 63bc38cfa71c7..0000000000000 Binary files a/icons/obj/factory_refill.dmi and /dev/null differ diff --git a/icons/obj/fuel_pad.dmi b/icons/obj/fuel_pad.dmi deleted file mode 100644 index f01dd37de882a..0000000000000 Binary files a/icons/obj/fuel_pad.dmi and /dev/null differ diff --git a/icons/obj/inflatable.dmi b/icons/obj/inflatable.dmi index 512954f1756ed..3db2072f2ff28 100644 Binary files a/icons/obj/inflatable.dmi and b/icons/obj/inflatable.dmi differ diff --git a/icons/obj/items/ammo.dmi b/icons/obj/items/ammo.dmi index 9680961c5f5c7..548309e64c663 100644 Binary files a/icons/obj/items/ammo.dmi and b/icons/obj/items/ammo.dmi differ diff --git a/icons/obj/items/grenade.dmi b/icons/obj/items/grenade.dmi index 44fb86f30fa9b..af815f9f2c302 100644 Binary files a/icons/obj/items/grenade.dmi and b/icons/obj/items/grenade.dmi differ diff --git a/icons/obj/items/gun.dmi b/icons/obj/items/gun.dmi deleted file mode 100644 index c5b041053a51e..0000000000000 Binary files a/icons/obj/items/gun.dmi and /dev/null differ diff --git a/icons/obj/items/guns/energy.dmi b/icons/obj/items/guns/energy.dmi new file mode 100644 index 0000000000000..a4707be1a04a1 Binary files /dev/null and b/icons/obj/items/guns/energy.dmi differ diff --git a/icons/obj/items/guns/energy64.dmi b/icons/obj/items/guns/energy64.dmi new file mode 100644 index 0000000000000..0bf7ed28d30ac Binary files /dev/null and b/icons/obj/items/guns/energy64.dmi differ diff --git a/icons/obj/items/guns/machineguns.dmi b/icons/obj/items/guns/machineguns.dmi new file mode 100644 index 0000000000000..4557d055422fc Binary files /dev/null and b/icons/obj/items/guns/machineguns.dmi differ diff --git a/icons/obj/items/guns/machineguns64.dmi b/icons/obj/items/guns/machineguns64.dmi new file mode 100644 index 0000000000000..7f9db29fac100 Binary files /dev/null and b/icons/obj/items/guns/machineguns64.dmi differ diff --git a/icons/obj/items/guns/marksman.dmi b/icons/obj/items/guns/marksman.dmi new file mode 100644 index 0000000000000..add8faf4001c0 Binary files /dev/null and b/icons/obj/items/guns/marksman.dmi differ diff --git a/icons/obj/items/guns/marksman64.dmi b/icons/obj/items/guns/marksman64.dmi new file mode 100644 index 0000000000000..83899121b3ef1 Binary files /dev/null and b/icons/obj/items/guns/marksman64.dmi differ diff --git a/icons/obj/items/guns/pistols.dmi b/icons/obj/items/guns/pistols.dmi new file mode 100644 index 0000000000000..e40a1b626234a Binary files /dev/null and b/icons/obj/items/guns/pistols.dmi differ diff --git a/icons/obj/items/guns/pistols64.dmi b/icons/obj/items/guns/pistols64.dmi new file mode 100644 index 0000000000000..c768585a16c56 Binary files /dev/null and b/icons/obj/items/guns/pistols64.dmi differ diff --git a/icons/obj/items/guns/plasma64.dmi b/icons/obj/items/guns/plasma64.dmi new file mode 100644 index 0000000000000..9575268df34af Binary files /dev/null and b/icons/obj/items/guns/plasma64.dmi differ diff --git a/icons/obj/items/guns/rifles.dmi b/icons/obj/items/guns/rifles.dmi new file mode 100644 index 0000000000000..73e4252ae94f2 Binary files /dev/null and b/icons/obj/items/guns/rifles.dmi differ diff --git a/icons/obj/items/guns/rifles64.dmi b/icons/obj/items/guns/rifles64.dmi new file mode 100644 index 0000000000000..6439add95a500 Binary files /dev/null and b/icons/obj/items/guns/rifles64.dmi differ diff --git a/icons/obj/items/guns/shotguns.dmi b/icons/obj/items/guns/shotguns.dmi new file mode 100644 index 0000000000000..7c655a2a5b9a6 Binary files /dev/null and b/icons/obj/items/guns/shotguns.dmi differ diff --git a/icons/obj/items/guns/shotguns64.dmi b/icons/obj/items/guns/shotguns64.dmi new file mode 100644 index 0000000000000..63d39913d8680 Binary files /dev/null and b/icons/obj/items/guns/shotguns64.dmi differ diff --git a/icons/obj/items/guns/special.dmi b/icons/obj/items/guns/special.dmi new file mode 100644 index 0000000000000..6d3305c0bdff1 Binary files /dev/null and b/icons/obj/items/guns/special.dmi differ diff --git a/icons/obj/items/guns/special64.dmi b/icons/obj/items/guns/special64.dmi new file mode 100644 index 0000000000000..7f3905dd3a435 Binary files /dev/null and b/icons/obj/items/guns/special64.dmi differ diff --git a/icons/obj/items/guns/submachineguns.dmi b/icons/obj/items/guns/submachineguns.dmi new file mode 100644 index 0000000000000..fc22d8b5c7489 Binary files /dev/null and b/icons/obj/items/guns/submachineguns.dmi differ diff --git a/icons/obj/items/guns/submachineguns64.dmi b/icons/obj/items/guns/submachineguns64.dmi new file mode 100644 index 0000000000000..0933df637d15d Binary files /dev/null and b/icons/obj/items/guns/submachineguns64.dmi differ diff --git a/icons/obj/items/implants.dmi b/icons/obj/items/implants.dmi index 92b8042c0a880..d62df7e0a4eec 100644 Binary files a/icons/obj/items/implants.dmi and b/icons/obj/items/implants.dmi differ diff --git a/icons/obj/items/items.dmi b/icons/obj/items/items.dmi index 86a088cfeec08..e96dbe5bcfef1 100644 Binary files a/icons/obj/items/items.dmi and b/icons/obj/items/items.dmi differ diff --git a/icons/obj/items/items_mini.dmi b/icons/obj/items/items_mini.dmi index fa104376f5ca9..25f6d064f22f5 100644 Binary files a/icons/obj/items/items_mini.dmi and b/icons/obj/items/items_mini.dmi differ diff --git a/icons/obj/items/projectiles.dmi b/icons/obj/items/projectiles.dmi index 14df0f23a9473..05be8edb6754e 100644 Binary files a/icons/obj/items/projectiles.dmi and b/icons/obj/items/projectiles.dmi differ diff --git a/icons/obj/items/radio.dmi b/icons/obj/items/radio.dmi index 2d2e20cf62c6e..2755744fc2e92 100644 Binary files a/icons/obj/items/radio.dmi and b/icons/obj/items/radio.dmi differ diff --git a/icons/obj/items/storage/storage.dmi b/icons/obj/items/storage/storage.dmi index 3c40c2297cd3b..751b10be63552 100644 Binary files a/icons/obj/items/storage/storage.dmi and b/icons/obj/items/storage/storage.dmi differ diff --git a/icons/obj/items/storage/storage_boxes.dmi b/icons/obj/items/storage/storage_boxes.dmi index 602abbcd7a721..e04eb5239031a 100644 Binary files a/icons/obj/items/storage/storage_boxes.dmi and b/icons/obj/items/storage/storage_boxes.dmi differ diff --git a/icons/obj/items/surgery_tools.dmi b/icons/obj/items/surgery_tools.dmi index 7256322e703ae..ed66a84eb4b52 100644 Binary files a/icons/obj/items/surgery_tools.dmi and b/icons/obj/items/surgery_tools.dmi differ diff --git a/icons/obj/items/tools.dmi b/icons/obj/items/tools.dmi index 5d7231f21d2c6..1f50759a3dcb4 100644 Binary files a/icons/obj/items/tools.dmi and b/icons/obj/items/tools.dmi differ diff --git a/icons/obj/items/vali.dmi b/icons/obj/items/vali.dmi index a7c3091989c7e..d46908ea44ce4 100644 Binary files a/icons/obj/items/vali.dmi and b/icons/obj/items/vali.dmi differ diff --git a/icons/obj/items/weapons.dmi b/icons/obj/items/weapons.dmi index 5e8f6b63d92e7..c56703392f86a 100644 Binary files a/icons/obj/items/weapons.dmi and b/icons/obj/items/weapons.dmi differ diff --git a/icons/obj/items/weapons64.dmi b/icons/obj/items/weapons64.dmi index 6279d15ffb4cb..7953d7c4e88b0 100644 Binary files a/icons/obj/items/weapons64.dmi and b/icons/obj/items/weapons64.dmi differ diff --git a/icons/obj/iv_drip.dmi b/icons/obj/iv_drip.dmi index e007c7d13ef95..6530974383fc1 100644 Binary files a/icons/obj/iv_drip.dmi and b/icons/obj/iv_drip.dmi differ diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi index d1fcd28acd0e2..757312db95720 100644 Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ diff --git a/icons/obj/jet_fuel_tank.dmi b/icons/obj/jet_fuel_tank.dmi deleted file mode 100644 index f5750c99acbe3..0000000000000 Binary files a/icons/obj/jet_fuel_tank.dmi and /dev/null differ diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index 9b9e2e529e991..60dae0d5fecbd 100644 Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi index ce6d9e573b96c..a85e0a64b5db9 100644 Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ diff --git a/icons/obj/machines/suit_cycler.dmi b/icons/obj/machines/suit_cycler.dmi new file mode 100644 index 0000000000000..0d3ed214c0400 Binary files /dev/null and b/icons/obj/machines/suit_cycler.dmi differ diff --git a/icons/obj/machines/vending.dmi b/icons/obj/machines/vending.dmi index a8487eb9c6e88..01a5f1e0552e6 100644 Binary files a/icons/obj/machines/vending.dmi and b/icons/obj/machines/vending.dmi differ diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi index 25ed94239ea91..da763d6d00b2a 100644 Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ diff --git a/icons/obj/musician.dmi b/icons/obj/musician.dmi index 4a8fa9291ebe8..b563e5e60340d 100644 Binary files a/icons/obj/musician.dmi and b/icons/obj/musician.dmi differ diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index fd17f85ef5108..f0702ab2ec9a3 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ diff --git a/icons/obj/perspective_fences.dmi b/icons/obj/perspective_fences.dmi deleted file mode 100644 index 1bd45bec0c2aa..0000000000000 Binary files a/icons/obj/perspective_fences.dmi and /dev/null differ diff --git a/icons/obj/pipes.dmi b/icons/obj/pipes.dmi index ed5558e47e35c..da036c553b6f7 100644 Binary files a/icons/obj/pipes.dmi and b/icons/obj/pipes.dmi differ diff --git a/icons/obj/power_cond_white.dmi b/icons/obj/power_cond_white.dmi deleted file mode 100644 index 94489cc3e8705..0000000000000 Binary files a/icons/obj/power_cond_white.dmi and /dev/null differ diff --git a/icons/obj/recycling.dmi b/icons/obj/recycling.dmi index 57260af0f7db5..1635c50612fef 100644 Binary files a/icons/obj/recycling.dmi and b/icons/obj/recycling.dmi differ diff --git a/icons/obj/rollerbed.dmi b/icons/obj/rollerbed.dmi index 1e3e2e22934aa..8a1b29f26ebde 100644 Binary files a/icons/obj/rollerbed.dmi and b/icons/obj/rollerbed.dmi differ diff --git a/icons/obj/safety_signs.dmi b/icons/obj/safety_signs.dmi index 74f362e6c9c8c..0d2ed38ed2b44 100644 Binary files a/icons/obj/safety_signs.dmi and b/icons/obj/safety_signs.dmi differ diff --git a/icons/obj/safety_signs_arrow.dmi b/icons/obj/safety_signs_arrow.dmi index 29550ee8e0180..0e21f8b608112 100644 Binary files a/icons/obj/safety_signs_arrow.dmi and b/icons/obj/safety_signs_arrow.dmi differ diff --git a/icons/obj/smooth_objects/chigusa_window.dmi b/icons/obj/smooth_objects/chigusa_window.dmi index 7e8f7a20bf826..7e1e6f4f17911 100644 Binary files a/icons/obj/smooth_objects/chigusa_window.dmi and b/icons/obj/smooth_objects/chigusa_window.dmi differ diff --git a/icons/obj/smooth_objects/prison_rwindow.dmi b/icons/obj/smooth_objects/prison_rwindow.dmi index 3d4954207132c..d800945bc5b42 100644 Binary files a/icons/obj/smooth_objects/prison_rwindow.dmi and b/icons/obj/smooth_objects/prison_rwindow.dmi differ diff --git a/icons/obj/stack_objects.dmi b/icons/obj/stack_objects.dmi index 72873f3142fa9..f6eb551e74734 100644 Binary files a/icons/obj/stack_objects.dmi and b/icons/obj/stack_objects.dmi differ diff --git a/icons/obj/structures/stairs.dmi b/icons/obj/structures/stairs.dmi index c8aec613b8b5c..60cf87c10401b 100644 Binary files a/icons/obj/structures/stairs.dmi and b/icons/obj/structures/stairs.dmi differ diff --git a/icons/obj/structures/train.dmi b/icons/obj/structures/train.dmi index e742775cbd0b4..d1e0d5a54579b 100644 Binary files a/icons/obj/structures/train.dmi and b/icons/obj/structures/train.dmi differ diff --git a/icons/obj/vehicles/hardpoint_modules.dmi b/icons/obj/vehicles/hardpoint_modules.dmi deleted file mode 100644 index 0c720a9237c04..0000000000000 Binary files a/icons/obj/vehicles/hardpoint_modules.dmi and /dev/null differ diff --git a/icons/obj/vehicles/tank_EW.dmi b/icons/obj/vehicles/tank_EW.dmi deleted file mode 100644 index ff984a6abb1e7..0000000000000 Binary files a/icons/obj/vehicles/tank_EW.dmi and /dev/null differ diff --git a/icons/obj/vehicles/tank_NS.dmi b/icons/obj/vehicles/tank_NS.dmi deleted file mode 100644 index a709c718c331d..0000000000000 Binary files a/icons/obj/vehicles/tank_NS.dmi and /dev/null differ diff --git a/icons/obj/wallframes.dmi b/icons/obj/wallframes.dmi index 63f70d53423c1..d9fa1bbb38915 100644 Binary files a/icons/obj/wallframes.dmi and b/icons/obj/wallframes.dmi differ diff --git a/icons/obj/watercloset.dmi b/icons/obj/watercloset.dmi index 17e5f89fae261..d94c8f9cef518 100644 Binary files a/icons/obj/watercloset.dmi and b/icons/obj/watercloset.dmi differ diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi index 8622a7299e844..eed2d031abe44 100644 Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ diff --git a/icons/turf/dropship.dmi b/icons/turf/dropship.dmi index dbd3d5e301d76..4e361c023ec46 100644 Binary files a/icons/turf/dropship.dmi and b/icons/turf/dropship.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index e73ada5692526..ff96565e7b513 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/icons/turf/floors/asphalt-regular.dmi b/icons/turf/floors/asphalt-regular.dmi new file mode 100644 index 0000000000000..947335b5b0dce Binary files /dev/null and b/icons/turf/floors/asphalt-regular.dmi differ diff --git a/icons/turf/floors/asphalt-sunbleached.dmi b/icons/turf/floors/asphalt-sunbleached.dmi new file mode 100644 index 0000000000000..842f213d156a0 Binary files /dev/null and b/icons/turf/floors/asphalt-sunbleached.dmi differ diff --git a/icons/turf/floors/basalt-dirt.dmi b/icons/turf/floors/basalt-dirt.dmi index 50f1ab66530b1..abd56eb455897 100644 Binary files a/icons/turf/floors/basalt-dirt.dmi and b/icons/turf/floors/basalt-dirt.dmi differ diff --git a/icons/turf/floors/carpet.dmi b/icons/turf/floors/carpet.dmi index 5e98790d2b9c0..c4e108ddbc63d 100644 Binary files a/icons/turf/floors/carpet.dmi and b/icons/turf/floors/carpet.dmi differ diff --git a/icons/turf/floors/carpet_black.dmi b/icons/turf/floors/carpet_black.dmi new file mode 100644 index 0000000000000..7df942035adc4 Binary files /dev/null and b/icons/turf/floors/carpet_black.dmi differ diff --git a/icons/turf/floors/carpet_blue.dmi b/icons/turf/floors/carpet_blue.dmi new file mode 100644 index 0000000000000..6eea31902c8d2 Binary files /dev/null and b/icons/turf/floors/carpet_blue.dmi differ diff --git a/icons/turf/floors/carpet_cyan.dmi b/icons/turf/floors/carpet_cyan.dmi new file mode 100644 index 0000000000000..fa38993c5ceeb Binary files /dev/null and b/icons/turf/floors/carpet_cyan.dmi differ diff --git a/icons/turf/floors/carpet_green.dmi b/icons/turf/floors/carpet_green.dmi new file mode 100644 index 0000000000000..49daef00acd02 Binary files /dev/null and b/icons/turf/floors/carpet_green.dmi differ diff --git a/icons/turf/floors/carpet_orange.dmi b/icons/turf/floors/carpet_orange.dmi new file mode 100644 index 0000000000000..0ee9b56e8b09c Binary files /dev/null and b/icons/turf/floors/carpet_orange.dmi differ diff --git a/icons/turf/floors/carpet_purple.dmi b/icons/turf/floors/carpet_purple.dmi new file mode 100644 index 0000000000000..a00c1621d3881 Binary files /dev/null and b/icons/turf/floors/carpet_purple.dmi differ diff --git a/icons/turf/floors/carpet_red.dmi b/icons/turf/floors/carpet_red.dmi new file mode 100644 index 0000000000000..dbd5f889e76d5 Binary files /dev/null and b/icons/turf/floors/carpet_red.dmi differ diff --git a/icons/turf/floors/carpet_royalblack.dmi b/icons/turf/floors/carpet_royalblack.dmi new file mode 100644 index 0000000000000..296b7b683fd0b Binary files /dev/null and b/icons/turf/floors/carpet_royalblack.dmi differ diff --git a/icons/turf/floors/cave-basalt.dmi b/icons/turf/floors/cave-basalt.dmi index dee1804dffbbd..5c9f34cd0d734 100644 Binary files a/icons/turf/floors/cave-basalt.dmi and b/icons/turf/floors/cave-basalt.dmi differ diff --git a/icons/turf/floors/chasms.dmi b/icons/turf/floors/chasms.dmi new file mode 100644 index 0000000000000..d37fa7d50c647 Binary files /dev/null and b/icons/turf/floors/chasms.dmi differ diff --git a/icons/turf/floors/glass.dmi b/icons/turf/floors/glass.dmi new file mode 100644 index 0000000000000..ae840919f6e5d Binary files /dev/null and b/icons/turf/floors/glass.dmi differ diff --git a/icons/turf/floors/jungle-border.dmi b/icons/turf/floors/jungle-border.dmi index 860a09d9c3b91..6acb365689502 100644 Binary files a/icons/turf/floors/jungle-border.dmi and b/icons/turf/floors/jungle-border.dmi differ diff --git a/icons/turf/floors/jungle-dirt-border.dmi b/icons/turf/floors/jungle-dirt-border.dmi index 4589eefec1700..96fb32717fd7d 100644 Binary files a/icons/turf/floors/jungle-dirt-border.dmi and b/icons/turf/floors/jungle-dirt-border.dmi differ diff --git a/icons/turf/floors/junglechasm.dmi b/icons/turf/floors/junglechasm.dmi new file mode 100644 index 0000000000000..c50775c91b1c2 Binary files /dev/null and b/icons/turf/floors/junglechasm.dmi differ diff --git a/icons/turf/floors/lava.dmi b/icons/turf/floors/lava.dmi index f0e2322d41a28..e86882c623038 100644 Binary files a/icons/turf/floors/lava.dmi and b/icons/turf/floors/lava.dmi differ diff --git a/icons/turf/floors/plasma_glass.dmi b/icons/turf/floors/plasma_glass.dmi new file mode 100644 index 0000000000000..a0e2dd20b796c Binary files /dev/null and b/icons/turf/floors/plasma_glass.dmi differ diff --git a/icons/turf/floors/red-dirt.dmi b/icons/turf/floors/red-dirt.dmi index 58d127a917462..4c18a06f28188 100644 Binary files a/icons/turf/floors/red-dirt.dmi and b/icons/turf/floors/red-dirt.dmi differ diff --git a/icons/turf/floors/reinf_glass.dmi b/icons/turf/floors/reinf_glass.dmi index 97614f510f745..a51849e547390 100644 Binary files a/icons/turf/floors/reinf_glass.dmi and b/icons/turf/floors/reinf_glass.dmi differ diff --git a/icons/turf/floors/reinf_plasma_glass.dmi b/icons/turf/floors/reinf_plasma_glass.dmi new file mode 100644 index 0000000000000..31c1c339c37d3 Binary files /dev/null and b/icons/turf/floors/reinf_plasma_glass.dmi differ diff --git a/icons/turf/floors/river.dmi b/icons/turf/floors/river.dmi index 8c44a4e0e5a40..fa071b078ed71 100644 Binary files a/icons/turf/floors/river.dmi and b/icons/turf/floors/river.dmi differ diff --git a/icons/turf/mainship.dmi b/icons/turf/mainship.dmi index 837a20f9208e4..cb07b43109f49 100644 Binary files a/icons/turf/mainship.dmi and b/icons/turf/mainship.dmi differ diff --git a/icons/turf/prison.dmi b/icons/turf/prison.dmi index 1ab26777506f0..6237b7d5096a8 100644 Binary files a/icons/turf/prison.dmi and b/icons/turf/prison.dmi differ diff --git a/icons/turf/shuttle.dmi b/icons/turf/shuttle.dmi index 4abe371009bcf..9af4987cf314c 100644 Binary files a/icons/turf/shuttle.dmi and b/icons/turf/shuttle.dmi differ diff --git a/icons/turf/snow2.dmi b/icons/turf/snow2.dmi index 24f6fc5b0bdb6..501434e063093 100644 Binary files a/icons/turf/snow2.dmi and b/icons/turf/snow2.dmi differ diff --git a/icons/turf/walls.dmi b/icons/turf/walls.dmi index a51d49c0fffb4..62a87e2c1d0df 100644 Binary files a/icons/turf/walls.dmi and b/icons/turf/walls.dmi differ diff --git a/icons/turf/walls/basaltwall.dmi b/icons/turf/walls/basaltwall.dmi new file mode 100644 index 0000000000000..67d59d9d6ca5a Binary files /dev/null and b/icons/turf/walls/basaltwall.dmi differ diff --git a/icons/unused/Marine_Research.dmi b/icons/unused/Marine_Research.dmi deleted file mode 100644 index 3c8d350981023..0000000000000 Binary files a/icons/unused/Marine_Research.dmi and /dev/null differ diff --git a/icons/unused/xmas.dmi b/icons/unused/xmas.dmi deleted file mode 100644 index 9669a6034b9c8..0000000000000 Binary files a/icons/unused/xmas.dmi and /dev/null differ diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index db11b821f1c74..02aad2e277cd9 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -234,4 +234,5 @@ h1.alert, h2.alert {color: #000000;} .text-normal {font-weight: normal; font-style: normal;} .hidden {display: none; visibility: hidden;} +.upside_down {display: inline; -moz-transform: scale(-1, -1); -webkit-transform: scale(-1, -1); -o-transform: scale(-1, -1); -ms-transform: scale(-1, -1); transform: scale(-1, -1);} "} diff --git a/modular_RUtgmc/code/__HELPERS/matrices.dm b/modular_RUtgmc/code/__HELPERS/matrices.dm index 839568c0c5efc..bee91ca0bbf73 100644 --- a/modular_RUtgmc/code/__HELPERS/matrices.dm +++ b/modular_RUtgmc/code/__HELPERS/matrices.dm @@ -1,19 +1,3 @@ -//word of warning: using a matrix like this as a color value will simplify it back to a string after being set -/proc/color_hex2color_matrix(string) - var/length = length(string) - if((length != 7 && length != 9) || length != length_char(string)) - return color_matrix_identity() - var/r = hex2num(copytext(string, 2, 4))/255 - var/g = hex2num(copytext(string, 4, 6))/255 - var/b = hex2num(copytext(string, 6, 8))/255 - var/a = 1 - if(length == 9) - a = hex2num(copytext(string, 8, 10))/255 - if(!isnum(r) || !isnum(g) || !isnum(b) || !isnum(a)) - return color_matrix_identity() - return list(r, 0, 0, 0, 0, g, 0, 0, 0, 0, b, 0, 0, 0, 0, a, 0, 0, 0, 0) - - ///Converts a hex color string to a color matrix. /proc/color_matrix_from_string(string) if(!string || !istext(string)) diff --git a/modular_RUtgmc/code/_globalvars/lists/flavor_misc.dm b/modular_RUtgmc/code/_globalvars/lists/flavor_misc.dm index 38058baae9050..5c01be3235a9a 100644 --- a/modular_RUtgmc/code/_globalvars/lists/flavor_misc.dm +++ b/modular_RUtgmc/code/_globalvars/lists/flavor_misc.dm @@ -74,11 +74,3 @@ GLOBAL_LIST_INIT(ethnicities_list, init_ethnicities()) for(var/path in subtypesof(/datum/sprite_accessory/yautja_hair)) var/datum/sprite_accessory/yautja_hair/H = new path() GLOB.yautja_hair_styles_list[H.name] = H - - -GLOBAL_LIST_INIT(minimap_icons, init_minimap_icons()) - -/proc/init_minimap_icons() - . = list() - for(var/icon_state in GLOB.playable_icons) - .[icon_state] = icon2base64(icon('modular_RUtgmc/icons/UI_icons/map_blips.dmi', icon_state, frame = 1)) //RUTGMC edit - icon change diff --git a/modular_RUtgmc/code/_globalvars/lists/mobs.dm b/modular_RUtgmc/code/_globalvars/lists/mobs.dm index c58e4faec267e..09903a9c0782d 100644 --- a/modular_RUtgmc/code/_globalvars/lists/mobs.dm +++ b/modular_RUtgmc/code/_globalvars/lists/mobs.dm @@ -52,7 +52,7 @@ GLOBAL_LIST_INIT(all_xeno_types, list( )) GLOBAL_LIST_INIT(xeno_types_tier_two, list(/mob/living/carbon/xenomorph/hunter, /mob/living/carbon/xenomorph/panther, /mob/living/carbon/xenomorph/warrior, /mob/living/carbon/xenomorph/spitter, /mob/living/carbon/xenomorph/hivelord, /mob/living/carbon/xenomorph/carrier, /mob/living/carbon/xenomorph/bull)) -GLOBAL_LIST_INIT(xeno_types_tier_three, list(/mob/living/carbon/xenomorph/gorger, /mob/living/carbon/xenomorph/ravager, /mob/living/carbon/xenomorph/praetorian, /mob/living/carbon/xenomorph/boiler, /mob/living/carbon/xenomorph/defiler, /mob/living/carbon/xenomorph/crusher, /mob/living/carbon/xenomorph/shrike, /mob/living/carbon/xenomorph/behemoth, /mob/living/carbon/xenomorph/chimera)) +GLOBAL_LIST_INIT(xeno_types_tier_three, list(/mob/living/carbon/xenomorph/gorger, /mob/living/carbon/xenomorph/ravager, /mob/living/carbon/xenomorph/praetorian, /mob/living/carbon/xenomorph/boiler, /mob/living/carbon/xenomorph/defiler, /mob/living/carbon/xenomorph/crusher, /mob/living/carbon/xenomorph/shrike, /mob/living/carbon/xenomorph/behemoth, /mob/living/carbon/xenomorph/chimera, /mob/living/carbon/xenomorph/warlock)) GLOBAL_LIST_INIT(forbid_excepts, list( /mob/living/carbon/xenomorph/king, @@ -60,6 +60,7 @@ GLOBAL_LIST_INIT(forbid_excepts, list( /mob/living/carbon/xenomorph/shrike, /mob/living/carbon/xenomorph/larva, /mob/living/carbon/xenomorph/drone, + /mob/living/carbon/xenomorph/hivemind, )) GLOBAL_LIST_EMPTY_TYPED(hellhound_list, /mob/living/carbon/xenomorph/hellhound) diff --git a/modular_RUtgmc/code/_onclick/hud/xeno/xeno.dm b/modular_RUtgmc/code/_onclick/hud/xeno/xeno.dm index ad5e4314e5ff6..783edd7a7ebdb 100644 --- a/modular_RUtgmc/code/_onclick/hud/xeno/xeno.dm +++ b/modular_RUtgmc/code/_onclick/hud/xeno/xeno.dm @@ -31,10 +31,10 @@ /datum/hud/alien/New(mob/living/carbon/xenomorph/owner, ui_style, ui_color, ui_alpha = 230) ..() - alien_evolve_display = new /atom/movable/screen/alien/evolvehud() + alien_evolve_display = new /atom/movable/screen/alien/evolvehud(null, src) alien_evolve_display.alpha = ui_alpha infodisplay += alien_evolve_display - alien_sunder_display = new /atom/movable/screen/alien/sunderhud() + alien_sunder_display = new /atom/movable/screen/alien/sunderhud(null, src) alien_sunder_display.alpha = ui_alpha infodisplay += alien_sunder_display diff --git a/modular_RUtgmc/code/_onclick/xeno.dm b/modular_RUtgmc/code/_onclick/xeno.dm index 245957c29aa5d..fa823a857a90a 100644 --- a/modular_RUtgmc/code/_onclick/xeno.dm +++ b/modular_RUtgmc/code/_onclick/xeno.dm @@ -14,5 +14,5 @@ GLOB.round_statistics.xeno_unarmed_attacks++ SSblackbox.record_feedback("tally", "round_statistics", 1, "xeno_unarmed_attacks") -/atom/proc/attack_facehugger(mob/living/carbon/xenomorph/facehugger/F, damage_amount = F.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) +/atom/proc/attack_facehugger(mob/living/carbon/xenomorph/facehugger/facehugger_attacker, damage_amount = facehugger_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = facehugger_attacker.xeno_caste.melee_ap, isrightclick = FALSE) return diff --git a/modular_RUtgmc/code/datums/actions/observer_action.dm b/modular_RUtgmc/code/datums/actions/observer_action.dm index 55f67172f0dd3..968376a561ded 100644 --- a/modular_RUtgmc/code/datums/actions/observer_action.dm +++ b/modular_RUtgmc/code/datums/actions/observer_action.dm @@ -71,13 +71,13 @@ if(!(GLOB.roles_whitelist[owner_ckey] & WHITELIST_PREDATOR)) return - if(!SSticker.mode || !(SSticker.mode.flags_round_type & MODE_PREDATOR)) + if(!SSticker.mode || !(SSticker.mode.round_type_flags & MODE_PREDATOR)) RegisterSignal(SSdcs, COMSIG_GLOB_PREDATOR_ROUND_TOGGLED, PROC_REF(handle_button_status_visuals)) . = ..() /datum/action/observer_action/join_predator/can_use_action() - if(!SSticker.mode || !(SSticker.mode.flags_round_type & MODE_PREDATOR)) + if(!SSticker.mode || !(SSticker.mode.round_type_flags & MODE_PREDATOR)) return FALSE return TRUE diff --git a/modular_RUtgmc/code/datums/gamemodes/_game_mode.dm b/modular_RUtgmc/code/datums/gamemodes/_game_mode.dm index e8b121c9550fc..5cf6e11232cb3 100644 --- a/modular_RUtgmc/code/datums/gamemodes/_game_mode.dm +++ b/modular_RUtgmc/code/datums/gamemodes/_game_mode.dm @@ -13,7 +13,7 @@ blacklist_ground_maps = list(MAP_DELTA_STATION, MAP_WHISKEY_OUTPOST, MAP_OSCAR_OUTPOST, MAP_FORT_PHOBOS) /datum/game_mode/post_setup() - if(flags_round_type & MODE_SILO_RESPAWN) + if(round_type_flags & MODE_SILO_RESPAWN) var/datum/hive_status/normal/HN = GLOB.hive_datums[XENO_HIVE_NORMAL] HN.RegisterSignals(SSdcs, list(COMSIG_GLOB_OPEN_TIMED_SHUTTERS_LATE, COMSIG_GLOB_OPEN_SHUTTERS_EARLY), TYPE_PROC_REF(/datum/hive_status/normal, set_siloless_collapse_timer)) return ..() @@ -52,7 +52,7 @@ var/new_pred_max = min(max(round(length(GLOB.clients) * PREDATOR_TO_TOTAL_SPAWN_RATIO), 1), 4) PJ.total_positions = new_pred_max PJ.max_positions = new_pred_max - flags_round_type |= MODE_PREDATOR + round_type_flags |= MODE_PREDATOR /datum/game_mode/proc/initialize_predator(mob/living/carbon/human/new_predator, client/player, ignore_pred_num = FALSE) predators[lowertext(player.ckey)] = list("Name" = new_predator.real_name, "Status" = "Alive") @@ -110,7 +110,7 @@ to_chat(pred_candidate, span_warning("You are banned.")) return - if(!(flags_round_type & MODE_PREDATOR)) + if(!(round_type_flags & MODE_PREDATOR)) if(show_warning) to_chat(pred_candidate, span_warning("There is no Hunt this round! Maybe the next one.")) return diff --git a/modular_RUtgmc/code/datums/gamemodes/distress.dm b/modular_RUtgmc/code/datums/gamemodes/distress.dm index f470623e1a54d..7fe460f9499d5 100644 --- a/modular_RUtgmc/code/datums/gamemodes/distress.dm +++ b/modular_RUtgmc/code/datums/gamemodes/distress.dm @@ -2,8 +2,8 @@ name = "Distress Signal" config_tag = "Distress Signal" silo_scaling = 2 - flags_round_type = MODE_INFESTATION|MODE_LATE_OPENING_SHUTTER_TIMER|MODE_XENO_RULER|MODE_PSY_POINTS|MODE_PSY_POINTS_ADVANCED|MODE_DEAD_GRAB_FORBIDDEN|MODE_HIJACK_POSSIBLE|MODE_SILO_RESPAWN|MODE_SILOS_SPAWN_MINIONS|MODE_ALLOW_XENO_QUICKBUILD - flags_xeno_abilities = ABILITY_NUCLEARWAR //actually ABILITY_DISTRESS + round_type_flags = MODE_INFESTATION|MODE_LATE_OPENING_SHUTTER_TIMER|MODE_XENO_RULER|MODE_PSY_POINTS|MODE_PSY_POINTS_ADVANCED|MODE_DEAD_GRAB_FORBIDDEN|MODE_HIJACK_POSSIBLE|MODE_SILO_RESPAWN|MODE_SILOS_SPAWN_MINIONS|MODE_ALLOW_XENO_QUICKBUILD + xeno_abilities_flags = ABILITY_NUCLEARWAR //actually ABILITY_DISTRESS quickbuild_points_flags = MODE_PERSONAL_QUICKBUILD_POINTS valid_job_types = list( /datum/job/terragov/command/captain = 1, @@ -33,7 +33,8 @@ /datum/game_mode/infestation/distress/post_setup() . = ..() predator_round() - SSpoints.add_psy_points(XENO_HIVE_NORMAL, 2 * SILO_PRICE + 4 * XENO_TURRET_PRICE) + SSpoints.add_strategic_psy_points(XENO_HIVE_NORMAL, 1600) + SSpoints.add_tactical_psy_points(XENO_HIVE_NORMAL, 400) for(var/obj/effect/landmark/corpsespawner/corpse AS in GLOB.corpse_landmarks_list) corpse.create_mob() @@ -88,7 +89,7 @@ ///called by [/proc/update_silo_death_timer] after [DISTRESS_SILO_COLLAPSE] elapses to end the round /datum/game_mode/infestation/distress/proc/siloless_hive_collapse() - if(!(flags_round_type & MODE_INFESTATION)) + if(!(round_type_flags & MODE_INFESTATION)) return if(round_finished) return diff --git a/modular_RUtgmc/code/game/atoms.dm b/modular_RUtgmc/code/game/atoms.dm index a6a1c4625e008..63cf14627b2a4 100644 --- a/modular_RUtgmc/code/game/atoms.dm +++ b/modular_RUtgmc/code/game/atoms.dm @@ -12,7 +12,7 @@ hud_list[hud] = new_hud /atom/proc/ex_act(severity, explosion_direction) - if(!(flags_atom & PREVENT_CONTENTS_EXPLOSION)) + if(!(atom_flags & PREVENT_CONTENTS_EXPLOSION)) contents_explosion(severity, explosion_direction) /atom/proc/contents_explosion(severity, explosion_direction) diff --git a/modular_RUtgmc/code/game/data_huds.dm b/modular_RUtgmc/code/game/data_huds.dm index 4601f860fe9e0..1c15e917a8196 100644 --- a/modular_RUtgmc/code/game/data_huds.dm +++ b/modular_RUtgmc/code/game/data_huds.dm @@ -33,7 +33,7 @@ var/sanguinal_amount = reagents.get_reagent_amount(/datum/reagent/toxin/xeno_sanguinal) var/ozelomelyn_amount = reagents.get_reagent_amount(/datum/reagent/toxin/xeno_ozelomelyn) var/jellyjuice_amount = reagents.get_reagent_amount(/datum/reagent/medicine/xenojelly) - var/medicalnanites_amount = reagents.get_reagent_amount(/datum/reagent/medicine/research/medicalnanites) + var/medicalnanites_amount = reagents.get_reagent_amount(/datum/reagent/medicalnanites) var/russianred_amount = reagents.get_reagent_amount(/datum/reagent/medicine/russian_red) if(neurotox_amount > 10) //Blinking image for particularly high concentrations diff --git a/modular_RUtgmc/code/game/objects/items/items.dm b/modular_RUtgmc/code/game/objects/items/items.dm index 765e5aa6909d8..8844c084c7418 100644 --- a/modular_RUtgmc/code/game/objects/items/items.dm +++ b/modular_RUtgmc/code/game/objects/items/items.dm @@ -79,11 +79,11 @@ /obj/item/proc/switch_hair_concealment_flags(mob/living/carbon/human/user) switch(current_hair_concealment) if(HAIR_NO_CONCEALING) // if you apply it to something that has different inv hide flags it will break it, so just don't i guess? - flags_inv_hide = HIDEEARS + inv_hide_flags = HIDEEARS if(TOP_HAIR_CONCEALING) - flags_inv_hide = HIDEEARS|HIDETOPHAIR + inv_hide_flags = HIDEEARS|HIDETOPHAIR if(HAIR_PARTIALLY_CONCEALING) - flags_inv_hide = HIDEEARS|HIDE_EXCESS_HAIR + inv_hide_flags = HIDEEARS|HIDE_EXCESS_HAIR if(HAIR_FULL_CONCEALING) - flags_inv_hide = HIDEEARS|HIDEALLHAIR + inv_hide_flags = HIDEEARS|HIDEALLHAIR user.update_hair() diff --git a/modular_RUtgmc/code/game/objects/items/radio/headset.dm b/modular_RUtgmc/code/game/objects/items/radio/headset.dm index 24548d79d1091..f2b2bbbfc5ff0 100644 --- a/modular_RUtgmc/code/game/objects/items/radio/headset.dm +++ b/modular_RUtgmc/code/game/objects/items/radio/headset.dm @@ -27,8 +27,8 @@ else if(ishuman(wearer)) SSminimaps.add_marker(wearer, marker_flags, image('modular_RUtgmc/icons/UI_icons/map_blips.dmi', null, "undefibbable")) return - if(!wearer.client) - var/mob/dead/observer/ghost = wearer.get_ghost() + if(!wearer.mind) + var/mob/dead/observer/ghost = wearer.get_ghost(TRUE) if(!ghost?.can_reenter_corpse) if(issynth(wearer)) SSminimaps.add_marker(wearer, marker_flags, image('modular_RUtgmc/icons/UI_icons/map_blips.dmi', null, "undefibbable_synt")) diff --git a/modular_RUtgmc/code/game/objects/items/reagent_containers/glass/bottle.dm b/modular_RUtgmc/code/game/objects/items/reagent_containers/glass/bottle.dm index 05e83868aa7e4..8d45b4bb8f413 100644 --- a/modular_RUtgmc/code/game/objects/items/reagent_containers/glass/bottle.dm +++ b/modular_RUtgmc/code/game/objects/items/reagent_containers/glass/bottle.dm @@ -1,4 +1,5 @@ /obj/item/reagent_containers/glass/bottle/update_icon() + . = ..() overlays.Cut() if(reagents?.total_volume && (icon_state == "bottle-1" || icon_state == "bottle-2" || icon_state == "bottle-3" || icon_state == "bottle-4")) //only for those who have reagentfillings icons @@ -32,4 +33,4 @@ name = "\improper Nanomachines bottle" desc = "A small bottle. Contains nanomachines modified for medical use, A potent new method of healing that that reproduces using a subject's blood and has a brief but potentially dangerous activation period!" icon_state = "bottle7" - list_reagents = list(/datum/reagent/medicine/research/medicalnanites = 30) + list_reagents = list(/datum/reagent/medicalnanites = 30) diff --git a/modular_RUtgmc/code/game/objects/items/stacks/tiles/tile_types.dm b/modular_RUtgmc/code/game/objects/items/stacks/tiles/tile_types.dm index 7d3c86d948b37..999f427d5f2b2 100644 --- a/modular_RUtgmc/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/modular_RUtgmc/code/game/objects/items/stacks/tiles/tile_types.dm @@ -5,5 +5,5 @@ throwforce = 8 throw_speed = 3 throw_range = 6 - flags_atom = CONDUCT + atom_flags = CONDUCT turf_type = /turf/open/floor/sandstone/runed diff --git a/modular_RUtgmc/code/game/objects/items/storage/holsters.dm b/modular_RUtgmc/code/game/objects/items/storage/holsters.dm index e4df9c7c37467..563a0bac7c578 100644 --- a/modular_RUtgmc/code/game/objects/items/storage/holsters.dm +++ b/modular_RUtgmc/code/game/objects/items/storage/holsters.dm @@ -163,7 +163,7 @@ slot_belt_str = 'modular_RUtgmc/icons/mob/clothing/belt.dmi', slot_s_store_str = 'modular_RUtgmc/icons/mob/suit_slot.dmi' ) - flags_equip_slot = ITEM_SLOT_BELT|ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BELT|ITEM_SLOT_BACK holsterable_allowed = list( /obj/item/weapon/claymore/tomahawk ) diff --git a/modular_RUtgmc/code/game/objects/items/weapons/blades.dm b/modular_RUtgmc/code/game/objects/items/weapons/blades.dm index fa42133c264c9..0059ecb04bf17 100644 --- a/modular_RUtgmc/code/game/objects/items/weapons/blades.dm +++ b/modular_RUtgmc/code/game/objects/items/weapons/blades.dm @@ -29,7 +29,7 @@ slot_r_hand_str = 'modular_RUtgmc/icons/mob/inhands/weapons/melee_right.dmi', slot_belt_str = 'modular_RUtgmc/icons/mob/suit_slot.dmi' ) - flags_equip_slot = ITEM_SLOT_BELT|ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BELT|ITEM_SLOT_BACK /obj/item/weapon/claymore/mercsword/officersword icon_state = "officer_sword" @@ -103,8 +103,8 @@ ) inhand_x_dimension = 64 inhand_y_dimension = 32 - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BELT|ITEM_SLOT_BACK + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BELT|ITEM_SLOT_BACK force = 70 attack_speed = 8 throwforce = 130 //throw_dmg = throwforce * (throw_speed * 0.2) diff --git a/modular_RUtgmc/code/game/objects/items/weapons/harvester.dm b/modular_RUtgmc/code/game/objects/items/weapons/harvester.dm index 87437c8845fb5..3f2e016f69a0f 100644 --- a/modular_RUtgmc/code/game/objects/items/weapons/harvester.dm +++ b/modular_RUtgmc/code/game/objects/items/weapons/harvester.dm @@ -64,7 +64,7 @@ ) force = 40 force_wielded = 95 //Reminder: putting trama inside deals 60% additional damage - flags_item = TWOHANDED + item_flags = TWOHANDED resistance_flags = 0 //override glavie attack_speed = 10 //Default is 7, this has slower attack reach = 2 //like spear @@ -85,7 +85,7 @@ /obj/item/weapon/twohanded/glaive/halberd/harvester/wield(mob/user) . = ..() - if (!(flags_item & WIELDED)) + if (!(item_flags & WIELDED)) return if(wield_delay > 0) diff --git a/modular_RUtgmc/code/game/objects/machinery/deployable.dm b/modular_RUtgmc/code/game/objects/machinery/deployable.dm index 12c8634413b14..45d02eb1df072 100644 --- a/modular_RUtgmc/code/game/objects/machinery/deployable.dm +++ b/modular_RUtgmc/code/game/objects/machinery/deployable.dm @@ -1,4 +1,4 @@ /obj/machinery/deployable/ex_act(severity) if(CHECK_BITFIELD(resistance_flags, INDESTRUCTIBLE)) return FALSE - take_damage(severity, damage_flag = BOMB, effects = TRUE) + take_damage(severity, armor_type = BOMB, effects = TRUE) diff --git a/modular_RUtgmc/code/game/objects/machinery/squad_supply/supply_beacon.dm b/modular_RUtgmc/code/game/objects/machinery/squad_supply/supply_beacon.dm index 66205739f318d..236c816ee7a43 100644 --- a/modular_RUtgmc/code/game/objects/machinery/squad_supply/supply_beacon.dm +++ b/modular_RUtgmc/code/game/objects/machinery/squad_supply/supply_beacon.dm @@ -1,7 +1,101 @@ /obj/item/beacon + w_class = WEIGHT_CLASS_SMALL + /// If this beacon is activated + var/activated = FALSE + /// How long to activate this beacon + var/activation_time = 80 + /// The icon when acticated + var/icon_activated = "" + /// The camera attached to the beacon + var/obj/machinery/camera/beacon_cam = null + ///Can work underground + var/underground_signal = FALSE ///Beacon minimap icon var/beacon_mini_icon = null +/obj/item/beacon/update_icon_state() + . = ..() + icon_state = activated ? icon_activated : initial(icon_state) + +/obj/item/beacon/attack_self(mob/living/carbon/human/H) + if(!istype(H)) + return + activate(H) + +/obj/item/beacon/attack_hand(mob/living/carbon/human/H) + if(!ishuman(H)) + return ..() + if(activated) + deactivate(H) + return + return ..() + +/// Set this beacon on the ground and activate it +/obj/item/beacon/proc/activate(mob/living/carbon/human/H) + if(!is_ground_level(H.z)) + to_chat(H, span_warning("You have to be on the planet to use this or it won't transmit.")) + return FALSE + var/area/A = get_area(H) + if(A && istype(A) && A.ceiling >= CEILING_DEEP_UNDERGROUND && !underground_signal) + to_chat(H, span_warning("This won't work if you're standing deep underground.")) + return FALSE + if(istype(A, /area/shuttle/dropship)) + to_chat(H, span_warning("You have to be outside the dropship to use this or it won't transmit.")) + return FALSE + var/delay = max(1.5 SECONDS, activation_time - 2 SECONDS * H.skills.getRating(SKILL_LEADERSHIP)) + H.visible_message(span_notice("[H] starts setting up [src] on the ground."), + span_notice("You start setting up [src] on the ground and inputting all the data it needs.")) + if(!do_after(H, delay, NONE, src, BUSY_ICON_GENERIC)) + return FALSE + var/obj/machinery/camera/beacon_cam/BC = new(src, "[H.get_paygrade()] [H.name] [src]") + H.transferItemToLoc(src, H.loc) + beacon_cam = BC + message_admins("[ADMIN_TPMONTY(usr)] set up a supply beacon.") + name = "transmitting orbital beacon - [get_area(src)] - [H]" + activated = TRUE + anchored = TRUE + w_class = WEIGHT_CLASS_GIGANTIC + layer = ABOVE_OBJ_LAYER + set_light(2, 1) + playsound(src, 'sound/machines/twobeep.ogg', 15, 1) + H.visible_message("[H] activates [src].", + "You activate [src].") + + var/marker_flags = GLOB.faction_to_minimap_flag[H.faction] + if(!marker_flags) + marker_flags = MINIMAP_FLAG_MARINE + SSminimaps.add_marker(src, marker_flags, image('modular_RUtgmc/icons/UI_icons/map_blips.dmi', null, beacon_mini_icon)) + update_icon() + return TRUE + +/// Deactivate this beacon and put it in the hand of the human +/obj/item/beacon/proc/deactivate(mob/living/carbon/human/H) + var/delay = max(1 SECONDS, activation_time * 0.5 - 2 SECONDS * H.skills.getRating(SKILL_LEADERSHIP)) //Half as long as setting it up. + H.visible_message(span_notice("[H] starts removing [src] from the ground."), + span_notice("You start removing [src] from the ground, deactivating it.")) + if(!do_after(H, delay, NONE, src, BUSY_ICON_GENERIC)) + return FALSE + QDEL_NULL(beacon_cam) + activated = FALSE + anchored = FALSE + w_class = initial(w_class) + layer = initial(layer) + name = initial(name) + set_light(0) + playsound(src, 'sound/machines/twobeep.ogg', 15, 1) + H.visible_message("[H] deactivates [src].", + "You deactivate [src].") + H.put_in_active_hand(src) + SSminimaps.remove_marker(src) + update_icon() + return TRUE + +/obj/item/beacon/Destroy() + if(beacon_cam) + qdel(beacon_cam) + beacon_cam = null + return ..() + /obj/item/beacon/orbital_bombardment_beacon name = "orbital beacon" desc = "A bulky device that fires a beam up to an orbiting vessel to send local coordinates." @@ -42,6 +136,3 @@ squad = null GLOB.active_orbital_beacons -= src return ..() - -/obj/item/beacon/supply_beacon - beacon_mini_icon = "supply" diff --git a/modular_RUtgmc/code/game/objects/machinery/vending/marine_vending.dm b/modular_RUtgmc/code/game/objects/machinery/vending/marine_vending.dm index c03db9fb5f35f..7ba7f01e24abc 100644 --- a/modular_RUtgmc/code/game/objects/machinery/vending/marine_vending.dm +++ b/modular_RUtgmc/code/game/objects/machinery/vending/marine_vending.dm @@ -453,6 +453,7 @@ ), "Energy Weapons" = list( /obj/item/cell/lasgun/lasrifle = -1, + /obj/item/cell/lasgun/volkite/powerpack/marine = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_rifle = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_sniper = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_carbine = -1, @@ -465,6 +466,9 @@ /obj/item/ammo_magazine/smg/standard_smg = -1, /obj/item/weapon/gun/smg/standard_machinepistol = 5, /obj/item/ammo_magazine/smg/standard_machinepistol = -1, + /obj/item/weapon/gun/smg/standard_heavysmg = -1, + /obj/item/ammo_magazine/smg/standard_heavysmg = -1, + /obj/item/ammo_magazine/smg/standard_heavysmg/squashhead = -1, ), "Marksman" = list( /obj/item/weapon/gun/rifle/standard_dmr = -1, @@ -552,9 +556,11 @@ /obj/item/explosive/grenade/incendiary = 50, /obj/item/explosive/grenade/smokebomb = 25, /obj/item/explosive/grenade/smokebomb/cloak = 25, + /obj/item/explosive/grenade/smokebomb/antigas = 20, /obj/item/explosive/grenade/sticky/cloaker = 25, /obj/item/explosive/grenade/smokebomb/drain = 25, /obj/item/explosive/grenade/mirage = 100, + /obj/item/explosive/grenade/bullet/laser = 30, /obj/item/storage/box/m94 = 200, /obj/item/storage/box/m94/cas = 30, ), @@ -574,7 +580,7 @@ /obj/structure/closet/crate/mortar_ammo/mortar_kit = 1, /obj/structure/closet/crate/mortar_ammo/howitzer_kit = 1, /obj/item/storage/box/crate/sentry = 4, - /obj/item/storage/box/tl102 = 1, + /obj/item/storage/box/hsg_102 = 1, /obj/item/weapon/gun/heavymachinegun = 1, /obj/item/ammo_magazine/heavymachinegun = 5, /obj/item/ammo_magazine/heavymachinegun/small = 10, @@ -608,8 +614,6 @@ /obj/item/ammo_magazine/rifle/pepperball/pepperball_mini = -1, /obj/item/attachable/stock/t76 = -1, /obj/item/attachable/flamer_nozzle = -1, - /obj/item/attachable/flamer_nozzle/wide = -1, - /obj/item/attachable/flamer_nozzle/long = -1, ), "Boxes" = list( /obj/item/ammo_magazine/packet/p9mm = -1, @@ -678,18 +682,24 @@ ), "Energy Weapons" = list( /obj/item/cell/lasgun/lasrifle = -1, + /obj/item/cell/lasgun/volkite/powerpack/marine = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_rifle = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_sniper = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_carbine = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_mlaser = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_pistol = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/tesla = 2, + /obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/rifle = 5, + /obj/item/weapon/gun/energy/lasgun/lasrifle/plasma/cannon = 5, ), "SMGs" = list( /obj/item/weapon/gun/smg/standard_smg = -1, /obj/item/ammo_magazine/smg/standard_smg = -1, /obj/item/weapon/gun/smg/standard_machinepistol = 5, /obj/item/ammo_magazine/smg/standard_machinepistol = -1, + /obj/item/weapon/gun/smg/standard_heavysmg = -1, + /obj/item/ammo_magazine/smg/standard_heavysmg = -1, + /obj/item/ammo_magazine/smg/standard_heavysmg/squashhead = -1, ), "Marksman" = list( /obj/item/weapon/gun/rifle/standard_dmr = -1, @@ -771,6 +781,7 @@ /obj/item/explosive/grenade/smokebomb/cloak = 25, /obj/item/explosive/grenade/smokebomb/drain = 10, /obj/item/explosive/grenade/mirage = 100, + /obj/item/explosive/grenade/bullet/laser = 30, /obj/item/storage/box/m94 = 200, /obj/item/storage/box/m94/cas = 50, ), @@ -827,8 +838,6 @@ /obj/item/ammo_magazine/rifle/pepperball/pepperball_mini = -1, /obj/item/attachable/stock/t76 = -1, /obj/item/attachable/flamer_nozzle = -1, - /obj/item/attachable/flamer_nozzle/wide = -1, - /obj/item/attachable/flamer_nozzle/long = -1, ), "Boxes" = list( /obj/item/ammo_magazine/packet/p9mm = -1, @@ -902,6 +911,7 @@ ), "Energy Weapons" = list( /obj/item/cell/lasgun/lasrifle = -1, + /obj/item/cell/lasgun/volkite/powerpack/marine = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_rifle = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_sniper = -1, /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_carbine = -1, @@ -914,6 +924,9 @@ /obj/item/ammo_magazine/smg/standard_smg = -1, /obj/item/weapon/gun/smg/standard_machinepistol = -1, /obj/item/ammo_magazine/smg/standard_machinepistol = -1, + /obj/item/weapon/gun/smg/standard_heavysmg = -1, + /obj/item/ammo_magazine/smg/standard_heavysmg = -1, + /obj/item/ammo_magazine/smg/standard_heavysmg/squashhead = -1, ), "Marksman" = list( /obj/item/weapon/gun/rifle/standard_dmr = -1, @@ -998,6 +1011,8 @@ /obj/item/ammo_magazine/rifle/tx54/smoke = -1, /obj/item/ammo_magazine/rifle/tx54/smoke/dense = -1, /obj/item/ammo_magazine/rifle/tx54/smoke/tangle = -1, + /obj/item/ammo_magazine/rifle/tx54/smoke/acid = -1, + /obj/item/ammo_magazine/rifle/tx54/razor = -1, /obj/item/explosive/grenade = -1, /obj/item/explosive/grenade/m15 = -1, /obj/item/explosive/grenade/sticky = -1, @@ -1008,7 +1023,9 @@ /obj/item/explosive/grenade/smokebomb = -1, /obj/item/explosive/grenade/smokebomb/cloak = -1, /obj/item/explosive/grenade/smokebomb/drain = -1, + /obj/item/explosive/grenade/smokebomb/antigas = -1, /obj/item/explosive/grenade/mirage = -1, + /obj/item/explosive/grenade/bullet/laser = -1, /obj/item/storage/box/m94 = -1, /obj/item/storage/box/m94/cas = -1, ), @@ -1028,7 +1045,7 @@ /obj/structure/closet/crate/mortar_ammo/howitzer_kit = -1, /obj/structure/largecrate/supply/weapons/standard_atgun = -1, /obj/item/storage/box/crate/sentry = -1, - /obj/item/storage/box/tl102 = -1, + /obj/item/storage/box/hsg_102 = -1, /obj/item/weapon/gun/heavymachinegun = -1, /obj/item/ammo_magazine/heavymachinegun = -1, /obj/item/storage/holster/backholster/rpg/full = -1, @@ -1126,7 +1143,7 @@ products = list( "Surplus Special Equipment" = list( /obj/item/pinpointer = 1, - /obj/item/beacon/supply_beacon = 1, + /obj/item/supply_beacon = 1, /obj/item/ammo_magazine/rifle/autosniper = 3, /obj/item/ammo_magazine/rifle/tx8 = 3, /obj/item/ammo_magazine/rocket/sadar = 3, @@ -1163,6 +1180,7 @@ /obj/item/storage/box/visual/grenade/cloak = 1, /obj/item/storage/box/visual/grenade/sticky = 1, /obj/item/storage/box/visual/grenade/trailblazer = 1, + /obj/item/storage/box/visual/grenade/lasburster = 1, ), "Ammo Boxes" = list( /obj/item/big_ammo_box = -1, diff --git a/modular_RUtgmc/code/game/objects/machinery/vending/vending_types.dm b/modular_RUtgmc/code/game/objects/machinery/vending/vending_types.dm index 9e0942430eb4f..0c48c3fcf846d 100644 --- a/modular_RUtgmc/code/game/objects/machinery/vending/vending_types.dm +++ b/modular_RUtgmc/code/game/objects/machinery/vending/vending_types.dm @@ -153,6 +153,8 @@ /obj/item/reagent_containers/hypospray/autoinjector/virilyth = -1, /obj/item/reagent_containers/hypospray/autoinjector/roulettium = -1, /obj/item/reagent_containers/glass/bottle/toxin = -1, + /obj/item/reagent_containers/glass/bottle/doctor_delight = -1, + /obj/item/alien_embryo = -1, ), ) diff --git a/modular_RUtgmc/code/game/objects/obj_defense.dm b/modular_RUtgmc/code/game/objects/obj_defense.dm index 4e3345c69eded..34446e7f4f199 100644 --- a/modular_RUtgmc/code/game/objects/obj_defense.dm +++ b/modular_RUtgmc/code/game/objects/obj_defense.dm @@ -6,18 +6,18 @@ return take_damage(severity, BRUTE, BOMB, FALSE, direction) -/obj/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", effects = TRUE, attack_dir, armour_penetration = 0) +/obj/take_damage(damage_amount, damage_type = BRUTE, armor_type = null, effects = TRUE, attack_dir, armour_penetration = 0, mob/living/blame_mob) if(QDELETED(src)) CRASH("[src] taking damage after deletion") if(!damage_amount) return if(effects) - play_attack_sound(damage_amount, damage_type, damage_flag) + play_attack_sound(damage_amount, damage_type, armor_type) if((resistance_flags & INDESTRUCTIBLE) || obj_integrity <= 0) return - if(damage_flag) - damage_amount = round(modify_by_armor(damage_amount, damage_flag, armour_penetration), DAMAGE_PRECISION) + if(armor_type) + damage_amount = round(modify_by_armor(damage_amount, armor_type, armour_penetration, null, attack_dir), DAMAGE_PRECISION) if(damage_amount < DAMAGE_PRECISION) return . = damage_amount @@ -26,13 +26,13 @@ //BREAKING FIRST if(integrity_failure && obj_integrity <= integrity_failure) - obj_break(damage_flag) + obj_break(armor_type) //DESTROYING SECOND if(obj_integrity <= 0) - if(damage_flag == BOMB) + if(armor_type == BOMB) on_explosion_destruction(damage_amount, attack_dir) - obj_destruction(damage_amount, damage_type, damage_flag) + obj_destruction(damage_amount, damage_type, armor_type, blame_mob) /obj/proc/on_explosion_destruction(severity, direction) return diff --git a/modular_RUtgmc/code/game/objects/structures/stool_bed_chair_nest/xeno_nest.dm b/modular_RUtgmc/code/game/objects/structures/stool_bed_chair_nest/xeno_nest.dm index e9e2e9670c281..762316f855edf 100644 --- a/modular_RUtgmc/code/game/objects/structures/stool_bed_chair_nest/xeno_nest.dm +++ b/modular_RUtgmc/code/game/objects/structures/stool_bed_chair_nest/xeno_nest.dm @@ -6,18 +6,18 @@ icon = 'modular_RUtgmc/icons/Xeno/Effects.dmi' -/obj/structure/bed/nest/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/structure/bed/nest/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return - X.visible_message(span_xenonotice("\The [X] starts tearing down \the [src]!"), \ + xeno_attacker.visible_message(span_xenonotice("\The [xeno_attacker] starts tearing down \the [src]!"), \ span_xenonotice("We start to tear down \the [src].")) - if(!do_after(X, 4 SECONDS, NONE, X, BUSY_ICON_GENERIC)) + if(!do_after(xeno_attacker, 4 SECONDS, TRUE, xeno_attacker, BUSY_ICON_GENERIC)) return if(!istype(src)) // Prevent jumping to other turfs if do_after completes with the wall already gone return - X.do_attack_animation(src, ATTACK_EFFECT_CLAW) - X.visible_message(span_xenonotice("\The [X] tears down \the [src]!"), \ + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_CLAW) + xeno_attacker.visible_message(span_xenonotice("\The [xeno_attacker] tears down \the [src]!"), \ span_xenonotice("We tear down \the [src].")) playsound(src, "alien_resin_break", 25) take_damage(max_integrity) // Ensure its destroyed diff --git a/modular_RUtgmc/code/game/objects/structures/tables_racks.dm b/modular_RUtgmc/code/game/objects/structures/tables_racks.dm index 0f6e14cece263..206f7044e388a 100644 --- a/modular_RUtgmc/code/game/objects/structures/tables_racks.dm +++ b/modular_RUtgmc/code/game/objects/structures/tables_racks.dm @@ -1,5 +1,5 @@ /obj/structure/surface/table/get_explosion_resistance(direction) - if(flags_atom & ON_BORDER) + if(atom_flags & ON_BORDER) if(direction == turn(dir, 90) || direction == turn(dir, -90)) return 0 else diff --git a/modular_RUtgmc/code/game/objects/structures/window.dm b/modular_RUtgmc/code/game/objects/structures/window.dm index bc94aa93ddeb7..25de8f68f0f40 100644 --- a/modular_RUtgmc/code/game/objects/structures/window.dm +++ b/modular_RUtgmc/code/game/objects/structures/window.dm @@ -12,7 +12,7 @@ if(CHECK_BITFIELD(resistance_flags, INDESTRUCTIBLE)) return EXPLOSION_MAX_POWER - if(flags_atom & ON_BORDER && (direction == turn(dir, 90) || direction == turn(dir, -90))) + if(atom_flags & ON_BORDER && (direction == turn(dir, 90) || direction == turn(dir, -90))) return 0 return obj_integrity / EXPLOSION_DAMAGE_MULTIPLIER_WINDOW diff --git a/modular_RUtgmc/code/game/objects/structures/xeno.dm b/modular_RUtgmc/code/game/objects/structures/xeno.dm index 1a81d41762dbb..d89ec2c48ca8d 100644 --- a/modular_RUtgmc/code/game/objects/structures/xeno.dm +++ b/modular_RUtgmc/code/game/objects/structures/xeno.dm @@ -8,22 +8,22 @@ /obj/structure/mineral_door/resin icon = 'modular_RUtgmc/icons/obj/smooth_objects/resin-door.dmi' -/obj/structure/mineral_door/resin/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - var/turf/cur_loc = X.loc +/obj/structure/mineral_door/resin/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + var/turf/cur_loc = xeno_attacker.loc if(!istype(cur_loc)) return FALSE - if(X.a_intent != INTENT_DISARM) - try_toggle_state(X) + if(xeno_attacker.a_intent != INTENT_HARM) + try_toggle_state(xeno_attacker) return TRUE - if(CHECK_BITFIELD(SSticker.mode?.flags_round_type, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.should_refund(src, X)) - SSresinshaping.decrement_build_counter(X) + if(CHECK_BITFIELD(SSticker.mode?.round_type_flags, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.should_refund(src, xeno_attacker)) + SSresinshaping.decrement_build_counter(xeno_attacker) qdel(src) return TRUE - src.balloon_alert(X, "Destroying...") + src.balloon_alert(xeno_attacker, "Destroying...") playsound(src, "alien_resin_break", 25) - if(do_after(X, 1 SECONDS, IGNORE_HELD_ITEM, src, BUSY_ICON_HOSTILE)) - src.balloon_alert(X, "Destroyed") + if(do_after(xeno_attacker, 1 SECONDS, FALSE, src, BUSY_ICON_HOSTILE)) + src.balloon_alert(xeno_attacker, "Destroyed") qdel(src) @@ -77,17 +77,14 @@ structure = "door" icon_state = "growth_door" -/obj/alien/resin/sticky/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/obj/alien/resin/sticky/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return FALSE - if(X.a_intent != INTENT_DISARM) - return FALSE - - if(X.a_intent == INTENT_DISARM) - if(CHECK_BITFIELD(SSticker.mode?.flags_round_type, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.should_refund(src, X) && refundable) - SSresinshaping.decrement_build_counter(X) - X.do_attack_animation(src, ATTACK_EFFECT_CLAW) + if(xeno_attacker.a_intent == INTENT_HARM) + if(CHECK_BITFIELD(SSticker.mode?.round_type_flags, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.should_refund(src, xeno_attacker) && refundable) + SSresinshaping.decrement_build_counter(xeno_attacker) + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_CLAW) playsound(src, "alien_resin_break", 25) deconstruct(TRUE) return diff --git a/modular_RUtgmc/code/game/turfs/liquid_turfs.dm b/modular_RUtgmc/code/game/turfs/liquid_turfs.dm deleted file mode 100644 index ea2d7d4eb580a..0000000000000 --- a/modular_RUtgmc/code/game/turfs/liquid_turfs.dm +++ /dev/null @@ -1,29 +0,0 @@ -/turf/open/liquid/lava/proc/burn_stuff(AM) - . = FALSE - - var/thing_to_check = src - if (AM) - thing_to_check = list(AM) - for(var/thing in thing_to_check) - if(ismecha(thing)) - var/obj/vehicle/sealed/mecha/burned_mech = thing - burned_mech.take_damage(rand(40, 120), BURN, FIRE) - . = TRUE - - else if(isobj(thing)) - var/obj/O = thing - O.fire_act(10000, 1000) - - else if (isliving(thing)) - var/mob/living/L = thing - - if(L.stat == DEAD) - continue - - if(!L.on_fire || L.getFireLoss() <= 200) - if(!CHECK_BITFIELD(L.pass_flags, PASS_FIRE))//Pass fire allow to cross lava without igniting - var/damage_amount = max(L.modify_by_armor(LAVA_TILE_BURN_DAMAGE, FIRE), LAVA_TILE_BURN_DAMAGE * 0.3) - L.take_overall_damage(damage_amount, BURN, updating_health = TRUE, max_limbs = 3) - L.adjust_fire_stacks(20) - L.IgniteMob() - . = TRUE diff --git a/modular_RUtgmc/code/game/turfs/walls/resin.dm b/modular_RUtgmc/code/game/turfs/walls/resin.dm index fa4256dd8831e..7aecb2bf7dbfb 100644 --- a/modular_RUtgmc/code/game/turfs/walls/resin.dm +++ b/modular_RUtgmc/code/game/turfs/walls/resin.dm @@ -7,23 +7,21 @@ /turf/closed/wall/resin/ex_act(severity) take_damage(severity * RESIN_EXPLOSIVE_MULTIPLIER, BRUTE, BOMB) -/turf/closed/wall/resin/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(X.status_flags & INCORPOREAL) +/turf/closed/wall/resin/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(xeno_attacker.status_flags & INCORPOREAL) return - if(X.a_intent != INTENT_DISARM) - return - if(CHECK_BITFIELD(SSticker.mode?.flags_round_type, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.should_refund(src, X)) - SSresinshaping.decrement_build_counter(X) + if(CHECK_BITFIELD(SSticker.mode?.round_type_flags, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.should_refund(src, xeno_attacker)) + SSresinshaping.decrement_build_counter(xeno_attacker) take_damage(max_integrity) return - X.visible_message(span_xenonotice("\The [X] starts tearing down \the [src]!"), \ + xeno_attacker.visible_message(span_xenonotice("\The [xeno_attacker] starts tearing down \the [src]!"), \ span_xenonotice("We start to tear down \the [src].")) - if(!do_after(X, 1 SECONDS, NONE, X, BUSY_ICON_GENERIC)) + if(!do_after(xeno_attacker, 1 SECONDS, TRUE, xeno_attacker, BUSY_ICON_GENERIC)) return if(!istype(src)) return - X.do_attack_animation(src, ATTACK_EFFECT_CLAW) - X.visible_message(span_xenonotice("\The [X] tears down \the [src]!"), \ + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_CLAW) + xeno_attacker.visible_message(span_xenonotice("\The [xeno_attacker] tears down \the [src]!"), \ span_xenonotice("We tear down \the [src].")) playsound(src, "alien_resin_break", 25) take_damage(max_integrity) diff --git a/modular_RUtgmc/code/modules/admin/admin_verbs.dm b/modular_RUtgmc/code/modules/admin/admin_verbs.dm index 86414f82353e5..e8178ab49a201 100644 --- a/modular_RUtgmc/code/modules/admin/admin_verbs.dm +++ b/modular_RUtgmc/code/modules/admin/admin_verbs.dm @@ -70,18 +70,18 @@ to_chat(usr, span_adminnotice("Wait until round start!")) return - if(alert("Are you sure you want to force-toggle a predator round? Predators currently: [(predator_round.flags_round_type & MODE_PREDATOR) ? "Enabled" : "Disabled"]",, "Yes", "No") != "Yes") + if(alert("Are you sure you want to force-toggle a predator round? Predators currently: [(predator_round.round_type_flags & MODE_PREDATOR) ? "Enabled" : "Disabled"]",, "Yes", "No") != "Yes") return - if(!(predator_round.flags_round_type & MODE_PREDATOR)) + if(!(predator_round.round_type_flags & MODE_PREDATOR)) var/datum/job/PJ = SSjob.GetJobType(/datum/job/predator) var/new_pred_max = min(max(round(length(GLOB.clients) * PREDATOR_TO_TOTAL_SPAWN_RATIO), 1), 4) PJ.total_positions = new_pred_max PJ.max_positions = new_pred_max - predator_round.flags_round_type |= MODE_PREDATOR + predator_round.round_type_flags |= MODE_PREDATOR else - predator_round.flags_round_type &= ~MODE_PREDATOR + predator_round.round_type_flags &= ~MODE_PREDATOR - log_admin("[key_name_admin(usr)] has [(predator_round.flags_round_type & MODE_PREDATOR) ? "allowed predators to spawn" : "prevented predators from spawning"].") - message_admins("[ADMIN_TPMONTY(usr)] has [(predator_round.flags_round_type & MODE_PREDATOR) ? "allowed predators to spawn" : "prevented predators from spawning"].") + log_admin("[key_name_admin(usr)] has [(predator_round.round_type_flags & MODE_PREDATOR) ? "allowed predators to spawn" : "prevented predators from spawning"].") + message_admins("[ADMIN_TPMONTY(usr)] has [(predator_round.round_type_flags & MODE_PREDATOR) ? "allowed predators to spawn" : "prevented predators from spawning"].") SEND_GLOBAL_SIGNAL(COMSIG_GLOB_PREDATOR_ROUND_TOGGLED) diff --git a/modular_RUtgmc/code/modules/admin/holder.dm b/modular_RUtgmc/code/modules/admin/holder.dm index 2a493d5f89988..9f8a609eb6cd3 100644 --- a/modular_RUtgmc/code/modules/admin/holder.dm +++ b/modular_RUtgmc/code/modules/admin/holder.dm @@ -135,8 +135,6 @@ GLOBAL_PROTECT(admin_verbs_admin) /world/AVdebug() return list( - /datum/admins/proc/proccall_advanced, - /datum/admins/proc/proccall_atom, /datum/admins/proc/delete_all, /datum/admins/proc/generate_powernets, /datum/admins/proc/debug_mob_lists, diff --git a/modular_RUtgmc/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/modular_RUtgmc/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index b0bb8ca1506dc..38bda41ba6f63 100644 --- a/modular_RUtgmc/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/modular_RUtgmc/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -1,9 +1,9 @@ -/obj/machinery/atmospherics/components/unary/vent_pump/attack_facehugger(mob/living/carbon/xenomorph/facehugger/F, damage_amount = F.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(F.status_flags & INCORPOREAL) +/obj/machinery/atmospherics/components/unary/vent_pump/attack_facehugger(mob/living/carbon/xenomorph/facehugger/facehugger_attacker, damage_amount = facehugger_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = facehugger_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(facehugger_attacker.status_flags & INCORPOREAL) return - if(!welded || !(do_after(F, 3 SECONDS, IGNORE_HELD_ITEM, src, BUSY_ICON_HOSTILE))) + if(!welded || !(do_after(facehugger_attacker, 3 SECONDS, FALSE, src, BUSY_ICON_HOSTILE))) return - F.visible_message("[F] furiously claws at [src]!", "We manage to clear away the stuff blocking the vent", "You hear loud scraping noises.") + facehugger_attacker.visible_message("[facehugger_attacker] furiously claws at [src]!", "We manage to clear away the stuff blocking the vent", "You hear loud scraping noises.") welded = FALSE update_icon() pipe_vision_img = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir) diff --git a/modular_RUtgmc/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/modular_RUtgmc/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index f28f33aae5865..82b87c01c8e38 100644 --- a/modular_RUtgmc/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/modular_RUtgmc/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -1,9 +1,9 @@ -/obj/machinery/atmospherics/components/unary/vent_scrubber/attack_facehugger(mob/living/carbon/xenomorph/facehugger/F, damage_amount = F.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(F.status_flags & INCORPOREAL) +/obj/machinery/atmospherics/components/unary/vent_scrubber/attack_facehugger(mob/living/carbon/xenomorph/facehugger/facehugger_attacker, damage_amount = facehugger_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = facehugger_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(facehugger_attacker.status_flags & INCORPOREAL) return - if(!welded || !(do_after(F, 3 SECONDS, IGNORE_HELD_ITEM, src, BUSY_ICON_HOSTILE))) + if(!welded || !(do_after(facehugger_attacker, 3 SECONDS, FALSE, src, BUSY_ICON_HOSTILE))) return - F.visible_message("[F] furiously claws at [src]!", "We manage to clear away the stuff blocking the scrubber.", "You hear loud scraping noises.") + facehugger_attacker.visible_message("[facehugger_attacker] furiously claws at [src]!", "We manage to clear away the stuff blocking the scrubber.", "You hear loud scraping noises.") welded = FALSE update_icon() pipe_vision_img = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir) diff --git a/modular_RUtgmc/code/modules/clothing/glasses/meson.dm b/modular_RUtgmc/code/modules/clothing/glasses/meson.dm index fecfe25246a32..ef926b69f7480 100644 --- a/modular_RUtgmc/code/modules/clothing/glasses/meson.dm +++ b/modular_RUtgmc/code/modules/clothing/glasses/meson.dm @@ -10,7 +10,7 @@ darkness_view = 12 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE vision_flags = SEE_TURFS - flags_inventory = COVEREYES + inventory_flags = COVEREYES actions_types = null /obj/item/clothing/glasses/meson/yautja/Initialize() diff --git a/modular_RUtgmc/code/modules/clothing/glasses/night.dm b/modular_RUtgmc/code/modules/clothing/glasses/night.dm index 2ad57f6ee1d40..eb08fbd72ccc7 100644 --- a/modular_RUtgmc/code/modules/clothing/glasses/night.dm +++ b/modular_RUtgmc/code/modules/clothing/glasses/night.dm @@ -34,7 +34,7 @@ item_icons = list( slot_glasses_str = 'modular_RUtgmc/icons/mob/hunter/pred_gear.dmi' ) - flags_inventory = COVEREYES + inventory_flags = COVEREYES actions_types = null /obj/item/clothing/glasses/night/yautja/Initialize() diff --git a/modular_RUtgmc/code/modules/clothing/glasses/thermal.dm b/modular_RUtgmc/code/modules/clothing/glasses/thermal.dm index d41bee0332c47..5bf907f3168c9 100644 --- a/modular_RUtgmc/code/modules/clothing/glasses/thermal.dm +++ b/modular_RUtgmc/code/modules/clothing/glasses/thermal.dm @@ -8,7 +8,7 @@ slot_glasses_str = 'modular_RUtgmc/icons/mob/hunter/pred_gear.dmi' ) vision_flags = SEE_MOBS - flags_inventory = COVEREYES + inventory_flags = COVEREYES toggleable = FALSE /obj/item/clothing/glasses/thermal/yautja/Initialize() diff --git a/modular_RUtgmc/code/modules/clothing/head/head.dm b/modular_RUtgmc/code/modules/clothing/head/head.dm index 0ac5e784fcb60..4633ad4485846 100644 --- a/modular_RUtgmc/code/modules/clothing/head/head.dm +++ b/modular_RUtgmc/code/modules/clothing/head/head.dm @@ -127,7 +127,7 @@ item_icons = list( slot_head_str = 'modular_RUtgmc/icons/mob/clothing/headwear/marine_hats.dmi') icon_state = "hijab_black" - flags_inv_hide = HIDEEARS|HIDETOPHAIR + inv_hide_flags = HIDEEARS|HIDETOPHAIR /obj/item/clothing/head/tgmcberet/hijab/grey name = "\improper Grey hijab" @@ -177,8 +177,8 @@ w_class = WEIGHT_CLASS_SMALL actions_types = list(/datum/action/item_action) - flags_armor_features = ARMOR_LAMP_OVERLAY|ARMOR_NO_DECAP - flags_item = SYNTH_RESTRICTED + armor_features_flags = ARMOR_LAMP_OVERLAY|ARMOR_NO_DECAP + item_flags = SYNTH_RESTRICTED species_exception = list(/datum/species/robot) /obj/item/clothing/head/hachimaki/item_action_slot_check(mob/user, slot) @@ -256,8 +256,8 @@ slot_head_str = 'modular_RUtgmc/icons/mob/clothing/headwear/marine_hats.dmi') icon_state = "cap_black" soft_armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 10, BIO = 5, FIRE = 5, ACID = 5) - flags_inventory = BLOCKSHARPOBJ - flags_armor_features = ARMOR_NO_DECAP + inventory_flags = BLOCKSHARPOBJ + armor_features_flags = ARMOR_NO_DECAP species_exception = list(/datum/species/robot) /obj/item/clothing/head/highcap/staff diff --git a/modular_RUtgmc/code/modules/clothing/masks/gasmask.dm b/modular_RUtgmc/code/modules/clothing/masks/gasmask.dm index 3c712ca9d43aa..2ce3ac5116748 100644 --- a/modular_RUtgmc/code/modules/clothing/masks/gasmask.dm +++ b/modular_RUtgmc/code/modules/clothing/masks/gasmask.dm @@ -2,7 +2,7 @@ icon = 'modular_RUtgmc/icons/obj/clothing/masks.dmi' item_icons = list( slot_wear_mask_str = 'modular_RUtgmc/icons/mob/clothing/mask.dmi') - flags_inv_hide = HIDEEARS|HIDEFACE|HIDEALLHAIR + inv_hide_flags = HIDEEARS|HIDEFACE|HIDEALLHAIR /obj/item/clothing/mask/gas/ru/separatist name = "Regular protective gasmask TM-58" @@ -23,7 +23,7 @@ name = "Military grade gas mask" desc = "A military grade gas mask that can be connected to an air supply. Filters harmful gases from the air." icon_state = "sgmask" - flags_inv_hide = HIDEEARS|HIDEFACE|HIDELOWHAIR + inv_hide_flags = HIDEEARS|HIDEFACE|HIDELOWHAIR /obj/item/clothing/mask/gas/ru/redmask name = "Coifed gas mask" diff --git a/modular_RUtgmc/code/modules/clothing/modular_armor/attachments/modules.dm b/modular_RUtgmc/code/modules/clothing/modular_armor/attachments/modules.dm index afaec6254e12e..8cd38038ee7bd 100644 --- a/modular_RUtgmc/code/modules/clothing/modular_armor/attachments/modules.dm +++ b/modular_RUtgmc/code/modules/clothing/modular_armor/attachments/modules.dm @@ -15,7 +15,7 @@ icon = 'modular_RUtgmc/icons/mob/modular/modular_armor_modules.dmi' icon_state = "mod_head_scanner" item_state = "mod_head_scanner_a" - flags_attach_features = ATTACH_REMOVABLE|ATTACH_ACTIVATION|ATTACH_APPLY_ON_MOB + attach_features_flags = ATTACH_REMOVABLE|ATTACH_ACTIVATION|ATTACH_APPLY_ON_MOB slot = ATTACHMENT_SLOT_HEAD_MODULE prefered_slot = SLOT_HEAD @@ -226,11 +226,4 @@ /obj/item/armor_module/storage/medical/som icon = 'modular_RUtgmc/icons/mob/modular/som_armor_modules.dmi' -/obj/item/armor_module/module/antenna/activate(mob/living/user) - . = ..() - addtimer(CALLBACK(src, PROC_REF(update_beacon_location)), 5 SECONDS) -/obj/item/armor_module/module/antenna/proc/update_beacon_location() - if(beacon_datum) - beacon_datum.drop_location = get_turf(src) - addtimer(CALLBACK(src, PROC_REF(update_beacon_location), beacon_datum), 5 SECONDS) diff --git a/modular_RUtgmc/code/modules/clothing/modular_armor/combat_robot.dm b/modular_RUtgmc/code/modules/clothing/modular_armor/combat_robot.dm index 3569236134171..bd94cf1818b87 100644 --- a/modular_RUtgmc/code/modules/clothing/modular_armor/combat_robot.dm +++ b/modular_RUtgmc/code/modules/clothing/modular_armor/combat_robot.dm @@ -20,7 +20,7 @@ soft_armor = list(MELEE = 55, BULLET = 70, LASER = 70, ENERGY = 55, BOMB = 50, BIO = 50, FIRE = 50, ACID = 55) /obj/item/clothing/head/helmet/marine/robot/advanced - flags_item_map_variant = NONE + item_map_variant_flags = NONE icon = 'modular_RUtgmc/icons/obj/clothing/headwear/marine_helmets.dmi' item_icons = list( slot_head_str = 'modular_RUtgmc/icons/mob/clothing/headwear/robot_helmets.dmi', @@ -34,7 +34,7 @@ return FALSE /obj/item/clothing/suit/storage/marine/robot/advanced - flags_item_map_variant = NONE + item_map_variant_flags = NONE icon = 'modular_RUtgmc/icons/obj/clothing/suits/marine_armor.dmi' item_icons = list( slot_wear_suit_str = 'modular_RUtgmc/icons/mob/clothing/suits/robot_armor.dmi', diff --git a/modular_RUtgmc/code/modules/clothing/modular_armor/modular.dm b/modular_RUtgmc/code/modules/clothing/modular_armor/modular.dm index 7ebc1700b5a91..fcda7eb507758 100644 --- a/modular_RUtgmc/code/modules/clothing/modular_armor/modular.dm +++ b/modular_RUtgmc/code/modules/clothing/modular_armor/modular.dm @@ -1,6 +1,6 @@ /obj/item/clothing/suit/modular - flags_atom = CONDUCT|DIRLOCK + atom_flags = CONDUCT|DIRLOCK /obj/item/clothing/head/modular - flags_atom = PREVENT_CONTENTS_EXPLOSION|DIRLOCK + atom_flags = PREVENT_CONTENTS_EXPLOSION|DIRLOCK colorable_allowed = PRESET_COLORS_ALLOWED|HAIR_CONCEALING_CHANGE_ALLOWED diff --git a/modular_RUtgmc/code/modules/clothing/suits/suits.dm b/modular_RUtgmc/code/modules/clothing/suits/suits.dm index 85f476b0f60a7..b072120b370d0 100644 --- a/modular_RUtgmc/code/modules/clothing/suits/suits.dm +++ b/modular_RUtgmc/code/modules/clothing/suits/suits.dm @@ -17,5 +17,5 @@ /obj/item/storage/belt/knifepouch, /obj/item/weapon/twohanded, ) - flags_armor_protection = CHEST + armor_protection_flags = CHEST soft_armor = list(MELEE = 20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0) diff --git a/modular_RUtgmc/code/modules/cm_preds/falcon.dm b/modular_RUtgmc/code/modules/cm_preds/falcon.dm index 5e8bcfe103115..c466cb4f6a41f 100644 --- a/modular_RUtgmc/code/modules/cm_preds/falcon.dm +++ b/modular_RUtgmc/code/modules/cm_preds/falcon.dm @@ -9,8 +9,8 @@ slot_l_hand_str = 'modular_RUtgmc/icons/mob/hunter/items_lefthand.dmi', slot_r_hand_str = 'modular_RUtgmc/icons/mob/hunter/items_righthand.dmi' ) - flags_equip_slot = ITEM_SLOT_HEAD|ITEM_SLOT_EARS - flags_item = ITEM_PREDATOR + equip_slot_flags = ITEM_SLOT_HEAD|ITEM_SLOT_EARS + item_flags = ITEM_PREDATOR /obj/item/clothing/falcon_drone/attack_self(mob/user) ..() @@ -109,7 +109,7 @@ desc = "The wreckage of a Yautja drone." icon = 'modular_RUtgmc/icons/obj/hunter/pred_gear.dmi' icon_state = "falcon_drone_destroyed" - flags_item = ITEM_PREDATOR + item_flags = ITEM_PREDATOR /obj/item/trash/falcon_drone/emp name = "disabled falcon drone" diff --git a/modular_RUtgmc/code/modules/cm_preds/smartdisc.dm b/modular_RUtgmc/code/modules/cm_preds/smartdisc.dm index 4e96a7a195c34..f56f21c37eca8 100644 --- a/modular_RUtgmc/code/modules/cm_preds/smartdisc.dm +++ b/modular_RUtgmc/code/modules/cm_preds/smartdisc.dm @@ -3,7 +3,7 @@ spawner_type = /mob/living/simple_animal/hostile/smartdisc deliveryamt = 1 desc = "A strange piece of alien technology. It has many jagged, whirring blades and bizarre writing." - flags_item = ITEM_PREDATOR + item_flags = ITEM_PREDATOR icon = 'modular_RUtgmc/icons/obj/hunter/pred_gear.dmi' item_icons = list( slot_back_str = 'modular_RUtgmc/icons/mob/hunter/pred_gear.dmi', diff --git a/modular_RUtgmc/code/modules/cm_preds/yaut_bracers.dm b/modular_RUtgmc/code/modules/cm_preds/yaut_bracers.dm index a28bc9bfda759..b4f632365b1da 100644 --- a/modular_RUtgmc/code/modules/cm_preds/yaut_bracers.dm +++ b/modular_RUtgmc/code/modules/cm_preds/yaut_bracers.dm @@ -10,10 +10,10 @@ siemens_coefficient = 0 permeability_coefficient = 0.05 - flags_item = ITEM_PREDATOR - flags_cold_protection = HANDS - flags_heat_protection = HANDS - flags_armor_protection = HANDS + item_flags = ITEM_PREDATOR + cold_protection_flags = HANDS + heat_protection_flags = HANDS + armor_protection_flags = HANDS min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE resistance_flags = UNACIDABLE @@ -81,7 +81,7 @@ /obj/item/clothing/gloves/yautja/dropped(mob/living/carbon/human/user) STOP_PROCESSING(SSobj, src) - flags_item = initial(flags_item) + item_flags = initial(item_flags) if(istype(user) && user.gloves == src) move_chip_to_bracer() if(cloaked) @@ -513,8 +513,8 @@ //Any projectile can decloak a predator. It does defeat one free bullet though. /obj/item/clothing/gloves/yautja/proc/bullet_act_sim(mob/living/carbon/human/H, obj/projectile/proj) - var/ammo_flags = proj.ammo.flags_ammo_behavior - if(ammo_flags & (AMMO_ROCKET|AMMO_ENERGY|AMMO_XENO)) //<--- These will auto uncloak. + var/ammo_flags = proj.ammo.ammo_behavior_flags + if(ammo_flags & (AMMO_ENERGY|AMMO_XENO)) //<--- These will auto uncloak. decloak(H) //Continue on to damage. else if(prob(20)) decloak(H) @@ -615,7 +615,7 @@ exploding = TRUE var/turf/T = get_turf(src) - if(explosion_type == SD_TYPE_BIG && victim.stat == CONSCIOUS && (is_ground_level(T.z) || SSticker.mode.flags_round_type & MODE_SHIPSIDE_SD)) + if(explosion_type == SD_TYPE_BIG && victim.stat == CONSCIOUS && (is_ground_level(T.z) || SSticker.mode.round_type_flags & MODE_SHIPSIDE_SD)) playsound(src, 'modular_RUtgmc/sound/voice/pred_deathlaugh.ogg', 100, 0, 17) playsound(src, 'modular_RUtgmc/sound/effects/pred_countdown.ogg', 100, 0, 17) @@ -629,7 +629,7 @@ if(victim) victim.gib() // kills the pred qdel(victim) - if(explosion_type == SD_TYPE_BIG && (is_ground_level(T.z) || SSticker.mode.flags_round_type & MODE_SHIPSIDE_SD)) + if(explosion_type == SD_TYPE_BIG && (is_ground_level(T.z) || SSticker.mode.round_type_flags & MODE_SHIPSIDE_SD)) cell_explosion(T, 700, 100) else cell_explosion(T, 300, 100) @@ -1267,7 +1267,7 @@ if(!user) return FALSE - if(!(flags_equip_slot & ITEM_SLOT_GLOVES)) + if(!(equip_slot_flags & ITEM_SLOT_GLOVES)) return FALSE var/obj/item/grab/held_mob = user.get_active_held_item() diff --git a/modular_RUtgmc/code/modules/cm_preds/yaut_items.dm b/modular_RUtgmc/code/modules/cm_preds/yaut_items.dm index 798a2c46006a3..f041a7b6636d3 100644 --- a/modular_RUtgmc/code/modules/cm_preds/yaut_items.dm +++ b/modular_RUtgmc/code/modules/cm_preds/yaut_items.dm @@ -55,9 +55,9 @@ soft_armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 25, BIO = 20, FIRE = 20, ACID = 20) - flags_armor_protection = CHEST|GROIN|ARMS - flags_item = ITEM_PREDATOR - flags_inventory = NONE + armor_protection_flags = CHEST|GROIN|ARMS + item_flags = ITEM_PREDATOR + inventory_flags = NONE slowdown = 0 min_cold_protection_temperature = HELMET_MIN_COLD_PROTECTION_TEMPERATURE max_heat_protection_temperature = HELMET_MAX_HEAT_PROTECTION_TEMPERATURE @@ -77,8 +77,8 @@ if(thrall) return - flags_cold_protection = flags_armor_protection - flags_heat_protection = flags_armor_protection + cold_protection_flags = armor_protection_flags + heat_protection_flags = armor_protection_flags if(legacy != "None") switch(legacy) @@ -129,8 +129,8 @@ name = "heavy clan armor" desc = "A suit of armor with heavy padding. It looks old, yet functional." icon_state = "fullarmor_ebony" - flags_armor_protection = CHEST|GROIN|ARMS|HEAD|LEGS - flags_item = ITEM_PREDATOR + armor_protection_flags = CHEST|GROIN|ARMS|HEAD|LEGS + item_flags = ITEM_PREDATOR soft_armor = list(MELEE = 40, BULLET = 30, LASER = 35, ENERGY = 35, BOMB = 45, BIO = 40, FIRE = 30, ACID = 30) slowdown = 0.7 @@ -157,8 +157,8 @@ item_icons = list( slot_back_str = 'modular_RUtgmc/icons/mob/hunter/pred_gear.dmi' ) - flags_equip_slot = ITEM_SLOT_BACK - flags_item = ITEM_PREDATOR + equip_slot_flags = ITEM_SLOT_BACK + item_flags = ITEM_PREDATOR resistance_flags = UNACIDABLE var/clan_rank_required = CLAN_RANK_ELDER_INT var/councillor_override = FALSE @@ -217,9 +217,9 @@ resistance_flags = UNACIDABLE permeability_coefficient = 0.01 - flags_inventory = NOSLIPPING - flags_armor_protection = FEET|LEGS - flags_item = ITEM_PREDATOR + inventory_flags = NOSLIPPING + armor_protection_flags = FEET|LEGS + item_flags = ITEM_PREDATOR siemens_coefficient = 0.2 min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE @@ -236,8 +236,8 @@ boot_number = 1 icon_state = "y-boots[boot_number]_[armor_material]" - flags_cold_protection = flags_armor_protection - flags_heat_protection = flags_armor_protection + cold_protection_flags = armor_protection_flags + heat_protection_flags = armor_protection_flags /obj/item/clothing/shoes/marine/yautja/update_icon_state() return @@ -274,10 +274,10 @@ slot_w_uniform_str = 'modular_RUtgmc/icons/mob/hunter/pred_gear.dmi' ) - flags_armor_protection = CHEST|GROIN|ARMS - flags_cold_protection = CHEST|GROIN|LEGS|ARMS|FEET|HANDS //Does not cover the head though. - flags_heat_protection = CHEST|GROIN|LEGS|ARMS|FEET|HANDS - flags_item = ITEM_PREDATOR + armor_protection_flags = CHEST|GROIN|ARMS + cold_protection_flags = CHEST|GROIN|LEGS|ARMS|FEET|HANDS //Does not cover the head though. + heat_protection_flags = CHEST|GROIN|LEGS|ARMS|FEET|HANDS + item_flags = ITEM_PREDATOR has_sensor = 0 sensor_mode = 0 siemens_coefficient = 0.9 @@ -361,7 +361,7 @@ can_hold = list() max_w_class = WEIGHT_CLASS_BULKY - flags_item = ITEM_PREDATOR + item_flags = ITEM_PREDATOR storage_slots = 12 max_storage_space = 30 @@ -372,8 +372,8 @@ icon = 'modular_RUtgmc/icons/obj/hunter/pred_gear.dmi' icon_state = "teleporter" - flags_item = ITEM_PREDATOR - flags_atom = CONDUCT + item_flags = ITEM_PREDATOR + atom_flags = CONDUCT w_class = WEIGHT_CLASS_TINY force = 1 throwforce = 1 @@ -503,7 +503,7 @@ var/variant = rand(1, 4) //Random sprite variant. icon_state = "scalp_[variant]" blood_color = "#A10808" //So examine describes it as 'bloody'. Synths can't be scalped so it'll always be human blood. - flags_atom = NOBLOODY //Don't want the ugly item blood overlay ending up on this. We'll use our own blood overlay. + atom_flags = NOBLOODY //Don't want the ugly item blood overlay ending up on this. We'll use our own blood overlay. var/image/blood_overlay = image('modular_RUtgmc/icons/obj/hunter/pred_gear.dmi', "scalp_[variant]_blood") blood_overlay.appearance_flags = RESET_COLOR @@ -870,7 +870,7 @@ item_state = "armor" icon_state = "fullarmor_ebony" - flags_armor_protection = CHEST|GROIN|ARMS|HEAD|LEGS + armor_protection_flags = CHEST|GROIN|ARMS|HEAD|LEGS soft_armor = list(MELEE = 20, BULLET = 30, LASER = 25, ENERGY = 25, BOMB = 30, BIO = 25, FIRE = 25, ACID = 25) slowdown = SLOWDOWN_ARMOR_VERY_HEAVY siemens_coefficient = 0.1 @@ -894,7 +894,7 @@ icon_state = "y-boots2_ebony" resistance_flags = UNACIDABLE - flags_armor_protection = FEET|LEGS|GROIN + armor_protection_flags = FEET|LEGS|GROIN soft_armor = list(MELEE = 20, BULLET = 30, LASER = 25, ENERGY = 25, BOMB = 30, BIO = 25, FIRE = 25, ACID = 25) /obj/item/card/id/bracer_chip @@ -904,7 +904,7 @@ icon_state = "upp_key" access = list(ACCESS_YAUTJA_SECURE) w_class = WEIGHT_CLASS_TINY - flags_item = ITEM_PREDATOR + item_flags = ITEM_PREDATOR paygrade = null /obj/item/card/id/bracer_chip/Initialize() @@ -935,7 +935,7 @@ icon_state = "medicomp" use_sound = "toolbox" w_class = WEIGHT_CLASS_SMALL - flags_item = ITEM_PREDATOR + item_flags = ITEM_PREDATOR storage_slots = 16 max_storage_space = 17 can_hold = list( @@ -963,6 +963,7 @@ new /obj/item/tool/surgery/healing_gel/(src) /obj/item/storage/medicomp/update_icon() + . = ..() if(!contents.len) icon_state = "medicomp_open" else @@ -1005,7 +1006,7 @@ /obj/item/armor_module/limb/skeleton name = "How did you get this?" desc = "A bone from a human." - flags_attach_features = ATTACH_REMOVABLE|ATTACH_APPLY_ON_MOB|ATTACH_SEPERATE_MOB_OVERLAY|ATTACH_NO_HANDS + attach_features_flags = ATTACH_REMOVABLE|ATTACH_APPLY_ON_MOB|ATTACH_SEPERATE_MOB_OVERLAY|ATTACH_NO_HANDS icon = 'modular_RUtgmc/icons/obj/items/skeleton.dmi' attach_icon = 'modular_RUtgmc/icons/obj/items/skeleton.dmi' mob_overlay_icon = 'modular_RUtgmc/icons/mob/hunter/pred_gear.dmi' diff --git a/modular_RUtgmc/code/modules/cm_preds/yaut_machines.dm b/modular_RUtgmc/code/modules/cm_preds/yaut_machines.dm index b1c2211f13881..23ed5aa0cce5d 100644 --- a/modular_RUtgmc/code/modules/cm_preds/yaut_machines.dm +++ b/modular_RUtgmc/code/modules/cm_preds/yaut_machines.dm @@ -69,7 +69,6 @@ /obj/item/tool/kitchen/utensil/fork = 6, /obj/item/tool/kitchen/knife = 3, /obj/item/reagent_containers/food/drinks/drinkingglass = 8, - /obj/item/clothing/suit/chef/classic = 2, /obj/item/clothing/head/chefhat = 1, /obj/item/tool/kitchen/utensil/spoon = 2, /obj/item/tool/kitchen/utensil/knife = 2, diff --git a/modular_RUtgmc/code/modules/cm_preds/yaut_mask.dm b/modular_RUtgmc/code/modules/cm_preds/yaut_mask.dm index fd2fac0831a44..12ecf3b36793c 100644 --- a/modular_RUtgmc/code/modules/cm_preds/yaut_mask.dm +++ b/modular_RUtgmc/code/modules/cm_preds/yaut_mask.dm @@ -19,12 +19,12 @@ soft_armor = list(MELEE = 20, BULLET = 25, LASER = 20, ENERGY = 20, BOMB = 25, BIO = 20, FIRE = 20, ACID = 20) min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE - flags_armor_protection = HEAD|FACE|EYES - flags_cold_protection = HEAD - flags_inventory = COVEREYES|COVERMOUTH|NOPRESSUREDMAGE|BLOCKGASEFFECT|BLOCKSHARPOBJ - flags_inv_hide = HIDEEARS|HIDEEYES|HIDEFACE|HIDELOWHAIR + armor_protection_flags = HEAD|FACE|EYES + cold_protection_flags = HEAD + inventory_flags = COVEREYES|COVERMOUTH|NOPRESSUREDMAGE|BLOCKGASEFFECT|BLOCKSHARPOBJ + inv_hide_flags = HIDEEARS|HIDEEYES|HIDEFACE|HIDELOWHAIR eye_protection = 2 - flags_item = ITEM_PREDATOR + item_flags = ITEM_PREDATOR var/current_goggles = VISION_MODE_OFF resistance_flags = UNACIDABLE unequip_delay_self = 20 @@ -248,9 +248,9 @@ icon_state = "pred_mask1_ebony" soft_armor = list(MELEE = 10, BULLET = 10, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, FIRE = 0, ACID = 0) - flags_armor_protection = HEAD|FACE|EYES - flags_cold_protection = HEAD - flags_inv_hide = HIDEEARS|HIDEEYES|HIDEFACE|HIDELOWHAIR + armor_protection_flags = HEAD|FACE|EYES + cold_protection_flags = HEAD + inv_hide_flags = HIDEEARS|HIDEEYES|HIDEFACE|HIDELOWHAIR resistance_flags = UNACIDABLE item_state_slots = list(slot_wear_mask_str = "pred_mask1_ebony") var/map_random = FALSE diff --git a/modular_RUtgmc/code/modules/cm_preds/yaut_shield.dm b/modular_RUtgmc/code/modules/cm_preds/yaut_shield.dm index 33c9b5cf32b08..33a2b59a40a21 100644 --- a/modular_RUtgmc/code/modules/cm_preds/yaut_shield.dm +++ b/modular_RUtgmc/code/modules/cm_preds/yaut_shield.dm @@ -9,8 +9,8 @@ slot_back_str = 'modular_RUtgmc/icons/mob/hunter/pred_gear.dmi' ) item_state = "shield" - flags_item = ITEM_PREDATOR - flags_equip_slot = ITEM_SLOT_BACK + item_flags = ITEM_PREDATOR + equip_slot_flags = ITEM_SLOT_BACK resistance_flags = UNACIDABLE base_icon_state = "shield" @@ -117,7 +117,7 @@ /obj/item/weapon/shield/riot/yautja/attackby(obj/item/I, mob/user) if(cooldown < world.time - 25) - if(istype(I, /obj/item/weapon) && (I.flags_item & ITEM_PREDATOR)) + if(istype(I, /obj/item/weapon) && (I.item_flags & ITEM_PREDATOR)) user.visible_message(span_warning("[user] bashes \the [src] with \the [I]!")) playsound(user.loc, 'sound/effects/shieldbash.ogg', 25, 1) cooldown = world.time diff --git a/modular_RUtgmc/code/modules/cm_preds/yautja_weapons/misc_weapons.dm b/modular_RUtgmc/code/modules/cm_preds/yautja_weapons/misc_weapons.dm index f1338b4f3749b..24b0c3405dff9 100644 --- a/modular_RUtgmc/code/modules/cm_preds/yautja_weapons/misc_weapons.dm +++ b/modular_RUtgmc/code/modules/cm_preds/yautja_weapons/misc_weapons.dm @@ -37,8 +37,8 @@ w_class = WEIGHT_CLASS_GIGANTIC edge = TRUE sharp = IS_SHARP_ITEM_ACCURATE - flags_item = ITEM_PREDATOR - flags_equip_slot = NONE + item_flags = ITEM_PREDATOR + equip_slot_flags = NONE hitsound = 'sound/weapons/wristblades_hit.ogg' attack_speed = 6 force = 25 diff --git a/modular_RUtgmc/code/modules/cm_preds/yautja_weapons/one_handed.dm b/modular_RUtgmc/code/modules/cm_preds/yautja_weapons/one_handed.dm index 50268a53d80be..51dd7945f7e20 100644 --- a/modular_RUtgmc/code/modules/cm_preds/yautja_weapons/one_handed.dm +++ b/modular_RUtgmc/code/modules/cm_preds/yautja_weapons/one_handed.dm @@ -44,9 +44,9 @@ desc = "A segmented, lightweight whip made of durable, acid-resistant metal. Not very common among Yautja Hunters, but still a dangerous weapon capable of shredding prey." icon_state = "whip" item_state = "whip" - flags_atom = CONDUCT - flags_item = ITEM_PREDATOR - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + item_flags = ITEM_PREDATOR + equip_slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_BULKY resistance_flags = UNACIDABLE force = 37 @@ -70,9 +70,9 @@ name = "clan sword" desc = "An expertly crafted Yautja blade carried by hunters who wish to fight up close. Razor sharp and capable of cutting flesh into ribbons. Commonly carried by aggressive and lethal hunters." icon_state = "clansword" - flags_atom = CONDUCT - flags_item = ITEM_PREDATOR - flags_equip_slot = ITEM_SLOT_BACK + atom_flags = CONDUCT + item_flags = ITEM_PREDATOR + equip_slot_flags = ITEM_SLOT_BACK force = 40 throwforce = 25 penetration = 20 @@ -97,9 +97,9 @@ desc = "A huge, incredibly sharp dual blade used for hunting dangerous prey. This weapon is commonly carried by Yautja who wish to disable and slice apart their foes." icon_state = "predscythe" item_state = "scythe_dual" - flags_atom = CONDUCT - flags_item = ITEM_PREDATOR - flags_equip_slot = ITEM_SLOT_BELT + atom_flags = CONDUCT + item_flags = ITEM_PREDATOR + equip_slot_flags = ITEM_SLOT_BELT force = 35 throwforce = 25 penetration = 20 @@ -188,9 +188,9 @@ name = "combi-stick" desc = "A compact yet deadly personal weapon. Can be concealed when folded. Functions well as a throwing weapon or defensive tool. A common sight in Yautja packs due to its versatility." icon_state = "combistick" - flags_atom = CONDUCT - flags_equip_slot = ITEM_SLOT_BACK - flags_item = TWOHANDED|ITEM_PREDATOR + atom_flags = CONDUCT + equip_slot_flags = ITEM_SLOT_BACK + item_flags = TWOHANDED|ITEM_PREDATOR w_class = WEIGHT_CLASS_HUGE throw_speed = 10 throw_range = 4 @@ -268,7 +268,7 @@ /obj/item/weapon/yautja/combistick/attack_self(mob/user) ..() if(on) - if(flags_item & WIELDED) + if(item_flags & WIELDED) unwield(user) else wield(user) @@ -291,7 +291,8 @@ update_icon() /obj/item/weapon/yautja/combistick/update_icon() - if(flags_item & WIELDED) + . = ..() + if(item_flags & WIELDED) item_state = "combistick_w" else if(!on) item_state = "combistick_f" @@ -307,8 +308,8 @@ "You hear blades extending.") playsound(src,'modular_RUtgmc/sound/items/combistick_open.ogg', 50, TRUE, 3) icon_state = initial(icon_state) - flags_equip_slot = initial(flags_equip_slot) - flags_item |= TWOHANDED + equip_slot_flags = initial(equip_slot_flags) + item_flags |= TWOHANDED w_class = WEIGHT_CLASS_HUGE force = force_unwielded throwforce = throwforce_base @@ -324,8 +325,8 @@ to_chat(user, span_notice("You collapse [src] for storage.")) playsound(src, 'modular_RUtgmc/sound/items/combistick_close.ogg', 50, TRUE, 3) icon_state = initial(icon_state) + "_f" - flags_equip_slot = ITEM_SLOT_BACK - flags_item &= ~TWOHANDED + equip_slot_flags = ITEM_SLOT_BACK + item_flags &= ~TWOHANDED w_class = WEIGHT_CLASS_TINY force = force_storage throwforce = throwforce_storage @@ -388,9 +389,9 @@ desc = "A viciously sharp dagger inscribed with ancient Yautja markings. Smells thickly of blood. Carried by some hunters." icon_state = "predknife" item_state = "knife" - flags_atom = CONDUCT - flags_item = ITEM_PREDATOR - flags_equip_slot = ITEM_SLOT_BACK + atom_flags = CONDUCT + item_flags = ITEM_PREDATOR + equip_slot_flags = ITEM_SLOT_BACK sharp = IS_SHARP_ITEM_ACCURATE force = 20 penetration = 10 diff --git a/modular_RUtgmc/code/modules/cm_preds/yautja_weapons/ranged.dm b/modular_RUtgmc/code/modules/cm_preds/yautja_weapons/ranged.dm index 5f072f6419d61..77276d5505eb4 100644 --- a/modular_RUtgmc/code/modules/cm_preds/yautja_weapons/ranged.dm +++ b/modular_RUtgmc/code/modules/cm_preds/yautja_weapons/ranged.dm @@ -80,7 +80,7 @@ muzzle_flash_color = COLOR_MAGENTA default_ammo_type = null - flags_gun_features = GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_ENERGY|GUN_AMMO_COUNT_BY_PERCENTAGE|GUN_UNUSUAL_DESIGN + gun_features_flags = GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_ENERGY|GUN_AMMO_COUNT_BY_PERCENTAGE|GUN_UNUSUAL_DESIGN var/list/datum/yautja_energy_weapon_modes/mode_list = list() @@ -136,12 +136,12 @@ resistance_flags = UNACIDABLE fire_sound = 'sound/effects/woodhit.ogg' // TODO: Decent THWOK noise. ammo_datum_type = /datum/ammo/energy/yautja/alloy_spike - flags_equip_slot = ITEM_SLOT_BELT|ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BELT|ITEM_SLOT_BACK w_class = WEIGHT_CLASS_BULKY //Fits in yautja bags. rounds = 12 max_rounds = 12 var/last_regen - flags_item = ITEM_PREDATOR|TWOHANDED + item_flags = ITEM_PREDATOR|TWOHANDED fire_delay = 5 accuracy_mult = 1.25 @@ -200,14 +200,14 @@ fire_sound = 'modular_RUtgmc/sound/weapons/pred_plasma_shot.ogg' ammo_datum_type = /datum/ammo/energy/yautja/rifle/bolt zoomdevicename = "scope" - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_GIGANTIC rounds = 100 max_rounds = 100 charge_cost = 5 var/last_regen = 0 - flags_item = ITEM_PREDATOR|TWOHANDED - flags_gun_features = GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_ENERGY|GUN_AMMO_COUNT_BY_PERCENTAGE|GUN_UNUSUAL_DESIGN|GUN_WIELDED_FIRING_ONLY + item_flags = ITEM_PREDATOR|TWOHANDED + gun_features_flags = GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_ENERGY|GUN_AMMO_COUNT_BY_PERCENTAGE|GUN_UNUSUAL_DESIGN|GUN_WIELDED_FIRING_ONLY fire_delay = 10 accuracy_mult = 1.5 @@ -238,6 +238,7 @@ . += span_notice("This thing looks like an alien rifle of some kind. Strange.") /obj/item/weapon/gun/energy/yautja/plasmarifle/update_icon() + . = ..() if(last_regen < rounds + max_rounds / 5 || last_regen > rounds || rounds > max_rounds / 1.05) var/new_icon_state = rounds <= 15 ? null : icon_state + "[round(rounds/(max_rounds / 3), 1)]" update_special_overlay(new_icon_state) @@ -268,13 +269,13 @@ resistance_flags = UNACIDABLE fire_sound = 'modular_RUtgmc/sound/weapons/pulse3.ogg' - flags_equip_slot = ITEM_SLOT_BELT + equip_slot_flags = ITEM_SLOT_BELT ammo_datum_type = /datum/ammo/energy/yautja/pistol w_class = WEIGHT_CLASS_BULKY rounds = 40 max_rounds = 40 charge_cost = 1 - flags_item = ITEM_PREDATOR|TWOHANDED + item_flags = ITEM_PREDATOR|TWOHANDED fire_delay = 4 accuracy_mult = 1.5 @@ -344,8 +345,8 @@ w_class = WEIGHT_CLASS_GIGANTIC force = 0 fire_delay = 3 - flags_atom = CONDUCT - flags_item = NOBLUDGEON //Can't bludgeon with this. + atom_flags = CONDUCT + item_flags = NOBLUDGEON //Can't bludgeon with this. fire_delay = 5 accuracy_mult = 1 diff --git a/modular_RUtgmc/code/modules/cm_preds/yautja_weapons/two_handed.dm b/modular_RUtgmc/code/modules/cm_preds/yautja_weapons/two_handed.dm index 9964dec018167..b2c58cd5b4902 100644 --- a/modular_RUtgmc/code/modules/cm_preds/yautja_weapons/two_handed.dm +++ b/modular_RUtgmc/code/modules/cm_preds/yautja_weapons/two_handed.dm @@ -10,9 +10,9 @@ slot_s_store_str = 'modular_RUtgmc/icons/mob/hunter/pred_gear.dmi' ) - flags_item = TWOHANDED|ITEM_PREDATOR + item_flags = TWOHANDED|ITEM_PREDATOR resistance_flags = UNACIDABLE - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_HUGE throw_speed = 10 edge = TRUE @@ -24,7 +24,7 @@ desc = "A spear of exquisite design, used by an ancient civilisation." icon_state = "spearhunter" item_state = "spearhunter" - flags_item = TWOHANDED + item_flags = TWOHANDED force = 20 force_wielded = 45 penetration = 25 @@ -43,7 +43,7 @@ penetration = 30 throwforce = 20 sharp = IS_SHARP_ITEM_BIG - flags_atom = CONDUCT + atom_flags = CONDUCT attack_verb = list("sliced", "slashed", "carved", "diced", "gored") attack_speed = 20 //Default is 7. @@ -78,5 +78,5 @@ throwforce = 10 icon_state = "glaive_alt" item_state = "glaive_alt" - flags_item = TWOHANDED + item_flags = TWOHANDED diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/human/emote.dm b/modular_RUtgmc/code/modules/mob/living/carbon/human/emote.dm index 76269870dc5f0..2c0ed147f01e7 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/human/emote.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/human/emote.dm @@ -89,7 +89,7 @@ key_third_person = "cracks" message = "cracks their knuckles." emote_type = EMOTE_AUDIBLE - flags_emote = EMOTE_RESTRAINT_CHECK|EMOTE_MUZZLE_IGNORE|EMOTE_ARMS_CHECK + emote_flags = EMOTE_RESTRAINT_CHECK|EMOTE_MUZZLE_IGNORE|EMOTE_ARMS_CHECK sound = 'modular_RUtgmc/sound/misc/sound_misc_knuckles.ogg' //Robotic diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/human/species.dm b/modular_RUtgmc/code/modules/mob/living/carbon/human/species.dm index 2b91150c3c5e1..4391e618ce7a8 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/human/species.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/human/species.dm @@ -12,11 +12,9 @@ /datum/species/necoarc name = "Neco Arc" - name_plural = "Neco Arc" icobase = 'modular_RUtgmc/icons/mob/human_races/r_NecoArc.dmi' default_language_holder = /datum/language_holder/sectoid eyes = "blank_eyes" - speech_verb_override = "transmits" count_human = TRUE species_flags = HAS_NO_HAIR|NO_BREATHE|NO_POISON|NO_PAIN|USES_ALIEN_WEAPONS|NO_DAMAGE_OVERLAY diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/human/update_icons.dm b/modular_RUtgmc/code/modules/mob/living/carbon/human/update_icons.dm index cc6a025ee285e..b7b04c8ab7cc3 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/human/update_icons.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/human/update_icons.dm @@ -11,13 +11,13 @@ return //masks and helmets can obscure our hair. - if((head?.flags_inv_hide & HIDEALLHAIR) || (wear_mask?.flags_inv_hide & HIDEALLHAIR)) + if((head?.inv_hide_flags & HIDEALLHAIR) || (wear_mask?.inv_hide_flags & HIDEALLHAIR)) return //base icons var/icon/face_standing = new /icon('icons/mob/human_face.dmi',"bald_s") - if(h_style && !(head?.flags_inv_hide & HIDETOPHAIR)) + if(h_style && !(head?.inv_hide_flags & HIDETOPHAIR)) var/datum/sprite_accessory/hair_style = GLOB.yautja_hair_styles_list[h_style] if(hair_style && (species.name in hair_style.species_allowed)) var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") @@ -26,7 +26,7 @@ var/mutable_appearance/hair_final = mutable_appearance(face_standing, layer =-HAIR_LAYER) - if(head?.flags_inv_hide & HIDE_EXCESS_HAIR) + if(head?.inv_hide_flags & HIDE_EXCESS_HAIR) var/image/mask = image('icons/mob/human_face.dmi', null, "Jeager_Mask") mask.render_target = "*[REF(src)]" hair_final.overlays += mask diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/human/yautja.dm b/modular_RUtgmc/code/modules/mob/living/carbon/human/yautja.dm index 7254d627719eb..b71fad64d8270 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/human/yautja.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/human/yautja.dm @@ -7,7 +7,6 @@ /datum/species/yautja name = "Yautja" - name_plural = "Yautja" brute_mod = 0.28 //Beefy! burn_mod = 0.45 reagent_tag = IS_YAUTJA @@ -33,14 +32,12 @@ max_stamina = 250 blood_color = "#20d450" flesh_color = "#907E4A" - speech_sounds = list('sound/voice/pred_click1.ogg', 'sound/voice/pred_click2.ogg') - speech_chance = 100 death_message = "clicks in agony and falls still, motionless and completely lifeless..." brute_damage_icon_state = "pred_brute" burn_damage_icon_state = "pred_burn" - darksight = 5 + //darksight = 5 slowdown = -0.5 total_health = 175 //more health than regular humans diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/abilities.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/abilities.dm index 5739ce490ad1a..9e178247c724b 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/abilities.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/abilities.dm @@ -17,7 +17,7 @@ /// Extra handling for adding the action for draggin functionality (for instant building) /datum/action/ability/activable/xeno/secrete_resin/give_action(mob/living/L) . = ..() - if(!(CHECK_BITFIELD(SSticker?.mode?.flags_round_type, MODE_ALLOW_XENO_QUICKBUILD) || !SSresinshaping.active)) + if(!(CHECK_BITFIELD(SSticker?.mode.round_type_flags, MODE_ALLOW_XENO_QUICKBUILD) || !SSresinshaping.active)) return var/mutable_appearance/build_maptext = mutable_appearance(icon = null,icon_state = null, layer = ACTION_LAYER_MAPTEXT) @@ -35,7 +35,7 @@ var/mob/living/carbon/xenomorph/X = owner var/atom/A = X.selected_resin action_icon_state = initial(A.name) - if(SSmonitor.gamestate == SHUTTERS_CLOSED && CHECK_BITFIELD(SSticker.mode?.flags_round_type, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.active) + if(SSmonitor.gamestate == SHUTTERS_CLOSED && CHECK_BITFIELD(SSticker.mode?.round_type_flags, MODE_ALLOW_XENO_QUICKBUILD) && SSresinshaping.active) button.cut_overlay(visual_references[VREF_MUTABLE_BUILDING_COUNTER]) var/mutable_appearance/number = visual_references[VREF_MUTABLE_BUILDING_COUNTER] number.maptext = MAPTEXT("[SSresinshaping.get_building_points(owner)]") @@ -69,10 +69,10 @@ end_resin_drag() return - if(SSticker.mode?.flags_round_type & MODE_PERSONAL_QUICKBUILD_POINTS && !SSresinshaping.get_building_points(owner)) + if(SSticker.mode?.round_type_flags & MODE_PERSONAL_QUICKBUILD_POINTS && !SSresinshaping.get_building_points(owner)) owner.balloon_alert(owner, "You have used all your quick-build points! Wait until the marines have landed!") return - if(SSticker.mode?.flags_round_type & MODE_GENERAL_QUICKBUILD_POINTS && !SSresinshaping.quickbuild_points_by_hive[owner.get_xeno_hivenumber()]) + if(SSticker.mode?.round_type_flags & MODE_GENERAL_QUICKBUILD_POINTS && !SSresinshaping.quickbuild_points_by_hive[owner.get_xeno_hivenumber()]) owner.balloon_alert(owner, "The hive has ran out of quickbuilding points! Wait until more sisters awaken or the marines land!") return diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/attack_alien.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/attack_alien.dm index 7411a63b56cc9..bde98acb2e504 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/attack_alien.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/attack_alien.dm @@ -1,23 +1,23 @@ -/mob/living/attack_facehugger(mob/living/carbon/xenomorph/facehugger/F, damage_amount = F.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(F.status_flags & INCORPOREAL) +/mob/living/attack_facehugger(mob/living/carbon/xenomorph/facehugger/facehugger_attacker, damage_amount = facehugger_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = facehugger_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(facehugger_attacker.status_flags & INCORPOREAL) return FALSE - switch(F.a_intent) + switch(facehugger_attacker.a_intent) if(INTENT_HELP, INTENT_GRAB) //Try to hug target if this is a human if(ishuman(src)) - F.visible_message(null, span_notice("We're starting to climb on [src]"), null, 5) - if(!do_after(F, 2 SECONDS, NONE, F, BUSY_ICON_HOSTILE, BUSY_ICON_HOSTILE, extra_checks = CALLBACK(F, TYPE_PROC_REF(/datum, Adjacent), src))) - F.balloon_alert(F, "Climbing interrupted") + facehugger_attacker.visible_message(null, span_notice("We're starting to climb on [src]"), null, 5) + if(!do_after(facehugger_attacker, 2 SECONDS, TRUE, facehugger_attacker, BUSY_ICON_HOSTILE, BUSY_ICON_HOSTILE, extra_checks = CALLBACK(facehugger_attacker, TYPE_PROC_REF(/datum, Adjacent), src))) + facehugger_attacker.balloon_alert(facehugger_attacker, "Climbing interrupted") return FALSE - F.try_attach(src) + facehugger_attacker.try_attach(src) else if(on_fire) - F.visible_message(span_danger("[F] stares at [src]."), \ + facehugger_attacker.visible_message(span_danger("[facehugger_attacker] stares at [src]."), \ span_notice("We stare at the roasting [src], toasty."), null, 5) else - F.visible_message(span_notice("[F] stares at [src]."), \ + facehugger_attacker.visible_message(span_notice("[facehugger_attacker] stares at [src]."), \ span_notice("We stare at [src]."), null, 5) return FALSE if(INTENT_HARM, INTENT_DISARM) - return attack_alien_harm(F) + return attack_alien_harm(facehugger_attacker) return FALSE /mob/living/carbon/human/attack_alien_harm(mob/living/carbon/xenomorph/X, dam_bonus, set_location, random_location, no_head, no_crit, force_intent) diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/behemoth/abilities_behemoth.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/behemoth/abilities_behemoth.dm deleted file mode 100644 index 6e8f277f9f2d6..0000000000000 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/behemoth/abilities_behemoth.dm +++ /dev/null @@ -1,196 +0,0 @@ -// *************************************** -// *********** Seismic Fracture -// *************************************** -#define SEISMIC_FRACTURE_WIND_UP 1.3 SECONDS -#define SEISMIC_FRACTURE_RANGE 4 -#define SEISMIC_FRACTURE_ATTACK_RADIUS 2 -#define SEISMIC_FRACTURE_ATTACK_RADIUS_ENHANCED 5 -#define SEISMIC_FRACTURE_ATTACK_RADIUS_EARTH_PILLAR 2 -#define SEISMIC_FRACTURE_ENHANCED_DELAY 1 SECONDS -#define SEISMIC_FRACTURE_PARALYZE_DURATION 1 SECONDS -#define SEISMIC_FRACTURE_DAMAGE_MULTIPLIER 1.2 -#define SEISMIC_FRACTURE_DAMAGE_MECHA_MODIFIER 10 - -/datum/action/ability/activable/xeno/seismic_fracture - name = "Seismic Fracture" - action_icon_state = "seismic_fracture" - desc = "Blast the earth around the selected location, inflicting heavy damage in a large radius." - ability_cost = 50 - cooldown_duration = 20 SECONDS - target_flags = ABILITY_TURF_TARGET - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_SEISMIC_FRACTURE, - ) - -/datum/action/ability/activable/xeno/seismic_fracture/on_cooldown_finish() - owner.balloon_alert(owner, "[name] ready") - return ..() - -/datum/action/ability/activable/xeno/seismic_fracture/use_ability(atom/target) - . = ..() - if(!line_of_sight(owner, target, SEISMIC_FRACTURE_RANGE)) - owner.balloon_alert(owner, "Out of range") - return - var/mob/living/carbon/xenomorph/xeno_owner = owner - var/datum/action/ability/xeno_action/ready_charge/behemoth_roll/behemoth_roll_action = xeno_owner.actions_by_path[/datum/action/ability/xeno_action/ready_charge/behemoth_roll] - if(behemoth_roll_action?.charge_ability_on) - behemoth_roll_action.charge_off() - var/target_turf = get_turf(target) - var/owner_turf = get_turf(xeno_owner) - new /obj/effect/temp_visual/behemoth/stomp/east(owner_turf, owner.dir) - new /obj/effect/temp_visual/behemoth/crack(owner_turf, owner.dir) - playsound(target_turf, 'sound/effects/behemoth/behemoth_stomp.ogg', 30, TRUE) - var/datum/action/ability/xeno_action/primal_wrath/primal_wrath_action = xeno_owner.actions_by_path[/datum/action/ability/xeno_action/primal_wrath] - do_ability(target_turf, SEISMIC_FRACTURE_WIND_UP, primal_wrath_action?.ability_active? TRUE : FALSE) - -/** - * Handles the warnings, calling the following procs, as well as any alterations caused by Primal Wrath. - * This has to be cut off from use_ability() to optimize code, due to an interaction with Earth Pillars. - * Earth Pillars caught in the range of Seismic Fracture reflect the attack by calling this proc again. - * * target_turf: The targeted turf. - * * wind_up: The wind-up duration before the ability happens. - * * enhanced: Whether this is enhanced by Primal Wrath or not. - * * earth_riser: If this proc was called by an Earth Pillar, its attack radius is reduced. -*/ -/datum/action/ability/activable/xeno/seismic_fracture/proc/do_ability(turf/target_turf, wind_up, enhanced, earth_pillar) - if(!target_turf) - return - var/list/turf/turfs_to_attack = filled_turfs(target_turf, earth_pillar? SEISMIC_FRACTURE_ATTACK_RADIUS_EARTH_PILLAR : SEISMIC_FRACTURE_ATTACK_RADIUS, include_edge = FALSE, bypass_window = TRUE, projectile = TRUE) - if(!length(turfs_to_attack)) - owner.balloon_alert(owner, "Unable to use here") - return - if(wind_up <= 0) - do_attack(turfs_to_attack, enhanced, TRUE) - return - add_cooldown() - succeed_activate() - do_warning(owner, turfs_to_attack, wind_up) - addtimer(CALLBACK(src, PROC_REF(do_attack), turfs_to_attack, enhanced), wind_up) - if(!enhanced) - return - new /obj/effect/temp_visual/shockwave/enhanced(get_turf(owner), SEISMIC_FRACTURE_ATTACK_RADIUS, owner.dir) - playsound(owner, 'sound/effects/behemoth/landslide_roar.ogg', 40, TRUE) - var/list/turf/extra_turfs_to_warn = filled_turfs(target_turf, SEISMIC_FRACTURE_ATTACK_RADIUS_ENHANCED, bypass_window = TRUE, projectile = TRUE) - for(var/turf/extra_turf_to_warn AS in extra_turfs_to_warn) - if(isclosedturf(extra_turf_to_warn)) - extra_turfs_to_warn -= extra_turf_to_warn - if(length(extra_turfs_to_warn) && length(turfs_to_attack)) - extra_turfs_to_warn -= turfs_to_attack - do_warning(owner, extra_turfs_to_warn, wind_up + SEISMIC_FRACTURE_ENHANCED_DELAY) - var/list/turf/extra_turfs = filled_turfs(target_turf, SEISMIC_FRACTURE_ATTACK_RADIUS + 1, bypass_window = TRUE, projectile = TRUE) - if(length(extra_turfs) && length(turfs_to_attack)) - extra_turfs -= turfs_to_attack - addtimer(CALLBACK(src, PROC_REF(do_attack_extra), target_turf, extra_turfs, turfs_to_attack, enhanced, SEISMIC_FRACTURE_ATTACK_RADIUS_ENHANCED, SEISMIC_FRACTURE_ATTACK_RADIUS_ENHANCED - SEISMIC_FRACTURE_ATTACK_RADIUS), wind_up + SEISMIC_FRACTURE_ENHANCED_DELAY) - -/** - * Checks for any atoms caught in the attack's range, and applies several effects based on the atom's type. - * * turfs_to_attack: The turfs affected by this proc. - * * enhanced: Whether this is enhanced or not. - * * instant: Whether this is done instantly or not. -*/ -/datum/action/ability/activable/xeno/seismic_fracture/proc/do_attack(list/turf/turfs_to_attack, enhanced, instant) - if(!length(turfs_to_attack)) - return - var/mob/living/carbon/xenomorph/xeno_owner = owner - var/damage = (xeno_owner.xeno_caste.melee_damage * xeno_owner.xeno_melee_damage_modifier) * SEISMIC_FRACTURE_DAMAGE_MULTIPLIER - for(var/turf/target_turf AS in turfs_to_attack) - if(isclosedturf(target_turf)) - continue - new /obj/effect/temp_visual/behemoth/crack(target_turf) - playsound(target_turf, 'sound/effects/behemoth/seismic_fracture_explosion.ogg', 15) - var/attack_vfx = enhanced? /obj/effect/temp_visual/behemoth/seismic_fracture/enhanced : /obj/effect/temp_visual/behemoth/seismic_fracture - new attack_vfx(target_turf, enhanced? FALSE : null) - for(var/atom/movable/affected_atom AS in target_turf) - if(isliving(affected_atom)) - var/mob/living/affected_living = affected_atom - if(xeno_owner.issamexenohive(affected_living) || affected_living.stat == DEAD || CHECK_BITFIELD(affected_living.status_flags, INCORPOREAL|GODMODE)) - continue - affected_living.emote("scream") - shake_camera(affected_living, 1, 0.8) - affected_living.Paralyze(SEISMIC_FRACTURE_PARALYZE_DURATION) - affected_living.apply_damage(damage, BRUTE, blocked = MELEE) - if(instant) - continue - affected_living.layer = ABOVE_MOB_LAYER - animate(affected_living, pixel_y = affected_living.pixel_y + 40, time = SEISMIC_FRACTURE_PARALYZE_DURATION / 2, easing = CIRCULAR_EASING|EASE_OUT, flags = ANIMATION_END_NOW) - animate(pixel_y = initial(affected_living.pixel_y), time = SEISMIC_FRACTURE_PARALYZE_DURATION / 2, easing = CIRCULAR_EASING|EASE_IN) - addtimer(CALLBACK(src, PROC_REF(living_landing), affected_living), SEISMIC_FRACTURE_PARALYZE_DURATION) - else if(isearthpillar(affected_atom) || ismecha(affected_atom) || istype(affected_atom, /obj/structure/reagent_dispensers/fueltank)) - affected_atom.do_jitter_animation() - new /obj/effect/temp_visual/behemoth/landslide/hit(affected_atom.loc) - playsound(affected_atom.loc, get_sfx("behemoth_earth_pillar_hit"), 40) - if(isearthpillar(affected_atom)) - var/obj/structure/earth_pillar/affected_pillar = affected_atom - if(affected_pillar.warning_flashes < initial(affected_pillar.warning_flashes)) - continue - affected_pillar.call_area_attack() - do_ability(target_turf, initial(affected_pillar.warning_flashes) * 10, FALSE) - continue - if(ismecha(affected_atom)) - var/obj/vehicle/sealed/mecha/affected_mecha = affected_atom - affected_mecha.take_damage(damage * SEISMIC_FRACTURE_DAMAGE_MECHA_MODIFIER, MELEE) - continue - if(istype(affected_atom, /obj/structure/reagent_dispensers/fueltank)) - var/obj/structure/reagent_dispensers/fueltank/affected_tank = affected_atom - affected_tank.explode() - continue - -/// Living mobs that were previously caught in the attack's radius are subject to a landing effect. Their invincibility is removed, and they receive a reduced amount of damage. -/datum/action/ability/activable/xeno/seismic_fracture/proc/living_landing(mob/living/affected_living) - var/mob/living/carbon/xenomorph/xeno_owner = owner - affected_living.layer = initial(affected_living.layer) - var/landing_damage = (xeno_owner.xeno_caste.melee_damage * xeno_owner.xeno_melee_damage_modifier) / 2 - affected_living.apply_damage(landing_damage, BRUTE, blocked = MELEE) - //playsound(affected_living.loc, 'sound/effects/behemoth/seismic_fracture_landing.ogg', 10, TRUE) - new /obj/effect/temp_visual/behemoth/stomp(affected_living.loc) - -/** - * Handles the additional attacks caused by Primal Wrath. These are done iteratively rather than instantly, with a delay inbetween. - * * origin_turf: The starting turf. - * * extra_turfs: Any additional turfs that should be handled. - * * excepted_turfs: Turfs that should be excepted from this proc. - * * enhanced: Whether this is enhanced by Primal Wrath or not. - * * range: The range to cover. - * * iteration: The current iteration. -*/ -/datum/action/ability/activable/xeno/seismic_fracture/proc/do_attack_extra(turf/origin_turf, list/turf/extra_turfs, list/turf/excepted_turfs, enhanced, range, iteration) - if(!origin_turf || !range || !iteration || iteration > range) - return - var/list/turfs_to_attack = list() - for(var/turf/extra_turf AS in extra_turfs) - turfs_to_attack += extra_turf - var/list/turfs_to_check = get_adjacent_open_turfs(extra_turf) - for(var/turf/turf_to_check AS in turfs_to_check) - if((turf_to_check in extra_turfs) || (turf_to_check in excepted_turfs) || (turf_to_check in turfs_to_attack)) - continue - if(!line_of_sight(origin_turf, turf_to_check) || LinkBlocked(origin_turf, turf_to_check, TRUE, TRUE)) - continue - extra_turfs += turf_to_check - do_attack(turfs_to_attack, enhanced) - extra_turfs -= turfs_to_attack - excepted_turfs += turfs_to_attack - iteration++ - addtimer(CALLBACK(src, PROC_REF(do_attack_extra), origin_turf, extra_turfs, excepted_turfs, enhanced, range, iteration), SEISMIC_FRACTURE_ENHANCED_DELAY) - -/obj/structure/earth_pillar/Initialize(mapload, mob/living/carbon/xenomorph/new_owner, enhanced) - . = ..() - xeno_owner = new_owner - RegisterSignal(xeno_owner, COMSIG_QDELETING, PROC_REF(owner_deleted)) - if(enhanced) - icon_state = "[icon_state]e" - var/random_x = generator("num", -100, 100, NORMAL_RAND) - animate(src, pixel_x = random_x, pixel_y = 500, time = 0) - animate(pixel_x = 0, pixel_y = 0, time = 0.5 SECONDS) - return - playsound(src, 'sound/effects/behemoth/earth_pillar_rising.ogg', 40, TRUE) - particle_holder = new(src, /particles/earth_pillar) - particle_holder.pixel_y = -4 - animate(particle_holder, pixel_y = 4, time = 1.0 SECONDS) - animate(alpha = 0, time = 0.6 SECONDS) - QDEL_NULL_IN(src, particle_holder, 1.6 SECONDS) - do_jitter_animation(jitter_loops = 5) - RegisterSignals(src, list(COMSIG_ATOM_BULLET_ACT, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_ATTACK_HAND_ALTERNATE, COMSIG_ATOM_ATTACKBY), PROC_REF(call_update_icon_state)) - -/obj/structure/earth_pillar/ex_act(severity) - . = ..() - update_icon_state() diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/behemoth/castedatum_behemoth.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/behemoth/castedatum_behemoth.dm index b79e68b58d680..3f1bf9dbaa649 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/behemoth/castedatum_behemoth.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/behemoth/castedatum_behemoth.dm @@ -16,7 +16,7 @@ /datum/action/ability/activable/xeno/psydrain, /datum/action/ability/activable/xeno/landslide, /datum/action/ability/activable/xeno/earth_riser, - /datum/action/ability/activable/xeno/seismic_fracture, + /datum/action/ability/xeno_action/seismic_fracture, ) /datum/xeno_caste/behemoth/primordial @@ -31,6 +31,5 @@ /datum/action/ability/activable/xeno/psydrain, /datum/action/ability/activable/xeno/landslide, /datum/action/ability/activable/xeno/earth_riser, - /datum/action/ability/activable/xeno/seismic_fracture, - /datum/action/ability/xeno_action/primal_wrath, + /datum/action/ability/xeno_action/seismic_fracture, ) diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/boiler/abilities_boiler.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/boiler/abilities_boiler.dm index a99b20b459f6e..a79c520e89e64 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/boiler/abilities_boiler.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/boiler/abilities_boiler.dm @@ -85,7 +85,7 @@ /datum/action/ability/xeno_action/create_boiler_bomb/action_activate() var/mob/living/carbon/xenomorph/boiler/X = owner - if(X.is_zoomed) + if(X.xeno_flags & XENO_ZOOMED) to_chat(X, span_notice("We can not prepare globules as we are now. We must stop concentrating into the distance!")) return @@ -119,7 +119,7 @@ ability_cost = 150 cooldown_duration = 180 SECONDS keybind_flags = ABILITY_KEYBIND_USE_ABILITY |ABILITY_IGNORE_SELECTED_ABILITY - use_state_flags = ABILITY_USE_STAGGERED|ABILITY_USE_ROOTED + use_state_flags = ABILITY_USE_STAGGERED keybinding_signals = list( KEYBINDING_NORMAL = COMSIG_XENOABILITY_DUMP_ACID, ) @@ -135,11 +135,6 @@ caster.visible_message(span_xenodanger("[caster] emits an acid!"), span_xenodanger("You dump your acid, disabling your offensive abilities to escape!")) -/* - var/datum/action/ability/activable/xeno/bombard/bombard_action = caster.actions_by_path[/datum/action/ability/activable/xeno/bombard] - if(HAS_TRAIT_FROM(caster, TRAIT_IMMOBILE, BOILER_ROOTED_TRAIT)) - bombard_action.set_rooted(FALSE) -*/ dispense_gas() var/datum/action/ability/activable/xeno/spray_acid = caster.actions_by_path[/datum/action/ability/activable/xeno/spray_acid/line/boiler] @@ -189,139 +184,3 @@ particle_holder.pixel_x = 16 particle_holder.pixel_y = 16 -// *************************************** -// *********** Gas cloud bombs -// *************************************** -/datum/action/ability/activable/xeno/bombard - name = "Bombard" - action_icon_state = "bombard" - desc = "Launch a glob of acid." - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_BOMBARD, - ) - use_state_flags = NONE - -/datum/action/ability/activable/xeno/bombard/get_cooldown() - var/mob/living/carbon/xenomorph/boiler/boiler_owner = owner - return boiler_owner.xeno_caste.bomb_delay - ((boiler_owner.neuro_ammo + boiler_owner.corrosive_ammo) * (BOILER_BOMBARD_COOLDOWN_REDUCTION SECONDS)) - -/datum/action/ability/activable/xeno/bombard/on_cooldown_finish() - to_chat(owner, span_notice("We feel your toxin glands swell. We are able to bombard an area again.")) - var/mob/living/carbon/xenomorph/boiler/boiler_owner = owner - if(boiler_owner.selected_ability == src) - boiler_owner.set_bombard_pointer() - return ..() - -/// Signal proc for clicking at a distance -/datum/action/ability/activable/xeno/bombard/proc/on_ranged_attack(mob/living/carbon/xenomorph/X, atom/A, params) - SIGNAL_HANDLER - if(can_use_ability(A, TRUE)) - INVOKE_ASYNC(src, PROC_REF(use_ability), A) - -/datum/action/ability/activable/xeno/bombard/can_use_ability(atom/A, silent = FALSE, override_flags) - . = ..() - if(!.) - return FALSE - var/turf/T = get_turf(A) - var/turf/S = get_turf(owner) - var/mob/living/carbon/xenomorph/boiler/boiler_owner = owner - - if(boiler_owner.corrosive_ammo <= 0) - boiler_owner.balloon_alert(boiler_owner, "No corrosive globules.") - return FALSE - - if(!isturf(T) || T.z != S.z) - if(!silent) - boiler_owner.balloon_alert(boiler_owner, "Invalid target.") - return FALSE - - if(get_dist(T, S) <= 5) //Magic number - if(!silent) - boiler_owner.balloon_alert(boiler_owner, "Too close!") - return FALSE - -/datum/action/ability/activable/xeno/bombard/on_selection() - var/mob/living/carbon/xenomorph/boiler/boiler_owner = owner - var/current_ammo = boiler_owner.corrosive_ammo - if(current_ammo <= 0) - to_chat(boiler_owner, span_notice("We have nothing prepared to fire.")) - return FALSE - - boiler_owner.visible_message(span_notice("\The [boiler_owner] begins digging their claws into the ground."), \ - span_notice("We begin digging ourselves into place."), null, 5) - if(!do_after(boiler_owner, 3 SECONDS, IGNORE_HELD_ITEM, null, BUSY_ICON_HOSTILE)) - on_deselection() - boiler_owner.selected_ability = null - boiler_owner.update_action_button_icons() - boiler_owner.reset_bombard_pointer() - return FALSE - - boiler_owner.visible_message(span_notice("\The [boiler_owner] digs itself into the ground!"), \ - span_notice("We dig ourselves into place! If we move, we must wait again to fire."), null, 5) - boiler_owner.set_bombard_pointer() - RegisterSignal(boiler_owner, COMSIG_MOB_ATTACK_RANGED, TYPE_PROC_REF(/datum/action/ability/activable/xeno/bombard, on_ranged_attack)) - -/datum/action/ability/activable/xeno/bombard/on_deselection() - var/mob/living/carbon/xenomorph/boiler/boiler_owner = owner - if(boiler_owner.selected_ability == src) - boiler_owner.reset_bombard_pointer() - to_chat(boiler_owner, span_notice("We relax our stance.")) - UnregisterSignal(boiler_owner, COMSIG_MOB_ATTACK_RANGED) - -/mob/living/carbon/xenomorph/boiler/Moved(atom/OldLoc, Dir) - . = ..() - if(selected_ability?.type == /datum/action/ability/activable/xeno/bombard) - var/datum/action/ability/activable/xeno/bombard/bomb = actions_by_path[/datum/action/ability/activable/xeno/bombard] - bomb.on_deselection() - selected_ability.button.icon_state = "template" - selected_ability = null - update_action_button_icons() - -/mob/living/carbon/xenomorph/boiler/proc/set_bombard_pointer() - if(client) - client.mouse_pointer_icon = 'icons/mecha/mecha_mouse.dmi' - -/mob/living/carbon/xenomorph/boiler/proc/reset_bombard_pointer() - if(client) - client.mouse_pointer_icon = initial(client.mouse_pointer_icon) - -/datum/action/ability/activable/xeno/bombard/use_ability(atom/A) - var/mob/living/carbon/xenomorph/boiler/boiler_owner = owner - var/turf/target = get_turf(A) - - if(!istype(target)) - return - - if(boiler_owner.corrosive_ammo <= 0) - to_chat(boiler_owner, span_warning("We have no corrosive globules available.")) - return - - to_chat(boiler_owner, span_xenonotice("We begin building up pressure.")) - - if(!do_after(boiler_owner, 2 SECONDS, IGNORE_HELD_ITEM, target, BUSY_ICON_DANGER)) - to_chat(boiler_owner, span_warning("We decide not to launch.")) - return fail_activate() - - if(!can_use_ability(target, FALSE, ABILITY_IGNORE_PLASMA)) - return fail_activate() - - boiler_owner.visible_message(span_xenowarning("\The [boiler_owner] launches a huge glob of acid hurling into the distance!"), \ - span_xenowarning("We launch a huge glob of acid hurling into the distance!"), null, 5) - - var/obj/projectile/P = new /obj/projectile(boiler_owner.loc) - P.generate_bullet(boiler_owner.ammo) - P.fire_at(target, boiler_owner, null, boiler_owner.ammo.max_range, boiler_owner.ammo.shell_speed) - playsound(boiler_owner, 'sound/effects/blobattack.ogg', 25, 1) - if(istype(boiler_owner.ammo, /datum/ammo/xeno/boiler_gas/corrosive)) - GLOB.round_statistics.boiler_acid_smokes++ - SSblackbox.record_feedback("tally", "round_statistics", 1, "boiler_acid_smokes") - boiler_owner.corrosive_ammo-- - else - GLOB.round_statistics.boiler_neuro_smokes++ - SSblackbox.record_feedback("tally", "round_statistics", 1, "boiler_neuro_smokes") - boiler_owner.neuro_ammo-- - - boiler_owner.update_boiler_glow() - update_button_icon() - add_cooldown() - boiler_owner.reset_bombard_pointer() diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/bull/castedatum_bull.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/bull/castedatum_bull.dm deleted file mode 100644 index 395916aee7fb6..0000000000000 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/bull/castedatum_bull.dm +++ /dev/null @@ -1,6 +0,0 @@ -/datum/xeno_caste/bull - - evolves_to = list( - /mob/living/carbon/xenomorph/crusher, - /mob/living/carbon/xenomorph/behemoth, - ) diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/carrier/castedatum_carrier.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/carrier/castedatum_carrier.dm index c4def68583556..bc3c378c93c36 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/carrier/castedatum_carrier.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/carrier/castedatum_carrier.dm @@ -1,5 +1,4 @@ /datum/xeno_caste/carrier - evolves_to = list(/mob/living/carbon/xenomorph/defiler, /mob/living/carbon/xenomorph/gorger,) can_flags = CASTE_CAN_BE_QUEEN_HEALED|CASTE_CAN_HOLD_FACEHUGGERS|CASTE_CAN_BE_GIVEN_PLASMA|CASTE_CAN_BE_LEADER|CASTE_CAN_HOLD_JELLY actions = list( diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/chimera/abilities_chimera.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/chimera/abilities_chimera.dm index 95cdc8d230590..fd8fa2f6eb6c3 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/chimera/abilities_chimera.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/chimera/abilities_chimera.dm @@ -152,7 +152,7 @@ if(isclosedturf(T) && !ignore_closed_turf) //If we care about closed turfs return TRUE for(var/atom/blocker AS in T) - if((blocker.flags_atom & ON_BORDER) || blocker == subject) //If they're a border entity or our subject, we don't care + if((blocker.atom_flags & ON_BORDER) || blocker == subject) //If they're a border entity or our subject, we don't care continue if(!blocker.CanPass(subject, T) && !ignore_can_pass) //If the subject atom can't pass and we care about that, we have a block return TRUE diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/defender/castedatum_defender.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/defender/castedatum_defender.dm index 2929152aea24c..c5d24e931956e 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/defender/castedatum_defender.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/defender/castedatum_defender.dm @@ -1,10 +1,5 @@ /datum/xeno_caste/defender - evolves_to = list( - /mob/living/carbon/xenomorph/warrior, - /mob/living/carbon/xenomorph/bull, - ) - deevolves_to = /mob/living/carbon/xenomorph/larva // *** Flags *** // diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/facehugger/abilities_facehugger.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/facehugger/abilities_facehugger.dm index 37d880d674bb7..e5d9b014f6802 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/facehugger/abilities_facehugger.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/facehugger/abilities_facehugger.dm @@ -103,7 +103,7 @@ succeed_activate() add_cooldown() - caster.xeno_flags |= XENO_LEAPING // this is needed for throwing code + caster.xeno_flags |= XENO_LEAPING caster.pass_flags |= PASS_LOW_STRUCTURE|PASS_FIRE caster.pass_flags ^= PASS_MOB diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/hivemind/abilities_hivemind.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/hivemind/abilities_hivemind.dm index f4b4dd20fab57..37ab9f94b98e8 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/hivemind/abilities_hivemind.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/hivemind/abilities_hivemind.dm @@ -72,7 +72,8 @@ GLOBAL_LIST_INIT(hivemind_resin_images_list, list( /datum/action/ability/xeno_action/psy_gain/hivemind/action_activate() var/mob/living/carbon/xenomorph/X = owner - if(length_char(GLOB.humans_by_zlevel["2"]) > 0.2 * length_char(GLOB.alive_human_list))\ - SSpoints.add_psy_points("[X.hivenumber]", 100) + if(length_char(GLOB.humans_by_zlevel["2"]) > 0.2 * length_char(GLOB.alive_human_list)) + SSpoints.add_strategic_psy_points("[X.hivenumber]", 100) + SSpoints.add_tactical_psy_points("[X.hivenumber]", 25) succeed_activate() add_cooldown() diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/hunter/abilities_hunter.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/hunter/abilities_hunter.dm index 9a9e412474bea..cb2ed6397dc6c 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/hunter/abilities_hunter.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/hunter/abilities_hunter.dm @@ -4,284 +4,6 @@ . = ..() owner.drop_all_held_items() // drop items (hugger/jelly) -// *************************************** -// *********** Stealth -// *************************************** -/datum/action/ability/xeno_action/stealth - name = "Toggle Stealth" - action_icon_state = "hunter_invisibility" - desc = "Become harder to see, almost invisible if you stand still, and ready a sneak attack. Uses plasma to move." - ability_cost = 10 - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_TOGGLE_STEALTH, - ) - cooldown_duration = HUNTER_STEALTH_COOLDOWN - var/last_stealth = null - var/stealth = FALSE - var/can_sneak_attack = FALSE - var/stealth_alpha_multiplier = 1 - -/datum/action/ability/xeno_action/stealth/remove_action(mob/living/L) - if(stealth) - cancel_stealth() - return ..() - -/datum/action/ability/xeno_action/stealth/can_use_action(silent = FALSE, override_flags) - . = ..() - if(!.) - return FALSE - var/mob/living/carbon/xenomorph/stealthy_beno = owner - if(stealthy_beno.on_fire) - owner.balloon_alert(stealthy_beno, "Cannot enter Stealth!") - return FALSE - return TRUE - -/datum/action/ability/xeno_action/stealth/on_cooldown_finish() - owner.balloon_alert(owner, "Stealth ready.") - playsound(owner, "sound/effects/xeno_newlarva.ogg", 25, 0, 1) - return ..() - -/datum/action/ability/xeno_action/stealth/action_activate() - if(stealth) - cancel_stealth() - return TRUE - if(HAS_TRAIT_FROM(owner, TRAIT_TURRET_HIDDEN, STEALTH_TRAIT)) // stops stealth and disguise from stacking - owner.balloon_alert(owner, "Already in a form of stealth!") - return - succeed_activate() - owner.balloon_alert(owner, "We vanish into the shadows.") - last_stealth = world.time - stealth = TRUE - - RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(handle_stealth)) - RegisterSignal(owner, COMSIG_XENOMORPH_POUNCE_END, PROC_REF(sneak_attack_pounce)) - RegisterSignal(owner, COMSIG_XENO_LIVING_THROW_HIT, PROC_REF(mob_hit)) - RegisterSignal(owner, COMSIG_XENOMORPH_ATTACK_LIVING, PROC_REF(sneak_attack_slash)) - RegisterSignal(owner, COMSIG_XENOMORPH_DISARM_HUMAN, PROC_REF(sneak_attack_slash)) - RegisterSignal(owner, COMSIG_XENOMORPH_ZONE_SELECT, PROC_REF(sneak_attack_zone)) - RegisterSignal(owner, COMSIG_XENOMORPH_PLASMA_REGEN, PROC_REF(plasma_regen)) - - // TODO: attack_alien() overrides are a mess and need a lot of work to make them require parentcalling - RegisterSignals(owner, list( - COMSIG_XENOMORPH_GRAB, - COMSIG_XENOMORPH_THROW_HIT, - COMSIG_LIVING_IGNITED, - COMSIG_LIVING_ADD_VENTCRAWL), PROC_REF(cancel_stealth)) - - RegisterSignal(owner, COMSIG_XENOMORPH_ATTACK_OBJ, PROC_REF(on_obj_attack)) - - RegisterSignals(owner, list(SIGNAL_ADDTRAIT(TRAIT_KNOCKEDOUT), SIGNAL_ADDTRAIT(TRAIT_FLOORED)), PROC_REF(cancel_stealth)) - - RegisterSignal(owner, COMSIG_XENOMORPH_TAKING_DAMAGE, PROC_REF(damage_taken)) - - ADD_TRAIT(owner, TRAIT_TURRET_HIDDEN, STEALTH_TRAIT) - - handle_stealth() - addtimer(CALLBACK(src, PROC_REF(sneak_attack_cooldown)), HUNTER_POUNCE_SNEAKATTACK_DELAY) //Short delay before we can sneak attack. - START_PROCESSING(SSprocessing, src) - -/datum/action/ability/xeno_action/stealth/proc/cancel_stealth() //This happens if we take damage, attack, pounce, toggle stealth off, and do other such exciting stealth breaking activities. - SIGNAL_HANDLER - add_cooldown() - owner.balloon_alert(owner, "We emerge from the shadows.") - - UnregisterSignal(owner, list( - COMSIG_MOVABLE_MOVED, - COMSIG_XENOMORPH_POUNCE_END, - COMSIG_XENO_LIVING_THROW_HIT, - COMSIG_XENOMORPH_ATTACK_LIVING, - COMSIG_XENOMORPH_DISARM_HUMAN, - COMSIG_XENOMORPH_GRAB, - COMSIG_XENOMORPH_ATTACK_OBJ, - COMSIG_XENOMORPH_THROW_HIT, - COMSIG_LIVING_IGNITED, - COMSIG_LIVING_ADD_VENTCRAWL, - SIGNAL_ADDTRAIT(TRAIT_KNOCKEDOUT), - SIGNAL_ADDTRAIT(TRAIT_FLOORED), - COMSIG_XENOMORPH_ZONE_SELECT, - COMSIG_XENOMORPH_PLASMA_REGEN, - COMSIG_XENOMORPH_TAKING_DAMAGE,)) - - stealth = FALSE - can_sneak_attack = FALSE - REMOVE_TRAIT(owner, TRAIT_TURRET_HIDDEN, STEALTH_TRAIT) - animate(owner, 1 SECONDS, alpha = 255) //no transparency/translucency - -///Signal wrapper to verify that an object is damageable before breaking stealth -/datum/action/ability/xeno_action/stealth/proc/on_obj_attack(datum/source, obj/attacked) - SIGNAL_HANDLER - if(attacked.resistance_flags & XENO_DAMAGEABLE) - cancel_stealth() - -/datum/action/ability/xeno_action/stealth/proc/sneak_attack_cooldown() - if(!stealth || can_sneak_attack) - return - can_sneak_attack = TRUE - owner.balloon_alert(owner, "Sneak Attack ready.") - playsound(owner, "sound/effects/xeno_newlarva.ogg", 25, 0, 1) - -/datum/action/ability/xeno_action/stealth/process() - if(!stealth) - return PROCESS_KILL - handle_stealth() - -/datum/action/ability/xeno_action/stealth/proc/handle_stealth() - SIGNAL_HANDLER - var/mob/living/carbon/xenomorph/xenoowner = owner - //Initial stealth - if(last_stealth > world.time - HUNTER_STEALTH_INITIAL_DELAY) //We don't start out at max invisibility - animate(owner, 1.5 SECONDS, alpha = HUNTER_STEALTH_RUN_ALPHA * stealth_alpha_multiplier) - return - //Stationary stealth - else if(owner.last_move_intent < world.time - HUNTER_STEALTH_STEALTH_DELAY) //If we're standing still for 4 seconds we become almost completely invisible - animate(owner, 0.5 SECONDS, alpha = HUNTER_STEALTH_STILL_ALPHA * stealth_alpha_multiplier) - //Walking stealth - else if(owner.m_intent == MOVE_INTENT_WALK) - handle_plasma_usage(xenoowner, HUNTER_STEALTH_WALK_PLASMADRAIN) - animate(owner, 0.5 SECONDS, alpha = HUNTER_STEALTH_WALK_ALPHA * stealth_alpha_multiplier) - //Running stealth - else - handle_plasma_usage(xenoowner, HUNTER_STEALTH_RUN_PLASMADRAIN) - animate(owner, 0.5 SECONDS, alpha = HUNTER_STEALTH_RUN_ALPHA * stealth_alpha_multiplier) - //If we have 0 plasma after expending stealth's upkeep plasma, end stealth. - if(!xenoowner.plasma_stored) - to_chat(xenoowner, span_xenodanger("We lack sufficient plasma to remain camouflaged.")) - cancel_stealth() - -/datum/action/ability/xeno_action/stealth/proc/handle_plasma_usage(mob/user, amount) - var/mob/living/carbon/xenomorph/xeno = user - if(ispath(xeno.loc_weeds_type, /obj/alien/weeds)) - return - else - xeno.use_plasma(amount) - -/// Callback listening for a xeno using the pounce ability -/datum/action/ability/xeno_action/stealth/proc/sneak_attack_pounce() - SIGNAL_HANDLER - if(owner.m_intent == MOVE_INTENT_WALK) - owner.toggle_move_intent(MOVE_INTENT_RUN) - if(owner.hud_used?.move_intent) - owner.hud_used.move_intent.icon_state = "running" - owner.update_icons() - - cancel_stealth() - -/// Callback for when a mob gets hit as part of a pounce -/datum/action/ability/xeno_action/stealth/proc/mob_hit(datum/source, mob/living/M) - SIGNAL_HANDLER - if(M.stat || isxeno(M)) - return - if(can_sneak_attack) - M.adjust_stagger(3 SECONDS) - M.add_slowdown(1) - to_chat(owner, span_xenodanger("Pouncing from the shadows, we stagger our victim.")) - -/datum/action/ability/xeno_action/stealth/proc/sneak_attack_slash(datum/source, mob/living/target, damage, list/damage_mod, list/armor_mod) - SIGNAL_HANDLER - if(!can_sneak_attack) - return - - var/mob/living/carbon/xenomorph/xeno = owner - damage = xeno.xeno_caste.melee_damage * xeno.xeno_melee_damage_modifier - - owner.visible_message(span_danger("\The [owner] strikes [target] with vicious precision!"), \ - span_danger("We strike [target] with vicious precision!")) - target.adjust_stagger(2 SECONDS) - target.add_slowdown(1) - target.ParalyzeNoChain(1 SECONDS) - target.apply_damage(damage, BRUTE, xeno.zone_selected, MELEE) // additional damage - - cancel_stealth() - -/datum/action/ability/xeno_action/stealth/proc/damage_taken(mob/living/carbon/xenomorph/X, damage_taken) - SIGNAL_HANDLER - var/mob/living/carbon/xenomorph/xenoowner = owner - if(damage_taken > xenoowner.xeno_caste.stealth_break_threshold) - cancel_stealth() - -/datum/action/ability/xeno_action/stealth/proc/plasma_regen(datum/source, list/plasma_mod) - SIGNAL_HANDLER - if(owner.last_move_intent < world.time - 20) //Stealth halves the rate of plasma recovery on weeds, and eliminates it entirely while moving - plasma_mod[1] *= 0.5 - else - plasma_mod[1] = 0 - -/datum/action/ability/xeno_action/stealth/proc/sneak_attack_zone() - SIGNAL_HANDLER - if(!can_sneak_attack) - return - return COMSIG_ACCURATE_ZONE - -/datum/action/ability/xeno_action/stealth/disguise - name = "Disguise" - action_icon_state = "xenohide" - desc = "Disguise yourself as the enemy. Uses plasma to move. Select your disguise with Hunter's Mark." - cooldown_duration = 15 SECONDS - keybinding_signals = list( - KEYBINDING_NORMAL = COMSIG_XENOABILITY_TOGGLE_DISGUISE, - ) - ///the regular appearance of the hunter - var/old_appearance - -/datum/action/ability/xeno_action/stealth/disguise/action_activate() - if(stealth) - cancel_stealth() - return TRUE - var/mob/living/carbon/xenomorph/xenoowner = owner - var/datum/action/ability/activable/xeno/hunter_mark/mark = xenoowner.actions_by_path[/datum/action/ability/activable/xeno/hunter_mark] - if(HAS_TRAIT_FROM(owner, TRAIT_TURRET_HIDDEN, STEALTH_TRAIT)) // stops stealth and disguise from stacking - owner.balloon_alert(owner, "already in a form of stealth!") - return - if(!mark.marked_target) - owner.balloon_alert(owner, "We have no target to disguise into!") - return - if(!isliving(mark.marked_target)) - owner.balloon_alert(owner, "You cannot turn into this object!") - return - if(!do_after(xenoowner, 1.5 SECONDS, IGNORE_LOC_CHANGE, xenoowner, BUSY_ICON_HOSTILE)) - return - old_appearance = xenoowner.appearance - ADD_TRAIT(xenoowner, TRAIT_MOB_ICON_UPDATE_BLOCKED, STEALTH_TRAIT) - xenoowner.update_wounds() - xenoowner.add_movespeed_modifier(MOVESPEED_ID_HUNTER_DISGUISE, TRUE, 0, NONE, TRUE, DISGUISE_SLOWDOWN) - return ..() - -/datum/action/ability/xeno_action/stealth/disguise/cancel_stealth() - . = ..() - owner.appearance = old_appearance - REMOVE_TRAIT(owner, TRAIT_MOB_ICON_UPDATE_BLOCKED, STEALTH_TRAIT) - var/mob/living/carbon/xenomorph/xenoowner = owner - xenoowner.update_wounds() - xenoowner.remove_movespeed_modifier(MOVESPEED_ID_HUNTER_DISGUISE, TRUE) - -/datum/action/ability/xeno_action/stealth/disguise/handle_stealth() - var/mob/living/carbon/xenomorph/xenoowner = owner - var/datum/action/ability/activable/xeno/hunter_mark/mark = xenoowner.actions_by_path[/datum/action/ability/activable/xeno/hunter_mark] - var/old_layer = xenoowner.layer - xenoowner.appearance = mark.marked_target.appearance - //Retaining old rendering layer to prevent rendering under objects. - xenoowner.layer = old_layer - xenoowner.underlays.Cut() - if(owner.last_move_intent >= world.time - HUNTER_STEALTH_STEALTH_DELAY) - xenoowner.use_plasma(owner.m_intent == MOVE_INTENT_WALK ? HUNTER_STEALTH_WALK_PLASMADRAIN : HUNTER_STEALTH_RUN_PLASMADRAIN) - //If we have 0 plasma after expending stealth's upkeep plasma, end stealth. - if(!xenoowner.plasma_stored) - to_chat(xenoowner, span_xenodanger("We lack sufficient plasma to remain disguised.")) - cancel_stealth() - -/datum/action/ability/xeno_action/stealth/disguise/sneak_attack_slash(datum/source, mob/living/target, damage, list/damage_mod, list/armor_mod) - if(!can_sneak_attack) - return - - var/mob/living/carbon/xenomorph/xeno = owner - - owner.visible_message(span_danger("\The [owner] strikes [target] with deadly precision!"), \ - span_danger("We strike [target] with deadly precision!")) - target.ParalyzeNoChain(1 SECONDS) - target.apply_damage(20, BRUTE, xeno.zone_selected) // additional damage - - cancel_stealth() - // *************************************** // *********** Hunter's Mark // *************************************** diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/hunter/castedatum_hunter.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/hunter/castedatum_hunter.dm index 2393344fb40d7..e1bfb3fded836 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/hunter/castedatum_hunter.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/hunter/castedatum_hunter.dm @@ -3,4 +3,3 @@ // *** Flags *** // can_flags = CASTE_CAN_BE_QUEEN_HEALED|CASTE_CAN_BE_GIVEN_PLASMA|CASTE_CAN_BE_LEADER|CASTE_CAN_HOLD_FACEHUGGERS|CASTE_CAN_HOLD_JELLY - evolves_to = list(/mob/living/carbon/xenomorph/ravager, /mob/living/carbon/xenomorph/chimera) diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/king/abilities_king.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/king/abilities_king.dm index 8e407d3277b06..ecf2547f57367 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/king/abilities_king.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/king/abilities_king.dm @@ -17,7 +17,6 @@ playsound(owner, 'sound/effects/petrify_charge.ogg', 50) REMOVE_TRAIT(owner, TRAIT_STAGGER_RESISTANT, XENO_TRAIT) ADD_TRAIT(owner, TRAIT_IMMOBILE, PETRIFY_ABILITY_TRAIT) - if(!do_after(owner, PETRIFY_WINDUP_TIME, IGNORE_HELD_ITEM, owner, BUSY_ICON_DANGER, extra_checks = CALLBACK(src, PROC_REF(can_use_action), FALSE, ABILITY_USE_BUSY))) flick("eye_closing", eye) addtimer(CALLBACK(src, PROC_REF(remove_eye), eye), 7, TIMER_CLIENT_TIME) @@ -27,11 +26,9 @@ finish_charging() playsound(owner, 'sound/effects/petrify_activate.ogg', 50) - var/list/mob/living/carbon/human/humans = list() for(var/mob/living/carbon/human/human in view(PETRIFY_RANGE, owner.loc)) if(is_blind(human)) continue - human.notransform = TRUE human.status_flags |= GODMODE ADD_TRAIT(human, TRAIT_HANDS_BLOCKED, REF(src)) @@ -39,10 +36,8 @@ human.unset_interaction() human.add_atom_colour(COLOR_GRAY, TEMPORARY_COLOUR_PRIORITY) human.log_message("has been petrified by [owner] for [PETRIFY_DURATION] ticks", LOG_ATTACK, color="pink") - var/image/stone_overlay = image('icons/effects/effects.dmi', null, "petrified_overlay") stone_overlay.filters += filter(arglist(alpha_mask_filter(render_source="*[REF(human)]",flags=MASK_INVERSE))) - var/mutable_appearance/mask = mutable_appearance() mask.appearance = human.appearance mask.render_target = "*[REF(human)]" @@ -50,15 +45,15 @@ stone_overlay.overlays += mask human.overlays += stone_overlay - humans[human] = stone_overlay + petrified_humans[human] = stone_overlay - if(!length(humans)) + if(!length(petrified_humans)) flick("eye_closing", eye) addtimer(CALLBACK(src, PROC_REF(remove_eye), eye), 7, TIMER_CLIENT_TIME) return addtimer(CALLBACK(src, PROC_REF(remove_eye), eye), 10, TIMER_CLIENT_TIME) flick("eye_explode", eye) - addtimer(CALLBACK(src, PROC_REF(end_effects), humans), PETRIFY_DURATION) + addtimer(CALLBACK(src, PROC_REF(end_effects)), PETRIFY_DURATION) add_cooldown() succeed_activate() diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/larva/larva.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/larva/larva.dm index aab4a11d7c932..36f4903ea15e5 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/larva/larva.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/larva/larva.dm @@ -33,9 +33,6 @@ // *** Evolution *** // evolution_threshold = 50 - evolves_to = list( - /mob/living/carbon/xenomorph/predalien, - ) // *** Flags *** // caste_flags = CASTE_EVOLUTION_ALLOWED|CASTE_INNATE_HEALING diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/panther/abilities_panther.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/panther/abilities_panther.dm index d84c4b01bdbf0..ec120f2e4bb65 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/panther/abilities_panther.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/panther/abilities_panther.dm @@ -351,7 +351,7 @@ /datum/action/ability/xeno_action/evasive_maneuvers/proc/evasion_flamer_hit(datum/source, obj/projectile/proj) SIGNAL_HANDLER - if((proj.ammo.flags_ammo_behavior & AMMO_FLAME)) //If it's not from a flamethrower, we don't care + if((proj.ammo.ammo_behavior_flags & AMMO_FLAME)) //If it's not from a flamethrower, we don't care to_chat(owner, span_danger("The searing fire compromises our ability to dodge!")) evasion_deactivate() @@ -434,7 +434,7 @@ if(R.issamexenohive(proj.firer)) //We automatically dodge allied projectiles at no cost, and no benefit to our evasion stacks return COMPONENT_PROJECTILE_DODGE - if(proj.ammo.flags_ammo_behavior & AMMO_FLAME) //We can't dodge literal fire + if(proj.ammo.ammo_behavior_flags & AMMO_FLAME) //We can't dodge literal fire return FALSE evasion_dodge_sfx(proj) diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/panther/castedatum_panther.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/panther/castedatum_panther.dm index e6f625c0b76b1..31fe2de519cad 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/panther/castedatum_panther.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/panther/castedatum_panther.dm @@ -31,7 +31,6 @@ evolution_threshold = 225 //upgrade_threshold = TIER_TWO_THRESHOLD // RUTGMC DELETION - evolves_to = list(/mob/living/carbon/xenomorph/ravager, /mob/living/carbon/xenomorph/chimera) deevolves_to = /mob/living/carbon/xenomorph/runner // *** Flags *** // diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/panther/panther.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/panther/panther.dm index 8e679c88855c0..730eb4e0dc797 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/panther/panther.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/panther/panther.dm @@ -37,6 +37,14 @@ if(plasma_stored >= 40) use_plasma(3) +/mob/living/carbon/xenomorph/panther/UnarmedAttack(atom/A, has_proximity, modifiers) + /// Panther should not be able to slash while evading. + var/datum/action/ability/xeno_action/evasive_maneuvers/evasion_action = actions_by_path[/datum/action/ability/xeno_action/evasive_maneuvers] + if(evasion_action.evade_active) + balloon_alert(src, "Cannot slash while evading") + return + return ..() + /obj/item/reagent_containers/food/drinks/pantherheart name = "Panther heart" desc = "This is Panther heart... Wait, what?" diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/praetorian/abilities_praetorian.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/praetorian/abilities_praetorian.dm index ab46d2ce774b3..5e6868f0ed5ea 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/praetorian/abilities_praetorian.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/praetorian/abilities_praetorian.dm @@ -145,7 +145,7 @@ for(var/obj/O in T) if(is_type_in_typecache(O, GLOB.acid_spray_hit) && O.acid_spray_act(owner)) return // returned true if normal density applies - if(O.density && !(O.allow_pass_flags & PASS_PROJECTILE) && !(O.flags_atom & ON_BORDER)) + if(O.density && !(O.allow_pass_flags & PASS_PROJECTILE) && !(O.atom_flags & ON_BORDER)) blocked = TRUE break diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/praetorian/castedatum_praetorian.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/praetorian/castedatum_praetorian.dm index 032f527649e8c..103b99941c593 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/praetorian/castedatum_praetorian.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/praetorian/castedatum_praetorian.dm @@ -22,7 +22,7 @@ /datum/action/ability/activable/xeno/xeno_spit, /datum/action/ability/activable/xeno/spray_acid/line/short, /datum/action/ability/activable/xeno/scatter_spit/praetorian, - /datum/action/ability/activable/xeno/charge/dash, + /datum/action/ability/activable/xeno/charge/acid_dash, /datum/action/ability/xeno_action/pheromones, /datum/action/ability/xeno_action/pheromones/emit_recovery, /datum/action/ability/xeno_action/pheromones/emit_warding, @@ -42,7 +42,7 @@ /datum/action/ability/activable/xeno/spray_acid/line/short, /datum/action/ability/activable/xeno/scatter_spit/praetorian, /datum/action/ability/activable/xeno/spray_acid/cone, - /datum/action/ability/activable/xeno/charge/dash, + /datum/action/ability/activable/xeno/charge/acid_dash, /datum/action/ability/xeno_action/pheromones, /datum/action/ability/xeno_action/pheromones/emit_recovery, /datum/action/ability/xeno_action/pheromones/emit_warding, diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/runner/abilities_runner.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/runner/abilities_runner.dm index ec7213cd4a695..1a8b2242b3589 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/runner/abilities_runner.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/runner/abilities_runner.dm @@ -22,30 +22,3 @@ stolen_item.drag_windup = 1.5 SECONDS return ..() - -/datum/action/ability/activable/xeno/snatch/use_ability(atom/A) - var/mob/living/carbon/xenomorph/X = owner - if(!do_after(owner, 0.5 SECONDS, IGNORE_HELD_ITEM, A, BUSY_ICON_DANGER, extra_checks = CALLBACK(owner, TYPE_PROC_REF(/mob, break_do_after_checks), list("health" = X.health)))) - return FALSE - var/mob/living/carbon/human/victim = A - stolen_item = victim.get_active_held_item() - if(!stolen_item) - stolen_item = victim.get_inactive_held_item() - for(var/slot in slots_to_steal_from) - stolen_item = victim.get_item_by_slot(slot) - if(stolen_item) - break - if(!stolen_item) - victim.balloon_alert(owner, "Snatch failed, no item") - return fail_activate() - playsound(owner, 'sound/voice/alien_pounce2.ogg', 30) - victim.dropItemToGround(stolen_item, TRUE) - stolen_item.forceMove(owner) - stolen_appearance = mutable_appearance(stolen_item.icon, stolen_item.icon_state) - stolen_appearance.layer = ABOVE_OBJ_LAYER - addtimer(CALLBACK(src, PROC_REF(drop_item), stolen_item), 3 SECONDS) - RegisterSignal(owner, COMSIG_ATOM_DIR_CHANGE, PROC_REF(owner_turned)) - owner.add_movespeed_modifier(MOVESPEED_ID_SNATCH, TRUE, 0, NONE, TRUE, 2) - owner_turned(null, null, owner.dir) - succeed_activate() - add_cooldown() diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/runner/castedatum_runner.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/runner/castedatum_runner.dm index 36c7b1934bfff..27b5a81a6006c 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/runner/castedatum_runner.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/runner/castedatum_runner.dm @@ -1,8 +1,3 @@ /datum/xeno_caste/runner - evolves_to = list( - /mob/living/carbon/xenomorph/hunter, - /mob/living/carbon/xenomorph/bull, - /mob/living/carbon/xenomorph/panther, - ) deevolves_to = /mob/living/carbon/xenomorph/larva diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/shrike/abilities_shrike.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/shrike/abilities_shrike.dm index 703a66c942214..f44629edc000d 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/shrike/abilities_shrike.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/shrike/abilities_shrike.dm @@ -69,7 +69,7 @@ add_cooldown() addtimer(CALLBACK(owner, TYPE_PROC_REF(/mob, update_icons)), 1 SECONDS) var/mob/living/carbon/xenomorph/xeno = owner - owner.icon_state = "[xeno.xeno_caste.caste_name][xeno.is_a_rouny ? " rouny" : ""] Screeching" + owner.icon_state = "[xeno.xeno_caste.caste_name][(xeno.xeno_flags & XENO_ROUNY) ? " rouny" : ""] Screeching" if(target) // Keybind use doesn't have a target owner.face_atom(target) diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/warrior/castedatum_warrior.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/warrior/castedatum_warrior.dm index dc48967740bb9..8a43d665ffba2 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/warrior/castedatum_warrior.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/warrior/castedatum_warrior.dm @@ -5,8 +5,6 @@ plasma_max = 200 plasma_gain = 20 - evolves_to = list(/mob/living/carbon/xenomorph/crusher, /mob/living/carbon/xenomorph/gorger, /mob/living/carbon/xenomorph/warlock, /mob/living/carbon/xenomorph/behemoth, /mob/living/carbon/xenomorph/chimera) - // *** Flags *** // can_flags = CASTE_CAN_BE_QUEEN_HEALED|CASTE_CAN_BE_GIVEN_PLASMA|CASTE_CAN_BE_LEADER|CASTE_CAN_HOLD_FACEHUGGERS|CASTE_CAN_HOLD_JELLY diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/embryo.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/embryo.dm index f21f3a170bba2..9688c7dbd73d3 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/embryo.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/embryo.dm @@ -64,9 +64,12 @@ var/nestburst_message = pick("You feel hive's psychic power getting stronger, after host [victim.name] gave birth on a nest!", "You feel hive's psychic power getting stronger, after breeding host [victim.name] on a nest!") if(CHECK_BITFIELD(victim.restrained_flags, RESTRAINED_XENO_NEST)) if(victim.job == null) - SSpoints.add_psy_points(hivenumber, 10) + SSpoints.add_strategic_psy_points(hivenumber, 10) + SSpoints.add_tactical_psy_points(hivenumber, 2) else if(victim.job.type == /datum/job/survivor/rambo) - SSpoints.add_psy_points(hivenumber, 50) + SSpoints.add_strategic_psy_points(hivenumber, 50) + SSpoints.add_tactical_psy_points(hivenumber, 10) else - SSpoints.add_psy_points(hivenumber, 200) + SSpoints.add_strategic_psy_points(hivenumber, 200) + SSpoints.add_tactical_psy_points(hivenumber, 50) xeno_message(nestburst_message, "xenoannounce", 5, hivenumber) diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/evolution.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/evolution.dm index 976c3272324f3..ed89f7d75bf7e 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/evolution.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/evolution.dm @@ -57,10 +57,10 @@ new_xeno.fireloss = fireloss //Transfers the damage over. new_xeno.updatehealth() - if(xeno_mobhud) + if(xeno_flags & XENO_MOBHUD) var/datum/atom_hud/H = GLOB.huds[DATA_HUD_XENO_STATUS] H.add_hud_to(new_xeno) //keep our mobhud choice - new_xeno.xeno_mobhud = TRUE + new_xeno.xeno_flags |= XENO_MOBHUD if(lighting_alpha != new_xeno.lighting_alpha) new_xeno.toggle_nightvision(lighting_alpha) @@ -78,7 +78,7 @@ GLOB.round_statistics.total_xenos_created-- //so an evolved xeno doesn't count as two. SSblackbox.record_feedback("tally", "round_statistics", -1, "total_xenos_created") - if(queen_chosen_lead && (new_xeno.xeno_caste.can_flags & CASTE_CAN_BE_LEADER)) // xeno leader is removed by Destroy() + if((xeno_flags & XENO_LEADER) && (new_xeno.xeno_caste.can_flags & CASTE_CAN_BE_LEADER)) // xeno leader is removed by Destroy() hive.add_leader(new_xeno) new_xeno.hud_set_queen_overwatch() if(hive.living_xeno_queen) diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/hive_datum.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/hive_datum.dm index 35556d49b22b2..847b662e3e3ae 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/hive_datum.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/hive_datum.dm @@ -18,7 +18,7 @@ for(var/caste_type_path AS in GLOB.xeno_caste_datums) var/datum/xeno_caste/caste = GLOB.xeno_caste_datums[caste_type_path][XENO_UPGRADE_BASETYPE] - if(initial(caste.tier) == XENO_TIER_MINION) + if(initial(caste.tier) == XENO_TIER_MINION || caste.caste_flags & CASTE_HIDE_IN_STATUS) continue hive_forbiden_castes += list(list( "is_forbid" = FALSE, diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/hive_upgrades.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/hive_upgrades.dm index 06940863a6aa9..89489bcbb3846 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/hive_upgrades.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/hive_upgrades.dm @@ -28,7 +28,7 @@ desc = "Destroy the bodies beneath you " icon = "smartminions" psypoint_cost = 1000 - flags_gamemode = ABILITY_NUCLEARWAR + gamemode_flags = ABILITY_NUCLEARWAR /datum/hive_upgrade/defence/oblivion/can_buy(mob/living/carbon/xenomorph/buyer, silent = TRUE) . = ..() diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/xenoattacks.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/xenoattacks.dm index e0f5a2e81943c..b4cfff3628e71 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/xenoattacks.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/xenoattacks.dm @@ -1,44 +1,48 @@ //Hot hot Aliens on Aliens action. //Actually just used for eating people. -/mob/living/carbon/xenomorph/attack_alien(mob/living/carbon/xenomorph/X, damage_amount = X.xeno_caste.melee_damage, damage_type = BRUTE, damage_flag = "", effects = TRUE, armor_penetration = 0, isrightclick = FALSE) - if(status_flags & INCORPOREAL || X.status_flags & INCORPOREAL) //Incorporeal xenos cannot attack or be attacked +/mob/living/carbon/xenomorph/attack_alien(mob/living/carbon/xenomorph/xeno_attacker, damage_amount = xeno_attacker.xeno_caste.melee_damage, damage_type = BRUTE, armor_type = MELEE, effects = TRUE, armor_penetration = xeno_attacker.xeno_caste.melee_ap, isrightclick = FALSE) + if(status_flags & INCORPOREAL || xeno_attacker.status_flags & INCORPOREAL) //Incorporeal xenos cannot attack or be attacked return - if(src == X) + if(src == xeno_attacker) return TRUE - if(isxenolarva(X)) //Larvas can't eat people - X.visible_message(span_danger("[X] nudges its head against \the [src]."), \ + if(isxenolarva(xeno_attacker)) //Larvas can't eat people + xeno_attacker.visible_message(span_danger("[xeno_attacker] nudges its head against \the [src]."), \ span_danger("We nudge our head against \the [src].")) return FALSE - switch(X.a_intent) + switch(xeno_attacker.a_intent) if(INTENT_HELP) if(on_fire) fire_stacks = max(fire_stacks - 1, 0) playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1, 7) - X.visible_message(span_danger("[X] tries to put out the fire on [src]!"), \ + xeno_attacker.visible_message(span_danger("[xeno_attacker] tries to put out the fire on [src]!"), \ span_warning("We try to put out the fire on [src]!"), null, 5) if(fire_stacks <= 0) - X.visible_message(span_danger("[X] has successfully extinguished the fire on [src]!"), \ + xeno_attacker.visible_message(span_danger("[xeno_attacker] has successfully extinguished the fire on [src]!"), \ span_notice("We extinguished the fire on [src]."), null, 5) ExtinguishMob() return TRUE - X.visible_message(span_notice("\The [X] caresses \the [src] with its scythe-like arm."), \ + + if(interaction_emote(src)) + return TRUE + + xeno_attacker.visible_message(span_notice("\The [xeno_attacker] caresses \the [src] with its scythe-like arm."), \ span_notice("We caress \the [src] with our scythe-like arm."), null, 5) if(INTENT_DISARM) - X.do_attack_animation(src, ATTACK_EFFECT_DISARM) + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_DISARM) playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1, 7) - if(!issamexenohive(X)) + if(!issamexenohive(xeno_attacker)) return FALSE - if(X.tier != XENO_TIER_FOUR && !X.queen_chosen_lead) + if(xeno_attacker.tier != XENO_TIER_FOUR && !(xeno_attacker.xeno_flags & XENO_LEADER)) return FALSE - if((isxenoqueen(src) || queen_chosen_lead) && !isxenoqueen(X)) + if((isxenoqueen(src) || xeno_flags & XENO_LEADER) && !isxenoqueen(xeno_attacker)) return FALSE - X.visible_message("\The [X] shoves \the [src] out of her way!", \ + xeno_attacker.visible_message("\The [xeno_attacker] shoves \the [src] out of her way!", \ span_warning("You shove \the [src] out of your way!"), null, 5) apply_effect(1 SECONDS, WEAKEN) return TRUE @@ -46,34 +50,34 @@ if(INTENT_GRAB) if(anchored) return FALSE - if(!X.start_pulling(src)) + if(!xeno_attacker.start_pulling(src)) return FALSE - X.visible_message(span_warning("[X] grabs \the [src]!"), \ + xeno_attacker.visible_message(span_warning("[xeno_attacker] grabs \the [src]!"), \ span_warning("We grab \the [src]!"), null, 5) playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1, 7) if(INTENT_HARM)//Can't slash other xenos for now. SORRY // You can now! --spookydonut - if(issamexenohive(X) && !HAS_TRAIT(src, TRAIT_BANISHED)) - X.do_attack_animation(src) - X.visible_message(span_warning("\The [X] nibbles \the [src]."), \ + if(issamexenohive(xeno_attacker) && !HAS_TRAIT(src, TRAIT_BANISHED)) + xeno_attacker.do_attack_animation(src) + xeno_attacker.visible_message(span_warning("\The [xeno_attacker] nibbles \the [src]."), \ span_warning("We nibble \the [src]."), null, 5) return TRUE // copypasted from attack_alien.dm //From this point, we are certain a full attack will go out. Calculate damage and modifiers - var/damage = X.xeno_caste.melee_damage + var/damage = xeno_attacker.xeno_caste.melee_damage //Somehow we will deal no damage on this attack if(!damage) - X.do_attack_animation(src) - playsound(X.loc, 'sound/weapons/alien_claw_swipe.ogg', 25, 1) - X.visible_message(span_danger("\The [X] lunges at [src]!"), \ + xeno_attacker.do_attack_animation(src) + playsound(xeno_attacker.loc, 'sound/weapons/alien_claw_swipe.ogg', 25, 1) + xeno_attacker.visible_message(span_danger("\The [xeno_attacker] lunges at [src]!"), \ span_danger("We lunge at [src]!"), null, 5) return FALSE - X.visible_message(span_danger("\The [X] slashes [src]!"), \ + xeno_attacker.visible_message(span_danger("\The [xeno_attacker] slashes [src]!"), \ span_danger("We slash [src]!"), null, 5) - log_combat(X, src, "slashed") + log_combat(xeno_attacker, src, "slashed") - X.do_attack_animation(src, ATTACK_EFFECT_REDSLASH) + xeno_attacker.do_attack_animation(src, ATTACK_EFFECT_REDSLASH) playsound(loc, "alien_claw_flesh", 25, 1) apply_damage(damage, BRUTE, blocked = MELEE, updating_health = TRUE) diff --git a/modular_RUtgmc/code/modules/mob/living/living_verbs.dm b/modular_RUtgmc/code/modules/mob/living/living_verbs.dm index ef43db92bd6a2..3e35ed3f54cf6 100644 --- a/modular_RUtgmc/code/modules/mob/living/living_verbs.dm +++ b/modular_RUtgmc/code/modules/mob/living/living_verbs.dm @@ -1,16 +1,14 @@ -/mob/living/proc/lay_down() - set name = "Rest" - set category = "IC" - +///Handles trying to toggle resting state +/mob/living/proc/toggle_resting() if(!resting) if(is_ventcrawling) return FALSE set_resting(TRUE, FALSE) - else if(do_actions) - to_chat(src, span_warning("You are still in the process of standing up.")) return - else if(do_after(src, 2 SECONDS, IGNORE_LOC_CHANGE|IGNORE_HELD_ITEM, src)) - get_up() + if(do_actions) + balloon_alert(src, "Busy!") + return + get_up() /mob/living/proc/get_up() set_resting(FALSE, FALSE) diff --git a/modular_RUtgmc/code/modules/mob/living/silicon/ai/ai.dm b/modular_RUtgmc/code/modules/mob/living/silicon/ai/ai.dm deleted file mode 100644 index 81f8276716328..0000000000000 --- a/modular_RUtgmc/code/modules/mob/living/silicon/ai/ai.dm +++ /dev/null @@ -1,13 +0,0 @@ -/mob/living/silicon/ai/update_sight() - see_in_dark = initial(see_in_dark) - lighting_alpha = initial(lighting_alpha) - eyeobj.see_in_dark = initial(eyeobj.see_in_dark) - eyeobj.lighting_alpha = initial(eyeobj.lighting_alpha) - - if(HAS_TRAIT(src, TRAIT_SEE_IN_DARK)) - see_in_dark = max(see_in_dark, 8) - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - eyeobj.see_in_dark = max(eyeobj.see_in_dark, 8) - eyeobj.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - - return ..() diff --git a/modular_RUtgmc/code/modules/projectiles/ammo_datums.dm b/modular_RUtgmc/code/modules/projectiles/ammo_datums.dm index 9d38b4e6169b7..7612dcd0aea7e 100644 --- a/modular_RUtgmc/code/modules/projectiles/ammo_datums.dm +++ b/modular_RUtgmc/code/modules/projectiles/ammo_datums.dm @@ -20,7 +20,7 @@ bullet_color = COLOR_SOFT_RED //Red bullets to indicate friendly fire restriction hud_state = "smartgun" hud_state_empty = "smartgun_empty" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC accurate_range = 20 damage = 20 penetration = 10 @@ -30,7 +30,7 @@ name = "submachinegun ACP bullet" hud_state = "smg" hud_state_empty = "smg_empty" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC accuracy_var_low = 7 accuracy_var_high = 7 damage = 20 @@ -103,7 +103,7 @@ damage = 100 penetration = 80 accurate_range_min = 6 - flags_ammo_behavior = AMMO_ENERGY|AMMO_SUNDERING|AMMO_HITSCAN|AMMO_SNIPER + ammo_behavior_flags = AMMO_ENERGY|AMMO_HITSCAN|AMMO_SNIPER sundering = 10 hitscan_effect_icon = "beam_heavy_charge" bullet_color = COLOR_DISABLER_BLUE @@ -142,7 +142,7 @@ name = "shotgun slug" handful_icon_state = "shotgun slug" hud_state = "shotgun_slug" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC shell_speed = 3 max_range = 15 damage = 100 @@ -158,7 +158,7 @@ handful_icon_state = "incendiary slug" hud_state = "shotgun_fire" damage_type = BRUTE - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_INCENDIARY|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC|AMMO_INCENDIARY max_range = 15 damage = 70 penetration = 15 @@ -173,7 +173,7 @@ handful_icon_state = "shotgun flechette shell" icon_state = "flechette" hud_state = "shotgun_flechette" - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + ammo_behavior_flags = AMMO_BALLISTIC bonus_projectiles_type = /datum/ammo/bullet/shotgun/flechette/flechette_spread/shq6 bonus_projectiles_amount = 2 bonus_projectiles_scatter = 3 @@ -229,13 +229,13 @@ icon_state = "xeno_acid_weak" /datum/ammo/xeno/acid/medium/passthrough //Spitter - flags_ammo_behavior = AMMO_XENO|AMMO_SKIPS_ALIENS + ammo_behavior_flags = AMMO_XENO|AMMO_SKIPS_ALIENS /datum/ammo/xeno/acid/auto - flags_ammo_behavior = AMMO_XENO|AMMO_EXPLOSIVE|AMMO_SKIPS_ALIENS + ammo_behavior_flags = AMMO_XENO|AMMO_SKIPS_ALIENS /datum/ammo/xeno/acid/heavy/passthrough //Praetorian - flags_ammo_behavior = AMMO_XENO|AMMO_EXPLOSIVE|AMMO_SKIPS_ALIENS + ammo_behavior_flags = AMMO_XENO|AMMO_SKIPS_ALIENS /datum/ammo/xeno/toxin/heavy spit_cost = 200 @@ -303,7 +303,6 @@ shell_speed = 2 bullet_color = COLOR_STRONG_VIOLET damage_type = BURN - flags_ammo_behavior = AMMO_IGNORE_RESIST hud_state = "plasma" hud_state_empty = "electrothermal_empty" @@ -346,7 +345,7 @@ bullet_color = COLOR_VIOLET damage = 0 - flags_ammo_behavior = AMMO_ENERGY|AMMO_IGNORE_RESIST + ammo_behavior_flags = AMMO_ENERGY /datum/ammo/energy/yautja/caster/stun/on_hit_mob(mob/M, obj/projectile/P) var/mob/living/carbon/C = M @@ -368,7 +367,6 @@ /datum/ammo/energy/yautja/caster/bolt name = "plasma bolt" icon_state = "pulse1" - flags_ammo_behavior = AMMO_IGNORE_RESIST bullet_color = COLOR_BRIGHT_BLUE shell_speed = 3 damage = 35 @@ -382,7 +380,7 @@ hud_state = "plasma_rifle" damage = 0 - flags_ammo_behavior = AMMO_ENERGY|AMMO_IGNORE_RESIST + ammo_behavior_flags = AMMO_ENERGY /datum/ammo/energy/yautja/caster/bolt/stun/on_hit_mob(mob/M, obj/projectile/P) var/mob/living/carbon/C = M @@ -405,7 +403,7 @@ name = "plasma eradicator" icon_state = "bluespace" bullet_color = COLOR_BRIGHT_BLUE - flags_ammo_behavior = AMMO_EXPLOSIVE + ammo_behavior_flags = AMMO_TARGET_TURF shell_speed = 2 accuracy = 40 @@ -433,7 +431,7 @@ name = "plasma immobilizer" bullet_color = COLOR_MAGENTA damage = 0 - flags_ammo_behavior = AMMO_ENERGY|AMMO_IGNORE_RESIST + ammo_behavior_flags = AMMO_ENERGY hud_state = "plasma_rifle_blast" accurate_range = 20 max_range = 20 @@ -475,7 +473,6 @@ name = "plasma rifle bolt" icon_state = "ion" damage_type = BURN - flags_ammo_behavior = AMMO_IGNORE_RESIST hud_state = "plasma_rifle" @@ -491,7 +488,7 @@ icon_state = "buckshot_shrapnel" icon = 'modular_RUtgmc/icons/obj/items/projectiles.dmi' accurate_range_min = 5 - flags_ammo_behavior = AMMO_BALLISTIC + ammo_behavior_flags = AMMO_BALLISTIC accuracy = 15 accurate_range = 32 max_range = 8 diff --git a/modular_RUtgmc/code/modules/projectiles/gun_attachables.dm b/modular_RUtgmc/code/modules/projectiles/gun_attachables.dm index 5842851c2deb8..cf24828ed70f8 100644 --- a/modular_RUtgmc/code/modules/projectiles/gun_attachables.dm +++ b/modular_RUtgmc/code/modules/projectiles/gun_attachables.dm @@ -14,35 +14,10 @@ scatter_unwielded_mod = 0 damage_falloff_mod = 0 -/obj/item/attachable/stock/sgstock - greyscale_config = null - colorable_allowed = NONE - -/obj/item/attachable/stock/tl127stock - greyscale_config = null - colorable_allowed = NONE - -/obj/item/attachable/stock/t60stock - greyscale_config = null - colorable_allowed = NONE - -/obj/item/attachable/verticalgrip - greyscale_config = null - colorable_allowed = NONE - -/obj/item/attachable/angledgrip - greyscale_config = null - colorable_allowed = NONE - -/obj/item/attachable/foldable/t35stock - icon = 'modular_RUtgmc/icons/Marine/attachments_64.dmi' - greyscale_config = null - colorable_allowed = NONE - /obj/item/attachable/stock/t500stock name = "R-500 stock" desc = "Cool stock for cool revolver." - flags_attach_features = ATTACH_REMOVABLE + attach_features_flags = ATTACH_REMOVABLE wield_delay_mod = 0.2 SECONDS delay_mod = -0.4 SECONDS icon = 'modular_RUtgmc/icons/Marine/attachments_64.dmi' diff --git a/modular_RUtgmc/code/modules/projectiles/gun_system.dm b/modular_RUtgmc/code/modules/projectiles/gun_system.dm index 15a4a3749371d..b515d5d67b092 100644 --- a/modular_RUtgmc/code/modules/projectiles/gun_system.dm +++ b/modular_RUtgmc/code/modules/projectiles/gun_system.dm @@ -3,7 +3,7 @@ var/silenced_sound /obj/item/weapon/gun/wield(mob/user) - if(CHECK_BITFIELD(flags_gun_features, GUN_DEPLOYED_FIRE_ONLY)) + if(CHECK_BITFIELD(gun_features_flags, GUN_DEPLOYED_FIRE_ONLY)) to_chat(user, span_notice("[src] cannot be fired by hand and must be deployed.")) return diff --git a/modular_RUtgmc/code/modules/projectiles/guns/energy.dm b/modular_RUtgmc/code/modules/projectiles/guns/energy.dm index 6950a37783538..725d8c217d89d 100644 --- a/modular_RUtgmc/code/modules/projectiles/guns/energy.dm +++ b/modular_RUtgmc/code/modules/projectiles/guns/energy.dm @@ -1,72 +1,8 @@ -//TE Standard Laser rifle - -/obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_rifle - icon_state = "ter" - item_state = "ter" - greyscale_config = null - colorable_allowed = NONE - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', - ) - -/datum/lasrifle/energy_rifle_mode/standard - icon_state = "ter" - -/datum/lasrifle/energy_rifle_mode/overcharge - icon_state = "ter" - -/datum/lasrifle/energy_rifle_mode/weakening - icon_state = "ter" - -/datum/lasrifle/energy_rifle_mode/microwave - icon_state = "ter" - -///TE Standard Laser Pistol - -/obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_pistol - icon_state = "tep" - item_state = "tep" - greyscale_config = null - colorable_allowed = NONE - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', - ) - -/datum/lasrifle/energy_pistol_mode/standard - icon_state = "tep" - -/datum/lasrifle/energy_pistol_mode/disabler - icon_state = "tep" - -/datum/lasrifle/energy_pistol_mode/heat - icon_state = "tep" - //TE Standard Laser Carbine /obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_carbine - icon_state = "tec" - item_state = "tec" - greyscale_config = null - colorable_allowed = NONE - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', - ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_WIELDED_FIRING_ONLY - -/datum/lasrifle/energy_carbine_mode/auto_burst - icon_state = "tec" + gun_features_flags = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_WIELDED_FIRING_ONLY -/datum/lasrifle/energy_carbine_mode/base/spread - icon_state = "tec" - -/datum/lasrifle/energy_carbine_mode/base/impact - icon_state = "tec" - -/datum/lasrifle/energy_carbine_mode/base/cripple - icon_state = "tec" //TE Standard Sniper @@ -76,8 +12,6 @@ icon = 'modular_RUtgmc/icons/Marine/gun64.dmi' icon_state = "tes" item_state = "tes" - greyscale_config = null - colorable_allowed = NONE item_icons = list( slot_l_hand_str = 'modular_RUtgmc/icons/mob/items_lefthand_64.dmi', slot_r_hand_str = 'modular_RUtgmc/icons/mob/items_righthand_64.dmi', @@ -98,7 +32,7 @@ movement_acc_penalty_mult = 6 aim_fire_delay = 1 SECONDS - flags_gun_features = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_WIELDED_FIRING_ONLY + gun_features_flags = GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_WIELDED_FIRING_ONLY attachable_allowed = list( /obj/item/attachable/bayonet, @@ -111,7 +45,6 @@ /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, - /obj/item/attachable/shoulder_mount, /obj/item/attachable/gyro, /obj/item/attachable/verticalgrip, /obj/item/attachable/angledgrip, @@ -163,30 +96,6 @@ /obj/item/weapon/gun/energy/lasgun/lasrifle/xray fire_delay = 0.4 SECONDS -// TE Standard MG - -/obj/item/weapon/gun/energy/lasgun/lasrifle/standard_marine_mlaser - icon_state = "tem" - item_state = "tem" - greyscale_config = null - colorable_allowed = NONE - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', - ) - -/datum/lasrifle/energy_mg_mode/standard - icon_state = "tem" - -/datum/lasrifle/energy_mg_mode/standard/burst - icon_state = "tem" - -/datum/lasrifle/heavy_laser/burst - icon_state = "heavylaser" - -/datum/lasrifle/heavy_laser/ricochet - icon_state = "heavylaser" - /obj/item/weapon/gun/energy/lasgun/lasrifle/pocket_beam name = "\improper pocket beam" desc = "A Terra Experimental underbarrel laser system. Has multiple firemodes for tactical flexibility. Uses standard Terra Experimental (abbreviated as TE) power cells." @@ -205,7 +114,7 @@ attachable_allowed = list() starting_attachment_types = list() slot = ATTACHMENT_SLOT_UNDER - flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_ATTACHMENT_FIRE_ONLY|GUN_IS_ATTACHMENT|GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING + gun_features_flags = GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_ATTACHMENT_FIRE_ONLY|GUN_IS_ATTACHMENT|GUN_CAN_POINTBLANK|GUN_ENERGY|GUN_AMMO_COUNTER|GUN_NO_PITCH_SHIFT_NEAR_EMPTY|GUN_AMMO_COUNT_BY_SHOTS_REMAINING wield_delay = 0.5 SECONDS scatter = 0 fire_delay = 2 SECONDS @@ -229,7 +138,7 @@ ammo_datum_type = /datum/ammo/energy/lasgun/marine/pistol/heat/pocket /datum/ammo/energy/lasgun/marine/pistol/heat/pocket - flags_ammo_behavior = AMMO_ENERGY|AMMO_INCENDIARY|AMMO_SUNDERING|AMMO_HITSCAN + ammo_behavior_flags = AMMO_ENERGY|AMMO_INCENDIARY|AMMO_HITSCAN incendiary_strength = 15 hitscan_effect_icon = "beam_incen" bullet_color = COLOR_LASER_RED diff --git a/modular_RUtgmc/code/modules/projectiles/guns/grenade_launchers.dm b/modular_RUtgmc/code/modules/projectiles/guns/grenade_launchers.dm index 2f74d9d0fcf08..d89bcc6c60487 100644 --- a/modular_RUtgmc/code/modules/projectiles/guns/grenade_launchers.dm +++ b/modular_RUtgmc/code/modules/projectiles/guns/grenade_launchers.dm @@ -4,7 +4,7 @@ /obj/item/weapon/gun/grenade_launcher/single_shot wield_delay = 0.8 SECONDS - flags_gun_features = GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES|GUN_WIELDED_STABLE_FIRING_ONLY + gun_features_flags = GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES|GUN_WIELDED_STABLE_FIRING_ONLY /obj/item/weapon/gun/grenade_launcher/single_shot/flare wield_delay = 0.4 SECONDS @@ -44,6 +44,6 @@ if(istype(new_magazine.loc, /obj/item/storage)) var/obj/item/storage/S = new_magazine.loc S.remove_from_storage(new_magazine, get_turf(user), user) - if(!CHECK_BITFIELD(get_flags_magazine_features(new_magazine), MAGAZINE_WORN)) + if(!CHECK_BITFIELD(get_magazine_features_flags(new_magazine), MAGAZINE_WORN)) user.put_in_any_hand_if_possible(new_magazine) reload(new_magazine, user) diff --git a/modular_RUtgmc/code/modules/projectiles/guns/pistols.dm b/modular_RUtgmc/code/modules/projectiles/guns/pistols.dm deleted file mode 100644 index d5692be978ec2..0000000000000 --- a/modular_RUtgmc/code/modules/projectiles/guns/pistols.dm +++ /dev/null @@ -1,38 +0,0 @@ -//------------------------------------------------------- -//P-14 PISTOL - -/obj/item/weapon/gun/pistol/standard_pistol - icon_state = "tp14" - item_state = "tp14" - greyscale_config = null - colorable_allowed = NONE - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', - ) - -//------------------------------------------------------- -//PP-7 Plasma Pistol - -/obj/item/weapon/gun/pistol/plasma_pistol - icon_state = "tx7" - item_state = "tx7" - greyscale_config = null - colorable_allowed = NONE - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', - ) - -//------------------------------------------------------- -// P-23 service pistol - -/obj/item/weapon/gun/pistol/standard_heavypistol - icon_state = "tp23" - item_state = "tp23" - greyscale_config = null - colorable_allowed = NONE - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', - ) diff --git a/modular_RUtgmc/code/modules/projectiles/guns/revolvers.dm b/modular_RUtgmc/code/modules/projectiles/guns/revolvers.dm index 853f0d64cae30..f405942bd166d 100644 --- a/modular_RUtgmc/code/modules/projectiles/guns/revolvers.dm +++ b/modular_RUtgmc/code/modules/projectiles/guns/revolvers.dm @@ -1,16 +1,3 @@ -//------------------------------------------------------- -//R-44 COMBAT REVOLVER - -/obj/item/weapon/gun/revolver/standard_revolver - icon_state = "tp44" - item_state = "tp44" - greyscale_config = null - colorable_allowed = NONE - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', - ) - /////////////////////////////////////////////////////////////////////// //////// Сoltrifle, based on Colt Model 1855 Revolving Rifle. ///////// /////////////////////////////////////////////////////////////////////// @@ -21,7 +8,6 @@ icon = 'modular_RUtgmc/icons/Marine/gun64.dmi' icon_state = "coltrifle" item_state = "coltrifle" - greyscale_config = null item_icons = list( slot_l_hand_str = 'modular_RUtgmc/icons/mob/items_lefthand_1.dmi', slot_r_hand_str = 'modular_RUtgmc/icons/mob/items_righthand_1.dmi', @@ -31,7 +17,7 @@ fire_animation = "coltrifle_fire" fire_sound = 'sound/weapons/guns/fire/mateba.ogg' gun_skill_category = SKILL_RIFLES - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_BULKY caliber = CALIBER_44LS max_chamber_items = 8 @@ -48,8 +34,7 @@ fire_delay = 0.25 SECONDS aim_fire_delay = 0.25 SECONDS - upper_akimbo_accuracy = 6 - lower_akimbo_accuracy = 3 + akimbo_scatter_mod = 8 akimbo_additional_delay = 1 aim_slowdown = 0.3 diff --git a/modular_RUtgmc/code/modules/projectiles/guns/rifles.dm b/modular_RUtgmc/code/modules/projectiles/guns/rifles.dm index e4703831d34da..39ff4f94cec75 100644 --- a/modular_RUtgmc/code/modules/projectiles/guns/rifles.dm +++ b/modular_RUtgmc/code/modules/projectiles/guns/rifles.dm @@ -47,7 +47,7 @@ /obj/item/attachable/motiondetector, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_IFF + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_IFF gun_firemode_list = list(GUN_FIREMODE_SEMIAUTO, GUN_FIREMODE_AUTOMATIC) gun_skill_category = SKILL_SMARTGUN //Uses SG skill for the penalties. attachable_offset = list("muzzle_x" = 42, "muzzle_y" = 17,"rail_x" = 15, "rail_y" = 21, "under_x" = 24, "under_y" = 14, "stock_x" = 12, "stock_y" = 13) @@ -64,18 +64,10 @@ //AR-18 Carbine /obj/item/weapon/gun/rifle/standard_carbine - icon_state = "t18" - item_state = "t18" - greyscale_config = null - colorable_allowed = NONE unload_sound = 'modular_RUtgmc/sound/weapons/guns/rifles/AR-18/AR18_clipout.ogg' reload_sound = 'modular_RUtgmc/sound/weapons/guns/rifles/AR-18/AR18_clipin.ogg' cocked_sound = 'modular_RUtgmc/sound/weapons/guns/rifles/AR-18/AR18_boltpull.ogg' silenced_sound = 'modular_RUtgmc/sound/weapons/guns/rifles/AR-11/AR11_SIL.ogg' - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', - ) allowed_ammo_types = list( /obj/item/ammo_magazine/rifle/standard_carbine, /obj/item/ammo_magazine/rifle/standard_carbine/ap, @@ -85,18 +77,10 @@ //AR-12 Assault Rifle /obj/item/weapon/gun/rifle/standard_assaultrifle - icon_state = "t12" - item_state = "t12" - greyscale_config = null - colorable_allowed = NONE dry_fire_sound = 'sound/weapons/guns/fire/m41a_empty.ogg' unload_sound = 'modular_RUtgmc/sound/weapons/guns/rifles/AR-12/AR12_clipout.ogg' reload_sound = 'modular_RUtgmc/sound/weapons/guns/rifles/AR-12/AR12_clipin.ogg' cocked_sound = 'modular_RUtgmc/sound/weapons/guns/rifles/AR-12/AR12_boltpull.ogg' - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', - ) allowed_ammo_types = list( /obj/item/ammo_magazine/rifle/standard_assaultrifle, /obj/item/ammo_magazine/rifle/standard_assaultrifle/ap, @@ -130,7 +114,6 @@ /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, - /obj/item/attachable/shoulder_mount, /obj/item/weapon/gun/energy/lasgun/lasrifle/pocket_beam, ) starting_attachment_types = list(/obj/item/attachable/stock/t12stock) @@ -147,21 +130,13 @@ //------------------------------------------------------- //DMR-37 DMR - /obj/item/weapon/gun/rifle/standard_dmr - icon_state = "t37" - item_state = "t37" - greyscale_config = null - colorable_allowed = NONE unload_sound = 'modular_RUtgmc/sound/weapons/guns/dmr/DMR-37/DMR37_clipout.ogg' reload_sound = 'modular_RUtgmc/sound/weapons/guns/dmr/DMR-37/DMR37_clipin.ogg' cocked_sound = 'modular_RUtgmc/sound/weapons/guns/dmr/DMR-37/DMR37_boltpull.ogg' silenced_sound = 'modular_RUtgmc/sound/weapons/guns/dmr/DMR-37/DMR37_SIL.ogg' wield_sound = 'modular_RUtgmc/sound/weapons/guns/dmr/Deploy_Wave_DMR.ogg' - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_64.dmi', - ) + //------------------------------------------------------- //BR-64 BR @@ -205,7 +180,6 @@ /obj/item/weapon/gun/grenade_launcher/underslung/elite, /obj/item/attachable/buildasentry, /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, - /obj/item/attachable/shoulder_mount, ) starting_attachment_types = list(/obj/item/attachable/magnetic_harness, /obj/item/weapon/gun/grenade_launcher/underslung/elite) @@ -213,8 +187,6 @@ //MG-42 Light Machine Gun /obj/item/weapon/gun/rifle/standard_lmg - greyscale_config = null - colorable_allowed = NONE icon_state = "t42" item_state = "t42" unload_sound = 'modular_RUtgmc/sound/weapons/guns/machineguns/MG-42/MG42_clipout.ogg' @@ -260,10 +232,6 @@ //MG-60 General Purpose Machine Gun /obj/item/weapon/gun/rifle/standard_gpmg - icon_state = "t60" - item_state = "t60" - fire_animation = "t60_fire" - greyscale_config = null unload_sound = 'modular_RUtgmc/sound/weapons/guns/machineguns/MG-60/MG60_boxout.ogg' reload_sound = 'modular_RUtgmc/sound/weapons/guns/machineguns/MG-60/MG60_boxin.ogg' cocked_sound = 'modular_RUtgmc/sound/weapons/guns/machineguns/MG-60/MG60_boltpull.ogg' @@ -284,119 +252,15 @@ /obj/item/attachable/magnetic_harness, /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, - ) - colorable_allowed = NONE - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_64.dmi', - ) - -//------------------------------------------------------- -//SH-15 AUTOMATIC SHOTGUN - -/obj/item/weapon/gun/rifle/standard_autoshotgun - icon_state = "tx15" - item_state = "tx15" - greyscale_config = null - colorable_allowed = NONE - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', - ) - -//------------------------------------------------------- -//SG-29 Smart Machine Gun (It's more of a rifle than the SG.) - -/obj/item/weapon/gun/rifle/standard_smartmachinegun - icon_state = "sg29" - item_state = "sg29" - greyscale_config = null - colorable_allowed = NONE - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', - ) - -//------------------------------------------------------- -//SR-127 bolt action sniper rifle - -/obj/item/weapon/gun/rifle/chambered - icon_state = "tl127" - item_state = "tl127" - greyscale_config = null - colorable_allowed = NONE - fire_sound = 'modular_RUtgmc/sound/weapons/guns/sniper/SR-127/SR127.ogg' - fire_rattle = null - unload_sound = 'modular_RUtgmc/sound/weapons/guns/sniper/SR-127/SR127_clipout.ogg' - reload_sound = 'modular_RUtgmc/sound/weapons/guns/sniper/SR-127/SR127_clipin.ogg' - cocked_sound = 'modular_RUtgmc/sound/weapons/guns/sniper/SR-127/SR127_boltpull.ogg' - silenced_sound = 'modular_RUtgmc/sound/weapons/guns/sniper/SR-127/SR127_SIL.ogg' - wield_sound = 'modular_RUtgmc/sound/weapons/guns/dmr/Deploy_Wave_DMR.ogg' - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_64.dmi', - ) - cock_animation = "tl127_cock" - -//------------------------------------------------------- -//SR-81 Auto-Sniper - -/obj/item/weapon/gun/rifle/standard_autosniper - icon_state = "t81" - item_state = "t81" - greyscale_config = null - colorable_allowed = NONE - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', - ) - attachable_allowed = list( - /obj/item/attachable/autosniperbarrel, - /obj/item/attachable/scope/nightvision, - /obj/item/attachable/extended_barrel, - /obj/item/attachable/suppressor, - /obj/item/attachable/bayonet, - /obj/item/attachable/bayonetknife, - /obj/item/attachable/bayonetknife/som, - /obj/item/attachable/compensator, - ) - starting_attachment_types = list( - /obj/item/attachable/autosniperbarrel, - /obj/item/attachable/scope/nightvision, ) -//------------------------------------------------------- -//AR-11 Rifle, based on the gamer-11 - -/obj/item/weapon/gun/rifle/tx11 - icon_state = "tx11" - item_state = "tx11" - greyscale_config = null - colorable_allowed = NONE - unload_sound = 'modular_RUtgmc/sound/weapons/guns/rifles/AR-11/AR11_clipout.ogg' - reload_sound = 'modular_RUtgmc/sound/weapons/guns/rifles/AR-11/AR11_clipin.ogg' - cocked_sound = 'modular_RUtgmc/sound/weapons/guns/rifles/AR-11/AR11_boltpull.ogg' - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', - ) - //------------------------------------------------------- //AR-21 Assault Rifle /obj/item/weapon/gun/rifle/standard_skirmishrifle - icon_state = "t21" - item_state = "t21" - greyscale_config = null - colorable_allowed = NONE unload_sound = 'modular_RUtgmc/sound/weapons/guns/rifles/AR-21/AR21_clipout.ogg' reload_sound = 'modular_RUtgmc/sound/weapons/guns/rifles/AR-21/AR21_clipin.ogg' cocked_sound = 'modular_RUtgmc/sound/weapons/guns/rifles/AR-21/AR21_boltpull.ogg' - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_64.dmi', - ) allowed_ammo_types = list( /obj/item/ammo_magazine/rifle/standard_skirmishrifle, /obj/item/ammo_magazine/rifle/standard_skirmishrifle/extended, @@ -421,6 +285,26 @@ /obj/item/ammo_magazine/rifle/standard_carbine/ap, ) +//------------------------------------------------------- +//SR-127 bolt action sniper rifle + +/obj/item/weapon/gun/rifle/chambered + fire_sound = 'modular_RUtgmc/sound/weapons/guns/sniper/SR-127/SR127.ogg' + fire_rattle = null + unload_sound = 'modular_RUtgmc/sound/weapons/guns/sniper/SR-127/SR127_clipout.ogg' + reload_sound = 'modular_RUtgmc/sound/weapons/guns/sniper/SR-127/SR127_clipin.ogg' + cocked_sound = 'modular_RUtgmc/sound/weapons/guns/sniper/SR-127/SR127_boltpull.ogg' + silenced_sound = 'modular_RUtgmc/sound/weapons/guns/sniper/SR-127/SR127_SIL.ogg' + wield_sound = 'modular_RUtgmc/sound/weapons/guns/dmr/Deploy_Wave_DMR.ogg' + +//------------------------------------------------------- +//AR-11 Rifle, based on the gamer-11 + +/obj/item/weapon/gun/rifle/tx11 + unload_sound = 'modular_RUtgmc/sound/weapons/guns/rifles/AR-11/AR11_clipout.ogg' + reload_sound = 'modular_RUtgmc/sound/weapons/guns/rifles/AR-11/AR11_clipin.ogg' + cocked_sound = 'modular_RUtgmc/sound/weapons/guns/rifles/AR-11/AR11_boltpull.ogg' + //------------------------------------------------------- //SG Target Rifle, has underbarreled spotting rifle that applies effects. diff --git a/modular_RUtgmc/code/modules/projectiles/guns/shotguns.dm b/modular_RUtgmc/code/modules/projectiles/guns/shotguns.dm index d2483a62fc16e..3901d816b8404 100644 --- a/modular_RUtgmc/code/modules/projectiles/guns/shotguns.dm +++ b/modular_RUtgmc/code/modules/projectiles/guns/shotguns.dm @@ -5,19 +5,10 @@ //SH-35 Pump shotgun /obj/item/weapon/gun/shotgun/pump/t35 - icon_state = "t35" - item_state = "t35" - cock_animation = "t35_pump" - greyscale_config = null - colorable_allowed = NONE fire_sound = 'modular_RUtgmc/sound/weapons/guns/shotgun/SH-35/SH35.ogg' hand_reload_sound = 'modular_RUtgmc/sound/weapons/guns/shotgun/SH-39/SH39_shell.ogg' cocked_sound = 'modular_RUtgmc/sound/weapons/guns/shotgun/SH-35/SH35_pump.ogg' opened_sound = 'modular_RUtgmc/sound/weapons/guns/shotgun/SH-35/SH35_pump.ogg' - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', - ) //------------------------------------------------------- //SH-46 semi automatic shotgun. @@ -26,7 +17,7 @@ name = "\improper SH-46 combat shotgun" desc = "The SH-46, is a semi-automatic, 12 Gauge, gas piston-operated shotgun, released for TGMC by CAU." force = 20 //Has a stock already - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK icon = 'modular_RUtgmc/icons/Marine/gun64.dmi' icon_state = "shq6" item_state = "shq6" @@ -39,7 +30,7 @@ fire_sound = 'modular_RUtgmc/sound/weapons/guns/shotgun/SH-46/SH46.ogg' hand_reload_sound = 'modular_RUtgmc/sound/weapons/guns/shotgun/SH-46/SH46_shell.ogg' cocked_sound = 'modular_RUtgmc/sound/weapons/guns/shotgun/SH-46/SH46_boltpull.ogg' - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES|GUN_WIELDED_FIRING_ONLY + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES|GUN_WIELDED_FIRING_ONLY max_chamber_items = 5 default_ammo_type = /datum/ammo/bullet/shotgun/buckshot attachable_allowed = list( @@ -96,4 +87,4 @@ // Martini Henry /obj/item/weapon/gun/shotgun/double/martini - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES|GUN_WIELDED_FIRING_ONLY + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES|GUN_WIELDED_FIRING_ONLY diff --git a/modular_RUtgmc/code/modules/projectiles/guns/smgs.dm b/modular_RUtgmc/code/modules/projectiles/guns/smgs.dm index 0f63e7884c38a..3737f6d65455c 100644 --- a/modular_RUtgmc/code/modules/projectiles/guns/smgs.dm +++ b/modular_RUtgmc/code/modules/projectiles/guns/smgs.dm @@ -6,19 +6,11 @@ // War is hell. Not glorious. /obj/item/weapon/gun/smg/standard_smg - icon_state = "t90" - item_state = "t90" - greyscale_config = null - colorable_allowed = NONE fire_sound = 'modular_RUtgmc/sound/weapons/guns/smgs/SMG-90/SMG90.ogg' unload_sound = 'modular_RUtgmc/sound/weapons/guns/smgs/SMG-90/SMG90_clipout.ogg' reload_sound = 'modular_RUtgmc/sound/weapons/guns/smgs/SMG-90/SMG90_clipin.ogg' cocked_sound = 'modular_RUtgmc/sound/weapons/guns/smgs/SMG-90/SMG90_boltpull.ogg' silenced_sound = 'modular_RUtgmc/sound/weapons/guns/smgs/SMG-90/SMG90_SIL.ogg' - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', - ) /obj/item/weapon/gun/smg/standard_machinepistol fire_sound = 'modular_RUtgmc/sound/weapons/guns/smgs/MP-19/MP19.ogg' @@ -45,7 +37,7 @@ ) caliber = CALIBER_45ACP //codex max_shells = 25 //codex - flags_equip_slot = ITEM_SLOT_BACK + equip_slot_flags = ITEM_SLOT_BACK force = 20 type_of_casings = null default_ammo_type = /obj/item/ammo_magazine/smg/vector @@ -65,7 +57,6 @@ /obj/item/attachable/magnetic_harness, /obj/item/attachable/motiondetector, /obj/item/attachable/buildasentry, - /obj/item/attachable/shoulder_mount, /obj/item/weapon/gun/pistol/plasma_pistol, /obj/item/weapon/gun/shotgun/combat/masterkey, /obj/item/weapon/gun/flamer/mini_flamer, @@ -73,7 +64,7 @@ /obj/item/weapon/gun/energy/lasgun/lasrifle/pocket_beam, ) - flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER + gun_features_flags = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 16, "rail_x" = 22, "rail_y" = 19, "under_x" = 26, "under_y" = 14, "stock_x" = 24, "stock_y" = 10) actions_types = list(/datum/action/item_action/aim_mode) @@ -95,5 +86,4 @@ scatter_unwielded = 6 // Not exactly small weapon, and recoil blowback is only for vertical recoil movement_acc_penalty_mult = 0.1 - upper_akimbo_accuracy = 5 - lower_akimbo_accuracy = 5 + akimbo_scatter_mod = 10 diff --git a/modular_RUtgmc/code/modules/projectiles/magazines/magazines.dm b/modular_RUtgmc/code/modules/projectiles/magazines/magazines.dm index 38e92a8a756e8..1bb711c8ecff1 100644 --- a/modular_RUtgmc/code/modules/projectiles/magazines/magazines.dm +++ b/modular_RUtgmc/code/modules/projectiles/magazines/magazines.dm @@ -33,7 +33,7 @@ icon_state = "t500" desc = "A R-500 BF revolver speed loader." default_ammo = /datum/ammo/bullet/revolver/t500 - flags_equip_slot = NONE + equip_slot_flags = NONE caliber = CALIBER_500 w_class = WEIGHT_CLASS_SMALL max_rounds = 5 diff --git a/modular_RUtgmc/code/modules/projectiles/projectile.dm b/modular_RUtgmc/code/modules/projectiles/projectile.dm index 611ff26fa71f1..1806a90c3fe22 100644 --- a/modular_RUtgmc/code/modules/projectiles/projectile.dm +++ b/modular_RUtgmc/code/modules/projectiles/projectile.dm @@ -7,7 +7,7 @@ return FALSE if(HAS_TRAIT(src, TRAIT_BURROWED)) return FALSE - if(proj.ammo.flags_ammo_behavior & AMMO_SKIPS_ALIENS) + if(proj.ammo.ammo_behavior_flags & AMMO_SKIPS_ALIENS) return FALSE if(is_charging >= CHARGE_ON) proj.damage -= proj.damage * (0.2 * get_sunder()) diff --git a/modular_RUtgmc/code/modules/reagents/reagents/medical.dm b/modular_RUtgmc/code/modules/reagents/reagents/medical.dm index 8cd0d7a01ef8a..5d31c1b4d6e12 100644 --- a/modular_RUtgmc/code/modules/reagents/reagents/medical.dm +++ b/modular_RUtgmc/code/modules/reagents/reagents/medical.dm @@ -110,8 +110,8 @@ ///MEDICAL NANITES -/datum/reagent/medicine/research/medicalnanites +/datum/reagent/medicalnanites overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL * 1.7 -/datum/reagent/medicine/research/medicalnanites/overdose_crit_process(mob/living/L, metabolism) +/datum/reagent/medicalnanites/overdose_crit_process(mob/living/L, metabolism) L.adjustCloneLoss(1) //YUM! diff --git a/modular_RUtgmc/code/modules/reqs/supply.dm b/modular_RUtgmc/code/modules/reqs/supply.dm index 87eac9ecd5fc8..c992d2755eb79 100644 --- a/modular_RUtgmc/code/modules/reqs/supply.dm +++ b/modular_RUtgmc/code/modules/reqs/supply.dm @@ -6,11 +6,3 @@ . = ..() .["personalpoints"] = round(SSpoints.personal_supply_points[user.ckey]) -/obj/item/storage/backpack/marine/radiopack/attack_self(mob/living/user) - . = ..() - addtimer(CALLBACK(src, PROC_REF(update_beacon_location)), 5 SECONDS) - -/obj/item/storage/backpack/marine/radiopack/proc/update_beacon_location() - if(beacon_datum) - beacon_datum.drop_location = get_turf(src) - addtimer(CALLBACK(src, PROC_REF(update_beacon_location), beacon_datum), 5 SECONDS) diff --git a/modular_RUtgmc/code/modules/reqs/supplypacks.dm b/modular_RUtgmc/code/modules/reqs/supplypacks.dm index be897ccb725ad..99eebe79ef184 100644 --- a/modular_RUtgmc/code/modules/reqs/supplypacks.dm +++ b/modular_RUtgmc/code/modules/reqs/supplypacks.dm @@ -309,7 +309,7 @@ MEDICAL /datum/supply_packs/medical/defibrillator_gloves name = "Advanced defibrillator medical gloves" notes = "contains advanced defibrillator medical gloves." - contains = list(/obj/item/defibrillator/gloves) + contains = list(/obj/item/clothing/gloves/defibrillator) cost = 120 containertype = /obj/structure/closet/crate/secure/surgery access = ACCESS_MARINE_MEDBAY diff --git a/modular_RUtgmc/code/modules/requisitions/supply_export.dm b/modular_RUtgmc/code/modules/requisitions/supply_export.dm index 351a4868afe77..fff8097c41ed3 100644 --- a/modular_RUtgmc/code/modules/requisitions/supply_export.dm +++ b/modular_RUtgmc/code/modules/requisitions/supply_export.dm @@ -3,11 +3,11 @@ . = ..() switch(job.job_category) if(JOB_CAT_CIVILIAN) - . = 10 + . = list(10, 1) if(JOB_CAT_ENGINEERING, JOB_CAT_MEDICAL, JOB_CAT_REQUISITIONS) - . = 150 + . = list(150, 15) if(JOB_CAT_MARINE) - . = 100 + . = list(100, 10) return /mob/living/carbon/human/species/yautja/get_export_value() diff --git a/modular_RUtgmc/code/modules/shuttle/marine_dropship.dm b/modular_RUtgmc/code/modules/shuttle/marine_dropship.dm index 8cb6452045aec..1414a794308dd 100644 --- a/modular_RUtgmc/code/modules/shuttle/marine_dropship.dm +++ b/modular_RUtgmc/code/modules/shuttle/marine_dropship.dm @@ -99,7 +99,7 @@ D.silicon_lock_airlocks(TRUE) to_chat(user, span_warning("We have overriden the shuttle lockdown!")) playsound(user, "alien_roar", 50) - priority_announce("Normandy lockdown protocol compromised. Interference preventing remote control", "Dropship Lock Alert") + priority_announce("Normandy lockdown protocol compromised. Interference preventing remote control.", "Dropship Lock Alert", type = ANNOUNCEMENT_PRIORITY, color_override = "red") return FALSE if(D.mode != SHUTTLE_IDLE && D.mode != SHUTTLE_RECHARGING) to_chat(user, span_warning("The bird's mind is currently active. We need to wait until it's more vulnerable...")) diff --git a/modular_RUtgmc/code/modules/surgery/surgery_tools.dm b/modular_RUtgmc/code/modules/surgery/surgery_tools.dm index 1185892a0d534..fc48d571a9d87 100644 --- a/modular_RUtgmc/code/modules/surgery/surgery_tools.dm +++ b/modular_RUtgmc/code/modules/surgery/surgery_tools.dm @@ -12,7 +12,7 @@ name = "cauterizer" icon = 'modular_RUtgmc/icons/obj/items/surgery_tools.dmi' icon_state = "predator_cautery" - flags_item = ITEM_PREDATOR + item_flags = ITEM_PREDATOR /obj/item/tool/surgery/surgicaldrill/predatorsurgicaldrill name = "bone drill" @@ -28,7 +28,7 @@ name = "bone saw" icon = 'modular_RUtgmc/icons/obj/items/surgery_tools.dmi' icon_state = "predator_bonesaw" - flags_item = ITEM_PREDATOR + item_flags = ITEM_PREDATOR force = 20 /obj/item/tool/surgery/bonegel/predatorbonegel @@ -58,7 +58,7 @@ force = 0 throwforce = 1 w_class = WEIGHT_CLASS_SMALL - flags_item = ITEM_PREDATOR + item_flags = ITEM_PREDATOR /obj/item/tool/surgery/healing_gun name = "healing gun" @@ -68,10 +68,11 @@ force = 0 throwforce = 1 w_class = WEIGHT_CLASS_SMALL - flags_item = ITEM_PREDATOR + item_flags = ITEM_PREDATOR var/loaded = TRUE /obj/item/tool/surgery/healing_gun/update_icon() + . = ..() if(loaded) icon_state = "healing_gun" else @@ -101,7 +102,7 @@ force = 0 throwforce = 1 w_class = WEIGHT_CLASS_SMALL - flags_item = ITEM_PREDATOR + item_flags = ITEM_PREDATOR /obj/item/tool/surgery/wound_clamp name = "wound clamp" @@ -111,4 +112,4 @@ force = 0 throwforce = 1 w_class = WEIGHT_CLASS_SMALL - flags_item = ITEM_PREDATOR + item_flags = ITEM_PREDATOR diff --git a/modular_RUtgmc/code/modules/vehicles/mecha/mecha_defense.dm b/modular_RUtgmc/code/modules/vehicles/mecha/mecha_defense.dm index 34bfe06178167..9b87595871398 100644 --- a/modular_RUtgmc/code/modules/vehicles/mecha/mecha_defense.dm +++ b/modular_RUtgmc/code/modules/vehicles/mecha/mecha_defense.dm @@ -2,7 +2,7 @@ log_message("Affected by explosion of severity: [severity].", LOG_MECHA, color="red") if(CHECK_BITFIELD(resistance_flags, INDESTRUCTIBLE)) return - if(!(flags_atom & PREVENT_CONTENTS_EXPLOSION)) + if(!(atom_flags & PREVENT_CONTENTS_EXPLOSION)) contents_explosion(severity) if(QDELETED(src)) return diff --git a/modular_RUtgmc/icons/Xeno/actions.dmi b/modular_RUtgmc/icons/Xeno/actions.dmi index 88ae58bd94e1b..c18061d1ea996 100644 Binary files a/modular_RUtgmc/icons/Xeno/actions.dmi and b/modular_RUtgmc/icons/Xeno/actions.dmi differ diff --git a/modular_RUtgmc/includes.dm b/modular_RUtgmc/includes.dm index 70858dbd29089..97a53c3184814 100644 --- a/modular_RUtgmc/includes.dm +++ b/modular_RUtgmc/includes.dm @@ -170,7 +170,6 @@ #include "code\game\turfs\closed.dm" #include "code\game\turfs\floor_types.dm" #include "code\game\turfs\floor.dm" -#include "code\game\turfs\liquid_turfs.dm" #include "code\game\turfs\snow.dm" #include "code\game\turfs\turf.dm" #include "code\game\turfs\walls\resin.dm" @@ -248,14 +247,12 @@ #include "code\modules\mob\living\carbon\xenomorph\xenomorph.dm" #include "code\modules\mob\living\carbon\xenomorph\xenoprocs.dm" #include "code\modules\mob\living\carbon\xenomorph\xenoupgrade.dm" -#include "code\modules\mob\living\carbon\xenomorph\castes\behemoth\abilities_behemoth.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\behemoth\castedatum_behemoth.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\behemoth\behemoth.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\boiler\abilities_boiler.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\boiler\boiler.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\boiler\castedatum_boiler.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\bull\bull.dm" -#include "code\modules\mob\living\carbon\xenomorph\castes\bull\castedatum_bull.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\carrier\abilities_carrier.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\carrier\carrier.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\carrier\castedatum_carrier.dm" @@ -312,7 +309,6 @@ #include "code\modules\mob\living\carbon\xenomorph\castes\warlock\castedatum_warlock.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\warrior\abilities_warrior.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\warrior\castedatum_warrior.dm" -#include "code\modules\mob\living\silicon\ai\ai.dm" #include "code\modules\mob\living\silicon\silicon.dm" #include "code\modules\mob\living\simple_animal\simple_animal.dm" #include "code\modules\organs\limb_objects.dm" @@ -371,7 +367,6 @@ #include "code\modules\projectiles\guns\flamer.dm" #include "code\modules\projectiles\guns\grenade_launchers.dm" #include "code\modules\projectiles\guns\mounted.dm" -#include "code\modules\projectiles\guns\pistols.dm" #include "code\modules\projectiles\guns\revolvers.dm" #include "code\modules\projectiles\guns\rifles.dm" #include "code\modules\projectiles\guns\shotguns.dm" diff --git a/rust_g.dll b/rust_g.dll index dcaab5722fbb9..2e95a6be9b35e 100644 Binary files a/rust_g.dll and b/rust_g.dll differ diff --git a/sound/effects/lightbuzzloop6.ogg b/sound/effects/lightbuzzloop6.ogg new file mode 100644 index 0000000000000..79375d82c8f41 Binary files /dev/null and b/sound/effects/lightbuzzloop6.ogg differ diff --git a/sound/effects/lightfizz.ogg b/sound/effects/lightfizz.ogg new file mode 100644 index 0000000000000..1b7575a64315f Binary files /dev/null and b/sound/effects/lightfizz.ogg differ diff --git a/sound/effects/lightfizz2.ogg b/sound/effects/lightfizz2.ogg new file mode 100644 index 0000000000000..eb5be4bc284f7 Binary files /dev/null and b/sound/effects/lightfizz2.ogg differ diff --git a/sound/effects/lightfizz3.ogg b/sound/effects/lightfizz3.ogg new file mode 100644 index 0000000000000..ef50cbfe0f6f6 Binary files /dev/null and b/sound/effects/lightfizz3.ogg differ diff --git a/sound/effects/lightfizz4.ogg b/sound/effects/lightfizz4.ogg new file mode 100644 index 0000000000000..33591fabc01d1 Binary files /dev/null and b/sound/effects/lightfizz4.ogg differ diff --git a/sound/effects/lightfizz5.ogg b/sound/effects/lightfizz5.ogg new file mode 100644 index 0000000000000..11f217550a8ac Binary files /dev/null and b/sound/effects/lightfizz5.ogg differ diff --git a/sound/effects/lightfizz6.ogg b/sound/effects/lightfizz6.ogg new file mode 100644 index 0000000000000..d4f6331e4cbfc Binary files /dev/null and b/sound/effects/lightfizz6.ogg differ diff --git a/sound/effects/tankswivel.ogg b/sound/effects/tankswivel.ogg new file mode 100644 index 0000000000000..775a13c07ccf8 Binary files /dev/null and b/sound/effects/tankswivel.ogg differ diff --git a/sound/vehicles/weapons/ltb_reload.ogg b/sound/vehicles/weapons/ltb_reload.ogg new file mode 100644 index 0000000000000..476eba1ddb907 Binary files /dev/null and b/sound/vehicles/weapons/ltb_reload.ogg differ diff --git a/sound/voice/plane_vws/ammunition_zero.ogg b/sound/voice/plane_vws/ammunition_zero.ogg new file mode 100644 index 0000000000000..0de0d693cbfe6 Binary files /dev/null and b/sound/voice/plane_vws/ammunition_zero.ogg differ diff --git a/sound/voice/plane_vws/flightcomputer_hot.ogg b/sound/voice/plane_vws/flightcomputer_hot.ogg new file mode 100644 index 0000000000000..6b76ddea034c8 Binary files /dev/null and b/sound/voice/plane_vws/flightcomputer_hot.ogg differ diff --git a/sound/voice/plane_vws/low_fuel.ogg b/sound/voice/plane_vws/low_fuel.ogg new file mode 100644 index 0000000000000..28ebcf311d0fc Binary files /dev/null and b/sound/voice/plane_vws/low_fuel.ogg differ diff --git a/sound/voice/plane_vws/no_fuel.ogg b/sound/voice/plane_vws/no_fuel.ogg new file mode 100644 index 0000000000000..f42b36b51f889 Binary files /dev/null and b/sound/voice/plane_vws/no_fuel.ogg differ diff --git a/sound/voice/plane_vws/shot_bomb.ogg b/sound/voice/plane_vws/shot_bomb.ogg new file mode 100644 index 0000000000000..d75a339268269 Binary files /dev/null and b/sound/voice/plane_vws/shot_bomb.ogg differ diff --git a/sound/voice/plane_vws/shot_flare.ogg b/sound/voice/plane_vws/shot_flare.ogg new file mode 100644 index 0000000000000..5b58180fe3685 Binary files /dev/null and b/sound/voice/plane_vws/shot_flare.ogg differ diff --git a/sound/voice/plane_vws/shot_missile.ogg b/sound/voice/plane_vws/shot_missile.ogg new file mode 100644 index 0000000000000..66c1d8097bc85 Binary files /dev/null and b/sound/voice/plane_vws/shot_missile.ogg differ diff --git a/sound/weapons/burst_phaser2.ogg b/sound/weapons/burst_phaser2.ogg new file mode 100644 index 0000000000000..53758c025adaa Binary files /dev/null and b/sound/weapons/burst_phaser2.ogg differ diff --git a/sound/weapons/guns/fire/plasma_fire_blast.ogg b/sound/weapons/guns/fire/plasma_fire_blast.ogg new file mode 100644 index 0000000000000..0a3ba715736c9 Binary files /dev/null and b/sound/weapons/guns/fire/plasma_fire_blast.ogg differ diff --git a/sound/weapons/guns/fire/plasma_fire_fast.ogg b/sound/weapons/guns/fire/plasma_fire_fast.ogg new file mode 100644 index 0000000000000..5544dc3295369 Binary files /dev/null and b/sound/weapons/guns/fire/plasma_fire_fast.ogg differ diff --git a/sound/weapons/guns/fire/plasma_fire_heavy.ogg b/sound/weapons/guns/fire/plasma_fire_heavy.ogg new file mode 100644 index 0000000000000..d0b8d4657e157 Binary files /dev/null and b/sound/weapons/guns/fire/plasma_fire_heavy.ogg differ diff --git a/sound/weapons/guns/fire/plasma_fire_med.ogg b/sound/weapons/guns/fire/plasma_fire_med.ogg new file mode 100644 index 0000000000000..5c164e2690ef0 Binary files /dev/null and b/sound/weapons/guns/fire/plasma_fire_med.ogg differ diff --git a/sound/weapons/guns/fire/skorpevo.ogg b/sound/weapons/guns/fire/skorpevo.ogg new file mode 100644 index 0000000000000..5a9ad10c1019d Binary files /dev/null and b/sound/weapons/guns/fire/skorpevo.ogg differ diff --git a/sound/weapons/guns/interact/gun_overheat.ogg b/sound/weapons/guns/interact/gun_overheat.ogg new file mode 100644 index 0000000000000..3a6fa34791377 Binary files /dev/null and b/sound/weapons/guns/interact/gun_overheat.ogg differ diff --git a/sound/weapons/guns/interact/plasma_reload_1.ogg b/sound/weapons/guns/interact/plasma_reload_1.ogg new file mode 100644 index 0000000000000..600ae413db8bc Binary files /dev/null and b/sound/weapons/guns/interact/plasma_reload_1.ogg differ diff --git a/sound/weapons/guns/interact/plasma_reload_2.ogg b/sound/weapons/guns/interact/plasma_reload_2.ogg new file mode 100644 index 0000000000000..c5cd2b6f53716 Binary files /dev/null and b/sound/weapons/guns/interact/plasma_reload_2.ogg differ diff --git a/sound/weapons/guns/interact/plasma_reload_3.ogg b/sound/weapons/guns/interact/plasma_reload_3.ogg new file mode 100644 index 0000000000000..0ca52bcbcecd2 Binary files /dev/null and b/sound/weapons/guns/interact/plasma_reload_3.ogg differ diff --git a/sound/weapons/guns/interact/plasma_unload_1.ogg b/sound/weapons/guns/interact/plasma_unload_1.ogg new file mode 100644 index 0000000000000..76367e1c7d415 Binary files /dev/null and b/sound/weapons/guns/interact/plasma_unload_1.ogg differ diff --git a/sound/weapons/guns/interact/plasma_unload_2.ogg b/sound/weapons/guns/interact/plasma_unload_2.ogg new file mode 100644 index 0000000000000..c799477b56a82 Binary files /dev/null and b/sound/weapons/guns/interact/plasma_unload_2.ogg differ diff --git a/sound/weapons/guns/interact/plasma_unload_3.ogg b/sound/weapons/guns/interact/plasma_unload_3.ogg new file mode 100644 index 0000000000000..26d9e2561daaf Binary files /dev/null and b/sound/weapons/guns/interact/plasma_unload_3.ogg differ diff --git a/strings/tips/marine.txt b/strings/tips/marine.txt index 98c54efe833a5..6504a1174163b 100644 --- a/strings/tips/marine.txt +++ b/strings/tips/marine.txt @@ -1,16 +1,26 @@ +Go to Valhalla to experiment with loadouts and weapons. You don't reset your respawn time in Valhalla! +Fire disables pheromones, use this information to your advantage. +Catch larval facehuggers by having an empty hand and throw mode on. +Standing in a corner on harm intent stops you from behing shuffled, unless you're a marine and a xenomorph on help intent walks into you. +Jumping will allow you to throw grenades farther, and over allies. Yeet those grenades to xenomorphs! +Hunger will slow you down. A single protein bar will fill everyone's stomach. Take an extra protein bar too much and you become slower (ironic) and fat. +If you are low on blood, eating food can help you replenish blood. +Roll on snow to instantly extinguish fire. Putting an instrument in your armor slot allows you to still be able to play it, charge into battle with song! Many maps spawn with free metal, plasteel and other important supplies in key spots. As a marine, remember to grab them and as a xeno, make sure to melt them. Trading your life for a Xenomorph's is almost always worth it. You do not need to be in harm intent to point blank xenomorphs! The mini map (green icon on the top of the screen) helps you know where the frontline is at and where revivable marines are. You can keybind it in game preferences. No round has ever been won behind a barricade. +You can refill the marine jetpack with flamer tanks. +Jetpacks can fly over most things. Use them to escape your poor decisions of overextending. If the main push is stagnating and the area is congested, try to coordinate with a few others and go to a different area. When pushing into an area, check the flanks. Especially so in caves and enclosed spaces. Resin structures are weaker to melee than they are to bullets. Take out your knives, swords and bayonets! Always clear weeds and alien structures as you advance. A resin maze forces marines to engage in CQC against xenomorphs, which decreases your survival rate. That said, this increases your PB chances! Always check for traps beneath loose objects on weeds - it could save your FACE! As a human, you can do almost anything if you put your mind to it; it just takes time. -You can link plasteel barricades together using a crowbar. Click one, and then click one adjacent. Repeat as needed. +Any marine can link plasteel barricades together using a crowbar. Click one, and then click one adjacent. Repeat as needed. A lone marine is a dead marine and a happy xeno. Stick together! Be mindful when using hand grenades. Getting stunned or knocked over after priming a grenade will drop it at your feet. This is obviously very dangerous for not only you, but your friends as well. Watch out for friendly fire and marines not in aim mode. Make sure you're not walking into anyone's firing line, and make sure no one else is in yours! @@ -33,7 +43,7 @@ Blue weeds and purple sticky resin slow you down. Get rid of them! During Self Destruct, green control rods are armed control rods. Each rods take 3 minutes to rise, forcing marines to hold Self Destruct for a total of 20 minutes. Collect all six! A fit marine can carry many weapons: in their armor, belt, even hanging from their back. Requisitions has many supplies to enhance the combat power of marine units, such as attachments, ammunition, and other toys; ask their crew what's in store and you may be pleasantly surprised. DISCLAIMER: Extra gears' availability is dependent on supply. -As a marine, you can climb over waist-high obstacles like sandbags, window frames or tables by "SpecialClicking" (Default: CTRL+click) on them or drag-clicking yourself onto them. +As a marine, you can climb over waist-high obstacles like sandbags, window frames or tables by CTRL+clicking them or drag-clicking yourself onto them. You can jump over waist-high obstacles like platforms, tables, and window frames, for a small stamina cost (Default: Spacebar). The Terra Experimental laser rifles have a mode selector that can be switched using the Unique Action command (Default: Spacebar). Some modes are better than other modes in specific circumstances. You can remove armor pieces (leg pieces, arm pieces and chest pieces) and armor modules (Valkyrie, Baldur, etc.) from the XM-02 Combat Exoskeleton by Alt+clicking the exoskeleton. @@ -45,10 +55,14 @@ To throw a grenade, Activate (Default: Z) the grenade while in the active hand. Quickly store items to a container (bags, satchels, belts, pouches) by pressing the Quick Equip (Default: E) key while holding an item and having a container open. Press Quick Equip (Default: E) while you are not holding an item to the active hand to draw the weapon from whatever preferred slot (Default: Suit Storage, can be customized at the Preferences tab) you selected, otherwise you will pull out any item from a container. Stasis bags do not pause xenomorph infection entirely, they only slow progress by a lot. -Stasis bags prevents the DNR (do not revive) timer from ticking, meaning that if corpsmen have a lot of patients, they can prevent brain death via stasis bags. +Stasis bags prevents brain death timer from ticking, meaning that if corpsmen have a lot of patients, they can prevent brain death via stasis bags. In the Crash gamemode, cooperate as a marine! Work as a squad to capture the disks and to detonate the nuclear bomb. In the Crash gamemode, remember that your objective is to secure all three disks, put the disks into the nuclear device and head home while the bomb is active. Xenos will keep on respawning until all of the marines are dead. While securing a FOB or securing a disk site, do not wander around outside! You will risk death by xenos who are comfy in sieging down the place. +Spaceacillin loses effectiveness against severe wound infections. Polyhexanide will pick where it left off at, at the cost of some toxin damage and drowsiness. +Russian Red and Neuraline injectors share the same healing property as Inaprovaline, however will also heal severe organ damage. +Wash your hands before surgery, in the field or shipside. +An entire MRE can fit in your boot. As an ERT member, stay with your teammates! Don't cower or seperate from them. As a marine, say '*medic' to call out for medical attention. You can keybind this in game preferences. As a human, hold and press Alt key (by default) to sprint, you will drain stamina while doing so. @@ -70,6 +84,7 @@ As a corpsman or engineer, your number one priority is NOT hunting down xenomorp As a doctor, the cryotubes are excellent at dealing with basic damage. As a doctor, the cryotubes heal internal bleeding and fractures, although slowly. As a doctor, surgery time from fastest to slowest is: by hand, Autodoc manual, Autodoc automatic. +As a doctor, the autodoc drains a lot of energy, this can cause a power outage and prevent medevac beacons from working! As a doctor, the white webbing vest fits on your scrubs and can hold surgical tools. As a doctor, wear the surgical apron to help prevent infection while doing surgery. As a doctor, you've got access to the chemistry machine. Experiment to find the best medications. @@ -81,12 +96,26 @@ As an engineer, det packs can be set on demolition mode for an explosive trap. As an engineer, you build barricades the fastest. As an engineer, repair the mining wells. These mining machines will mine phoron or platinum that can be used for requisitions, earning them more points! As an engineer, placing turrets on open spaces and without defenses is a poor choice. -As a corpsman, the medevac stretcher needs to be linked to an active, powered beacon for it to teleport the patient. +You can use a Terra experimental cell as a discount power cell! +You can upgrade metal barricades by clicking them with metal! +Bring at least 1 cell and 1 power control module to fix APCs for disks or intelligence computers. +The caustic upgrade prevents xenos from spewing acid all over an undefended barricade. +You can electrify razor wire, just place wire under razor and connect them to an ACTIVE power source like a phoron generator. +Razor wire can stop a crusher's charge, but it needs to be fully repaired for it to actually stop one. +ALWAYS keep a 1-tile distance from barricade you're fixing, unless you want to be a dinner for nearby fishing xenomorph. +If you are sure a barricade will fail and cause a breach, just make barricade behind that one, and move it forward, no need to risk your life in a breach. +RO lazy? Lack of materials keeps being a pain in the back? Don't worry any longer, there are plenty of chairs and tables around the area of operation which you can deconstruct for metal! +You can use a handheld cell charger to recharge both batteries and Terra experimental cells. +As a corpsman, the MEDEVAC stretcher needs to be linked to an active, powered beacon for it to teleport the patient. +As a corpsman, you can prevent anyone from moving your MEDEVAC beacon by locking it with your ID. +As a corpsman, if there's no medbay staff, put the MEDEVAC beacon in the hallway right outside the medbay door since the autodoc will drain medbay's APC of power, therefore preventing you from MEDEVACing your patient. As a corpsman, the marines are counting on you to fix them up. As a corpsman, scan before you treat and you can't be beat. +As a corpsman, if you see nanites in your patient's system, DO NOT give them hypervene. As a corpsman or doctor, remember that your HUD will tell you how much time is left to defibrillate a patient. From highest to lowest: yellow, orange and red. As a corpsman, remember to bring extra kelotane or dermaline to heal burn damage. Xenos love acid and burning marines. -As a corpsman, hypervene is useful. Use it to purge deadly neurotoxins and larva-boosting growth hormones. +As a corpsman, hypervene is useful. Use it to purge deadly xenomorph toxins. +As a corpsman, locate a place that you won't impede traffic, that way you don't get pushed by marines while aiding marines. The B18 armor from Requisitions has an built-in medical system. The Valkyrie Automedical Armor System can do the same for other armors. The V1 tarp (available from Requisitions) will blend you into the tile you're on once you cover yourself with it. The FL-84 flamethrower has an inbuilt fire extinguisher as an attachment. @@ -99,13 +128,12 @@ You can memorialize fallen marines by using their dogtags on the ship's memorial There are water canteens in the vendors. Stay hydrated. If a corpsman is tending to you, try and hold still. Moving around with broken bones is dangerous. It can cause organ damage, which requires immediate medical attention. -Jetpacks can fly over most things. Use them to escape your poor decisions. You can fit pocket pistols in your boots. -Ammo is plentiful. Bring a box with you. +Ammo is infinite, but carrying ammo is finite. Bring a box with you. The RO works very hard. Be nice to them. While using aim mode, bipods and red-dot-sights allow you to shoot faster. Chemrette cigarettes can be very useful. -Sleeping will slowly heal cloneloss. +Sleeping will slowly heal cloneloss. To faciliate this, a bed and a blanket will increase healing off cloneloss. As a mech-pilot, speed is not very important. As a mech-pilot, keep a close eye on your teamates. You lead the front! As a mech-pilot, the only weapon that has IFF is the sniper, everything else can friendly-fire marines. @@ -146,7 +174,7 @@ Medbay may sometimes run out of power. To avoid this, scream at your nearest eng Doctor's Delight is one of the few healing chemicals that cannot be overdosed. Nanites are often not worth the risks. You can fit more than water in a canteen. -15u from a standard inaprovaline injector will instantly heal 30% of all damage on someone in critical condition. They are in a critical state when they are laying on the ground, look asleep, and are gasping for air! +15u from a standard inaprovaline injector will instantly heal 30% of all damage on someone in critical condition. Marines in a critical state will be laying on the ground, sleeping, and gasping for air! There is a bazaar of weapons and tactics. Don't be afraid to find your niche! Always stick to your squad, or at least have a buddy. Walking to and from the FOB by yourself is an easy way to die. diff --git a/strings/tips/meme.txt b/strings/tips/meme.txt index 730712fc323b4..01d9a4d1124a8 100644 --- a/strings/tips/meme.txt +++ b/strings/tips/meme.txt @@ -9,6 +9,9 @@ Tip: The ship AI takes song requests. Tip: Get gud. Tip: Dying is a skill issue. Tip: Being in crit state is a skill issue. +Tip: Not killing the enemy is a skill issue. +Do not be a femstatic. +Be the femstatic you want to be. Traffic cones make nice hats. Requisition can buy yummy crayons for you to snack on. There are stories of strange grey people who sometimes board vessels in distress. Surely nothing more than a rumor... @@ -24,7 +27,9 @@ The government is just a myth started by the mothpeople. Cat girls only exist in another universe, and this is not the universe. Tips machine is broken, insert more tips. Sometimes, tips may be lying to you. +Whatever weapon kills you is OP, whatever weapon doesn’t kill you has a bad user. I'm being held prisoner, forced to write these tips for eternity. Send help. +Unga demands blood. Occasionally the tip of the round might lie to you. Don't panic, this is normal. PFC Jim did not make it. PFC Jim made it out ok. diff --git a/strings/tips/meta.txt b/strings/tips/meta.txt index 71e0b42e93930..f173dcaa57443 100644 --- a/strings/tips/meta.txt +++ b/strings/tips/meta.txt @@ -23,3 +23,4 @@ There are no such things as macros, only keybinds. Communication, be it from a marine to a marine, a drone to the queen, or command to everyone, is vital and information on flanks can change how the entire round plays out. As an alien or marine, be careful of the flank, regardless of if the push is going well or stalling out. Half of getting good is knowing to be aggressive. The other half is knowing when not to be aggressive. +When talking, surround what you type (without the quotes) with "__", "++" or "||" to underline, bold, or italicize what you say. You combine these modifiers too! diff --git a/strings/tips/xeno.txt b/strings/tips/xeno.txt index 62b8e2b1aadc4..760ae54adde94 100644 --- a/strings/tips/xeno.txt +++ b/strings/tips/xeno.txt @@ -1,7 +1,13 @@ +You can replace normal weed pods with sticky/resting weed pods, but cannot do the inverse. +Stagger stops most xenomorphs from using abilities. Watch out for weapons that can stagger! +Different castes have different pheromone strengths, with drone being the lowest and king being the highest. +Pheromones do not stack, only the strongest applies. +When placing resin walls, they start at 40% their max health then gain health over time. Walls made by hivelords start at 70% health. +Marines suffer no movement penalty for moving on standard or resting weeds, however sticky weeds slow them down significantly. As a xeno, you can freely melt barricades while in boiler or defiler gas as long as you can click on the right spot. The gas is also a really good hiding spot to launch ambushes from without marines being aware of you. As a xeno, always thank your drones and hivelords for supporting the hive! -As a xeno, you can drag any item, but you must wait through an actionbar before you can do so! -As a xeno, do not fight as a young xenomorph. +Robot healthbars are not directly one to one with their actual health. They will still have some fight left in them after it shows their health has hit critical. +As a xeno, you can drag any item, but you must wait through an actionbar before you can do so! Carrier loves dragging items for their traps! Most alien deaths are caused by over-aggression. Rein yourself in, or you may find yourself dying round after round. As a xeno, if you have difficulty clicking marines, try using bump slash. You can use movement keys to slash marines. That said, clicking marines to slash them is faster than bump slashing! It is EXTREMELY IMPORTANT that you as a xenomorph have your abilities set up on keybinds. Ask for help if you don't know how in XOOC or mentorhelp. @@ -10,36 +16,51 @@ As a xeno, it is faster to re-fill an empty acid well than rolling on the ground As a xeno, acid wells extinguish fire and explode into an acid cloud when destroyed. The Queen, the Shrike, praetorians, boilers, and hivelords can make acid wells. The Queen, the King, the Shrike, and hivelord have access to Queen's Blessing, a menu for the hive to use psychic points to give xenomorphs a cutting edge in the battlefield. If you have acid spit, you can spit at a welding fuel tank to blow it up. If the welding fuel is near hostiles, you might give them a pleasant surprise! +If something comes up in real life while you’re a xenomorph, head back to the silo and use the “ghost” command to let others take over your body. As a xeno, check hive status often. Some xenos have pheromones that can help the hive. Frenzy increases speed, Warding increases armor, and Recovery increases healing. The King has the strongest pheromones, followed by the Queen, praetorians, Hivemind, the Shrike and hivelords, defilers, and carriers. Drones have the weakest pheromones. Some xenos can recycle the bodies of their fallen hive members. Use this to your advantage to prevent marines from getting points for their Requisitions orders! As a xeno, you can pounce past window frames and barricades without barbed wires. As a xeno, pouncing into a barricade with barbed wire causes you to bounce off the barricade. -As a xeno, aging from young to mature gives you the most benefit, further aging has diminishing returns. As a xeno, remember that neurotoxin injected can overdose, killing a marine quickly. As a xeno, you can crawl through holes in walls made by acid by SpecialClicking (Default: CTRL+click) on them or click-dragging yourself on them. If you're too big to pass through, you'll damage the wall instead. As a xeno, you can climb over window frames by jumping (Default: Spacebar), SpecialClicking (Default: CTRL+click) on them, or click-dragging yourself on them. -As a xeno, do not camp the landing zones prior to the marines building their defenses. As a xeno, do not block other xenos' paths when they are retreating. Circumvent this by being on Help Intent or by simply moving away. As a xeno, green weeds help you heal faster, blue weeds slow down marines, and weeds with no colors are normal weeds. Rest on the green weeds to heal faster! As a larva, ask your hive leader what you should evolve into. If nobody responds, you can check hive status to see what xenomorphs need the most. As a larva, you can slide under unbolted and unwelded doors by clicking on the door. As a larva, stay on weeds while growing. You will grow faster as a result. As a runner, warlock, or larva, you can pass over window frames without climbing onto them beforehand. +As a caste with acid, you can click directly on a lower-level acid puddle to upgrade it. As a drone or sentinel, your corrosive acid is very weak, but it's better than nothing. As a xeno, spread weeds as much as you can, especially near the front-line fighters. Before you evolve into the Hivemind as a drone, hide in a secure area! Once you evolve, you will create a core that cannot be moved. +As a hivelord, build as many tunnels as you can to help mobilize the hive! As a carrier, you can hit a host directly with a thrown facehugger to have a high chance of infecting them near instantly. This will take time, however. As a carrier, you can hide traps beneath certain objects and items. +As a carrier you can take out huggers from eggs and replace them with specialized huggers instead, such as a neurotox hugger. As a hunter, you have almost perfect stealth if you stand still. +As a hunter, entering stalk/walk mode while stealthing will make you more transparent. +As a hunter, a second activation of your mirages ability will exchange your place with one of your mirages! Use this to get back in the fight, when marines start to ignore your mirages. As a ravager or the Queen, you are fire-resistant, NOT fireproof. You can still get lit on fire, but you take very little damage from it. As the King, however, you're fireproof until your armor is damaged by sunder. +As a ravager, rage mode will make you stagger immune, reset your armour, give you additional fury and boost your speed for a time. Use it as an escape tool, especially if you're too low on rage to endure. As a spitter, boiler, praetorian, or the Queen, take advantage of unguarded barricades and defenses; melt or constantly spit acid on them if you can. +As a ravager, you passively gain rage while on fire. +As a ravager, don't get overconfident. +As a ravager, you will regenerate your rage, up to a point. +As a ravager or gorger, you will not be affected by tanglefoot or the tesla rifle. However, pepperballs and the smartgunner's tanglefoot DMR ammo still will. +As a gorger, your drain ability can be used on corpses to heal incredibly fast, and scales up with pheromones. +As a gorger, you have very little armour. You do not have to consider sunder as much as other castes. +As a gorger, overheal will let you drain corpses even if you're taking damage! This also applies to anyone else that you've overhealed. +As a gorger, you may psy drain for free. +As a warlock, your offensive abilities can be cast through glass. Give laser-using marines a taste of their own medicine. As a boiler, primordial hivelord, the King or the Queen, you have the most powerful corrosive acid for melting things. As the Shrike, take advantage of your psychic abilities. Use Psychic Fling and Unrelenting Force to displace a marine or even push certain and hazardous objects towards your enemies and vice versa. As the Queen, your screech does not only affect the mobs on view, but affects through walls or gases. However, the effect of the screech will be reduced. As a drone, hivelord, Hivemind, Shrike, and the Queen, a large maze is almost always a good investment. As a drone, hivelord, Hivemind, Shrike, and the Queen, be clever with your walling. Try to allow for as much fluid movement as possible. +As a shrike, queen, or king, hijacking the alamo will kill every xeno that you leave groundside, as well as destroying every structure and resetting your psy count. However, dead xenos will be refunded as burrowed larva. Call burrowed after a hijack! Sticky resin can act as the path for your maze to be built around. The Hivemind is very skilled at flanking marines. Wait for them to push, and wall them off from behind! Praying to the Queen-Mother will usually net a response. @@ -56,6 +77,10 @@ As a xeno, attack between the delay of a shotgun being fired. As a xeno, listen to the sound of your enemy's magazine! If it sounds hollow, it will soon be empty. As a xeno, strike hard and fast. As a xeno, you are not disposable. However, sacrificing your life to save the Queen is widely respected. +Hunter has AP and knockdown when striking from stealth, which can be chained with pounce for a longer stun. +Defiler can vent crawl. +Spitter can vent crawl. +Defiler has one of the highest slash damages among the entire hive, use it to your advantage. A fortified defender is one of the best ways to stall a push. Skilled defilers can easily kill any marine in a span of seconds. As a xeno, always have an escape plan. diff --git a/tgmc.dme b/tgmc.dme index 671703d520f87..415acccc7a577 100644 --- a/tgmc.dme +++ b/tgmc.dme @@ -17,6 +17,7 @@ #include "code\__DEFINES\__game.dm" #include "code\__DEFINES\_click.dm" #include "code\__DEFINES\_globals.dm" +#include "code\__DEFINES\_helpers.dm" #include "code\__DEFINES\_math.dm" #include "code\__DEFINES\_protect.dm" #include "code\__DEFINES\_radio.dm" @@ -28,7 +29,9 @@ #include "code\__DEFINES\admin.dm" #include "code\__DEFINES\ai.dm" #include "code\__DEFINES\alerts.dm" +#include "code\__DEFINES\apc_defines.dm" #include "code\__DEFINES\area.dm" +#include "code\__DEFINES\assert.dm" #include "code\__DEFINES\atmospherics.dm" #include "code\__DEFINES\atom_hud.dm" #include "code\__DEFINES\attachments.dm" @@ -61,7 +64,7 @@ #include "code\__DEFINES\footsteps.dm" #include "code\__DEFINES\generators.dm" #include "code\__DEFINES\greyscale.dm" -#include "code\__DEFINES\greyscale_guns.dm" +#include "code\__DEFINES\hud.dm" #include "code\__DEFINES\icon_smoothing.dm" #include "code\__DEFINES\implants.dm" #include "code\__DEFINES\instruments.dm" @@ -135,10 +138,13 @@ #include "code\__DEFINES\dcs\flags.dm" #include "code\__DEFINES\dcs\helpers.dm" #include "code\__DEFINES\dcs\signals.dm" +#include "code\__DEFINES\dcs\signals\signals_datum.dm" +#include "code\__DEFINES\dcs\signals\signals_hud.dm" #include "code\__DEFINES\dcs\signals\signals_mind.dm" #include "code\__DEFINES\dcs\signals\signals_subsystem.dm" #include "code\__DEFINES\~RUtgmc_defines\_defines_include.dm" #include "code\__HELPERS\_lists.dm" +#include "code\__HELPERS\_planes.dm" #include "code\__HELPERS\_string_lists.dm" #include "code\__HELPERS\admin.dm" #include "code\__HELPERS\ai.dm" @@ -148,6 +154,7 @@ #include "code\__HELPERS\chat_filter.dm" #include "code\__HELPERS\cmp.dm" #include "code\__HELPERS\config.dm" +#include "code\__HELPERS\datums.dm" #include "code\__HELPERS\files.dm" #include "code\__HELPERS\filters.dm" #include "code\__HELPERS\game.dm" @@ -174,8 +181,10 @@ #include "code\__HELPERS\string_lists.dm" #include "code\__HELPERS\text.dm" #include "code\__HELPERS\time.dm" +#include "code\__HELPERS\traits.dm" #include "code\__HELPERS\tts.dm" #include "code\__HELPERS\type2type.dm" +#include "code\__HELPERS\type_processing.dm" #include "code\__HELPERS\unsorted.dm" #include "code\__HELPERS\verbs.dm" #include "code\__HELPERS\view.dm" @@ -197,6 +206,7 @@ #include "code\__HELPERS\sorts\TimSort.dm" #include "code\_globalvars\admin.dm" #include "code\_globalvars\bitfields.dm" +#include "code\_globalvars\colorvars.dm" #include "code\_globalvars\configuration.dm" #include "code\_globalvars\game_modes.dm" #include "code\_globalvars\logging.dm" @@ -221,26 +231,28 @@ #include "code\_onclick\drag_drop.dm" #include "code\_onclick\human.dm" #include "code\_onclick\item_attack.dm" -#include "code\_onclick\map_popups.dm" #include "code\_onclick\observer.dm" #include "code\_onclick\other_mobs.dm" #include "code\_onclick\telekinesis.dm" #include "code\_onclick\ventcrawl.dm" #include "code\_onclick\xeno.dm" -#include "code\_onclick\hud\_defines.dm" #include "code\_onclick\hud\ai.dm" #include "code\_onclick\hud\alerts.dm" #include "code\_onclick\hud\fullscreen.dm" #include "code\_onclick\hud\ghost.dm" #include "code\_onclick\hud\hud.dm" #include "code\_onclick\hud\human.dm" +#include "code\_onclick\hud\interactive_emotes.dm" +#include "code\_onclick\hud\map_popups.dm" +#include "code\_onclick\hud\map_view.dm" #include "code\_onclick\hud\movable_screen_objects.dm" #include "code\_onclick\hud\new_player.dm" #include "code\_onclick\hud\parallax.dm" #include "code\_onclick\hud\picture_in_picture.dm" #include "code\_onclick\hud\radial.dm" #include "code\_onclick\hud\radial_persistent.dm" -#include "code\_onclick\hud\rendering\plane_master.dm" +#include "code\_onclick\hud\rendering\_plane_master.dm" +#include "code\_onclick\hud\rendering\plane_master_group.dm" #include "code\_onclick\hud\rendering\render_plate.dm" #include "code\_onclick\hud\screen_objects\menu_text_objects.dm" #include "code\_onclick\hud\screen_objects\screen_objects.dm" @@ -318,6 +330,7 @@ #include "code\controllers\subsystem\time_track.dm" #include "code\controllers\subsystem\timer.dm" #include "code\controllers\subsystem\tts.dm" +#include "code\controllers\subsystem\vis_overlays.dm" #include "code\controllers\subsystem\vote.dm" #include "code\controllers\subsystem\weather.dm" #include "code\controllers\subsystem\weeds.dm" @@ -337,6 +350,7 @@ #include "code\datums\beam.dm" #include "code\datums\browser.dm" #include "code\datums\callback.dm" +#include "code\datums\chat_payload.dm" #include "code\datums\chatmessage.dm" #include "code\datums\cinematic.dm" #include "code\datums\custom_emotes.dm" @@ -358,6 +372,7 @@ #include "code\datums\outfit.dm" #include "code\datums\personal_statistics.dm" #include "code\datums\progressbar.dm" +#include "code\datums\quick_load_beginners.dm" #include "code\datums\quick_load_outfits.dm" #include "code\datums\recipe.dm" #include "code\datums\round_statistics.dm" @@ -375,10 +390,13 @@ #include "code\datums\actions\bump_attack_toggle.dm" #include "code\datums\actions\innate.dm" #include "code\datums\actions\item_action.dm" +#include "code\datums\actions\item_toggles.dm" #include "code\datums\actions\observer_action.dm" #include "code\datums\actions\order_action.dm" #include "code\datums\actions\skill.dm" +#include "code\datums\actions\weapon_actions.dm" #include "code\datums\actions\xeno_action.dm" +#include "code\datums\actions\species_actions\sectoid_action.dm" #include "code\datums\changelog\changelog.dm" #include "code\datums\components\_component.dm" #include "code\datums\components\admin_popup.dm" @@ -386,6 +404,7 @@ #include "code\datums\components\anti_juggling.dm" #include "code\datums\components\attachment_handler.dm" #include "code\datums\components\autofire.dm" +#include "code\datums\components\beacon.dm" #include "code\datums\components\blur_protection.dm" #include "code\datums\components\bump_attack.dm" #include "code\datums\components\chem_booster.dm" @@ -401,11 +420,13 @@ #include "code\datums\components\largeobjecttransparency.dm" #include "code\datums\components\larva_queue.dm" #include "code\datums\components\mobile_power.dm" +#include "code\datums\components\mounted_gun.dm" #include "code\datums\components\orbiter.dm" #include "code\datums\components\overlay_lighting.dm" #include "code\datums\components\reequip.dm" #include "code\datums\components\remote_control.dm" #include "code\datums\components\rotation.dm" +#include "code\datums\components\seethrough_mob.dm" #include "code\datums\components\shield.dm" #include "code\datums\components\sizzle.dm" #include "code\datums\components\slippery.dm" @@ -425,6 +446,7 @@ #include "code\datums\elements\attachment.dm" #include "code\datums\elements\connect_loc.dm" #include "code\datums\elements\debris.dm" +#include "code\datums\elements\directional_attack.dm" #include "code\datums\elements\egrill_element.dm" #include "code\datums\elements\footstep.dm" #include "code\datums\elements\gestures.dm" @@ -451,6 +473,7 @@ #include "code\datums\emergency_calls\imperium.dm" #include "code\datums\emergency_calls\pizza.dm" #include "code\datums\emergency_calls\pmc.dm" +#include "code\datums\emergency_calls\retired.dm" #include "code\datums\emergency_calls\sectoid.dm" #include "code\datums\emergency_calls\skeleton.dm" #include "code\datums\emergency_calls\sons_of_mars_breachers.dm" @@ -478,6 +501,43 @@ #include "code\datums\gamemodes\campaign\campaign_assets.dm" #include "code\datums\gamemodes\campaign\campaign_mission.dm" #include "code\datums\gamemodes\campaign\faction_stats.dm" +#include "code\datums\gamemodes\campaign\individual_stats.dm" +#include "code\datums\gamemodes\campaign\loadout_items.dm" +#include "code\datums\gamemodes\campaign\outfit_holder.dm" +#include "code\datums\gamemodes\campaign\perks.dm" +#include "code\datums\gamemodes\campaign\loadout_items\_TGMC\back_slot.dm" +#include "code\datums\gamemodes\campaign\loadout_items\_TGMC\belt.dm" +#include "code\datums\gamemodes\campaign\loadout_items\_TGMC\ears.dm" +#include "code\datums\gamemodes\campaign\loadout_items\_TGMC\eyes.dm" +#include "code\datums\gamemodes\campaign\loadout_items\_TGMC\feet.dm" +#include "code\datums\gamemodes\campaign\loadout_items\_TGMC\gloves.dm" +#include "code\datums\gamemodes\campaign\loadout_items\_TGMC\head.dm" +#include "code\datums\gamemodes\campaign\loadout_items\_TGMC\mask.dm" +#include "code\datums\gamemodes\campaign\loadout_items\_TGMC\pockets.dm" +#include "code\datums\gamemodes\campaign\loadout_items\_TGMC\suit.dm" +#include "code\datums\gamemodes\campaign\loadout_items\_TGMC\suit_storage.dm" +#include "code\datums\gamemodes\campaign\loadout_items\_TGMC\uniform.dm" +#include "code\datums\gamemodes\campaign\loadout_items\_TGMC\suit_storage\corpsman.dm" +#include "code\datums\gamemodes\campaign\loadout_items\_TGMC\suit_storage\engineer.dm" +#include "code\datums\gamemodes\campaign\loadout_items\_TGMC\suit_storage\field_commander.dm" +#include "code\datums\gamemodes\campaign\loadout_items\_TGMC\suit_storage\marine.dm" +#include "code\datums\gamemodes\campaign\loadout_items\_TGMC\suit_storage\smartgunner.dm" +#include "code\datums\gamemodes\campaign\loadout_items\_TGMC\suit_storage\squad_leader.dm" +#include "code\datums\gamemodes\campaign\loadout_items\SOM\back_slot.dm" +#include "code\datums\gamemodes\campaign\loadout_items\SOM\belt.dm" +#include "code\datums\gamemodes\campaign\loadout_items\SOM\ears.dm" +#include "code\datums\gamemodes\campaign\loadout_items\SOM\feet.dm" +#include "code\datums\gamemodes\campaign\loadout_items\SOM\gloves.dm" +#include "code\datums\gamemodes\campaign\loadout_items\SOM\head.dm" +#include "code\datums\gamemodes\campaign\loadout_items\SOM\pockets.dm" +#include "code\datums\gamemodes\campaign\loadout_items\SOM\suit.dm" +#include "code\datums\gamemodes\campaign\loadout_items\SOM\uniform.dm" +#include "code\datums\gamemodes\campaign\loadout_items\SOM\suit_storage\engineer.dm" +#include "code\datums\gamemodes\campaign\loadout_items\SOM\suit_storage\field_commander.dm" +#include "code\datums\gamemodes\campaign\loadout_items\SOM\suit_storage\medic.dm" +#include "code\datums\gamemodes\campaign\loadout_items\SOM\suit_storage\squad_leader.dm" +#include "code\datums\gamemodes\campaign\loadout_items\SOM\suit_storage\standard.dm" +#include "code\datums\gamemodes\campaign\loadout_items\SOM\suit_storage\veteran.dm" #include "code\datums\gamemodes\campaign\missions\airbase_raid.dm" #include "code\datums\gamemodes\campaign\missions\asat_capture.dm" #include "code\datums\gamemodes\campaign\missions\base_rescue.dm" @@ -508,6 +568,10 @@ #include "code\datums\greyscale\layer.dm" #include "code\datums\helper_datums\getrev.dm" #include "code\datums\helper_datums\stack_end_detector.dm" +#include "code\datums\interior\_interior.dm" +#include "code\datums\interior\interior_tank.dm" +#include "code\datums\interior\link_interior.dm" +#include "code\datums\interior\map_templates.dm" #include "code\datums\jobs\access.dm" #include "code\datums\jobs\squads.dm" #include "code\datums\jobs\job\clf.dm" @@ -522,6 +586,7 @@ #include "code\datums\jobs\job\mercenaries.dm" #include "code\datums\jobs\job\other.dm" #include "code\datums\jobs\job\pmc.dm" +#include "code\datums\jobs\job\retired.dm" #include "code\datums\jobs\job\sectoid.dm" #include "code\datums\jobs\job\shipside.dm" #include "code\datums\jobs\job\skeleton.dm" @@ -542,10 +607,13 @@ #include "code\datums\keybinding\custom_emote.dm" #include "code\datums\keybinding\emote.dm" #include "code\datums\keybinding\human.dm" +#include "code\datums\keybinding\item_toggles.dm" #include "code\datums\keybinding\living.dm" #include "code\datums\keybinding\mecha.dm" #include "code\datums\keybinding\mob.dm" #include "code\datums\keybinding\movement.dm" +#include "code\datums\keybinding\sectoid.dm" +#include "code\datums\keybinding\weapons.dm" #include "code\datums\keybinding\xeno.dm" #include "code\datums\loadout\loadout.dm" #include "code\datums\loadout\loadout_helper.dm" @@ -563,6 +631,7 @@ #include "code\datums\looping_sounds\xeno_sounds.dm" #include "code\datums\status_effects\debuffs.dm" #include "code\datums\status_effects\gun_skill.dm" +#include "code\datums\status_effects\sectoid.dm" #include "code\datums\status_effects\speech_debuffs.dm" #include "code\datums\status_effects\status_effect.dm" #include "code\datums\status_effects\xeno_buffs.dm" @@ -577,8 +646,7 @@ #include "code\datums\wires\radio.dm" #include "code\datums\wires\spaceship.dm" #include "code\datums\wires\vending.dm" -#include "code\game\atoms.dm" -#include "code\game\atoms_movable.dm" +#include "code\game\alternate_appearance.dm" #include "code\game\blood.dm" #include "code\game\buckling.dm" #include "code\game\communications.dm" @@ -594,6 +662,7 @@ #include "code\game\area\area.dm" #include "code\game\area\bigred.dm" #include "code\game\area\centcom.dm" +#include "code\game\area\daedalusprison.dm" #include "code\game\area\deltastation.dm" #include "code\game\area\gelida_iv.dm" #include "code\game\area\general.dm" @@ -617,6 +686,10 @@ #include "code\game\area\areas\shuttles.dm" #include "code\game\area\campaign_maps\jungle_outpost.dm" #include "code\game\area\campaign_maps\som_base.dm" +#include "code\game\area\campaign_maps\som_raiding_base.dm" +#include "code\game\atoms\_atom.dm" +#include "code\game\atoms\atom_appearance.dm" +#include "code\game\atoms\atom_movable.dm" #include "code\game\mecha\mech_bay.dm" #include "code\game\mecha\mecha_parts.dm" #include "code\game\mecha\mecha_wreckage.dm" @@ -726,6 +799,7 @@ #include "code\game\objects\items\misc.dm" #include "code\game\objects\items\motion_detector.dm" #include "code\game\objects\items\multitool.dm" +#include "code\game\objects\items\pamphlets.dm" #include "code\game\objects\items\pinpointer.dm" #include "code\game\objects\items\pipe_painter.dm" #include "code\game\objects\items\plantable_flags.dm" @@ -762,6 +836,7 @@ #include "code\game\objects\items\explosives\explosive.dm" #include "code\game\objects\items\explosives\mine.dm" #include "code\game\objects\items\explosives\plastique.dm" +#include "code\game\objects\items\explosives\grenades\bullet_grenade.dm" #include "code\game\objects\items\explosives\grenades\chem_grenade.dm" #include "code\game\objects\items\explosives\grenades\emgrenade.dm" #include "code\game\objects\items\explosives\grenades\flashbang.dm" @@ -1016,6 +1091,7 @@ #include "code\game\objects\machinery\telecomms\machines\receiver.dm" #include "code\game\objects\machinery\telecomms\machines\relay.dm" #include "code\game\objects\machinery\telecomms\machines\server.dm" +#include "code\game\objects\machinery\vending\beginner_vendor.dm" #include "code\game\objects\machinery\vending\loadout_vendor.dm" #include "code\game\objects\machinery\vending\marine_vending.dm" #include "code\game\objects\machinery\vending\new_marine_vendors.dm" @@ -1087,6 +1163,8 @@ #include "code\game\objects\structures\campaign_structures\capture_objectives.dm" #include "code\game\objects\structures\campaign_structures\deploy_blockers.dm" #include "code\game\objects\structures\campaign_structures\destroy_objectives.dm" +#include "code\game\objects\structures\campaign_structures\misc_structures.dm" +#include "code\game\objects\structures\campaign_structures\orbital_beacons.dm" #include "code\game\objects\structures\crates_lockers\closets.dm" #include "code\game\objects\structures\crates_lockers\crates.dm" #include "code\game\objects\structures\crates_lockers\largecrate.dm" @@ -1119,7 +1197,6 @@ #include "code\game\objects\structures\stool_bed_chair_nest\chairs.dm" #include "code\game\objects\structures\stool_bed_chair_nest\janicart.dm" #include "code\game\objects\structures\stool_bed_chair_nest\stools.dm" -#include "code\game\objects\structures\stool_bed_chair_nest\wheelchair.dm" #include "code\game\objects\structures\stool_bed_chair_nest\xeno_nest.dm" #include "code\game\turfs\baseturf_skipover.dm" #include "code\game\turfs\closed.dm" @@ -1156,6 +1233,7 @@ #include "code\modules\admin\preferences_verbs.dm" #include "code\modules\admin\server_verbs.dm" #include "code\modules\admin\stickyban.dm" +#include "code\modules\admin\tag.dm" #include "code\modules\admin\topic.dm" #include "code\modules\admin\panels\antag_panel.dm" #include "code\modules\admin\panels\ban_panel.dm" @@ -1191,16 +1269,27 @@ #include "code\modules\admin\verbs\pray.dm" #include "code\modules\admin\verbs\selectequipment.dm" #include "code\modules\admin\verbs\shuttlepanel.dm" -#include "code\modules\admin\verbs\varedit.dm" #include "code\modules\admin\verbs\whitelist.dm" #include "code\modules\admin\verbs\SDQL2\SDQL_2.dm" #include "code\modules\admin\verbs\SDQL2\SDQL_2_parser.dm" #include "code\modules\admin\verbs\SDQL2\SDQL_2_wrappers.dm" +#include "code\modules\admin\view_variables\admin_delete.dm" +#include "code\modules\admin\view_variables\color_matrix_editor.dm" +#include "code\modules\admin\view_variables\debug_variables.dm" #include "code\modules\admin\view_variables\filterrific.dm" +#include "code\modules\admin\view_variables\get_variables.dm" #include "code\modules\admin\view_variables\greyscale_modify_menu.dm" #include "code\modules\admin\view_variables\mark_datum.dm" +#include "code\modules\admin\view_variables\mass_edit_variables.dm" +#include "code\modules\admin\view_variables\modify_variables.dm" +#include "code\modules\admin\view_variables\nobody_wants_to_learn_matrix_math.dm" #include "code\modules\admin\view_variables\particle_editor.dm" #include "code\modules\admin\view_variables\reference_tracking.dm" +#include "code\modules\admin\view_variables\tag_datum.dm" +#include "code\modules\admin\view_variables\topic.dm" +#include "code\modules\admin\view_variables\topic_basic.dm" +#include "code\modules\admin\view_variables\topic_list.dm" +#include "code\modules\admin\view_variables\view_variables.dm" #include "code\modules\ai\ai_node.dm" #include "code\modules\ai\ai_behaviors\ai_behavior.dm" #include "code\modules\ai\ai_behaviors\xeno\puppet.dm" @@ -1230,6 +1319,7 @@ #include "code\modules\asset_cache\asset_cache_item.dm" #include "code\modules\asset_cache\asset_list.dm" #include "code\modules\asset_cache\asset_list_items.dm" +#include "code\modules\asset_cache\assets\vv.dm" #include "code\modules\asset_cache\transports\asset_transport.dm" #include "code\modules\asset_cache\transports\webroot_transport.dm" #include "code\modules\atmospherics\machinery\atmosmachinery.dm" @@ -1566,6 +1656,7 @@ #include "code\modules\mob\living\carbon\life.dm" #include "code\modules\mob\living\carbon\shock.dm" #include "code\modules\mob\living\carbon\update_icons.dm" +#include "code\modules\mob\living\carbon\human\_species.dm" #include "code\modules\mob\living\carbon\human\death.dm" #include "code\modules\mob\living\carbon\human\dummy.dm" #include "code\modules\mob\living\carbon\human\emote.dm" @@ -1584,7 +1675,6 @@ #include "code\modules\mob\living\carbon\human\login.dm" #include "code\modules\mob\living\carbon\human\logout.dm" #include "code\modules\mob\living\carbon\human\say.dm" -#include "code\modules\mob\living\carbon\human\species.dm" #include "code\modules\mob\living\carbon\human\update_icons.dm" #include "code\modules\mob\living\carbon\human\zombie.dm" #include "code\modules\mob\living\carbon\human\life\handle_disabilities.dm" @@ -1596,6 +1686,15 @@ #include "code\modules\mob\living\carbon\human\life\handle_shock.dm" #include "code\modules\mob\living\carbon\human\life\handle_status_effects.dm" #include "code\modules\mob\living\carbon\human\life\life_helpers.dm" +#include "code\modules\mob\living\carbon\human\species_types\combat_robots.dm" +#include "code\modules\mob\living\carbon\human\species_types\humans.dm" +#include "code\modules\mob\living\carbon\human\species_types\monkeys.dm" +#include "code\modules\mob\living\carbon\human\species_types\mothmen.dm" +#include "code\modules\mob\living\carbon\human\species_types\sectoids.dm" +#include "code\modules\mob\living\carbon\human\species_types\skeletons.dm" +#include "code\modules\mob\living\carbon\human\species_types\synthetics.dm" +#include "code\modules\mob\living\carbon\human\species_types\vatborns.dm" +#include "code\modules\mob\living\carbon\human\species_types\zombies.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities.dm" #include "code\modules\mob\living\carbon\xenomorph\attack_alien.dm" #include "code\modules\mob\living\carbon\xenomorph\charge_crush.dm" @@ -1729,7 +1828,6 @@ #include "code\modules\mob\living\silicon\ai\freelook\cameranet.dm" #include "code\modules\mob\living\silicon\ai\freelook\chunk.dm" #include "code\modules\mob\living\silicon\ai\freelook\eye.dm" -#include "code\modules\mob\living\silicon\ai\freelook\read_me.dm" #include "code\modules\mob\living\silicon\decoy\decoy.dm" #include "code\modules\mob\living\simple_animal\simple_animal.dm" #include "code\modules\mob\living\simple_animal\friendly\cat.dm" @@ -1771,6 +1869,7 @@ #include "code\modules\organs\organ_objects.dm" #include "code\modules\organs\pain.dm" #include "code\modules\organs\wound.dm" +#include "code\modules\paperwork\beginner_tutorials.dm" #include "code\modules\paperwork\carbonpaper.dm" #include "code\modules\paperwork\clipboard.dm" #include "code\modules\paperwork\filingcabinet.dm" @@ -1780,7 +1879,6 @@ #include "code\modules\paperwork\paperbin.dm" #include "code\modules\paperwork\photocopier.dm" #include "code\modules\paperwork\photography.dm" -#include "code\modules\power\apc.dm" #include "code\modules\power\batteryrack.dm" #include "code\modules\power\cable.dm" #include "code\modules\power\cell.dm" @@ -1799,6 +1897,10 @@ #include "code\modules\power\smes.dm" #include "code\modules\power\smes_construction.dm" #include "code\modules\power\terminal.dm" +#include "code\modules\power\apc\apc.dm" +#include "code\modules\power\apc\apc_appearance.dm" +#include "code\modules\power\apc\apc_attack.dm" +#include "code\modules\power\apc\apc_tool_act.dm" #include "code\modules\power\singularity\emitter.dm" #include "code\modules\projectiles\ammo_datums.dm" #include "code\modules\projectiles\ammunition.dm" @@ -1814,6 +1916,7 @@ #include "code\modules\projectiles\guns\grenade_launchers.dm" #include "code\modules\projectiles\guns\mounted.dm" #include "code\modules\projectiles\guns\pistols.dm" +#include "code\modules\projectiles\guns\plasma.dm" #include "code\modules\projectiles\guns\revolvers.dm" #include "code\modules\projectiles\guns\rifles.dm" #include "code\modules\projectiles\guns\sentries.dm" @@ -1903,6 +2006,7 @@ #include "code\modules\tgui\tgui_window.dm" #include "code\modules\tgui\states\access.dm" #include "code\modules\tgui\states\admin.dm" +#include "code\modules\tgui\states\alamo.dm" #include "code\modules\tgui\states\always.dm" #include "code\modules\tgui\states\conscious.dm" #include "code\modules\tgui\states\contained.dm" @@ -1936,7 +2040,8 @@ #include "code\modules\tgui_panel\tgui_panel.dm" #include "code\modules\tooltip\tooltip.dm" #include "code\modules\unit_tests\_unit_tests.dm" -#include "code\modules\vehicles\_vehicle.dm" +#include "code\modules\vehicles\__vehicle.dm" +#include "code\modules\vehicles\_hitbox.dm" #include "code\modules\vehicles\atv.dm" #include "code\modules\vehicles\bicycle.dm" #include "code\modules\vehicles\cargo_train.dm" @@ -1948,6 +2053,22 @@ #include "code\modules\vehicles\vehicle_actions.dm" #include "code\modules\vehicles\vehicle_key.dm" #include "code\modules\vehicles\wheelchair.dm" +#include "code\modules\vehicles\armored\__armored.dm" +#include "code\modules\vehicles\armored\_multitile.dm" +#include "code\modules\vehicles\armored\ammo_magazine.dm" +#include "code\modules\vehicles\armored\apc.dm" +#include "code\modules\vehicles\armored\armored_actions.dm" +#include "code\modules\vehicles\armored\armored_modules.dm" +#include "code\modules\vehicles\armored\armored_weapons.dm" +#include "code\modules\vehicles\armored\medium_apc.dm" +#include "code\modules\vehicles\armored\medium_tank.dm" +#include "code\modules\vehicles\armored\small_apc.dm" +#include "code\modules\vehicles\armored\tank_fabricator.dm" +#include "code\modules\vehicles\armored\vehicle_collision.dm" +#include "code\modules\vehicles\armored\interiors\ammo_rack.dm" +#include "code\modules\vehicles\armored\interiors\breech.dm" +#include "code\modules\vehicles\armored\interiors\chairs.dm" +#include "code\modules\vehicles\armored\interiors\periscope.dm" #include "code\modules\vehicles\cars\car.dm" #include "code\modules\vehicles\mecha\_mecha.dm" #include "code\modules\vehicles\mecha\mech_bay.dm" @@ -1980,17 +2101,24 @@ #include "code\modules\vehicles\mecha\equipment\weapons\weapons.dm" #include "code\modules\vehicles\mecha\working\ripley.dm" #include "code\modules\vehicles\mecha\working\working.dm" -#include "code\modules\vehicles\multitile\cm_armored.dm" -#include "code\modules\vehicles\multitile\hardpoints.dm" -#include "code\modules\vehicles\multitile\multitile.dm" -#include "code\modules\vehicles\multitile\tank.dm" -#include "code\modules\vehicles\multitile\tankvendor.dm" #include "code\modules\vehicles\unmanned\deployable_vehicles.dm" #include "code\modules\vehicles\unmanned\unmanned_droid.dm" #include "code\modules\vehicles\unmanned\unmanned_turrets.dm" #include "code\modules\vehicles\unmanned\unmanned_vehicle.dm" #include "code\modules\vehicles\unmanned\unmanned_vehicle_remote.dm" -#include "code\modules\xenomorph\xeno_structures.dm" +#include "code\modules\xenomorph\_xeno_structure.dm" +#include "code\modules\xenomorph\acid_pools.dm" +#include "code\modules\xenomorph\acidwell.dm" +#include "code\modules\xenomorph\jellypod.dm" +#include "code\modules\xenomorph\pherotower.dm" +#include "code\modules\xenomorph\resin_gargoyle.dm" +#include "code\modules\xenomorph\silo.dm" +#include "code\modules\xenomorph\spawner.dm" +#include "code\modules\xenomorph\trap.dm" +#include "code\modules\xenomorph\tunnel.dm" +#include "code\modules\xenomorph\xeno_turret.dm" +#include "code\modules\xenomorph\xenoplant.dm" +#include "code\modules\xenomorph\xenotowers.dm" #include "code\ze_genesis_call\genesis_call.dm" #include "interface\interface.dm" #include "interface\menu.dm" diff --git a/tgui/.eslintignore b/tgui/.eslintignore index a59187b933aee..845ba645cc059 100644 --- a/tgui/.eslintignore +++ b/tgui/.eslintignore @@ -3,4 +3,12 @@ /**/*.bundle.* /**/*.chunk.* /**/*.hot-update.* -/packages/inferno/** +**.lock +**.log +**.json +**.svg +**.scss +**.md +**.css +**.txt +**.woff2 diff --git a/tgui/.eslintrc.yml b/tgui/.eslintrc.yml index 7fee3791fbbfc..9fe767fae1aae 100644 --- a/tgui/.eslintrc.yml +++ b/tgui/.eslintrc.yml @@ -11,9 +11,9 @@ env: browser: true node: true plugins: - - radar - react - unused-imports + - simple-import-sort settings: react: version: '16.10' @@ -651,7 +651,7 @@ rules: ## Enforce ES5 or ES6 class for React Components react/prefer-es6-class: error ## Enforce that props are read-only - react/prefer-read-only-props: error + react/prefer-read-only-props: off ## Enforce stateless React Components to be written as a pure function react/prefer-stateless-function: error ## Prevent missing props validation in a React component definition @@ -764,3 +764,6 @@ rules: ## Prevents the use of unused imports. ## This could be done by enabling no-unused-vars, but we're doing this for now unused-imports/no-unused-imports: error + ## https://github.com/lydell/eslint-plugin-simple-import-sort/ + simple-import-sort/imports: error + simple-import-sort/exports: error diff --git a/tgui/.prettierrc.yml b/tgui/.prettierrc.yml index 1eebe6098b11d..01769692264f1 100644 --- a/tgui/.prettierrc.yml +++ b/tgui/.prettierrc.yml @@ -1,15 +1 @@ -arrowParens: always -breakLongMethodChains: true -endOfLine: lf -importFormatting: oneline -jsxBracketSameLine: true -jsxSingleQuote: false -offsetTernaryExpressions: true -printWidth: 80 -proseWrap: preserve -quoteProps: preserve -semi: true singleQuote: true -tabWidth: 2 -trailingComma: es5 -useTabs: false diff --git a/tgui/.swcrc b/tgui/.swcrc new file mode 100644 index 0000000000000..c0402a41f0bf6 --- /dev/null +++ b/tgui/.swcrc @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/swcrc", + "jsc": { + "loose": true, + "parser": { + "syntax": "typescript", + "tsx": true + }, + "transform": { + "react": { + "runtime": "automatic" + } + } + } +} diff --git a/tgui/.yarn/sdks/eslint/package.json b/tgui/.yarn/sdks/eslint/package.json index 744a77321030e..b29322a1ffb32 100644 --- a/tgui/.yarn/sdks/eslint/package.json +++ b/tgui/.yarn/sdks/eslint/package.json @@ -2,5 +2,8 @@ "name": "eslint", "version": "7.32.0-sdk", "main": "./lib/api.js", - "type": "commonjs" + "type": "commonjs", + "bin": { + "eslint": "./bin/eslint.js" + } } diff --git a/tgui/.yarn/sdks/prettier/bin/prettier.cjs b/tgui/.yarn/sdks/prettier/bin/prettier.cjs new file mode 100644 index 0000000000000..5efad688e7391 --- /dev/null +++ b/tgui/.yarn/sdks/prettier/bin/prettier.cjs @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require prettier/bin/prettier.cjs + require(absPnpApiPath).setup(); + } +} + +// Defer to the real prettier/bin/prettier.cjs your application uses +module.exports = absRequire(`prettier/bin/prettier.cjs`); diff --git a/tgui/.yarn/sdks/prettier/index.js b/tgui/.yarn/sdks/prettier/index.cjs similarity index 68% rename from tgui/.yarn/sdks/prettier/index.js rename to tgui/.yarn/sdks/prettier/index.cjs index 81f9bec5fe85e..8758e367a725a 100644 --- a/tgui/.yarn/sdks/prettier/index.js +++ b/tgui/.yarn/sdks/prettier/index.cjs @@ -11,10 +11,10 @@ const absRequire = createRequire(absPnpApiPath); if (existsSync(absPnpApiPath)) { if (!process.versions.pnp) { - // Setup the environment to be able to require prettier/index.js + // Setup the environment to be able to require prettier require(absPnpApiPath).setup(); } } -// Defer to the real prettier/index.js your application uses -module.exports = absRequire(`prettier/index.js`); +// Defer to the real prettier your application uses +module.exports = absRequire(`prettier`); diff --git a/tgui/.yarn/sdks/prettier/package.json b/tgui/.yarn/sdks/prettier/package.json index 0cbd71ff32d5a..c61f5117bacf3 100644 --- a/tgui/.yarn/sdks/prettier/package.json +++ b/tgui/.yarn/sdks/prettier/package.json @@ -1,6 +1,7 @@ { "name": "prettier", - "version": "0.19.0-sdk", - "main": "./index.js", - "type": "commonjs" + "version": "3.1.0-sdk", + "main": "./index.cjs", + "type": "commonjs", + "bin": "./bin/prettier.cjs" } diff --git a/tgui/.yarn/sdks/typescript/lib/tsserver.js b/tgui/.yarn/sdks/typescript/lib/tsserver.js index 0fb2ac1079786..bbb1e46501b52 100644 --- a/tgui/.yarn/sdks/typescript/lib/tsserver.js +++ b/tgui/.yarn/sdks/typescript/lib/tsserver.js @@ -109,6 +109,8 @@ const moduleWrapper = tsserver => { str = `zip:${str}`; } break; } + } else { + str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`); } } diff --git a/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js b/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js index e7033a81782d0..a68f028fe1971 100644 --- a/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js +++ b/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js @@ -109,6 +109,8 @@ const moduleWrapper = tsserver => { str = `zip:${str}`; } break; } + } else { + str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`); } } diff --git a/tgui/.yarn/sdks/typescript/lib/typescript.js b/tgui/.yarn/sdks/typescript/lib/typescript.js index e14fa87beaa40..b5f4db25bee67 100644 --- a/tgui/.yarn/sdks/typescript/lib/typescript.js +++ b/tgui/.yarn/sdks/typescript/lib/typescript.js @@ -11,10 +11,10 @@ const absRequire = createRequire(absPnpApiPath); if (existsSync(absPnpApiPath)) { if (!process.versions.pnp) { - // Setup the environment to be able to require typescript/lib/typescript.js + // Setup the environment to be able to require typescript require(absPnpApiPath).setup(); } } -// Defer to the real typescript/lib/typescript.js your application uses -module.exports = absRequire(`typescript/lib/typescript.js`); +// Defer to the real typescript your application uses +module.exports = absRequire(`typescript`); diff --git a/tgui/.yarn/sdks/typescript/package.json b/tgui/.yarn/sdks/typescript/package.json index 6aac31b184010..656833d45b642 100644 --- a/tgui/.yarn/sdks/typescript/package.json +++ b/tgui/.yarn/sdks/typescript/package.json @@ -2,5 +2,9 @@ "name": "typescript", "version": "4.9.4-sdk", "main": "./lib/typescript.js", - "type": "commonjs" + "type": "commonjs", + "bin": { + "tsc": "./bin/tsc", + "tsserver": "./bin/tsserver" + } } diff --git a/tgui/.yarnrc.yml b/tgui/.yarnrc.yml index b6387e8e46e83..086484a243a3f 100644 --- a/tgui/.yarnrc.yml +++ b/tgui/.yarnrc.yml @@ -8,7 +8,7 @@ logFilters: plugins: - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs - spec: "@yarnpkg/plugin-interactive-tools" + spec: '@yarnpkg/plugin-interactive-tools' pnpEnableEsmLoader: false diff --git a/tgui/README.md b/tgui/README.md index e87130243429b..1bae91fd13258 100644 --- a/tgui/README.md +++ b/tgui/README.md @@ -16,10 +16,9 @@ If you are completely new to frontend and prefer to **learn by doing**, start wi ### Guides -This project uses **Inferno** - a very fast UI rendering engine with a similar API to React. Take your time to read these guides: +This project uses React. Take your time to read the guide: -- [React guide](https://reactjs.org/docs/hello-world.html) -- [Inferno documentation](https://infernojs.org/docs/guides/components) - highlights differences with React. +- [React guide](https://react.dev/learn) If you were already familiar with an older, Ractive-based tgui, and want to translate concepts between old and new tgui, read this [interface conversion guide](docs/converting-old-tgui-interfaces.md). @@ -71,6 +70,7 @@ However, if you want finer control over the installation or build process, you w - `tools/build/build tgui-clean` - Clean up tgui folder. > With Juke Build, you can run multiple targets together, e.g.: +> > ``` > tools/build/build tgui tgui-lint tgui-tsc tgui-test > ``` @@ -137,7 +137,7 @@ Press `F12` or click the green bug to open the KitchenSink interface. This inter playground to test various tgui components. **Layout Debugger.** -Press `F11` to toggle the *layout debugger*. It will show outlines of +Press `F11` to toggle the _layout debugger_. It will show outlines of all tgui elements, which makes it easy to understand how everything comes together, and can reveal certain layout bugs which are not normally visible. diff --git a/tgui/babel.config.js b/tgui/babel.config.js deleted file mode 100644 index e702c9a7119d6..0000000000000 --- a/tgui/babel.config.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -const createBabelConfig = (options) => { - const { presets = [], plugins = [], removeConsole } = options; - // prettier-ignore - return { - presets: [ - [require.resolve('@babel/preset-typescript'), { - allowDeclareFields: true, - }], - [require.resolve('@babel/preset-env'), { - modules: 'commonjs', - useBuiltIns: 'entry', - corejs: '3', - spec: false, - loose: true, - targets: [], - }], - ...presets, - ].filter(Boolean), - plugins: [ - [require.resolve('@babel/plugin-proposal-class-properties'), { - loose: true, - }], - require.resolve('@babel/plugin-transform-jscript'), - require.resolve('babel-plugin-inferno'), - removeConsole && require.resolve('babel-plugin-transform-remove-console'), - require.resolve('common/string.babel-plugin.cjs'), - ...plugins, - ].filter(Boolean), - }; -}; - -module.exports = (api) => { - api.cache(true); - const mode = process.env.NODE_ENV; - return createBabelConfig({ mode }); -}; - -module.exports.createBabelConfig = createBabelConfig; diff --git a/tgui/docs/component-reference.md b/tgui/docs/component-reference.md index 5c26d250d6e3e..152d0cff8bf56 100644 --- a/tgui/docs/component-reference.md +++ b/tgui/docs/component-reference.md @@ -65,17 +65,13 @@ it is used a lot in this framework. **Event handlers.** Event handlers are callbacks that you can attack to various element to -listen for browser events. Inferno supports camelcase (`onClick`) and -lowercase (`onclick`) event names. +listen for browser events. React supports camelcase (`onClick`) event names. - Camel case names are what's called *synthetic* events, and are the **preferred way** of handling events in React, for efficiency and performance reasons. Please read -[Inferno Event Handling](https://infernojs.org/docs/guides/event-handling) +[React Event Handling](https://react.dev/learn/responding-to-events) to understand what this is about. -- Lower case names are native browser events and should be used sparingly, -for example when you need an explicit IE8 support. **DO NOT** use -lowercase event handlers unless you really know what you are doing. ## `tgui/components` @@ -370,7 +366,7 @@ dropdown when open. See Dropdown.tsx for more adcanced usage with DropdownEntry - `over: boolean` - Dropdown renders over instead of below - `color: string` - Color of dropdown button - `nochevron: boolean` - Whether or not the arrow on the right hand side of the dropdown button is visible -- `displayText: string | number | InfernoNode` - Text to always display in place of the selected text +- `displayText: string | number | ReactNode` - Text to always display in place of the selected text - `onClick: (e) => void` - Called when dropdown button is clicked - `onSelected: (value) => void` - Called when a value is picked from the list, `value` is the value that was picked @@ -628,7 +624,7 @@ to perform some sort of action), there is a way to do that: **Props:** - `className: string` - Applies a CSS class to the element. -- `label: string|InfernoNode` - Item label. +- `label: string|ReactNode` - Item label. - `labelWrap: boolean` - Lets the label wrap and makes it not take the minimum width. - `labelColor: string` - Sets the color of the label. - `color: string` - Sets the color of the content text. @@ -723,7 +719,7 @@ Popper lets you position elements so that they don't go out of the bounds of the **Props:** -- `popperContent: InfernoNode` - The content that will be put inside the popper. +- `popperContent: ReactNode` - The content that will be put inside the popper. - `options?: { ... }` - An object of options to pass to `createPopper`. See [https://popper.js.org/docs/v2/constructors/#options], but the one you want most is `placement`. Valid placements are "bottom", "top", "left", and "right". You can affix "-start" and "-end" to achieve something like top left or top right respectively. You can also use "auto" (with an optional "-start" or "-end"), where a best fit will be chosen. - `additionalStyles: { ... }` - A map of CSS styles to add to the element that will contain the popper. diff --git a/tgui/docs/state-usage.md b/tgui/docs/state-usage.md new file mode 100644 index 0000000000000..9d3a2812a68d1 --- /dev/null +++ b/tgui/docs/state-usage.md @@ -0,0 +1,30 @@ +# Managing component state + +React has excellent documentation on useState and useEffect. These hooks should be the ways to manage state in TGUI (v5). +[React Hooks](https://react.dev/learn/state-a-components-memory) + +You might find usages of useLocalState. This should be considered deprecated and will be removed in the future. In older versions of TGUI, InfernoJS did not have hooks, so these were used to manage state. useSharedState is still used in some places where uis are considered "IC" and user input is shared with all persons at the console/machine/thing. + +## A Note on State + +Many beginners tend to overuse state (or hooks all together). State is effective when you want to implement user interactivity, or are handling asynchronous data, but if you are simply using state to store a value that is not changing, you should consider using a variable instead. + +In previous versions of React, each setState would trigger a re-render, which would cause poorly written components to cascade re-render on each page load. Messy! Though this is no longer the case with batch rendering, it's still worthwhile to point out that you might be overusing it. + +## Derived state + +One great way to cut back on state usage is by using props or other state as the basis for a variable. You'll see many examples of this in the TGUI codebase. What does this mean? Here's an example: + +```tsx +// Bad +const [count, setCount] = useState(0); +const [isEven, setIsEven] = useState(false); + +useEffect(() => { + setIsEven(count % 2 === 0); +}, [count]); + +// Good! +const [count, setCount] = useState(0); +const isEven = count % 2 === 0; // Derived state +``` diff --git a/tgui/jest.config.js b/tgui/jest.config.js index 8b78818004be4..d8b4ac3e41a80 100644 --- a/tgui/jest.config.js +++ b/tgui/jest.config.js @@ -8,7 +8,7 @@ module.exports = { testEnvironment: 'jsdom', testRunner: require.resolve('jest-circus/runner'), transform: { - '^.+\\.(js|cjs|ts|tsx)$': require.resolve('babel-jest'), + '^.+\\.(js|cjs|ts|tsx)$': require.resolve('@swc/jest'), }, moduleFileExtensions: ['js', 'cjs', 'ts', 'tsx', 'json'], resetMocks: true, diff --git a/tgui/package.json b/tgui/package.json index c53759dff2180..9a0d017cf1e32 100644 --- a/tgui/package.json +++ b/tgui/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "tgui-workspace", - "version": "4.3.1", + "version": "5.0.0", "packageManager": "yarn@3.3.1", "workspaces": [ "packages/*" @@ -12,7 +12,7 @@ "tgui:build": "BROWSERSLIST_IGNORE_OLD_DATA=true webpack", "tgui:dev": "node --experimental-modules packages/tgui-dev-server/index.js", "tgui:lint": "eslint packages --ext .js,.cjs,.ts,.tsx", - "tgui:prettier": "prettierx --check .", + "tgui:prettier": "prettier --check .", "tgui:sonar": "eslint packages --ext .js,.cjs,.ts,.tsx -c .eslintrc-sonar.yml", "tgui:test": "jest --watch", "tgui:test-simple": "CI=true jest --color", @@ -20,44 +20,36 @@ "tgui:tsc": "tsc" }, "dependencies": { - "@babel/core": "^7.15.0", - "@babel/eslint-parser": "^7.15.0", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-transform-jscript": "^7.14.5", - "@babel/preset-env": "^7.15.0", - "@babel/preset-typescript": "^7.15.0", - "@types/jest": "^29.2.4", - "@types/jsdom": "^20.0.1", - "@types/node": "14.x", - "@types/webpack": "^5.28.0", - "@types/webpack-env": "^1.18.0", - "@typescript-eslint/parser": "^5.47.1", - "babel-jest": "^27.0.6", - "babel-loader": "^8.2.2", - "babel-plugin-inferno": "^6.3.0", - "babel-plugin-transform-remove-console": "^6.9.4", - "common": "workspace:*", - "css-loader": "^5.2.7", - "eslint": "^7.32.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-radar": "^0.2.1", - "eslint-plugin-react": "^7.24.0", - "eslint-plugin-unused-imports": "^1.1.4", + "@swc/core": "^1.3.101", + "@swc/jest": "^0.2.29", + "@types/jest": "^29.5.10", + "@types/jsdom": "^21.1.6", + "@types/node": "^14.x", + "@types/webpack": "^5.28.5", + "@types/webpack-env": "^1.18.4", + "@typescript-eslint/parser": "^6.14.0", + "css-loader": "^6.8.1", + "esbuild-loader": "^4.0.2", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-simple-import-sort": "^10.0.0", + "eslint-plugin-unused-imports": "^3.0.0", "file-loader": "^6.2.0", - "inferno": "^7.4.8", - "jest": "^27.0.6", - "jest-circus": "^27.0.6", - "jsdom": "^16.7.0", - "mini-css-extract-plugin": "^1.6.2", - "prettier": "npm:prettierx@0.19.0", - "sass": "^1.37.5", - "sass-loader": "^11.1.1", - "style-loader": "^2.0.0", - "terser-webpack-plugin": "^5.1.4", + "jest": "^29.7.0", + "jest-circus": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jsdom": "^22.1.0", + "mini-css-extract-plugin": "^2.7.6", + "prettier": "^3.1.0", + "sass": "^1.69.5", + "sass-loader": "^13.3.2", + "style-loader": "^3.3.3", + "swc-loader": "^0.2.3", "typescript": "^4.9.4", "url-loader": "^4.1.1", - "webpack": "^5.75.0", - "webpack-bundle-analyzer": "^4.4.2", - "webpack-cli": "^4.7.2" + "webpack": "^5.89.0", + "webpack-bundle-analyzer": "^4.10.1", + "webpack-cli": "^5.1.4" } } diff --git a/tgui/packages/common/collections.ts b/tgui/packages/common/collections.ts index 49f500ebd29a6..05c47762ad080 100644 --- a/tgui/packages/common/collections.ts +++ b/tgui/packages/common/collections.ts @@ -32,12 +32,12 @@ export const filter = }; type MapFunction = { - (iterateeFn: (value: T, index: number, collection: T[]) => U): ( - collection: T[] - ) => U[]; + ( + iterateeFn: (value: T, index: number, collection: T[]) => U, + ): (collection: T[]) => U[]; ( - iterateeFn: (value: T, index: K, collection: Record) => U + iterateeFn: (value: T, index: K, collection: Record) => U, ): (collection: Record) => U[]; }; @@ -75,7 +75,7 @@ export const map: MapFunction = */ export const filterMap = ( collection: T[], - iterateeFn: (value: T) => U | undefined + iterateeFn: (value: T) => U | undefined, ): U[] => { const finalCollection: U[] = []; @@ -261,7 +261,7 @@ export const zipWith = const binarySearch = ( getKey: (value: T) => U, collection: readonly T[], - inserting: T + inserting: T, ): number => { if (collection.length === 0) { return 0; diff --git a/tgui/packages/common/color.js b/tgui/packages/common/color.js index 672fce529b615..fffd452ddb837 100644 --- a/tgui/packages/common/color.js +++ b/tgui/packages/common/color.js @@ -31,7 +31,7 @@ Color.fromHex = (hex) => new Color( parseInt(hex.substr(1, 2), 16), parseInt(hex.substr(3, 2), 16), - parseInt(hex.substr(5, 2), 16) + parseInt(hex.substr(5, 2), 16), ); /** @@ -42,7 +42,7 @@ Color.lerp = (c1, c2, n) => (c2.r - c1.r) * n + c1.r, (c2.g - c1.g) * n + c1.g, (c2.b - c1.b) * n + c1.b, - (c2.a - c1.a) * n + c1.a + (c2.a - c1.a) * n + c1.a, ); /** diff --git a/tgui/packages/common/keycodes.js b/tgui/packages/common/keycodes.ts similarity index 100% rename from tgui/packages/common/keycodes.js rename to tgui/packages/common/keycodes.ts diff --git a/tgui/packages/common/keys.ts b/tgui/packages/common/keys.ts index 61b79992b486b..34ac9e1614dde 100644 --- a/tgui/packages/common/keys.ts +++ b/tgui/packages/common/keys.ts @@ -22,18 +22,18 @@ export enum KEY { Backspace = 'Backspace', Control = 'Control', Delete = 'Delete', - Down = 'Down', + Down = 'ArrowDown', End = 'End', Enter = 'Enter', - Escape = 'Esc', + Escape = 'Escape', Home = 'Home', Insert = 'Insert', - Left = 'Left', + Left = 'ArrowLeft', PageDown = 'PageDown', PageUp = 'PageUp', - Right = 'Right', + Right = 'ArrowRight', Shift = 'Shift', Space = ' ', Tab = 'Tab', - Up = 'Up', + Up = 'ArrowUp', } diff --git a/tgui/packages/common/react.ts b/tgui/packages/common/react.ts index 8e42d0971ab41..5260ff6ae128b 100644 --- a/tgui/packages/common/react.ts +++ b/tgui/packages/common/react.ts @@ -52,13 +52,10 @@ export const shallowDiffers = (a: object, b: object) => { }; /** - * Default inferno hooks for pure components. + * A common case in tgui, when you pass a value conditionally, these are + * the types that can fall through the condition. */ -export const pureComponentHooks = { - onComponentShouldUpdate: (lastProps, nextProps) => { - return shallowDiffers(lastProps, nextProps); - }, -}; +export type BooleanLike = number | boolean | null | undefined; /** * A helper to determine whether the object is renderable by React. @@ -69,9 +66,3 @@ export const canRender = (value: unknown) => { && value !== null && typeof value !== 'boolean'; }; - -/** - * A common case in tgui, when you pass a value conditionally, these are - * the types that can fall through the condition. - */ -export type BooleanLike = number | boolean | null | undefined; diff --git a/tgui/packages/common/redux.test.ts b/tgui/packages/common/redux.test.ts index af4e5d4e73eb7..d4af99907cee9 100644 --- a/tgui/packages/common/redux.test.ts +++ b/tgui/packages/common/redux.test.ts @@ -1,4 +1,11 @@ -import { Action, Reducer, applyMiddleware, combineReducers, createAction, createStore } from './redux'; +import { + Action, + applyMiddleware, + combineReducers, + createAction, + createStore, + Reducer, +} from './redux'; // Dummy Reducer const counterReducer: Reducer> = (state = 0, action) => { @@ -31,7 +38,7 @@ describe('Redux implementation tests', () => { test('createStore with applyMiddleware works', () => { const store = createStore( counterReducer, - applyMiddleware(loggingMiddleware) + applyMiddleware(loggingMiddleware), ); expect(store.getState()).toBe(0); }); diff --git a/tgui/packages/common/redux.ts b/tgui/packages/common/redux.ts index 4e618bddafd00..997cc1d2d68cf 100644 --- a/tgui/packages/common/redux.ts +++ b/tgui/packages/common/redux.ts @@ -6,7 +6,7 @@ export type Reducer = ( state: State | undefined, - action: ActionType + action: ActionType, ) => State; export type Store = { @@ -21,7 +21,7 @@ type MiddlewareAPI = { }; export type Middleware = ( - storeApi: MiddlewareAPI + storeApi: MiddlewareAPI, ) => (next: Dispatch) => Dispatch; export type Action = { @@ -33,7 +33,7 @@ export type AnyAction = Action & { }; export type Dispatch = ( - action: ActionType + action: ActionType, ) => void; type StoreEnhancer = (createStoreFunction: Function) => Function; @@ -48,7 +48,7 @@ type PreparedAction = { */ export const createStore = ( reducer: Reducer, - enhancer?: StoreEnhancer + enhancer?: StoreEnhancer, ): Store => { // Apply a store enhancer (applyMiddleware is one of them). if (enhancer) { @@ -90,14 +90,14 @@ export const applyMiddleware = ( ...middlewares: Middleware[] ): StoreEnhancer => { return ( - createStoreFunction: (reducer: Reducer, enhancer?: StoreEnhancer) => Store + createStoreFunction: (reducer: Reducer, enhancer?: StoreEnhancer) => Store, ) => { return (reducer, ...args): Store => { const store = createStoreFunction(reducer, ...args); let dispatch: Dispatch = () => { throw new Error( - 'Dispatching while constructing your middleware is not allowed.' + 'Dispatching while constructing your middleware is not allowed.', ); }; @@ -109,7 +109,7 @@ export const applyMiddleware = ( const chain = middlewares.map((middleware) => middleware(storeApi)); dispatch = chain.reduceRight( (next, middleware) => middleware(next), - store.dispatch + store.dispatch, ); return { @@ -129,7 +129,7 @@ export const applyMiddleware = ( * is also more flexible than the redux counterpart. */ export const combineReducers = ( - reducersObj: Record + reducersObj: Record, ): Reducer => { const keys = Object.keys(reducersObj); @@ -170,7 +170,7 @@ export const combineReducers = ( */ export const createAction = ( type: TAction, - prepare?: (...args: any[]) => PreparedAction + prepare?: (...args: any[]) => PreparedAction, ) => { const actionCreator = (...args: any[]) => { let action: Action & PreparedAction = { type }; @@ -194,19 +194,3 @@ export const createAction = ( return actionCreator; }; - -// Implementation specific -// -------------------------------------------------------- - -export const useDispatch = (context: { - store: Store; -}): Dispatch => { - return context.store.dispatch; -}; - -export const useSelector = ( - context: { store: Store }, - selector: (state: State) => Selected -): Selected => { - return selector(context.store.getState()); -}; diff --git a/tgui/packages/common/timer.ts b/tgui/packages/common/timer.ts index 49d36484200b3..1fc3e11fd30e5 100644 --- a/tgui/packages/common/timer.ts +++ b/tgui/packages/common/timer.ts @@ -13,7 +13,7 @@ export const debounce = any>( fn: F, time: number, - immediate = false + immediate = false, ): ((...args: Parameters) => void) => { let timeout: ReturnType | null; return (...args: Parameters) => { @@ -38,7 +38,7 @@ export const debounce = any>( */ export const throttle = any>( fn: F, - time: number + time: number, ): ((...args: Parameters) => void) => { let previouslyRun: number | null, queuedToRun: ReturnType | null; @@ -53,7 +53,7 @@ export const throttle = any>( } else { queuedToRun = setTimeout( () => invokeFn(...args), - time - (now - (previouslyRun ?? 0)) + time - (now - (previouslyRun ?? 0)), ); } }; diff --git a/tgui/packages/tgui-bench/entrypoint.tsx b/tgui/packages/tgui-bench/entrypoint.tsx index 377848fe3ae09..48dcd3dcce113 100644 --- a/tgui/packages/tgui-bench/entrypoint.tsx +++ b/tgui/packages/tgui-bench/entrypoint.tsx @@ -4,8 +4,10 @@ * @license MIT */ -import { setupGlobalEvents } from 'tgui/events'; import 'tgui/styles/main.scss'; + +import { setupGlobalEvents } from 'tgui/events'; + import Benchmark from './lib/benchmark'; const sendMessage = (obj: any) => { diff --git a/tgui/packages/tgui-bench/index.js b/tgui/packages/tgui-bench/index.js index 9f6aee20996d0..b15f3ebf37ad5 100644 --- a/tgui/packages/tgui-bench/index.js +++ b/tgui/packages/tgui-bench/index.js @@ -31,7 +31,7 @@ const setup = async () => { .readFileSync(path.join(publicDir, 'tgui.html'), 'utf-8') .replace('\n', assets); - server.register(require('fastify-static'), { + server.register(require('@fastify/static'), { root: publicDir, }); diff --git a/tgui/packages/tgui-bench/lib/benchmark.d.ts b/tgui/packages/tgui-bench/lib/benchmark.d.ts index 7f3310005f77b..3eac568d4184f 100644 --- a/tgui/packages/tgui-bench/lib/benchmark.d.ts +++ b/tgui/packages/tgui-bench/lib/benchmark.d.ts @@ -27,7 +27,7 @@ declare class Benchmark { static reduce( arr: T[], callback: (accumulator: K, value: T) => K, - thisArg?: any + thisArg?: any, ): K; static options: Benchmark.Options; diff --git a/tgui/packages/tgui-bench/package.json b/tgui/packages/tgui-bench/package.json index 49bc0c423c28d..47cad082fb9b5 100644 --- a/tgui/packages/tgui-bench/package.json +++ b/tgui/packages/tgui-bench/package.json @@ -1,15 +1,14 @@ { "private": true, "name": "tgui-bench", - "version": "4.3.1", + "version": "5.0.0", "dependencies": { + "@fastify/static": "^6.12.0", "common": "workspace:*", - "fastify": "^3.29.4", - "fastify-static": "^4.2.3", - "inferno": "^7.4.8", - "inferno-vnode-flags": "^7.4.8", + "fastify": "^3.29.5", "lodash": "^4.17.21", "platform": "^1.3.6", + "react": "^18.2.0", "tgui": "workspace:*" } } diff --git a/tgui/packages/tgui-bench/tests/Button.test.tsx b/tgui/packages/tgui-bench/tests/Button.test.tsx index 6b806d720ab83..0549e69b623ae 100644 --- a/tgui/packages/tgui-bench/tests/Button.test.tsx +++ b/tgui/packages/tgui-bench/tests/Button.test.tsx @@ -1,11 +1,8 @@ -import { linkEvent } from 'inferno'; import { Button } from 'tgui/components'; import { createRenderer } from 'tgui/renderer'; const render = createRenderer(); -const handleClick = () => undefined; - export const SingleButton = () => { const node = ; render(node); @@ -16,13 +13,6 @@ export const SingleButtonWithCallback = () => { render(node); }; -export const SingleButtonWithLinkEvent = () => { - const node = ( - - ); - render(node); -}; - export const ListOfButtons = () => { const nodes: JSX.Element[] = []; for (let i = 0; i < 100; i++) { @@ -45,19 +35,6 @@ export const ListOfButtonsWithCallback = () => { render(
    {nodes}
    ); }; -export const ListOfButtonsWithLinkEvent = () => { - const nodes: JSX.Element[] = []; - for (let i = 0; i < 100; i++) { - const node = ( - - ); - nodes.push(node); - } - render(
    {nodes}
    ); -}; - export const ListOfButtonsWithIcons = () => { const nodes: JSX.Element[] = []; for (let i = 0; i < 100; i++) { diff --git a/tgui/packages/tgui-bench/tests/Tooltip.test.tsx b/tgui/packages/tgui-bench/tests/Tooltip.test.tsx index ea43a61f0b448..9dae16f5c0303 100644 --- a/tgui/packages/tgui-bench/tests/Tooltip.test.tsx +++ b/tgui/packages/tgui-bench/tests/Tooltip.test.tsx @@ -12,7 +12,7 @@ export const ListOfTooltips = () => { Tooltip #{i} - + , ); } diff --git a/tgui/packages/tgui-dev-server/dreamseeker.js b/tgui/packages/tgui-dev-server/dreamseeker.js index 2b25b155ae0c7..d1ca2a9ac5395 100644 --- a/tgui/packages/tgui-dev-server/dreamseeker.js +++ b/tgui/packages/tgui-dev-server/dreamseeker.js @@ -6,6 +6,7 @@ import { exec } from 'child_process'; import { promisify } from 'util'; + import { createLogger } from './logging.js'; import { require } from './require.js'; @@ -30,7 +31,7 @@ export class DreamSeeker { + '=' + encodeURIComponent(params[key])) .join('&'); logger.log( - `topic call at ${this.client.defaults.baseURL + '/dummy?' + query}` + `topic call at ${this.client.defaults.baseURL + '/dummy?' + query}`, ); return this.client.get('/dummy?' + query); } diff --git a/tgui/packages/tgui-dev-server/index.js b/tgui/packages/tgui-dev-server/index.js index 199e93d836321..85489ebb0499f 100644 --- a/tgui/packages/tgui-dev-server/index.js +++ b/tgui/packages/tgui-dev-server/index.js @@ -4,8 +4,8 @@ * @license MIT */ -import { createCompiler } from './webpack.js'; import { reloadByondCache } from './reloader.js'; +import { createCompiler } from './webpack.js'; const noHot = process.argv.includes('--no-hot'); const noTmp = process.argv.includes('--no-tmp'); diff --git a/tgui/packages/tgui-dev-server/link/retrace.js b/tgui/packages/tgui-dev-server/link/retrace.js index 842de228fdfde..083ddb37d1c14 100644 --- a/tgui/packages/tgui-dev-server/link/retrace.js +++ b/tgui/packages/tgui-dev-server/link/retrace.js @@ -6,6 +6,7 @@ import fs from 'fs'; import { basename } from 'path'; + import { createLogger } from '../logging.js'; import { require } from '../require.js'; import { resolveGlob } from '../util.js'; @@ -30,7 +31,7 @@ export const loadSourceMaps = async (bundleDir) => { try { const file = basename(path).replace('.map', ''); const consumer = await new SourceMapConsumer( - JSON.parse(fs.readFileSync(path, 'utf8')) + JSON.parse(fs.readFileSync(path, 'utf8')), ); sourceMaps.push({ file, consumer }); } catch (err) { diff --git a/tgui/packages/tgui-dev-server/link/server.js b/tgui/packages/tgui-dev-server/link/server.js index 60cc78c1bd9ed..2a1f551bf6ebd 100644 --- a/tgui/packages/tgui-dev-server/link/server.js +++ b/tgui/packages/tgui-dev-server/link/server.js @@ -6,6 +6,7 @@ import http from 'http'; import { inspect } from 'util'; + import { createLogger, directLog } from '../logging.js'; import { require } from '../require.js'; import { loadSourceMaps, retrace } from './retrace.js'; diff --git a/tgui/packages/tgui-dev-server/package.json b/tgui/packages/tgui-dev-server/package.json index 2477641c7e793..496e25c6c1847 100644 --- a/tgui/packages/tgui-dev-server/package.json +++ b/tgui/packages/tgui-dev-server/package.json @@ -1,13 +1,13 @@ { "private": true, "name": "tgui-dev-server", - "version": "4.3.1", + "version": "5.0.0", "type": "module", "dependencies": { - "axios": "^0.21.1", - "glob": "^7.1.7", - "source-map": "^0.7.3", + "axios": "^1.6.2", + "glob": "^7.2.0", + "source-map": "^0.7.4", "stacktrace-parser": "^0.1.10", - "ws": "^7.5.3" + "ws": "^8.14.2" } } diff --git a/tgui/packages/tgui-dev-server/reloader.js b/tgui/packages/tgui-dev-server/reloader.js index c13a8afdfcfc5..cb477a6523b03 100644 --- a/tgui/packages/tgui-dev-server/reloader.js +++ b/tgui/packages/tgui-dev-server/reloader.js @@ -7,6 +7,7 @@ import fs from 'fs'; import os from 'os'; import { basename } from 'path'; + import { DreamSeeker } from './dreamseeker.js'; import { createLogger } from './logging.js'; import { resolveGlob, resolvePath } from './util.js'; @@ -83,19 +84,19 @@ export const reloadByondCache = async (bundleDir) => { } // Get dreamseeker instances const pids = cacheDirs.map((cacheDir) => - parseInt(cacheDir.split('/cache/tmp').pop(), 10) + parseInt(cacheDir.split('/cache/tmp').pop(), 10), ); const dssPromise = DreamSeeker.getInstancesByPids(pids); // Copy assets const assets = await resolveGlob( bundleDir, - './*.+(bundle|chunk|hot-update).*' + './*.+(bundle|chunk|hot-update).*', ); for (let cacheDir of cacheDirs) { // Clear garbage const garbage = await resolveGlob( cacheDir, - './*.+(bundle|chunk|hot-update).*' + './*.+(bundle|chunk|hot-update).*', ); try { // Plant a dummy browser window file, we'll be using this to avoid world topic. For byond 515. diff --git a/tgui/packages/tgui-dev-server/util.js b/tgui/packages/tgui-dev-server/util.js index 9d07b96c71a05..79190fe189a4a 100644 --- a/tgui/packages/tgui-dev-server/util.js +++ b/tgui/packages/tgui-dev-server/util.js @@ -6,6 +6,7 @@ import fs from 'fs'; import path from 'path'; + import { require } from './require.js'; const globPkg = require('glob'); diff --git a/tgui/packages/tgui-dev-server/webpack.js b/tgui/packages/tgui-dev-server/webpack.js index 139610b79ce99..e4fbdeb9f1e2b 100644 --- a/tgui/packages/tgui-dev-server/webpack.js +++ b/tgui/packages/tgui-dev-server/webpack.js @@ -7,6 +7,7 @@ import fs from 'fs'; import { createRequire } from 'module'; import { dirname } from 'path'; + import { loadSourceMaps, setupLink } from './link/server.js'; import { createLogger } from './logging.js'; import { reloadByondCache } from './reloader.js'; diff --git a/tgui/packages/tgui-dev-server/winreg.js b/tgui/packages/tgui-dev-server/winreg.js index b61fddc1a255a..4f66d715950b6 100644 --- a/tgui/packages/tgui-dev-server/winreg.js +++ b/tgui/packages/tgui-dev-server/winreg.js @@ -8,6 +8,7 @@ import { exec } from 'child_process'; import { promisify } from 'util'; + import { createLogger } from './logging.js'; const logger = createLogger('winreg'); diff --git a/tgui/packages/tgui-panel/Notifications.js b/tgui/packages/tgui-panel/Notifications.tsx similarity index 100% rename from tgui/packages/tgui-panel/Notifications.js rename to tgui/packages/tgui-panel/Notifications.tsx diff --git a/tgui/packages/tgui-panel/Panel.js b/tgui/packages/tgui-panel/Panel.tsx similarity index 76% rename from tgui/packages/tgui-panel/Panel.js rename to tgui/packages/tgui-panel/Panel.tsx index 83150ab6ef13d..2813b636574dc 100644 --- a/tgui/packages/tgui-panel/Panel.js +++ b/tgui/packages/tgui-panel/Panel.tsx @@ -6,6 +6,7 @@ import { Button, Section, Stack } from 'tgui/components'; import { Pane } from 'tgui/layouts'; + import { NowPlayingWidget, useAudio } from './audio'; import { ChatPanel, ChatTabs } from './chat'; import { useGame } from './game'; @@ -14,21 +15,18 @@ import { PingIndicator } from './ping'; import { ReconnectButton } from './reconnect'; import { SettingsPanel, useSettings } from './settings'; -export const Panel = (props, context) => { - // IE8-10: Needs special treatment due to missing Flex support - if (Byond.IS_LTE_IE10) { - return ; - } - const audio = useAudio(context); - const settings = useSettings(context); - const game = useGame(context); +export const Panel = (props) => { + const audio = useAudio(); + const settings = useSettings(); + const game = useGame(); if (process.env.NODE_ENV !== 'production') { const { useDebug, KitchenSink } = require('tgui/debug'); - const debug = useDebug(context); + const debug = useDebug(); if (debug.kitchenSink) { return ; } } + return ( @@ -102,27 +100,3 @@ export const Panel = (props, context) => { ); }; - -const HoboPanel = (props, context) => { - const settings = useSettings(context); - return ( - - - - {(settings.visible && ) || ( - - )} - - - ); -}; diff --git a/tgui/packages/tgui-panel/audio/NowPlayingWidget.js b/tgui/packages/tgui-panel/audio/NowPlayingWidget.jsx similarity index 79% rename from tgui/packages/tgui-panel/audio/NowPlayingWidget.js rename to tgui/packages/tgui-panel/audio/NowPlayingWidget.jsx index 672ecfad7cecd..f3d7417cd1afd 100644 --- a/tgui/packages/tgui-panel/audio/NowPlayingWidget.js +++ b/tgui/packages/tgui-panel/audio/NowPlayingWidget.jsx @@ -5,15 +5,16 @@ */ import { toFixed } from 'common/math'; -import { useDispatch, useSelector } from 'common/redux'; +import { useDispatch, useSelector } from 'tgui/backend'; import { Button, Flex, Knob } from 'tgui/components'; + import { useSettings } from '../settings'; import { selectAudio } from './selectors'; -export const NowPlayingWidget = (props, context) => { - const audio = useSelector(context, selectAudio); - const dispatch = useDispatch(context); - const settings = useSettings(context); +export const NowPlayingWidget = (props) => { + const audio = useSelector(selectAudio); + const dispatch = useDispatch(); + const settings = useSettings(); const title = audio.meta?.title; return ( @@ -26,10 +27,11 @@ export const NowPlayingWidget = (props, context) => { mx={0.5} grow={1} style={{ - 'white-space': 'nowrap', - 'overflow': 'hidden', - 'text-overflow': 'ellipsis', - }}> + whiteSpace: 'nowrap', + overflow: 'hidden', + textOverflow: 'ellipsis', + }} + > {title || 'Unknown Track'} diff --git a/tgui/packages/tgui-panel/audio/hooks.js b/tgui/packages/tgui-panel/audio/hooks.ts similarity index 51% rename from tgui/packages/tgui-panel/audio/hooks.js rename to tgui/packages/tgui-panel/audio/hooks.ts index 504b4f5c6e798..2e9d830cb777a 100644 --- a/tgui/packages/tgui-panel/audio/hooks.js +++ b/tgui/packages/tgui-panel/audio/hooks.ts @@ -4,12 +4,13 @@ * @license MIT */ -import { useSelector, useDispatch } from 'common/redux'; +import { useDispatch, useSelector } from 'tgui/backend'; + import { selectAudio } from './selectors'; -export const useAudio = (context) => { - const state = useSelector(context, selectAudio); - const dispatch = useDispatch(context); +export const useAudio = () => { + const state = useSelector(selectAudio); + const dispatch = useDispatch(); return { ...state, toggle: () => dispatch({ type: 'audio/toggle' }), diff --git a/tgui/packages/tgui-panel/audio/index.js b/tgui/packages/tgui-panel/audio/index.ts similarity index 100% rename from tgui/packages/tgui-panel/audio/index.js rename to tgui/packages/tgui-panel/audio/index.ts diff --git a/tgui/packages/tgui-panel/audio/player.js b/tgui/packages/tgui-panel/audio/player.js index f9dfa41cef9db..50eccee16ba08 100644 --- a/tgui/packages/tgui-panel/audio/player.js +++ b/tgui/packages/tgui-panel/audio/player.js @@ -10,10 +10,6 @@ const logger = createLogger('AudioPlayer'); export class AudioPlayer { constructor() { - // Doesn't support HTMLAudioElement - if (Byond.IS_LTE_IE9) { - return; - } // Set up the HTMLAudioElement node this.node = document.createElement('audio'); this.node.style.setProperty('display', 'none'); diff --git a/tgui/packages/tgui-panel/audio/reducer.js b/tgui/packages/tgui-panel/audio/reducer.ts similarity index 100% rename from tgui/packages/tgui-panel/audio/reducer.js rename to tgui/packages/tgui-panel/audio/reducer.ts diff --git a/tgui/packages/tgui-panel/audio/selectors.js b/tgui/packages/tgui-panel/audio/selectors.ts similarity index 100% rename from tgui/packages/tgui-panel/audio/selectors.js rename to tgui/packages/tgui-panel/audio/selectors.ts diff --git a/tgui/packages/tgui-panel/chat/ChatPageSettings.js b/tgui/packages/tgui-panel/chat/ChatPageSettings.jsx similarity index 77% rename from tgui/packages/tgui-panel/chat/ChatPageSettings.js rename to tgui/packages/tgui-panel/chat/ChatPageSettings.jsx index c0d9962d2531f..67028168f8e86 100644 --- a/tgui/packages/tgui-panel/chat/ChatPageSettings.js +++ b/tgui/packages/tgui-panel/chat/ChatPageSettings.jsx @@ -4,15 +4,23 @@ * @license MIT */ -import { useDispatch, useSelector } from 'common/redux'; -import { Button, Collapsible, Divider, Input, Section, Stack } from 'tgui/components'; +import { useDispatch, useSelector } from 'tgui/backend'; +import { + Button, + Collapsible, + Divider, + Input, + Section, + Stack, +} from 'tgui/components'; + import { removeChatPage, toggleAcceptedType, updateChatPage } from './actions'; import { MESSAGE_TYPES } from './constants'; import { selectCurrentChatPage } from './selectors'; -export const ChatPageSettings = (props, context) => { - const page = useSelector(context, selectCurrentChatPage); - const dispatch = useDispatch(context); +export const ChatPageSettings = (props) => { + const page = useSelector(selectCurrentChatPage); + const dispatch = useDispatch(); return (
    @@ -25,7 +33,7 @@ export const ChatPageSettings = (props, context) => { updateChatPage({ pageId: page.id, name: value, - }) + }), ) } /> @@ -38,9 +46,10 @@ export const ChatPageSettings = (props, context) => { dispatch( removeChatPage({ pageId: page.id, - }) + }), ) - }> + } + > Remove @@ -48,7 +57,7 @@ export const ChatPageSettings = (props, context) => {
    {MESSAGE_TYPES.filter( - (typeDef) => !typeDef.important && !typeDef.admin + (typeDef) => !typeDef.important && !typeDef.admin, ).map((typeDef) => ( { toggleAcceptedType({ pageId: page.id, type: typeDef.type, - }) + }), ) - }> + } + > {typeDef.name} ))} {MESSAGE_TYPES.filter( - (typeDef) => !typeDef.important && typeDef.admin + (typeDef) => !typeDef.important && typeDef.admin, ).map((typeDef) => ( { toggleAcceptedType({ pageId: page.id, type: typeDef.type, - }) + }), ) - }> + } + > {typeDef.name} ))} diff --git a/tgui/packages/tgui-panel/chat/ChatPanel.js b/tgui/packages/tgui-panel/chat/ChatPanel.jsx similarity index 84% rename from tgui/packages/tgui-panel/chat/ChatPanel.js rename to tgui/packages/tgui-panel/chat/ChatPanel.jsx index 3132a66ce7f8c..845c161275653 100644 --- a/tgui/packages/tgui-panel/chat/ChatPanel.js +++ b/tgui/packages/tgui-panel/chat/ChatPanel.jsx @@ -5,13 +5,14 @@ */ import { shallowDiffers } from 'common/react'; -import { Component, createRef } from 'inferno'; +import { Component, createRef } from 'react'; import { Button } from 'tgui/components'; + import { chatRenderer } from './renderer'; export class ChatPanel extends Component { - constructor() { - super(); + constructor(props) { + super(props); this.ref = createRef(); this.state = { scrollTracking: true, @@ -26,7 +27,7 @@ export class ChatPanel extends Component { chatRenderer.mount(this.ref.current); chatRenderer.events.on( 'scrollTrackingChanged', - this.handleScrollTrackingChange + this.handleScrollTrackingChange, ); this.componentDidUpdate(); } @@ -34,7 +35,7 @@ export class ChatPanel extends Component { componentWillUnmount() { chatRenderer.events.off( 'scrollTrackingChanged', - this.handleScrollTrackingChange + this.handleScrollTrackingChange, ); } @@ -46,7 +47,7 @@ export class ChatPanel extends Component { !prevProps || shallowDiffers(this.props, prevProps); if (shouldUpdateStyle) { chatRenderer.assignStyle({ - 'width': '100%', + width: '100%', 'white-space': 'pre-wrap', 'font-size': this.props.fontSize, 'line-height': this.props.lineHeight, @@ -63,7 +64,8 @@ export class ChatPanel extends Component { )} diff --git a/tgui/packages/tgui-panel/chat/ChatTabs.js b/tgui/packages/tgui-panel/chat/ChatTabs.jsx similarity index 66% rename from tgui/packages/tgui-panel/chat/ChatTabs.js rename to tgui/packages/tgui-panel/chat/ChatTabs.jsx index 1d4f6f65edfea..2031f6a255b00 100644 --- a/tgui/packages/tgui-panel/chat/ChatTabs.js +++ b/tgui/packages/tgui-panel/chat/ChatTabs.jsx @@ -4,30 +4,32 @@ * @license MIT */ -import { useDispatch, useSelector } from 'common/redux'; -import { Box, Tabs, Flex, Button } from 'tgui/components'; -import { changeChatPage, addChatPage } from './actions'; -import { selectChatPages, selectCurrentChatPage } from './selectors'; +import { useDispatch, useSelector } from 'tgui/backend'; +import { Box, Button, Flex, Tabs } from 'tgui/components'; + import { openChatSettings } from '../settings/actions'; +import { addChatPage, changeChatPage } from './actions'; +import { selectChatPages, selectCurrentChatPage } from './selectors'; const UnreadCountWidget = ({ value }) => ( + fontSize: '0.7em', + borderRadius: '0.25em', + width: '1.7em', + lineHeight: '1.55em', + backgroundColor: 'crimson', + color: '#fff', + }} + > {Math.min(value, 99)} ); -export const ChatTabs = (props, context) => { - const pages = useSelector(context, selectChatPages); - const currentPage = useSelector(context, selectCurrentChatPage); - const dispatch = useDispatch(context); +export const ChatTabs = (props) => { + const pages = useSelector(selectChatPages); + const currentPage = useSelector(selectCurrentChatPage); + const dispatch = useDispatch(); return ( @@ -45,9 +47,10 @@ export const ChatTabs = (props, context) => { dispatch( changeChatPage({ pageId: page.id, - }) + }), ) - }> + } + > {page.name} ))} diff --git a/tgui/packages/tgui-panel/chat/actions.js b/tgui/packages/tgui-panel/chat/actions.js index e9919fcfa2b87..3814fbe611f79 100644 --- a/tgui/packages/tgui-panel/chat/actions.js +++ b/tgui/packages/tgui-panel/chat/actions.js @@ -5,6 +5,7 @@ */ import { createAction } from 'common/redux'; + import { createPage } from './model'; export const loadChat = createAction('chat/load'); diff --git a/tgui/packages/tgui-panel/chat/constants.js b/tgui/packages/tgui-panel/chat/constants.ts similarity index 100% rename from tgui/packages/tgui-panel/chat/constants.js rename to tgui/packages/tgui-panel/chat/constants.ts diff --git a/tgui/packages/tgui-panel/chat/index.js b/tgui/packages/tgui-panel/chat/index.ts similarity index 100% rename from tgui/packages/tgui-panel/chat/index.js rename to tgui/packages/tgui-panel/chat/index.ts diff --git a/tgui/packages/tgui-panel/chat/middleware.js b/tgui/packages/tgui-panel/chat/middleware.js index 51ee8f1deae42..0eeb0d6957d74 100644 --- a/tgui/packages/tgui-panel/chat/middleware.js +++ b/tgui/packages/tgui-panel/chat/middleware.js @@ -4,11 +4,28 @@ * @license MIT */ -import DOMPurify from 'dompurify'; import { storage } from 'common/storage'; -import { loadSettings, updateSettings, addHighlightSetting, removeHighlightSetting, updateHighlightSetting } from '../settings/actions'; +import DOMPurify from 'dompurify'; + +import { + addHighlightSetting, + loadSettings, + removeHighlightSetting, + updateHighlightSetting, + updateSettings, +} from '../settings/actions'; import { selectSettings } from '../settings/selectors'; -import { addChatPage, changeChatPage, changeScrollTracking, loadChat, rebuildChat, removeChatPage, saveChatToDisk, toggleAcceptedType, updateMessageCount } from './actions'; +import { + addChatPage, + changeChatPage, + changeScrollTracking, + loadChat, + rebuildChat, + removeChatPage, + saveChatToDisk, + toggleAcceptedType, + updateMessageCount, +} from './actions'; import { MAX_PERSISTED_MESSAGES, MESSAGE_SAVE_INTERVAL } from './constants'; import { createMessage, serializeMessage } from './model'; import { chatRenderer } from './renderer'; @@ -21,7 +38,7 @@ const saveChatToStorage = async (store) => { const state = selectChat(store.getState()); const fromIndex = Math.max( 0, - chatRenderer.messages.length - MAX_PERSISTED_MESSAGES + chatRenderer.messages.length - MAX_PERSISTED_MESSAGES, ); const messages = chatRenderer.messages .slice(fromIndex) @@ -64,6 +81,8 @@ const loadChatFromStorage = async (store) => { export const chatMiddleware = (store) => { let initialized = false; let loaded = false; + const sequences = []; + const sequences_requested = []; chatRenderer.events.on('batchProcessed', (countByType) => { // Use this flag to workaround unread messages caused by // loading them from storage. Side effect of that, is that @@ -85,9 +104,41 @@ export const chatMiddleware = (store) => { loadChatFromStorage(store); } if (type === 'chat/message') { - // Normalize the payload - const batch = Array.isArray(payload) ? payload : [payload]; - chatRenderer.processBatch(batch); + let payload_obj; + try { + payload_obj = JSON.parse(payload); + } catch (err) { + return; + } + + const sequence = payload_obj.sequence; + if (sequences.includes(sequence)) { + return; + } + + const sequence_count = sequences.length; + seq_check: if (sequence_count > 0) { + if (sequences_requested.includes(sequence)) { + sequences_requested.splice(sequences_requested.indexOf(sequence), 1); + // if we are receiving a message we requested, we can stop reliability checks + break seq_check; + } + + // cannot do reliability if we don't have any messages + const expected_sequence = sequences[sequence_count - 1] + 1; + if (sequence !== expected_sequence) { + for ( + let requesting = expected_sequence; + requesting < sequence; + requesting++ + ) { + requested_sequences.push(requesting); + Byond.sendMessage('chat/resend', requesting); + } + } + } + + chatRenderer.processBatch([payload_obj.content]); return; } if (type === loadChat.type) { @@ -125,7 +176,7 @@ export const chatMiddleware = (store) => { const settings = selectSettings(store.getState()); chatRenderer.setHighlight( settings.highlightSettings, - settings.highlightSettingById + settings.highlightSettingById, ); return; diff --git a/tgui/packages/tgui-panel/chat/model.js b/tgui/packages/tgui-panel/chat/model.js index fa12153890d8a..fdb5521b505b9 100644 --- a/tgui/packages/tgui-panel/chat/model.js +++ b/tgui/packages/tgui-panel/chat/model.js @@ -5,7 +5,8 @@ */ import { createUuid } from 'common/uuid'; -import { MESSAGE_TYPES, MESSAGE_TYPE_INTERNAL } from './constants'; + +import { MESSAGE_TYPE_INTERNAL, MESSAGE_TYPES } from './constants'; export const canPageAcceptType = (page, type) => type.startsWith(MESSAGE_TYPE_INTERNAL) || page.acceptedTypes[type]; diff --git a/tgui/packages/tgui-panel/chat/reducer.js b/tgui/packages/tgui-panel/chat/reducer.js index b727a7c1babc3..7a7681ada7416 100644 --- a/tgui/packages/tgui-panel/chat/reducer.js +++ b/tgui/packages/tgui-panel/chat/reducer.js @@ -4,7 +4,16 @@ * @license MIT */ -import { addChatPage, changeChatPage, loadChat, removeChatPage, toggleAcceptedType, updateChatPage, updateMessageCount, changeScrollTracking } from './actions'; +import { + addChatPage, + changeChatPage, + changeScrollTracking, + loadChat, + removeChatPage, + toggleAcceptedType, + updateChatPage, + updateMessageCount, +} from './actions'; import { canPageAcceptType, createMainPage } from './model'; const mainPage = createMainPage(); diff --git a/tgui/packages/tgui-panel/chat/renderer.js b/tgui/packages/tgui-panel/chat/renderer.jsx similarity index 88% rename from tgui/packages/tgui-panel/chat/renderer.js rename to tgui/packages/tgui-panel/chat/renderer.jsx index f7ce9277cf688..899839e56cc11 100644 --- a/tgui/packages/tgui-panel/chat/renderer.js +++ b/tgui/packages/tgui-panel/chat/renderer.jsx @@ -6,12 +6,25 @@ import { EventEmitter } from 'common/events'; import { classes } from 'common/react'; +import { render } from 'react-dom'; +import { Tooltip } from 'tgui/components'; import { createLogger } from 'tgui/logging'; -import { COMBINE_MAX_MESSAGES, COMBINE_MAX_TIME_WINDOW, IMAGE_RETRY_DELAY, IMAGE_RETRY_LIMIT, IMAGE_RETRY_MESSAGE_AGE, MAX_PERSISTED_MESSAGES, MAX_VISIBLE_MESSAGES, MESSAGE_PRUNE_INTERVAL, MESSAGE_TYPES, MESSAGE_TYPE_INTERNAL, MESSAGE_TYPE_UNKNOWN } from './constants'; -import { render } from 'inferno'; + +import { + COMBINE_MAX_MESSAGES, + COMBINE_MAX_TIME_WINDOW, + IMAGE_RETRY_DELAY, + IMAGE_RETRY_LIMIT, + IMAGE_RETRY_MESSAGE_AGE, + MAX_PERSISTED_MESSAGES, + MAX_VISIBLE_MESSAGES, + MESSAGE_PRUNE_INTERVAL, + MESSAGE_TYPE_INTERNAL, + MESSAGE_TYPE_UNKNOWN, + MESSAGE_TYPES, +} from './constants'; import { canPageAcceptType, createMessage, isSameMessage } from './model'; import { highlightNode, linkifyNode } from './replaceInTextNode'; -import { Tooltip } from '../../tgui/components'; const logger = createLogger('chatRenderer'); @@ -27,8 +40,8 @@ export const TGUI_CHAT_COMPONENTS = { // List of injectable attibute names mapped to their proper prop // We need this because attibutes don't support lowercase names export const TGUI_CHAT_ATTRIBUTES_TO_PROPS = { - 'position': 'position', - 'content': 'content', + position: 'position', + content: 'content', }; const findNearestScrollableParent = (startingNode) => { @@ -193,6 +206,7 @@ class ChatRenderer { const matchWord = setting.matchWord; const matchCase = setting.matchCase; const allowedRegex = /^[a-z0-9_\-$/^[\s\]\\]+$/gi; + const regexEscapeCharacters = /[!#$%^&*)(+=.<>{}[\]:;'"|~`_\-\\/]/g; const lines = String(text) .split(',') .map((str) => str.trim()) @@ -204,7 +218,7 @@ class ChatRenderer { // Must be alphanumeric (with some punctuation) allowedRegex.test(str) && // Reset lastIndex so it does not mess up the next word - ((allowedRegex.lastIndex = 0) || true) + ((allowedRegex.lastIndex = 0) || true), ); let highlightWords; let highlightRegex; @@ -228,19 +242,29 @@ class ChatRenderer { if (!highlightWords) { highlightWords = []; } + // We're not going to let regex characters fuck up our RegEx operation. + line = line.replace(regexEscapeCharacters, '\\$&'); + highlightWords.push(line); } } const regexStr = regexExpressions.join('|'); const flags = 'g' + (matchCase ? '' : 'i'); - // setting regex overrides matchword - if (regexStr) { - highlightRegex = new RegExp('(' + regexStr + ')', flags); - } else { - const pattern = `${matchWord ? '\\b' : ''}(${lines.join('|')})${ - matchWord ? '\\b' : '' - }`; - highlightRegex = new RegExp(pattern, flags); + // We wrap this in a try-catch to ensure that broken regex doesn't break + // the entire chat. + try { + // setting regex overrides matchword + if (regexStr) { + highlightRegex = new RegExp('(' + regexStr + ')', flags); + } else { + const pattern = `${matchWord ? '\\b' : ''}(${highlightWords.join( + '|', + )})${matchWord ? '\\b' : ''}`; + highlightRegex = new RegExp(pattern, flags); + } + } catch { + // We just reset it if it's invalid. + highlightRegex = null; } // Lazy init if (!this.highlightParsers) { @@ -294,15 +318,14 @@ class ChatRenderer { const to = Math.max(0, len - COMBINE_MAX_MESSAGES); for (let i = from; i >= to; i--) { const message = this.visibleMessages[i]; - // prettier-ignore - const matches = ( + + const matches = // Is not an internal message - !message.type.startsWith(MESSAGE_TYPE_INTERNAL) + !message.type.startsWith(MESSAGE_TYPE_INTERNAL) && // Text payload must fully match - && isSameMessage(message, predicate) + isSameMessage(message, predicate) && // Must land within the specified time window - && now < message.createdAt + COMBINE_MAX_TIME_WINDOW - ); + now < message.createdAt + COMBINE_MAX_TIME_WINDOW; if (matches) { return message; } @@ -395,7 +418,7 @@ class ChatRenderer { , - childNode + childNode, ); /* eslint-enable react/no-danger */ } @@ -407,7 +430,7 @@ class ChatRenderer { node, parser.highlightRegex, parser.highlightWords, - (text) => createHighlightNode(text, parser.highlightColor) + (text) => createHighlightNode(text, parser.highlightColor), ); if (highlighted && parser.highlightWholeMessage) { node.className += ' ChatMessage--highlighted'; @@ -434,11 +457,13 @@ class ChatRenderer { if (!message.type) { // IE8: Does not support querySelector on elements that // are not yet in the document. - // prettier-ignore - const typeDef = !Byond.IS_LTE_IE8 && MESSAGE_TYPES - .find(typeDef => ( - typeDef.selector && node.querySelector(typeDef.selector) - )); + + const typeDef = + !Byond.IS_LTE_IE8 && + MESSAGE_TYPES.find( + (typeDef) => + typeDef.selector && node.querySelector(typeDef.selector), + ); message.type = typeDef?.type || MESSAGE_TYPE_UNKNOWN; } updateMessageBadge(message); @@ -493,10 +518,10 @@ class ChatRenderer { message.node = 'pruned'; } // Remove pruned messages from the message array - // prettier-ignore - this.messages = this.messages.filter(message => ( - message.node !== 'pruned' - )); + + this.messages = this.messages.filter( + (message) => message.node !== 'pruned', + ); logger.log(`pruned ${fromIndex} visible messages`); } } @@ -504,7 +529,7 @@ class ChatRenderer { { const fromIndex = Math.max( 0, - this.messages.length - MAX_PERSISTED_MESSAGES + this.messages.length - MAX_PERSISTED_MESSAGES, ); if (fromIndex > 0) { this.messages = this.messages.slice(fromIndex); @@ -520,7 +545,7 @@ class ChatRenderer { // Make a copy of messages const fromIndex = Math.max( 0, - this.messages.length - MAX_PERSISTED_MESSAGES + this.messages.length - MAX_PERSISTED_MESSAGES, ); const messages = this.messages.slice(fromIndex); // Remove existing nodes @@ -563,19 +588,22 @@ class ChatRenderer { } } // Create a page - // prettier-ignore - const pageHtml = '\n' - + '\n' - + '\n' - + 'SS13 Chat Log\n' - + '\n' - + '\n' - + '\n' - + '
    \n' - + messagesHtml - + '
    \n' - + '\n' - + '\n'; + + const pageHtml = + '\n' + + '\n' + + '\n' + + 'SS13 Chat Log\n' + + '\n' + + '\n' + + '\n' + + '
    \n' + + messagesHtml + + '
    \n' + + '\n' + + '\n'; // Create and send a nice blob const blob = new Blob([pageHtml]); const timestamp = new Date() diff --git a/tgui/packages/tgui-panel/chat/replaceInTextNode.js b/tgui/packages/tgui-panel/chat/replaceInTextNode.js index 753997b3b821c..4c91b604dacf7 100644 --- a/tgui/packages/tgui-panel/chat/replaceInTextNode.js +++ b/tgui/packages/tgui-panel/chat/replaceInTextNode.js @@ -149,7 +149,7 @@ export const highlightNode = ( node, regex, words, - createNode = createHighlightNode + createNode = createHighlightNode, ) => { if (!createNode) { createNode = createHighlightNode; @@ -171,8 +171,8 @@ export const highlightNode = ( // Linkify // -------------------------------------------------------- -// prettier-ignore -const URL_REGEX = /(?:(?:https?:\/\/)|(?:www\.))(?:[^ ]*?\.[^ ]*?)+[-A-Za-z0-9+&@#/%?=~_|$!:,.;(){}]+/ig; +const URL_REGEX = + /(?:(?:https?:\/\/)|(?:www\.))(?:[^ ]*?\.[^ ]*?)+[-A-Za-z0-9+&@#/%?=~_|$!:,.;(){}]+/gi; /** * Highlights the text in the node based on the provided regular expression. diff --git a/tgui/packages/tgui-panel/chat/selectors.js b/tgui/packages/tgui-panel/chat/selectors.ts similarity index 85% rename from tgui/packages/tgui-panel/chat/selectors.js rename to tgui/packages/tgui-panel/chat/selectors.ts index 6352b7cddf0af..2908f661264a2 100644 --- a/tgui/packages/tgui-panel/chat/selectors.js +++ b/tgui/packages/tgui-panel/chat/selectors.ts @@ -9,7 +9,7 @@ import { map } from 'common/collections'; export const selectChat = (state) => state.chat; export const selectChatPages = (state) => - map((id) => state.chat.pageById[id])(state.chat.pages); + map((id: string) => state.chat.pageById[id])(state.chat.pages); export const selectCurrentChatPage = (state) => state.chat.pageById[state.chat.currentPageId]; diff --git a/tgui/packages/tgui-panel/game/actions.js b/tgui/packages/tgui-panel/game/actions.ts similarity index 100% rename from tgui/packages/tgui-panel/game/actions.js rename to tgui/packages/tgui-panel/game/actions.ts diff --git a/tgui/packages/tgui-panel/game/constants.js b/tgui/packages/tgui-panel/game/constants.ts similarity index 100% rename from tgui/packages/tgui-panel/game/constants.js rename to tgui/packages/tgui-panel/game/constants.ts diff --git a/tgui/packages/tgui-panel/game/hooks.js b/tgui/packages/tgui-panel/game/hooks.js deleted file mode 100644 index 859aaa09a4072..0000000000000 --- a/tgui/packages/tgui-panel/game/hooks.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { useSelector } from 'common/redux'; -import { selectGame } from './selectors'; - -export const useGame = (context) => { - return useSelector(context, selectGame); -}; diff --git a/tgui/packages/tgui-panel/game/hooks.ts b/tgui/packages/tgui-panel/game/hooks.ts new file mode 100644 index 0000000000000..40a74ff44a068 --- /dev/null +++ b/tgui/packages/tgui-panel/game/hooks.ts @@ -0,0 +1,13 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { useSelector } from 'tgui/backend'; + +import { selectGame } from './selectors'; + +export const useGame = () => { + return useSelector(selectGame); +}; diff --git a/tgui/packages/tgui-panel/game/index.js b/tgui/packages/tgui-panel/game/index.ts similarity index 100% rename from tgui/packages/tgui-panel/game/index.js rename to tgui/packages/tgui-panel/game/index.ts diff --git a/tgui/packages/tgui-panel/game/middleware.js b/tgui/packages/tgui-panel/game/middleware.js index 53dd45bb46e0c..1cf80a7ac63a1 100644 --- a/tgui/packages/tgui-panel/game/middleware.js +++ b/tgui/packages/tgui-panel/game/middleware.js @@ -6,8 +6,8 @@ import { pingSoft, pingSuccess } from '../ping/actions'; import { connectionLost, connectionRestored, roundRestarted } from './actions'; -import { selectGame } from './selectors'; import { CONNECTION_LOST_AFTER } from './constants'; +import { selectGame } from './selectors'; const withTimestamp = (action) => ({ ...action, diff --git a/tgui/packages/tgui-panel/game/reducer.js b/tgui/packages/tgui-panel/game/reducer.ts similarity index 94% rename from tgui/packages/tgui-panel/game/reducer.js rename to tgui/packages/tgui-panel/game/reducer.ts index 97535524c560b..c446db8f029b0 100644 --- a/tgui/packages/tgui-panel/game/reducer.js +++ b/tgui/packages/tgui-panel/game/reducer.ts @@ -16,7 +16,7 @@ const initialState = { }; export const gameReducer = (state = initialState, action) => { - const { type, payload, meta } = action; + const { type, meta } = action; if (type === 'roundrestart') { return { ...state, diff --git a/tgui/packages/tgui-panel/game/selectors.js b/tgui/packages/tgui-panel/game/selectors.ts similarity index 100% rename from tgui/packages/tgui-panel/game/selectors.js rename to tgui/packages/tgui-panel/game/selectors.ts diff --git a/tgui/packages/tgui-panel/index.js b/tgui/packages/tgui-panel/index.tsx similarity index 81% rename from tgui/packages/tgui-panel/index.js rename to tgui/packages/tgui-panel/index.tsx index 6bc6b32c4622b..a70a53bac251e 100644 --- a/tgui/packages/tgui-panel/index.js +++ b/tgui/packages/tgui-panel/index.tsx @@ -10,11 +10,13 @@ import './styles/themes/light.scss'; import { perf } from 'common/perf'; import { combineReducers } from 'common/redux'; -import { setupHotReloading } from 'tgui-dev-server/link/client.cjs'; +import { setGlobalStore } from 'tgui/backend'; import { setupGlobalEvents } from 'tgui/events'; import { captureExternalLinks } from 'tgui/links'; import { createRenderer } from 'tgui/renderer'; -import { configureStore, StoreProvider } from 'tgui/store'; +import { configureStore } from 'tgui/store'; +import { setupHotReloading } from 'tgui-dev-server/link/client.cjs'; + import { audioMiddleware, audioReducer } from './audio'; import { chatMiddleware, chatReducer } from './chat'; import { gameMiddleware, gameReducer } from './game'; @@ -47,12 +49,10 @@ const store = configureStore({ }); const renderApp = createRenderer(() => { + setGlobalStore(store); + const { Panel } = require('./Panel'); - return ( - - - - ); + return ; }); const setupApp = () => { @@ -81,33 +81,36 @@ const setupApp = () => { Byond.winset('browseroutput', { 'is-visible': true, 'is-disabled': false, - 'pos': '0x0', - 'size': '0x0', + pos: '0x0', + size: '0x0', }); // Resize the panel to match the non-browser output - Byond.winget('output').then((output) => { + Byond.winget('output').then((output: { size: string }) => { Byond.winset('browseroutput', { - 'size': output.size, + size: output.size, }); }); // Enable hot module reloading if (module.hot) { setupHotReloading(); - // prettier-ignore - module.hot.accept([ - './audio', - './chat', - './game', - './Notifications', - './Panel', - './ping', - './settings', - './telemetry', - ], () => { - renderApp(); - }); + + module.hot.accept( + [ + './audio', + './chat', + './game', + './Notifications', + './Panel', + './ping', + './settings', + './telemetry', + ], + () => { + renderApp(); + }, + ); } }; diff --git a/tgui/packages/tgui-panel/package.json b/tgui/packages/tgui-panel/package.json index d60ccaaa9b173..f020764a31bc5 100644 --- a/tgui/packages/tgui-panel/package.json +++ b/tgui/packages/tgui-panel/package.json @@ -1,11 +1,14 @@ { "private": true, "name": "tgui-panel", - "version": "4.3.1", + "version": "5.0.0", "dependencies": { + "@types/node": "^14.x", + "@types/react": "^18.2.42", "common": "workspace:*", - "dompurify": "^2.3.1", - "inferno": "^7.4.8", + "dompurify": "^2.4.4", + "react": "^18.2.0", + "react-dom": "^18.2.0", "tgui": "workspace:*", "tgui-dev-server": "workspace:*", "tgui-polyfill": "workspace:*" diff --git a/tgui/packages/tgui-panel/ping/PingIndicator.js b/tgui/packages/tgui-panel/ping/PingIndicator.jsx similarity index 80% rename from tgui/packages/tgui-panel/ping/PingIndicator.js rename to tgui/packages/tgui-panel/ping/PingIndicator.jsx index aadbd1c134b5c..549cd09cf74a8 100644 --- a/tgui/packages/tgui-panel/ping/PingIndicator.js +++ b/tgui/packages/tgui-panel/ping/PingIndicator.jsx @@ -6,12 +6,13 @@ import { Color } from 'common/color'; import { toFixed } from 'common/math'; -import { useSelector } from 'common/redux'; +import { useSelector } from 'tgui/backend'; import { Box } from 'tgui/components'; + import { selectPing } from './selectors'; -export const PingIndicator = (props, context) => { - const ping = useSelector(context, selectPing); +export const PingIndicator = (props) => { + const ping = useSelector(selectPing); const color = Color.lookup(ping.networkQuality, [ new Color(220, 40, 40), new Color(220, 200, 40), diff --git a/tgui/packages/tgui-panel/ping/actions.js b/tgui/packages/tgui-panel/ping/actions.ts similarity index 100% rename from tgui/packages/tgui-panel/ping/actions.js rename to tgui/packages/tgui-panel/ping/actions.ts diff --git a/tgui/packages/tgui-panel/ping/constants.js b/tgui/packages/tgui-panel/ping/constants.ts similarity index 100% rename from tgui/packages/tgui-panel/ping/constants.js rename to tgui/packages/tgui-panel/ping/constants.ts diff --git a/tgui/packages/tgui-panel/ping/index.js b/tgui/packages/tgui-panel/ping/index.ts similarity index 100% rename from tgui/packages/tgui-panel/ping/index.js rename to tgui/packages/tgui-panel/ping/index.ts diff --git a/tgui/packages/tgui-panel/ping/reducer.js b/tgui/packages/tgui-panel/ping/reducer.ts similarity index 71% rename from tgui/packages/tgui-panel/ping/reducer.js rename to tgui/packages/tgui-panel/ping/reducer.ts index b1e3d679cbcc3..10531d23d8477 100644 --- a/tgui/packages/tgui-panel/ping/reducer.js +++ b/tgui/packages/tgui-panel/ping/reducer.ts @@ -5,10 +5,22 @@ */ import { clamp01, scale } from 'common/math'; + import { pingFail, pingSuccess } from './actions'; -import { PING_MAX_FAILS, PING_ROUNDTRIP_BEST, PING_ROUNDTRIP_WORST } from './constants'; +import { + PING_MAX_FAILS, + PING_ROUNDTRIP_BEST, + PING_ROUNDTRIP_WORST, +} from './constants'; + +type PingState = { + roundtrip: number | undefined; + roundtripAvg: number | undefined; + failCount: number; + networkQuality: number; +}; -export const pingReducer = (state = {}, action) => { +export const pingReducer = (state = {} as PingState, action) => { const { type, payload } = action; if (type === pingSuccess.type) { @@ -28,9 +40,9 @@ export const pingReducer = (state = {}, action) => { if (type === pingFail.type) { const { failCount = 0 } = state; const networkQuality = clamp01( - state.networkQuality - failCount / PING_MAX_FAILS + state.networkQuality - failCount / PING_MAX_FAILS, ); - const nextState = { + const nextState: PingState = { ...state, failCount: failCount + 1, networkQuality, diff --git a/tgui/packages/tgui-panel/ping/selectors.js b/tgui/packages/tgui-panel/ping/selectors.ts similarity index 100% rename from tgui/packages/tgui-panel/ping/selectors.js rename to tgui/packages/tgui-panel/ping/selectors.ts diff --git a/tgui/packages/tgui-panel/reconnect.tsx b/tgui/packages/tgui-panel/reconnect.tsx index ecfd76716925b..6d3e6d9759e26 100644 --- a/tgui/packages/tgui-panel/reconnect.tsx +++ b/tgui/packages/tgui-panel/reconnect.tsx @@ -21,7 +21,8 @@ export const ReconnectButton = () => { color="white" onClick={() => { Byond.command('.reconnect'); - }}> + }} + > Reconnect diff --git a/tgui/packages/tgui-panel/settings/SettingsPanel.js b/tgui/packages/tgui-panel/settings/SettingsPanel.jsx similarity index 83% rename from tgui/packages/tgui-panel/settings/SettingsPanel.js rename to tgui/packages/tgui-panel/settings/SettingsPanel.jsx index 90abe4e36b26a..a7c90af8cc922 100644 --- a/tgui/packages/tgui-panel/settings/SettingsPanel.js +++ b/tgui/packages/tgui-panel/settings/SettingsPanel.jsx @@ -6,18 +6,44 @@ import { toFixed } from 'common/math'; import { useLocalState } from 'tgui/backend'; -import { useDispatch, useSelector } from 'common/redux'; -import { Box, Button, ColorBox, Divider, Dropdown, Flex, Input, LabeledList, NumberInput, Section, Stack, Tabs, TextArea } from 'tgui/components'; +import { useDispatch, useSelector } from 'tgui/backend'; +import { + Box, + Button, + ColorBox, + Divider, + Dropdown, + Flex, + Input, + LabeledList, + NumberInput, + Section, + Stack, + Tabs, + TextArea, +} from 'tgui/components'; + import { ChatPageSettings } from '../chat'; import { rebuildChat, saveChatToDisk } from '../chat/actions'; import { THEMES } from '../themes'; -import { changeSettingsTab, updateSettings, addHighlightSetting, removeHighlightSetting, updateHighlightSetting } from './actions'; -import { SETTINGS_TABS, FONTS, MAX_HIGHLIGHT_SETTINGS } from './constants'; -import { selectActiveTab, selectSettings, selectHighlightSettings, selectHighlightSettingById } from './selectors'; +import { + addHighlightSetting, + changeSettingsTab, + removeHighlightSetting, + updateHighlightSetting, + updateSettings, +} from './actions'; +import { FONTS, MAX_HIGHLIGHT_SETTINGS, SETTINGS_TABS } from './constants'; +import { + selectActiveTab, + selectHighlightSettingById, + selectHighlightSettings, + selectSettings, +} from './selectors'; -export const SettingsPanel = (props, context) => { - const activeTab = useSelector(context, selectActiveTab); - const dispatch = useDispatch(context); +export const SettingsPanel = (props) => { + const activeTab = useSelector(selectActiveTab); + const dispatch = useDispatch(); return ( @@ -31,9 +57,10 @@ export const SettingsPanel = (props, context) => { dispatch( changeSettingsTab({ tabId: tab.id, - }) + }), ) - }> + } + > {tab.name} ))} @@ -49,13 +76,11 @@ export const SettingsPanel = (props, context) => { ); }; -export const SettingsGeneral = (props, context) => { - const { theme, fontFamily, fontSize, lineHeight } = useSelector( - context, - selectSettings - ); - const dispatch = useDispatch(context); - const [freeFont, setFreeFont] = useLocalState(context, 'freeFont', false); +export const SettingsGeneral = (props) => { + const { theme, fontFamily, fontSize, lineHeight } = + useSelector(selectSettings); + const dispatch = useDispatch(); + const [freeFont, setFreeFont] = useLocalState('freeFont', false); return (
    @@ -67,7 +92,7 @@ export const SettingsGeneral = (props, context) => { dispatch( updateSettings({ theme: value, - }) + }), ) } /> @@ -83,7 +108,7 @@ export const SettingsGeneral = (props, context) => { dispatch( updateSettings({ fontFamily: value, - }) + }), ) } /> @@ -94,7 +119,7 @@ export const SettingsGeneral = (props, context) => { dispatch( updateSettings({ fontFamily: value, - }) + }), ) } /> @@ -127,7 +152,7 @@ export const SettingsGeneral = (props, context) => { dispatch( updateSettings({ fontSize: value, - }) + }), ) } /> @@ -145,7 +170,7 @@ export const SettingsGeneral = (props, context) => { dispatch( updateSettings({ lineHeight: value, - }) + }), ) } /> @@ -159,9 +184,9 @@ export const SettingsGeneral = (props, context) => { ); }; -const TextHighlightSettings = (props, context) => { - const highlightSettings = useSelector(context, selectHighlightSettings); - const dispatch = useDispatch(context); +const TextHighlightSettings = (props) => { + const highlightSettings = useSelector(selectHighlightSettings); + const dispatch = useDispatch(); return (
    @@ -200,10 +225,10 @@ const TextHighlightSettings = (props, context) => { ); }; -const TextHighlightSetting = (props, context) => { +const TextHighlightSetting = (props) => { const { id, ...rest } = props; - const highlightSettingById = useSelector(context, selectHighlightSettingById); - const dispatch = useDispatch(context); + const highlightSettingById = useSelector(selectHighlightSettingById); + const dispatch = useDispatch(); const { highlightColor, highlightText, @@ -223,7 +248,7 @@ const TextHighlightSetting = (props, context) => { dispatch( removeHighlightSetting({ id: id, - }) + }), ) } /> @@ -239,7 +264,7 @@ const TextHighlightSetting = (props, context) => { updateHighlightSetting({ id: id, highlightWholeMessage: !highlightWholeMessage, - }) + }), ) } /> @@ -255,7 +280,7 @@ const TextHighlightSetting = (props, context) => { updateHighlightSetting({ id: id, matchWord: !matchWord, - }) + }), ) } /> @@ -270,7 +295,7 @@ const TextHighlightSetting = (props, context) => { updateHighlightSetting({ id: id, matchCase: !matchCase, - }) + }), ) } /> @@ -287,7 +312,7 @@ const TextHighlightSetting = (props, context) => { updateHighlightSetting({ id: id, highlightColor: value, - }) + }), ) } /> @@ -302,7 +327,7 @@ const TextHighlightSetting = (props, context) => { updateHighlightSetting({ id: id, highlightText: value, - }) + }), ) } /> diff --git a/tgui/packages/tgui-panel/settings/actions.js b/tgui/packages/tgui-panel/settings/actions.ts similarity index 90% rename from tgui/packages/tgui-panel/settings/actions.js rename to tgui/packages/tgui-panel/settings/actions.ts index 1550bef80ba81..55e5db1126186 100644 --- a/tgui/packages/tgui-panel/settings/actions.js +++ b/tgui/packages/tgui-panel/settings/actions.ts @@ -5,6 +5,7 @@ */ import { createAction } from 'common/redux'; + import { createHighlightSetting } from './model'; export const updateSettings = createAction('settings/update'); @@ -16,11 +17,11 @@ export const addHighlightSetting = createAction( 'settings/addHighlightSetting', () => ({ payload: createHighlightSetting(), - }) + }), ); export const removeHighlightSetting = createAction( - 'settings/removeHighlightSetting' + 'settings/removeHighlightSetting', ); export const updateHighlightSetting = createAction( - 'settings/updateHighlightSetting' + 'settings/updateHighlightSetting', ); diff --git a/tgui/packages/tgui-panel/settings/constants.js b/tgui/packages/tgui-panel/settings/constants.ts similarity index 100% rename from tgui/packages/tgui-panel/settings/constants.js rename to tgui/packages/tgui-panel/settings/constants.ts diff --git a/tgui/packages/tgui-panel/settings/hooks.js b/tgui/packages/tgui-panel/settings/hooks.ts similarity index 52% rename from tgui/packages/tgui-panel/settings/hooks.js rename to tgui/packages/tgui-panel/settings/hooks.ts index da46322f9a942..b37b49a22c808 100644 --- a/tgui/packages/tgui-panel/settings/hooks.js +++ b/tgui/packages/tgui-panel/settings/hooks.ts @@ -4,13 +4,14 @@ * @license MIT */ -import { useDispatch, useSelector } from 'common/redux'; -import { updateSettings, toggleSettings } from './actions'; +import { useDispatch, useSelector } from 'tgui/backend'; + +import { toggleSettings, updateSettings } from './actions'; import { selectSettings } from './selectors'; -export const useSettings = (context) => { - const settings = useSelector(context, selectSettings); - const dispatch = useDispatch(context); +export const useSettings = () => { + const settings = useSelector(selectSettings); + const dispatch = useDispatch(); return { ...settings, visible: settings.view.visible, diff --git a/tgui/packages/tgui-panel/settings/index.js b/tgui/packages/tgui-panel/settings/index.ts similarity index 100% rename from tgui/packages/tgui-panel/settings/index.js rename to tgui/packages/tgui-panel/settings/index.ts diff --git a/tgui/packages/tgui-panel/settings/middleware.js b/tgui/packages/tgui-panel/settings/middleware.js index 705d7a89f3b4a..edb16a51c4c41 100644 --- a/tgui/packages/tgui-panel/settings/middleware.js +++ b/tgui/packages/tgui-panel/settings/middleware.js @@ -5,21 +5,51 @@ */ import { storage } from 'common/storage'; + import { setClientTheme } from '../themes'; -import { loadSettings, updateSettings, addHighlightSetting, removeHighlightSetting, updateHighlightSetting } from './actions'; -import { selectSettings } from './selectors'; +import { + addHighlightSetting, + loadSettings, + removeHighlightSetting, + updateHighlightSetting, + updateSettings, +} from './actions'; import { FONTS_DISABLED } from './constants'; +import { selectSettings } from './selectors'; + +let overrideRule = null; +let overrideFontFamily = null; +let overrideFontSize = null; + +const updateGlobalOverrideRule = () => { + let fontFamily = ''; + + if (overrideFontFamily !== null) { + fontFamily = `font-family: ${overrideFontFamily} !important;`; + } + + const constructedRule = `body * :not(.Icon) { + ${fontFamily} + }`; + + if (overrideRule === null) { + overrideRule = document.createElement('style'); + document.querySelector('head').append(overrideRule); + } + + // no other way to force a CSS refresh other than to update its innerText + overrideRule.innerText = constructedRule; + + document.body.style.setProperty('font-size', overrideFontSize); +}; const setGlobalFontSize = (fontSize) => { - document.documentElement.style.setProperty('font-size', fontSize + 'px'); - document.body.style.setProperty('font-size', fontSize + 'px'); + overrideFontSize = `${fontSize}px`; }; const setGlobalFontFamily = (fontFamily) => { if (fontFamily === FONTS_DISABLED) fontFamily = null; - - document.documentElement.style.setProperty('font-family', fontFamily); - document.body.style.setProperty('font-family', fontFamily); + overrideFontFamily = fontFamily; }; export const settingsMiddleware = (store) => { @@ -50,6 +80,7 @@ export const settingsMiddleware = (store) => { // Update global UI font size setGlobalFontSize(settings.fontSize); setGlobalFontFamily(settings.fontFamily); + updateGlobalOverrideRule(); // Save settings to the web storage storage.set('panel-settings', settings); return; diff --git a/tgui/packages/tgui-panel/settings/model.js b/tgui/packages/tgui-panel/settings/model.ts similarity index 65% rename from tgui/packages/tgui-panel/settings/model.js rename to tgui/packages/tgui-panel/settings/model.ts index b98d0d4fb6f55..e689a676cf5ea 100644 --- a/tgui/packages/tgui-panel/settings/model.js +++ b/tgui/packages/tgui-panel/settings/model.ts @@ -3,7 +3,7 @@ */ import { createUuid } from 'common/uuid'; -export const createHighlightSetting = (obj) => ({ +export const createHighlightSetting = (obj?: Record) => ({ id: createUuid(), highlightText: '', highlightColor: '#ffdd44', @@ -13,7 +13,7 @@ export const createHighlightSetting = (obj) => ({ ...obj, }); -export const createDefaultHighlightSetting = (obj) => +export const createDefaultHighlightSetting = (obj?: Record) => createHighlightSetting({ id: 'default', ...obj, diff --git a/tgui/packages/tgui-panel/settings/reducer.js b/tgui/packages/tgui-panel/settings/reducer.js index 42d799fd65979..1240198df8a3d 100644 --- a/tgui/packages/tgui-panel/settings/reducer.js +++ b/tgui/packages/tgui-panel/settings/reducer.js @@ -4,9 +4,18 @@ * @license MIT */ -import { changeSettingsTab, loadSettings, openChatSettings, toggleSettings, updateSettings, addHighlightSetting, removeHighlightSetting, updateHighlightSetting } from './actions'; +import { + addHighlightSetting, + changeSettingsTab, + loadSettings, + openChatSettings, + removeHighlightSetting, + toggleSettings, + updateHighlightSetting, + updateSettings, +} from './actions'; +import { FONTS, MAX_HIGHLIGHT_SETTINGS, SETTINGS_TABS } from './constants'; import { createDefaultHighlightSetting } from './model'; -import { SETTINGS_TABS, FONTS, MAX_HIGHLIGHT_SETTINGS } from './constants'; const defaultHighlightSetting = createDefaultHighlightSetting(); @@ -131,7 +140,7 @@ export const settingsReducer = (state = initialState, action) => { } else { delete nextState.highlightSettingById[id]; nextState.highlightSettings = nextState.highlightSettings.filter( - (sid) => sid !== id + (sid) => sid !== id, ); if (!nextState.highlightSettings.length) { nextState.highlightSettings.push(defaultHighlightSetting.id); diff --git a/tgui/packages/tgui-panel/settings/selectors.js b/tgui/packages/tgui-panel/settings/selectors.ts similarity index 100% rename from tgui/packages/tgui-panel/settings/selectors.js rename to tgui/packages/tgui-panel/settings/selectors.ts diff --git a/tgui/packages/tgui-panel/styles/components/Chat.scss b/tgui/packages/tgui-panel/styles/components/Chat.scss index e2ca5494d4983..b439ace8c58f1 100644 --- a/tgui/packages/tgui-panel/styles/components/Chat.scss +++ b/tgui/packages/tgui-panel/styles/components/Chat.scss @@ -8,7 +8,7 @@ @use '~tgui/styles/base.scss'; @use '~tgui/styles/colors.scss'; -$text-color: #eeeeee !default; +$text-color: #abc6ec !default; $color-bg-section: base.$color-bg-section !default; .Chat { diff --git a/tgui/packages/tgui-panel/styles/main.scss b/tgui/packages/tgui-panel/styles/main.scss index ee96a9c5a6508..08e60d18ee6a3 100644 --- a/tgui/packages/tgui-panel/styles/main.scss +++ b/tgui/packages/tgui-panel/styles/main.scss @@ -10,7 +10,7 @@ @use '~tgui/styles/base.scss' with ( $color-bg: #202020, $color-bg-section: color.adjust(#202020, $lightness: -5%), - $color-bg-grad-spread: 0%, + $color-bg-grad-spread: 0% ); // Core styles diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss index 17d08a49f9b9e..419078f1f711a 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss @@ -3,6 +3,9 @@ * SPDX-License-Identifier: MIT */ +@use 'sass:map'; +@use 'sass:color'; + em { font-style: normal; font-weight: bold; @@ -276,7 +279,7 @@ em { font-weight: bold; } .colorooc { - color: #004ed8; + color: #4c6dff; font-weight: bold; } @@ -404,16 +407,24 @@ em { } .deadsay { - color: #8041d8; + color: #b560ff; +} +.bigdeadsay { + color: #b560ff; + font-size: 140%; +} +.tinydeadsay { + color: #b560ff; + font-size: 85%; } .radio { - color: #158c15; + color: #1fc01f; } .deptradio { color: #b21ab2; } .comradio { - color: #3e67b2; + color: #517ac5; } .syndradio { color: #7f4648; @@ -426,27 +437,27 @@ em { } .casradio { - color: #a51830; + color: #d62946; } .engradio { - color: #cc631e; + color: #e2772f; } .medradio { - color: #158c78; + color: #25c5aa; } .sciradio { color: #993599; } .supradio { - color: #996f2d; + color: #b88646; } .alpharadio { color: #bf2f2f; } .bravoradio { - color: #cc8814; + color: #d4a046; } .charlieradio { color: #b259b2; @@ -486,7 +497,7 @@ em { } .alert { - color: #ff0000; + color: #c51e1e; } h1.alert, h2.alert { @@ -528,14 +539,19 @@ h2.alert { color: #ff4c4c; } .info { - color: #6666cc; + color: #9ab0ff; } .debuginfo { - color: #6c994c; + color: #33cc33; + font-weight: bold; font-style: italic; } .notice { - color: #6060c9; + color: #6685f5; +} +.tinynotice { + color: #6685f5; + font-size: 85%; } .xenonotice { color: #2c7f5c; @@ -545,13 +561,18 @@ h2.alert { font-weight: bold; } .warning { - color: #ff5959; + color: #c51e1e; font-style: italic; } .xenowarning { color: #2c7f5c; font-style: italic; } +.boldwarning { + color: #c51e1e; + font-style: italic; + font-weight: bold; +} .yautjabold { color: #800080; font-weight: bold; @@ -616,13 +637,13 @@ h2.alert { } } .danger { - color: #ff2626; + color: #c51e1e; font-weight: bold; } .userdanger { - color: #ff0000; + color: #c51e1e; font-weight: bold; - font-size: 3em; + font-size: 185%; } .xenodanger { color: #359980; @@ -633,9 +654,9 @@ h2.alert { font-weight: bold; } .highdanger { - color: #ff2626; + color: #c51e1e; font-weight: bold; - font-size: 1.5em; + font-size: 185%; } .xenohighdanger { color: #359980; @@ -664,8 +685,7 @@ h2.alert { font-size: 1.2em; } // RUTGMC EDIT ADDITION .hivemind { - color: #b23593; - font-weight: bold; + color: #e755c3; } .xenoqueen { font-size: 1.4em; @@ -692,15 +712,14 @@ h2.alert { } .role_header { - color: #db0000; + color: #8fb2ff; display: block; text-align: center; font-weight: bold; - font-family: trebuchet-ms; font-size: 1.5em; } .role_body { - color: #5a5abd; + color: #d41010; display: block; text-align: center; } @@ -714,7 +733,6 @@ h2.alert { color: #db0000; display: block; text-align: center; - font-family: courier; font-weight: bold; font-size: 2em; } @@ -722,7 +740,6 @@ h2.alert { color: #6685f5; display: block; text-align: center; - font-family: trebuchet-ms; font-weight: bold; font-size: 1.5em; } @@ -739,6 +756,17 @@ h2.alert { color: #aeb6bf; } +.announce_header { + color: #ffffff; + font-weight: bold; + font-size: 150%; +} +.announce_body { + color: #e92d2d; + font-weight: normal; + font-size: 125%; +} + .centerbold { text-align: center; font-weight: bold; @@ -1017,6 +1045,15 @@ h2.alert { font-size: 80%; } +.upside_down { + display: inline; + -moz-transform: scale(-1, -1); + -webkit-transform: scale(-1, -1); + -o-transform: scale(-1, -1); + -ms-transform: scale(-1, -1); + transform: scale(-1, -1); +} + .connectionClosed, .fatalError { background: red; @@ -1068,3 +1105,119 @@ h2.alert { font-style: italic; border-bottom: 1px dashed #fff; } + +$alert-stripe-colors: ( + 'default': #00283a, + 'green': #003d00, + 'blue': #00283a, + 'pink': #30001b, + 'yellow': #574a00, + 'orange': #593400, + 'red': #420000, + 'purple': #2c0030, + 'grey': #252525, +); + +$alert-stripe-alternate-colors: ( + 'default': #003045, + 'green': #004700, + 'blue': #003045, + 'pink': #400025, + 'yellow': #4d4100, + 'orange': #6b4200, + 'red': #520000, + 'purple': #38003d, + 'grey': #292929, +); + +$alert-major-header-colors: ( + 'default': #33d5ff, + 'green': #00ff80, + 'blue': #33d5ff, + 'pink': #ff5297, + 'yellow': #fff4e0, + 'orange': #feefe7, + 'red': #ff5297, + 'purple': #c7a1f7, + 'grey': #ff5297, +); + +$alert-subheader-header-colors: ( + 'default': #ff5297, + 'green': #ff85b5, + 'blue': #ff5297, + 'pink': #33d5ff, + 'yellow': #33d5ff, + 'orange': #33d5ff, + 'red': #33d5ff, + 'purple': #33d5ff, + 'grey': #33d5ff, +); + +$border-width: 4; + +$border-width-px: $border-width * 1px; + +.faction_alert_text { + background: #202020; + padding: 0.5rem 0.5rem; +} +.faction_alert_subtitle { + padding: 0 0.5rem; + padding-top: 0.25rem; + font-size: 125%; +} +.faction_alert_title { + padding: 0 0.5rem; + font-size: 185%; +} +.faction_alert_minortitle { + padding: 0 0.5rem; + font-size: 150%; +} +.alert_header { + padding: 0.5rem 0; + display: flex; + flex-direction: column; +} + +@each $color-name, $color-value in $alert-stripe-colors { + .faction_alert_#{$color-name} { + color: #ffffff; + box-shadow: none; + font-weight: bold; + margin: 1rem 0 1rem 0; + padding: 0; + display: flex; + flex-direction: column; + border-image: repeating-linear-gradient( + -45deg, + map.get($alert-stripe-alternate-colors, $color-name), + map.get($alert-stripe-alternate-colors, $color-name) 10px, + $color-value 10px, + $color-value 20px + ); + border-image-slice: $border-width fill; + border-width: $border-width-px; + border-image-width: $border-width-px; + border-image-outset: 0 0 0 0; + border-image-repeat: repeat repeat; + border-style: solid; + } + + .faction_alert_#{$color-name} .faction_alert_title { + color: map.get($alert-major-header-colors, $color-name); + } + + .faction_alert_#{$color-name} .faction_alert_minortitle { + color: map.get($alert-major-header-colors, $color-name); + } + + .faction_alert_#{$color-name} .faction_alert_subtitle { + color: map.get($alert-subheader-header-colors, $color-name); + } + + .faction_alert_#{$color-name} .faction_alert_text { + background-color: darken(map.get($alert-stripe-colors, $color-name), 5); + } +} diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss index d62fa43dc7d71..60cac659c72a5 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss @@ -3,6 +3,9 @@ * SPDX-License-Identifier: MIT */ +@use 'sass:map'; +@use 'sass:color'; + html, body { padding: 0; @@ -416,25 +419,33 @@ em { .deadsay { color: #5c00e6; } +.bigdeadsay { + color: #5c00e6; + font-size: 140%; +} +.tinydeadsay { + color: #5c00e6; + font-size: 85%; +} .radio { color: #158c15; } .deptradio { - color: #993399; + color: #b21ab2; } .comradio { - color: #004080; + color: #517ac5; } .syndradio { - color: #6d3f40; + color: #7f4648; } .centradio { - color: #5c5c8a; + color: #636399; } .airadio { - color: #ff00ff; + color: #b21ab2; } .casradio { @@ -447,10 +458,10 @@ em { color: #008160; } .sciradio { - color: #993399; + color: #993599; } .supradio { - color: #5f4519; + color: #a8732b; } .alpharadio { @@ -542,12 +553,17 @@ h2.alert { color: #0000cc; } .debuginfo { - color: #493d26; + color: #33cc33; + font-weight: bold; font-style: italic; } .notice { color: #000099; } +.tinynotice { + color: #000099; + font-size: 85%; +} .xenonotice { color: #2a623d; } @@ -563,6 +579,11 @@ h2.alert { color: #2a623d; font-style: italic; } +.boldwarning { + color: #ff0000; + font-style: italic; + font-weight: bold; +} .yautjabold { color: #800080; font-weight: bold; @@ -633,7 +654,7 @@ h2.alert { .userdanger { color: #ff0000; font-weight: bold; - font-size: 3em; + font-size: 185%; } .xenodanger { color: #2a623d; @@ -646,7 +667,7 @@ h2.alert { .highdanger { color: #ff0000; font-weight: bold; - font-size: 1.5em; + font-size: 185%; } .xenohighdanger { color: #2a623d; @@ -702,15 +723,14 @@ h2.alert { } .role_header { - color: #db0000; + color: #000000; display: block; text-align: center; font-weight: bold; - font-family: trebuchet-ms; font-size: 1.5em; } .role_body { - color: #000099; + color: #db0000; display: block; text-align: center; } @@ -723,7 +743,6 @@ h2.alert { color: #db0000; display: block; text-align: center; - font-family: courier; font-weight: bold; font-size: 2em; } @@ -731,7 +750,6 @@ h2.alert { color: #001427; display: block; text-align: center; - font-family: trebuchet-ms; font-weight: bold; font-size: 1.5em; } @@ -749,6 +767,17 @@ h2.alert { color: #283747; } +.announce_header { + color: #000000; + font-weight: bold; + font-size: 150%; +} +.announce_body { + color: #ff0000; + font-weight: normal; + font-size: 125%; +} + .centerbold { text-align: center; font-weight: bold; @@ -1049,6 +1078,15 @@ h2.alert { font-size: 80%; } +.upside_down { + display: inline; + -moz-transform: scale(-1, -1); + -webkit-transform: scale(-1, -1); + -o-transform: scale(-1, -1); + -ms-transform: scale(-1, -1); + transform: scale(-1, -1); +} + .connectionClosed, .fatalError { background: red; @@ -1100,3 +1138,123 @@ h2.alert { font-style: italic; border-bottom: 1px dashed #000; } + +$alert-stripe-colors: ( + 'default': #b3bfff, + 'green': #adffad, + 'blue': #b3bfff, + 'pink': #ffb3df, + 'yellow': #fff3b3, + 'orange': #ffe2b3, + 'red': #ffb3b3, + 'purple': #fac2ff, + 'grey': #e3e3e3, +); + +$alert-stripe-alternate-colors: ( + 'default': #bdc8ff, + 'green': #bdffbd, + 'blue': #bdc8ff, + 'pink': #ffc2e5, + 'yellow': #fff5c2, + 'orange': #ffe8c2, + 'red': #ffc2c2, + 'purple': #fbd1ff, + 'grey': #ebebeb, +); + +$alert-major-header-colors: ( + 'default': #003061, + 'green': #005229, + 'blue': #003061, + 'pink': #800033, + 'yellow': #754900, + 'orange': #823208, + 'red': #800029, + 'purple': #450d8c, + 'grey': #800033, +); + +$alert-subheader-header-colors: ( + 'default': #6b0020, + 'green': #6b0020, + 'blue': #6b0020, + 'pink': #002c85, + 'yellow': #002c85, + 'orange': #002c85, + 'red': #002c85, + 'purple': #002c85, + 'grey': #002c85, +); + +$border-width: 4; + +$border-width-px: $border-width * 1px; + +.faction_alert_text { + color: #202020; + background: #eaeaea; + padding: 0.5rem 0.5rem; +} +.faction_alert_subtitle { + padding: 0 0.5rem; + padding-top: 0.25rem; + font-size: 125%; +} +.faction_alert_title { + padding: 0 0.5rem; + font-size: 185%; +} +.faction_alert_minortitle { + padding: 0 0.5rem; + font-size: 150%; +} +.alert_header { + padding: 0.5rem 0; + display: flex; + flex-direction: column; +} + +@each $color-name, $color-value in $alert-stripe-colors { + .faction_alert_#{$color-name} { + color: #ffffff; + box-shadow: none; + font-weight: bold; + margin: 1rem 0 1rem 0; + padding: 0; + display: flex; + flex-direction: column; + border-image: repeating-linear-gradient( + -45deg, + map.get($alert-stripe-alternate-colors, $color-name), + map.get($alert-stripe-alternate-colors, $color-name) 10px, + $color-value 10px, + $color-value 20px + ); + border-image-slice: $border-width fill; + border-width: $border-width-px; + border-image-width: $border-width-px; + border-image-outset: 0 0 0 0; + border-image-repeat: repeat repeat; + border-style: solid; + } + + .faction_alert_#{$color-name} .faction_alert_title { + color: map.get($alert-major-header-colors, $color-name); + } + + .faction_alert_#{$color-name} .faction_alert_minortitle { + color: map.get($alert-major-header-colors, $color-name); + } + + .faction_alert_#{$color-name} .faction_alert_subtitle { + color: map.get($alert-subheader-header-colors, $color-name); + } + + .faction_alert_#{$color-name} .faction_alert_text { + background-color: lighten( + map.get($alert-stripe-alternate-colors, $color-name), + 5 + ); + } +} diff --git a/tgui/packages/tgui-panel/styles/themes/light.scss b/tgui/packages/tgui-panel/styles/themes/light.scss index 1f752d51d6326..19ddd3642cd91 100644 --- a/tgui/packages/tgui-panel/styles/themes/light.scss +++ b/tgui/packages/tgui-panel/styles/themes/light.scss @@ -22,7 +22,7 @@ $color-fg: #000000, $color-bg: #eeeeee, $color-bg-section: #ffffff, - $color-bg-grad-spread: 0%, + $color-bg-grad-spread: 0% ); // A fat warning to anyone who wants to use this: this only half works. diff --git a/tgui/packages/tgui-panel/telemetry.js b/tgui/packages/tgui-panel/telemetry.js index d1f7346af60fe..3b1eb9a95000c 100644 --- a/tgui/packages/tgui-panel/telemetry.js +++ b/tgui/packages/tgui-panel/telemetry.js @@ -11,12 +11,10 @@ const logger = createLogger('telemetry'); const MAX_CONNECTIONS_STORED = 10; -// prettier-ignore -const connectionsMatch = (a, b) => ( - a.ckey === b.ckey - && a.address === b.address - && a.computer_id === b.computer_id -); +const connectionsMatch = (a, b) => + a.ckey === b.ckey && + a.address === b.address && + a.computer_id === b.computer_id; export const telemetryMiddleware = (store) => { let telemetry; @@ -58,9 +56,10 @@ export const telemetryMiddleware = (store) => { } // Append a connection record let telemetryMutated = false; - // prettier-ignore - const duplicateConnection = telemetry.connections - .find(conn => connectionsMatch(conn, client)); + + const duplicateConnection = telemetry.connections.find((conn) => + connectionsMatch(conn, client), + ); if (!duplicateConnection) { telemetryMutated = true; telemetry.connections.unshift(client); diff --git a/tgui/packages/tgui-panel/themes.js b/tgui/packages/tgui-panel/themes.ts similarity index 98% rename from tgui/packages/tgui-panel/themes.js rename to tgui/packages/tgui-panel/themes.ts index be8706f1d4813..a9443a70bfe9d 100644 --- a/tgui/packages/tgui-panel/themes.js +++ b/tgui/packages/tgui-panel/themes.ts @@ -8,9 +8,9 @@ export const THEMES = ['light', 'dark']; const COLOR_DARK_BG = '#202020'; const COLOR_DARK_BG_DARKER = '#171717'; -const COLOR_DARK_TEXT = '#eeeeee'; +const COLOR_DARK_TEXT = '#a4bad6'; -let setClientThemeTimer = null; +let setClientThemeTimer: NodeJS.Timeout; /** * Darkmode preference, originally by Kmc2000. diff --git a/tgui/packages/tgui-polyfill/00-html5shiv.js b/tgui/packages/tgui-polyfill/00-html5shiv.js deleted file mode 100644 index ce4b97576fa9d..0000000000000 --- a/tgui/packages/tgui-polyfill/00-html5shiv.js +++ /dev/null @@ -1,331 +0,0 @@ -/** - * @file - * @copyright 2014 Alexander Farkas - * @license MIT - */ - -/* eslint-disable */ -// prettier-ignore -(function(window, document) { -/*jshint evil:true */ - /** version */ - var version = '3.7.3'; - - /** Preset options */ - var options = window.html5 || {}; - - /** Used to skip problem elements */ - var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i; - - /** Not all elements can be cloned in IE **/ - var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i; - - /** Detect whether the browser supports default html5 styles */ - var supportsHtml5Styles; - - /** Name of the expando, to work with multiple documents or to re-shiv one document */ - var expando = '_html5shiv'; - - /** The id for the the documents expando */ - var expanID = 0; - - /** Cached data for each document */ - var expandoData = {}; - - /** Detect whether the browser supports unknown elements */ - var supportsUnknownElements; - - (function() { - try { - var a = document.createElement('a'); - a.innerHTML = ''; - //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles - supportsHtml5Styles = ('hidden' in a); - - supportsUnknownElements = a.childNodes.length == 1 || (function() { - // assign a false positive if unable to shiv - (document.createElement)('a'); - var frag = document.createDocumentFragment(); - return ( - typeof frag.cloneNode == 'undefined' || - typeof frag.createDocumentFragment == 'undefined' || - typeof frag.createElement == 'undefined' - ); - }()); - } catch(e) { - // assign a false positive if detection fails => unable to shiv - supportsHtml5Styles = true; - supportsUnknownElements = true; - } - - }()); - - /*--------------------------------------------------------------------------*/ - - /** - * Creates a style sheet with the given CSS text and adds it to the document. - * @private - * @param {Document} ownerDocument The document. - * @param {String} cssText The CSS text. - * @returns {StyleSheet} The style element. - */ - function addStyleSheet(ownerDocument, cssText) { - var p = ownerDocument.createElement('p'), - parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement; - - p.innerHTML = 'x'; - return parent.insertBefore(p.lastChild, parent.firstChild); - } - - /** - * Returns the value of `html5.elements` as an array. - * @private - * @returns {Array} An array of shived element node names. - */ - function getElements() { - var elements = html5.elements; - return typeof elements == 'string' ? elements.split(' ') : elements; - } - - /** - * Extends the built-in list of html5 elements - * @memberOf html5 - * @param {String|Array} newElements whitespace separated list or array of new element names to shiv - * @param {Document} ownerDocument The context document. - */ - function addElements(newElements, ownerDocument) { - var elements = html5.elements; - if(typeof elements != 'string'){ - elements = elements.join(' '); - } - if(typeof newElements != 'string'){ - newElements = newElements.join(' '); - } - html5.elements = elements +' '+ newElements; - shivDocument(ownerDocument); - } - - /** - * Returns the data associated to the given document - * @private - * @param {Document} ownerDocument The document. - * @returns {Object} An object of data. - */ - function getExpandoData(ownerDocument) { - var data = expandoData[ownerDocument[expando]]; - if (!data) { - data = {}; - expanID++; - ownerDocument[expando] = expanID; - expandoData[expanID] = data; - } - return data; - } - - /** - * returns a shived element for the given nodeName and document - * @memberOf html5 - * @param {String} nodeName name of the element - * @param {Document|DocumentFragment} ownerDocument The context document. - * @returns {Object} The shived element. - */ - function createElement(nodeName, ownerDocument, data){ - if (!ownerDocument) { - ownerDocument = document; - } - if(supportsUnknownElements){ - return ownerDocument.createElement(nodeName); - } - if (!data) { - data = getExpandoData(ownerDocument); - } - var node; - - if (data.cache[nodeName]) { - node = data.cache[nodeName].cloneNode(); - } else if (saveClones.test(nodeName)) { - node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode(); - } else { - node = data.createElem(nodeName); - } - - // Avoid adding some elements to fragments in IE < 9 because - // * Attributes like `name` or `type` cannot be set/changed once an element - // is inserted into a document/fragment - // * Link elements with `src` attributes that are inaccessible, as with - // a 403 response, will cause the tab/window to crash - // * Script elements appended to fragments will execute when their `src` - // or `text` property is set - return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node; - } - - /** - * returns a shived DocumentFragment for the given document - * @memberOf html5 - * @param {Document} ownerDocument The context document. - * @returns {Object} The shived DocumentFragment. - */ - function createDocumentFragment(ownerDocument, data){ - if (!ownerDocument) { - ownerDocument = document; - } - if(supportsUnknownElements){ - return ownerDocument.createDocumentFragment(); - } - data = data || getExpandoData(ownerDocument); - var clone = data.frag.cloneNode(), - i = 0, - elems = getElements(), - l = elems.length; - for(;i 3 ? getModifier(init) : null, - key = String(init.key), - chr = String(init.char), - location = init.location, - keyCode = init.keyCode || ( - (init.keyCode = key) && - key.charCodeAt(0) - ) || 0, - charCode = init.charCode || ( - (init.charCode = chr) && - chr.charCodeAt(0) - ) || 0, - bubbles = init.bubbles, - cancelable = init.cancelable, - repeat = init.repeat, - locale = init.locale, - view = init.view || window, - args - ; - if (!init.which) init.which = init.keyCode; - if ('initKeyEvent' in out) { - out.initKeyEvent( - type, bubbles, cancelable, view, - ctrlKey, altKey, shiftKey, metaKey, keyCode, charCode - ); - } else if (0 < initType && 'initKeyboardEvent' in out) { - args = [type, bubbles, cancelable, view]; - switch (initType) { - case 1: - args.push(key, location, ctrlKey, shiftKey, altKey, metaKey, altGraphKey); - break; - case 2: - args.push(ctrlKey, altKey, shiftKey, metaKey, keyCode, charCode); - break; - case 3: - args.push(key, location, ctrlKey, altKey, shiftKey, metaKey, altGraphKey); - break; - case 4: - args.push(key, location, modifiers, repeat, locale); - break; - default: - args.push(char, key, location, modifiers, repeat, locale); - } - out.initKeyboardEvent.apply(out, args); - } else { - out.initEvent(type, bubbles, cancelable); - } - for (key in out) { - if (defaults.hasOwnProperty(key) && out[key] !== init[key]) { - withInitValues(key, out, init); - } - } - return out; - } - KeyboardEvent.prototype = $KeyboardEvent.prototype; - return KeyboardEvent; - }(window.KeyboardEvent || function KeyboardEvent() {})); - defineProperty(window, 'KeyboardEvent', {value: o_O}); - // Android 4 gotcha - if (KeyboardEvent !== o_O) KeyboardEvent = o_O; - } - - // window.MouseEvent as constructor - try { new MouseEvent('_', {}); } catch (o_O) { - /* jshint -W022 */ - o_O = (function ($MouseEvent) { - function MouseEvent(type, init) { - enoughArguments(arguments.length, 'MouseEvent'); - var out = document.createEvent('MouseEvent'); - if (!init) init = {}; - out.initMouseEvent( - type, - !!init.bubbles, - !!init.cancelable, - init.view || window, - init.detail || 1, - init.screenX || 0, - init.screenY || 0, - init.clientX || 0, - init.clientY || 0, - !!init.ctrlKey, - !!init.altKey, - !!init.shiftKey, - !!init.metaKey, - init.button || 0, - init.relatedTarget || null - ); - return out; - } - MouseEvent.prototype = $MouseEvent.prototype; - return MouseEvent; - }(window.MouseEvent || function MouseEvent() {})); - defineProperty(window, 'MouseEvent', {value: o_O}); - // Android 4 gotcha - if (MouseEvent !== o_O) MouseEvent = o_O; - } - - if (!document.querySelectorAll('*').forEach) { - (function () { - function patch(what) { - var querySelectorAll = what.querySelectorAll; - what.querySelectorAll = function qSA(css) { - var result = querySelectorAll.call(this, css); - result.forEach = Array.prototype.forEach; - return result; - }; - } - patch(document); - patch(Element.prototype); - }()); - } - - try { - // https://drafts.csswg.org/selectors-4/#the-scope-pseudo - document.querySelector(':scope *'); - } catch(o_O) { - (function () { - var dataScope = 'data-scope-' + (Math.random() * 1e9 >>> 0); - var proto = Element.prototype; - var querySelector = proto.querySelector; - var querySelectorAll = proto.querySelectorAll; - proto.querySelector = function qS(css) { - return find(this, querySelector, css); - }; - proto.querySelectorAll = function qSA(css) { - return find(this, querySelectorAll, css); - }; - function find(node, method, css) { - node.setAttribute(dataScope, null); - var result = method.call( - node, - String(css).replace( - /(^|,\s*)(:scope([ >]|$))/g, - function ($0, $1, $2, $3) { - return $1 + '[' + dataScope + ']' + ($3 || ' '); - } - ) - ); - node.removeAttribute(dataScope); - return result; - } - }()); - } -}(window)); - -// prettier-ignore -(function (global){'use strict'; - - // a WeakMap fallback for DOM nodes only used as key - var DOMMap = global.WeakMap || (function () { - - var - counter = 0, - dispatched = false, - drop = false, - value - ; - - function dispatch(key, ce, shouldDrop) { - drop = shouldDrop; - dispatched = false; - value = undefined; - key.dispatchEvent(ce); - } - - function Handler(value) { - this.value = value; - } - - Handler.prototype.handleEvent = function handleEvent(e) { - dispatched = true; - if (drop) { - e.currentTarget.removeEventListener(e.type, this, false); - } else { - value = this.value; - } - }; - - function DOMMap() { - counter++; // make id clashing highly improbable - this.__ce__ = new Event(('@DOMMap:' + counter) + Math.random()); - } - - DOMMap.prototype = { - 'constructor': DOMMap, - 'delete': function del(key) { - return dispatch(key, this.__ce__, true), dispatched; - }, - 'get': function get(key) { - dispatch(key, this.__ce__, false); - var v = value; - value = undefined; - return v; - }, - 'has': function has(key) { - return dispatch(key, this.__ce__, false), dispatched; - }, - 'set': function set(key, value) { - dispatch(key, this.__ce__, true); - key.addEventListener(this.__ce__.type, new Handler(value), false); - return this; - }, - }; - - return DOMMap; - - }()); - - function Dict() {} - Dict.prototype = (Object.create || Object)(null); - - // https://dom.spec.whatwg.org/#interface-eventtarget - - function createEventListener(type, callback, options) { - function eventListener(e) { - if (eventListener.once) { - e.currentTarget.removeEventListener( - e.type, - callback, - eventListener - ); - eventListener.removed = true; - } - if (eventListener.passive) { - e.preventDefault = createEventListener.preventDefault; - } - if (typeof eventListener.callback === 'function') { - /* jshint validthis: true */ - eventListener.callback.call(this, e); - } else if (eventListener.callback) { - eventListener.callback.handleEvent(e); - } - if (eventListener.passive) { - delete e.preventDefault; - } - } - eventListener.type = type; - eventListener.callback = callback; - eventListener.capture = !!options.capture; - eventListener.passive = !!options.passive; - eventListener.once = !!options.once; - // currently pointless but specs say to use it, so ... - eventListener.removed = false; - return eventListener; - } - - createEventListener.preventDefault = function preventDefault() {}; - - var - Event = global.CustomEvent, - dE = global.dispatchEvent, - aEL = global.addEventListener, - rEL = global.removeEventListener, - counter = 0, - increment = function () { counter++; }, - indexOf = [].indexOf || function indexOf(value){ - var length = this.length; - while(length--) { - if (this[length] === value) { - break; - } - } - return length; - }, - getListenerKey = function (options) { - return ''.concat( - options.capture ? '1' : '0', - options.passive ? '1' : '0', - options.once ? '1' : '0' - ); - }, - augment - ; - - try { - aEL('_', increment, {once: true}); - dE(new Event('_')); - dE(new Event('_')); - rEL('_', increment, {once: true}); - } catch(o_O) {} - - if (counter !== 1) { - (function () { - var dm = new DOMMap(); - function createAEL(aEL) { - return function addEventListener(type, handler, options) { - if (options && typeof options !== 'boolean') { - var - info = dm.get(this), - key = getListenerKey(options), - i, tmp, wrap - ; - if (!info) dm.set(this, (info = new Dict())); - if (!(type in info)) info[type] = { - handler: [], - wrap: [] - }; - tmp = info[type]; - i = indexOf.call(tmp.handler, handler); - if (i < 0) { - i = tmp.handler.push(handler) - 1; - tmp.wrap[i] = (wrap = new Dict()); - } else { - wrap = tmp.wrap[i]; - } - if (!(key in wrap)) { - wrap[key] = createEventListener(type, handler, options); - aEL.call(this, type, wrap[key], wrap[key].capture); - } - } else { - aEL.call(this, type, handler, options); - } - }; - } - function createREL(rEL) { - return function removeEventListener(type, handler, options) { - if (options && typeof options !== 'boolean') { - var - info = dm.get(this), - key, i, tmp, wrap - ; - if (info && (type in info)) { - tmp = info[type]; - i = indexOf.call(tmp.handler, handler); - if (-1 < i) { - key = getListenerKey(options); - wrap = tmp.wrap[i]; - if (key in wrap) { - rEL.call(this, type, wrap[key], wrap[key].capture); - delete wrap[key]; - // return if there are other wraps - for (key in wrap) return; - // otherwise remove all the things - tmp.handler.splice(i, 1); - tmp.wrap.splice(i, 1); - // if there are no other handlers - if (tmp.handler.length === 0) - // drop the info[type] entirely - delete info[type]; - } - } - } - } else { - rEL.call(this, type, handler, options); - } - }; - } - - augment = function (Constructor) { - if (!Constructor) return; - var proto = Constructor.prototype; - proto.addEventListener = createAEL(proto.addEventListener); - proto.removeEventListener = createREL(proto.removeEventListener); - }; - - if (global.EventTarget) { - augment(EventTarget); - } else { - augment(global.Text); - augment(global.Element || global.HTMLElement); - augment(global.HTMLDocument); - augment(global.Window || {prototype:global}); - augment(global.XMLHttpRequest); - } - - }()); - } - -}(window)); diff --git a/tgui/packages/tgui-polyfill/03-css-om.js b/tgui/packages/tgui-polyfill/03-css-om.js deleted file mode 100644 index 0fb11eee28065..0000000000000 --- a/tgui/packages/tgui-polyfill/03-css-om.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * CSS Object Model patches - * - * Adapted from: https://github.com/shawnbot/aight - * - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -/* eslint-disable */ -// prettier-ignore -(function(Proto) { - 'use strict'; - - if (typeof Proto.setAttribute !== 'undefined') { - function toAttr(prop) { - return prop.replace(/-[a-z]/g, function (bit) { - return bit[1].toUpperCase(); - }); - } - - Proto.setProperty = function (prop, value) { - var attr = toAttr(prop); - if (!value) { - return this.removeAttribute(attr); - } - var str = String(value); - return this.setAttribute(attr, str); - }; - - Proto.getPropertyValue = function (prop) { - var attr = toAttr(prop); - return this.getAttribute(attr) || null; - }; - - Proto.removeProperty = function (prop) { - var attr = toAttr(prop); - var value = this.getAttribute(attr); - this.removeAttribute(attr); - return value; - }; - } - -})(CSSStyleDeclaration.prototype); diff --git a/tgui/packages/tgui-polyfill/1-misc.js b/tgui/packages/tgui-polyfill/1-misc.js new file mode 100644 index 0000000000000..cefbdbdbdfce6 --- /dev/null +++ b/tgui/packages/tgui-polyfill/1-misc.js @@ -0,0 +1,48 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +/* eslint-disable */ +(function () { + 'use strict'; + + // ie11 polyfills + !(function () { + // append + function t() { + var e = Array.prototype.slice.call(arguments), + n = document.createDocumentFragment(); + e.forEach(function (e) { + var t = e instanceof Node; + n.appendChild(t ? e : document.createTextNode(String(e))); + }), + this.appendChild(n); + } + // remove + function n() { + this.parentNode && this.parentNode.removeChild(this); + } + + // add to prototype + [Element.prototype, Document.prototype, DocumentFragment.prototype].forEach( + function (e) { + e.hasOwnProperty('append') || + Object.defineProperty(e, 'append', { + configurable: !0, + enumerable: !0, + writable: !0, + value: t, + }); + e.hasOwnProperty('remove') || + Object.defineProperty(e, 'remove', { + configurable: !0, + enumerable: !0, + writable: !0, + value: n, + }); + } + ); + })(); +})(); diff --git a/tgui/packages/tgui-polyfill/10-misc.js b/tgui/packages/tgui-polyfill/10-misc.js deleted file mode 100644 index 9849166c2df8f..0000000000000 --- a/tgui/packages/tgui-polyfill/10-misc.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -/* eslint-disable */ -// prettier-ignore -(function () { - 'use strict'; - - // Necessary polyfill to make Webpack code splitting work on IE8 - if (!Function.prototype.bind) (function () { - var slice = Array.prototype.slice; - Function.prototype.bind = function () { - var thatFunc = this, thatArg = arguments[0]; - var args = slice.call(arguments, 1); - if (typeof thatFunc !== 'function') { - // closest thing possible to the ECMAScript 5 - // internal IsCallable function - throw new TypeError('Function.prototype.bind - ' + - 'what is trying to be bound is not callable'); - } - return function () { - var funcArgs = args.concat(slice.call(arguments)) - return thatFunc.apply(thatArg, funcArgs); - }; - }; - })(); - - if (!Array.prototype['forEach']) { - Array.prototype.forEach = function (callback, thisArg) { - if (this == null) { - throw new TypeError('Array.prototype.forEach called on null or undefined'); - } - var T, k; - var O = Object(this); - var len = O.length >>> 0; - if (typeof callback !== "function") { - throw new TypeError(callback + ' is not a function'); - } - if (arguments.length > 1) { - T = thisArg; - } - k = 0; - while (k < len) { - var kValue; - if (k in O) { - kValue = O[k]; - callback.call(T, kValue, k, O); - } - k++; - } - }; - } - - // Inferno needs Int32Array, and it is not covered by core-js. - if (!window.Int32Array) { - window.Int32Array = Array; - } - -})(); diff --git a/tgui/packages/tgui-polyfill/package.json b/tgui/packages/tgui-polyfill/package.json index 4c74e18cf8117..8e43bb872246f 100644 --- a/tgui/packages/tgui-polyfill/package.json +++ b/tgui/packages/tgui-polyfill/package.json @@ -1,16 +1,16 @@ { "private": true, "name": "tgui-polyfill", - "version": "4.3.1", + "version": "5.0.0", "scripts": { - "tgui-polyfill:build": "terser 00-html5shiv.js 01-ie8.js 02-dom4.js 03-css-om.js 10-misc.js --ie8 -f ascii_only,comments=false -o ../../public/tgui-polyfill.min.js" + "tgui-polyfill:build": "terser 1-misc.js -f ascii_only,comments=false -o ../../public/tgui-polyfill.min.js" }, "dependencies": { - "core-js": "^3.16.1", - "regenerator-runtime": "^0.13.9", - "unfetch": "^4.2.0" + "core-js": "^3.33.3", + "regenerator-runtime": "^0.14.0", + "unfetch": "^5.0.0" }, "devDependencies": { - "terser": "^5.14.2" + "terser": "^5.24.0" } } diff --git a/tgui/packages/tgui-say/TguiSay.tsx b/tgui/packages/tgui-say/TguiSay.tsx index 6781d36a74d55..26e86bf8d53d0 100644 --- a/tgui/packages/tgui-say/TguiSay.tsx +++ b/tgui/packages/tgui-say/TguiSay.tsx @@ -1,12 +1,13 @@ +import { KEY } from 'common/keys'; +import { BooleanLike } from 'common/react'; +import { Component, createRef, RefObject } from 'react'; +import { dragStartHandler } from 'tgui/drag'; + import { Channel, ChannelIterator } from './ChannelIterator'; import { ChatHistory } from './ChatHistory'; -import { Component, createRef, InfernoKeyboardEvent, RefObject } from 'inferno'; import { LINE_LENGTHS, RADIO_PREFIXES, WINDOW_SIZES } from './constants'; +import { windowClose, windowOpen, windowSet } from './helpers'; import { byondMessages } from './timers'; -import { dragStartHandler } from 'tgui/drag'; -import { windowOpen, windowLoad, windowClose, windowSet } from './helpers'; -import { BooleanLike } from 'common/react'; -import { KEY } from 'common/keys'; type ByondOpen = { channel: Channel; @@ -68,7 +69,6 @@ export class TguiSay extends Component<{}, State> { Byond.subscribeTo('props', this.handleProps); Byond.subscribeTo('force', this.handleForceSay); Byond.subscribeTo('open', this.handleOpen); - windowLoad(); } handleArrowKeys(direction: KEY.Up | KEY.Down) { @@ -222,7 +222,7 @@ export class TguiSay extends Component<{}, State> { this.setValue(typed.slice(3)); } - handleKeyDown(event: InfernoKeyboardEvent) { + handleKeyDown(event) { switch (event.key) { case KEY.Up: case KEY.Down: @@ -311,17 +311,16 @@ export class TguiSay extends Component<{}, State> { this.channelIterator.current(); return ( -
    +
    -
    +
    -
    +